diff --git a/AUTHORS.txt b/AUTHORS.txt index 86245ccd90..d57fcf2d23 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -26,10 +26,11 @@ Walter Pearce # CONTRIBUTORS 11RDP-LoupVert [BIG]Bull -ACCtomeek +ACCtomeek Adanteh aeroson Aggr094 +Anthariel BlackQwar Brakoviejo Codingboy @@ -40,9 +41,10 @@ Falke75 Ferenczi Ferenzi Filip Basara (Logo) +FreeZbe geraldbolso1899 Ghost -gienkov +GieNkoV gpgpgpgp Grzegorz Hamburger SV @@ -50,8 +52,9 @@ havena Hawkins jokoho48 Jonpas +Kllrt Legolasindar "Viper" -licht-im-Norden87 +licht-im-Norden87 MarcBook Michail Nikolaev nic547 @@ -66,3 +69,8 @@ Sniperwolf572 Tonic Tourorist Valentin Torikian +zGuba +Aleksey EpMAK Yermakov +ruPaladin +BlackPixxel +Asgar Serran diff --git a/addons/aircraft/stringtable.xml b/addons/aircraft/stringtable.xml index 4d1c49fff6..c0966ddcfb 100644 --- a/addons/aircraft/stringtable.xml +++ b/addons/aircraft/stringtable.xml @@ -40,7 +40,7 @@ Close Cargo Door Laderampe schließen Cerrar compuerta de carga - Fermer Rampe Cargo + Fermer la Rampe du Cargo Zamknij drzwi ładowni Zavřít nákladní prostor Rámpát zárni diff --git a/addons/attach/stringtable.xml b/addons/attach/stringtable.xml index 27a0517f9a..7aa3f0d6ee 100644 --- a/addons/attach/stringtable.xml +++ b/addons/attach/stringtable.xml @@ -1,5 +1,4 @@  - @@ -44,11 +43,11 @@ Marcador IR acoplado Przyczepiono stroboskop IR Strobe IR attaché - IR Značkovač Připnutý + IR Značkovač připnutý Marcador IV Acoplado Strobo IR attaccata Infravörös jeladó hozzácsatolva - ИК строб присоединён + ИК-маяк присоединён IR Strobe Detached @@ -56,11 +55,11 @@ Marcador IR quitado Odczepiono stroboskop IR Strobe IR détaché - IR Značkovač Odepnutý + IR Značkovač odepnutý Marcador IV Separado Strobo IR staccata Infravörös jeladó lecsatolva - ИК строб отсоединён + ИК-маяк отсоединён IR Grenade Attached @@ -68,11 +67,11 @@ Granada IR acoplada Przyczepiono granat IR Grenade IR attachée - IR Granát Připnutý + IR Granát připnutý Granada IV Acoplada Granata IR attaccata Infravörös gránát hozzácsatolva - ИК граната присоединена + ИК-граната присоединена IR Grenade Detached @@ -80,11 +79,11 @@ Granada IR quitada Odczepiono granat IR Grenade IR détachée - IR Granát Odepnutý + IR Granát odepnutý Granada IV Separada Granata IR staccata Infravörös gránát lecsatolva - ИК граната отсоединена + ИК-граната отсоединена Chemlight Attached @@ -92,7 +91,7 @@ Barra de luz acoplada Przyczepiono światło chemiczne Chemlight attaché - Chemické světlo Připnuto + Chemické světlo připnuto Chemlight Acoplada Chemlight attaccata Chemlight hozzácsatolva @@ -104,7 +103,7 @@ Barra de luz quitada Odczepiono światło chemiczne Chemlight détaché - Chemické světlo Odepnuto + Chemické světlo odepnuto Chemlight Separada Chemlight staccata Chemlight hozzácsatolva @@ -132,7 +131,7 @@ Marcador IV Strobo IR Infravörös jeladó - ИК строб + ИК-маяк IR Strobe allows you to signal your position through a pulsating beacon only visible with NVGs. @@ -144,7 +143,7 @@ O Marcador IV permite que você sinalize sua posição através de um pulso visível somente com equipamento de visão noturna. La Strobo IR è una luce stroboscopica che ti permette di segnalare la tua posizione grazie all'emissione di impulsi ad infrarossi visibili solo con i visori notturni. Az infravörös jeladóval megjelölheted a helyzetedet úgy, hogy annak pulzáló fénye csak éjjellátó készülékkel látható. - ИК строб позволяет сигнализировать свое местоположение через пульсирующий маяк, видимый только через ПНВ. + ИК-маяк позволяет сигнализировать о своём местоположении через пульсирующий свет, видимый только через ПНВ. Place @@ -156,6 +155,7 @@ Colocar Posiziona Elhelyez + Установить Cancel @@ -167,13 +167,16 @@ Cancelar Annulla Mégse + Отмена Attach Failed - Échec du Attacher + Échec de l'attachement Befestigen fehlgeschlagen - Присоединить Ошибка + Соединение прервано Error al acoplar + Připnutí selhalo + Przyczepianie nie powiodło się diff --git a/addons/captives/functions/fnc_canSurrender.sqf b/addons/captives/functions/fnc_canSurrender.sqf index 3ee687cfc1..3b810a0c5c 100644 --- a/addons/captives/functions/fnc_canSurrender.sqf +++ b/addons/captives/functions/fnc_canSurrender.sqf @@ -18,6 +18,8 @@ PARAMS_2(_unit,_newSurrenderState); +if (currentWeapon _unit != "") exitWith {false}; + private "_returnValue"; _returnValue = if (_newSurrenderState) then { diff --git a/addons/captives/functions/fnc_setHandcuffed.sqf b/addons/captives/functions/fnc_setHandcuffed.sqf index 5917532874..e992339186 100644 --- a/addons/captives/functions/fnc_setHandcuffed.sqf +++ b/addons/captives/functions/fnc_setHandcuffed.sqf @@ -54,7 +54,7 @@ if (_state) then { PARAMS_2(_unit,_newAnimation); if ((_newAnimation != "ACE_AmovPercMstpSsurWnonDnon") && {!(_unit getVariable ["ACE_isUnconscious", false])}) then { ERROR("Handcuff animation interrupted"); - systemChat format ["debug %2: new %1", _newAnimation, time]; + // systemChat format ["debug %2: new %1", _newAnimation, time]; [_unit, "ACE_AmovPercMstpScapWnonDnon", 1] call EFUNC(common,doAnimation); }; }]; diff --git a/addons/captives/functions/fnc_setSurrendered.sqf b/addons/captives/functions/fnc_setSurrendered.sqf index 73451863dd..30f9105511 100644 --- a/addons/captives/functions/fnc_setSurrendered.sqf +++ b/addons/captives/functions/fnc_setSurrendered.sqf @@ -52,7 +52,7 @@ if (_state) then { PARAMS_2(_unit,_newAnimation); if ((_newAnimation != "ACE_AmovPercMstpSsurWnonDnon") && {!(_unit getVariable ["ACE_isUnconscious", false])}) then { ERROR("Surrender animation interrupted"); - systemChat format ["debug %2: new %1", _newAnimation, time]; + // systemChat format ["debug %2: new %1", _newAnimation, time]; [_unit, "ACE_AmovPercMstpSsurWnonDnon", 1] call EFUNC(common,doAnimation); }; }]; diff --git a/addons/captives/stringtable.xml b/addons/captives/stringtable.xml index 897782747f..294cf1d68c 100644 --- a/addons/captives/stringtable.xml +++ b/addons/captives/stringtable.xml @@ -1,5 +1,4 @@  - @@ -132,28 +131,48 @@ Surrender + Se rendre Kapitulieren Rendirse + Сдаться + Vzdát se + Poddaj się Stop Surrendering + Arrêt de se rendre Den Kampf erneut aufnehmen Dejar de rendirse + Остановить сдачу + Přestat se vzdávat + Podejmij walkę ponownie Only use on alive units + Utilisation uniquement sur les unités en vie Nur bei lebenden Einheiten verwendbar Utilizar solo en unidades vivas + Только для живых юнитов + Použitelné jen na živé jednotky + Używaj tylko na żywych jednostkach Only use on dismounted inf + Utilisation uniquement sur les infanteries Nur bei abgesessener Infanterie verwendbar Utilizar solo en infanteria desmontada + Только для спеш. солдат + Použitelné jen na pěsích jednotkách + Używaj tylko na piechocie poza wszelkimi pojazdami Nothing under mouse + Rien sous la souris Es wurde nichts ausgewählt Nada bajo el ratón + Объекты под мышью отсутствуют + Nic není vybráno + Nie ma nic pod kursorem diff --git a/addons/common/XEH_preInit.sqf b/addons/common/XEH_preInit.sqf index 31580223c5..8d62e9df70 100644 --- a/addons/common/XEH_preInit.sqf +++ b/addons/common/XEH_preInit.sqf @@ -182,6 +182,9 @@ PREP(waitAndExecute); PREP(translateToWeaponSpace); PREP(translateToModelSpace); +// Model and drawing helpers +PREP(worldToScreenBounds); + // config items PREP(getConfigType); PREP(getItemType); diff --git a/addons/common/functions/fnc_addToInventory.sqf b/addons/common/functions/fnc_addToInventory.sqf index b28d864df8..339055487b 100644 --- a/addons/common/functions/fnc_addToInventory.sqf +++ b/addons/common/functions/fnc_addToInventory.sqf @@ -4,9 +4,10 @@ * or places it in a weaponHolder if no space. * * Arguments: - * 0: Unit (OBJECT) - * 1: Classname (String) - * 2: Container (String, Optional) uniform, vest, backpack + * 0: Unit + * 1: Classname + * 2: Container (uniform, vest, backpack) + * 3: Magazine Ammo Count * * Return Value: * Array: @@ -19,37 +20,29 @@ #include "script_component.hpp" EXPLODE_2_PVT(_this,_unit,_classname); +DEFAULT_PARAM(2,_container,""); +DEFAULT_PARAM(3,_ammoCount,-1); + private "_addedToPlayer"; -private "_container"; private "_canAdd"; private "_type"; _canAdd = false; _addedToPlayer = true; -if((count _this) > 2) then { - _container = _this select 2; -} else { - _container = nil; -}; - _type = [_classname] call EFUNC(common,getItemType); -if(!isNil "_container") then { - switch (_container) do { - case "vest": { _canAdd = _unit canAddItemToVest _classname; }; - case "backpack": { _canAdd = _unit canAddItemToBackpack _classname; }; - case "uniform": { _canAdd = _unit canAddItemToUniform _classname; }; - }; -} else { - _container = ""; - _canAdd = _unit canAdd _classname; +switch (_container) do { + case "vest": { _canAdd = _unit canAddItemToVest _classname; }; + case "backpack": { _canAdd = _unit canAddItemToBackpack _classname; }; + case "uniform": { _canAdd = _unit canAddItemToUniform _classname; }; + default {_canAdd = _unit canAdd _classname;}; }; switch ((_type select 0)) do { case "weapon": { if (_canAdd) then { - switch (_container) do { + switch (_container) do { case "vest": { (vestContainer _unit) addWeaponCargoGlobal [_classname, 1]; }; case "backpack": { (backpackContainer _unit) addWeaponCargoGlobal [_classname, 1]; }; case "uniform": { (uniformContainer _unit) addWeaponCargoGlobal [_classname, 1]; }; @@ -64,24 +57,25 @@ switch ((_type select 0)) do { }; }; case "magazine": { + if (_ammoCount == -1) then {_ammoCount = getNumber (configFile >> "CfgMagazines" >> _classname >> "count");}; if (_canAdd) then { switch (_container) do { - case "vest": { (vestContainer _unit) addMagazineCargoGlobal [_classname, 1]; }; - case "backpack": { (backpackContainer _unit) addMagazineCargoGlobal [_classname, 1]; }; - case "uniform": { (uniformContainer _unit) addMagazineCargoGlobal [_classname, 1]; }; - default { _unit addMagazineGlobal _classname; }; + case "vest": { (vestContainer _unit) addMagazineCargoGlobal [_classname, _ammoCount]; }; + case "backpack": { (backpackContainer _unit) addMagazineCargoGlobal [_classname, _ammoCount]; }; + case "uniform": { (uniformContainer _unit) addMagazineCargoGlobal [_classname, _ammoCount]; }; + default {_unit addMagazine [_classname, _ammoCount]; }; }; } else { _addedToPlayer = false; _pos = _unit modelToWorldVisual [0,1,0.05]; _unit = createVehicle ["WeaponHolder_Single_F",_pos,[],0,"NONE"]; - _unit addMagazineCargoGlobal [_classname, 1]; + _unit addMagazineCargoGlobal [_classname, _ammoCount]; _unit setPosATL _pos; }; }; case "item": { if (_canAdd) then { - switch (_container) do { + switch (_container) do { case "vest": { _unit addItemToVest _classname; }; case "backpack": { _unit addItemToBackpack _classname; }; case "uniform": { _unit addItemToUniform _classname; }; diff --git a/addons/common/functions/fnc_endRadioTransmission.sqf b/addons/common/functions/fnc_endRadioTransmission.sqf index 772a34a06b..78a50e9f2c 100644 --- a/addons/common/functions/fnc_endRadioTransmission.sqf +++ b/addons/common/functions/fnc_endRadioTransmission.sqf @@ -14,10 +14,10 @@ // ACRE if (isClass (configFile >> "CfgPatches" >> "acre_main")) then { - [-1] call acre_core_fnc_handleMultiPttKeyPressUp; - [0] call acre_core_fnc_handleMultiPttKeyPressUp; - [1] call acre_core_fnc_handleMultiPttKeyPressUp; - [2] call acre_core_fnc_handleMultiPttKeyPressUp; + [-1] call acre_sys_core_fnc_handleMultiPttKeyPressUp; + [0] call acre_sys_core_fnc_handleMultiPttKeyPressUp; + [1] call acre_sys_core_fnc_handleMultiPttKeyPressUp; + [2] call acre_sys_core_fnc_handleMultiPttKeyPressUp; }; // TFAR diff --git a/addons/common/functions/fnc_setVolume.sqf b/addons/common/functions/fnc_setVolume.sqf index 91d66a00ec..ee2c42e39c 100644 --- a/addons/common/functions/fnc_setVolume.sqf +++ b/addons/common/functions/fnc_setVolume.sqf @@ -27,7 +27,7 @@ if (_setVolume) then { player setVariable ["tf_unable_to_use_radio", false]; // ACRE2 - player setVariable ["acre_sys_core_globalVolume", NORMAL_LEVEL]; + [NORMAL_LEVEL] call acre_api_fnc_setGlobalVolume; player setVariable ["acre_sys_core_isDisabled", false, true]; } else { @@ -40,7 +40,7 @@ if (_setVolume) then { player setVariable ["tf_unable_to_use_radio", true]; // ACRE2 - player setVariable ["acre_sys_core_globalVolume", MUTED_LEVEL]; + [MUTED_LEVEL] call acre_api_fnc_setGlobalVolume; player setVariable ["acre_sys_core_isDisabled", true, true]; }; diff --git a/addons/common/functions/fnc_worldToScreenBounds.sqf b/addons/common/functions/fnc_worldToScreenBounds.sqf new file mode 100644 index 0000000000..7b88350c6a --- /dev/null +++ b/addons/common/functions/fnc_worldToScreenBounds.sqf @@ -0,0 +1,52 @@ +// (c) zGuba 2011 +// Function helper for framing objects on screen. +// Input: [_object,_margins3D,_offset3D] (object, 3 * float array, 3 * float array) +// Output: [_minX,_minY,_minY,_maxY] (4 * float) + +#include "script_component.hpp" + +private ["_minX","_minY","_maxX","_maxY"]; + +PARAMS_3(_object,_margins,_offsets); + +_minX = 10; +_minY = 10; +_maxX = -10; +_maxY = -10; + +if (true) then { + _bounds = boundingBox _object; + + _boundsMin = _bounds select 0; + _boundsMinX = (_boundsMin select 0) - (_margins select 0) + (_offsets select 0); + _boundsMinY = (_boundsMin select 1) - (_margins select 1) + (_offsets select 1); + _boundsMinZ = (_boundsMin select 2) - (_margins select 2) + (_offsets select 2); + _boundsMax = _bounds select 1; + _boundsMaxX = (_boundsMax select 0) + (_margins select 0) + (_offsets select 0); + _boundsMaxY = (_boundsMax select 1) + (_margins select 1) + (_offsets select 1); + _boundsMaxZ = (_boundsMax select 2) + (_margins select 2) + (_offsets select 2); + + _boundsCorners = [ + [_boundsMinX,_boundsMinY,_boundsMinZ], + [_boundsMinX,_boundsMinY,_boundsMaxZ], + [_boundsMinX,_boundsMaxY,_boundsMinZ], + [_boundsMinX,_boundsMaxY,_boundsMaxZ], + [_boundsMaxX,_boundsMinY,_boundsMinZ], + [_boundsMaxX,_boundsMinY,_boundsMaxZ], + [_boundsMaxX,_boundsMaxY,_boundsMinZ], + [_boundsMaxX,_boundsMaxY,_boundsMaxZ] + ]; + + + { + _ppos = worldToScreen (_object modelToWorld _x); + _pposX = _ppos select 0; + _pposY = _ppos select 1; + if (_pposX < _minX) then {_minX = _pposX}; + if (_pposX > _maxX) then {_maxX = _pposX}; + if (_pposY < _minY) then {_minY = _pposY}; + if (_pposY > _maxY) then {_maxY = _pposY}; + } forEach _boundsCorners; +}; + +[_minX,_minY,_maxX,_maxY] diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index 04a98e6b38..659792f21a 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -1,373 +1,428 @@  - - - - ACE-Team - ACE-Team - ACE-Team - ACE-Team - ACE-Team - ACE-Team - Команда ACE - ACE-Team - ACE-Team - ACE-Team - - - Save - Speichern - Guardar - Zapisz - Uložit - Sauvegarder - Сохранить - Salvar - Mentés - Salva - - - Cancel - Abbrechen - Cancelar - Anuluj - Zrušit - Annuler - Отмена - Cancelar - Mégse - Annulla - - - ACE Options - ACE Optionen - Opciones ACE - Opcje ACE - ACE Nastavení - ACE Options - ACE Настройки - Opções do ACE - ACE Opciók - Opzioni ACE - - - - N - N - N - N - S - N - С - N - É - N - - - NNE - NNO - NNE - NNE - SSV - NNE - ССВ - NNE - ÉÉK - NNE - - - NE - NO - NE - NE - SV - NE - СВ - NE - ÉK - NE - - - ENE - ONO - ENE - ENE - VSV - ENE - ВСВ - LNE - KÉK - ENE - - - E - O - E - E - V - E - В - L - K - E - - - ESE - OSO - ESE - ESE - VJV - ESE - ВЮВ - LSE - KDK - ESE - - - SE - SO - SE - SE - JV - SE - ЮВ - SE - DK - SE - - - SSE - SSO - SSE - SSE - JJV - SSE - ЮЮВ - SSE - DDK - SSE - - - S - S - S - S - J - S - Ю - S - D - S - - - SSW - SSW - SSO - SSW - JJZ - SSO - ЮЮЗ - SSO - DDNy - SSO - - - SW - SW - SO - SW - JZ - SO - ЮЗ - SO - DNy - SO - - - WSW - WSW - OSO - WSW - ZJZ - OSO - ЗЮЗ - OSO - NyDNy - OSO - - - W - W - O - W - Z - O - З - O - Ny - O - - - WNW - WNW - ONO - WNW - ZSZ - ONO - ЗСЗ - ONO - NyÉNy - ONO - - - NW - NW - NO - NW - SZ - NO - СЗ - NO - ÉNy - NO - - - NNW - NNW - NNO - NNW - SSZ - NNO - ССЗ - NNO - ÉÉNy - NNO - - - Action cancelled. - Aktion abgebrochen. - Acción cancelada. - Przerwano czynność - Akce přerušena - Action annulée. - Действие отменено. - Ação cancelada. - Művelet megszakítva. - Azione cancellata. - - - [ACE] Miscellaneous Items - [ACE] Verschiedenes - [ACE] Objetos varios - [ACE] Różne przedmioty - [ACE] Ostatní předměty - [ACE] Objets divers - [ACE] Различные предметы - [ACE] Itens diversos - [ACE] Egyéb tárgyak - [ACE] Oggetti vari - - - Disable Command Menu - Befehlsmenü ausschalten - Desactivar menú de mando - Wyłącz menu dowodzenia - Vypnout velící menu - Désactiver Menu Commande - Выключить командное меню - Parancsnoki menü kikapcsolása - - - Unknown - Unbekannt - Desconocido - Nieznany - Neznámý - Неизвестно - Ismeretlen - - - No Voice - Keine Stimme - Sin voz - Brak głosu - Žádný hlas - Без голоса - Nincs hang - - - Accept Requests - Anfrage annehmen - Aceptar peticiones - Akceptuj prośby - - - Decline Requests - Anfrage ablehnen - Rechazar peticiones - Ignoruj prośby - - - Accept Requests send by other players. These can be requests to use / share equipment, perform certain actions. - Anfragen anderer Spieler annehmen. Diese Anfragen können sich auf das Benutzen / Teilen von Equipment beziehen oder das Ausführen bestimmter Aktionen. - Acepta peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones. - Akceptuj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności. - - - Decline Requests send by other players. These can be requests to use / share equipment, perform certain actions. - Anfragen anderer Spieler ablehnen. Diese Anfragen können sich auf das Benutzen / Teilen von Equipment beziehen oder das Ausführen bestimmter Aktionen. - Rechazar peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones. - Ignoruj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności. - - - Feedback icons - Feedback-Icons - Iconos de respuesta - - - Select the position of or disable the feedback icons on your screen. These icons will show to provide extra feedback on your character status and actions performed. - Wähle die Position der Feedback-Icons aus oder deaktiviere Sie. Die Feedback-Icons zeigen den Status deiner Einheit an, oder die ausgeführte Aktion. - Seleccionar la posición de o desactivar los íconos de respuesta en la pantalla. Estos iconos se mostrarán para proporcionar información adicional sobre el estado de su personaje y las acciones a realizar. - - - Progress bar location - Position des Fortschrittsanzeige - Ubicación de la barra de progreso - - - Set the desired location of the progress bar on your screen. - Wähle die Position der Fortschrittsanzeige. - Seleccionar la ubicación deseada de la barra de progreso en tu pantalla - - - Hint Background color - Hinweis Hintergrundfarbe - Color de fondo de las notificaciones - - - The color of the background from the ACE hints. - Wähle die Hintergrundfarbe für ACE-Hinweise. - El color de fondo de las notificaciones del ACE - - - Hint text font color - Hinweis Textfarbe - Color del texto de las notificaciones - - - The color of the text font from the ACE hints. This color is the default color for all text displayed through the ACE Hint system, if the hint text has no other color specified. - Wähle die Textfarbe für ACE-Hinweise. - El color del texto de las notificaciones del ACE. Este es el color predeterminado para todo el texto que se muestra a través del sistema de notificaciones del ACE, si el texto de notificación no tiene otro color especificado. - - - Banana - Banane - Banana - - - A banana is an edible fruit, botanically a berry, produced by several kinds of large herbaceous flowering plants in the genus Musa. - Die Bananen (Musa) sind eine Pflanzengattung in der Familie der Bananengewächse (Musaceae) innerhalb der Einkeimblättrigen Pflanzen (Monokotyledonen). - Una banana es una fruta comestible, botanicamente una baya, producida por varios tipos de grandes plantas herbáceas del género Musa. - - + + + ACE-Team + ACE-Team + ACE-Team + ACE-Team + ACE-Team + ACE-Team + Команда ACE + ACE-Team + ACE-Team + ACE-Team + + + Save + Speichern + Guardar + Zapisz + Uložit + Sauvegarder + Сохранить + Salvar + Mentés + Salva + + + Cancel + Abbrechen + Cancelar + Anuluj + Zrušit + Annuler + Отмена + Cancelar + Mégse + Annulla + + + ACE Options + ACE Optionen + Opciones ACE + Opcje ACE + Nastavení ACE + ACE Options + ACE Настройки + Opções do ACE + ACE Opciók + Opzioni ACE + + + + N + N + N + N + S + N + С + N + É + N + + + NNE + NNO + NNE + NNE + SSV + NNE + ССВ + NNE + ÉÉK + NNE + + + NE + NO + NE + NE + SV + NE + СВ + NE + ÉK + NE + + + ENE + ONO + ENE + ENE + VSV + ENE + ВСВ + LNE + KÉK + ENE + + + E + O + E + E + V + E + В + L + K + E + + + ESE + OSO + ESE + ESE + VJV + ESE + ВЮВ + LSE + KDK + ESE + + + SE + SO + SE + SE + JV + SE + ЮВ + SE + DK + SE + + + SSE + SSO + SSE + SSE + JJV + SSE + ЮЮВ + SSE + DDK + SSE + + + S + S + S + S + J + S + Ю + S + D + S + + + SSW + SSW + SSO + SSW + JJZ + SSO + ЮЮЗ + SSO + DDNy + SSO + + + SW + SW + SO + SW + JZ + SO + ЮЗ + SO + DNy + SO + + + WSW + WSW + OSO + WSW + ZJZ + OSO + ЗЮЗ + OSO + NyDNy + OSO + + + W + W + O + W + Z + O + З + O + Ny + O + + + WNW + WNW + ONO + WNW + ZSZ + ONO + ЗСЗ + ONO + NyÉNy + ONO + + + NW + NW + NO + NW + SZ + NO + СЗ + NO + ÉNy + NO + + + NNW + NNW + NNO + NNW + SSZ + NNO + ССЗ + NNO + ÉÉNy + NNO + + + Action cancelled. + Aktion abgebrochen. + Acción cancelada. + Przerwano czynność + Akce přerušena. + Action annulée. + Действие отменено. + Ação cancelada. + Művelet megszakítva. + Azione cancellata. + + + [ACE] Miscellaneous Items + [ACE] Verschiedenes + [ACE] Objetos varios + [ACE] Różne przedmioty + [ACE] Ostatní předměty + [ACE] Objets divers + [ACE] Различные предметы + [ACE] Itens diversos + [ACE] Egyéb tárgyak + [ACE] Oggetti vari + + + Disable Command Menu + Befehlsmenü ausschalten + Desactivar menú de mando + Wyłącz menu dowodzenia + Vypnout velící menu + Désactiver Menu Commande + Выключить командное меню + Parancsnoki menü kikapcsolása + Disabilita Menù di comando + + + Unknown + Unbekannt + Desconocido + Nieznany + Neznámý + Неизвестно + Ismeretlen + Sconosciuto + Inconnu + + + No Voice + Keine Stimme + Sin voz + Brak głosu + Žádný hlas + Без голоса + Nincs hang + Senza voce + + + Accept Requests + Anfrage akzeptieren + Aceptar peticiones + Akceptuj prośby + Přijmout žádost + Accetta Richieste + Подтвердить запросы + + + Decline Requests + Anfrage ablehnen + Rechazar peticiones + Ignoruj prośby + Zamítnout žádost + Rifiuta Richieste + Отклонить запросы + + + Accept Requests send by other players. These can be requests to use / share equipment, perform certain actions. + Anfragen werden von anderen Mitspielen gestellt. Diese können Anfragen u.a. zum Teilen/Verwenden von Ausrüstungsgegenständen, oder auch zum Ausführen von Handlungen sein. + Acepta peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones. + Akceptuj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności. + Accetta le richieste degli altri giocatori. Queste possono riguardare l'uso o la condivisione dell'equipaggiamento, o di determinate azioni. + Подтвердить запросы, посланные другими игроками. Это могут быть просьбы о передаче снаряжения или выполнении определённых действий. + + + Decline Requests send by other players. These can be requests to use / share equipment, perform certain actions. + Anfragen werden von anderen Mitspielen gestellt. Diese können Anfragen u.a. zum Teilen/Verwenden von Ausrüstungsgegenständen, oder auch zum Ausführen von Handlungen sein. + Rechazar peticiones de otros jugadores. Pueden ser solicitudes para usar / compartir equipamiento, realizar ciertas acciones. + Ignoruj prośby wysłane przez innych graczy. Akceptacji wymagają między innymi akcje używania / współdzielenia wyposażenia, wykonywania określonych czynności. + Rifiuta le richieste degli altri giocatori. Queste possono riguardare l'uso o la condivisione dell'equipaggiamento, o di determinate azioni. + Отклонить запросы, посланные другими игроками. Это могут быть просьбы о передаче снаряжения или выполнении определённых действий. + + + Feedback icons + Rückmeldungssymbole + Iconos de respuesta + Icone informative + Иконки состояний + Ikony pomocnicze + Icônes de Feedback + + + Select the position of or disable the feedback icons on your screen. These icons will show to provide extra feedback on your character status and actions performed. + Wähle die Position der Rückmeldungssymbole, oder deaktiviere sie. Diese Symbole stellen eine zusätzliche Rückmeldung über die Lage und Handlungen deines Soldaten dar. + Seleccionar la posición de o desactivar los íconos de respuesta en la pantalla. Estos iconos se mostrarán para proporcionar información adicional sobre el estado de su personaje y las acciones a realizar. + Seleziona la posizione o disabilita le icone informative sul tuo schermo. Queste saranno mostrate per fornire informazioni aggiuntive sullo stato o sulle azioni del giocatore. + Выберите положение или или отключите отображение иконок состояний на Вашем экране. Эти иконки предоставят дополнительную информацию о состоянии персонажа и выполняемых действиях. + Ustaw pozycję lub wyłącz całkowicie ikony pomocnicze na ekranie. Te ikony dostarczają dodatkowych informacji na temat statusu Twojej postaci i wykonywanych przez nią akcji. + Sélectionner la position de ou désactiver les îcones de feedback sur votre écran. Ces îcones sont là pour vous fournir un feedback du statut votre personnage et les actions à effectuer. + + + Progress bar location + Position der Fortschrittsanzeige + Ubicación de la barra de progreso + Posizione della barra di avanzamento + Положение прогресс-бара + Lokalizacja paska postępu + Localisation de la barre de progression + + + Set the desired location of the progress bar on your screen. + Setze die gewünschte Position der Fortschrittsanzeige fest + Seleccionar la ubicación deseada de la barra de progreso en tu pantalla + Modifica la posizione su schermo della barra di avanzamento. + Установите желаемое положение строки состояния на экране. + Ustaw pożądaną lokalizację paska postępu na ekranie + Définisez l'endroit que vous désirez pour faire appraître la barre de progression. + + + Hint Background color + Hintergrundfarbe der Hinweise + Color de fondo de las notificaciones + Sfondo dei Suggerimenti + Цвет фона всплывающих подсказок + Kolor tła powiadomień + Couleur de fond des astuces + + + The color of the background from the ACE hints. + Die Hintergrundfarbe der ACE-Hinweise. + El color de fondo de las notificaciones del ACE + Il colore di sfondo dei suggerimenti dell'ACE. + Цвет фона всплывающий подсказок АСЕ. + Kolor tła dla powiadomień ACE + Définisez la couleur de fond pour les astuces fournies par ACE. + + + Hint text font color + Textfarbe der Hinweise + Color del texto de las notificaciones + Testo dei Suggerimenti + Цвет шрифта всплывающих подсказок + Kolor tekstu powiadomień + Couleur du texte des astuces + + + The color of the text font from the ACE hints. This color is the default color for all text displayed through the ACE Hint system, if the hint text has no other color specified. + Wähle die Textfarbe für ACE-Hinweise. + El color del texto de las notificaciones del ACE. Este es el color predeterminado para todo el texto que se muestra a través del sistema de notificaciones del ACE, si el texto de notificación no tiene otro color especificado. + Il colore del testo dei suggerimenti dell'ACE. Questo è il colore standard per tutti i caratteri mostrati dal sistema di suggerimenti dell'ACE, se questo non è altrimenti specificato. + Цвет шрифта текста всплывающих подсказок АСЕ. Этот цвет является стандартным для всего текста, транслирующегося через систему подсказок АСЕ, если не установлено другого цвета для текста подсказок. + Kolor tekstu dla powiadomień ACE. Ten kolor jest domyślnym dla wszystkich tekstów wyświetlanych poprzez System Powiadomień ACE, jeżeli dla powiadomienia nie określono innego koloru. + Définisez la couleur du texte des astuces fournies par ACE. La couleur est celle par défaut affichée à travers toutes les astuces de ACE seulement si aucune couleur n'est défnie. + + + Banana + Banane + Banana + Banán + Banana + Банан + Banan + Banane + + + A banana is an edible fruit, botanically a berry, produced by several kinds of large herbaceous flowering plants in the genus Musa. + Die Banane ist eine essbare Frucht, biologisch betrachtet jedoch eine Beere. Sie wächst an unterschiedlichen, krautartigen Gewächsen aus der Familie der Musa. + Una banana es una fruta comestible, botanicamente una baya, producida por varios tipos de grandes plantas herbáceas del género Musa. + Banán je protáhlé ovoce a plod banánovníku (epigeická bobule). + Una banana è un frutto commestibile, nello specifico una bacca cuoiosa, prodotto da un gran numero di grandi pianti erbacee dotate di fiori, della famiglia delle Musaceae. + Банан - это съедобный фрукт, ягода с ботанической точки зрения, произрастающий на нескольких видах травянистых растениях рода Банан (Musa). + Rodzaj roślin z rodziny bananowatych, obejmujący około 80 gatunków. Przedstawiciele są typowymi przedstawicielami flory międzyzwrotnikowej Azji, Afryki i Australii. Część gatunków dostarcza jadalnych owoców. Słowo banan pochodzi prawdopodobnie od arabskiego słowa banan, co oznacza palec, lub afrykańskiego języka wolof, w którym rośliny te określa się mianem banaana. + Une banane est un fruit comestible, botaniquement une baie, produite par plusieurs types de grandes plantes herbacées à fleurs dans le genre Musa. + + diff --git a/addons/disarming/$PBOPREFIX$ b/addons/disarming/$PBOPREFIX$ new file mode 100644 index 0000000000..47b746cf19 --- /dev/null +++ b/addons/disarming/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\disarming \ No newline at end of file diff --git a/addons/disarming/CfgEventHandlers.hpp b/addons/disarming/CfgEventHandlers.hpp new file mode 100644 index 0000000000..e75956f440 --- /dev/null +++ b/addons/disarming/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/disarming/CfgVehicles.hpp b/addons/disarming/CfgVehicles.hpp new file mode 100644 index 0000000000..381aaed93e --- /dev/null +++ b/addons/disarming/CfgVehicles.hpp @@ -0,0 +1,17 @@ +class CfgVehicles { + class Man; + class CAManBase: Man { + class ACE_Actions { + class ACE_MainActions { + class ACE_DisarmInventory { + displayName = "$STR_ACE_Disarming_OpenInventory"; + distance = 3.5; + condition = QUOTE([ARR_2(_player,_target)] call FUNC(canPlayerDisarmUnit)); + statement = QUOTE([ARR_2(_player,_target)] call FUNC(openDisarmDialog)); + icon = PATHTOF(UI\disarm.paa); + exceptions[] = {}; + }; + }; + }; + }; +}; diff --git a/addons/disarming/CfgWeapons.hpp b/addons/disarming/CfgWeapons.hpp new file mode 100644 index 0000000000..404ef4aa76 --- /dev/null +++ b/addons/disarming/CfgWeapons.hpp @@ -0,0 +1,14 @@ +class CfgWeapons { + class ACE_ItemCore; + class InventoryItem_Base_F; + + class ACE_DebugPotato: ACE_ItemCore { + displayName = "ACE Potato (debug)"; + descriptionShort = "Glorious Potato
If you see this in game it means someone fucked up"; + picture = QUOTE(PATHTOF(UI\potato_ca.paa)); + scope = 1; + class ItemInfo: InventoryItem_Base_F { + mass = 1; + }; + }; +}; diff --git a/addons/disarming/README.md b/addons/disarming/README.md new file mode 100644 index 0000000000..0423aa48bd --- /dev/null +++ b/addons/disarming/README.md @@ -0,0 +1,11 @@ +ace_disarming +============ + +Adds ability to make units drop items/weapons/magazines. + + +## Maintainers + +The people responsible for merging changes to this component or answering potential questions. + +- [PabstMirror](https://github.com/PabstMirror) diff --git a/addons/disarming/UI/disarm.paa b/addons/disarming/UI/disarm.paa new file mode 100644 index 0000000000..d13f38daee Binary files /dev/null and b/addons/disarming/UI/disarm.paa differ diff --git a/addons/disarming/UI/potato_ca.paa b/addons/disarming/UI/potato_ca.paa new file mode 100644 index 0000000000..00757d8ed3 Binary files /dev/null and b/addons/disarming/UI/potato_ca.paa differ diff --git a/addons/disarming/XEH_postInit.sqf b/addons/disarming/XEH_postInit.sqf new file mode 100644 index 0000000000..7315ef1785 --- /dev/null +++ b/addons/disarming/XEH_postInit.sqf @@ -0,0 +1,4 @@ +#include "script_component.hpp" + +["DisarmDropItems", {_this call FUNC(eventTargetStart)}] call EFUNC(common,addEventHandler); +["DisarmDebugCallback", {_this call FUNC(eventCallerFinish)}] call EFUNC(common,addEventHandler); diff --git a/addons/disarming/XEH_preInit.sqf b/addons/disarming/XEH_preInit.sqf new file mode 100644 index 0000000000..84534e41b4 --- /dev/null +++ b/addons/disarming/XEH_preInit.sqf @@ -0,0 +1,17 @@ +#include "script_component.hpp" + +ADDON = false; + +PREP(canBeDisarmed); +PREP(canPlayerDisarmUnit); +PREP(disarmDropItems); +PREP(eventCallerFinish); +PREP(eventTargetFinish); +PREP(eventTargetStart); +PREP(getAllGearContainer); +PREP(getAllGearUnit); +PREP(openDisarmDialog); +PREP(showItemsInListbox); +PREP(verifyMagazinesMoved); + +ADDON = true; diff --git a/addons/disarming/config.cpp b/addons/disarming/config.cpp new file mode 100644 index 0000000000..00f8204b09 --- /dev/null +++ b/addons/disarming/config.cpp @@ -0,0 +1,19 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {"ACE_DebugPotato"}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ACE_Interaction"}; + author[] = {"PabstMirror"}; + authorUrl = "https://github.com/PabstMirror/"; + VERSION_CONFIG; + }; +}; + +#include "CfgEventHandlers.hpp" +#include "CfgVehicles.hpp" +#include "CfgWeapons.hpp" + +#include "gui_disarm.hpp" diff --git a/addons/disarming/functions/fnc_canBeDisarmed.sqf b/addons/disarming/functions/fnc_canBeDisarmed.sqf new file mode 100644 index 0000000000..04171a900d --- /dev/null +++ b/addons/disarming/functions/fnc_canBeDisarmed.sqf @@ -0,0 +1,34 @@ +/* + * Author: PabstMirror + * Checks the conditions for being able to disarm a unit + * + * Arguments: + * 0: Target + * + * Return Value: + * Can Be Disarmed + * + * Example: + * [cursorTarget] call ace_disarming_fnc_canBeDisarmed + * + * Public: No + */ +#include "script_component.hpp" + +PARAMS_1(_target); + +//Check animationState for putDown anim +//This ensures the unit doesn't have to actualy do any animation to drop something +//This should always be true for the 3 possible status effects that allow disarming +_animationStateCfgMoves = getText (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState _target) >> "actions"); +if (_animationStateCfgMoves == "") exitWith {false}; +_putDownAnim = getText (configFile >> "CfgMovesBasic" >> "Actions" >> _animationStateCfgMoves >> "PutDown"); +if (_putDownAnim != "") exitWith {false}; + + +(alive _target) && +{(abs (speed _target)) < 1} && +{(vehicle _target) == _target} && +{(_target getVariable ["ACE_isUnconscious", false]) || + {_target getVariable [QEGVAR(captives,isHandcuffed), false]} || + {_target getVariable [QEGVAR(captives,isSurrendering), false]}} diff --git a/addons/disarming/functions/fnc_canPlayerDisarmUnit.sqf b/addons/disarming/functions/fnc_canPlayerDisarmUnit.sqf new file mode 100644 index 0000000000..ec9e975ec2 --- /dev/null +++ b/addons/disarming/functions/fnc_canPlayerDisarmUnit.sqf @@ -0,0 +1,22 @@ +/* + * Author: PabstMirror + * Checks the conditions for being able to disarm a unit + * + * Arguments: + * 0: Player + * 1: Target + * + * Return Value: + * Can Be Disarm Target + * + * Example: + * [player, cursorTarget] call ace_disarming_fnc_canPlayerDisarmUnit + * + * Public: No + */ +#include "script_component.hpp" + +PARAMS_2(_player,_target); + +([_target] call FUNC(canBeDisarmed)) && +{([_player, _target, []] call EFUNC(common,canInteractWith))} diff --git a/addons/disarming/functions/fnc_disarmDropItems.sqf b/addons/disarming/functions/fnc_disarmDropItems.sqf new file mode 100644 index 0000000000..24ab96a2cf --- /dev/null +++ b/addons/disarming/functions/fnc_disarmDropItems.sqf @@ -0,0 +1,252 @@ +/* + * Author: PabstMirror + * Makes a unit drop items + * + * Arguments: + * 0: caller (player) + * 1: target + * 2: classnamess + * 3: Do Not Drop Ammo + * + * Return Value: + * Nothing + * + * Example: + * [player, cursorTarget, ["ace_bandage"]] call ace_disarming_fnc_disarmDropItems + * + * Public: No + */ +#include "script_component.hpp" + +#define TIME_MAX_WAIT 5 + +PARAMS_3(_caller,_target,_listOfItemsToRemove); +DEFAULT_PARAM(3,_doNotDropAmmo,false); //By default units drop all weapon mags when dropping a weapon + +_fncSumArray = { + _return = 0; + {_return = _return + _x;} forEach (_this select 0); + _return +}; + +//Sanity Checks +if (!([_target] call FUNC(canBeDisarmed))) exitWith { + [_caller, _target, "Debug: Cannot disarm target"] call FUNC(eventTargetFinish); +}; +if (_doNotDropAmmo && {({_x in _listOfItemsToRemove} count (magazines _target)) > 0}) exitWith { + [_caller, _target, "Debug: Trying to drop magazine with _doNotDropAmmo flag"] call FUNC(eventTargetFinish); +}; + +_holder = objNull; + +//If not dropping ammo, don't use an existing container +if (!_doNotDropAmmo) then { + { + if ((_x getVariable [QGVAR(disarmUnit), objNull]) == _target) exitWith { + _holder = _x; + }; + } forEach ((getpos _target) nearObjects [DISARM_CONTAINER, 3]); +}; + +//Create a new weapon holder +if (isNull _holder) then { + _dropPos = _target modelToWorld [0.4, 0.75, 0]; //offset someone unconscious isn't lying over it + _dropPos set [2, ((getPosASL _target) select 2)]; + _holder = createVehicle [DISARM_CONTAINER, _dropPos, [], 0, "CAN_COLLIDE"]; + _holder setPosASL _dropPos; + _holder setVariable [QGVAR(disarmUnit), _target, true]; +}; + +//Verify holder created +if (isNull _holder) exitWith { + [_caller, _target, "Debug: Null Holder"] call FUNC(eventTargetFinish); +}; +//Make sure only one drop operation at a time (using PFEH system as a queue) +if (_holder getVariable [QGVAR(holderInUse), false]) exitWith { + [{ + _this call FUNC(disarmDropItems); + }, _this, 0, 0] call EFUNC(common,waitAndExecute); +}; +_holder setVariable [QGVAR(holderInUse), true]; + + +//Remove Magazines +_targetMagazinesStart = magazinesAmmo _target; +_holderMagazinesStart = magazinesAmmoCargo _holder; + +{ + EXPLODE_2_PVT(_x,_xClassname,_xAmmo); + if ((_xClassname in _listOfItemsToRemove) && {!(_xClassname in UNIQUE_MAGAZINES)}) then { + _holder addMagazineAmmoCargo [_xClassname, 1, _xAmmo]; + _target removeMagazine _xClassname; + }; +} forEach _targetMagazinesStart; + +_targetMagazinesEnd = magazinesAmmo _target; +_holderMagazinesEnd = magazinesAmmoCargo _holder; + +//Verify Mags dropped from unit: +if ( ({((_x select 0) in _listOfItemsToRemove) && {!((_x select 0) in UNIQUE_MAGAZINES)}} count _targetMagazinesEnd) != 0) exitWith { + _holder setVariable [QGVAR(holderInUse), false]; + [_caller, _target, "Debug: Didn't Remove Magazines"] call FUNC(eventTargetFinish); +}; +//Verify holder has mags unit had +if (!([_targetMagazinesStart, _targetMagazinesEnd, _holderMagazinesStart, _holderMagazinesEnd] call FUNC(verifyMagazinesMoved))) then { + ERR = [_targetMagazinesStart, _targetMagazinesEnd, _holderMagazinesStart, _holderMagazinesEnd]; + _holder setVariable [QGVAR(holderInUse), false]; + [_caller, _target, "Debug: Crate Magazines not in holder"] call FUNC(eventTargetFinish); +}; + +//Remove Items, Assigned Items and NVG +_holderItemsStart = getitemCargo _holder; +_targetItemsStart = (assignedItems _target) + (items _target); +if ((headgear _target) != "") then {_targetItemsStart pushBack (headgear _target);}; +if ((goggles _target) != "") then {_targetItemsStart pushBack (goggles _target);}; + + +_addToCrateClassnames = []; +_addToCrateCount = []; +{ + if (_x in _listOfItemsToRemove) then { + if (_x in (items _target)) then { + _target removeItem _x; + } else { + _target unlinkItem _x; + }; + _index = _addToCrateClassnames find _x; + if (_index != -1) then { + _addToCrateCount set [_index, ((_addToCrateCount select _index) + 1)]; + } else { + _addToCrateClassnames pushBack _x; + _addToCrateCount pushBack 1; + }; + }; +} forEach _targetItemsStart; + +//Add the items to the holder (combined to reduce addItemCargoGlobal calls) +{ + _holder addItemCargoGlobal [(_addToCrateClassnames select _forEachIndex), (_addToCrateCount select _forEachIndex)]; +} forEach _addToCrateClassnames; + +_holderItemsEnd = getitemCargo _holder; +_targetItemsEnd = (assignedItems _target) + (items _target); +if ((headgear _target) != "") then {_targetItemsEnd pushBack (headgear _target);}; +if ((goggles _target) != "") then {_targetItemsEnd pushBack (goggles _target);}; + +//Verify Items Added +if (((count _targetItemsStart) - (count _targetItemsEnd)) != ([_addToCrateCount] call _fncSumArray)) exitWith { + _holder setVariable [QGVAR(holderInUse), false]; + [_caller, _target, "Debug: Items Not Removed From Player"] call FUNC(eventTargetFinish); +}; +if ((([_holderItemsEnd select 1] call _fncSumArray) - ([_holderItemsStart select 1] call _fncSumArray)) != ([_addToCrateCount] call _fncSumArray)) exitWith { + _holder setVariable [QGVAR(holderInUse), false]; + [_caller, _target, "Debug: Items Not Added to Holder"] call FUNC(eventTargetFinish); +}; + + +//If holder is still empty, it will be 'garbage collected' while we wait for the drop 'action' to take place +//So add a dummy item and just remove at the end +_holderIsEmpty = ([_holder] call FUNC(getAllGearContainer)) isEqualTo [[],[]]; +if (_holderIsEmpty) then { + TRACE_1("Debug: adding dummy item to holder",_holder); + _holder addItemCargoGlobal [DUMMY_ITEM, 1]; +}; + +//Start the PFEH to do the actions (which could take >1 frame) +[{ + PARAMS_2(_args,_pfID); + EXPLODE_8_PVT(_args,_caller,_target,_listOfItemsToRemove,_holder,_holderIsEmpty,_maxWaitTime,_doNotDropAmmo,_startingMagazines); + + _needToRemoveWeapon = ({_x in _listOfItemsToRemove} count (weapons _target)) > 0; + _needToRemoveMagazines = ({_x in _listOfItemsToRemove} count (magazines _target)) > 0; + _needToRemoveBackpack = ((backPack _target) != "") && {(backPack _target) in _listOfItemsToRemove}; + _needToRemoveVest = ((vest _target) != "") && {(vest _target) in _listOfItemsToRemove}; + _needToRemoveUniform = ((uniform _target) != "") && {(uniform _target) in _listOfItemsToRemove}; + + if ((time < _maxWaitTime) && {[_target] call FUNC(canBeDisarmed)} && {_needToRemoveWeapon || _needToRemoveMagazines || _needToRemoveBackpack}) then { + //action drop weapons (keeps loaded magazine and attachements) + { + if (_x in _listOfItemsToRemove) then { + _target action ["DropWeapon", _holder, _x]; + }; + } forEach (weapons _target); + + //Drop magazine (keeps unique ID) + { + if (_x in _listOfItemsToRemove) then { + _target action ["DropMagazine", _holder, _x]; + }; + } forEach (magazines _target); + + //Drop backpack (Keeps variables for ACRE/TFR) + if (_needToRemoveBackpack) then {_target action ["DropBag", _holder, (backPack _target)];}; + } else { + [_pfID] call CBA_fnc_removePerFrameHandler; + + if (_doNotDropAmmo) then { + _error = false; + + _magsToPickup = +_startingMagazines; + { + _index = _magsToPickup find _x; + if (_index == -1) exitWith {_error = true; ERROR("More mags than when we started?")}; + _magsToPickup deleteAt _index; + } forEach (magazinesAmmo _target); + + _magazinesInHolder = magazinesAmmoCargo _holder; + { + _index = _magazinesInHolder find _x; + if (_index == -1) exitWith {_error = true; ERROR("Missing mag not in holder")}; + _magazinesInHolder deleteAt _index; + } forEach _magsToPickup; + + //No Error (all the ammo in the container is ammo we should have); + if ((!_error) && {_magazinesInHolder isEqualTo []}) then { + { + _target addMagazine _x; + } forEach (magazinesAmmoCargo _holder); + clearMagazineCargoGlobal _holder; + }; + }; + + //If we added a dummy item, remove it now + if (_holderIsEmpty && {!((getItemCargo _holder) isEqualTo [[DUMMY_ITEM],[1]])}) exitWith { + _holder setVariable [QGVAR(holderInUse), false]; + [_caller, _target, "Debug: Holder should only have dummy item"] call FUNC(eventTargetFinish); + }; + if (_holderIsEmpty) then { + TRACE_1("Debug: removing dummy item from holder",_holder); + clearItemCargoGlobal _holder; + }; + //Verify we didn't timeout waiting on drop action + if (time >= _maxWaitTime) exitWith { + _holder setVariable [QGVAR(holderInUse), false]; + [_caller, _target, "Debug: Drop Actions Timeout"] call FUNC(eventTargetFinish); + }; + //If target lost disarm status: + if (!([_target] call FUNC(canBeDisarmed))) exitWith { + _holder setVariable [QGVAR(holderInUse), false]; + [_caller, _target, "Debug: Target cannot be disarmed"] call FUNC(eventTargetFinish); + }; + if (_needToRemoveVest && {!((vestItems _target) isEqualTo [])}) exitWith { + _holder setVariable [QGVAR(holderInUse), false]; + [_caller, _target, "Debug: Vest Not Empty"] call FUNC(eventTargetFinish); + }; + if (_needToRemoveVest) then { + _holder addItemCargoGlobal [(vest _target), 1]; + removeVest _target; + }; + if (_needToRemoveUniform && {!((uniformItems _target) isEqualTo [])}) exitWith { + _holder setVariable [QGVAR(holderInUse), false]; + [_caller, _target, "Debug: Uniform Not Empty"] call FUNC(eventTargetFinish); + }; + if (_needToRemoveUniform) then { + _holder addItemCargoGlobal [(uniform _target), 1]; + removeUniform _target; + }; + + _holder setVariable [QGVAR(holderInUse), false]; + [_caller, _target, ""] call FUNC(eventTargetFinish); + }; + +}, 0.0, [_caller,_target, _listOfItemsToRemove, _holder, _holderIsEmpty, (time + TIME_MAX_WAIT), _doNotDropAmmo, _targetMagazinesEnd]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/disarming/functions/fnc_eventCallerFinish.sqf b/addons/disarming/functions/fnc_eventCallerFinish.sqf new file mode 100644 index 0000000000..c87cb434b3 --- /dev/null +++ b/addons/disarming/functions/fnc_eventCallerFinish.sqf @@ -0,0 +1,25 @@ +/* + * Author: PabstMirror + * Recieves a possible error code from FUNC(eventTargetFinish) + * + * Arguments: + * 0: caller (player) + * 1: target + * 2: error message + * + * Return Value: + * None + * + * Example: + * [player1, player2, "Someting fucked up"] call ace_disarming_fnc_eventCallerFinish + * + * Public: No + */ +#include "script_component.hpp" + +PARAMS_3(_caller,_target,_errorMsg); + +if (_caller != ACE_player) exitWith {}; + +systemChat format ["Debug-Caller: Disarm finished from [%1] with code [%2]", _target, _errorMsg]; +diag_log text format ["[ACE_Disarming] %1 - eventCallerFinish: %2", time, _this]; diff --git a/addons/disarming/functions/fnc_eventTargetFinish.sqf b/addons/disarming/functions/fnc_eventTargetFinish.sqf new file mode 100644 index 0000000000..8cc67fa486 --- /dev/null +++ b/addons/disarming/functions/fnc_eventTargetFinish.sqf @@ -0,0 +1,26 @@ +/* + * Author: PabstMirror + * After FUNC(disarmDropItems) has completed, passing a possible error code. + * Passes that error back to orginal caller. + * + * Arguments: + * 0: caller + * 1: target + * 2: errorMsg + * + * Return Value: + * Nothing + * + * Example: + * [player1, player2, "Someting fucked up"] call ace_disarming_fnc_eventTargetFinish + * + * Public: No + */ +#include "script_component.hpp" + +PARAMS_3(_caller,_target,_errorMsg); + +if (_errorMsg != "") then { + diag_log text format ["[ACE_Disarming] %1 - eventTargetFinish: %2", time, _this]; + ["DisarmDebugCallback", [_caller], [_caller, _target, _errorMsg]] call EFUNC(common,targetEvent); +}; diff --git a/addons/disarming/functions/fnc_eventTargetStart.sqf b/addons/disarming/functions/fnc_eventTargetStart.sqf new file mode 100644 index 0000000000..c91f717e2a --- /dev/null +++ b/addons/disarming/functions/fnc_eventTargetStart.sqf @@ -0,0 +1,39 @@ +/* + * Author: PabstMirror + * Disarm Event Handler, Starting func, called on the target. + * If target has to remove uniform/vest, this will add all uniform/vest items to the drop list. + * + * Arguments: + * 0: caller (player) + * 1: target + * 2: type of disarm + * + * Return Value: + * Nothing + * + * Example: + * eventTargetStart + * + * Public: No + */ +#include "script_component.hpp" + +PARAMS_3(_caller,_target,_listOfObjectsToRemove); + +_itemsToAdd = []; +{ + if (_x == (uniform _target)) then { + _itemsToAdd = _itemsToAdd + (uniformItems _target); + }; + if (_x == (vest _target)) then { + _itemsToAdd = _itemsToAdd + (vestItems _target); + }; +} forEach _listOfObjectsToRemove; + +{ + if (!(_x in _listOfObjectsToRemove)) then { + _listOfObjectsToRemove pushBack _x; + }; +} forEach _itemsToAdd; + +[_caller, _target, _listOfObjectsToRemove] call FUNC(disarmDropItems); diff --git a/addons/disarming/functions/fnc_getAllGearContainer.sqf b/addons/disarming/functions/fnc_getAllGearContainer.sqf new file mode 100644 index 0000000000..c5b2c445ab --- /dev/null +++ b/addons/disarming/functions/fnc_getAllGearContainer.sqf @@ -0,0 +1,29 @@ +/* + * Author: PabstMirror + * Helper function to get all gear of a container + * + * Arguments: + * 0: Container + * + * Return Value: + * Array of 2 arrays, classnames and count + * + * Example: + * [["ace_bandage"],[2]] = [box] call ace_disarming_fnc_getAllGearContainer + * + * Public: No + */ +#include "script_component.hpp" + +PARAMS_1(_target); + +private ["_allGear"]; + +_allGear = [[],[]]; + +{ + (_allGear select 0) append (_x select 0); + (_allGear select 1) append (_x select 1); +} forEach [(getWeaponCargo _target), (getItemCargo _target), (getMagazineCargo _target), (getBackpackCargo _target)]; + +_allGear diff --git a/addons/disarming/functions/fnc_getAllGearUnit.sqf b/addons/disarming/functions/fnc_getAllGearUnit.sqf new file mode 100644 index 0000000000..d07f40c972 --- /dev/null +++ b/addons/disarming/functions/fnc_getAllGearUnit.sqf @@ -0,0 +1,52 @@ +/* + * Author: PabstMirror + * Helper function to get all gear of a unit. + * + * Arguments: + * 0: Target + * + * Return Value: + * Array of 2 arrays, classnames and count + * + * Example: + * [["ace_bandage"],[2]] = [bob] call ace_disarming_fnc_getAllGearUnit + * + * Public: No + */ +#include "script_component.hpp" + +PARAMS_1(_target); + +_allItems = ((weapons _target) + (magazines _target) + (items _target) + (assignedItems _target)); + +if ((backpack _target) != "") then { + _allItems pushBack (backpack _target); +}; +if ((vest _target) != "") then { + _allItems pushBack (vest _target); +}; +if ((uniform _target) != "") then { + _allItems pushBack (uniform _target); +}; +if ((headgear _target) != "") then { + _allItems pushBack (headgear _target); +}; +//What kind of asshole takes a man's glasses? +if ((goggles _target) != "") then { + _allItems pushBack (goggles _target); +}; + +_uniqueClassnames = []; +_classnamesCount = []; +//Filter unique and count +{ + _index = _uniqueClassnames find _x; + if (_index != -1) then { + _classnamesCount set [_index, ((_classnamesCount select _index) + 1)]; + } else { + _uniqueClassnames pushBack _x; + _classnamesCount pushBack 1; + }; +} forEach _allItems; + +[_uniqueClassnames, _classnamesCount] diff --git a/addons/disarming/functions/fnc_openDisarmDialog.sqf b/addons/disarming/functions/fnc_openDisarmDialog.sqf new file mode 100644 index 0000000000..6da123b831 --- /dev/null +++ b/addons/disarming/functions/fnc_openDisarmDialog.sqf @@ -0,0 +1,106 @@ +/* + * Author: PabstMirror + * Opens the disarm dialog (allowing a person to remove items) + * + * Arguments: + * 0: Caller (player) + * 1: Target + * + * Return Value: + * None + * + * Example: + * [player, bob] call ace_disarming_fnc_openDisarmDialog + * + * Public: No + */ +#include "script_component.hpp" + +#define TEXTURES_RANKS [ \ + "", \ + "\A3\Ui_f\data\GUI\Cfg\Ranks\private_gs.paa", \ + "\A3\Ui_f\data\GUI\Cfg\Ranks\corporal_gs.paa", \ + "\A3\Ui_f\data\GUI\Cfg\Ranks\sergeant_gs.paa", \ + "\A3\Ui_f\data\GUI\Cfg\Ranks\lieutenant_gs.paa", \ + "\A3\Ui_f\data\GUI\Cfg\Ranks\captain_gs.paa", \ + "\A3\Ui_f\data\GUI\Cfg\Ranks\major_gs.paa", \ + "\A3\Ui_f\data\GUI\Cfg\Ranks\colonel_gs.paa" \ + ] + +PARAMS_2(_caller,_target); + +//Sanity Checks +if (_caller != ACE_player) exitwith {ERROR("Player isn't caller?");}; +if (!([_player, _target] call FUNC(canPlayerDisarmUnit))) exitWith {ERROR("Can't Disarm Unit");}; +if (dialog) then {ERROR("Dialog open when trying to open disarm dialog"); closeDialog 0;}; + +disableSerialization; + +createDialog QGVAR(remoteInventory); + +_display = uiNamespace getVariable ["ACE_remoteInventory", displayNull]; +if (isNull _display) exitWith {ERROR("Display is Null");}; + +GVAR(disarmTarget) = _target; + +//Setup Drop Event (on right pannel) +(_display displayCtrl 632) ctrlAddEventHandler ["LBDrop", { + if (isNull GVAR(disarmTarget)) exitWith {}; + PARAMS_5(_ctrl,_xPos,_yPos,_idc,_itemInfo); + EXPLODE_3_PVT((_itemInfo select 0),_displayText,_value,_data); + + if (isNull GVAR(disarmTarget)) exitWith {ERROR("disarmTarget is null");}; + + TRACE_2("Debug: Droping %1 from %2",_data,GVAR(disarmTarget)); + ["DisarmDropItems", [GVAR(disarmTarget)], [ACE_player, GVAR(disarmTarget), [_data]]] call EFUNC(common,targetEvent); + + false //not sure what this does +}]; + +//Setup PFEH +[{ + disableSerialization; + EXPLODE_2_PVT(_this,_args,_pfID); + EXPLODE_3_PVT(_args,_player,_target,_display); + + if ((!([_player, _target] call FUNC(canPlayerDisarmUnit))) || + {isNull _display} || + {_player != ACE_player}) then { + + [_pfID] call CBA_fnc_removePerFrameHandler; + GVAR(disarmTarget) = objNull; + if (!isNull _display) then {closeDialog 0;}; //close dialog if still open + } else { + _groundContainer = _display displayCtrl 632; + _targetContainer = _display displayCtrl 633; + _playerName = _display displayCtrl 111; + _rankPicture = _display displayCtrl 1203; + + //Show rank and name (just like BIS's inventory) + _rankIndex = ((["PRIVATE", "CORPORAL", "SERGEANT", "LIEUTENANT", "CAPTAIN", "MAJOR", "COLONEL"] find (rank _target)) + 1); + _rankPicture ctrlSetText (TEXTURES_RANKS select _rankIndex); + _playerName ctrlSetText ([GVAR(disarmTarget)] call EFUNC(common,getName)); + + //Clear both inventory lists: + lbClear _groundContainer; + lbClear _targetContainer; + + //Show the items in the ground disarmTarget's inventory + _targetUniqueItems = [GVAR(disarmTarget)] call FUNC(getAllGearUnit); + [_targetContainer, _targetUniqueItems] call FUNC(showItemsInListbox); + + //Try to find a holder that the target is using to drop items into: + _holder = objNull; + { + if ((_x getVariable [QGVAR(disarmUnit), objNull]) == _target) exitWith { + _holder = _x; + }; + } forEach ((getpos _target) nearObjects [DISARM_CONTAINER, 3]); + + //If a holder exists, show it's inventory + if (!isNull _holder) then { + _holderUniqueItems = [_holder] call FUNC(getAllGearContainer); + [_groundContainer, _holderUniqueItems] call FUNC(showItemsInListbox); + }; + }; +}, 0, [_caller, _target, _display]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/disarming/functions/fnc_showItemsInListbox.sqf b/addons/disarming/functions/fnc_showItemsInListbox.sqf new file mode 100644 index 0000000000..e040233b82 --- /dev/null +++ b/addons/disarming/functions/fnc_showItemsInListbox.sqf @@ -0,0 +1,60 @@ +/* + * Author: PabstMirror + * Shows a list of inventory items in a listBox control. + * + * Arguments: + * 0: RscListBox + * 1: ItemArray [["itemClassnames"],[counts]] + * + * Return Value: + * Nothing + * + * Example: + * [theListBox, [["ace_bandage"],[2]]] call ace_disarming_fnc_showItemsInListbox + * + * Public: No + */ +#include "script_component.hpp" + +disableSerialization; +PARAMS_2(_listBoxCtrl,_itemsCountArray); + +private "_classname"; + +{ + _displayName = ""; + _picture = ""; + + _classname = _x; + _count = (_itemsCountArray select 1) select _forEachIndex; + + if (_classname != DUMMY_ITEM) then { //Don't show the dummy potato + + switch (true) do { + case (isClass (configFile >> "CfgWeapons" >> _classname)): { + _displayName = getText (configFile >> "CfgWeapons" >> _classname >> "displayName"); + _picture = getText (configFile >> "CfgWeapons" >> _classname >> "picture"); + }; + case (isClass (configFile >> "CfgMagazines" >> _classname)): { + _displayName = getText (configFile >> "CfgMagazines" >> _classname >> "displayName"); + _picture = getText (configFile >> "CfgMagazines" >> _classname >> "picture"); + }; + case (isClass (configFile >> "CfgVehicles" >> _classname)): { + _displayName = getText (configFile >> "CfgVehicles" >> _classname >> "displayName"); + _picture = getText (configFile >> "CfgVehicles" >> _classname >> "picture"); + }; + case (isClass (configFile >> "CfgGlasses" >> _classname)): { + _displayName = getText (configFile >> "CfgGlasses" >> _classname >> "displayName"); + _picture = getText (configFile >> "CfgGlasses" >> _classname >> "picture"); + }; + default { + ERROR(format ["[%1] - bad classname", _classname]); + }; + }; + + _listBoxCtrl lbAdd format ["%1", _displayName]; + _listBoxCtrl lbSetData [_forEachIndex, _classname]; + _listBoxCtrl lbSetPicture [_forEachIndex, _picture]; + _listBoxCtrl lbSetTextRight [_forEachIndex, str _count]; + }; +} forEach (_itemsCountArray select 0); diff --git a/addons/disarming/functions/fnc_verifyMagazinesMoved.sqf b/addons/disarming/functions/fnc_verifyMagazinesMoved.sqf new file mode 100644 index 0000000000..779a5e39ba --- /dev/null +++ b/addons/disarming/functions/fnc_verifyMagazinesMoved.sqf @@ -0,0 +1,41 @@ +/* + * Author: PabstMirror + * Verifies magazines moved with exact ammo counts preserved. + * Arrays will be in format from magazinesAmmo/magazinesAmmoCargo + * e.g.: [["30Rnd_65x39_caseless_mag",15], ["30Rnd_65x39_caseless_mag",30]] + * + * Arguments: + * 0: Start on container A + * 1: End on container A + * 2: Start on container B + * 3: End on container B + * + * Return Value: + * Verified Good + * + * Example: + * [stuff] call ace_disarming_fnc_verifyMagazinesMoved + * + * Public: No + */ +#include "script_component.hpp" + +private ["_problem", "_beginingArray"]; + +PARAMS_4(_startA,_endA,_startB,_endB); + +//Quick Lazy Count Check +if (((count _startA) + (count _startB)) != ((count _endA) + (count _endB))) exitWith { + false +}; + +_beginingArray = (_startA + _startB); + +_problem = false; +{ + _index = _beginingArray find _x; + if (_index == -1) exitWith {_problem = true;}; + _beginingArray deleteAt _index; +} forEach (_endA + _endB); + +(!_problem) && {_beginingArray isEqualTo []} diff --git a/addons/disarming/functions/script_component.hpp b/addons/disarming/functions/script_component.hpp new file mode 100644 index 0000000000..38e082ee0e --- /dev/null +++ b/addons/disarming/functions/script_component.hpp @@ -0,0 +1 @@ +#include "\z\ace\addons\disarming\script_component.hpp" \ No newline at end of file diff --git a/addons/disarming/gui_disarm.hpp b/addons/disarming/gui_disarm.hpp new file mode 100644 index 0000000000..0961b809ed --- /dev/null +++ b/addons/disarming/gui_disarm.hpp @@ -0,0 +1,162 @@ +//The disarming dialog +//Meant to mimic the real BIS inventory (so people understand how to use it) + +class RscText; +class RscPicture; +class RscActiveText; +class RscListBox; + +//Use the definese from +#define X_BIS(num) (num * (((safezoneW / safezoneH) min 1.2) / 40) + (safezoneX + (safezoneW - ((safezoneW / safezoneH) min 1.2))/2)) +#define Y_BIS(num) (num * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)) +#define W_BIS(num) (num * (((safezoneW / safezoneH) min 1.2) / 40)) +#define H_BIS(num) (num * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)) + +#define X_MAKEITBIGGA(num) (num * (safeZoneH / 40) + (safezoneX + (safezoneW - safeZoneH)/2)) +#define Y_MAKEITBIGGA(num) (num * (safeZoneH / 30) + (safezoneY + (safezoneH - (safeZoneH / 1.2))/2)) +#define W_MAKEITBIGGA(num) (num * (safeZoneH / 40)) +#define H_MAKEITBIGGA(num) (num * (safeZoneH / 30)) + +#define X_PART(num) QUOTE(linearConversion [ARR_5(0, 2, (missionNamespace getVariable [ARR_2(QUOTE(QEGVAR(inventory,inventoryDisplaySize)), 0)]), X_BIS(num), X_MAKEITBIGGA(num))]) +#define Y_PART(num) QUOTE(linearConversion [ARR_5(0, 2, (missionNamespace getVariable [ARR_2(QUOTE(QEGVAR(inventory,inventoryDisplaySize)), 0)]), Y_BIS(num), Y_MAKEITBIGGA(num))]) +#define W_PART(num) QUOTE(linearConversion [ARR_5(0, 2, (missionNamespace getVariable [ARR_2(QUOTE(QEGVAR(inventory,inventoryDisplaySize)), 0)]), W_BIS(num), W_MAKEITBIGGA(num))]) +#define H_PART(num) QUOTE(linearConversion [ARR_5(0, 2, (missionNamespace getVariable [ARR_2(QUOTE(QEGVAR(inventory,inventoryDisplaySize)), 0)]), H_BIS(num), H_MAKEITBIGGA(num))]) + +class GVAR(remoteInventory) { + idd = -1; + movingEnable = 0; + enableSimulation = 1; + enableDisplay = 1; + onLoad = "uiNamespace setVariable ['ACE_remoteInventory', _this select 0];"; + duration = 2147483647; + fadein = 0; + fadeout = 0; + + class Colors { + dragValidBgr[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])",0.5}; + dragInvalidBgr[] = {"(profilenamespace getvariable ['IGUI_ERROR_RGB_R',0.8])","(profilenamespace getvariable ['IGUI_ERROR_RGB_G',0.0])","(profilenamespace getvariable ['IGUI_ERROR_RGB_B',0.0])",0.5}; + dragValidBar[] = {"(profilenamespace getvariable ['IGUI_WARNING_RGB_R',0.8])","(profilenamespace getvariable ['IGUI_WARNING_RGB_G',0.5])","(profilenamespace getvariable ['IGUI_WARNING_RGB_B',0.0])",0.5}; + dragInvalidBar[] = {"(profilenamespace getvariable ['IGUI_ERROR_RGB_R',0.8])","(profilenamespace getvariable ['IGUI_ERROR_RGB_G',0.0])","(profilenamespace getvariable ['IGUI_ERROR_RGB_B',0.0])",0.5}; + progressBar[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])",1}; + progressBarBgr[] = {"(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])","(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])","(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])",0.75}; + highlight[] = {"(profilenamespace getvariable ['IGUI_TEXT_RGB_R',0])","(profilenamespace getvariable ['IGUI_TEXT_RGB_G',1])","(profilenamespace getvariable ['IGUI_TEXT_RGB_B',1])",0.5}; + }; + + class controlsBackground {}; + + class controls { + class CA_ContainerBackground: RscText { + idc = -1; + x = X_PART(1); + y = Y_PART(1); + w = W_PART(12); + h = H_PART(22.5); + colorBackground[] = {0.05,0.05,0.05,0.7}; + }; + class CA_PlayerBackground: RscText { + idc = -1; + x = X_PART(14.6); + y = Y_PART(2); + w = W_PART(24.4); + h = H_PART(21.5); + colorBackground[] = {0.05,0.05,0.05,0.7}; + }; + class TitleBackground: RscText { + idc = -1; + x = X_PART(14.6); + y = Y_PART(1); + w = W_PART(24.4); + h = H_PART(1); + colorBackground[] = {0.1,0.1,0.1,1}; + }; + class PlayersName: RscText { + idc = 111; + // text = "Player name here:"; + x = X_PART(15.6); + y = Y_PART(1); + w = W_PART(19.8); + h = H_PART(1); + }; + class RankBackground: RscText { + idc = -1; + x = X_PART(15.1); + y = Y_PART(1.25); + w = W_PART(0.6); + h = H_PART(0.6); + colorBackground[] = {1,1,1,0.2}; + }; + class RankPicture: RscPicture { + idc = 1203; + // text = "\A3\Ui_f\data\GUI\Cfg\Ranks\corporal_gs.paa"; + x = X_PART(15.1); + y = Y_PART(1.25); + w = W_PART(0.6); + h = H_PART(0.6); + }; + class ButtonBack: RscActiveText { + idc = -1; + style = 48; + color[] = {1,1,1,0.7}; + text = "\A3\Ui_f\data\GUI\Rsc\RscDisplayArcadeMap\icon_exit_cross_ca.paa"; + x = X_PART(38); + y = Y_PART(1); + w = W_PART(1); + h = H_PART(1); + colorText[] = {1,1,1,0.7}; + colorActive[] = {1,1,1,1}; + tooltip = "$STR_DISP_OPT_CLOSE"; + onButtonClick = "closeDialog 0"; + }; + class ExternalContainerBackground: RscPicture { + colorText[] = {1,1,1,0.1}; + idc = -1; + x = X_PART(1.5); + y = Y_PART(3.7); + w = W_PART(11); + h = H_PART(18.4); + }; + class PlayerContainerBackground: ExternalContainerBackground { + idc = -1; + x = X_PART(15.1); + y = Y_PART(6); + w = W_PART(11); + h = H_PART(14); + }; + class GroundTitleBackground: RscText { + idc = -1; + x = X_PART(1); + y = Y_PART(1); + w = W_PART(12); + h = H_PART(1); + colorBackground[] = {0.1,0.1,0.1,1}; + }; + class GroundName: RscText { + idc = -1; + text = "$STR_cfgVehicles_WeaponHolder0"; //"ground" + x = X_PART(1); + y = Y_PART(1); + w = W_PART(12); + h = H_PART(1); + }; + class GroundContainer: RscListBox { + idc = 632; + sizeEx = "0.8 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + sizeEx2 = "0.8 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + rowHeight = "1.75 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + canDrag = 0; + colorText[] = {1,1,1,1}; + colorBackground[] = {0,0,0,0}; + itemBackground[] = {1,1,1,0.2}; + itemSpacing = 0.001; + x = X_PART(1.5); + y = Y_PART(2.5); + w = W_PART(11); + h = H_PART(21); + }; + class UniformContainer: GroundContainer { + idc = 633; + canDrag = 1; + x = X_PART(15.1); + }; + }; +}; diff --git a/addons/disarming/script_component.hpp b/addons/disarming/script_component.hpp new file mode 100644 index 0000000000..d9bec366dc --- /dev/null +++ b/addons/disarming/script_component.hpp @@ -0,0 +1,16 @@ +#define COMPONENT disarming +#include "\z\ace\addons\main\script_mod.hpp" + +#ifdef DEBUG_ENABLED_DISARMING + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_DISARMING + #define DEBUG_SETTINGS DEBUG_SETTINGS_DISARMING +#endif + +#include "\z\ace\addons\main\script_macros.hpp" + +#define DISARM_CONTAINER "GroundWeaponHolder" +#define DUMMY_ITEM "ACE_DebugPotato" +#define UNIQUE_MAGAZINES ["ACE_key_customKeyMagazine"] \ No newline at end of file diff --git a/addons/disarming/stringtable.xml b/addons/disarming/stringtable.xml new file mode 100644 index 0000000000..845d0c286e --- /dev/null +++ b/addons/disarming/stringtable.xml @@ -0,0 +1,9 @@ + + + + + + Open Inventory + + + \ No newline at end of file diff --git a/addons/disposable/stringtable.xml b/addons/disposable/stringtable.xml index 8b6c032961..86c4b2d8e8 100644 --- a/addons/disposable/stringtable.xml +++ b/addons/disposable/stringtable.xml @@ -1,5 +1,4 @@  - @@ -7,7 +6,7 @@ Benutze Einwegwaffe Tube utilisé Použitý odpalovač - Zużyta tuba + Zużyta rura Lanzador utilizado Használt cső Отстрелянная труба @@ -17,20 +16,20 @@ Benutzter Einweg-Raketenwerfer Lance-roquette à usage unique utilisé Použitý raketomet - Zużyta tuba granatnika jednorazowego użytku + Zużyta rura granatnika jednorazowego użytku Lanzador desechable utilizado Használt rakétavető Отстрелянная одноразовая пусковая установка Preloaded Missile Dummy - Preloaded Missile Dummy - Preloaded Missile Dummy - Preloaded Missile Dummy - Preloaded Missile Dummy + Vorgeladene Racketennachbildung + Missile préchargé Dummy + Přednabitá dummy střela + Wstępnie załadowana atrapa pocisku Preloaded Missile Dummy Preloaded Missile Dummy Заряженная ракетная пустышка - \ No newline at end of file + diff --git a/addons/dragging/functions/fnc_dropObject.sqf b/addons/dragging/functions/fnc_dropObject.sqf index 489457bfbc..9589457dbe 100644 --- a/addons/dragging/functions/fnc_dropObject.sqf +++ b/addons/dragging/functions/fnc_dropObject.sqf @@ -23,8 +23,10 @@ _unit removeAction (_unit getVariable [QGVAR(ReleaseActionID), -1]); private "_inBuilding"; _inBuilding = [_unit] call FUNC(isObjectOnObject); -// play release animation -_unit playAction "released"; +if !(_unit getvariable ["ACE_isUnconscious", false]) then { + // play release animation + _unit playAction "released"; +}; // prevent collision damage ["fixCollision", _unit] call EFUNC(common,localEvent); @@ -58,3 +60,7 @@ if !(_target isKindOf "CAManBase") then { ["fixPosition", _target, _target] call EFUNC(common,targetEvent); ["fixFloating", _target, _target] call EFUNC(common,targetEvent); }; + +if (_unit getvariable ["ACE_isUnconscious", false]) then { + [_unit, "unconscious", 2, true] call EFUNC(common,doAnimation); +}; diff --git a/addons/dragging/functions/fnc_dropObject_carry.sqf b/addons/dragging/functions/fnc_dropObject_carry.sqf index 5e2ea8b8c1..b6dfe9fc45 100644 --- a/addons/dragging/functions/fnc_dropObject_carry.sqf +++ b/addons/dragging/functions/fnc_dropObject_carry.sqf @@ -32,7 +32,7 @@ detach _target; // fix anim when aborting carrying persons if (_target isKindOf "CAManBase" || {animationState _unit in CARRY_ANIMATIONS}) then { - if (vehicle _unit == _unit) then { + if (vehicle _unit == _unit && {!(_unit getvariable ["ACE_isUnconscious", false])}) then { [_unit, "", 2, true] call EFUNC(common,doAnimation); }; diff --git a/addons/dragging/stringtable.xml b/addons/dragging/stringtable.xml index 9193d2712e..fd5fc70573 100644 --- a/addons/dragging/stringtable.xml +++ b/addons/dragging/stringtable.xml @@ -1,5 +1,4 @@ - - + @@ -28,18 +27,21 @@ Item to heavy - Gegenstand zu schwer + Gegenstand ist zu schwer Articulo demasiado pesado + Przedmiot zbyt ciężki + Objet trop lourd Dieser Gegenstand kann nicht gezogen werden, da er zu schwer ist. Não é possível carregar o item devido a seu peso Non è possibile trascinare l'oggetto a causa del suo peso Túl nehéz ahhoz, hogy elhúzd --> + Слишком тяжело + Moc težké Carry diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml index 386e1677ed..b8ea358f95 100644 --- a/addons/explosives/stringtable.xml +++ b/addons/explosives/stringtable.xml @@ -1,499 +1,501 @@  - - - - Explosives - Sprengstoffe - Explosivos - Ładunki wybuchowe - Explosifs - Výbušniny - Esplosivi - Robbanóanyagok - Explosivos - Взрывчатка - - - Place >> - Platzieren >> - Colocar >> - Umieść >> - Placer >> - Položit >> - Piazza >> - Lerakás >> - Colocar >> - Установить >> - - - Detonate >> - Zünden >> - Detonar >> - Detonuj >> - Mise à feu >> - Odpálit >> - Detona >> - Robbantás >> - Detonar >> - Подрыв >> - - - Explosive code: %1 - Sprengstoffcode: %1 - Código del explosivo: %1 - Kod ładunku: %1 - Code explosif: %1 - Kód výbušniny: %1 - Codice dell'esplosivo : %1 - Robbanóanyag kódja: %1 - Código do explosivo: %1 - Взрывная код: %1 - - - Place - Platzieren - Colocar - Umieść - Placer - Položit - Piazza - Elhelyezés - Colocar - Положить - - - Cancel - Abbrechen - Cancelar - Anuluj - Annuler - Zrušit - Annulla - Mégsem - Cancelar - Отмена - - - + Modifier, rotates - + Modifikator, drehen - + Modificador, girar - + Modificateur, tourner - + Modificatore, rotazione - + Otočit - + Változtatás, forgatás - + modyfikator, obracanie - + Modificador, rotaciona - + Bращать - - - Turn On Thor III - Thor III aktivieren - Encender Thor III - Włącz Thor III - Allumer Thor III - Zapnout Thor III - Accendi Thor III - Thor III bekapcsolása - Ativar Thor III - Активировать Thor III - - - Turn Off Thor III - Thor III deaktivieren - Apagar Thor III - Wyłącz Thor III - Éteindre Thor III - Vypnout Thor III - Spegni Thor III - Thor III kikapcsolása - Desativar Thor III - Деактивировать Thor III - - - Cellphone - Mobiltelefon - Télefono móvil - Telefon komórkowy - Téléphone Portable - Telefon - Cellulare - Mobil - Celular - Сотовый телефон - - - Used to remotely trigger explosives - Wird benutzt um Sprengstoffe fernzuzünden - Usado para detonar remotamente explosivos - Używany do zdalnego detonowania ładunków wybuchowych - Utilisé pour déclencher des explosifs à distance - Používaný ke vzdálenému odpalování výbušnin - Usato per l'attivazione a distanza degli esplosivi - Robbanóanyagok távoli robbantásához - Usado para acionar explosivos remotamente - Используется для удаленного запуска взрывчатку - - - M57 Firing Device - M57 Zündvorrichtung - Dispositivo de detonación M57 - Zapalnik M57 - M57 Dispositif de mise à feu - M57 Odpalovací Zařízení - Detonatore M57 - M57 Detonátor - M57 Dispositivo de Detonação - Взрыватель M57 - - - Used to remotely trigger explosives - Wird benutzt um Sprengstoffe fernzuzünden - Usado para detonar remotamente explosivos - Używany do zdalnego detonowania ładunków wybuchowych - Utilisé pour déclencher des explosifs à distance - Použévané ke vzdálenému odpalování výbušnin - Usato per l'attivazione a distanza degli esplosivi - Robbanóanyagok távoli robbantásához - Usado para acionar explosivos remotamente - Используется для удаленного запуска взрывчатку - - - M26 Firing Device - M26 Zündvorrichtung - Dispositivo de detonación MK26 - Zapalnik M26 - M26 Dispositif de mise à feu - M26 Odpalovací Zařízení - Detonatore M26 - M26 Detonátor - M26 Dispositivo de Detonação - Взрыватель M26 - - - M152 RAMS - M152 RAMS - M152 RAMS - M152 RAMS - M152 RAMS - M152 RAMS - M152 RAMS - M152 RAMS - M152 RAMS - M152 RAMS - - - Defusal Kit - Entschärfungskit - Kit de desactivación - Zestaw do rozbrajania - Kit de désamorçage - Zneškodňovací sada - Kit E.O.D. - Hatástalanító felszerelés - Kit de desarme - Разминирование комплект - - - Allows defusing of explosives - Erlaubt die Entschärfung von Sprengstoffen - Permite desactivar explosivos - Umożliwia rozbrajanie ładunków wybuchowych - Permet de désamorçer des explosifs - Dovoluje zneškodňování výbušnin - Consente la disattivazione degli ordigni esplosivi - Robbanóanyagok hatástalanításához - Permite o desarme de explosivos - Allows defusing of explosives - - - Add to Speed Dial - Zur Schnellauswahl hinzufügen - Agregar a marcado rápido - Dodaj do szybkiego wybierania - Ajouter à la composition rapide - Přidat jako rychlou volbu - Aggiungi alla selezione rapida - Hozzáadás gyorshíváshoz - Adicionar à ligação rápida - Добавить в ускоренный набор - - - Clear - Löschen - Borrar - Usuń - Désamorçé - Čistý - Libera - Törlés - Limpar - Pассеиваться - - - Dial - Wählen - Marcar - Wybierz mumer - Composer - Vytočit - Composizione numero - Tárcsázás - Discar - Hабрать - - - Up - Hoch - Arriba - W górę - Haut - Nahoru - Sopra - Fel - Cima - Поднять - - - Down - Runter - Abajo - W dół - Bas - Dolu - Sotto - Le - Baixo - Опустить - - - Cancel - Abbrechen - Cancelar - Anuluj - Annuler - Zrušit - Annulla - Mégsem - Cancelar - Отмена - - - Detonate Menu - "Zünden"-Menü - Menú de detonación - Menu detonowania - Menu de mise à feu - Menu Detonace - Menù di detonazione - Robbantás menü - Menu de detonação - Меню Подрыв - - - Place Menu - "Platzieren"-Menü - Menú de colocación - Menu umieszczania - Menu Placement - Menu Umístění - Menù di collocamento - Lerakás menü - Menu de posicionamento - Меню Установить - - - Defuse - Entschärfen - Desactivar - Rozbrój - Désamorçer - Zneškodnit - Disinnesca - Hatástalanítás - Desarmar - Обезвредить - - - Defusing Explosive... - Entschärfe Sprengstoff... - Desactivando explosivo... - Rozbrajanie ładunku... - Désamorçage des explosifs... - Zneškodňuji Výbušninu... - Esposivo in fase di disattivazione... - Robbanóanyag hatástalaníása... - Desarmando Explosivo... - Обезвреживание... - - - Timer - Zeitzünder - Temporizador - Czasomierz - Retard - Časovač - Cronometro - Időzített - Timer - Временной - - - Time: %1m %2s - Zeit: %1m %2s - Tiempo: %1m %2s - Czas: %1m %2s - Temps : %1m %2s - Čas: %1m %2s - Tempo : %1m %2s - Idő: %1m %2s - Tempo: %1m %2s - Tемп: %1m %2c - - - Set Time - Zeit einstellen - Configurar tiempo - Ustaw czas - Régler retard - Nastavit Čas - Modifica il conto alla rovescia - Idő állítása - Configurar Tempo - Xронометр - - - Select a Trigger - Wähle einen Zünder - Seleccionar un disparador - Wybierz zapalnik - Sélectionner une mise à feu - Zvolit Detonátor - Seleziona un Attivatore - Detonátor kiválasztása - Selecionar um Gatilho - Выберите - - - Select - Wählen - Seleccionar - Wybierz - Sélectionner - Zvolit - Seleziona - Kiválasztás - Selecionar - Выбрать защелка - - - Pressure Plate - Płyta naciskowa - Placa de presión - Druckplatte - Plaque de pression - Nášlapná nástraha - Piastra a Pressione - Nyomólap - Placa de pressão - Давление - - - Tripwire - Linka naciągu - Cable trampa - Stolperdraht - Fil de butée - Nástražný drát - Filo a Inciampo - Botlódrót - Linha de tração - Натяжной - - - IR Sensor - Czujnik podczerwieni - Sensor IR - Infrarotsensor - Capteur IR - IR Značkovač - Sensore IR - IR szenzor - Sensor IV - ИК - - - No triggers available for %1 - Brak dostępnych zapalników dla %1 - No hay detonadores disponibles para %1 - Keine Auslöser vorhanden für %1 - Pas de mise à feu disponible pour %1 - Žádný detonátor k dispozici pro %1 - Nessun attivatore disponibile per %1 - Nincs detonátor a %1 - Nenhum gatilho disponível para %1 - Нет защелка доступны для %1 - - - IR Sensor (Side Attack) - Czujnik podczerwieni (wybuch na bok) - Sensor IR (ataque lateral) - Infrarotsensor (Seitenangriff) - Capteur IR (de flanc) - IR Značkovač (Výbuch stranou) - Sensore IR (Attacco laterale) - IR Sensor (Side Attack) - Sensor infravermelho (ataque lateral) - ИК (боковая атака) - - - Magnetic Influence Sensor (Bottom Attack) - Czujnik magnetyczny (wybuch w górę) - Sensor IM (ataque inferior) - Magnetfeldsensor (Bodenangriff) - Capteur Magnétique (par le bas) - Magnetický Senzor (Výbuch ze spoda) - Sensore Magnetico di Prossimità (Attacco inferiore) - Mágneses (Bottom Attack) - Influência magnética (ataque inferior) - Магнитный (дно атака) - - - No explosives on trigger. - Keine Sprengladungen auf diesem Auslöser. - Ningún explosivo en el detonador. - Pas d'explosif à mettre à feu. - Nessun esplosivo sul sensore. - Žádná výbušnina k odpálení. - Nincs robbanóanyag a detonátorhoz. - Brak ładunków na zapalnik. - Nenhum explosivo no gatilho. - Нет взрывчатки на курок. - - - Dead Man's Switch - Totmannschalter - Mise à feu par relâchement de pression - Spínač mrtvého muže - Czuwak - Detonador de hombre muerto - Dead Man's Switch - Кнопка мертвеца - - - Used to remotely trigger explosives when released. - Zündet Sprengladungen wenn losgelassen. - Déclenche la mise à feu d'un explosif lorsqu'il est libéré. - Používaný k vzdálenému odpálení, při uvolnění odpálí výbušniny - Używany w celu zdalnej detonacji ładunków kiedy jego operator zostanie zabity. - Utilizado para detonar explosivos remotamente al soltarlo. - Robbanóanyagok távoli robbantásához - Используется для дистанционного подрыва, после смерти оператора. - - - Pick up - Aufnehmen - Recoger - - + + + Explosives + Sprengstoffe + Explosivos + Ładunki wybuchowe + Explosifs + Výbušniny + Esplosivi + Robbanóanyagok + Explosivos + Взрывчатка + + + Place >> + Platzieren >> + Colocar >> + Umieść >> + Placer >> + Položit >> + Piazza >> + Lerakás >> + Colocar >> + Установить >> + + + Detonate >> + Zünden >> + Detonar >> + Detonuj >> + Mise à feu >> + Odpálit >> + Detona >> + Robbantás >> + Detonar >> + Подрыв >> + + + Explosive code: %1 + Sprengstoffcode: %1 + Código del explosivo: %1 + Kod ładunku: %1 + Code explosif: %1 + Kód výbušniny: %1 + Codice dell'esplosivo : %1 + Robbanóanyag kódja: %1 + Código do explosivo: %1 + Код подрыва: %1 + + + Place + Platzieren + Colocar + Umieść + Placer + Položit + Piazza + Elhelyezés + Colocar + Установить + + + Cancel + Abbrechen + Cancelar + Anuluj + Annuler + Zrušit + Annulla + Mégsem + Cancelar + Отмена + + + + Modifier, rotates + + Modifikator, drehen + + Modificador, girar + + Modificateur, tourner + + Modificatore, rotazione + + Modifikátor, otočit + + Változtatás, forgatás + + modyfikator, obracanie + + Modificador, rotaciona + + Bращать + + + Turn On Thor III + Thor III aktivieren + Encender Thor III + Włącz Thor III + Allumer Thor III + Zapnout Thor III + Accendi Thor III + Thor III bekapcsolása + Ativar Thor III + Активировать Thor III + + + Turn Off Thor III + Thor III deaktivieren + Apagar Thor III + Wyłącz Thor III + Éteindre Thor III + Vypnout Thor III + Spegni Thor III + Thor III kikapcsolása + Desativar Thor III + Деактивировать Thor III + + + Cellphone + Mobiltelefon + Télefono móvil + Telefon komórkowy + Téléphone Portable + Telefon + Cellulare + Mobil + Celular + Сотовый телефон + + + Used to remotely trigger explosives + Wird benutzt um Sprengstoffe fernzuzünden + Usado para detonar remotamente explosivos + Używany do zdalnego detonowania ładunków wybuchowych + Utilisé pour déclencher des explosifs à distance + Používaný ke vzdálenému odpalování výbušnin + Usato per l'attivazione a distanza degli esplosivi + Robbanóanyagok távoli robbantásához + Usado para acionar explosivos remotamente + Используется для удаленной детонации СВУ + + + M57 Firing Device + M57 Zündvorrichtung + Dispositivo de detonación M57 + Zapalnik M57 + M57 Dispositif de mise à feu + Odpalovací zařízení M57 + Detonatore M57 + M57 Detonátor + M57 Dispositivo de Detonação + Взрыватель M57 + + + Used to remotely trigger explosives + Wird benutzt um Sprengstoffe fernzuzünden + Usado para detonar remotamente explosivos + Używany do zdalnego detonowania ładunków wybuchowych + Utilisé pour déclencher des explosifs à distance + Používané ke vzdálenému odpalování výbušnin + Usato per l'attivazione a distanza degli esplosivi + Robbanóanyagok távoli robbantásához + Usado para acionar explosivos remotamente + Используется для удаленной детонации зарядов + + + M26 Firing Device + M26 Zündvorrichtung + Dispositivo de detonación MK26 + Zapalnik M26 + M26 Dispositif de mise à feu + Odpalovací zařízení M26 + Detonatore M26 + M26 Detonátor + M26 Dispositivo de Detonação + Взрыватель M26 + + + M152 RAMS + M152 RAMS + M152 RAMS + M152 RAMS + M152 RAMS + M152 RAMS + M152 RAMS + M152 RAMS + M152 RAMS + M152 RAMS + + + Defusal Kit + Entschärfungskit + Kit de desactivación + Zestaw do rozbrajania + Kit de désamorçage + Zneškodňovací sada + Kit E.O.D. + Hatástalanító felszerelés + Kit de desarme + Комплект разминирования + + + Allows defusing of explosives + Erlaubt die Entschärfung von Sprengstoffen + Permite desactivar explosivos + Umożliwia rozbrajanie ładunków wybuchowych + Permet de désamorçer des explosifs + Dovoluje zneškodňování výbušnin + Consente la disattivazione degli ordigni esplosivi + Robbanóanyagok hatástalanításához + Permite o desarme de explosivos + Позволяет обезвреживать ВУ + + + Add to Speed Dial + Zur Schnellauswahl hinzufügen + Agregar a marcado rápido + Dodaj do szybkiego wybierania + Ajouter à la composition rapide + Přidat jako rychlou volbu + Aggiungi alla selezione rapida + Hozzáadás gyorshíváshoz + Adicionar à ligação rápida + Добавить в ускоренный набор + + + Clear + Löschen + Borrar + Usuń + Désamorçé + Čistý + Libera + Törlés + Limpar + Очистить + + + Dial + Wählen + Marcar + Wybierz mumer + Composer + Vytočit + Composizione numero + Tárcsázás + Discar + Hабрать + + + Up + Hoch + Arriba + W górę + Haut + Nahoru + Sopra + Fel + Cima + Вызов + + + Down + Runter + Abajo + W dół + Bas + Dolu + Sotto + Le + Baixo + Сброс + + + Cancel + Abbrechen + Cancelar + Anuluj + Annuler + Zrušit + Annulla + Mégsem + Cancelar + Отмена + + + Detonate Menu + "Zünden"-Menü + Menú de detonación + Menu detonowania + Menu de mise à feu + Menu Detonace + Menù di detonazione + Robbantás menü + Menu de detonação + Меню подрыва + + + Place Menu + "Platzieren"-Menü + Menú de colocación + Menu umieszczania + Menu Placement + Menu Umístění + Menù di collocamento + Lerakás menü + Menu de posicionamento + Меню детонации + + + Defuse + Entschärfen + Desactivar + Rozbrój + Désamorçer + Zneškodnit + Disinnesca + Hatástalanítás + Desarmar + Обезвредить + + + Defusing Explosive... + Entschärfe Sprengstoff... + Desactivando explosivo... + Rozbrajanie ładunku... + Désamorçage des explosifs... + Zneškodňuji Výbušninu... + Esposivo in fase di disattivazione... + Robbanóanyag hatástalaníása... + Desarmando Explosivo... + Обезвреживание... + + + Timer + Zeitzünder + Temporizador + Czasomierz + Retard + Časovač + Cronometro + Időzített + Timer + Таймер + + + Time: %1m %2s + Zeit: %1m %2s + Tiempo: %1m %2s + Czas: %1m %2s + Temps : %1m %2s + Čas: %1m %2s + Tempo : %1m %2s + Idő: %1m %2s + Tempo: %1m %2s + Время: %1m %2c + + + Set Time + Zeit einstellen + Configurar tiempo + Ustaw czas + Régler retard + Nastavit Čas + Modifica il conto alla rovescia + Idő állítása + Configurar Tempo + Установить время + + + Select a Trigger + Wähle einen Zünder + Seleccionar un disparador + Wybierz zapalnik + Sélectionner une mise à feu + Zvolit Detonátor + Seleziona un Attivatore + Detonátor kiválasztása + Selecionar um Gatilho + Выберите детонатор + + + Select + Wählen + Seleccionar + Wybierz + Sélectionner + Zvolit + Seleziona + Kiválasztás + Selecionar + Выбрать + + + Pressure Plate + Płyta naciskowa + Placa de presión + Druckplatte + Plaque de pression + Nášlapná nástraha + Piastra a Pressione + Nyomólap + Placa de pressão + Давление + + + Tripwire + Linka naciągu + Cable trampa + Stolperdraht + Fil de butée + Nástražný drát + Filo a Inciampo + Botlódrót + Linha de tração + Растяжка + + + IR Sensor + Czujnik podczerwieni + Sensor IR + Infrarotsensor + Capteur IR + IR Značkovač + Sensore IR + IR szenzor + Sensor IV + ИК сенсор + + + No triggers available for %1 + Brak dostępnych zapalników dla %1 + No hay detonadores disponibles para %1 + Keine Auslöser vorhanden für %1 + Pas de mise à feu disponible pour %1 + Žádný detonátor k dispozici pro %1 + Nessun attivatore disponibile per %1 + Nincs detonátor a %1 + Nenhum gatilho disponível para %1 + Нет доступных взрывателей для %1 + + + IR Sensor (Side Attack) + Czujnik podczerwieni (wybuch na bok) + Sensor IR (ataque lateral) + Infrarotsensor (Seitenangriff) + Capteur IR (de flanc) + IR Značkovač (Výbuch stranou) + Sensore IR (Attacco laterale) + IR Sensor (Side Attack) + Sensor infravermelho (ataque lateral) + ИК (детонация вбок) + + + Magnetic Influence Sensor (Bottom Attack) + Czujnik magnetyczny (wybuch w górę) + Sensor IM (ataque inferior) + Magnetfeldsensor (Bodenangriff) + Capteur Magnétique (par le bas) + Magnetický Senzor (Výbuch ze spoda) + Sensore Magnetico di Prossimità (Attacco inferiore) + Mágneses (Bottom Attack) + Influência magnética (ataque inferior) + Магнитный (детонация вверх) + + + No explosives on trigger. + Keine Sprengladungen auf diesem Auslöser. + Ningún explosivo en el detonador. + Pas d'explosif à mettre à feu. + Nessun esplosivo sul sensore. + Žádná výbušnina k odpálení. + Nincs robbanóanyag a detonátorhoz. + Brak ładunków na zapalnik. + Nenhum explosivo no gatilho. + Нет доступных ВУ для взрывателя. + + + Dead Man's Switch + Totmannschalter + Mise à feu par relâchement de pression + Spínač mrtvého muže + Czuwak + Detonador de hombre muerto + Dead Man's Switch + Ловушка мертвеца + + + Used to remotely trigger explosives when released. + Zündet Sprengladungen wenn losgelassen. + Déclenche la mise à feu d'un explosif lorsqu'il est libéré. + Používaný k vzdálenému odpálení, při uvolnění odpálí výbušniny + Używany w celu zdalnej detonacji ładunków kiedy jego operator zostanie zabity. + Utilizado para detonar explosivos remotamente al soltarlo. + Robbanóanyagok távoli robbantásához + Используется для дистанционного подрыва, после смерти оператора. + + + Pick up + Aufheben + Recoger + Sebrat + Podnieś + Prendre + + diff --git a/addons/fcs/XEH_clientInit.sqf b/addons/fcs/XEH_clientInit.sqf index d3605d87a7..3338e739e1 100644 --- a/addons/fcs/XEH_clientInit.sqf +++ b/addons/fcs/XEH_clientInit.sqf @@ -4,6 +4,8 @@ GVAR(enabled) = false; GVAR(time) = 0; GVAR(position) = [0,0,0]; +if (!hasInterface) exitWith {}; + #include "initKeybinds.sqf" ["infoDisplayChanged", { diff --git a/addons/fcs/stringtable.xml b/addons/fcs/stringtable.xml index 154d874f73..1f1b0d3acf 100644 --- a/addons/fcs/stringtable.xml +++ b/addons/fcs/stringtable.xml @@ -1,5 +1,4 @@  - @@ -9,13 +8,7 @@ Naświetl cel / Zmierz odległość Označit cíl / Změřit vzdálenost Iluminar objetivo / Medir distancia - - Подсветить цель / Измерить расстояние + Подсветить цель / Замерить расстояние Zeroed To @@ -24,7 +17,7 @@ Wyzerowany na Nastaveno na Zéroté à - Зероинг + Выставлено на Nullázás Fixado em Azzeramento a @@ -32,7 +25,7 @@ Adjust FCS Range (Up) Entfernung des FLS erhöhen - Zwiększ zasięg FCS + Zwiększ zasięg SKO Ajustar distancia del FCS (arriba) Nastavit FCS Náměr (nahoru) Augmenter la distance du SCT @@ -44,7 +37,7 @@ Adjust FCS Range (Down) Entfernung des FLS verringern - Zmniejsz zasięg FCS + Zmniejsz zasięg SKO Ajustar distancia del FCS (abajo) Nastavit FCS Náměr (dolů) Réduire la distance du SCT @@ -58,7 +51,7 @@ FLS zurücksetzen Reiniciar FCS Réinitialiser le SCT - Resetuj FCS + Resetuj SKO Resetovat FCS FCS visszaállítása Reiniciar FCS @@ -70,12 +63,12 @@ FLS wurde zurückgesetzt. FCS reiniciado SCT réinitialisé. - FCS został zresetowany. + SKO został zresetowany. FCS byl resetován. Az FCS visszaállítva FCS reiniciado. L'FCS è stato azzerato - СУО обнулен + СУО обнулен. diff --git a/addons/flashsuppressors/stringtable.xml b/addons/flashsuppressors/stringtable.xml index 7490ce42a6..77b1e30995 100644 --- a/addons/flashsuppressors/stringtable.xml +++ b/addons/flashsuppressors/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -9,7 +9,7 @@ Soppressore di fiamma (6.5mm) Supressor de Clarão (6,5mm) Tłumik płomieni (6,5 mm) - Tlumič záblesku (6,5 mm) + Tlumič plamene (6,5 mm) Cache-flamme (6,5 mm) Пламегаситель (6,5 мм) Supresor (6,5 mm) @@ -21,7 +21,7 @@ Soppressore di fiamma (7.62mm) Supressor de Clarão (7,62mm) Tłumik płomieni (7,62 mm) - Tlumič záblesku (7,62 mm) + Tlumič plamene (7,62 mm) Cache-flamme (7,62 mm) Пламегаситель (7,62 мм) Supresor (7,62 mm) @@ -33,7 +33,7 @@ Soppressore di fiamma (5.56mm) Supressor de Clarão (5,56mm) Tłumik płomieni (5,56 mm) - Tlumič záblesku (5,56 mm) + Tlumič plamene (5,56 mm) Cache-flamme (5,56 mm) Пламегаситель (5,56 мм) Supresor (5,56 mm) @@ -45,7 +45,7 @@ Soppressore di fiamma (.45 ACP) Supressor de Clarão (.45 ACP) Tłumik płomieni (.45 ACP) - Tlumič záblesku (.45 ACP) + Tlumič plamene (.45 ACP) Cache-flamme (.45 ACP) Пламегаситель (.45 ACP) Supresor (.45 ACP) @@ -57,7 +57,7 @@ Soppressore di fiamma (9 mm) Supressor de Clarão (9mm) Tłumik płomieni (9 mm) - Tlumič záblesku (9 mm) + Tlumič plamene (9 mm) Cache-flamme (9 mm) Пламегаситель (9 мм) Supresor (9 mm) diff --git a/addons/frag/stringtable.xml b/addons/frag/stringtable.xml index 6bfd3c2b46..443646424a 100644 --- a/addons/frag/stringtable.xml +++ b/addons/frag/stringtable.xml @@ -1,16 +1,13 @@ - - - - - + + + Disable Fragmentation + Keine Schrapnelle Zakázat fragmentaci granátů - Weapons: Keine Schrapnelle Desactivar fragmentación - Wyłącz głowice fragmentacyjne + Wyłącz fragmentację odłamków Выключить разлёт осколков - diff --git a/addons/goggles/stringtable.xml b/addons/goggles/stringtable.xml index 1756442176..952a1320a0 100644 --- a/addons/goggles/stringtable.xml +++ b/addons/goggles/stringtable.xml @@ -1,14 +1,13 @@  - Show Goggle Effects in Third Person Brilleneffekt in dritter Person anzeigen Mostrar efectos de las gafas en tercera persona - Zobrazit účinky brýlí v třetí osobě + Zobrazit efekt brýlí v třetí osobě Effets de lunettes à la 3ème personne - Отображать эффект очков в третьем лице + Отображать эффект очков от третьего лица Szemüveg effekt mutatása külső nézetből Włącz efekty gogli w trzeciej osobie Mostrar efeitos de óculos em Terceira Pessoa diff --git a/addons/grenades/stringtable.xml b/addons/grenades/stringtable.xml index 1129d44271..69f829037e 100644 --- a/addons/grenades/stringtable.xml +++ b/addons/grenades/stringtable.xml @@ -1,5 +1,4 @@ - - + @@ -19,7 +18,7 @@ Normaler Wurf Lanzamiento normal Normalny rzut - Normální + Normální hod Lancer Normal Нормальный бросок Normál dobás @@ -31,7 +30,7 @@ Hoher Wurf Lanzamiento alto Rzut lobem - Vysoko + Vysoký hod Lancer Haut Высокий бросок Magas dobás @@ -43,7 +42,7 @@ Präziser Wurf Lanzamiento preciso Precyzyjny rzut - Přesně + Přesný hod Lancer Précis Точный бросок Pontos dobás @@ -80,7 +79,7 @@ Granada aturdidora M84 M84 Grenade Incapacitante Granat hukowy M84 - M84 Omračující granát + Omračující granát M84 M84 светозвуковая граната M84 Villanógránát Granata Stordente M84 @@ -93,7 +92,7 @@ Les grenades incapacitantes servent à désorienter ou distraire une menace pendant quelques secondes. Granat ogłusza, nie zabijając przeciwnika. Detonacja daje efekt oślepiającego błysku i głośnego huku. Omračující granát je taktická nesmrtící zbraň používaná při záchraně rukojmí a zvládání davu. - Граната XM84 (M84) - не летального действия, и предназначена для отвлечения и временного вывода из строя, либо дезориентации противника. Основное использование нашла при освобождении заложников, захвате преступников и террористов, а также проведении диверсионных миссий. + XM84 (M84) - граната нелетального действия, и предназначена для отвлечения и временного вывода из строя, либо дезориентации противника. Основное использование нашла при освобождении заложников, захвате преступников и террористов, а также проведении диверсионных миссий. Eldobás után felrobban és éles hang, valamint fényhatással zavarja össze a környezetében tartózkodókat. Anche conosciuta come flashbang. Causa accecamento immediato, sensazioni di sposatezza, mancanza d'equilibrio e disturbi al timpano. Um tipo de granada não-letal destinado a confundir, desorientar e distrair uma potencial ameaça. @@ -101,7 +100,7 @@ M127A1 Hand Held Signal (White) M127A1 Leuchtmittel (Weiß) - M127A1 Světlice (Bílá) + Světlice M127A1 (Bílá) M127A1 Jelzőrakéta (Fehér) M127A1 Bengala (Bianco) Flara ręczna sygnałowa M127A1 (biała) @@ -113,7 +112,7 @@ M127A1 Hand Held Signal (Red) M127A1 Leuchtmittel (Rot) - M127A1 Světlice (Červená) + Světlice M127A1 (Červená) M127A1 Jelzőrakéta (Piros) M127A1 Bengala (Rosso) Flara ręczna sygnałowa M127A1 (czerwona) @@ -125,7 +124,7 @@ M127A1 Hand Held Signal (Green) M127A1 Leuchtmittel (Grün) - M127A1 Světlice (Zelená) + Světlice M127A1 (Zelená) M127A1 Jelzőrakéta (Zöld) M127A1 Bengala (Verde) Flara ręczna sygnałowa M127A1 (zielona) @@ -137,7 +136,7 @@ M127A1 Hand Held Signal (Yellow) M127A1 Leuchtmittel (Gelb) - M127A1 Světlice (Žlutá) + Světlice M127A1 (Žlutá) M127A1 Jelzőrakéta (Sárga) M127A1 Bengala (Giallo) Flara ręczna sygnałowa M127A1 (żółta) @@ -185,7 +184,7 @@ Yellow Hand Flare Gelbe Leuchtkugel, wird wie eine Granate geworfen. - Světlice Žlutá + Světlice (Žlutá) Jelzőrakéta (Sárga) Bengala (Giallo) Flara ręczna (żółta) diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index f042128301..9c6a107466 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -1,5 +1,4 @@  - @@ -30,7 +29,7 @@ Earplugs in Ohrenstöpsel drinnen Poner tapones - Załóż stopery + Włóż stopery Dát špunty do uší Беруши надеты Bouchons mis @@ -42,7 +41,7 @@ Earplugs out Ohrenstöpsel raus Quitar tapones - Zdejmij stopery + Wyjmij stopery Vyndat špunty z uší Беруши сняты Bouchons enlevés @@ -54,7 +53,7 @@ Earplugs in Ohrenstöpsel drinnen Tapones puestos - Stopery założone + Stopery włożone Špunty v uších Беруши надеты Bouchons mis @@ -66,7 +65,7 @@ Earplugs out Ohrenstöpsel raus Tapones quitados - Stopery zdjęte + Stopery wyjęte Špunty venku z uší Беруши сняты Bouchons enlevés @@ -100,8 +99,12 @@ Disable ear ringing + Désactiver les tintements d'oreille Desactivar zumbido de oídos + Отключить эффект баротравмы Knalltrauma deaktivieren + Vypnout pískání v uších + Wyłącz dzwonienie w uszach - \ No newline at end of file + diff --git a/addons/interact_menu/functions/fnc_keyDown.sqf b/addons/interact_menu/functions/fnc_keyDown.sqf index d4a7f8a96e..47fdfb1951 100644 --- a/addons/interact_menu/functions/fnc_keyDown.sqf +++ b/addons/interact_menu/functions/fnc_keyDown.sqf @@ -32,7 +32,7 @@ GVAR(openedMenuType) = _menuType; GVAR(useCursorMenu) = (vehicle ACE_player != ACE_player) || visibleMap || - {(_menuType == 1) && {(isWeaponDeployed ACE_player) || GVAR(AlwaysUseCursorSelfInteraction)}}; + {(_menuType == 1) && {(isWeaponDeployed ACE_player) || GVAR(AlwaysUseCursorSelfInteraction) || {cameraView == "GUNNER"}}}; if (GVAR(useCursorMenu)) then { createDialog QGVAR(cursorMenu); // The dialog sets: diff --git a/addons/interact_menu/stringtable.xml b/addons/interact_menu/stringtable.xml index e0f2c4967e..0f718ded19 100644 --- a/addons/interact_menu/stringtable.xml +++ b/addons/interact_menu/stringtable.xml @@ -1,31 +1,50 @@  - Always display cursor for self interaction Immer den Cursor für Selbst-Interaktionen anzeigen. Mostrar siempre el cursor para la interacción propia + Всегда показывать курсор для взаимодействия с собой + Zobrazit kurzor v menu pro vlastní interakci + Zawsze wyświetlaj kursor dla własnej interakcji + Toujours afficher le curseur pour les interactions sur soi-même Interact Key - Interaktionstaste + Fremdinteraktionsmenü-Taste Tecla de interacción + Клавиша взаимодействия + Klávesa pro interakci + Klawisz interakcji + Touche d'interaction Self Interaction Key - Selbst-Interaktionstaste + Eigeninteraktionsmenü-Taste Tecla de interacción propia + Клавиша взаимодействия (с собой) + Klávesa pro vlastní interakci + Klawisz własnej interakcji + Touche d'Interaction sur soi-même Self Actions - Selbst-Interaktion + Selbst-Aktionen Acciones propias + Действия с собой + Vlastní akce + Własne akcje + Actions sur soi-même Vehicle Actions - Fahrzeug-Interaktion + Fahrzeug-Aktionen Acciones de vehículo + Действия на транспорте + Interakce s vozidly + Akcje pojazdu + Actions sur les véhicules diff --git a/addons/interaction/CfgEventHandlers.hpp b/addons/interaction/CfgEventHandlers.hpp index 17200056b8..7b003bbe8c 100644 --- a/addons/interaction/CfgEventHandlers.hpp +++ b/addons/interaction/CfgEventHandlers.hpp @@ -1,27 +1,11 @@ class Extended_PreInit_EventHandlers { - class ADDON { - init = QUOTE( call COMPILE_FILE(XEH_preInit) ); - }; + class ADDON { + init = QUOTE( call COMPILE_FILE(XEH_preInit) ); + }; }; class Extended_PostInit_EventHandlers { - class ADDON { - clientInit = QUOTE( call COMPILE_FILE(XEH_clientInit) ); - }; -}; - -class Extended_GetIn_EventHandlers { - class All { - class ADDONnu { - clientGetIn = QUOTE( if (_this select 2 == ACE_player && {!isNull (findDisplay 1713999)}) then {(findDisplay 1713999) closeDisplay 1}); + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_postInit)); }; - }; -}; - -class Extended_GetOut_EventHandlers { - class All { - class ADDONnu { - clientGetOut = QUOTE( if (_this select 2 == ACE_player && {!isNull (findDisplay 1713999)}) then {(findDisplay 1713999) closeDisplay 1}); - }; - }; }; diff --git a/addons/interaction/CfgVehicles.hpp b/addons/interaction/CfgVehicles.hpp index e85300f301..bd36f42703 100644 --- a/addons/interaction/CfgVehicles.hpp +++ b/addons/interaction/CfgVehicles.hpp @@ -260,12 +260,11 @@ class CfgVehicles { icon = PATHTOF(UI\team\team_white_ca.paa); hotkey = "N"; }; - class ACE_BecomeLeader { displayName = "$STR_ACE_Interaction_BecomeLeader"; - condition = QUOTE(count (units group _player) > 1 && {leader group _player != _player}); + condition = QUOTE(_this call FUNC(canBecomeLeader)); exceptions[] = {"isNotInside"}; - statement = QUOTE(_newGroup = createGroup side group _player; (units group _player) joinSilent _newGroup; _newGroup selectLeader _player;); + statement = QUOTE(_this call FUNC(doBecomeLeader)); showDisabled = 1; priority = 1.0; icon = PATHTOF(UI\team\team_white_ca.paa); diff --git a/addons/interaction/XEH_clientInit.sqf b/addons/interaction/XEH_postInit.sqf similarity index 91% rename from addons/interaction/XEH_clientInit.sqf rename to addons/interaction/XEH_postInit.sqf index 1ed3883f02..98b1cc1523 100644 --- a/addons/interaction/XEH_clientInit.sqf +++ b/addons/interaction/XEH_postInit.sqf @@ -4,6 +4,12 @@ ACE_Modifier = 0; +//SelectLeader Event Handler for BecomeLeader action: +[QGVAR(selectLeader), { + PARAMS_2(_group,_leader); + _group selectLeader _leader; +}] call EFUNC(common,addEventHandler); + if (!hasInterface) exitWith {}; GVAR(isOpeningDoor) = false; diff --git a/addons/interaction/XEH_preInit.sqf b/addons/interaction/XEH_preInit.sqf index 671535c36d..6f10a4e834 100644 --- a/addons/interaction/XEH_preInit.sqf +++ b/addons/interaction/XEH_preInit.sqf @@ -6,8 +6,10 @@ PREP(addPassengerActions); PREP(addPassengersActions); PREP(addSelectableItem); PREP(applyButtons); +PREP(canBecomeLeader); PREP(canInteractWithCivilian); PREP(canTapShoulder); +PREP(doBecomeLeader); PREP(getDoor); PREP(getDoorAnimations); PREP(getDown); diff --git a/addons/interaction/functions/fnc_canBecomeLeader.sqf b/addons/interaction/functions/fnc_canBecomeLeader.sqf new file mode 100644 index 0000000000..11234ad6d7 --- /dev/null +++ b/addons/interaction/functions/fnc_canBecomeLeader.sqf @@ -0,0 +1,21 @@ +/* + * Author: PabstMirror + * Test if can Become Leader of group + * + * Arguments: + * 0: target + * 1: player + * + * Return Value: + * + * + * Example: + * [player, player] call ace_interaction_fnc_canBecomeLeader + * + * Public: No + */ +#include "script_component.hpp" + +PARAMS_2(_target,_player); + +(count (units group _player) > 1) && {leader group _player != _player} diff --git a/addons/interaction/functions/fnc_doBecomeLeader.sqf b/addons/interaction/functions/fnc_doBecomeLeader.sqf new file mode 100644 index 0000000000..24bfa66c11 --- /dev/null +++ b/addons/interaction/functions/fnc_doBecomeLeader.sqf @@ -0,0 +1,21 @@ + /* + * Author: PabstMirror + * Become Leader of group + * + * Arguments: + * 0: target + * 1: player + * + * Return Value: + * None + * + * Example: + * [player, player] call ace_interaction_fnc_doBecomeLeader + * + * Public: No + */ +#include "script_component.hpp" + +PARAMS_2(_target,_player); + +[QGVAR(selectLeader), (units group _player), [(group _player), _player]] call EFUNC(common,targetEvent); diff --git a/addons/interaction/stringtable.xml b/addons/interaction/stringtable.xml index cd2d6ece01..cf0349af5c 100644 --- a/addons/interaction/stringtable.xml +++ b/addons/interaction/stringtable.xml @@ -1,46 +1,69 @@  - Interactions - Interaktion + Interaktionen Interacciones + Interakce + Interakcje + Interactions Torso Torso Torso + Trup + Tors + Torse Head Kopf Cabeza + Hlava + Głowa + Tête Left Arm - Arm links + Linker Arm Brazo izquierdo + Levá paže + Lewe ramię + Bras Gauche Right Arm - Arm rechts + Rechter Arm Brazo derecho + Pravá paže + Prawe ramię + Bras Droit Left Leg - Bein links + Linkes Bein Pierna izquierda + Levá noha + Lewa noga + Jambe Gauche Right Leg - Bein rechts + Rechtes Bein Pierna derecha + Pravá hona + Prawa noga + Jambe Droite Weapon Waffe Arma + Zbraň + Broń + Arme Interaction Menu @@ -58,7 +81,7 @@ Interaction Menu (Self) Interaktionsmenü (Selbst) Menú de interacción (Propia) - Menu interakcji (na siebie) + Menu interakcji (własne) Menu interakce (vlastní) Menu d'interaction (Perso) Меню взаимодействия (с собой) @@ -143,7 +166,7 @@ Gruppe verlassen Dejar grupo Opuść grupę - Odejít ze skupiny + Opustit skupinu Quitter Groupe Выйти из группы Csoport elhagyása @@ -203,7 +226,7 @@ Gesten Gestos Gesty - Gesta + Posunky Signaux Жесты Kézjelek @@ -385,7 +408,7 @@ On te tape sur l'épaule Zostałeś klepnięty po ramieniu Vállonveregettek - Někdo tě poklepal na rameno + Někdo tě poklepal na PRAVÉ rameno Вас похлопали по плечу Você foi tocado no ombro Ti è stato dato un colpetto sulla spalla @@ -397,7 +420,7 @@ On te tape sur l'épaule. Zostałeś klepnięty po ramieniu Vállonveregettek - Někdo tě poklepal na rameno. + Někdo tě poklepal na LEVÉ rameno Вас похлопали по плечу Você foi tocado no ombro. Ti è stato dato un colpetto sulla spalla @@ -516,7 +539,7 @@ Unirse al<br/>equipo rojo Rejoindre<br/>Rouge Dołącz do drużyny<br/>czerwonej - Připojit do<br/>Červeného Týmu + Připojit do<br/>Červeného týmu Присоединиться<br/>к красной группе Unir-se à<br/>Equipe Vermelha Entra nella<br/>Squadra Rossa @@ -528,7 +551,7 @@ Unirse al<br/>equipo verde Rejoindre<br/>Verte Dołącz do<br/>drużyny zielonej - Připojit do<br/>Zeleného Týmu + Připojit do<br/>Zeleného týmu Присоединиться<br/>к зеленой группе Unir-se à<br/>Equipe Verde Entra nella<br/>Squadra Verde @@ -540,7 +563,7 @@ Unirse al<br/>equipo azul Rejoindre<br/>Bleue Dołącz do<br/>drużyny niebieskiej - Připojit do<br/>Modrého Týmu + Připojit do<br/>Modrého týmu Присоединиться<br/>к синей группе Unir-se à<br/>Equipe Azul Entra nella<br/>Squadra Blu @@ -552,7 +575,7 @@ Unirse al<br/>equipo amarillo Rejoindre<br/>Jaune Dołącz do<br/>drużyny żółtej - Připojit do<br/>Žlutého Týmu + Připojit do<br/>Žlutého týmu Присоединиться<br/>к желтой группе Unir-se à<br/>Equipe Amarela Entra nella<br/>Squadra Gialla @@ -564,7 +587,7 @@ Te has unido al equipo %1 Tu as rejoint l'équipe %1 Dołączyłeś do drużyny %1 - Připojil ses do Týmu %1 + Připojil ses do %1 týmu Вы присоединились к группе %1 Você uniu-se à Equipe %1 Sei entrato nella Squadra %1 @@ -624,7 +647,7 @@ Modyfikator Modifier la touche Tecla modificadora - клавиша-модификатор + Клавиша-модификатор Tecla Modificadora Modifica Tasto Módosító billentyű @@ -663,6 +686,7 @@ Interact + Interagir Interagiere Interakce Взаимодействовать @@ -671,8 +695,12 @@ Passengers - Passagiere + Fahrzeuginsassen Pasajeros + Пассажиры + Pasažéři + Pasażerowie + Passagers diff --git a/addons/inventory/stringtable.xml b/addons/inventory/stringtable.xml index bd84935808..5505d6b505 100644 --- a/addons/inventory/stringtable.xml +++ b/addons/inventory/stringtable.xml @@ -1,16 +1,23 @@  - Make Inventory Display Bigger - Die Anzeige des Inventar vergrößern. + Erhöhe die angezeigte Inventargröße Hacer la pantalla de inventario mas grande + Сделать окно инвентаря больше + Zvětšit zobrazení inventáře + Powiększ UI ekwipunku + Augmente la taille d'affichage de l'inventaire Normally inventory display is scaled by UI size. This allows scaling the Inventory UI size up, but doesn't increase font size allowing more rows displayed. - Normalerweise wird die Größe des Inventars mit der Größe der UI skaliert. Diese Einstellung allerdings vergrößert das Inventar bei gleichbleibender Schriftgröße, so dass mehr Einträge angzeigt werden können. + Im Regelfall wird die Inventargröße durch die Größe der Nutzeroberfläche bestimmt. Diese Einstellung erlaubt es das Inventar unter Ausschluss der Schriftgröße zu vergrößern. Dadurch können mehr Gegenstände angezeigt werden. Normalmente la pantalla de inventario se escala por el tamaño de la interfaz de usuario. Esto permite ampliar el tamaño de la interfaz de usuario de inventario, pero no aumenta el tamaño de fuente, permitiendo mostrar más filas. + Обычно, окно инвентаря зависит от размеров пользовательского интерфейса. Эта настройка позволяет увеличить размер окна инвентаря в пользовательском интерфейсе, не увеличивая размера шрифтов, так что отображется большее количество строк. + Normálně se velikost invetáře škáluje s velikostí UI. Toto nastavení dovoluje škálování velikost inventáře ale nežvětšuje velikost fontu. To dovoluje zobrazení více řad v inventáři. + Ekwipunek skalowany jest poprzez rozmiar UI. Ta opcja pozwala powiększyć rozmiar UI ekwipunku, lecz nie zwiększa rozmiaru fontu pozwalając na wyświetlanie większej ilości wierszy. + Normalement, l'inventaire est automatiquement mesuré par la taille de l'interface de l'utilisateur. Cette option vous permet d'augmenter la taille d'affichage de l'inventaire, cependant, cette option n'augmente pas la police d'écriture et le nombre de place. diff --git a/addons/javelin/$PBOPREFIX$ b/addons/javelin/$PBOPREFIX$ new file mode 100644 index 0000000000..3497b9aaf6 --- /dev/null +++ b/addons/javelin/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\javelin \ No newline at end of file diff --git a/addons/wep_javelin/CfgEventhandlers.hpp b/addons/javelin/CfgEventhandlers.hpp similarity index 100% rename from addons/wep_javelin/CfgEventhandlers.hpp rename to addons/javelin/CfgEventhandlers.hpp diff --git a/addons/wep_javelin/CfgSounds.hpp b/addons/javelin/CfgSounds.hpp similarity index 100% rename from addons/wep_javelin/CfgSounds.hpp rename to addons/javelin/CfgSounds.hpp diff --git a/addons/javelin/CfgWeapons.hpp b/addons/javelin/CfgWeapons.hpp new file mode 100644 index 0000000000..cef967e32e --- /dev/null +++ b/addons/javelin/CfgWeapons.hpp @@ -0,0 +1,14 @@ +class CfgWeapons { + class Launcher; + class Launcher_Base_F : Launcher { + class WeaponSlotsInfo; + }; + + class launch_Titan_base : Launcher_Base_F { + weaponInfoType = "ACE_RscOptics_javelin"; + modelOptics = PATHTOF(data\reticle_titan.p3d); + + lockingTargetSound[] = {"",0,1}; + lockedTargetSound[] = {"",0,1}; + }; +}; \ No newline at end of file diff --git a/addons/wep_javelin/README.md b/addons/javelin/README.md similarity index 77% rename from addons/wep_javelin/README.md rename to addons/javelin/README.md index df3ad9b29d..37685d9cce 100644 --- a/addons/wep_javelin/README.md +++ b/addons/javelin/README.md @@ -1,4 +1,4 @@ -ace_wep_javelin +ace_javelin =============== Adds the Javelin AT launcher. @@ -9,4 +9,3 @@ Adds the Javelin AT launcher. The people responsible for merging changes to this component or answering potential questions. - [jaynus](https://github.com/walterpearce) -- [NouberNou](https://github.com/NouberNou) diff --git a/addons/wep_javelin/RscInGameUI.hpp b/addons/javelin/RscInGameUI.hpp similarity index 92% rename from addons/wep_javelin/RscInGameUI.hpp rename to addons/javelin/RscInGameUI.hpp index 811548a9d2..8c73f3d8d1 100644 --- a/addons/wep_javelin/RscInGameUI.hpp +++ b/addons/javelin/RscInGameUI.hpp @@ -10,11 +10,11 @@ class RscLine; // Taken from AGM for optics management. class RscInGameUI { - class RscOptics_titan { + class ACE_RscOptics_javelin { idd = 300; - controls[] = {"ACE_javelin_elements_group"}; + controls[] = { "ACE_javelin_elements_group", "CA_Distance", "ACE_Targeting" }; //, "ACE_TargetingConstrains", "ACE_TargetingGate", "ACE_TargetingLines"}; onLoad = QUOTE(_this call FUNC(onOpticLoad)); - onUnload = "uiNameSpace setVariable ['ACE_RscOptics_javelin',nil];"; + onUnload = "uiNameSpace setVariable ['ACE_RscOptics_javelin',nil];uiNameSpace setVariable ['ACE_RscOptics_javelin_PFH',nil];"; class CA_Distance: RscOpticsValue { idc = 151; @@ -45,13 +45,6 @@ class RscInGameUI { height = 0.001; }; class Controls { - class JavelinLocking : RscMapControl { - onDraw = QUOTE(_this call FUNC(onOpticDraw)); - idc = -1; - w = 0; - h = 0; - }; - class ACE_javelin_Day_mode_off: RscPicture { idc = 1001; x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.03/4)*3*SafezoneH - SafezoneX"; @@ -94,6 +87,7 @@ class RscInGameUI { x = "((SafezoneW -SafezoneH*3/4)/2)+ (0.307/4)*3*SafezoneH - SafezoneX"; colorText[] = {0.2941,0.8745,0.2157,1}; }; + /* class StadiaL: RscLine { x = "0.4899*SafezoneW - SafezoneX"; y = "0.171*SafezoneH - SafezoneY"; @@ -136,6 +130,7 @@ class RscInGameUI { h = 0; colorText[] = {0.2941,0.8745,0.2157,1}; }; + */ }; }; class ACE_javelin_NFOV_mode_off: ACE_javelin_Day_mode_off { @@ -167,6 +162,7 @@ class RscInGameUI { y = "0.031*SafezoneH - SafezoneY"; colorText[] = {0.2941,0.8745,0.2157,1}; }; + /* class StadiaL: RscLine { x = "0.4788*SafezoneW - SafezoneX"; y = "0.171*SafezoneH - SafezoneY"; @@ -209,15 +205,83 @@ class RscInGameUI { h = "0.1895*SafezoneH"; colorText[] = {0.2941,0.8745,0.2157,1}; }; + */ }; }; - /* - class TargetingConstrains: RscControlsGroup { - idc = 699100; + + class ACE_javelin_SEEK_off: ACE_javelin_Day_mode_off { + idc = 699000; + x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.863/4)*3*SafezoneH - SafezoneX"; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\seek_co.paa"; + }; + class ACE_javelin_SEEK: ACE_javelin_SEEK_off { + idc = 166; + colorText[] = {0.2941,0.8745,0.2157,0}; + }; + class ACE_javelin_Missle_off: ACE_javelin_Day_mode_off { + idc = 1032; + x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (-0.134/4)*3*SafezoneH - SafezoneX"; + y = "(SafezoneY + 0.208*SafezoneH) - SafezoneY"; + colorText[] = {0.2941,0.2941,0.2941,1}; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\missle_co.paa"; + }; + class ACE_javelin_Missle: ACE_javelin_Missle_off { + idc = 167; + colorText[] = {0.9255,0.5216,0.1216,0}; + }; + class ACE_javelin_CLU_off: ACE_javelin_Missle_off { + idc = 1027; + y = "(SafezoneY + 0.436*SafezoneH) - SafezoneY"; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\clu_co.paa"; + }; + class ACE_javelin_HangFire_off: ACE_javelin_Missle_off { + idc = 1028; + y = "(SafezoneY + 0.669*SafezoneH) - SafezoneY"; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\hangfire_co.paa"; + }; + class ACE_javelin_TOP_off: ACE_javelin_Day_mode_off { + idc = 699001; + x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (1.023/4)*3*SafezoneH - SafezoneX"; + y = "(SafezoneY + 0.208*SafezoneH) - SafezoneY"; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\top_co.paa"; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + class ACE_javelin_DIR: ACE_javelin_Day_mode { + idc = 699002; + x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (1.023/4)*3*SafezoneH - SafezoneX"; + y = "(SafezoneY + 0.436*SafezoneH) - SafezoneY"; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\dir_co.paa"; + colorText[] = {0.2941,0.2941,0.2941,1}; + }; + class ACE_javelin_FLTR_mode_off: ACE_javelin_Day_mode_off { + idc = 1002; + x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (1.023/4)*3*SafezoneH - SafezoneX"; + y = "(SafezoneY + 0.669*SafezoneH) - SafezoneY"; + text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\fltr_co.paa"; + }; + class ACE_javelin_FLTR_mode: ACE_javelin_FLTR_mode_off { + idc = 161; + colorText[] = {0.2941,0.8745,0.2157,1}; + }; + }; + }; + class ACE_Targeting : RscControlsGroup { + idc = 6999; + + x = "SafezoneX"; + y = "SafezoneY"; + w = "SafezoneW"; + h = "SafezoneH"; + + enabled = 0; + class Controls { + class ACE_TargetingConstrains: RscControlsGroup { x = "SafezoneX"; y = "SafezoneY"; w = "SafezoneW-SafezoneX"; h = "SafezoneH-SafezoneY"; + + enabled = 0; class VScrollbar { autoScrollSpeed = -1; autoScrollDelay = 5; @@ -258,18 +322,18 @@ class RscInGameUI { idc = 699105; text = PATHTOF(data\javelin_ui_border_ca.paa); colorText[] = {0,0,0,1}; - x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; + x = "((SafezoneW -(3.1/4)*SafezoneH)/2) - SafezoneX"; y = "0.15*SafezoneH-SafezoneY"; - w = "(3/4)*SafezoneH"; + w = "(3.1/4)*SafezoneH"; h = "0.7*SafezoneH"; }; }; }; - class TargetingGate: TargetingConstrains { + class ACE_TargetingGate : ACE_TargetingConstrains { idc = 699200; class Controls { - class TargetingGateTL: TargetingConstrains { + class TargetingGateTL: ACE_TargetingConstrains { x = "((SafezoneW -(3/4)*SafezoneH)/2) - SafezoneX"; y = "0.15*SafezoneH - SafezoneY"; idc = 699201; @@ -351,8 +415,9 @@ class RscInGameUI { }; }; }; - - class TargetingLines: TargetingConstrains { + + + class ACE_TargetingLines: ACE_TargetingConstrains { idc = 699300; class Controls { class LineH: RscLine { @@ -373,62 +438,6 @@ class RscInGameUI { }; }; }; - */ - - class ACE_javelin_SEEK_off: ACE_javelin_Day_mode_off { - idc = 699000; - x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (0.863/4)*3*SafezoneH - SafezoneX"; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\seek_co.paa"; - }; - class ACE_javelin_SEEK: ACE_javelin_SEEK_off { - idc = 166; - colorText[] = {0.2941,0.8745,0.2157,0}; - }; - class ACE_javelin_Missle_off: ACE_javelin_Day_mode_off { - idc = 1032; - x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (-0.134/4)*3*SafezoneH - SafezoneX"; - y = "(SafezoneY + 0.208*SafezoneH) - SafezoneY"; - colorText[] = {0.2941,0.2941,0.2941,1}; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\missle_co.paa"; - }; - class ACE_javelin_Missle: ACE_javelin_Missle_off { - idc = 167; - colorText[] = {0.9255,0.5216,0.1216,0}; - }; - class ACE_javelin_CLU_off: ACE_javelin_Missle_off { - idc = 1027; - y = "(SafezoneY + 0.436*SafezoneH) - SafezoneY"; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\clu_co.paa"; - }; - class ACE_javelin_HangFire_off: ACE_javelin_Missle_off { - idc = 1028; - y = "(SafezoneY + 0.669*SafezoneH) - SafezoneY"; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\hangfire_co.paa"; - }; - class ACE_javelin_TOP_off: ACE_javelin_Day_mode_off { - idc = 699001; - x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (1.023/4)*3*SafezoneH - SafezoneX"; - y = "(SafezoneY + 0.208*SafezoneH) - SafezoneY"; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\top_co.paa"; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; - class ACE_javelin_DIR: ACE_javelin_Day_mode { - idc = 699002; - x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (1.023/4)*3*SafezoneH - SafezoneX"; - y = "(SafezoneY + 0.436*SafezoneH) - SafezoneY"; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\dir_co.paa"; - colorText[] = {0.2941,0.2941,0.2941,1}; - }; - class ACE_javelin_FLTR_mode_off: ACE_javelin_Day_mode_off { - idc = 1002; - x = "(SafezoneX+(SafezoneW -SafezoneH*3/4)/2)+ (1.023/4)*3*SafezoneH - SafezoneX"; - y = "(SafezoneY + 0.669*SafezoneH) - SafezoneY"; - text = "\A3\ui_f\data\igui\rscingameui\rscoptics_titan\fltr_co.paa"; - }; - class ACE_javelin_FLTR_mode: ACE_javelin_FLTR_mode_off { - idc = 161; - colorText[] = {0.2941,0.8745,0.2157,1}; - }; }; }; }; diff --git a/addons/javelin/XEH_clientInit.sqf b/addons/javelin/XEH_clientInit.sqf new file mode 100644 index 0000000000..38b006ca24 --- /dev/null +++ b/addons/javelin/XEH_clientInit.sqf @@ -0,0 +1,5 @@ +#include "script_component.hpp" + +if (!hasInterface) exitWith {}; + +#include "initKeybinds.sqf" \ No newline at end of file diff --git a/addons/wep_javelin/XEH_post_init.sqf b/addons/javelin/XEH_post_init.sqf similarity index 100% rename from addons/wep_javelin/XEH_post_init.sqf rename to addons/javelin/XEH_post_init.sqf diff --git a/addons/wep_javelin/XEH_pre_init.sqf b/addons/javelin/XEH_pre_init.sqf similarity index 59% rename from addons/wep_javelin/XEH_pre_init.sqf rename to addons/javelin/XEH_pre_init.sqf index 119eb25975..2b2e980191 100644 --- a/addons/wep_javelin/XEH_pre_init.sqf +++ b/addons/javelin/XEH_pre_init.sqf @@ -1,8 +1,5 @@ #include "script_component.hpp" -PREP(translateToWeaponSpace); -PREP(translateToModelSpace); - PREP(lockKeyDown); PREP(lockKeyUp); diff --git a/addons/wep_javelin/config.cpp b/addons/javelin/config.cpp similarity index 83% rename from addons/wep_javelin/config.cpp rename to addons/javelin/config.cpp index 0a38583ed9..9d7c14e448 100644 --- a/addons/wep_javelin/config.cpp +++ b/addons/javelin/config.cpp @@ -12,4 +12,5 @@ class CfgPatches { #include "CfgEventhandlers.hpp" #include "RscInGameUI.hpp" -#include "CfgSounds.hpp" \ No newline at end of file +#include "CfgSounds.hpp" +#include "CfgWeapons.hpp" \ No newline at end of file diff --git a/addons/wep_javelin/data/jav_disp.paa b/addons/javelin/data/jav_disp.paa similarity index 100% rename from addons/wep_javelin/data/jav_disp.paa rename to addons/javelin/data/jav_disp.paa diff --git a/addons/wep_javelin/data/jav_ring.paa b/addons/javelin/data/jav_ring.paa similarity index 100% rename from addons/wep_javelin/data/jav_ring.paa rename to addons/javelin/data/jav_ring.paa diff --git a/addons/wep_javelin/data/javelin_ui_border_ca.paa b/addons/javelin/data/javelin_ui_border_ca.paa similarity index 100% rename from addons/wep_javelin/data/javelin_ui_border_ca.paa rename to addons/javelin/data/javelin_ui_border_ca.paa diff --git a/addons/javelin/data/reticle_titan.p3d b/addons/javelin/data/reticle_titan.p3d new file mode 100644 index 0000000000..682296f0c8 Binary files /dev/null and b/addons/javelin/data/reticle_titan.p3d differ diff --git a/addons/wep_javelin/data/sounds/javelin_locked.ogg b/addons/javelin/data/sounds/javelin_locked.ogg similarity index 100% rename from addons/wep_javelin/data/sounds/javelin_locked.ogg rename to addons/javelin/data/sounds/javelin_locked.ogg diff --git a/addons/wep_javelin/data/sounds/javelin_locking.ogg b/addons/javelin/data/sounds/javelin_locking.ogg similarity index 100% rename from addons/wep_javelin/data/sounds/javelin_locking.ogg rename to addons/javelin/data/sounds/javelin_locking.ogg diff --git a/addons/wep_javelin/functions/fnc_cycleFireMode.sqf b/addons/javelin/functions/fnc_cycleFireMode.sqf similarity index 100% rename from addons/wep_javelin/functions/fnc_cycleFireMode.sqf rename to addons/javelin/functions/fnc_cycleFireMode.sqf diff --git a/addons/wep_javelin/functions/fnc_lockKeyDown.sqf b/addons/javelin/functions/fnc_lockKeyDown.sqf similarity index 100% rename from addons/wep_javelin/functions/fnc_lockKeyDown.sqf rename to addons/javelin/functions/fnc_lockKeyDown.sqf diff --git a/addons/wep_javelin/functions/fnc_lockKeyUp.sqf b/addons/javelin/functions/fnc_lockKeyUp.sqf similarity index 100% rename from addons/wep_javelin/functions/fnc_lockKeyUp.sqf rename to addons/javelin/functions/fnc_lockKeyUp.sqf diff --git a/addons/javelin/functions/fnc_onOpticDraw.sqf b/addons/javelin/functions/fnc_onOpticDraw.sqf new file mode 100644 index 0000000000..2412c2d5a1 --- /dev/null +++ b/addons/javelin/functions/fnc_onOpticDraw.sqf @@ -0,0 +1,227 @@ +//#define DEBUG_MODE_FULL +#include "script_component.hpp" +TRACE_1("enter", _this); + +#define __TRACKINTERVAL 0 // how frequent the check should be. +#define __LOCKONTIME 3.0 // Lock on won't occur sooner +#define __LOCKONTIMERANDOM 0.3 // Deviation in lock on time +#define __SENSORSQUARE 1 // Locking on sensor square side in angles + +#define __OffsetX ((ctrlPosition __JavelinIGUITargetingLineV) select 0) - 0.5 +#define __OffsetY ((ctrlPosition __JavelinIGUITargetingLineH) select 1) - 0.5 + +private["_isJavelin", "_args", "_lastTick", "_runTime", "_soundTime", "_lockTime", "_newTarget", "_currentTarget", "_range", "_pos", "_targetArray"]; + +if( ! ([ (configFile >> "CfgWeapons" >> (currentWeapon (vehicle ACE_player)) ), "launch_Titan_base"] call EFUNC(common,inheritsFrom)) + || { (vehicle ACE_player) != ACE_player } + ) exitWith { + __JavelinIGUITargeting ctrlShow false; + __JavelinIGUITargetingGate ctrlShow false; + __JavelinIGUITargetingLines ctrlShow false; + __JavelinIGUITargetingConstraints ctrlShow false; + + [(_this select 1)] call cba_fnc_removePerFrameHandler; + uiNamespace setVariable["ACE_RscOptics_javelin_PFH", nil]; +}; + +// Reset arguments if we havnt rendered in over a second +_args = uiNamespace getVariable[QGVAR(arguments), [] ]; +if( (count _args) > 0) then { + _lastTick = _args select 0; + if(diag_tickTime - _lastTick > 1) then { + [] call FUNC(onOpticLoad); + }; +}; + +TRACE_1("Running", "Running"); + +// Pull the arguments +_currentTarget = _args select 1; +_runTime = _args select 2; +_lockTime = _args select 3; +_soundTime = _args select 4; + +// Find a target within the optic range +_newTarget = objNull; + +// Bail on fast movement +if ((velocity ACE_player) distance [0,0,0] > 0.5 && {cameraView == "GUNNER"} && {cameraOn == ACE_player}) exitWith { // keep it steady. + ACE_player switchCamera "INTERNAL"; +}; + +// Refresh the firemode +[] call FUNC(showFireMode); + +_range = parseNumber (ctrlText __JavelinIGUIRangefinder); +if (_range > 50 && {_range < 2500}) then { + _pos = positionCameraToWorld [0,0,_range]; + _targetArray = _pos nearEntities ["AllVehicles", _range/25]; + if (count (_targetArray) > 0) then { + _newTarget = _targetArray select 0; + }; +}; + +if (isNull _newTarget) then { + _newTarget = cursorTarget; +}; + +// Create constants +_constraintTop = __ConstraintTop; +_constraintLeft = __ConstraintLeft; +_constraintBottom = __ConstraintBottom; +_constraintRight = __ConstraintRight; + +_offsetX = __OffsetX; +_offsetY = __OffsetY; + +__JavelinIGUITargeting ctrlShow true; +__JavelinIGUITargetingConstrains ctrlShow true; + +if (isNull _newTarget) then { + // No targets found + _currentTarget = objNull; + _lockTime = 0; + + __JavelinIGUISeek ctrlSetTextColor __ColorGray; + __JavelinIGUINFOV ctrlSetTextColor __ColorGreen; + __JavelinIGUITargeting ctrlShow false; + __JavelinIGUITargetingGate ctrlShow false; + __JavelinIGUITargetingLines ctrlShow false; + __JavelinIGUITargetingConstraints ctrlShow false; + + ACE_player setVariable ["ace_missileguidance_target",nil, false]; + + // Disallow fire + //if (ACE_player ammo "Javelin" > 0 || {ACE_player ammo "ACE_Javelin_Direct" > 0}) then {ACE_player setWeaponReloadingTime //[player, "Javelin", 0.2];}; +} else { + if (_newTarget distance ACE_player < 2500 + && {(call CBA_fnc_getFoV) select 1 > 9} + && { (currentVisionMode ACE_player == 2)} + && GVAR(isLockKeyDown) + ) then { + // Lock on after 3 seconds + if(_currentTarget != _newTarget) then { + TRACE_1("New Target, reseting locking", _newTarget); + _lockTime = diag_tickTime; + _currentTarget = _newTarget; + + playSound "ACE_Javelin_Locking"; + } else { + if(diag_tickTime - _lockTime > __LOCKONTIME) then { + TRACE_2("LOCKED!", _currentTarget, _lockTime); + + __JavelinIGUISeek ctrlSetTextColor __ColorGreen; + __JavelinIGUINFOV ctrlSetTextColor __ColorNull; + + __JavelinIGUITargeting ctrlShow true; + __JavelinIGUITargetingConstrains ctrlShow false; + __JavelinIGUITargetingGate ctrlShow true; + __JavelinIGUITargetingLines ctrlShow true; + + _zamerny = if (_currentTarget isKindOf "CAManBase") then {_currentTarget selectionPosition "body"} else {_currentTarget selectionPosition "zamerny"}; + _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 { + _aposX = 1; + _aposY = 0; + } else { + _aposX = (_apos select 0) + _offsetX; + _aposY = (_apos select 1) + _offsetY; + }; + + // Move target marker to coords. + __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]; + + ACE_player setVariable["ace_missileguidance_target", _currentTarget, false]; + + if(diag_tickTime > _soundTime) then { + playSound "ACE_Javelin_Locked"; + _soundTime = diag_tickTime + 0.25; + }; + } else { + __JavelinIGUITargeting ctrlShow true; + __JavelinIGUITargetingGate ctrlShow true; + __JavelinIGUITargetingLines ctrlShow false; + + ACE_player 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); + + __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(diag_tickTime > _soundTime) then { + playSound "ACE_Javelin_Locking"; + _soundTime = diag_tickTime + 0.25; + }; + }; + }; + } else { + // Something is wrong with our seek + _currentTarget = objNull; + ACE_player setVariable["ace_missileguidance_target", nil, false]; + + __JavelinIGUISeek ctrlSetTextColor __ColorGray; + __JavelinIGUINFOV ctrlSetTextColor __ColorGray; + __JavelinIGUITargeting ctrlShow false; + __JavelinIGUITargetingGate ctrlShow false; + __JavelinIGUITargetingLines ctrlShow false; + + ACE_player setVariable ["ace_missileguidance_target",nil, false]; + }; + +}; + +//TRACE_2("", _newTarget, _currentTarget); + +// Save arguments for next run +_args set[0, diag_tickTime]; +_args set[1, _currentTarget]; +_args set[2, _runTime]; +_args set[3, _lockTime]; +_args set[4, _soundTime]; + +uiNamespace setVariable[QGVAR(arguments), _args ]; \ No newline at end of file diff --git a/addons/wep_javelin/functions/fnc_onOpticLoad.sqf b/addons/javelin/functions/fnc_onOpticLoad.sqf similarity index 55% rename from addons/wep_javelin/functions/fnc_onOpticLoad.sqf rename to addons/javelin/functions/fnc_onOpticLoad.sqf index b2192b8883..a12d0ef176 100644 --- a/addons/wep_javelin/functions/fnc_onOpticLoad.sqf +++ b/addons/javelin/functions/fnc_onOpticLoad.sqf @@ -11,6 +11,11 @@ ACE_player setVariable ["ace_missileguidance_target",nil, false]; __JavelinIGUISeek ctrlSetTextColor __ColorGray; __JavelinIGUINFOV ctrlSetTextColor __ColorGray; +__JavelinIGUITargeting ctrlShow false; +__JavelinIGUITargetingConstrains ctrlShow false; +__JavelinIGUITargetingGate ctrlShow false; +__JavelinIGUITargetingLines ctrlShow false; + uiNameSpace setVariable [QGVAR(arguments), [ 0, // Last runtime @@ -19,4 +24,10 @@ uiNameSpace setVariable [QGVAR(arguments), 0, // Lock Time 0 // Sound timer ] -]; \ No newline at end of file +]; + +_pfh_handle = uiNamespace getVariable ["ACE_RscOptics_javelin_PFH", nil]; +if(isNil "_pfh_handle") then { + _pfh_handle = [FUNC(onOpticDraw), 0, []] call CBA_fnc_addPerFrameHandler; + uiNamespace setVariable["ACE_RscOptics_javelin_PFH", _pfh_handle]; +}; \ No newline at end of file diff --git a/addons/wep_javelin/functions/fnc_showFireMode.sqf b/addons/javelin/functions/fnc_showFireMode.sqf similarity index 100% rename from addons/wep_javelin/functions/fnc_showFireMode.sqf rename to addons/javelin/functions/fnc_showFireMode.sqf diff --git a/addons/javelin/functions/script_component.hpp b/addons/javelin/functions/script_component.hpp new file mode 100644 index 0000000000..21c6597c86 --- /dev/null +++ b/addons/javelin/functions/script_component.hpp @@ -0,0 +1 @@ +#include "\z\ace\addons\javelin\script_component.hpp" \ No newline at end of file diff --git a/addons/wep_javelin/initKeybinds.sqf b/addons/javelin/initKeybinds.sqf similarity index 67% rename from addons/wep_javelin/initKeybinds.sqf rename to addons/javelin/initKeybinds.sqf index 126b1395a3..ecce40bbf0 100644 --- a/addons/wep_javelin/initKeybinds.sqf +++ b/addons/javelin/initKeybinds.sqf @@ -1,6 +1,6 @@ // by commy2 -["ACE3", QGVAR(lockTarget), localize "STR_ACE_WEP_JAVELIN_LockTarget", +["ACE3", QGVAR(lockTarget), localize "STR_ACE_JAVELIN_LockTarget", { if (GETGVAR(isLockKeyDown,false)) exitWith {false}; @@ -21,10 +21,10 @@ }, [15, [false, false, false]], false] call cba_fnc_addKeybind; //Tab Key -["ACE3", QGVAR(cycleFireMode), localize "STR_ACE_WEP_JAVELIN_CycleFireMode", +["ACE3", QGVAR(cycleFireMode), localize "STR_ACE_JAVELIN_CycleFireMode", { false }, { [ACE_player] call FUNC(cycleFireMode); false }, -[15, [false, true, false]], false] call cba_fnc_addKeybind; //Shift+Tab Key \ No newline at end of file +[15, [false, true, false]], false] call cba_fnc_addKeybind; //Ctrl+Tab Key \ No newline at end of file diff --git a/addons/wep_javelin/script_component.hpp b/addons/javelin/script_component.hpp similarity index 85% rename from addons/wep_javelin/script_component.hpp rename to addons/javelin/script_component.hpp index 69fe7efe57..6aa34b6bc8 100644 --- a/addons/wep_javelin/script_component.hpp +++ b/addons/javelin/script_component.hpp @@ -1,12 +1,12 @@ -#define COMPONENT wep_javelin +#define COMPONENT javelin #include "\z\ace\Addons\main\script_mod.hpp" -#ifdef DEBUG_ENABLED_WEP_JAVELIN +#ifdef DEBUG_ENABLED_JAVELIN #define DEBUG_MODE_FULL #endif -#ifdef DEBUG_SETTINGS_WEP_JAVELIN - #define DEBUG_SETTINGS DEBUG_SETTINGS_WEP_JAVELIN +#ifdef DEBUG_SETTINGS_JAVELIN + #define DEBUG_SETTINGS DEBUG_SETTINGS_JAVELIN #endif #include "\z\ace\Addons\main\script_macros.hpp" @@ -19,6 +19,8 @@ #define __JavelinIGUI (uinamespace getVariable "ACE_RscOptics_javelin") // Custom controls +#define __JavelinIGUITargeting (__JavelinIGUI displayCtrl 6999) + #define __JavelinIGUISeek (__JavelinIGUI displayCtrl 699000) #define __JavelinIGUITop (__JavelinIGUI displayCtrl 699001) #define __JavelinIGUIDir (__JavelinIGUI displayCtrl 699002) @@ -51,10 +53,6 @@ #define __ConstraintLeft (((ctrlPosition __JavelinIGUITargetingConstrainLeft) select 0) + ((ctrlPosition (__JavelinIGUITargetingConstrainLeft)) select 2)) #define __ConstraintRight ((ctrlPosition __JavelinIGUITargetingConstrainRight) select 0) -#define __OffsetX ((ctrlPosition __JavelinIGUITargetingLineV) select 0) - 0.5 -#define __OffsetY ((ctrlPosition __JavelinIGUITargetingLineH) select 1) - 0.5 - - // Colors for controls #define __ColorOrange [0.9255,0.5216,0.1216,1] #define __ColorGreen [0.2941,0.8745,0.2157,1] diff --git a/addons/javelin/stringtable.xml b/addons/javelin/stringtable.xml new file mode 100644 index 0000000000..bd8f59c41c --- /dev/null +++ b/addons/javelin/stringtable.xml @@ -0,0 +1,21 @@ + + + + + Lock Target (Hold) + Ziel aufschalten + Захватить цель (удерживать) + Zamknout cíl(držet) + Namierz cel (przytrzymaj) + Vérouiller la Cible (Maintenir) + + + Cycle Fire Mode + Wechsle Feuermodus + Переключение режимов огня + Cyklování režimů palby + Przełącz tryb ognia + Mode de Tir (Cycle) + + + diff --git a/addons/kestrel/stringtable.xml b/addons/kestrel/stringtable.xml index 5f54fd6489..c811633f75 100644 --- a/addons/kestrel/stringtable.xml +++ b/addons/kestrel/stringtable.xml @@ -1,5 +1,4 @@  - @@ -30,11 +29,11 @@ Anemómetro balístico Applied Ballistics Meter Urządzenie do monitorowania pogody - Zařízení pro měření vítru + Zařízení pro měření větru Monitoraggio Balistico Attivo Applied Ballistics Meter Medidor Balístico Ativo - метеостанция + Метеостанция Open Kestrel @@ -61,4 +60,4 @@ Закрыть Kestrel - \ No newline at end of file + diff --git a/addons/laser/CfgVehicles.hpp b/addons/laser/CfgVehicles.hpp index 07b8055f0e..f4e2ed42ab 100644 --- a/addons/laser/CfgVehicles.hpp +++ b/addons/laser/CfgVehicles.hpp @@ -2,8 +2,32 @@ class CfgVehicles { class All; class LaserTarget: All { + // @TODO: Changing the model and simulation hides it, but THEN IT DOESNT SPAWN WTF!? + model = "\A3\Weapons_F\empty.p3d"; + simulation = "nvmarker"; + nvTarget = 1; + //simulation = "laserTarget"; + //threat[] = {0,0,0}; class EventHandlers { init = QUOTE(_this call FUNC(laser_init)); }; + + diffuse[] = {0,0,0}; + ambient[] = {0,0,0}; + brightness = 0; + name = "pozicni blik"; + drawLight = 0; + drawLightSize = 0; + drawLightCenterSize = 0; + activeLight = 0; + blinking = 0; + dayLight = 0; + onlyInNvg = 0; + useFlare = 0; + }; + + // Visual laserTarget override + class ACE_LaserTarget_Visual : LaserTarget { + //model = "\A3\Weapons_f\laserTgt.p3d"; }; }; \ No newline at end of file diff --git a/addons/laser/CfgWeapons.hpp b/addons/laser/CfgWeapons.hpp new file mode 100644 index 0000000000..70a25e6f85 --- /dev/null +++ b/addons/laser/CfgWeapons.hpp @@ -0,0 +1,8 @@ + +class CfgWeapons { + class Binocular; + + class Laserdesignator : Binocular { + visionMode[] = {"Normal","NVG"}; + }; +}; diff --git a/addons/laser/RscInGameUI.hpp b/addons/laser/RscInGameUI.hpp new file mode 100644 index 0000000000..457d320520 --- /dev/null +++ b/addons/laser/RscInGameUI.hpp @@ -0,0 +1 @@ +// TODO: RscOptics_LaserDesignator for laser code designation \ No newline at end of file diff --git a/addons/laser/XEH_post_init.sqf b/addons/laser/XEH_post_init.sqf index 6904ee6c47..fb189d5041 100644 --- a/addons/laser/XEH_post_init.sqf +++ b/addons/laser/XEH_post_init.sqf @@ -1,3 +1,4 @@ #include "script_component.hpp" -NO_DEDICATED; +["laser_laserOn", {_this call DFUNC(handleLaserOn)}] call EFUNC(common,addEventHandler); +["laser_laserOff", {_this call DFUNC(handleLaserOff)}] call EFUNC(common,addEventHandler); diff --git a/addons/laser/XEH_pre_init.sqf b/addons/laser/XEH_pre_init.sqf index 4e4a39e8bf..e160a533f2 100644 --- a/addons/laser/XEH_pre_init.sqf +++ b/addons/laser/XEH_pre_init.sqf @@ -6,15 +6,28 @@ PREP(shootRay); PREP(shootCone); PREP(checkLos); -PREP(findLaserDesignator); PREP(findStrongestRay); PREP(translateToModelSpace); PREP(translateToWeaponSpace); -PREP(laser_init); +PREP(seekerFindLaserSpot); +PREP(laserOn); +PREP(laserOff); +PREP(handleLaserOn); +PREP(handleLaserOff); +PREP(drawVisibleLaserTargets); + +PREP(laser_init); +PREP(vanillaLaserSeekerHandler); PREP(laserTargetPFH); -ACE_LASERS = []; -ACE_DEFAULT_LASER_CODE = 1001; \ No newline at end of file +GVAR(VanillaLasers) = []; + +// Laser default variables +ACE_DEFAULT_LASER_CODE = 1001; +ACE_DEFAULT_LASER_WAVELENGTH = 1550; +ACE_DEFAULT_LASER_BEAMSPREAD = 1; + +GVAR(laserEmitters) = HASH_CREATE; \ No newline at end of file diff --git a/addons/laser/config.cpp b/addons/laser/config.cpp index 4b209b866e..3f430619ef 100644 --- a/addons/laser/config.cpp +++ b/addons/laser/config.cpp @@ -11,4 +11,5 @@ class CfgPatches { }; #include "CfgEventhandlers.hpp" -#include "CfgVehicles.hpp" \ No newline at end of file +#include "CfgVehicles.hpp" +#include "CfgWeapons.hpp" \ No newline at end of file diff --git a/addons/laser/functions/fnc_drawVisibleLaserTargets.sqf b/addons/laser/functions/fnc_drawVisibleLaserTargets.sqf new file mode 100644 index 0000000000..161364c0f2 --- /dev/null +++ b/addons/laser/functions/fnc_drawVisibleLaserTargets.sqf @@ -0,0 +1 @@ +// @TODO: This is to draw the actual LaserTarget positions to utilize for laser shooting. \ No newline at end of file diff --git a/addons/laser/functions/fnc_findLaserDesignator.sqf b/addons/laser/functions/fnc_findLaserDesignator.sqf deleted file mode 100644 index 902775ebd5..0000000000 --- a/addons/laser/functions/fnc_findLaserDesignator.sqf +++ /dev/null @@ -1,74 +0,0 @@ -//#define DEBUG_MODE_FULL -#include "script_component.hpp" - -private ["_seeker", "_headingPitch", "_found", "_vectorTo", "_polarTo", "_dir", "_vertOk", "_horzOk", "_fov", - "_closestDistance", "_pos1", "_pos2", "_disCheck", "_currentTarget", "_potentialTargets", "_offset", "_vector"]; - -_seeker = _this select 0; -_laserCode = _this select 1; -_fov = if (count _this > 2) then {_this select 2} else {75}; -_vector = if (count _this > 3) then {_this select 3} else {vectorDir _seeker}; -_offset = if (count _this > 4) then {_this select 4} else {[0,0,0]}; - -_headingPitch = _vector call CBA_fnc_vect2polar; -_currentTarget = nil; -_found = false; - -_getPosASL = {visiblePositionASL (_this select 0)}; - -LOG("Searching lasers"); -if(!(isNil "ACE_LASERS")) then { - _potentialTargets = []; - TRACE_1("", ACE_LASERS); - - { - if(!(isNull _x)) then { - _sensorPos = ATLtoASL(_seeker modelToWorldVisual _offset); - _vectorTo = [_sensorPos, ([_x] call _getPosASL)] call BIS_fnc_vectorFromXToY; - _polarTo = _vectorTo call CBA_fnc_vect2polar; - _dir = _polarTo select 1; - _dir = _dir - (_headingPitch select 1); - - TRACE_4("Calc", _sensorPos, _vectorTo, _polarTo, _dir); - - if (_dir < 0) then {_dir = _dir + 360}; - if (_dir > 360) then {_dir = _dir - 360}; - _vertOk = false; - _horzOk = false; - if(_dir < _fov || {_dir > (360-_fov)}) then { - _horzOk = true; - }; - if(abs((abs(_polarTo select 2))-(abs(_headingPitch select 2))) < _fov) then { - _vertOk = true; - }; - - TRACE_2("Results", _vertOk, _horzOk); - - if(_vertOk && {_horzOk}) then { - // Does the laser currently have our current code, if we have one? - _targetCode = _x getVariable ["ACE_LASER_CODE", ACE_DEFAULT_LASER_CODE]; - TRACE_1("Target in sight, checking code", _targetCode, _laserCode); - if(_targetCode == _laserCode) then { - _potentialTargets set[(count _potentialTargets), _x]; - }; - }; - }; - - } forEach ACE_LASERS; - - TRACE_1("", _potentialTargets); - - _closestDistance = 100000; - { - _pos1 = (getPosASL _seeker); - _pos2 = ([_x] call _getPosASL); - _disCheck = _pos1 distance _pos2; - // shouldn't this bail out when a valid target is found instead of iterating over all potential targets ? - if(_disCheck < _closestDistance && {[_pos1, _pos2, _x, _seeker] call FUNC(checkLos)}) then { - _found = true; - _currentTarget = _x; - _closestDistance = _disCheck; - }; - } forEach _potentialTargets; -}; -[_found, _currentTarget] \ No newline at end of file diff --git a/addons/laser/functions/fnc_handleLaserOff.sqf b/addons/laser/functions/fnc_handleLaserOff.sqf new file mode 100644 index 0000000000..573bd8197b --- /dev/null +++ b/addons/laser/functions/fnc_handleLaserOff.sqf @@ -0,0 +1,8 @@ +//fnc_handleLaserOff.sqf +#include "script_component.hpp" + +private ["_uuid"]; +_uuid = _this select 0; +if(HASH_HASKEY(GVAR(laserEmitters), _uuid)) then { + HASH_REM(GVAR(laserEmitters), _uuid); +}; diff --git a/addons/laser/functions/fnc_handleLaserOn.sqf b/addons/laser/functions/fnc_handleLaserOn.sqf new file mode 100644 index 0000000000..bac53a8957 --- /dev/null +++ b/addons/laser/functions/fnc_handleLaserOn.sqf @@ -0,0 +1,7 @@ +//fnc_handleLaserOn.sqf +#include "script_component.hpp" + +private ["_uuid", "_args"]; +_uuid = _this select 0; +_args = _this select 1; +HASH_SET(GVAR(laserEmitters), _uuid, _args); diff --git a/addons/laser/functions/fnc_laserOff.sqf b/addons/laser/functions/fnc_laserOff.sqf new file mode 100644 index 0000000000..84613cd988 --- /dev/null +++ b/addons/laser/functions/fnc_laserOff.sqf @@ -0,0 +1,16 @@ +/* + * Author: Nou + * Turn a laser designator off. + * + * Arguments: + * 0: UUID (from laserOn) + * + * Return value: + * None + */ + +#include "script_component.hpp" + +private ["_uuid"]; +_uuid = _this select 0; +["laser_laserOff", [_uuid]] call EFUNC(common,globalEvent); diff --git a/addons/laser/functions/fnc_laserOn.sqf b/addons/laser/functions/fnc_laserOn.sqf new file mode 100644 index 0000000000..9b5faa3859 --- /dev/null +++ b/addons/laser/functions/fnc_laserOn.sqf @@ -0,0 +1,23 @@ +/* + * Author: Nou + * Turn a laser designator on. + * + * Arguments: + * 0: Emitter + * 1: Owner + * 2: Method, can be code, which emitter and owner are passed to, a string function name, an array with a position memory point and weapon name, or an array with a position memory point, a vector begining memory point, and vector ending memory point. + * 3: Wavelength (1550nm is common eye safe) + * 4: Laser code + * 5: Beam divergence (in mils off beam center). + * + * Return value: + * String, UUID for sending to laserOff function. + */ + +#include "script_component.hpp" + +private ["_uuid", "_args"]; +_uuid = format["%1%2%3", floor diag_tickTime, floor random 1000, floor random 10000]; +_args = [_uuid, _this]; +["laser_laserOn", _args] call EFUNC(common,globalEvent); +_uuid; diff --git a/addons/laser/functions/fnc_laserTargetPFH.sqf b/addons/laser/functions/fnc_laserTargetPFH.sqf index bdab413685..d73d9f070a 100644 --- a/addons/laser/functions/fnc_laserTargetPFH.sqf +++ b/addons/laser/functions/fnc_laserTargetPFH.sqf @@ -1,20 +1,25 @@ +//#define DEBUG_MODE_FULL #include "script_component.hpp" +TRACE_1("enter", _this); private["_args", "_laserTarget"]; //TRACE_1("enter", _this); _args = _this select 0; _laserTarget = _args select 0; +_shooter = _args select 1; +_uuid = _args select 2; -if(isNull _laserTarget || !alive player) exitWith { +if(isNull _laserTarget || !alive _shooter) exitWith { [(_this select 1)] call cba_fnc_removePerFrameHandler; - REM(ACE_LASERS, _laserTarget); + REM(GVAR(VanillaLasers), _laserTarget); + + // Remove laseron + [_uuid] call FUNC(laserOff); }; -_end = diag_tickTime; - #ifdef DEBUG_MODE_FULL // Iconize the location of the actual laserTarget -_pos = [_laserTarget] call FUNC(getPosASL); +_pos = getPosASL _laserTarget; drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\select_target_ca.paa", [1,0,0,1], (ASLtoATL _pos), 0.75, 0.75, 0, "", 0.5, 0.025, "TahomaB"]; { diff --git a/addons/laser/functions/fnc_laser_init.sqf b/addons/laser/functions/fnc_laser_init.sqf index 2790459724..378ee38407 100644 --- a/addons/laser/functions/fnc_laser_init.sqf +++ b/addons/laser/functions/fnc_laser_init.sqf @@ -1,25 +1,32 @@ +//#define DEBUG_MODE_FULL #include "script_component.hpp" -PARAMS_1(_laserTarget); - TRACE_1("enter", _this); +PARAMS_1(_laserTarget); + // Add the target to the global targets array // Everyone tracks them - // Add the laser localized to the laser array, and give it the default localized code -PUSH(ACE_LASERS, _laserTarget); +PUSH(GVAR(VanillaLasers), _laserTarget); + // Check the vehicle, otherwise use the default -_laserTarget setVariable ["ACE_LASER_CODE", ACE_DEFAULT_LASER_CODE, false]; +_laserTarget setVariable [QGVAR(code), ACE_DEFAULT_LASER_CODE, false]; +_laserTarget setVariable [QGVAR(beamSpread), ACE_DEFAULT_LASER_BEAMSPREAD, false]; +_laserTarget setVariable [QGVAR(waveLength), ACE_DEFAULT_LASER_WAVELENGTH, false]; + // Clean the lasers of any null objects while we are here -REM(ACE_LASERS, objNull); +REM(GVAR(VanillaLasers), objNull); if(!(local _laserTarget)) exitWith { }; + // The target is local, so its on this client if(!isDedicated) then { - _laserTarget setVariable ["ACE_LASERTARGET_SHOOTER", ACE_player, true]; - - [FUNC(laserTargetPFH), 0, [_laserTarget, ACE_player]] call cba_fnc_addPerFrameHandler; + // @TODO: Get ownership variables and set them on the vehicle + + _uuid = [(vehicle ACE_player), ACE_player, QFUNC(vanillaLaserSeekerHandler), ACE_DEFAULT_LASER_WAVELENGTH, ACE_DEFAULT_LASER_CODE, ACE_DEFAULT_LASER_BEAMSPREAD] call FUNC(laserOn); + _laserTarget setVariable [QGVAR(uuid), _uuid, false]; + [FUNC(laserTargetPFH), 0, [_laserTarget, ACE_player, _uuid]] call cba_fnc_addPerFrameHandler; } else { // server side ownership of laser - //_laserTarget setVariable ["ACE_LASERTARGET_SHOOTER", nil, false]; + _laserTarget setVariable [QGVAR(owner), nil, true]; }; diff --git a/addons/laser/functions/fnc_rotateVectLine.sqf b/addons/laser/functions/fnc_rotateVectLine.sqf index b0360cc330..ec85a83cb7 100644 --- a/addons/laser/functions/fnc_rotateVectLine.sqf +++ b/addons/laser/functions/fnc_rotateVectLine.sqf @@ -32,7 +32,5 @@ if (_d != 0) then { }; /* Inverse of step 1 */ -_q1 set[0, (_q2 select 0) + (_p1 select 0)]; -_q1 set[1, (_q2 select 1) + (_p1 select 1)]; -_q1 set[2, (_q2 select 2) + (_p1 select 2)]; +_q1 = _q2 vectorAdd _p1; _q1; \ No newline at end of file diff --git a/addons/laser/functions/fnc_rotateVectLineGetMap.sqf b/addons/laser/functions/fnc_rotateVectLineGetMap.sqf index fdbd6533ef..dc4b1b54c3 100644 --- a/addons/laser/functions/fnc_rotateVectLineGetMap.sqf +++ b/addons/laser/functions/fnc_rotateVectLineGetMap.sqf @@ -5,19 +5,12 @@ _p = _this select 0; _p1 = _this select 1; _p2 = _this select 2; -_q1 = []; _q2 = []; -_u = []; /* Step 1 */ -_q1 set[0, (_p select 0) - (_p1 select 0)]; -_q1 set[1, (_p select 1) - (_p1 select 1)]; -_q1 set[2, (_p select 2) - (_p1 select 2)]; - -_u set[0, (_p2 select 0) - (_p1 select 0)]; -_u set[1, (_p2 select 1) - (_p1 select 1)]; -_u set[2, (_p2 select 2) - (_p1 select 2)]; -_u = _u call BIS_fnc_unitVector; +_q1 = _p vectorDiff _p1; +_u = _p2 vectorDiff _p1; +_u = vectorNormalized _u; _d = sqrt((_u select 1)*(_u select 1) + (_u select 2)*(_u select 2)); /* Step 2 */ diff --git a/addons/laser/functions/fnc_seekerFindLaserSpot.sqf b/addons/laser/functions/fnc_seekerFindLaserSpot.sqf new file mode 100644 index 0000000000..421748a681 --- /dev/null +++ b/addons/laser/functions/fnc_seekerFindLaserSpot.sqf @@ -0,0 +1,143 @@ +/* + * Author: Nou + * Turn a laser designator on. + * + * Arguments: + * 0: Position of seeker (ASL) + * 1: Seeker wavelength sensitivity range, [1550,1550] is common eye safe. + * 2: Seeker laser code. + * + * Return value: + * Array, [Strongest compatible laser spot ASL pos, owner object] Nil array values if nothing found. + */ + +#include "script_component.hpp" + +private ["_pos", "_seekerWavelengths", "_seekerCode", "_spots", "_buckets", "_excludes", "_bucketIndex", "_finalPos", "_owner", "_obj", "_x", "_method", + "_emitterWavelength", "_laserCode", "_divergence", "_laser", "_laserPos", "_laserDir", "_res", "_bucketPos", "_bucketList", "_c", "_forEachIndex", "_index", + "_testPos", "_finalBuckets", "_largest", "_largestIndex", "_finalBucket", "_owners", "_avgX", "_avgY", "_avgZ", "_count", "_maxOwner", "_maxOwnerIndex", "_finalOwner"]; + +_pos = _this select 0; +_seekerWavelengths = _this select 1; +_seekerCode = _this select 2; + +_spots = []; +_buckets = []; +_excludes = []; +_bucketIndex = 0; +_finalPos = nil; +_finalOwner = nil; + +{ + _obj = _x select 0; + _owner = _x select 1; + _method = _x select 2; + _emitterWavelength = _x select 3; + _laserCode = _x select 4; + _divergence = _x select 5; + if(alive _obj && {_emitterWavelength >= (_seekerWavelengths select 0)} && {_emitterWavelength <= (_seekerWavelengths select 1)} && {_laserCode == _seekerCode}) then { + _laser = []; + if(IS_CODE(_method)) then { + _laser = _x call _method; + } else { + if(IS_STRING(_method)) then { + _laser = _x call (missionNamespace getVariable [_method, {}]); + } else { + if(IS_ARRAY(_method)) then { + if(count _method == 2) then { + _laser = [ATLtoASL (_obj modelToWorldVisual (_method select 0)), _obj weaponDirection (_method select 1)]; + } else { + if(count _method == 3) then { + _laser = [ATLtoASL (_obj modelToWorldVisual (_method select 0)), (ATLtoASL (_obj modelToWorldVisual (_method select 1))) vectorFromTo (ATLtoASL (_obj modelToWorldVisual (_method select 2)))]; + }; + }; + }; + }; + }; + _laserPos = _laser select 0; + _laserDir = _laser select 1; + _res = [_laserPos, _laserDir, _divergence] call FUNC(shootCone); + { + _spots pushBack [_x select 0, _owner]; + } forEach (_res select 2); + }; +} forEach (GVAR(laserEmitters) select 1); + +if((count _spots) > 0) then { + _bucketPos = nil; + _bucketList = nil; + _c = 0; + while { count(_spots) != count(_excludes) && _c < (count _spots) } do { + scopeName "mainSearch"; + { + if(!(_forEachIndex in _excludes)) then { + _index = _buckets pushBack [_x, [_x]]; + _excludes pushBack _forEachIndex; + _bucketPos = _x select 0; + _bucketList = (_buckets select _index) select 1; + breakTo "mainSearch"; + }; + } forEach _spots; + { + if(!(_forEachIndex in _excludes)) then { + _testPos = (_x select 0); + if(_testPos vectorDistanceSqr _bucketPos <= 100) then { + _bucketList pushBack _x; + _excludes pushBack _forEachIndex; + }; + }; + } forEach _spots; + _c = _c + 1; + }; + _finalBuckets = []; + _largest = -1; + _largestIndex = 0; + { + _index = _finalBuckets pushBack []; + _bucketList = _finalBuckets select _index; + { + _testPos = (_x select 0); + if(!terrainIntersectASL [_pos, _testPos] && {!lineIntersects [_pos, _testPos]}) then { + _bucketList pushBack _x; + }; + } forEach (_x select 1); + if((count _bucketList) > _largest) then { + _largest = (count _bucketList); + _largestIndex = _index; + }; + } forEach _buckets; + + _finalBucket = _finalBuckets select _largestIndex; + _owners = HASH_CREATE; + + if(count _finalBucket > 0) then { + _avgX = 0; + _avgY = 0; + _avgZ = 0; + { + player sideChat format["x: %1", _x]; + _avgX = _avgX + ((_x select 0) select 0); + _avgY = _avgY + ((_x select 0) select 1); + _avgZ = _avgZ + ((_x select 0) select 2); + _owner = _x select 1; + if(HASH_HASKEY(_owners, _owner)) then { + _count = HASH_GET(_owners, _owner); + HASH_SET(_owners, _owner, _count+1); + } else { + HASH_SET(_owners, _owner, 1); + }; + } forEach _finalBucket; + _count = count _finalBucket; + _finalPos = [_avgX/_count, _avgY/_count, _avgZ/_count]; + _maxOwner = -1; + _maxOwnerIndex = 0; + { + if((_owners select 1) select _forEachIndex > _maxOwner) then { + _maxOwner = (_owners select 1) select _forEachIndex; + _maxOwnerIndex = _forEachIndex; + }; + } forEach (_owners select 0); + _finalOwner = (_owners select 0) select _maxOwnerIndex; + }; +}; +[_finalPos, _owner]; diff --git a/addons/laser/functions/fnc_shootCone.sqf b/addons/laser/functions/fnc_shootCone.sqf index e33edd10bc..801353d4f7 100644 --- a/addons/laser/functions/fnc_shootCone.sqf +++ b/addons/laser/functions/fnc_shootCone.sqf @@ -1,8 +1,17 @@ #include "script_component.hpp" - +//#define DEBUG_MODE_FULL +private ["_divergence","_pos","_vec","_longestReturn","_shortestReturn","_resultPositions","_p1","_p2","_p","_v","_cp","_vecRotateMap","_result", + "_resultPos","_distance","_count","_pos2","_radOffset","_offset","_offsetPos","_offsetVector"]; _divergence = 0.3; _pos = _this select 0; _vec = _this select 1; +if(count _this > 2) then { + _divergence = _this select 2; +}; +_count = 3; +if(count _this > 3) then { + _count = _this select 3; +}; _longestReturn = -1000000000; _shortestReturn = 1000000000; _resultPositions = []; @@ -10,7 +19,7 @@ _p1 = [0,0,0]; _p2 = +_vec; _p = (_vec call CBA_fnc_vect2polar); _v = [(_p select 0), (_p select 1), (_p select 2)+90] call CBA_fnc_polar2vect; -_cp = [_vec, _v] call BIS_fnc_crossProduct; +_cp = _vec vectorCrossProduct _v; _vecRotateMap = [_cp, _p1, _p2] call FUNC(rotateVectLineGetMap); @@ -24,28 +33,21 @@ if(!isNil "_resultPos") then { if(_distance > _longestReturn) then { _longestReturn = _distance; }; - _resultPositions set[(count _resultPositions), _result]; + _resultPositions pushBack _result; #ifdef DEBUG_MODE_FULL - DRAW_LINES set[(count DRAW_LINES), [_pos, _resultPos, [0, 1, 0, 1]]]; + // DRAW_LINES set[(count DRAW_LINES), [_pos, _resultPos, [0, 1, 0, 1]]]; + drawLine3D [ASLtoATL _pos, ASLtoATL _resultPos, [1,0,0,1]]; #endif }; -_count = 8; -_pos2 = [ - (_pos select 0)+((_vec select 0)*1000), - (_pos select 1)+((_vec select 1)*1000), - (_pos select 2)+((_vec select 2)*1000) - ]; + +_pos2 = _pos vectorAdd (_vec vectorMultiply 1000); { for "_i" from 0 to ceil(_count*_x) do { _radOffset = random 360; _offset = [_vecRotateMap, (((360/_count)*_i)+_radOffset) mod 360] call FUNC(rotateVectLine); - _offsetPos = [ - (_pos2 select 0)+((_offset select 0)*(_divergence*_x)), - (_pos2 select 1)+((_offset select 1)*(_divergence*_x)), - (_pos2 select 2)+((_offset select 2)*(_divergence*_x)) - ]; - _offsetVector = [_pos, _offsetPos] call BIS_fnc_vectorFromXtoY; + _offsetPos = _pos2 vectorAdd (_offset vectorMultiply (_divergence*_x)); + _offsetVector = _pos vectorFromTo _offsetPos; _result = [_pos, _offsetVector] call FUNC(shootRay); _resultPos = _result select 0; if(!isNil "_resultPos") then { @@ -56,9 +58,10 @@ _pos2 = [ if(_distance > _longestReturn) then { _longestReturn = _distance; }; - _resultPositions set[(count _resultPositions), _result]; + _resultPositions pushBack _result; #ifdef DEBUG_MODE_FULL - DRAW_LINES set[(count DRAW_LINES), [_pos, _resultPos, [0, 1, 0, 1]]]; + // DRAW_LINES set[(count DRAW_LINES), [_pos, _resultPos, [0, 1, 0, 1]]]; + drawLine3D [ASLtoATL _pos, ASLtoATL _resultPos, [1,0,0,1]]; #endif }; }; diff --git a/addons/laser/functions/fnc_shootRay.sqf b/addons/laser/functions/fnc_shootRay.sqf index 62847d16b6..83b257ed7b 100644 --- a/addons/laser/functions/fnc_shootRay.sqf +++ b/addons/laser/functions/fnc_shootRay.sqf @@ -11,13 +11,8 @@ _lastPos = +_pos; { scopeName "mainSearch"; for "_i" from 1 to 10 do { - _nextPos = [ - (_lastPos select 0)+((_vec select 0)*_x), - (_lastPos select 1)+((_vec select 1)*_x), - (_lastPos select 2)+((_vec select 2)*_x) - ]; - - if(lineIntersects [_lastPos, _nextPos] || terrainIntersectASL [_lastPos, _nextPos]) then { + _nextPos = _lastPos vectorAdd (_vec vectorMultiply _x); + if(terrainIntersectASL [_lastPos, _nextPos] || {lineIntersects [_lastPos, _nextPos]}) then { _resultPos = _lastPos; breakTo "mainSearch"; } else { @@ -25,6 +20,5 @@ _lastPos = +_pos; _lastPos = _nextPos; }; }; - } forEach _fidelity; [_resultPos, _distance]; \ No newline at end of file diff --git a/addons/laser/functions/fnc_vanillaLaserSeekerHandler.sqf b/addons/laser/functions/fnc_vanillaLaserSeekerHandler.sqf new file mode 100644 index 0000000000..38cd1839f9 --- /dev/null +++ b/addons/laser/functions/fnc_vanillaLaserSeekerHandler.sqf @@ -0,0 +1,26 @@ +/* + * Author: jaynus + * Handler function for laser network code. + * + * Argument: + * 0: Emitter + * 1: Owner + * + * Return value: + * [position, direction] + */ +//#define DEBUG_MODE_FULL +#include "script_component.hpp" + +private["_emitter", "_owner", "_gunnerInfo", "_turretInfo", "_povPos", "_povDir"]; + +_emmiter = _this select 0; +_owner = _this select 1; + +// Not in a vehicle.... +// @TODO: handle lasering from turrets +if( (vehicle _emmiter) == _emmiter && alive _emmiter && (currentWeapon _emmiter) == "LaserDesignator") exitWith { + [(eyePos _emmiter), (eyeDirection _emmiter)] +}; + +[-1,-1] \ No newline at end of file diff --git a/addons/laser_selfdesignate/CfgUI.hpp b/addons/laser_selfdesignate/CfgUI.hpp deleted file mode 100644 index e8823e04f8..0000000000 --- a/addons/laser_selfdesignate/CfgUI.hpp +++ /dev/null @@ -1,32 +0,0 @@ -class RscPicture; -class RscText; -class RscControlsGroupNoScrollbars; -/* This disables air radar. We need to make this a seperate HUD addon -class RscInGameUI -{ - class RscUnitInfo - { - class CA_Radar: RscControlsGroupNoScrollbars - { - class controls - { - class CA_RadarBackground: RscPicture { - colorText[] = {0,0,0,0}; - text = ""; - }; - class CA_RadarIcon: RscPicture { - colorText[] = {0,0,0,0}; - }; - class CA_Heading: RscText { - colorText[] = {0,0,0,0}; - }; - }; - }; - }; -}; -class CfgInGameUI -{ - -}; - -*/ \ No newline at end of file diff --git a/addons/laser_selfdesignate/CfgVehicles.hpp b/addons/laser_selfdesignate/CfgVehicles.hpp index b29d8a4394..02d8b32b3d 100644 --- a/addons/laser_selfdesignate/CfgVehicles.hpp +++ b/addons/laser_selfdesignate/CfgVehicles.hpp @@ -8,12 +8,6 @@ class CfgVehicles { class Turrets { class MainTurret; }; - - // TODO: move these to a different HUD addon - // commanderCanSee = 2+32; - // gunnerCanSee = 2+32; - // driverCanSee = 2+32; - }; class Helicopter_Base_F: Helicopter {}; diff --git a/addons/laser_selfdesignate/XEH_pre_init.sqf b/addons/laser_selfdesignate/XEH_pre_init.sqf index dd971b9539..3f8c92e4db 100644 --- a/addons/laser_selfdesignate/XEH_pre_init.sqf +++ b/addons/laser_selfdesignate/XEH_pre_init.sqf @@ -5,7 +5,8 @@ PREP(laserHudDesignateOn); PREP(laserHudDesignateOff); PREP(unitTurretHasDesignator); -GVAR(laser) = nil; +PREP(findLaserSource); + GVAR(active) = false; FUNC(getPosASL) = {visiblePositionASL (_this select 0)}; diff --git a/addons/laser_selfdesignate/config.cpp b/addons/laser_selfdesignate/config.cpp index 33c31ba7e5..19ec28063b 100644 --- a/addons/laser_selfdesignate/config.cpp +++ b/addons/laser_selfdesignate/config.cpp @@ -10,8 +10,6 @@ class CfgPatches { }; }; -#include "CfgUI.hpp" - #include "CfgEventhandlers.hpp" #include "CfgWeapons.hpp" #include "CfgVehicles.hpp" diff --git a/addons/laser_selfdesignate/functions/fnc_findLaserSource.sqf b/addons/laser_selfdesignate/functions/fnc_findLaserSource.sqf new file mode 100644 index 0000000000..ac1ae7e438 --- /dev/null +++ b/addons/laser_selfdesignate/functions/fnc_findLaserSource.sqf @@ -0,0 +1,30 @@ +/* + * Author: jaynus + * Handler function for laser network code. + * + * Argument: + * 0: Emitter + * 1: Owner + * + * Return value: + * [position, direction] + */ + //findLaserSource.sqf +//#define DEBUG_MODE_FULL +#include "script_component.hpp" + +private["_emitter", "_owner", "_gunnerInfo", "_turretInfo", "_povPos", "_povDir"]; + +_emmiter = _this select 0; +_owner = _this select 1; + +_gunnerInfo = [_emmiter, (currentWeapon _emmiter)] call CBA_fnc_getFirer; +_turretInfo = [_emmiter, _gunnerInfo select 1] call EFUNC(common,getTurretDirection); +_povPos = _turretInfo select 0; +_povDir = _turretInfo select 1; + +if(!isNil "_povPos" && !isNil "_povDir") exitWith { + [_povPos, _povDir] +}; + +[-1,-1] \ No newline at end of file diff --git a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOff.sqf b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOff.sqf index 02ea7e6e70..17e7fcb76e 100644 --- a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOff.sqf +++ b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOff.sqf @@ -1,28 +1,25 @@ +/* + * Author: jaynus + * Turns off passed laser self designation. + * + * Argument: + * 0: Shooter, player shooting the laser + * 1: LaserUUID, the UUID of the laser returned by EFUNC(laser,laserOn) + * 2: Local laser target, unused. + * + * Return value: + * true + */ #include "script_component.hpp" if( (count _this) > 2) then { - EXPLODE_3_PVT(_this,_vehicle,_shooter,_laserTarget); - // We got the optional vehicle list, clear the parameters - _vehicle setVariable[QGVAR(currentTarget), [], true]; + EXPLODE_3_PVT(_this,_shooter,_laserUuid, _localLaserTarget); + + [_laserUuid] call EFUNC(laser,laserOff); + // @TODO: Nou gets to field all tickets about missing lasers. + //deleteVehicle _localLaserTarget; }; -if(isNil QGVAR(laser)) exitWith { - false -}; -if(!local GVAR(laser)) then { - false -}; - -_handle = GVAR(laser) getVariable ["ACE_PFH_HANDLE", nil]; -if(!isNil "_handle") then { - [_handle] call cba_fnc_removePerFrameHandler; -}; - -REM(ACE_LASERS, GVAR(laser)); -deleteVehicle GVAR(laser); -GVAR(laser) = nil; GVAR(active) = false; - - true \ No newline at end of file diff --git a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf index a6c8fc2295..c480c051bb 100644 --- a/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf +++ b/addons/laser_selfdesignate/functions/fnc_laserHudDesignateOn.sqf @@ -1,4 +1,14 @@ -//#define DEBUG_MODE_FULL +/* + * Author: jaynus + * Turns on laser self designation from this vehicle based on the turret. + * There are no arguments, because it is all strictly based on the users vehicle. + * + * Argument: + * + * Return value: + * N/A + */ + //#define DEBUG_MODE_FULL #include "script_component.hpp" TRACE_1("enter", _this); @@ -6,102 +16,74 @@ TRACE_1("enter", _this); #define FCS_UPDATE_DELAY 1 FUNC(laserHudDesignatePFH) = { - private["_strongestResultPos", "_args", "_laserTarget", "_shooter", "_vehicle", "_weapon", "_gunnerInfo", "_turret", "_pov", "_gunBeg", "_gunEnd", "_povPos", "_povDir", "_result", "_resultPositions", "_firstResult", "_forceUpdateTime"]; + private["_strongestResultPos", "_args", "_localLaserTarget", "_laserResultPosition", "_laserResult", "_shooter", "_vehicle", "_weapon", "_gunnerInfo", "_turretInfo", "_pov", "_gunBeg", "_gunEnd", "_povPos", "_povDir", "_result", "_resultPositions", "_firstResult", "_forceUpdateTime"]; _args = _this select 0; - _laserTarget = _args select 0; - _shooter = _args select 1; - - TRACE_1("", _args, (_laserTarget getVariable["ACE_LASER_CODE"])); - if((vehicle ACE_player) != _shooter || !alive _shooter || isNull _vehicle || isNull _laserTarget || !GVAR(active) ) exitWith { - [_vehicle, _shooter, _laserTarget] call FUNC(laserHudDesignateOff); + _shooter = _args select 0; + _localLaserTarget = _args select 2; + _vehicle = vehicle _shooter; + TRACE_1("", _args); + + if((vehicle _shooter) == _shooter || {!alive _shooter} || {isNull _vehicle} || {!GVAR(active)} ) exitWith { + _args call FUNC(laserHudDesignateOff); }; if(!([_shooter] call FUNC(unitTurretHasDesignator)) ) exitWith { - [_vehicle, _shooter, _laserTarget] call FUNC(laserHudDesignateOff); + _args call FUNC(laserHudDesignateOff); }; - if( (count _args) < 3) then { - _args set[2, diag_tickTime + FCS_UPDATE_DELAY]; + if( (count _args) < 4) then { + _args set[3, diag_tickTime + FCS_UPDATE_DELAY]; }; - _forceUpdateTime = _args select 2; + _forceUpdateTime = _args select 3; + + // @TODO: We don't have anything here we need to do the calculations for right now + /* - _vehicle = vehicle _shooter; - _weapon = currentWeapon _vehicle; - - // Retrieve the gunner and turret memory point information - _gunnerInfo = [_vehicle, _weapon] call CBA_fnc_getFirer; + _gunnerInfo = [_vehicle, (currentWeapon _vehicle)] call CBA_fnc_getFirer; _turretInfo = [_vehicle, _gunnerInfo select 1] call EFUNC(common,getTurretDirection); _povPos = _turretInfo select 0; - _povDir = _turretInfo select 1; - _targetInfo = _vehicle getVariable[QGVAR(currentTarget), [] ]; - if( (count _targetInfo) > 0) then { - if(_laserTarget != (_targetInfo select 0) ) then { - _targetInfo = [] - }; - }; - if( (count _targetInfo) < 1) then { - _targetInfo = [_laserTarget, 1001]; // TODO: set laser code - _vehicle setVariable[QGVAR(currentTarget), _targetInfo, true]; - _laserTarget setVariable[QGVAR(owner), _vehicle, true]; - }; + _laserCode = (vehicle ACE_player) getVariable[QGVAR(currentCode), ACE_DEFAULT_LASER_CODE]; + _waveLength = (vehicle ACE_player) getVariable[QGVAR(currentWaveLength), ACE_DEFAULT_LASER_WAVELENGTH]; - _result = [_povPos, _povDir] call EFUNC(laser,shootCone); - if((count _result) > 0) then { - _resultPositions = _result select 2; + _laserResult = [_povPos, [_waveLength,_waveLength], _laserCode] call EFUNC(laser,seekerFindLaserSpot); + _laserResultPosition = _laserResult select 0; + TRACE_1("Search", _laserResult); - if((count _resultPositions) > 0) then { - _strongestResultPos = [_resultPositions, _povPos] call EFUNC(laser,findStrongestRay); - - // If the laser has moved less than a half meter, then dont move it. - // Just regular use of lasers will commonly make them move this much, - // but not across multiple close frames. - // This loses accuracy a little, but saves position updates per frame. - TRACE_5("", diag_tickTime, _forceUpdateTime, getPosASL _laserTarget, _strongestResultPos, ((getPosASL _laserTarget) distance _pos)); + if((count _laserResult) > 0) then { + // @TODO: Nou gets to field all tickets about missing lasers. + //_localLaserTarget setPosASL _laserResultPosition; + }; + */ - if(diag_tickTime > _forceUpdateTime) then { - TRACE_1("FCS Update", ""); - ["ace_fcs_forceUpdate", []] call ace_common_fnc_localEvent; - }; - - //if( (_laserTarget distance _strongestResultPos) > 0.1) then { - TRACE_1("LaserPos Update", ""); - _laserTarget setPosATL (ASLToATL _strongestResultPos); - //}; - - if(diag_tickTime > _forceUpdateTime) then { - _args set[2, diag_tickTime + FCS_UPDATE_DELAY]; - }; -#ifdef DEBUG_MODE_FULL - drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,0,0,1], (getPosATL _laserTarget), 0.75, 0.75, 0, "", 0.5, 0.025, "TahomaB"]; - - { - private["_position"]; - _position = _x select 0; - drawLine3d [ASLToATL _povPos, ASLToATL _position, [0,0,1,1] ]; - } forEach _resultPositions; -#endif - }; + if(diag_tickTime > _forceUpdateTime) then { + ["ace_fcs_forceUpdate", []] call ace_common_fnc_localEvent; + _args set[3, diag_tickTime + FCS_UPDATE_DELAY]; }; _this set[0, _args]; }; -private ["_laserTarget", "_handle", "_vehicle"]; +private ["_laserTarget", "_handle", "_vehicle", "_laserUuid", "_waveLength", "_beamSpread", "_laserCode"]; -if(isNil QGVAR(laser)) then { - _laserTarget = "LaserTargetW" createVehicle (getpos ACE_player); - +if(!GVAR(active)) then { GVAR(active) = true; - _handle = [FUNC(laserHudDesignatePFH), 0.1, [_laserTarget, ACE_player]] call cba_fnc_addPerFrameHandler; - _laserTarget setVariable ["ACE_PFH_HANDLE", _handle, false]; + TRACE_1("Activating laser", ""); - // Clear the vehicle parameters - _vehicle setVariable[QGVAR(currentTarget), [], true]; + // Get the self-designation variables, or use defaults + _laserCode = (vehicle ACE_player) getVariable[QGVAR(currentCode), ACE_DEFAULT_LASER_CODE]; + _waveLength = (vehicle ACE_player) getVariable[QGVAR(currentWaveLength), ACE_DEFAULT_LASER_WAVELENGTH]; + _beamSpread = (vehicle ACE_player) getVariable[QGVAR(currentBeamSpread), ACE_DEFAULT_LASER_BEAMSPREAD]; - GVAR(laser) = _laserTarget; + _laserUuid = [(vehicle ACE_player), ACE_player, QFUNC(findLaserSource), _waveLength, _laserCode, _beamSpread] call EFUNC(laser,laserOn); + + // @TODO: Create the local target for the players side + // @TODO: Nou gets to field all tickets about missing lasers. + //_localLaserTarget = "LaserTargetW" createVehicleLocal (getpos ACE_player); + + _handle = [FUNC(laserHudDesignatePFH), 0.1, [ACE_player, _laserUuid, nil]] call cba_fnc_addPerFrameHandler; } else { [] call FUNC(laserHudDesignateOff); [] call FUNC(laserHudDesignateOn); diff --git a/addons/laser_selfdesignate/stringtable.xml b/addons/laser_selfdesignate/stringtable.xml index da8030cb69..8b2c528871 100644 --- a/addons/laser_selfdesignate/stringtable.xml +++ b/addons/laser_selfdesignate/stringtable.xml @@ -1,16 +1,23 @@  - Laser<br/>Designator On Lasermarkierer<br/>an Laser<br/>Designador encendido + ЛЦУ<br/>ВКЛ + Laserový<br/>značkovač zapnut + Desygnator<br/>laserowy wł. + Désignateur<br/>Laser Allumé Laser<br/>Designator Off Lasermarkierer<br/>aus Laser<br/>Designador apagado + ЛЦУ<br/>ВЫКЛ + Laserový<br/>značkovat vypnut + Desygnator<br/>laserowy wył. + Désignateur<br/>Laser Éteint diff --git a/addons/laserpointer/stringtable.xml b/addons/laserpointer/stringtable.xml index 87b36618a6..a5a153aca4 100644 --- a/addons/laserpointer/stringtable.xml +++ b/addons/laserpointer/stringtable.xml @@ -1,32 +1,40 @@  - Laser Pointer (red) + Pointeur laser (rouge) Laserpointer (rot) + Лазерный прицел (красный) + Laserové ukazovátko (červené) + Wskaźnik laserowy (czerwony) Laser Pointer (green) + Pointeur laser (vert) Laserpointer (grün) + Лазерный прицел (зелёный) + Laserové ukazovátko (zelené) + Wskaźnik laserowy (zielony) - Emits visible light. + Diffuse un rayon lumineux visible. Strahlt sichtbares Licht aus. + Испускает узкий пучок видимого света. + Vyzařuje viditelné světlo. + Wydziela widzialne światło. - <t color='#9cf953'>Use: </t>Turn Laser ON/OFF <t color='#9cf953'>Použití: </t>Zapnout/vypnout laser - <t color='#9cf953'>Utiliser : </t>laser on/off + <t color='#9cf953'>Utiliser : </t>laser allumé/éteint <t color='#9cf953'>Benutzen: </t>Laser EIN/AUS <t color='#9cf953'>Uso: </t>Laser ON/OFF - <t color='#9cf953'>Użyj: </t>wł./wył. lasera + <t color='#9cf953'>Użyj: </t>wł./wył. laser <t color='#9cf953'>Uso: </t>Ativar/Desativar laser <t color='#9cf953'>Использовать: </t>вкл/выкл лазер <t color='#9cf953'>Usar: </t>encender/apagar láser - diff --git a/addons/logistics_uavbattery/CfgVehicles.hpp b/addons/logistics_uavbattery/CfgVehicles.hpp index a3a3fc763d..5feba4c9a8 100644 --- a/addons/logistics_uavbattery/CfgVehicles.hpp +++ b/addons/logistics_uavbattery/CfgVehicles.hpp @@ -1,29 +1,29 @@ class CfgVehicles { - class Helicopter_Base_F; - class UAV_01_base_F: Helicopter_Base_F { - class ACE_Actions { - class ACE_MainActions { - class GVAR(RefuelUAV) { - displayName = "$STR_ACE_logistics_uavbattery_Recharge"; - distance = 4; - condition = QUOTE([ARR_2(_player, _target)] call FUNC(canRefuelUAV)); - statement = QUOTE([ARR_2(_player, _target)] call FUNC(refuelUAV)); - showDisabled = 0; \ - priority = 1.245; \ - icon = QUOTE(PATHTOF(ui\UAV_battery.paa)); + class Helicopter_Base_F; + class UAV_01_base_F: Helicopter_Base_F { + class ACE_Actions { + class ACE_MainActions { + class GVAR(RefuelUAV) { + displayName = "$STR_ACE_logistics_uavbattery_Recharge"; + distance = 4; + condition = QUOTE([ARR_2(_player, _target)] call FUNC(canRefuelUAV)); + statement = QUOTE([ARR_2(_player, _target)] call FUNC(refuelUAV)); + showDisabled = 0; \ + priority = 1.245; \ + icon = QUOTE(PATHTOF(ui\UAV_battery_ca.paa)); + }; + }; }; - }; }; - }; - // Misc box content - class Box_NATO_Support_F; - class ACE_Box_Misc: Box_NATO_Support_F { - class TransportItems { - class _xx_ACE_UAVBattery { - count = 6; - name = "ACE_UAVBattery"; - }; + // Misc box content + class Box_NATO_Support_F; + class ACE_Box_Misc: Box_NATO_Support_F { + class TransportItems { + class _xx_ACE_UAVBattery { + count = 6; + name = "ACE_UAVBattery"; + }; + }; }; - }; }; diff --git a/addons/logistics_uavbattery/CfgWeapons.hpp b/addons/logistics_uavbattery/CfgWeapons.hpp index e84e053347..1986b4f80f 100644 --- a/addons/logistics_uavbattery/CfgWeapons.hpp +++ b/addons/logistics_uavbattery/CfgWeapons.hpp @@ -1,15 +1,15 @@ class CfgWeapons { - class InventoryItem_Base_F; - class ACE_ItemCore; + class InventoryItem_Base_F; + class ACE_ItemCore; - class ACE_UAVBattery: ACE_ItemCore { - scope = 2; - displayName = "$STR_ACE_logistics_uavbattery_Battery_Name"; - descriptionShort = "$STR_ACE_logistics_uavbattery_Battery_Description"; - model = QUOTE(PATHTOF(models\ace_battery.p3d)); - picture = QUOTE(PATHTOF(ui\UAV_battery.paa)); - class ItemInfo: InventoryItem_Base_F { - mass = 20; + class ACE_UAVBattery: ACE_ItemCore { + scope = 2; + displayName = "$STR_ACE_logistics_uavbattery_Battery_Name"; + descriptionShort = "$STR_ACE_logistics_uavbattery_Battery_Description"; + model = QUOTE(PATHTOF(models\ace_battery.p3d)); + picture = QUOTE(PATHTOF(ui\UAV_battery_ca.paa)); + class ItemInfo: InventoryItem_Base_F { + mass = 20; + }; }; - }; }; diff --git a/addons/logistics_uavbattery/stringtable.xml b/addons/logistics_uavbattery/stringtable.xml index fbd9004290..27ae24999f 100644 --- a/addons/logistics_uavbattery/stringtable.xml +++ b/addons/logistics_uavbattery/stringtable.xml @@ -1,5 +1,4 @@  - @@ -21,10 +20,10 @@ Pas de batterie UAV Potrzebujesz baterii UAV Szükséged van egy UAV akkumulátorra - Potřebuješ UAV-Baterii + Potřebuješ UAV baterii Você precisa de uma Bateria para VANT Hai bisogno di una Batteria UAV - Требуется аккумулятор БПЛА + Требуется аккумулятор для БПЛА Recharge @@ -36,7 +35,7 @@ Dobít Recarregar Ricarica - Подзарядить + Зарядить UAV Battery @@ -45,7 +44,7 @@ Batterie UAV Bateria UAV UAV akkumulátor - UAV-Baterie + UAV baterie Bateria para VANT Batteria UAV Аккумулятор БПЛА @@ -60,7 +59,7 @@ Používané k dobíjení UAV Usada para reabastecer VANT Usata per ricaricare la Batteria dell'UAV - Используется для подзарядки БПЛА + Используется для зарядки БПЛА Recharging ... @@ -72,7 +71,7 @@ Dobíjení ... Recarregando ... In ricarica ... - Подзаряжаем ... + Заряжается ... - \ No newline at end of file + diff --git a/addons/logistics_uavbattery/ui/UAV_battery.paa b/addons/logistics_uavbattery/ui/UAV_battery.paa deleted file mode 100644 index 5e6c0e1bf7..0000000000 Binary files a/addons/logistics_uavbattery/ui/UAV_battery.paa and /dev/null differ diff --git a/addons/logistics_uavbattery/ui/UAV_battery_ca.paa b/addons/logistics_uavbattery/ui/UAV_battery_ca.paa new file mode 100644 index 0000000000..426578c3fc Binary files /dev/null and b/addons/logistics_uavbattery/ui/UAV_battery_ca.paa differ diff --git a/addons/logistics_wirecutter/stringtable.xml b/addons/logistics_wirecutter/stringtable.xml index 91d321d75c..d8cce85c5c 100644 --- a/addons/logistics_wirecutter/stringtable.xml +++ b/addons/logistics_wirecutter/stringtable.xml @@ -1,16 +1,23 @@  - Wirecutter + Coupe clôture Drahtschneider Cortador de cables + Клещи-кусачки + Štípací kleště + Nożyce do cięcia drutu Wirecutter Schneidet Draht. Cortador de cables + Позволяют быстро перекусывать сеточные конструкции. + Štípačky + Służą do... cięcia drutu i płotów + Coupe clôture Cut Fence @@ -22,7 +29,7 @@ Cortar Cerca Taglia Drótkerítés átvágása - Вырезать забор + Разрезать забор Cutting Fences / Wires ... @@ -34,7 +41,7 @@ Cortando Cerca / Arame ... Sto tagliando ... Drótok elvágása ... - Вырезаем забор / провода ... + Разрезаем забор / провода ... Fence cut @@ -46,7 +53,7 @@ Cerca cortada Fatto! Drótkerítés átvágva - Забор вырезан + Забор разрезан diff --git a/addons/magazinerepack/stringtable.xml b/addons/magazinerepack/stringtable.xml index d63dd2d2cd..0d9cad41fa 100644 --- a/addons/magazinerepack/stringtable.xml +++ b/addons/magazinerepack/stringtable.xml @@ -1,5 +1,4 @@  - @@ -20,7 +19,7 @@ Menú de selección de cargador Sélectionner menu des chargeurs Menu wyboru magazynków - Zvolit Menu Zásobníků + Zvolit Menu zásobníků Seleziona Menù di Ricarica Menu de Seleção de Carregador Fegyvertár menü kiválasztás @@ -32,7 +31,7 @@ Seleccionar cargador Sélectionner chargeur Wybierz magazynek - Zvolit Zásobník + Zvolit zásobník Seleziona Caricatore Selecionar Carregador Tár kiválasztása @@ -44,7 +43,7 @@ Reorganizando cargadores ... Réorganisation des chargeurs ... Przepakowywanie magazynków ... - Páskuji Zásobníky ... + Páskuji zásobníky ... Sto ricaricando le munizioni ... Reorganizando Carregadores ... Újratárazás ... @@ -56,7 +55,7 @@ Cargadores reorganizados Chargeurs réorganisés Magazynki przepakowane - Přepáskované Zásobníky + Přepáskované zásobníky Caricatore ricaricato Carregadores Reorganizados Újratárazott tárak @@ -67,7 +66,7 @@ %1 volle(s) Magazin(e) und %2 übrig gebliebene Patrone(n) %1 cargador(es) completo(s) y %2 bala(s) extra(s) %1 chargeur(s) plein(s) et %2 cartouche(s) en rab - %1 pełnych magazynków i %2 dodatkowych naboi + Pełnych magazynków: %1. Dodatkowych naboi: %2. %1 plný zásobník(y) a %2 munice navíc %1 caricatore/i pieno e %2 munizioni extra %1 carregador(es) cheio(s) e %2 disparo(s) a mais @@ -76,18 +75,30 @@ Repacking Finished + Réorganisation terminé Wiederverpacken Fertig Reembalaje finalizado + Перепаковка завершена + Páskování dokončeno + Przepakowywanie zakończone Repacking Interrupted + Réorganisation Interrompue Umpacken Unterbrochen Reembalaje interrumpido + Перепаковка прервана + Páskování přerušeno + Przepakowywanie przerwane %1 Full and %2 Partial + %1 Complet et %2 Partiellement %1 Vollständigen und %2 Teilweisen %1 Total y %2 Parcial + %1 полных и %2 неполных + %1 plný a %2 částečně + Pełnych: %1. Częściowo pełnych: %2. diff --git a/addons/magazines/CfgAmmo.hpp b/addons/magazines/CfgAmmo.hpp index 2e1e9fceea..8a9a3ec209 100644 --- a/addons/magazines/CfgAmmo.hpp +++ b/addons/magazines/CfgAmmo.hpp @@ -107,4 +107,71 @@ class CfgAmmo { //typicalspeed = 792; //airfriction = -0.0008577; }; + + + /* .338 Lapua Magnum */ + + // IR Dim + class B_338_Ball; + class ACE_B_338_Ball_Tracer_Dim: B_338_Ball { + nvgOnly = 1; + }; + + //AP + class ACE_B_338_Ball_AP: B_338_Ball { + caliber = 3.6; + hit = 18.9; + }; + + //SD + class ACE_B_338_Ball_SD: B_338_Ball { + airFriction = -0.00036; + hit = 15.75; + supersonicCrackFar[] = {}; + supersonicCrackNear[] = {}; + typicalSpeed = 320; + audibleFire = 1.2; + visibleFire = 4.0; + }; + + + /* .338 Norma Magnum */ + + //IR Dim + class B_338_NM_Ball; + class ACE_B_338_NM_Ball_Tracer_Dim: B_338_NM_Ball { + nvgOnly = 1; + }; + + //AP + class ACE_B_338_NM_Ball_AP: B_338_NM_Ball { + caliber = 3.2; + hit = 16.8; + }; + + + /* 9.3x64mm */ + + //IR Dim + class B_93x64_Ball; + class ACE_B_93x64_Ball_Tracer_Dim: B_93x64_Ball { + nvgOnly = 1; + }; + + //AP + class ACE_B_93x64_Ball_AP: B_93x64_Ball { + caliber = 4.0; + hit = 21; + }; + + //SD + class ACE_B_93x64_Ball_SD: B_93x64_Ball { + airFriction = -0.00042; + hit = 17.5; + supersonicCrackFar[] = {}; + supersonicCrackNear[] = {}; + typicalSpeed = 320; + audibleFire = 1.2; + visibleFire = 4.0; + }; }; diff --git a/addons/magazines/CfgMagazines.hpp b/addons/magazines/CfgMagazines.hpp index 86cb6d9e1b..cea8c31004 100644 --- a/addons/magazines/CfgMagazines.hpp +++ b/addons/magazines/CfgMagazines.hpp @@ -136,4 +136,131 @@ class CfgMagazines { displayNameShort = "$STR_ACE_20Rnd_762x51_mag_APNameShort"; descriptionShort = "$STR_ACE_20Rnd_762x51_mag_APDescription"; }; + + + /* 338 Lapua Magnum */ + class 10Rnd_338_Mag; + class ACE_10Rnd_338_Mag_Tracer: 10Rnd_338_Mag { + author = "$STR_ACE_Common_ACETeam"; + displayName = "$STR_ACE_10Rnd_338_Mag_TracerName"; + displayNameShort = "$STR_ACE_10Rnd_338_Mag_TracerNameShort"; + descriptionShort = "$STR_ACE_10Rnd_338_Mag_TracerDescription"; + tracersEvery = 1; + }; + + class ACE_10Rnd_338_Mag_Tracer_Dim: ACE_10Rnd_338_Mag_Tracer { + author = "$STR_ACE_Common_ACETeam"; + ammo = "ACE_B_338_Ball_Tracer_Dim"; + displayName = "$STR_ACE_10Rnd_388_Mag_Tracer_DimName"; + displayNameShort = "$STR_ACE_10Rnd_338_Mag_Tracer_DimNameShort"; + descriptionShort = "$STR_ACE_10Rnd_338_Mag_Tracer_DimDescription"; + }; + + class ACE_10Rnd_338_Mag_AP: 10Rnd_338_Mag { + author = "$STR_ACE_Common_ACETeam"; + ammo ="ACE_B_338_Ball_AP"; + displayName = "$STR_ACE_10Rnd_338_Mag_APName"; + displayNameShort = "$STR_ACE_10Rnd_338_Mag_APNameShort"; + descriptionShort = "$STR_ACE_10Rnd_338_Mag_APDescription"; + }; + + class ACE_10Rnd_338_Mag_SD: 10Rnd_338_Mag { + author = "$STR_ACE_Common_ACETeam"; + ammo = "ACE_B_338_Ball_SD"; + displayName = "$STR_ACE_10Rnd_338_Mag_SDName"; + displayNameShort = "$STR_ACE_10Rnd_338_Mag_SDNameShort"; + descriptionShort = "$STR_ACE_10Rnd_338_Mag_SDDescription"; + initSpeed = 320; + }; + + + /* .333 Norma Magnum */ + + class 130Rnd_338_Mag; + class ACE_130Rnd_338_Mag_Tracer: 130Rnd_338_Mag { + author = "$STR_ACE_Common_ACETeam"; + displayName = "$STR_ACE_130Rnd_338_Mag_TracerName"; + displayNameShort = "$STR_ACE_130Rnd_338_Mag_TracerNameShort"; + descriptionShort = "$STR_ACE_130Rnd_338_Mag_TracerDescription"; + tracersEvery = 1; + }; + + class ACE_130Rnd_338_Mag_Tracer_Dim: ACE_130Rnd_338_Mag_Tracer { + author = "$STR_ACE_Common_ACETeam"; + ammo = "ACE_B_338_NM_Ball_Tracer_Dim"; + displayName = "$STR_ACE_130Rnd_338_Mag_Tracer_DimName"; + displayNameShort = "$STR_ACE_130Rnd_338_Mag_Tracer_DimNameShort"; + descriptionShort = "$STR_ACE_130Rnd_338_Mag_Tracer_DimDescription"; + }; + + class ACE_130Rnd_338_Mag_AP: 130Rnd_338_Mag { + author = "$STR_ACE_Common_ACETeam"; + ammo = "ACE_B_338_NM_Ball_AP"; + displayName = "$STR_ACE_130Rnd_338_Mag_APName"; + displayNameShort = "$STR_ACE_130Rnd_338_Mag_APNameShort"; + descriptionShort = "$STR_ACE_130Rnd_338_Mag_APDescription"; + }; + + + /* 9.3x64mm */ + //10Rnd Mags + + class 10Rnd_93x64_DMR_05_Mag; + class ACE_10Rnd_93x64_DMR_05_Mag_Tracer: 10Rnd_93x64_DMR_05_Mag { + author = "$STR_ACE_Common_ACEETeam"; + displayName = "$STR_ACE_10Rnd_93x64_DMR_05_Mag_TracerName"; + displayNameShort = "$STR_ACE_10Rnd_93x64_DMR_05_Mag_TracerNameShort"; + descriptionShort = "$STR_ACE_10Rnd_93x64_DMR_05_Mag_TracerDescription"; + tracersEvery = 1; + }; + + class ACE_10Rnd_93x64_DMR_05_Mag_Tracer_Dim: ACE_10Rnd_93x64_DMR_05_Mag_Tracer { + author = "$STR_ACE_Common_ACEETeam"; + ammo ="ACE_B_93x64_Ball_Tracer_Dim"; + displayName = "$STR_ACE_10Rnd_93x64_DMR_05_Mag_Tracer_DimName"; + displayNameShort = "$STR_ACE_10Rnd_93x64_DMR_05_Mag_Tracer_DimNameShort"; + descriptionShort = "$STR_ACE_10Rnd_93x64_DMR_05_Mag_Tracer_DimDescription"; + }; + + class ACE_10Rnd_93x64_DMR_05_Mag_AP: 10Rnd_93x64_DMR_05_Mag { + author = "$STR_ACE_Common_ACEETeam"; + ammo = "ACE_B_93x64_Ball_AP"; + displayName = "$STR_ACE_10Rnd_93x64_DMR_05_Mag_APName"; + displayNameShort = "$STR_ACE_10Rnd_93x64_DMR_05_Mag_APNameShort"; + descriptionShort = "$STR_ACE_10Rnd_93x64_DMR_05_Mag_APDescription"; + }; + + class ACE_10Rnd_93x64_DMR_05_Mag_SD: 10Rnd_93x64_DMR_05_Mag { + author = "$STR_ACE_Common_ACEETeam"; + ammo = "ACE_B_93x64_Ball_SD"; + displayName = "$STR_ACE_10Rnd_93x64_DMR_05_Mag_SDName"; + displayNameShort = "$STR_ACE_10Rnd_93x64_DMR_05_Mag_SDNameShort"; + descriptionShort = "$STR_ACE_10Rnd_93x64_DMR_05_Mag_SDDescription"; + initSpeed = 320; + }; + //150Rnd Belt + class 150Rnd_93x64_Mag; + class ACE_150Rnd_93x64_Mag_Tracer: 150Rnd_93x64_Mag { + author = "$STR_ACE_Common_ACEETeam"; + displayName = "$STR_ACE_150Rnd_93x64_Mag_TracerName"; + displayNameShort = "$STR_ACE_150Rnd_93x64_Mag_TracerNameShort"; + descriptionShort = "$STR_ACE_150Rnd_93x64_Mag_TracerDescription"; + tracersEvery = 1; + }; + + class ACE_150Rnd_93x64_Mag_Tracer_Dim: ACE_150Rnd_93x64_Mag_Tracer { + author = "$STR_ACE_Common_ACEETeam"; + ammo ="ACE_B_93x64_Ball_Tracer_Dim"; + displayName = "$STR_ACE_150Rnd_93x64_Mag_Tracer_DimName"; + displayNameShort = "$STR_ACE_150Rnd_93x64_Mag_Tracer_DimNameShort"; + descriptionShort = "$STR_ACE_150Rnd_93x64_Mag_Tracer_DimDescription"; + }; + + class ACE_150Rnd_93x64_Mag_AP: 150Rnd_93x64_Mag { + author = "$STR_ACE_Common_ACEETeam"; + ammo = "ACE_B_93x64_Ball_AP"; + displayName = "$STR_ACE_150Rnd_93x64_Mag_APName"; + displayNameShort = "$STR_ACE_150Rnd_93x64_Mag_APNameShort"; + descriptionShort = "$STR_ACE_150Rnd_93x64_Mag_APDescription"; + }; }; diff --git a/addons/magazines/CfgVehicles.hpp b/addons/magazines/CfgVehicles.hpp index a7c2654d71..66e63cfa09 100644 --- a/addons/magazines/CfgVehicles.hpp +++ b/addons/magazines/CfgVehicles.hpp @@ -153,6 +153,20 @@ class CfgVehicles { MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_Tracer_Dim,2); MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_SD,2); MACRO_ADDMAGAZINE(ACE_20Rnd_762x51_Mag_AP,2);*/ + MACRO_ADDMAGAZINE(ACE_10Rnd_338_Mag_Tracer,2); + MACRO_ADDMAGAZINE(ACE_10Rnd_338_Mag_Tracer_Dim,2); + MACRO_ADDMAGAZINE(ACE_10Rnd_338_Mag_AP,2); + MACRO_ADDMAGAZINE(ACE_10Rnd_338_Mag_SD,2); + MACRO_ADDMAGAZINE(ACE_130Rnd_338_Mag_Tracer,2); + MACRO_ADDMAGAZINE(ACE_130Rnd_338_Mag_Tracer_Dim,2); + MACRO_ADDMAGAZINE(ACE_130Rnd_338_Mag_AP,2); + MACRO_ADDMAGAZINE(ACE_10Rnd_93x64_DMR_05_Mag_Tracer,2); + MACRO_ADDMAGAZINE(ACE_10Rnd_93x64_DMR_05_Mag_Tracer_Dim,2); + MACRO_ADDMAGAZINE(ACE_10Rnd_93x64_DMR_05_Mag_AP,2); + MACRO_ADDMAGAZINE(ACE_10Rnd_93x64_DMR_05_Mag_SD,2); + MACRO_ADDMAGAZINE(ACE_150Rnd_93x64_Mag_Tracer,2); + MACRO_ADDMAGAZINE(ACE_150Rnd_93x64_Mag_Tracer_Dim,2); + MACRO_ADDMAGAZINE(ACE_150Rnd_93x64_Mag_AP,2); }; }; }; diff --git a/addons/magazines/CfgWeapons.hpp b/addons/magazines/CfgWeapons.hpp index e51a708590..18cff2fe83 100644 --- a/addons/magazines/CfgWeapons.hpp +++ b/addons/magazines/CfgWeapons.hpp @@ -39,6 +39,40 @@ class CfgWeapons { }; }; + class DMR_02_base_F: Rifle_Long_Base_F { + magazines[] += { + "ACE_10Rnd_338_Mag_Tracer", + "ACE_10Rnd_338_Mag_Tracer_Dim", + "ACE_10Rnd_338_Mag_AP", + "ACE_10Rnd_338_Mag_SD" + }; + }; + + class MMG_02_base_F: Rifle_Long_Base_F { + magazines[] += { + "ACE_130Rnd_338_Mag_Tracer", + "ACE_130Rnd_338_Mag_Tracer_Dim", + "ACE_130Rnd_338_Mag_AP" + }; + }; + + class DMR_05_base_F: Rifle_Long_Base_F { + magazines[] += { + "ACE_10Rnd_93x64_DMR_05_Mag_Tracer", + "ACE_10Rnd_93x64_DMR_05_Mag_Tracer_Dim", + "ACE_10Rnd_93x64_DMR_05_Mag_AP", + "ACE_10Rnd_93x64_DMR_05_Mag_SD" + }; + }; + + class MMG_01_base_F: Rifle_Long_Base_F { + magazines[] += { + "ACE_150Rnd_93x64_Mag_Tracer", + "ACE_150Rnd_93x64_Mag_Tracer_Dim", + "ACE_150Rnd_93x64_Mag_AP" + }; + }; + /* Assault Rifles */ diff --git a/addons/magazines/newclasses.txt b/addons/magazines/newclasses.txt index 1a711e8c37..0c40a1b904 100644 --- a/addons/magazines/newclasses.txt +++ b/addons/magazines/newclasses.txt @@ -18,6 +18,16 @@ ACE_B_762x51_Ball_SD ACE_B_762x51_Ball_AP ACE_B_762x51_M118LR +ACE_B_338_Ball_Tracer_Dim +ACE_B_338_Ball_AP +ACE_B_338_Ball_SD + +ACE_B_338_NM_Ball_Tracer_Dim +ACE_B_338_NM_Ball_AP + +ACE_B_93x64_Ball_Tracer_Dim +ACE_B_93x64_Ball_AP +ACE_B_93x64_Ball_SD // CFGMagazines @@ -37,3 +47,21 @@ ACE_20Rnd_762x51_Mag_Tracer ACE_20Rnd_762x51_Mag_Tracer_Dim ACE_20Rnd_762x51_Mag_SD ACE_20Rnd_762x51_Mag_AP + +ACE_10Rnd_338_Mag_Tracer +ACE_10Rnd_338_Mag_Tracer_Dim +ACE_10Rnd_338_Mag_AP +ACE_10Rnd_338_Mag_SD + +ACE_130Rnd_338_Mag_Tracer +ACE_130Rnd_338_Mag_Tracer_Dim +ACE_130Rnd_338_Mag_AP + +ACE_10Rnd_93x64_DMR_05_Mag_Tracer +ACE_10Rnd_93x64_DMR_05_Mag_Tracer_Dim +ACE_10Rnd_93x64_DMR_05_Mag_AP +ACE_10Rnd_93x64_DMR_05_Mag_SD + +ACE_150Rnd_93x64_Mag_Tracer +ACE_150Rnd_93x64_Mag_Tracer_Dim +ACE_150Rnd_93x64_Mag_AP \ No newline at end of file diff --git a/addons/magazines/stringtable.xml b/addons/magazines/stringtable.xml index c8f652fa39..5832824b0e 100644 --- a/addons/magazines/stringtable.xml +++ b/addons/magazines/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -13,7 +13,7 @@ 6.5mm 30ks Svítící IR-DIM Zásobník Carregador de 30 projéteis traçantes IR-DIM de 6,5mm Caricatore 6.5mm 30Rnd Traccianti IR-DIM - Магазин из 30-и 6.5 мм трассирующих под ПНВ + Магазин из 30-ти 6.5 мм трассирующих под ПНВ 6.5mm IR-DIM @@ -25,7 +25,7 @@ 6.5mm IR-DIM 6,5mm IR-DIM 6.5 IR-DIM - 6.5 мм трассирущие под ПНВ + 6.5 мм ИК-трассирующие Caliber: 6.5x39 mm Tracer IR-DIM<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL @@ -49,7 +49,7 @@ 6.5mm 30ks SD Zásobník Carregador de 30 projéteis SD de 6,5mm Caricatore 6.5mm 30Rnd Sil. - Магазин из 30-и 6.5 мм дозвуковых + Магазин из 30-ти 6.5 мм дозвуковых 6.5mm SD @@ -85,7 +85,7 @@ 6.5mm 30ks AP Zásobník Carregador de 30 projéteis AP de 6,5mm Caricatore 6.5mm 30Rnd AP - Магазин из 30-и 6.5 мм бронебойных + Магазин из 30-ти 6.5 мм бронебойных 6.5mm AP @@ -122,7 +122,7 @@ 6.5mm 30ks Svítící IR-DIM Zásobník Carregador de 30 projéteis traçantes IR-DIM de 6,5mm Caricatore 6.5mm 30Rnd Traccianti IR-DIM - Магазин из 30-и 6.5 мм трассирующих под ПНВ + Магазин из 30-ти 6.5 мм трассирующих под ПНВ 6.5mm IR-DIM @@ -134,7 +134,7 @@ 6.5mm IR-DIM 6,5mm IR-DIM 6.5mm IR-DIM - 6.5 мм трассирущие под ПНВ + 6.5 мм ИК-трассирующие Caliber: 6.5x39 mm Tracer IR-DIM<br />Rounds: 30<br />Used in: Katiba @@ -158,7 +158,7 @@ 6.5mm 30ks SD Zásobník Carregador de 30 projéteis SD de 6,5mm Caricatore 6.5mm 30Rnd Sil. - Магазин из 30-и 6.5 мм дозвуковых + Магазин из 30-ти 6.5 мм дозвуковых 6.5mm SD @@ -194,7 +194,7 @@ 6.5mm 30ks AP Zásobník Carregador de 30 projéteis AP de 6,5mm Caricatore 6.5mm 30Rnd AP - Магазин из 30-и 6.5 мм бронебойных + Магазин из 30-ти 6.5 мм бронебойных 6.5mm AP @@ -231,7 +231,7 @@ 5.56mm 30ks Svítící IR-DIM Zásobník Carregador de 30 projéteis traçantes IR-DIM de 5,56mm Caricatore 5.56mm 30rnd Traccianti IR-DIM - Магазин из 30-и 5.56 мм трассирующих под ПНВ + Магазин из 30-ти 5.56 мм трассирующих под ПНВ 5.56mm IR-DIM @@ -243,7 +243,7 @@ 5.56mm IR-DIM 5,56mm IR-DIM 5.56mm IR-DIM - 5.56 мм трассирущие под ПНВ + 5.56 мм ИК-трассирующие Caliber: 5.56x45 mm Tracer IR-DIM<br />Rounds: 30<br />Used in: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR @@ -267,7 +267,7 @@ 5.56mm 30ks SD Zásobník Carregador de 30 projéteis SD de 5,56mm Caricatore 5.56mm 30Rnd Sil. - Магазин из 30-и 5.56 мм дозвуковых + Магазин из 30-ти 5.56 мм дозвуковых 5.56mm SD @@ -303,7 +303,7 @@ 5.56mm 30ks AP Zásobník Carregador de 30 projéteis AP de 5,56mm Caricatore 5.56mm 30Rnd AP - Магазин из 30-и 5.56 мм бронебойных + Магазин из 30-ти 5.56 мм бронебойных 5.56mm AP @@ -340,7 +340,7 @@ 7.62mm 20ks Svítící Zásobník Carregador de 20 projéteis traçantes de 7,62mm Caricatore 7.62mm 20Rnd Traccianti - Магазин из 20-и 7.62 мм трассирующих + Магазин из 20-ти 7.62 мм трассирующих 7.62mm Tracer @@ -376,7 +376,7 @@ 7.62mm 20ks Svítící IR-DIM Zásobník Carregador de 20 projéteis IR-DIM de 7,62mm Caricatore 7.62mm 20rnd Traccianti IR-DIM - Магазин из 20-и 7.62 мм трассирующих под ПНВ + Магазин из 20-ти 7.62 мм трассирующих под ПНВ 7.62mm IR-DIM @@ -388,7 +388,7 @@ 7.62mm IR-DIM 7,62mm IR-DIM 7.62mm IR-DIM - 7.62 мм трассирущие под ПНВ + 7.62 мм ИК-трассирующие Caliber: 7.62x51 mm Tracer IR-DIM<br />Rounds: 20<br />Used in: Mk18 ABR @@ -412,7 +412,7 @@ 7.62mm 20ks SD Zásobník Carregador de 20 projéteis SD de 7,62mm Caricatore 7.62mm 20Rnd Sil. - Магазин из 20-и 7.62 мм дозвуковых + Магазин из 20-ти 7.62 мм дозвуковых 7.62mm SD @@ -448,7 +448,7 @@ 7.62mm 20ks AP Zásobník Carregador de 20 projéteis AP de 7,62mm Caricatore 7.62mm 20Rnd AP - Магазин из 20-и 7.62 мм бронебойных + Магазин из 20-ти 7.62 мм бронебойных 7.62mm AP @@ -486,5 +486,177 @@ Калибр: 7.62x51mm M118LR<br />Патронов: 20<br />Тип: M14 Calibro: 7.62x51mm M118LR<br />Munizioni:20<br />In uso su: M14 + + + .338 LM 10Rnd Tracer Mag + .338 LM 10-Schuss-Magazin Leuchtspur + + + .338 LM Tracer + .338 LM Leuchtspur + + + Caliber: .338 Lapua Magnum Tracer<br />Rounds: 10<br />Used in: MAR-10 + Kaliber: .338 Lapua Magnum Leuchtspur<br />Schuss: 10<br />Verwendet für: MAR-10 + + + .338 LM 10Rnd IR-DIM Mag + .338 LM 10-Schuss-Magazin Leuchtspur IR-DIM + + + .338 LM IR-DIM + .338 LM IR-DIM + + + Caliber: .338 Lapua Magnum Tracer IR-DIM<br />Rounds: 10<br />Used in: MAR-10 + Kaliber: .338 Lapua Magnum Leuchtspur IR-DIM<br />Schuss: 10<br />Verwendet für: MAR-10 + + + .338 LM 10Rnd AP Mag + .338 LM 10-Schuss-Magazin Hartkern + + + .338 LM AP + .338 LM AP + + + Caliber: .338 Lapua Magnum AP<br />Rounds: 10<br />Used in: MAR-10 + Kaliber: .338 Lapua Magnum Hartkern<br />Schuss: 10<br />Verwendet für: MAR-10 + + + .338 LM 10Rnd SD Mag + .338 LM 10-Schuss-Magazin Unterschall + + + .338 LM SD + .338 LM SD + + + Caliber: .338 Lapua Magnum SD<br />Rounds: 10<br />Used in: MAR-10 + Kaliber: .338 Lapua Magnum Unterschall<br />Schuss: 10<br />Verwendet für: MAR-10 + + + + .338 NM 130Rnd Tracer Belt + .338 NM 130-Schuss-Gurt Leuchtspur + + + .338 NM Tracer + .338 NM Leuchtspur + + + Caliber: .338 Norma Magnum Tracer<br />Rounds: 130<br />Used in: SPMG + Kaliber: .338 Norma Magnum Leuchtspur<br />Schuss: 130<br />Verwendet für: SPMG + + + .338 NM 130Rnd IR-DIM Belt + .338 NM 130-Schuss-Gurt Leuchtspur IR-DIM + + + .338 NM IR-DIM + .338 LM IR-DIM + + + Caliber: .338 Norma Magnum Tracer IR-DIM<br />Rounds: 130<br />Used in: SPMG + Kaliber: .338 Norma Magnum Leuchtspur IR-DIM<br />Schuss: 130<br />Verwendet für: SPMG + + + .338 NM 130Rnd AP Belt + .338 NM 130-Schuss-Gurt Hartkern + + + .338 NM AP + .338 NM AP + + + Caliber: .338 Norma Magnum AP<br />Rounds: 130<br />Used in: SPMG + Kaliber: .338 Norma Magnum Hartkern<br />Schuss: 130<br />Verwendet für: SPMG + + + + 9.3mm 10Rnd Tracer Mag + 9,3mm 10-Schuss-Magazin Leuchtspur + + + 9.3mm Tracer + 9,3mm Leuchtspur + + + Caliber: 9.3x64mm Tracer<br />Rounds: 10<br />Used in: Cyrus + Kaliber: 9,3x64mm Leuchtspur<br />Schuss: 10<br />Verwendet für: Cyrus + + + 9.3mm 10Rnd Tracer IR-DIM Mag + 9,3mm 10-Schuss-Magazin Leuchtspur IR-DIM + + + 9.3mm IR-DIM + 9,3mm IR-DIM + + + Caliber: 9.3x64mm Tracer IR-DIM<br />Rounds: 10<br />Used in: Cyrus + Kaliber: 9,3x64mm Leuchtspur IR-DIM<br />Schuss: 10<br />Verwendet für: Cyrus + + + 9.3mm 10Rnd AP Mag + 9,3mm 10-Schuss-Magazin Hartkern + + + 9.3mm AP + 9,3mm AP + + + Caliber: 9.3x64mm AP<br />Rounds: 10<br />Used in: Cyrus + Kaliber: 9,3x64mm Hartkern<br />Schuss: 10<br />Verwendet für: Cyrus + + + 9.3mm 10Rnd SD Mag + 9,3mm 10-Schuss-Magazin Unterschall + + + 9.3mm SD + 9,3mm SD + + + Caliber: 9.3x64mm SD<br />Rounds: 10<br />Used in: Cyrus + Kaliber: 9,3x64mm Unterschall<br />Schuss: 10<br />Verwendet für: Cyrus + + + + 9.3mm 150Rnd Tracer Belt + 9,3mm 150-Schuss-Gurt Leuchtspur + + + 9.3mm Tracer + 9,3mm Leuchtspur + + + Caliber: 9.3x64mm Tracer<br />Rounds: 150<br />Used in: Navid + Kaliber: 9,3x64mm Leuchtspur<br />Schuss: 150<br />Verwendet für: Navid + + + 9.3mm 150Rnd Tracer IR-DIM Belt + 9,3mm 150-Schuss-Gurt Leuchtspur IR-DIM + + + 9.3mm IR-DIM + 9,3mm IR-DIM + + + Caliber: 9.3x64mm Tracer IR-DIM<br />Rounds: 150<br />Used in: Navid + Kaliber: 9,3x64mm Leuchtspur IR-DIM<br />Schuss: 150<br />Verwendet für: Navid + + + 9.3mm 150Rnd AP Belt + 9,3mm 150-Schuss-Gurt Hartkern + + + 9.3mm AP + 9,3mm AP + + + Caliber: 9.3x64mm AP<br />Rounds: 150<br />Used in: Navid + Kaliber: 9,3x64mm Hartkern<br />Schuss: 150<br />Verwendet für: Navid + diff --git a/addons/maptools/stringtable.xml b/addons/maptools/stringtable.xml index 5dd4578976..bc35651ba9 100644 --- a/addons/maptools/stringtable.xml +++ b/addons/maptools/stringtable.xml @@ -1,5 +1,4 @@  - @@ -8,7 +7,7 @@ Outils de navigation Narzędzia nawigacyjne Kartenwerkzeug - Pomůcky k Mapě + Pomůcky k mapě Strumenti Cartografici Ferramentas de Mapa Térképészeti eszközök @@ -32,7 +31,7 @@ Outils de navigation Narzędzia nawigacyjne Kartenwerkzeug - Pomůcky k Mapě + Pomůcky k mapě Strumenti Cartografici Ferramentas de Mapa Térképészeti eszközök @@ -142,7 +141,7 @@ Kierunek: %1° Dirección: %1° Irány: %1 - Направление:%1 + Направление: %1° - \ No newline at end of file + diff --git a/addons/markers/stringtable.xml b/addons/markers/stringtable.xml index ea6d72990a..65da73a026 100644 --- a/addons/markers/stringtable.xml +++ b/addons/markers/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -9,7 +9,7 @@ Směr: %1° Kierunek: %1° Dirección: %1° - Направление: %1 + Направление: %1° \ No newline at end of file diff --git a/addons/medical/XEH_preInit.sqf b/addons/medical/XEH_preInit.sqf index c18a116e31..8e1fd5856f 100644 --- a/addons/medical/XEH_preInit.sqf +++ b/addons/medical/XEH_preInit.sqf @@ -102,4 +102,7 @@ GVAR(IVBags) = []; call FUNC(parseConfigForInjuries); +GVAR(HITPOINTS) = ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"]; +GVAR(SELECTIONS) = ["head", "body", "hand_l", "hand_r", "leg_l", "leg_r"]; + ADDON = true; diff --git a/addons/medical/functions/fnc_handleDamage.sqf b/addons/medical/functions/fnc_handleDamage.sqf index 074f8c41fa..1632a8f55b 100644 --- a/addons/medical/functions/fnc_handleDamage.sqf +++ b/addons/medical/functions/fnc_handleDamage.sqf @@ -17,7 +17,7 @@ #include "script_component.hpp" -private ["_unit", "_selection", "_damage", "_shooter", "_projectile", "_damageReturn", "_hitPoints", "_typeOfDamage"]; +private ["_unit", "_selection", "_damage", "_shooter", "_projectile", "_damageReturn", "_typeOfDamage"]; _unit = _this select 0; _selection = _this select 1; _damage = _this select 2; @@ -32,8 +32,7 @@ if (typeName _projectile == "OBJECT") then { }; // If the damage is being weird, we just tell it to fuck off. -_hitSelections = ["head", "body", "hand_l", "hand_r", "leg_l", "leg_r"]; -if !(_selection in (_hitSelections + [""])) exitWith {0}; +if !(_selection in (GVAR(SELECTIONS) + [""])) exitWith {0}; _damageReturn = _damage; if (GVAR(level) < 2) then { @@ -46,8 +45,7 @@ if (GVAR(level) >= 2) then { // lets use basic for the time being.. _damageReturn = _this call FUNC(handleDamage_basic); }; - - [_unit, _selection, _damage, _source, _projectile] call FUNC(handleDamage_caching); + _newDamage = _this call FUNC(handleDamage_caching); if (_damageReturn > 0.9) then { @@ -59,12 +57,6 @@ if (GVAR(level) >= 2) then { _minLethalDamage = GVAR(minLethalDamages) select _typeIndex; }; - _hitPoints = ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"]; - _newDamage = _damage - (damage _unit); - if (_selection in _hitSelections) then { - _newDamage = _damage - (_unit getHitPointDamage (_hitPoints select (_hitSelections find _selection))); - }; - if ((_minLethalDamage <= _newDamage) && {[_unit, [_selection] call FUNC(selectionNameToNumber), _newDamage] call FUNC(determineIfFatal)} && {_selection in ["", "head", "body"]}) then { if ([_unit] call FUNC(setDead)) then { _damageReturn = 1; diff --git a/addons/medical/functions/fnc_handleDamage_advanced.sqf b/addons/medical/functions/fnc_handleDamage_advanced.sqf index 751896be44..ba0eb8af24 100644 --- a/addons/medical/functions/fnc_handleDamage_advanced.sqf +++ b/addons/medical/functions/fnc_handleDamage_advanced.sqf @@ -25,21 +25,21 @@ _selectionName = _this select 1; _amountOfDamage = _this select 2; _sourceOfDamage = _this select 3; _typeOfProjectile = _this select 4; +_newDamage = _this select 5; // Most likely taking exessive fire damage. Lets exit. -if (isNull _sourceOfDamage && (_selectionName == "head" || isBurning _unit) && _typeOfProjectile == "" && vehicle _unit == _unit) exitwith { +if (isNull _sourceOfDamage && {_typeOfProjectile == ""} && {vehicle _unit == _unit} && {(_selectionName == "head" || isBurning _unit)}) exitwith { 0 }; - _typeOfDamage = [_typeOfProjectile] call FUNC(getTypeOfDamage); _part = [_selectionName] call FUNC(selectionNameToNumber); _hitPoints = ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"]; // Sorting out the damage _damageBodyParts = _unit getvariable [QGVAR(bodyPartStatus), [0,0,0,0,0,0]]; -_newDamage = _amountOfDamage - (_unit getHitPointDamage (_hitPoints select _part)); _damageBodyParts set [_part, (_damageBodyParts select _part) + _newDamage]; _unit setvariable [QGVAR(bodyPartStatus), _damageBodyParts, true]; + [_unit] call FUNC(handleDamage_advancedSetDamage); [_unit, _selectionName, _newDamage, _typeOfProjectile, _typeOfDamage] call FUNC(handleDamage_wounds); diff --git a/addons/medical/functions/fnc_handleDamage_advancedSetDamage.sqf b/addons/medical/functions/fnc_handleDamage_advancedSetDamage.sqf index 74db6029d2..f464ef5a94 100644 --- a/addons/medical/functions/fnc_handleDamage_advancedSetDamage.sqf +++ b/addons/medical/functions/fnc_handleDamage_advancedSetDamage.sqf @@ -16,9 +16,7 @@ private ["_unit", "_bodyStatus", "_headDamage", "_torsoDamage", "_handsDamage", "_legsDamage"]; _unit = _this select 0; -if (!local _unit) exitwith { - // execute only local -}; +if (!local _unit) exitwith {}; _bodyStatus = _unit getvariable [QGVAR(bodyPartStatus),[0,0,0,0,0,0]]; // ["head", "body", "hand_l", "hand_r", "leg_l", "leg_r"] diff --git a/addons/medical/functions/fnc_handleDamage_basic.sqf b/addons/medical/functions/fnc_handleDamage_basic.sqf index 2986e1b2f7..aa9c2f61df 100644 --- a/addons/medical/functions/fnc_handleDamage_basic.sqf +++ b/addons/medical/functions/fnc_handleDamage_basic.sqf @@ -42,15 +42,25 @@ if (diag_frameno > (_unit getVariable [QGVAR(frameNo), -3]) + 2) then { _unit setVariable [QGVAR(damages), []]; _unit setVariable [QGVAR(structDamage), 0]; _unit setVariable [QGVAR(preventDeath), false]; + // Assign orphan structural damage to torso + [{ + private ["_unit", "_damagesum"]; + _unit = _this select 0; + _damagesum = (_unit getHitPointDamage "HitHead") + + (_unit getHitPointDamage "HitBody") + + (_unit getHitPointDamage "HitLeftArm") + + (_unit getHitPointDamage "HitRightArm") + + (_unit getHitPointDamage "HitLeftLeg") + + (_unit getHitPointDamage "HitRightLeg"); + if (_damagesum < 0.06 and damage _unit > 0.06 and alive _unit) then { + _unit setHitPointDamage ["HitBody", damage _unit]; + }; + }, [_unit], 2, 0.1] call EFUNC(common,waitAndExecute); }; - -_hitSelections = ["head", "body", "hand_l", "hand_r", "leg_l", "leg_r"]; -_hitPoints = ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"]; - _newDamage = _damage - (damage _unit); -if (_selectionName in _hitSelections) then { - _newDamage = _damage - (_unit getHitPointDamage (_hitPoints select (_hitSelections find _selectionName))); +if (_selectionName in GVAR(SELECTIONS)) then { + _newDamage = _damage - (_unit getHitPointDamage (GVAR(HITPOINTS) select (GVAR(SELECTIONS) find _selectionName))); }; _damage = _damage - _newDamage; @@ -61,7 +71,7 @@ if (((velocity _unit) select 2 < -5) and (vehicle _unit == _unit)) then { _unit setVariable [QGVAR(isFalling), true]; }; if (_unit getVariable [QGVAR(isFalling), false] and !(_selectionName in ["", "leg_l", "leg_r"])) exitWith { - (_unit getHitPointDamage (_hitPoints select (_hitSelections find _selectionName))) max 0.01; + (_unit getHitPointDamage (GVAR(HITPOINTS) select (GVAR(SELECTIONS) find _selectionName))) max 0.01; }; if (_unit getVariable [QGVAR(isFalling), false]) then { _newDamage = _newDamage * 0.7; @@ -85,12 +95,12 @@ if (_selectionName != "" and !(_unit getVariable QGVAR(isFalling))) then { // Make entry unfindable _cache_projectiles set [_index, objNull]; _cache_projectiles pushBack _projectile; - _cache_hitpoints pushBack (_hitPoints select (_hitSelections find _selectionName)); + _cache_hitpoints pushBack (GVAR(HITPOINTS) select (GVAR(SELECTIONS) find _selectionName)); _cache_damages pushBack _newDamage; }; } else { _cache_projectiles pushBack _projectile; - _cache_hitpoints pushBack (_hitPoints select (_hitSelections find _selectionName)); + _cache_hitpoints pushBack (GVAR(HITPOINTS) select (GVAR(SELECTIONS) find _selectionName)); _cache_damages pushBack _newDamage; }; _unit setVariable [QGVAR(projectiles), _cache_projectiles]; @@ -109,30 +119,12 @@ if (_selectionName == "") then { }; }; - -// Assign orphan structural damage to torso -[{ - private ["_unit", "_damagesum"]; - _unit = _this select 0; - _damagesum = (_unit getHitPointDamage "HitHead") + - (_unit getHitPointDamage "HitBody") + - (_unit getHitPointDamage "HitLeftArm") + - (_unit getHitPointDamage "HitRightArm") + - (_unit getHitPointDamage "HitLeftLeg") + - (_unit getHitPointDamage "HitRightLeg"); - if (_damagesum < 0.06 and damage _unit > 0.06 and alive _unit) then { - _unit setHitPointDamage ["HitBody", damage _unit]; - }; -}, [_unit], 2, 0.1] call EFUNC(common,waitAndExecute); - - if (_selectionName == "") then { _damage = _damage + (_unit getVariable QGVAR(structDamage)); } else { _damage = _damage + _newDamage; }; - // Leg Damage _legdamage = (_unit getHitPointDamage "HitLeftLeg") + (_unit getHitPointDamage "HitRightLeg"); if (_selectionName == "leg_l") then { @@ -143,9 +135,9 @@ if (_selectionName == "leg_r") then { }; if (_legdamage >= LEGDAMAGETRESHOLD1) then { - if (_unit getHitPointDamage "HitLegs" != 1) then {_unit setHitPointDamage ["HitLegs", 1]}; + _unit setHitPointDamage ["HitLegs", 1]; } else { - if (_unit getHitPointDamage "HitLegs" != 0) then {_unit setHitPointDamage ["HitLegs", 0]}; + _unit setHitPointDamage ["HitLegs", 0]; }; // @todo: force prone for completely fucked up legs. @@ -160,9 +152,9 @@ if (_selectionName == "hand_r") then { }; if (_armdamage >= ARMDAMAGETRESHOLD1) then { - if (_unit getHitPointDamage "HitHands" != 1) then {_unit setHitPointDamage ["HitHands", 1]}; + _unit setHitPointDamage ["HitHands", 1]; } else { - if (_unit getHitPointDamage "HitHands" != 0) then {_unit setHitPointDamage ["HitHands", 0]}; + _unit setHitPointDamage ["HitHands", 0]; }; // @todo: Drop weapon for full damage. @@ -174,7 +166,6 @@ if (_selectionName == "") then { _unit setVariable [QGVAR(pain), _pain min 1, true]; }; - // Unconsciousness if (_selectionName == "" and _damage >= UNCONSCIOUSNESSTRESHOLD and diff --git a/addons/medical/functions/fnc_handleDamage_caching.sqf b/addons/medical/functions/fnc_handleDamage_caching.sqf index ddd0b6c920..98b2373c74 100644 --- a/addons/medical/functions/fnc_handleDamage_caching.sqf +++ b/addons/medical/functions/fnc_handleDamage_caching.sqf @@ -25,8 +25,8 @@ _damage = _this select 2; _source = _this select 3; _projectile = _this select 4; -_hitSelections = ["head", "body", "hand_l", "hand_r", "leg_l", "leg_r"]; -_hitPoints = ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"]; +_hitSelections = GVAR(SELECTIONS); +_hitPoints = GVAR(HITPOINTS); // Calculate change in damage. _newDamage = _damage - (damage _unit); @@ -34,18 +34,10 @@ if (_selectionName in _hitSelections) then { _newDamage = _damage - (_unit getHitPointDamage (_hitPoints select (_hitSelections find _selectionName))); }; - -// we want to move damage to another selection; have to do it ourselves. -// this is only the case for limbs, so this will not impact the killed EH. -if (_selectionName != (_this select 1)) then { - _unit setHitPointDamage [_hitPoints select (_hitSelections find _selectionName), _damage + _newDamage]; - _newDamage = 0; -}; -// ?????? -_damage = _damage + _newDamage; +//_damage = _damage + _newDamage; // Check for vehicle crash -if (vehicle _unit != _unit && !(vehicle _unit isKindOf "StaticWeapon") && {isNull _source} && {_projectile == ""} && {_selectionName == ""}) then { +if (vehicle _unit != _unit && {!(vehicle _unit isKindOf "StaticWeapon")} && {isNull _source} && {_projectile == ""} && {_selectionName == ""}) then { if (missionNamespace getvariable [QGVAR(allowVehicleCrashDamage), true]) then { _selectionName = _hitSelections select (floor(random(count _hitSelections))); _projectile = "vehiclecrash"; @@ -54,10 +46,11 @@ if (vehicle _unit != _unit && !(vehicle _unit isKindOf "StaticWeapon") && {isNul // From AGM medical: // Exclude falling damage to everything other than legs; reduce structural damage. -if (((velocity _unit) select 2 < -5) && (vehicle _unit == _unit)) then { +if (((velocity _unit) select 2 < -5) && {(vehicle _unit == _unit)}) then { _unit setVariable [QGVAR(isFalling), True]; }; -if (_unit getVariable [QGVAR(isFalling), false] && !(_selectionName in ["", "leg_l", "leg_r"])) exitWith {}; + +if (_unit getVariable [QGVAR(isFalling), false] && {!(_selectionName in ["", "leg_l", "leg_r"])}) exitWith {}; if (_unit getVariable [QGVAR(isFalling), false]) then { _newDamage = _newDamage * 0.7; }; @@ -69,21 +62,16 @@ if (diag_frameno > (_unit getVariable [QGVAR(frameNo_damageCaching), -3]) + 2) t // handle the cached damages 3 frames later [{ - private ["_args","_unit","_frameNo"]; + private ["_args", "_params"]; _args = _this select 0; - _unit = _args select 0; - _frameNo = _args select 1; - if (diag_frameno > _frameNo + 2) then { - _cache_projectiles = _unit getVariable [QGVAR(cachedProjectiles), []]; - _cache_hitpoints = _unit getVariable [QGVAR(cachedHitPoints), []]; - _cache_damages = _unit getVariable [QGVAR(cachedDamages), []]; - _cache_params = _unit getVariable [QGVAR(cachedHandleDamageParams), []]; + if (diag_frameno > (_args select 1) + 2) then { + _cache_params = (_args select 0) getVariable [QGVAR(cachedHandleDamageParams), []]; + _cache_damages = (_args select 0) getVariable QGVAR(cachedDamages); { - if (typeName _x == typeName "") then { - (_cache_params select _foreachIndex) call FUNC(handleDamage_advanced); - }; - }foreach _cache_projectiles; + _params = _x + [_cache_damages select _foreachIndex]; + _params call FUNC(handleDamage_advanced); + }foreach _cache_params; [(_this select 1)] call cba_fnc_removePerFrameHandler; }; }, 0, [_unit, diag_frameno] ] call CBA_fnc_addPerFrameHandler; @@ -94,52 +82,54 @@ if (diag_frameno > (_unit getVariable [QGVAR(frameNo_damageCaching), -3]) + 2) t _unit setVariable [QGVAR(cachedHandleDamageParams), []]; }; -// Make sure there's only one damaged selection per projectile per frame. -_cache_projectiles = _unit getVariable QGVAR(cachedProjectiles); -_cache_hitpoints = _unit getVariable QGVAR(cachedHitPoints); -_cache_damages = _unit getVariable QGVAR(cachedDamages); -_cache_params = _unit getVariable QGVAR(cachedHandleDamageParams); - // Caching of the damage events if (_selectionName != "") then { - + _cache_projectiles = _unit getVariable QGVAR(cachedProjectiles); + private ["_index","_otherDamage"]; + _index = _cache_projectiles find _projectile; // Check if the current projectile has already been handled once - if (_projectile in _cache_projectiles) then { - private ["_index","_otherDamage"]; - // if it has been handled, find the index in the cache - _index = _cache_projectiles find _projectile; - + if (_index >= 0) exitwith { + _cache_damages = _unit getVariable QGVAR(cachedDamages); // Find the previous damage this projectile has done _otherDamage = (_cache_damages select _index); // Take the highest damage of the two - if (_otherDamage > _newDamage) then { - _newDamage = 0; - } else { + if (_newDamage > _otherDamage) then { + _cache_params = _unit getVariable QGVAR(cachedHandleDamageParams); + _cache_hitpoints = _unit getVariable QGVAR(cachedHitPoints); + private ["_hitPoint", "_restore"]; // Restore the damage before the previous damage was processed _hitPoint = _cache_hitpoints select _index; _restore = ((_unit getHitPointDamage _hitPoint) - _otherDamage) max 0; _unit setHitPointDamage [_hitPoint, _restore]; - // Make entry unfindable and add the new damage cache - _cache_projectiles set [_index, objNull]; - _cache_projectiles pushBack _projectile; - _cache_hitpoints pushBack (_hitPoints select (_hitSelections find _selectionName)); - _cache_damages pushBack _newDamage; - _cache_params pushBack [_unit, _selectionName, _damage, _source, _projectile]; + _cache_hitpoints set [_index, (_hitPoints select (_hitSelections find _selectionName))]; + _cache_damages set [_index, _newDamage]; + _cache_params set[_index, _this]; + + _unit setVariable [QGVAR(cachedProjectiles), _cache_projectiles]; + _unit setVariable [QGVAR(cachedHitPoints), _cache_hitpoints]; + _unit setVariable [QGVAR(cachedDamages), _cache_damages]; + _unit setVariable [QGVAR(cachedHandleDamageParams), _cache_params]; }; - } else { - // This is an unhandled projectile - _cache_projectiles pushBack _projectile; - _cache_hitpoints pushBack (_hitPoints select (_hitSelections find _selectionName)); - _cache_damages pushBack _newDamage; - _cache_params pushBack [_unit, _selectionName, _damage, _source, _projectile]; }; + + _cache_hitpoints = _unit getVariable QGVAR(cachedHitPoints); + _cache_damages = _unit getVariable QGVAR(cachedDamages); + _cache_params = _unit getVariable QGVAR(cachedHandleDamageParams); + + // This is an unhandled projectile + _cache_projectiles pushBack _projectile; + _cache_hitpoints pushBack (_hitPoints select (_hitSelections find _selectionName)); + _cache_damages pushBack _newDamage; + _cache_params pushBack _this; + + // Store the new cached values + _unit setVariable [QGVAR(cachedProjectiles), _cache_projectiles]; + _unit setVariable [QGVAR(cachedHitPoints), _cache_hitpoints]; + _unit setVariable [QGVAR(cachedDamages), _cache_damages]; + _unit setVariable [QGVAR(cachedHandleDamageParams), _cache_params]; }; -// Store the new cached values -_unit setVariable [QGVAR(cachedProjectiles), _cache_projectiles]; -_unit setVariable [QGVAR(cachedHitPoints), _cache_hitpoints]; -_unit setVariable [QGVAR(cachedDamages), _cache_damages]; -_unit setVariable [QGVAR(cachedHandleDamageParams), _cache_params]; +_newDamage; diff --git a/addons/medical/functions/fnc_handleDamage_wounds.sqf b/addons/medical/functions/fnc_handleDamage_wounds.sqf index 1eebe038cd..5933651e57 100644 --- a/addons/medical/functions/fnc_handleDamage_wounds.sqf +++ b/addons/medical/functions/fnc_handleDamage_wounds.sqf @@ -52,10 +52,10 @@ _allPossibleInjuries = []; // 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; + //_classType = _x select 0; _selections = _x select 1; - _bloodLoss = _x select 2; - _pain = _x select 3; + //_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 { @@ -73,9 +73,7 @@ _allPossibleInjuries = []; }foreach _allInjuriesForDamageType; // No possible wounds available for this damage type or damage amount. -if (_highestPossibleSpot < 0) exitwith { - -}; +if (_highestPossibleSpot < 0) exitwith {}; // Administration for open wounds and ids _openWounds = _unit getvariable[QGVAR(openWounds), []]; @@ -125,7 +123,7 @@ _woundsCreated = []; _painToAdd = _painToAdd + (_toAddInjury select 3); }; }; -}foreach (_injuryTypeInfo select 0); +}foreach (_injuryTypeInfo select 0); // foreach damage thresholds _unit setvariable [QGVAR(openWounds), _openWounds, !USE_WOUND_EVENT_SYNC]; diff --git a/addons/medical/functions/fnc_setUnconscious.sqf b/addons/medical/functions/fnc_setUnconscious.sqf index e373901610..89ab5ee3b3 100644 --- a/addons/medical/functions/fnc_setUnconscious.sqf +++ b/addons/medical/functions/fnc_setUnconscious.sqf @@ -52,7 +52,7 @@ if (animationState _unit in ["ladderriflestatic","laddercivilstatic"]) then { }; if (vehicle _unit == _unit) then { if (primaryWeapon _unit == "") then { - _unit addWeapon "ACE_fakeWeapon"; + _unit addWeapon "ACE_FakePrimaryWeapon"; }; _unit selectWeapon (primaryWeapon _unit); _unit switchMove ""; @@ -67,7 +67,8 @@ _unit setUnitPos "DOWN"; [_unit, true] call EFUNC(common,disableAI); // So the AI does not get stuck, we are moving the unit to a temp group on its own. -[_unit, true, "ACE_isUnconscious", side group _unit] call EFUNC(common,switchToGroupSide); +//Unconscious units shouldn't be put in another group #527: +// [_unit, true, "ACE_isUnconscious", side group _unit] call EFUNC(common,switchToGroupSide); [_unit, QGVAR(unconscious), true] call EFUNC(common,setCaptivityStatus); [_unit, [_unit] call EFUNC(common,getDeathAnim), 1, true] call EFUNC(common,doAnimation); @@ -114,7 +115,8 @@ _startingTime = time; [_unit, QGVAR(unconscious), false] call EFUNC(common,setCaptivityStatus); // Swhich the unit back to its original group - [_unit, false, "ACE_isUnconscious", side group _unit] call EFUNC(common,switchToGroupSide); + //Unconscious units shouldn't be put in another group #527: + // [_unit, false, "ACE_isUnconscious", side group _unit] call EFUNC(common,switchToGroupSide); [_unit, false] call EFUNC(common,disableAI); _unit setUnitPos _originalPos; // This is not position but stance (DOWN, MIDDLE, UP) diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 7036e6863d..98fdab8a8b 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -1,20 +1,23 @@  - Inject Atropine - Atropin - Inyectar atropina + Atropin injizieren + Inyectar Atropina + Ввести атропин + Aplikovat atropin + Wstrzyknij atropinę + Injecter de l'atropine Inject Epinephrine Epinephrine injizieren Inyectar Epinefrina - Wtrzyknij adrenalinę - Aplikovat Adrenalin + Wstrzyknij adrenalinę + Aplikovat adrenalin Ввести андреналил - Adrénaline + Injecter de l'épinéphrine Adrenalin Injetar Epinefrina Inietta Epinefrina @@ -24,7 +27,7 @@ Morphin injizieren Inyectar Morfina Wstrzyknij morfinę - Aplikovat Morfin + Aplikovat morfin Ввести морфин Morphine Morfium @@ -47,16 +50,28 @@ Transfuse Plasma Plasmatransfusion Transfundir plasma + Перелить плазму + Transfúze plazmy + Przetocz osocze + Transfuser du Plasma Transfuse Saline Salzlösungtransfusion - Transfundir salina + Transfundir salino + Влить физраствор + Transfúze fyziologický roztoku + Przetocz solankę + Transfuser de la Saline Apply Tourniquet Aderpresse anwenden Aplicar torniquete + Наложить жгут + Aplikovat škrtidlo + Załóż stazę + Appliquer un garrot Bandage @@ -147,7 +162,7 @@ Morphin injizieren ... Inyectando Morfina ... Wstrzykiwanie morfiny ... - Aplikuju Morfin ... + Aplikuji morfin ... Введение морфина... Injection de Morphine... Morfium beadása... @@ -159,8 +174,8 @@ Epinephrin injizieren ... Inyectando Epinefrina ... Wstrzykiwanie adrenaliny ... - Aplikuju Adrenalin ... - Введение андреналина + Aplikuji adrenalin ... + Введение андреналина ... Injection d'Adrénaline ... Adrenalin beadása... Injetando Epinefrina ... @@ -169,11 +184,16 @@ Injecting Atropine ... Atropin injizieren ... + Inyectando Atropina ... + Введение атропина ... + Aplikuji atropin ... + Wstrzykiwanie atropiny ... + Injection d'Atropine ... Transfusing Blood ... Bluttransfusion ... - Realizando transfusión ... + Transfusión de sangre ... Przetaczanie krwi ... Probíhá transfúze krve ... Переливание крови... @@ -185,12 +205,20 @@ Transfusing Saline ... Sallösungtransfusion ... - Transfusión de salina ... + Transfusión de salino ... + Вливание физраствора ... + Probíha transfúze fyziologický roztoku ... + Przetaczanie solanki ... + Transfusion de saline ... Transfusing Plasma ... Plasmatransfusion ... Transfusión de plasma ... + Переливание плзмы ... + Probíha transfúze plazmy ... + Przetaczanie osocza ... + Transfusion de Plasma ... Bandaging ... @@ -206,8 +234,12 @@ Applying Tourniquet ... - Aderpresse ... + Setze Aderpresse an ... Aplicando torniquete ... + Наложение жгута ... + Aplikuji škrtidlo + Zakładanie stazy ... + Mise en place du garrot Medical @@ -222,111 +254,203 @@ Field Dressing + Verbandpäckchen Compresa de campaña + Бинтовая повязка + Obinadlo + Bandaż jałowy + Bandage rapide Packing Bandage + Mullbinde Vendaje compresivo + Компресионный пакет + Bandaż uciskowy Elastic Bandage + Elastischer Verband Vendaje elástico + Давящая повязка + Elastické obinadlo + Bandaż elastyczny + Bandage Élastique QuikClot + QuikClot QuikClot + QuickClot + Opatrunek QuikClot Check Pulse Puls überprüfen Comprobar pulso + Проверить пульс + Zkontrolovat pulz + Sprawdź tętno + Vérifier les pulsations Check Blood Pressure - Blutdruck messen + Blutdruck überprüfen Comprobar presión arterial + Проверить кровяное давление + Zkontrolovat krevní tlak + Sprawdź ciśnienie krwi + Vérifier la pression sanguine Triage Card - Triage Karte + Verletztenanhängekarte Tarjeta de triaje + Медкарта + Karta segregacyjna Tourniquet - Tourniquet + Aderpresse Torniquete + Жгут + Škrtidlo + Staza + Garrot Remove Tourniquet - Entferne Tourniquet + Aderpresse entfernen Quitar torniquete + Снять жгут + Sundat škrtidlo + Zdejmij stazę + Enlever le garrot Give Blood IV (1000ml) + Bluttransfusion IV (1000ml) Dar Sangre IV (1000ml) + Дать кровь для в/в вливания (1000 мл) + Podaj krew IV (1000ml) + Mettre une poche de Sang IV (1000ml) Give Blood IV (500ml) + Bluttransfusion IV (500ml) Dar Sangre IV (500ml) + Дать кровь для в/в вливания (500 мл) + Podaj krew IV (500ml) + Mettre une poche de Sang IV (500ml) Give Blood IV (250ml) + Bluttransfusion IV (250ml) Dar Sangre IV (250ml) + Дать кровь для в/в вливания (250 мл) + Podaj krew IV (250ml) + Mettre une poche de Sang IV (250ml) Give Plasma IV (1000ml) + Plasmatransfusion IV (1000ml) Dar Plasma IV (1000ml) + Дать плазму для в/в вливания (1000 мл) + Podaj osocze IV (1000ml) + Mettre une poche de Plasma IV (1000ml) Give Plasma IV (500ml) + Plasmatransfusion IV (500ml) Dar Plasma IV (500ml) + Дать плазму для в/в вливания (500 мл) + Podaj osocze IV (500ml) + Mettre une poche de Plasma IV (500ml) Give Plasma IV (250ml) + Plasmatransfusion IV (250ml) Dar Plasma IV (250ml) + Дать плазму для в/в вливания (250 мл) + Podaj osocze IV (250ml) + Mettre une poche de Plasma IV (250ml) Give Saline IV (1000ml) + Kochsaltzlösung IV (1000ml) Dar Salino IV (1000ml) + Дать физраствор для в/в вливания (1000 мл) + Podaj solankę IV (1000ml) + Mettre une poche de Saline IV (1000ml) Give Saline IV (500ml) + Kochsaltzlösung IV (500ml) Dar Salino IV (500ml) + Дать физраствор для в/в вливания (500 мл) + Podaj solankę IV (500ml) + Mettre une poche de Saline IV (500ml) Give Saline IV (250ml) + Kochsaltzlösung IV (250ml) Dar Salino IV (250ml) + Дать физраствор для в/в вливания (250 мл) + Podaj solankę IV (250ml) + Mettre une poche de Saline IV (250ml) Minor Gering Menor + Незначительные травмы + Normalny + Mineur Delayed Retrasado + Груз 300 + Opóźniony + Délayé + Verzögert Immediate Inmediato + Помощь отложена + Natychmiastowy + Immédiat + Sofort Deceased Fallecido + Груз 200 + Nie żyje + Décédé + Verstorben None Ninguno + Нет + Brak + Aucun + Keine Normal breathing + Normales Atmen Дыхание в норме Respiración normal Respiration Normale Normalny oddech + Normale Atmung No breathing + Keine Atmung Дыхания нет No respira Apnée @@ -334,13 +458,16 @@ Difficult breathing + Schweres Atmen Дыхание затруднено Dificultad para respirar Difficultée Respiratoire Trudności z oddychaniem + Schwere Atmung Almost no breathing + Fast keine Atmung Дыхания почти нет Casi sin respiración Respiration Faible @@ -348,6 +475,7 @@ Bleeding + Blutet Кровотечение Sangrando Seignement @@ -355,32 +483,39 @@ In Pain + Hat Schmerzen Испытывает боль - Con Dolor + Con dolor A De La Douleur W bólu Lost a lot of Blood + Hat eine große Menge Blut verloren Большая кровопотеря - Mucha Sangre perdida + Mucha sangre perdida A Perdu Bcp de Sang Stracił dużo krwi Tourniquet [CAT] + Aderpresse [CAT] Жгут Torniquete [CAT] Garot [CAT] - Opaska uciskowa [CAT] + Staza [typ. CAT] Receiving IV [%1ml] + Erhalte IV [%1ml] Reciviendo IV [%1ml] + Принимается переливание [%1 мл] + Otrzymywanie IV [%1ml] + Réception IV [%1ml] - Bandage (Basic) + Bandage (Standard) Повязка (обычная) Vendaje (Básico) Bandage (Standard) @@ -392,52 +527,42 @@ Utilizado para cubrir una herida Utilisé Pour Couvrir Une Blessure Używany w celu przykrycia i ochrony miejsca zranienia + Verwendet, um Wunden abzudecken - A dressing, that is a particular material used to cover a wound, which is applied over the wound - once bleeding has been stemmed. - + A dressing, that is a particular material used to cover a wound, which is applied over the wound once bleeding has been stemmed. + Ein Verband, der aus einem besonderen Material besteht um die Wunde zu schützen, nachdem die Blutung gestoppt wurde. Повязка, накладываемая поверх раны после остановки кровотечения. - Un apósito, material específico utilizado para cubrir una herida, se aplica sobre la herida una vez - ha dejado de sangrar. - - C'est un bandage, qui est fait d'un matériel spécial utiliser pour couvrir une blessure, qui peut - etre appliquer des que le seignement as ete stopper. - - Opatrunek materiałowy, używany do przykrywania ran, zakładany na ranę po zatamowaniu krwawienia. - + Un apósito, material específico utilizado para cubrir una herida, se aplica sobre la herida una vez ha dejado de sangrar. + C'est un bandage, qui est fait d'un matériel spécial utiliser pour couvrir une blessure, qui peut etre appliquer des que le seignement as ete stopper. + Opatrunek materiałowy, używany do przykrywania ran, zakładany na ranę po zatamowaniu krwawienia. Packing Bandage + Mullbinde Тампонирующая повязка - Vendaje Compresivo + Vendaje compresivo Bandage Mèche Bandaż (uciskowy) Used to pack medium to large wounds and stem the bleeding + Verwendet, um mittlere bis große Wunden abzudecken und Blutungen zu stoppen Для тампонирования ран среднего и большого размера и остановки кровотечения. - Se utiliza para vendar heridas medianas y grandes y detener el sangrado + Se utiliza para vendar heridas medianas o grandes y detener el sangrado Utiliser pour remplire la cavité créé dans une blessure moyenne et grande. Używany w celu opatrywania średnich i dużych ran oraz tamowania krwawienia. - A bandage used to pack the wound to stem bleeding and facilitate wound healing. Packing a wound is - an option in large polytrauma injuries. - - Повязка для тампонирования раны, остановки кровотечения и лучшего заживления. При тяжелых - сочетанных ранениях возможно тампонирование раны. - - Se utiliza para detener la hemorragia de una herida y favorecer su cicatrización. Se usa en grandes - lesiones o politraumatismos. - - Un bandage servent a etre inseré dans les blessure pour éponger le seignement et faciliter la - guerrison. Ce bandage est une option pour soigner les lession de politrauma. - + A bandage used to pack the wound to stem bleeding and facilitate wound healing. Packing a wound is an option in large polytrauma injuries. + Повязка для тампонирования раны, остановки кровотечения и лучшего заживления. При тяжелых сочетанных ранениях возможно тампонирование раны. + Se utiliza para detener la hemorragia de una herida y favorecer su cicatrización. Se usa en grandes lesiones o politraumatismos. + Un bandage servent a etre inseré dans les blessure pour éponger le seignement et faciliter la guerrison. Ce bandage est une option pour soigner les lession de politrauma. Opatrunek stosowany w celu zatrzymania krwawienia i osłony większych ran. Bandage (Elastic) + Bandage (Elastisch) Повязка (давящая) Vendaje (Elástico) Bandage (Élastique) @@ -445,22 +570,23 @@ Bandage kit, Elastic + Elastische Binde (Kompressionsbinde) Давящая повязка - Vendaje (Elástico) + Kit de vendaje (Elástico) Bandage Compressif Élastique Zestaw bandaży elastycznych. - + Allows an even compression and extra support to the injured area. + - Ce bandage peut etre utiliser pour compresser la plaie afin de ralentire le seignement et assurer la - tenue du bandage lors de mouvment. - + Ce bandage peut etre utiliser pour compresser la plaie afin de ralentire le seignement et assurer la tenue du bandage lors de mouvment. Elastyczna opaska podtrzymująca opatrunek oraz usztywniająca okolice stawów. Brinda una compresión uniforme y ofrece soporte extra a una zona lesionada Tourniquet (CAT) + Aderpresse (CAT) Жгут Torniquete (CAT) Garot (CAT) @@ -468,52 +594,52 @@ Slows down blood loss when bleeding + Veringert den Blutverlust Уменьшает кровопотерю при кровотечении. Reduce la velocidad de pérdida de sangre Ralentit le seignement Zmniejsza ubytek krwi z kończyn w przypadku krwawienia. + Verringert den Blutverlust während einer Blutung - A constricting device used to compress venous and arterial circulation in effect inhibiting or - slowing blood flow and therefore decreasing loss of blood. - - Жгут используется для прижатия сосудов, приводящего к остановке или значительному уменьшению - кровотечения и сокращению кровопотери. - - Dispositivo utilizado para eliminar el pulso distal y de ese modo controlar la pérdida de sangre - + A constricting device used to compress venous and arterial circulation in effect inhibiting or slowing blood flow and therefore decreasing loss of blood. + Жгут используется для прижатия сосудов, приводящего к остановке или значительному уменьшению кровотечения и сокращению кровопотери. + Dispositivo utilizado para eliminar el pulso distal y de ese modo controlar la pérdida de sangre Un appareil servent a compresser les artères et veines afin de reduire la perte de sang. - Opaska zaciskowa CAT służy do tamowanie krwotoków w sytuacji zranienia kończyn z masywnym - krwawieniem tętniczym lub żylnym. - + Opaska uciskowa CAT służy do tamowanie krwotoków w sytuacji zranienia kończyn z masywnym krwawieniem tętniczym lub żylnym. + Ein Gerät, das Druck auf Venen und Arterien ausübt und so den Blutfluss verringert. Morphine autoinjector - Морфин в автоматическом шприце + Morphium Autoinjektor + Морфин в пневмошприце Morfina auto-inyectable Auto-injecteur de Morphine Autostrzykawka z morfiną Used to combat moderate to severe pain experiences + Wird verwendet um moderate bis starke Schmärzen zu lindern. Для снятия средних и сильных болевых ощущений. - Usado para combatir los estados dolorosos moderados a severos + Usado para combatir los estados dolorosos de moderados a severos Utiliser pour contrer les douleurs modéré à severes. Morfina. Ma silne działanie przeciwbólowe. An analgesic used to combat moderate to severe pain experiences. Анальгетик для снятия средних и сильных болевых ощущений. - Analgésico usado para combatir los estados dolorosos de moderado a severo. + Analgésico usado para combatir los estados dolorosos de moderados a severos. Un Analgésique puissant servant a contrer les douleur modéré a severe. Organiczny związek chemiczny z grupy alkaloidów. Ma silne działanie przeciwbólowe. + Ein Schmerzmittel um mäßige bis starke Schmerzen zu behandeln Atropin autoinjector - Атропин в автоматическом шприце + Атропин в пневмошприце Atropina auto-inyectable Auto-injecteur d'Atropine Autostrzykawka AtroPen + Atropin Autoinjektor Used in NBC scenarios @@ -521,22 +647,23 @@ Usado en escenarios NBQ Utiliser en cas d'attaque CBRN Atropina. Stosowana jako lek rozkurczowy i środek rozszerzający źrenice. + Verwendet bei ABC Kontamination A drug used by the Military in NBC scenarios. Препарат, используемый в войсках для защиты от оружия массового поражения. - Medicamento usado por Militares en escenarios NBQ + Medicamento usado por militares en escenarios NBQ Médicament utilisé par l'armée en cas d'attaque CBRN - Atropina. Stosowana jako lek rozkurczowy i środek rozszerzający źrenice. Środek stosowany w - przypadku zagrożeń NBC. - + Atropina. Stosowana jako lek rozkurczowy i środek rozszerzający źrenice. Środek stosowany w przypadku zagrożeń NBC. + Ein Medikament, das vom Militär bei ABC Kontamination verwendet wird. Epinephrine autoinjector - Адреналин в автоматическом шприце + Адреналин в пневмошприце Epinefrina auto-inyectable Auto-injecteur d'épinéphrine Autostrzykawka EpiPen + Epiniphrin Autoinjektor Increase heart rate and counter effects given by allergic reactions @@ -544,36 +671,22 @@ Aumenta la frecuencia cardiaca y contraresta los efectos de las reacciones alérgicas Augmente la Fréquance cadiaque et contré les effet d'une reaction Anaphylactique Adrenalina. Zwiększa puls i przeciwdziała efektom wywołanym przez reakcje alergiczne + Steigert die Herzfrequenz, um den Effekt von allergischen Reaktionen zu bekämpfen - A drug that works on a sympathetic response to dilate the bronchi, increase heart rate and counter - such effects given by allergic reactions (anaphylaxis). Used in sudden cardiac arrest scenarios with - decreasing positive outcomes. - - Препарат, вызывающий симпатическую реакцию, приводящую к расширению бронхов, увеличению частоты - сердечных сокращений и купированию аллергических реакций (анафилактического шока). Применяется при - остановке сердца с уменьшением вероятности благоприятного исхода. - - Medicamento que dilata los bronquios, aumenta la frecuencia cardiaca y contrarresta los efectos de - las reacciones alérgicas (anafilaxis). Se utiliza en caso de paros cardiacos repentinos. - - Un medicament qui fonctione sur le systeme sympatique créan une dilatation des bronches, augmente la - fréquance cardiaque et contre les effet d'une reaction alergique (anaphylaxie). Utiliser lors d'arret - cardio-respiratoire pour augmenté les chances retrouver un ryhtme. - - EpiPen z adrenaliną ma działanie sympatykomimetyczne, tj. pobudza receptory alfa- i - beta-adrenergiczne. Pobudzenie układu współczulnego prowadzi do zwiększenia częstotliwości pracy serca, - zwiększenia pojemności wyrzutowej serca i przyśpieszenia krążenia wieńcowego. Pobudzenie oskrzelowych - receptorów beta-adrenergicznych wywołuje rozkurcz mięśni gładkich oskrzeli, co w efekcie zmniejsza - towarzyszące oddychaniu świsty i duszności. - + A drug that works on a sympathetic response to dilate the bronchi, increase heart rate and counter such effects given by allergic reactions (anaphylaxis). Used in sudden cardiac arrest scenarios with decreasing positive outcomes. + Препарат, вызывающий симпатическую реакцию, приводящую к расширению бронхов, увеличению частоты сердечных сокращений и купированию аллергических реакций (анафилактического шока). Применяется при остановке сердца с уменьшением вероятности благоприятного исхода. + Medicamento que dilata los bronquios, aumenta la frecuencia cardiaca y contrarresta los efectos de las reacciones alérgicas (anafilaxis). Se utiliza en caso de paros cardiacos repentinos. + Un medicament qui fonctione sur le systeme sympatique créan une dilatation des bronches, augmente la fréquance cardiaque et contre les effet d'une reaction alergique (anaphylaxie). Utiliser lors d'arret cardio-respiratoire pour augmenté les chances retrouver un ryhtme. + EpiPen z adrenaliną ma działanie sympatykomimetyczne, tj. pobudza receptory alfa- i beta-adrenergiczne. Pobudzenie układu współczulnego prowadzi do zwiększenia częstotliwości pracy serca, zwiększenia pojemności wyrzutowej serca i przyśpieszenia krążenia wieńcowego. Pobudzenie oskrzelowych receptorów beta-adrenergicznych wywołuje rozkurcz mięśni gładkich oskrzeli, co w efekcie zmniejsza towarzyszące oddychaniu świsty i duszności. Plasma IV (1000ml) Плазма для в/в вливания (1000 мл) - Plasma Intravenoso (1000ml) + Plasma IV (1000ml) Plasma Sanguin IV (1000ml) Osocze IV (1000ml) + Plasma IV (1000ml) A volume-expanding blood supplement. @@ -592,328 +705,416 @@ Plasma IV (500ml) Плазма для в/в вливания (500 мл) - Plasma Intravenoso (500ml) + Plasma IV (500ml) Plasma Sanguin IV (500ml) Osocze IV (500ml) + Plasma IV (500ml) Plasma IV (250ml) Плазма для в/в вливания (250 мл) - Plasma Intravenoso (250ml) + Plasma IV (250ml) Plasma Sanguin (250ml) Osocze IV (250ml) + Plasma IV (250ml) Blood IV (1000ml) Кровь для переливания (1000 мл) - Sangre Intravenosa (1000ml) + Sangre IV (1000ml) Cullot Sanguin IV (1000ml) Krew IV (1000ml) + Blut IV (1000ml) Blood IV, for restoring a patients blood (keep cold) Пакет крови для возмещения объема потерянной крови (хранить в холодильнике) - Sangre Intravenosa, para restarurar el volumen sanguíneo (mantener frío) + Sangre intravenosa, para restarurar el volumen sanguíneo (mantener frío) Cullot Sanguin IV, pour remplacer le volume sanguin (garder Réfrigeré) Krew IV, używana do uzupełnienia krwi u pacjenta, trzymać w warunkach chłodniczych - O Negative infusion blood used in strict and rare events to replenish blood supply usually - conducted in the transport phase of medical care. - - Кровь I группы, резус-отрицательная, применяется по жизненным показаниям для возмещения объема - потерянной крови на догоспитальном этапе оказания медицинской помощи. - - Cullot Sanguin O- ,utiliser seulement lors de perte sanguine majeur afin de remplacer le volume - sanguin perdu. Habituelment utiliser lors du transport ou dans un etablisement de soin. - - Krew 0 Rh-, używana w rzadkich i szczególnych przypadkach do uzupełnienia krwi u pacjenta, zazwyczaj - w trakcie fazie transportu rannej osoby do szpitala. - - Utilice sólo durante gran pérdida de sangre para reemplazar el volumen de sangre perdido. Uso - habitual durante el transporte de heridos. - + O Negative infusion blood used in strict and rare events to replenish blood supply usually conducted in the transport phase of medical care. + Кровь I группы, резус-отрицательная, применяется по жизненным показаниям для возмещения объема потерянной крови на догоспитальном этапе оказания медицинской помощи. + Cullot Sanguin O- ,utiliser seulement lors de perte sanguine majeur afin de remplacer le volume sanguin perdu. Habituelment utiliser lors du transport ou dans un etablisement de soin. + Krew 0 Rh-, używana w rzadkich i szczególnych przypadkach do uzupełnienia krwi u pacjenta, zazwyczaj w trakcie fazie transportu rannej osoby do szpitala. + Utilice sólo durante gran pérdida de sangre para reemplazar el volumen de sangre perdida. Uso habitual durante el transporte de heridos. Blood IV (500ml) Кровь для переливания (500 мл) - Sangre Intravenosa (500ml) + Sangre IV (500ml) Cullot Sanguin IV (500ml) Krew IV (500ml) + Blut IV (500ml) Blood IV (250ml) Кровь для переливания (250 мл) - Sangre Intravenosa (250ml) + Sangre IV (250ml) Cullot Sanguin IV (250ml) Krew IV (250ml) + Blut IV (250ml) Saline IV (1000ml) Физраствор для в/в вливания (1000 мл) - Solución Salina Intravenosa (1000ml) + Solución Salina IV (1000ml) solution Saline 0.9% IV (1000ml) Solanka 0,9% IV (1000ml) + Kochsalzlösung (1000ml) Saline IV, for restoring a patients blood Пакет физраствора для возмещения объема потерянной крови - Solución Salina Intravenosa, para restaurar el volumen sanguíneo + Solución salina intravenosa, para restaurar el volumen sanguíneo Solution Saline 0.9% IV, pour retablir temporairement la tention arteriel Solanka 0,9%, podawana dożylnie (IV), używana w celu uzupełnienia krwi u pacjenta - A medical volume-replenishing agent introduced into the blood system through an IV infusion. - - Пакет физиологического раствора для возмещения объема потерянной крови путем внутривенного - вливания. - + A medical volume-replenishing agent introduced into the blood system through an IV infusion. + Пакет физиологического раствора для возмещения объема потерянной крови путем внутривенного вливания. Suero fisiológico inoculado al torrente sanguíneo de forma intravenosa. - Un remplacment temporaire pour rétablir la tention artériel lors de perte sanguine, étant ajouter - par intraveineuse - - Używany w medycynie w formie płynu infuzyjnego jako środek nawadniający i uzupełniający niedobór - elektrolitów, podawany dożylnie (IV). - + Un remplacment temporaire pour rétablir la tention artériel lors de perte sanguine, étant ajouter par intraveineuse + Używany w medycynie w formie płynu infuzyjnego jako środek nawadniający i uzupełniający niedobór elektrolitów, podawany dożylnie (IV). Saline IV (500ml) Физраствор для в/в вливания (500 мл) - Solución Salina Intravenosa (500ml) + Salino IV (500ml) Solution Saline 0.9% IV (500ml) Solanka 0,9% IV (500ml) + Kochsalzlösung (500ml) Saline IV (250ml) Физраствор для в/в вливания (250 мл) - Solución Salina Intravenosa (250ml) + Salino IV (250ml) Solution Saline 0.9% IV (250ml) Solanka 0,9% IV (250ml) + Kochsalzlösung (250ml) Basic Field Dressing (QuikClot) Первичный перевязочный пакет (QuikClot) - Vendaje Básico (Coagulante) + Vendaje básico (QuickClot) Bandage Regulier (Coagulant) - Opatrunek QuikClot + Podstawowy pakiet opatrunkowy (QuikClot) + Verbandpäckchen(Gerinnungsmittel) QuikClot bandage Гемостатический пакет QuikClot - Venda Coagulante + Vendaje QuikClot Bandage coagulant - Podstawowy opatrunek stosowany na rany + Hemostatyczny pakiet QuikClot. Podstawowy opatrunek stosowany na rany. + Bandage mit Gerinnungsmittel - + Hemostatic bandage with coagulant that stops bleeding. Un bandage servant a coaguler les seignements mineur à moyen. - Proszkowy opatrunek adsorbcyjny przeznaczony do tamowania zagrażających życiu krwawień średniej i - dużej intensywności. - - Vendaje Hemostático con coagulante que detiene el sangrado. + Proszkowy opatrunek adsorpcyjny przeznaczony do tamowania zagrażających życiu krwawień średniej i dużej intensywności. + Vendaje hemostático con coagulante que detiene el sangrado. + Verband mit Gerinnungsmittel, um starke Blutung zu behandeln. Personal Aid Kit Аптечка - Kit de Soporte Vital Avanzado + Botiquín de primeros auxilios Équipement de support Vitale Apteczka osobista + Persönliches Verbandpäckchen Includes various treatment kit needed for stitching or advanced treatment - Содержит различные материалы и инструменты для зашивания ран и оказания специальной медпомощи. - + Содержит различные материалы и инструменты для зашивания ран и оказания специальной медпомощи. Incluye material médico para tratamientos avanzados Inclue du matériel medical pour les traitement avancé, tel les point de suture. Zestaw środków medycznych do opatrywania ran i dodatkowego leczenia po-urazowego + Beinhaltet medizinisches Material für fortgeschrittene Behandlung und zum Nähen. + W znacznym stopniu poprawia stan pacjenta Surgical Kit + Kit de chirurgien Хирургический набор - Kit Quirúrgico + Kit quirúrgico + Zestaw do szycia ran + Operationsset Surgical Kit for in field advanced medical treatment + Kit de chirurgien pour les soins avancés sur le terrain Набор для хирургической помощи в полевых условиях - Kit Quirúrgico para el tratamiento avanzado en el campo de batalla + Kit quirúrgico para el tratamiento avanzado en el campo de batalla + Zestaw pozwalający na zszywanie ran w polu + Operationsset für fortgeschrittene medizinische Feldversorgung Surgical Kit for in field advanced medical treatment Набор для хирургической помощи в полевых условиях - Kit Quirúrgico para el tratamiento avanzado en el campo de batalla + Kit quirúrgico para el tratamiento avanzado en el campo de batalla + Zestaw pozwalający na zszywanie ran w polu + Operationsset für fortgeschrittene medizinische Feldversorgung Bodybag + Sac à corps Мешок для трупов Bolsa para cadáveres + Worek na zwłoki + Leichensack A bodybag for dead bodies + Un sac pour les cadavres Мешок для упаковки трупов - Bolsa para cadáveres + Una bolsa para cadáveres + Worek do pakowania zwłok + Ein Leichensack für Tote A bodybag for dead bodies + Un sac pour les cadavres Мешок для упаковки трупов - Bolsa para cadáveres + Una bolsa para cadáveres + Worek do pakowania zwłok + Ein Leichensack für Tote - Blood Pressure + Pression sanguine Артериальное давление - Presión Arterial + Presión arterial + Ciśnienie krwi + Blutdruck Checking Blood Pressure.. + Vérification de la pression sanguine Проверка артериального давления... - Comprobando Presión Arterial... + Comprobando presión arterial... + Sprawdzanie ciśnienia krwi... + Blutdruck kontrollieren... You checked %1 + Vous diagnostiquez %1 Вы осмотрели раненого %1 Examinando a %1 + Zbadałeś %1 + Kontrolliert %1 You find a blood pressure of %2/%3 + Vous pris une pression sanguine de %2/%3 Артериальное давление %2/%3 - La Presión Arterial es %2/%3 + La presión arterial es %2/%3 + Ciśnienie krwi wynosi %2/%3 + Blutdruck ist %2/%3 You find a low blood pressure + Vous avez trouvé une pression sanguine base Давление низкое - La Presión Arterial es baja + La presión arterial es baja + Wyczuwasz niskie ciśnienie krwi + Blutdruck ist niedrig You find a normal blood pressure + Vous avez trouvé une pression sanguine normale Давление нормальное - La Presión Arterial es normal + La presión arterial es normal + Wyczuwasz normalne ciśnienie krwi + Blutdruck ist normal You find a high blood pressure + Vous avez trouvé une forte pression sanguine Давление высокое - La Presión Arterial es alta + La presión arterial es alta + Wyczuwasz wysokie ciśnienie krwi + Blutdruck ist hoch You find no blood pressure + Vous n'avez pas trouvé de pression sanguine Давления нет - No hay Presión Arterial + No hay presión arterial + Nie wyczuwasz ciśnienia krwi + Patient hat keinen Blutdruck You fail to find a blood pressure + Vous avez raté le diagnostique de la pression sanguine Артериальное давление не определяется - No puedes encontrar Presión Arterial + No puedes encontrar presión arterial + Nie udało Ci się sprawdzić ciśnienia krwi + Blutdruck konnte nicht gefunden werden Pulse + Pulsations Пульс Pulso + Tętno + Puls Checking Heart Rate.. + Diagnostique de la fréquence cardiaque Проверка пульса... - Comprobando Pulso... + Comprobando ritmo cardíaco... + Sprawdzanie tętna... + Kontrolliere Herzfrequenz You checked %1 + Vous avez Diagnostiqué %1 Вы осмотрели раненого %1 Examinando a %1 + Zbadałeś %1 + Kontrolliertt %1 You find a Heart Rate of %2 + Vous avez trouvé une fréquence cardiaque de %2 Пульс %2 уд./мин. - El Pulso es %2 + El ritmo cardíaco es de %2 + Wyczuwasz tętno o wartości %2 + Herzfrequenz ist %2 You find a weak Heart Rate + Vous avez trouvé une faible fréquence cardiaque Пульс слабый - El Pulso es débil + El ritmo cardíaco es débil + Wyczuwasz słabe tętno + Schwacher Puls You find a strong Heart Rate + Vous avez trouvé une forte fréquence cardiaque Пульс учащенный - El Pulso está acelerado + El ritmo cardíaco está acelerado + Wyczuwasz silne tętno + Starker Puls You find a normal Heart Rate + Vous avez trouvé une fréquence cardiaque normale Пульс в норме - El Pulso es bueno + El ritmo cardíaco es bueno + Wyczuwasz normalne tętno + Normaler Puls You find no Heart Rate + Vous n'avez trouvé de fréquence cardiaque Пульс не прощупывается - No tiene Pulso + No tiene ritmo cardíaco + Wyczuwasz brak tętna + Kein Puls gefunden Response + Réponse Реакция - Reacciona + Respuesta + Przytomność + Ansprechbarkeit You check response of patient + Vous vérifiez la réponse du patient Вы проверяете реакцию раненого Compruebas si el paciente reacciona + Sprawdzasz przytomność pacjenta + Du prüfst ob der Patient ansprechbar ist %1 is responsive + %1 est conscient %1 реагирует на раздражители %1 ha reaccionado + %1 jest przytomny + %1 ist anprechbar %1 is not responsive + %1 n'est pas conscient %1 не реагирует %1 no reacciona + %1 jest nieprzytomny + %1 ist nicht ansprechbar You checked %1 + Vous diagnostiqué %1 Вы осмотрели раненого %1 Examinas a %1 + Zbadałeś %1 + Du versucht %1 anzusprechen Bandaged + Bandé Повязка наложена Vendado + Zabandażowano You bandage %1 (%2) + Vous bandez %1 (%2) Вы перевязали раненого %1 (%2) Aplicas vendaje a %1 en %2 + Bandażujesz %1 (%2) %1 is bandaging you + %1 vous bande %1 перевязывает вас %1 te está vendando + %1 bandażuje Ciebie You start stitching injures from %1 (%2) Вы зашиваете ранения от %1 (%2) Estás suturando heridas de %1 en %2 + Zszywasz rany %1 (%2) Stitching Наложение швов Suturando + Szycie You treat the airway of %1 Вы интубируете раненого %1 Estás intubando a %1 + Udrażniasz drogi oddechowe %1 Airway Дыхательные пути - Vías Aéreas + Vías aéreas + Drogi oddechowe + Atemwege %1 is treating your airway %1 проводит вам интубацию %1 te está intubando + %1 udrażnia Twoje drogi oddechowe Drag @@ -978,35 +1179,58 @@ Unload patient Descargar el paciente + Выгрузить пациента + Wyładuj pacjenta + Décharger le patient Load patient Cargar el paciente en + Погрузить пациента + Załaduj pacjenta + Charger le patient Place body in bodybag Colocar cuerpo en bolsa para cadáveres + Поместить тело в мешок + Zapakuj ciało do worka na zwłoki + Placer le corps dans le sac à cadavre Placing body in bodybag Colocando cuerpo en bolsa para cadáveres + Помещение тела в мешок ... + Pakowanie ciała do worka na zwłoki + Mise en sac du corps dans le sac à cadavre - %1 has bandaged patient %1 has vendado al paciente + %1 перевязал пациента + %1 zabandażował pacjenta + %1 à bandé un patient %1 used %2 %1 usó %2 + %1 применил %2 + %1 użył %2 + %1 utilise %2 %1 has given an IV %1 has puesto una IV + %1 провел переливание + %1 podał IV + %1 à donné un IV %1 applied a tourniquet %1 aplicado torniquete + %1 наложил жгут + %1 założył stazę + %1 à appliqué un garrot diff --git a/addons/microdagr/functions/fnc_updateDisplay.sqf b/addons/microdagr/functions/fnc_updateDisplay.sqf index af577049a0..2a5f34a12c 100644 --- a/addons/microdagr/functions/fnc_updateDisplay.sqf +++ b/addons/microdagr/functions/fnc_updateDisplay.sqf @@ -1,4 +1,4 @@ -/* +/* * Author: PabstMirror * Updates the display (several times a second) called from the pfeh * @@ -53,7 +53,7 @@ case (APP_MODE_INFODISPLAY): { _compassAngleText = if (GVAR(settingUseMils)) then { [(floor ((6400 / 360) * (getDir ace_player))), 4, 0] call CBA_fnc_formatNumber; } else { - ([(floor (getDir ace_player)), 3, 1] call CBA_fnc_formatNumber) + "" //degree symbol is in UTF-8 + ([(floor (getDir ace_player)), 3, 1] call CBA_fnc_formatNumber) + "°" //degree symbol is in UTF-8 }; (_display displayCtrl IDC_MODEDISPLAY_HEADINGNUM) ctrlSetText _compassAngleText; @@ -92,7 +92,7 @@ case (APP_MODE_INFODISPLAY): { _bearingText = if (GVAR(settingUseMils)) then { [(floor ((6400 / 360) * (_bearing))), 4, 0] call CBA_fnc_formatNumber; } else { - ([(floor (_bearing)), 3, 1] call CBA_fnc_formatNumber) + "" //degree symbol is in UTF-8 + ([(floor (_bearing)), 3, 1] call CBA_fnc_formatNumber) + "°" //degree symbol is in UTF-8 }; _2dDistanceKm = ((GVAR(gpsPositionASL) select [0,2]) distance (_targetPosLocationASL select [0,2])) / 1000; _rangeText = format ["%1km", ([_2dDistanceKm, 1, 1] call CBA_fnc_formatNumber)]; @@ -112,7 +112,7 @@ case (APP_MODE_COMPASS): { _compassAngleText = if (GVAR(settingUseMils)) then { [(floor ((6400 / 360) * (getDir ace_player))), 4, 0] call CBA_fnc_formatNumber; } else { - ([(floor (getDir ace_player)), 3, 1] call CBA_fnc_formatNumber) + "M" //degree symbol is in UTF-8 + ([(floor (getDir ace_player)), 3, 1] call CBA_fnc_formatNumber) + "°" //degree symbol is in UTF-8 }; (_display displayCtrl IDC_MODECOMPASS_HEADING) ctrlSetText _compassAngleText; @@ -149,7 +149,7 @@ case (APP_MODE_COMPASS): { _bearingText = if (GVAR(settingUseMils)) then { [(floor ((6400 / 360) * (_bearing))), 4, 0] call CBA_fnc_formatNumber; } else { - ([(floor (_bearing)), 3, 1] call CBA_fnc_formatNumber) + "M" //degree symbol is in UTF-8 + ([(floor (_bearing)), 3, 1] call CBA_fnc_formatNumber) + "°" //degree symbol is in UTF-8 }; _2dDistanceKm = ((GVAR(gpsPositionASL) select [0,2]) distance (_targetPosLocationASL select [0,2])) / 1000; _rangeText = format ["%1km", ([_2dDistanceKm, 1, 1] call CBA_fnc_formatNumber)]; diff --git a/addons/microdagr/stringtable.xml b/addons/microdagr/stringtable.xml index 3431ad8fa9..7981fe1226 100644 --- a/addons/microdagr/stringtable.xml +++ b/addons/microdagr/stringtable.xml @@ -1,30 +1,54 @@  - MicroDAGR GPS + MicroDAGR GPS GPS MicroDAGR + MicroDAGR GPS + MicroDAGR GPS + MicroDAGR GPS + GPS MicroDAGR MicroDAGR advanced GPS receiver + MicroDAGR verbesserter GPS Empfänger Receptor avanzado GPS MicroDAGR + Многофункциональный GPS-приёмник. + Zaawansowany odbiornik GPS MicroDAGR + MicroDAGR un GPS avancé Angular Unit: Unidad angular: + Угловые единицы: + Jednostka kątowa: + Unité angulaire: + Winkeleinheit: Mils + Mils Mils + Тысячные + Milsy + Mils Show Waypoints On Map: + Zeige Wegpunkte auf Karte Mostrar puntos de ruta en el mapa: + Показывать маршрутные точки на карте: + Pokaż PT na mapie: + Afficher les points de passage sur la carte : Degrees + Grad Grados + Градусы + Stopnie + Degrés On @@ -51,53 +75,103 @@ Enter Grid Cords: Introducir coordenadas de cuadrícula: + Введите координаты: + Wprowadź współrzędne: + Entrer Grid Cords : + Koordinaten eingeben: Name of [%1] + Name von [%1] Nombre de [%1] + Название [%1] + Nazwa [%1] + Nom de [%1] MGRS-New + MGRS-NEU Nuevo-MGRS + MGRS-Новая + MGRS-Nowy + Nouveau MGRS WGD + WGD WGD + WGD + WGD + WGD Range: - Distancia + Distancia: Reichweite: + Дистанция: + Dystans: + Distance : Compass Direction + Kompass Richtung Dirección de la brújula + Азимут + Kierunek + Direction de la boussole Mark + Markieren Marca + Отметка + Oznacz + Marqueur Waypoints Puntos de ruta Wegpunkte + Машрутные точки + Waypointy + Punkty trasy + Point de passage Connect To Conectar a + Соединиться с + Verbinde zu + Připojit k + Podłącz do + Connexion à Settings + Paramètres Einstellungen Configuración + Настройки + Nastavení + Ustawienia SetWP + SetzeWP + WP setzen Establecer PR + Установить МТ + Nastavit WP + UstawPT Add + Hinzufügen Añadir + Добавить + Přidat + Dodaj + Ajouter Delete @@ -112,19 +186,38 @@ Toggle MicroDAGR Display Mode + MicoDAGR Anzeigemodus wählen Conmutar modo de pantalla del MicroDAGR + Сменить режим показа MicroDAGR + Przełącz tryb wyświetlania MicroDAGR + Basculer sur l'affichage du MicroDAGR Show MicoDAGR + Zeige MicroDAGR Mostrar MicroDAGR + Показать MicroDAGR + Ukázat MicroDAGR GPS + Pokaż MicroDAGR + Afficher le MicroDAGR Configure MicroDAGR + Konfiguriere MicroDAGR Configurar MicroDAGR + Настроить MicroDAGR + Konfigurovat MicroDAGR GPS + Konfiguruj MicroDAGR + Configurer le MicroDAGR Close MicroDAGR + Schließe MicroDAGR Cerrar MicroDAGR + Закрыть MicroDAGR + Zavřít MicroDAGR GPS + Zamknij MicroDAGR + Fermer le MicroDAGR diff --git a/addons/missileguidance/CfgVehicles.hpp b/addons/missileguidance/CfgVehicles.hpp index 46d22e19e9..7707717c9e 100644 --- a/addons/missileguidance/CfgVehicles.hpp +++ b/addons/missileguidance/CfgVehicles.hpp @@ -1,19 +1,29 @@ class CfgVehicles { - class Heli_Attack_01_base_F; - class B_Heli_Attack_01_F : Heli_Attack_01_base_F { + class AllVehicles; + class Air: AllVehicles { + class Turrets; + }; + + class Helicopter: Air { class Turrets { class MainTurret; }; - } + }; + class Helicopter_Base_F: Helicopter {}; + class Heli_Attack_01_base_F: Helicopter_Base_F {}; + class B_Heli_Attack_01_F : Heli_Attack_01_base_F { + class Turrets: Turrets { + class MainTurret; + }; + }; class ACE_Comanche_Test : B_Heli_Attack_01_F { - displayName = "ACE_Comanche_Test"; + displayName = "ACE_Comanche_Test"; author = "ACE Team"; - class Library - { - libTextDesc = "ACE_Comanche_Test"; - }; + class Library { + libTextDesc = "ACE_Comanche_Test"; + }; class Turrets: Turrets { class MainTurret: MainTurret { magazines[] = {"ACE_500Rnd_20mm_shells_Comanche", "24Rnd_ACE_Hellfire_AGM114K"}; @@ -21,4 +31,3 @@ class CfgVehicles { }; }; }; - diff --git a/addons/missileguidance/XEH_pre_init.sqf b/addons/missileguidance/XEH_pre_init.sqf index 873715fef8..403d6245ca 100644 --- a/addons/missileguidance/XEH_pre_init.sqf +++ b/addons/missileguidance/XEH_pre_init.sqf @@ -3,6 +3,9 @@ PREP(rotateVectLineGetMap); PREP(rotateVectLine); +PREP(checkSeekerAngle); +PREP(checkLos); + PREP(fired); PREP(guidancePFH); diff --git a/addons/missileguidance/functions/fnc_checkLos.sqf b/addons/missileguidance/functions/fnc_checkLos.sqf new file mode 100644 index 0000000000..f21a841367 --- /dev/null +++ b/addons/missileguidance/functions/fnc_checkLos.sqf @@ -0,0 +1,29 @@ +/* + * Author: jaynus + * Returns whether the seeker object can see the target position with lineIntersect + * + * Argument: + * 0: Seeker [Object] + * 1: Target [Object] + * + * Return value: + * Boolean + */ +#include "script_component.hpp" +private["_seeker", "_seekerPos", "_target", "_targetPos", "_return", "_vectorTo", "_searchPos"]; +_seeker = _this select 0; +_target = _this select 1; + +_targetPos = getPosASL _target; +_seekerPos = getPosASL _seeker; +_return = true; + +if(!(terrainIntersectASL [ _seekerPos, _targetPos])) then { + if(lineIntersects [_seekerPos, _targetPos, _seeker, _target]) then { + _return = false; + }; +} else { + _return = false; +}; + +_return; \ No newline at end of file diff --git a/addons/missileguidance/functions/fnc_checkSeekerAngle.sqf b/addons/missileguidance/functions/fnc_checkSeekerAngle.sqf new file mode 100644 index 0000000000..7308ce1723 --- /dev/null +++ b/addons/missileguidance/functions/fnc_checkSeekerAngle.sqf @@ -0,0 +1,50 @@ +/* + * Author: jaynus + * Returns whether the target position is within the maximum angle FOV of the provided seeker + * objects current direction. + * + * Argument: + * 0: Seeker [Object] + * 1: Target [Position] + * 2: Max Angle [Degrees] + * + * Return value: + * Boolean + */ + + #define DEBUG_MODE_FULL +#include "script_component.hpp" +private["_seeker", "_targetPos", "_seekerMaxAngle", "_vectorTo", "_sensorPos", "_vertOk", "_horzOk", "_dir", "_headingPitch"]; + +_seeker = _this select 0; +_targetPos = _this select 1; +_seekerMaxAngle = _this select 2; + +_vertOk = false; +_horzOk = false; + +_sensorPos = getPosASL _seeker; +_vectorTo = _sensorPos vectorFromTo _targetPos; + +_headingPitch = (vectorDir _seeker) call CBA_fnc_vect2polar; +_polarTo = _vectorTo call CBA_fnc_vect2polar; + +_dir = _polarTo select 1; +_dir = _dir - (_headingPitch select 1); + +if (_dir < 0) then {_dir = _dir + 360}; +if (_dir > 360) then {_dir = _dir - 360}; + _vertOk = false; + _horzOk = false; +if(_dir < _angleFov || {_dir > (360-_angleFov)}) then { + _horzOk = true; +}; +if(abs((abs(_polarTo select 2))-(abs(_headingPitch select 2))) < _angleFov) then { + _vertOk = true; +}; + +if(!_vertOk || !_horzOk ) exitWith { + false +}; + +true \ No newline at end of file diff --git a/addons/missileguidance/functions/fnc_seekerType_Optic.sqf b/addons/missileguidance/functions/fnc_seekerType_Optic.sqf index 3ce123d89c..9539c2c8f6 100644 --- a/addons/missileguidance/functions/fnc_seekerType_Optic.sqf +++ b/addons/missileguidance/functions/fnc_seekerType_Optic.sqf @@ -19,14 +19,31 @@ if(!isNil "_target") then { _foundTargetPos = getPosASL _target; }; -TRACE_2("", _target, _foundTargetPos); +/* @TODO: This is seeker LOS and angle checks for LOAL only; LOBL does not need visual +_angleFov = _seekerParams select 0; +_angleOkay = [_projectile, _foundTargetPos, _angleFov] call FUNC(checkSeekerAngle); -_projectileSpeed = (vectorMagnitude velocity _projectile); -_distanceToTarget = (getPosASL _projectile) vectorDistance _foundTargetPos; +_losOkay = false; +if(_angleOkay) then { + _losOkay = [_projectile, _target] call FUNC(checkSeekerLos); +}; +TRACE_2("", _angleOkay, _losOkay); -_eta = _distanceToTarget / _projectileSpeed; +// If we got here, it was an invalid target, just return a spot 5m in front of the missile +if(!_angleOkay || !_losOkay) then { + _foundTargetPos = _sensorPos vectorAdd ((velocity _projectile) vectorMultiply 5); +} else { + TRACE_2("", _target, _foundTargetPos); -_adjustVelocity = (velocity _target) vectorMultiply _eta; -_foundTargetPos = _foundTargetPos vectorAdd _adjustVelocity; + // @TODO: Configurable lead for seekers + _projectileSpeed = (vectorMagnitude velocity _projectile); + _distanceToTarget = (getPosASL _projectile) vectorDistance _foundTargetPos; + _eta = _distanceToTarget / _projectileSpeed; + + _adjustVelocity = (velocity _target) vectorMultiply _eta; + _foundTargetPos = _foundTargetPos vectorAdd _adjustVelocity; +}; + +*/ _foundTargetPos; \ No newline at end of file diff --git a/addons/missileguidance/functions/fnc_seekerType_SALH.sqf b/addons/missileguidance/functions/fnc_seekerType_SALH.sqf index f4d36285d8..828550aeeb 100644 --- a/addons/missileguidance/functions/fnc_seekerType_SALH.sqf +++ b/addons/missileguidance/functions/fnc_seekerType_SALH.sqf @@ -2,16 +2,25 @@ #include "script_component.hpp" EXPLODE_7_PVT(((_this select 1) select 0),_shooter,_weapon,_muzzle,_mode,_ammo,_magazine,_projectile); -private["_targets", "_foundTargetPos", "_launchParams", "_seekerParams", "_targetLaunchParams"]; - _seekerTargetPos = _this select 0; _launchParams = _this select 1; _seekerParams = _launchParams select 3; -// TODO: this needs to be shootCone/findStrongestRay after testing -_targets = [_projectile, ACE_DEFAULT_LASER_CODE, (_seekerParams select 0)] call ace_laser_fnc_findLaserDesignator; -_foundTargetPos = getPosASL (_targets select 1); +_laserResult = [(getPosASL _projectile), [ACE_DEFAULT_LASER_WAVELENGTH,ACE_DEFAULT_LASER_WAVELENGTH], ACE_DEFAULT_LASER_CODE] call EFUNC(laser,seekerFindLaserSpot); +_foundTargetPos = _laserResult select 0; +TRACE_1("Search", _laserResult); + + +if(!isNil "_foundTargetPos") then { + _angleFov = _seekerParams select 0; + _canSeeTarget = [_projectile, _foundTargetPos, _angleFov] call FUNC(checkSeekerAngle); + + // If we got here, it was an invalid target, just return a spot 5m in front of the missile + if(!_canSeeTarget) then { + _foundTargetPos = _sensorPos vectorAdd ((velocity _projectile) vectorMultiply 5); + }; + +}; -TRACE_1("Seeker return target pos", _foundTargetPos); _foundTargetPos; \ No newline at end of file diff --git a/addons/missileguidance/stringtable.xml b/addons/missileguidance/stringtable.xml index fc17de4722..d64e3e31ab 100644 --- a/addons/missileguidance/stringtable.xml +++ b/addons/missileguidance/stringtable.xml @@ -1,107 +1,107 @@  - + - - - Advanced Missile Guidance - Avanzada Misiles Orientación - Avancée Missile orientation - Asystent Missile - Erweiterte Missile Guidance - Advanced Missile Guidance - Avanzato Missile Guidance - Avançado Missile Guidance - Részletes rakéta irányító - Расширенный ракетой - - - Enables advanced guidance mechanics and selection for different missiles and fire modes. - - - - - - - - - - - - /* Weapons */ - - Hydra-70 DAGR Missile - - - - - - - - - - - - DAGR - - - - - - - - - - - - Hydra-70 DAGR Laser Guided Missile - - - - - - - - - - + + + Advanced Missile Guidance + Avanzada Misiles Orientación + Avancée Missile orientation + Asystent Missile + Erweiterte Missile Guidance + Pokročilé řízení střel + Avanzato Missile Guidance + Avançado Missile Guidance + Részletes rakéta irányító + Расширенный ракетой + + + Enables advanced guidance mechanics and selection for different missiles and fire modes. + + + + + Povoluje pokročilou mechaniku řízení střel. + + + + + /* Weapons */ - - Hellfire II AGM-114K Missile - - - - - - - - - - - - AGM-114K - - - - - - - - - - - - Hellfire II AGM-114K Laser Guided Missile - - - - - - - - - - + + Hydra-70 DAGR Missile + + + + + Hydra-70 DAGR + + + + + + + DAGR + + + + + DAGR + + + + + + + Hydra-70 DAGR Laser Guided Missile + + + + + Hydra-70 DAGR laserem naváděná střela + + + + + + + /* Weapons */ + + Hellfire II AGM-114K Missile + + + + + Hellfire II AGM-114K + + + + + + + AGM-114K + + + + + AGM-114K + + + + + + + Hellfire II AGM-114K Laser Guided Missile + + + + + Hellfire II AGM-114K laserem naváděná střela + + + + + \ No newline at end of file diff --git a/addons/movement/XEH_postInit.sqf b/addons/movement/XEH_postInit.sqf index 310b689e15..224cd93273 100644 --- a/addons/movement/XEH_postInit.sqf +++ b/addons/movement/XEH_postInit.sqf @@ -1,6 +1,8 @@ //by commy2 #include "script_component.hpp" +if (!hasInterface) exitWith {}; + ["inventoryDisplayLoaded", { [{ diff --git a/addons/movement/stringtable.xml b/addons/movement/stringtable.xml index d31896acaa..8265c25074 100644 --- a/addons/movement/stringtable.xml +++ b/addons/movement/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -8,7 +8,7 @@ Mostrar peso en libras Afficher le poids en lb Pokaż ciężar w funtach - Zobrazit váhu v lb + Zobrazit váhu v librách Mostra peso in libbre Mostrar peso em libras Súly megjelenítése fontban. @@ -28,6 +28,7 @@ Climb + Monter Klettern Wspinaczka Trepar @@ -36,6 +37,7 @@ Can't climb here + je ne peux pas monter ici Kann hier nicht klettern Nie możesz wspiąć się tutaj No se puede trepar aquí @@ -43,4 +45,4 @@ Не можете подняться здесь - \ No newline at end of file + diff --git a/addons/nametags/stringtable.xml b/addons/nametags/stringtable.xml index 2f37193b17..7275ab3da9 100644 --- a/addons/nametags/stringtable.xml +++ b/addons/nametags/stringtable.xml @@ -1,5 +1,4 @@  - @@ -8,7 +7,7 @@ Mostrar nombres Afficher noms Zobrazit jména - Pokaż nazwy + Pokaż imiona Nevek mutatása Показать имена @@ -16,7 +15,7 @@ Show player names Spielernamen anzeigen Mostrar nombres de jugadores - Pokaż nazwy graczy + Pokaż imiona graczy Afficher nom des joueurs Játékosnevek mutatása Zobrazit jména hráčů @@ -26,7 +25,7 @@ Show player name only on cursor (requires player names) - Pokaż nazwę gracza tylko pod kursorem + Pokaż imiona graczy tylko pod kursorem (wymagana opcja Pokaż imiona graczy) Mostrar nombres solo en el cursor (requiere Mostrar nombres de jugadores) Zeige Spielernamen nur an, wenn die Maus auf sie gerrichtet ist (benötigt Spielernamen) Noms uniquement sous le curseur (si noms affichés) @@ -42,14 +41,14 @@ Mostrar nombres solo al pulsar (requiere Mostrar nombres de jugadores) Noms uniquement sur pression de la touche (si noms affichés) Zobrazit jména hráčů jen na klávesu (vyžaduje jména hráčů) - Pokaż nazwę gracza tylko po przytrzymaniu klawisza + Pokaż imiona graczy tylko po przytrzymaniu klawisza (wymagana opcja Pokaż imiona graczy) Játékosnevek mutatása gombnyomásra(névcíme szükséges) Показать имена игроков только по нажатию клавиши (требует имен игроков) Show player ranks (requires player names) Spielerränge anzeigen (benötig Spielernamen) - Pokaż rangi graczy (wymaga nazw graczy) + Pokaż rangi graczy (wymagana opcja Pokaż imiona graczy) Mostrar rango de los jugadores (requiere Mostrar nombres de jugadores) Grade des joueurs (si noms affichés) Zobrazit hodnosti hráčů (vyžaduje jména hráčů) @@ -60,24 +59,38 @@ Show vehicle crew info + Afficher les informations de l'équipage du véhicule Zeige Fahrzeugbesatzung Mostrar tripulantes - Pokaż informacje o załodze pojazdu + Pokaż załogę pojazdu Zobrazit info o posádce vozidla Показать экипаж Show name tags for AI units + Zeige Namen für KI Einheiten Mostrar etiquetas de nombre para unidades IA + Показывать именые метки ИИ + Zobrazit jména AI + Wyświetl imiona jednostek AI + Afficher les noms pour les unités IA Show SoundWaves (requires player names) - Zeigen Schallwelle (benötigt spielernamen) + Zeigen Schallwellen (benötigt Spielernamen) Mostrar onda sonora (requiere Mostrar nombres de jugadores) + Показывать звуковые волны (требует имен игроков) + Zobrazit SoundWaves (vyžaduje jména hráčů) + Pokaż fale dźwiękowe (wymagana opcja Pokaż imiona graczy) + Afficher l'ondulation audio (requiert les noms des joueurs) Default Nametag Color (Non Group Members) + Voreingestellte Namenfarbe (Spieler außerhalb der Gruppe) + Цвет меток игроков (не членов групп) Color de etiquetas de nombre por defecto (No miembros de grupo) + Domyślny kolor imion (członkowie spoza grupy) + Couleur par défaut pour les noms (unités non groupées) diff --git a/addons/nightvision/stringtable.xml b/addons/nightvision/stringtable.xml index 16ead016da..2dad02e3bd 100644 --- a/addons/nightvision/stringtable.xml +++ b/addons/nightvision/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -84,7 +84,7 @@ NS-Brille (Weitwinkel) Sistema de visión nocturna (Panorámicas) Gogle noktowizyjne (panoramiczne) - Noktovizor (Široký) + Noktovizor (Širokoúhlý) ПНВ (Широкий) @@ -92,7 +92,7 @@ Helligkeit: %1 Brillo: %1 Czułość: %1 - Zvýšení: %1 + Jas: %1 Luminosité : %1 Контраст: Fényerő: %1 @@ -124,4 +124,4 @@ Riduci la luminosità dell'NVG - + \ No newline at end of file diff --git a/addons/optics/CfgWeapons.hpp b/addons/optics/CfgWeapons.hpp index 29a3ff8c98..e42ae3780f 100644 --- a/addons/optics/CfgWeapons.hpp +++ b/addons/optics/CfgWeapons.hpp @@ -2,6 +2,23 @@ class CfgWeapons { class ItemCore; class InventoryOpticsItem_Base_F; + class Default; + + class Binocular: Default { + forceOptics = 0; // Allow using compass with Binocular + opticsZoomMin = 0.056889; // 5.25x power + opticsZoomMax = 0.056889; // 9 px/mil + modelOptics = "\z\ace\addons\optics\models\NWD_M22_5x"; // 7 horizontal field of view + visionMode[] = {"Normal"}; // Can't use nvgs with binoculars any more than you can with scopes + // Fix AI using Binocs on short range - #18737 + // minRange = 300; // 300 = uses Rangefinder often (runs a few meters, stops, uses RF, repeats) + minRange = 500; //500 = seem almost never use it..? + minRangeProbab = 0.001; + midRange = 1000; + midRangeProbab = 0.01; + maxRange = 5000; + maxRangeProbab = 0.01; + }; // zooming reticle scopes class optic_DMS: ItemCore { diff --git a/addons/optics/models/NWD_M22_5x.p3d b/addons/optics/models/NWD_M22_5x.p3d new file mode 100644 index 0000000000..b6df76e30b Binary files /dev/null and b/addons/optics/models/NWD_M22_5x.p3d differ diff --git a/addons/optics/reticles/4x_M22.paa b/addons/optics/reticles/4x_M22.paa new file mode 100644 index 0000000000..c685763a99 Binary files /dev/null and b/addons/optics/reticles/4x_M22.paa differ diff --git a/addons/optics/reticles/M22_font.paa b/addons/optics/reticles/M22_font.paa new file mode 100644 index 0000000000..539907d61f Binary files /dev/null and b/addons/optics/reticles/M22_font.paa differ diff --git a/addons/optics/reticles/bino_dirt.paa b/addons/optics/reticles/bino_dirt.paa new file mode 100644 index 0000000000..ea08efa3a7 Binary files /dev/null and b/addons/optics/reticles/bino_dirt.paa differ diff --git a/addons/optics/reticles/bino_ring.paa b/addons/optics/reticles/bino_ring.paa new file mode 100644 index 0000000000..53499af7ce Binary files /dev/null and b/addons/optics/reticles/bino_ring.paa differ diff --git a/addons/optics/stringtable.xml b/addons/optics/stringtable.xml index d34dd8b633..3e518a63d1 100644 --- a/addons/optics/stringtable.xml +++ b/addons/optics/stringtable.xml @@ -3,7 +3,6 @@ - RCO (2D) RCO (2D) RCO (2D) RCO (2D) @@ -16,11 +15,10 @@ - RCO (PIP) RCO (PIP) RCO (PIP) RCO (PIP) - RCO (PIP) + RCO (BIB) RCO (PIP) RCO (PIP) RCO (PIP) @@ -29,7 +27,6 @@ - ARCO (2D) ARCO (2D) ARCO (2D) ARCO (2D) @@ -42,11 +39,10 @@ - ARCO (PIP) ARCO (PIP) ARCO (PIP) ARCO (PIP) - ARCO (PIP) + ARCO (BIB) ARCO (PIP) ARCO (PIP) ARCO (PIP) @@ -55,7 +51,6 @@ - MRCO (2D) MRCO (2D) MRCO (2D) MRCO (2D) @@ -68,11 +63,10 @@ - MRCO (PIP) MRCO (PIP) MRCO (PIP) MRCO (PIP) - MRCO (PIP) + MRCO (BIB) MRCO (PIP) MRCO (PIP) MRCO (PIP) @@ -81,7 +75,6 @@ - MOS (2D) MOS (2D) MOS (2D) MOS (2D) @@ -94,11 +87,10 @@ - MOS (PIP) MOS (PIP) MOS (PIP) MOS (PIP) - MOS (PIP) + MOS (BIB) MOS (PIP) MOS (PIP) MOS (PIP) @@ -107,7 +99,6 @@ - LRPS (2D) LRPS (2D) LRPS (2D) LRPS (2D) @@ -120,11 +111,10 @@ - LRPS (PIP) LRPS (PIP) LRPS (PIP) LRPS (PIP) - LRPS (PIP) + LRPS (BIB) LRPS (PIP) LRPS (PIP) LRPS (PIP) diff --git a/addons/optionsmenu/stringtable.xml b/addons/optionsmenu/stringtable.xml index 6975ff4223..c4534edff9 100644 --- a/addons/optionsmenu/stringtable.xml +++ b/addons/optionsmenu/stringtable.xml @@ -1,5 +1,4 @@  - @@ -16,21 +15,34 @@ Fix Animation + Behebe Animation Arreglar animación + Фикс анимации + Opravit animace + Napraw animację + Corriger l'Animation Reset All - Rücksetzen + Alles Zurücksetzen Reiniciar todo + Полный сброс + Vyresetovat vše + Resetuj wszystko + Par défaut Colors + Couleurs Farben - цвета Colores + Цвета + Barvy + Kolory Options + Options Optionen Opciones Opcje @@ -44,6 +56,11 @@ Values Valores + Значения + Hodnoty + Wartości + Valeurs + Werte Yes @@ -73,48 +90,96 @@ Setting: Nastavení: Einstellung: - Yстановки: + Установки: Ajuste: + Ustawienie: Export + Exportieren Exportar + Экспорт + Exportovat + Eksport + Exporter Open Export Menu + Öffne Exportmenü Abrir menu d'exportación + Открыть меню экспорта + Otevřít exportovací menu + Otwórz menu eksportowania + Ouvrir le menu d'exportation String input. + String input. Introducir frase + Строчный ввод. + Wpisywanie tekstu. Array. Seperate elements by using ,. + Array. Teile unterschiedliche Elemente mit ,. Matriz. Separa elementos usando ,. + Массив. Разделяйте элемены, используя запятую. + Tablica. Oddziel elementy używając ,. + Array. Séparer les élements en utilisant ,. Number + Nummer Numero + Число + Číslo + Cyfra + Nombre Uknown input type + Unbekannter Eingabetyp Tipo de entrada desconocida + Неизвестный тип ввода + Neznámý vstup + Nieznany rodzaj danych + Input inconnue Save input + Speichere Eingabe Guardar entrada + Сохранить ввод + Uložit vstup + Zapisz dane + Sauvegarder les inputs Include Client Settings + Beinhalte Client-Einstellungen Incluir configuración de cliente + Включить настройки клиента + Zahrnout nastavení klienta + Zawrzyj ustawienia klienta + Inclure les paramètres de client Exclude Client Settings + Schließe Client-Einstellungen aus Excluir configuración de cliente + Исключить настройки клиента + Nezahrnout nastavení klienta + Wyklucz ustawienia klienta + Exclure les paramètres de client Settings exported to clipboard + Einstellungen in die Zwischenablage exportiert Configuración exportada al portapapeles + Настройки экспортированы в буфер обмена + Nastevení exportována do schránky + Ustawienia wyeksportowano do schowka + Paramètres exportés dans le presse-papier diff --git a/addons/overheating/CfgVehicles.hpp b/addons/overheating/CfgVehicles.hpp index bee4c0ec4c..5c7f7b9eb6 100644 --- a/addons/overheating/CfgVehicles.hpp +++ b/addons/overheating/CfgVehicles.hpp @@ -13,16 +13,16 @@ class CfgVehicles { icon = QUOTE(PATHTOF(UI\spare_barrel_ca.paa)); hotkey = "B"; }; - }; - class ACE_CheckTemperature { - displayName = "$STR_ACE_Overheating_CheckTemperatureShort"; - condition = "switch (currentWeapon _player) do {case (''): {false}; case (primaryWeapon _player); case (secondaryWeapon _player); case (handgunWeapon _player): {true}; default {false}}"; - exceptions[] = {"isNotInside"}; - statement = QUOTE( [ARR_2(_player, currentWeapon _player)] call FUNC(CheckTemperature); ); - showDisabled = 0; - priority = 3.1; - icon = QUOTE(PATHTOF(UI\temp_ca.paa)); - hotkey = "P"; + class ACE_CheckTemperature { + displayName = "$STR_ACE_Overheating_CheckTemperatureShort"; + condition = "switch (currentWeapon _player) do {case (''): {false}; case (primaryWeapon _player); case (secondaryWeapon _player); case (handgunWeapon _player): {true}; default {false}}"; + exceptions[] = {"isNotInside"}; + statement = QUOTE( [ARR_2(_player, currentWeapon _player)] call FUNC(CheckTemperature); ); + showDisabled = 0; + priority = 2.9; + icon = QUOTE(PATHTOF(UI\temp_ca.paa)); + hotkey = "P"; + }; }; }; }; diff --git a/addons/overheating/stringtable.xml b/addons/overheating/stringtable.xml index bc28c3a47d..93dcc93d96 100644 --- a/addons/overheating/stringtable.xml +++ b/addons/overheating/stringtable.xml @@ -1,14 +1,23 @@  - Display text on jam + Zeige Text bei Ladehemmung Mostrar texto al encasquillar + Показывать текст, когда клинит оружие + Zobrazit upozornění při zaseknutí + Wyświetl tekst przy zacięciu broni + Afficher un texte à la surchauffe Display a notification whenever your weapon gets jammed + Zeige einen Hinweis wenn die Waffe eine Ladehemmung hat Mostrar notificación cada vez que el arma se encasquille + Демонстровать уведомление, каждый раз, когда клинит Ваше оружие. + Zobrazí upozornění při zaseknutí zbraně + Wyświetl powiadomienie za każdym razem, kiedy Twoja broń ulegnie zacięciu + Afficher un texte quand votre arme surchauffe Spare barrel @@ -119,16 +128,8 @@ Проверить температуру оружия - Check<br/>temperature - Temperatur<br/>prüfen - Verificar<br/>temperatura - Sprawdź<br/>temperaturę - Vérifier la<br/>température - Hőmérséklet<br/>ellenőrzése - Zjistit<br/>teplotu - Conferir<br/>temperatura - Controlla la<br/>temperatura - Проверить<br/>температуру + Check weapon<br/>temperature + Verificar temperatura<br/>del arma Checking temperature ... diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index 9ccd7752d2..a743525707 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -1,5 +1,4 @@  - @@ -591,7 +590,7 @@ Typhoon Transport Typhoon de transporte Typhoon Transportowy - Typhoon Valník + Typhoon valník Typhoon Transport Тайфун Транспортный Typhoon Transporte @@ -603,7 +602,7 @@ Typhoon Transport (bedeckt) Typhoon de transporte (cubierto) Typhoon Transportowy (przykryty) - Typhoon Valník (krytý) + Typhoon valník (krytý) Typhoon Transport (bâché) Тайфун Транспортный (kрытый) Typhoon Transporte (coberto) @@ -615,7 +614,7 @@ Typhoon Gerät Typhoon de dispositivo Typhoon Urządzenie - Typhoon Zařízení + Typhoon zařízení Typhoon Dispositif Тайфун Устройство Typhoon Dispositivo @@ -627,7 +626,7 @@ Typhoon Munition Typhoon de munición Typhoon Amunicyjny - Typhoon Muniční + Typhoon muniční Typhoon Munitions Тайфун Боеприпасы Typhoon Munições @@ -639,7 +638,7 @@ Typhoon Treibstoff Typhoon de combustible Typhoon Cysterna - Typhoon Cisterna + Typhoon cisterna Typhoon Citerne Тайфун Заправщик Typhoon Combustível @@ -651,7 +650,7 @@ Typhoon Instandsetzung Typhoon de reparación Typhoon Naprawczy - Typhoon Opravárenský + Typhoon opravárenský Typhoon Réparation Тайфун Ремонтный Typhoon Reparador @@ -663,7 +662,7 @@ Typhoon Sanitäter Typhoon médico Typhoon Medyczny - Typhoon Zdravotnický + Typhoon zdravotnický Typhoon Sanitaire Тайфун Медицинский Typhoon Médico @@ -724,7 +723,7 @@ CH-47I Chinnok (Desarmado) CH-47I Chinook (nieuzbrojony) CH-47I Chinook (невооруженный) - CH-47I Chinook (Neozbrojený) + CH-47I Chinook (neozbrojený) A-10D Thunderbolt II @@ -863,7 +862,7 @@ M18A1 Claymore M18A1 Claymore Mina kierunkowa M18A1 Claymore - M18A1 Mina Claymore + Mina Claymore M18A1 M18A1 Claymore Mine antipersonnel à effet dirigé M18A1 Клеймор M18A1 Claymore @@ -875,7 +874,7 @@ M183 Geballte Sprengladung Conjunto de carga de demolición M183 Ładunek burzący M183 - M183 Demoliční nálož + Demoliční nálož M183 M183 Charge de Démolition M183 Комплектный подрывной заряд M183 Sacola de Demolição @@ -887,7 +886,7 @@ M112 Sprengladung Bloque de demolición M112 Ładunek burzący M112 - M112 Výbušná nálož + Výbušná nálož M112 Pétard M112 M112 подрывной заряд M112 Carga de Demolição @@ -899,7 +898,7 @@ M67 Splittergranate Granada de fragmentación M67 Granat obronny M67 - M67 Granát + Granát M67 M67 Grenade à fragmentation M67 ручная осколочная граната M67 Granada de fragmentação @@ -911,9 +910,9 @@ M83 Rauchgranate (Weiss) Granada de humo M83 (Blanco) Granat dymny M83 (Biały) - M83 Kouřový Granát (Bílý) + M83 Kouřový Granát (bílý) M83 Grenade fumigène (Blanche) - M83 дымовой гранаты (Белый) + M83 дымовая граната (Белый) M83 Granada de fumaça (Branca) M83 füstgránát (Fehér) M83 Granata fumogena (Bianco) @@ -923,9 +922,9 @@ M18 Rauchgranate (Blau) Granada de humo M18 (Azul) Granat dymny M18 (Niebieski) - M18 Kouřový Granát (Modrý) + M18 Kouřový Granát (modrý) M18 Grenade fumigène (Bleue) - M18 дымовой гранаты (Синий) + M18 дымовая граната (Синий) M18 Granada de fumaça (Azul) M18 füstgránát (Kék) M18 Granata fumogena (Blu) @@ -935,9 +934,9 @@ M18 Rauchgranate (Grün) Granada de humo M18 (Verde) Granat dymny M18 (Zielony) - M18 Kouřový Granát (Zelený) + M18 Kouřový Granát (zelený) M18 Grenade fumigène (Verte) - M18 дымовой гранаты (Зелёный) + M18 дымовая граната (Зелёный) M18 Granada de fumaça (Verde) M18 füstgránát (Zöld) M18 Granata fumogena (Verde) @@ -947,9 +946,9 @@ M18 Rauchgranate (Orange) Granada de humo M18 (Naranja) Granat dymny M18 (Pomarańczowy) - M18 Kouřový Granát (Oranžový) + M18 Kouřový Granát (oranžový) M18 Grenade fumigène (Orange) - M18 дымовой гранаты (Оранжевый) + M18 дымовая граната (Оранжевый) M18 Granada de fumaça (Laranja) M18 füstgránát (Narancssárga) M18 Granata fumogena (Arancione) @@ -959,9 +958,9 @@ M18 Rauchgranate (Violett) Granada de humo M18 (Púrpura) Granat dymny M18 (Fioletowy) - M18 Kouřový Granát (Fialový) + M18 Kouřový Granát (fialový) M18 Grenade fumigène (Pourpre) - M18 дымовой гранаты (Пурпурный) + M18 дымовая граната (Пурпурный) M18 Granada de fumaça (Roxa) M18 füstgránát (Lila) M18 Granata fumogena (Viola) @@ -971,9 +970,9 @@ M18 Rauchgranate (Rot) Granada de humo M18 (Rojo) Granat dymny M18 (Czerwony) - M18 Kouřový Granát (Červený) + M18 Kouřový Granát (červený) M18 Grenade fumigène (Rouge) - M18 дымовой гранаты (Красный) + M18 дымовая граната (Красный) M18 Granada de fumaça (Vermelha) M18 füstgránát (Piros) M18 Granata fumogena (Rosso) @@ -983,9 +982,9 @@ M18 Rauchgranate (Gelb) Granada de humo M18 (Amarillo) Granat dymny M18 (Żółty) - M18 Kouřový Granát (Žlutý) + M18 Kouřový Granát (žlutý) M18 Grenade fumigène (Jaune) - M183 дымовой гранаты (Жёлтые) + M183 дымовая граната (Жёлтые) M18 Granada de fumaça (Amarela) M18 füstgránát (Sárga) M18 Granata fumogena (Giallo) @@ -995,7 +994,7 @@ M15 Panzerabwehrmine Mina antitanque M15 Mina przeciwpancerna M15 - M15 Protitanková Mina + Protitanková mina M15 M15 Mine antichar M15 противотанковая мина M15 Mina anticarro @@ -1007,7 +1006,7 @@ VS-50 Antipersonenmine Mina antipersona VS-50 Mina przeciwpiechotna VS-50 - VS-50 Protipěchotní Mina + Protipěchotní mina VS-50 VS-50 Mine antipersonnel à pression VS-50 Противопехотная мина VS-50 Mina antipessoal @@ -1019,7 +1018,7 @@ M26 Antipersonensprungmine Mina antipersona M26 Mina przeciwpiechotna M26 - M26 Šrapnelová Mina + Šrapnelová mina M26 M26 Mine antipersonnel bondissante M26 Противопехотная мина M26 Mina saltadora antipessoal @@ -1031,7 +1030,7 @@ PMR-3 Antipersonenstolperdrahtmine Mina antipersona de alambre PMR-3 Mina przeciwpiechotna PMR-3 - PMR-3 Nástražná Mina + Nástražná mina PMR-3 PMR-3 Mine antipersonnel à traction PMR-3 Противопехотная мина PMR-3 Mina antipessoal (armadilha) @@ -1041,180 +1040,256 @@ P99 P99 + P99 MP-443 Grach MP-443 Grach + MP-443 Grach + MP-443 Grach ACP-C2 ACP-C2 + ACP-C2 + ACP-C2 FNX-45 Tactical FNX-45 Tactical + FNX-45 Tactical + FNX-45 Tactical Chiappa Rhino 60DS Chiappa Rhino 60DS + Chiappa Rhino 60DS + Chiappa Rhino 60DS Taurus Judge Taurus Judge + Taurus Judge + Taurus Judge NLAW NLAW + NLAW + NLAW RPG-32 RPG-32 + RPG-32 + RPG-32 Mini-Spike (AA) Mini-Spike (AA) + Mini-Spike (PL) + Mini-Spike (AA) Mini-Spike (AT) Mini-Spike (AT) + Mini-Spike (PT) + Mini-Spike (AA) MX MX + MX + MX MX (Black) MX (Black) + MX (Czarny) MXC MXC + MXC + MXC MXC (Black) MXC (Black) + MXC (Czarny) MX 3GL MX 3GL + MX 3GL + MX 3GL MX 3GL (Black) MX 3GL (Black) + MX 3GL (Czarny) MX LSW MX LSW + MX LSW + MX LSW MX LSW (Black) MX LSW (Black) + MX LSW (Czarny) MXM MXM + MXM + MXM MXM (Black) MXM (Black) + MXM (Czarny) KT2002 Katiba KT2002 Katiba + KT2002 Katiba + KT2002 Katiba KT2002C Katiba KT2002C Katiba + KT2002C Katiba + KT2002C Katiba KT2002 Katiba KGL KT2002 Katiba KGL + KT2002 Katiba KGL + KT2002 Katiba KGL F2000 (Camo) F2000 (Camo) + F2000 (kamuflaż) F2000 F2000 + F2000 + F2000 F2000 Tactical (Camo) F2000 Tactical (Camo) + F2000 Tactical (kamuflaż) F2000 Tactical F2000 Tactical + F2000 Tactical + F2000 Tactical F2000 EGLM (Camo) F2000 EGLM (Camo) + F2000 EGLM (kamuflaż) F2000 EGLM F2000 EGLM + F2000 EGLM + F2000 EGLM TAR-21 TAR-21 + TAR-21 + TAR-21 CTAR-21 CTAR-21 + CTAR-21 + CTAR-21 TAR-21 EGLM TAR-21 EGLM + TAR-21 EGLM + TAR-21 EGLM Vector SMG Vector SMG + Vector SMG + Vector SMG Scorpion Evo 3 A1 Scorpion Evo 3 A1 + Scorpion Evo 3 A1 + Scorpion Evo 3 A1 CPW CPW + CPW + CPW RFB SDAR RFB SDAR + RFB SDAR + RFB SDAR Stoner 99 LMG Stoner 99 LMG + Stoner 99 LMG + Stoner 99 LMG Negev NG7 Negev NG7 + Negev NG7 + Negev NG7 Mk14 Mod 1 EBR Mk14 Mod 1 EBR + Mk14 Mod 1 EBR + Mk14 Mod 1 EBR GM6 Lynx GM6 Lynx + GM6 Lynx + GM6 Lynx GM6 Lynx (Camo) GM6 Lynx (Camo) + GM6 Lynx (kamuflaż) M200 Intervention M200 Intervention + M200 Intervention + M200 Intervention M200 Intervention (Camo) M200 Intervention (Camo) + M200 Intervention (kamuflaż) VS-121 VS-121 + VS-121 + VS-121 - TODO: MAR-10 .338 @@ -1227,7 +1302,6 @@ TODO: MAR-10 .338 (Sand) - TODO: Mk-I EMR 7.62 mm @@ -1249,7 +1323,6 @@ TODO: NATO DMR (provisional) spotter - TODO: ASP-1 Kir 12.7 mm @@ -1259,7 +1332,6 @@ TODO: ASP-1 Kir 12.7 mm (Tan) - TODO: Cyrus 9.3 mm @@ -1272,7 +1344,6 @@ TODO: Cyrus 9.3 mm (Tan) - TODO: Mk14 7.62 mm @@ -1282,7 +1353,6 @@ TODO: Mk14 7.62 mm (Olive) - TODO: Navid 9.3 mm @@ -1292,7 +1362,6 @@ TODO: Navid 9.3 mm (Tan) - TODO: SPMG .338 @@ -1305,6 +1374,5 @@ TODO: SPMG .338 (Sand) - diff --git a/addons/reload/stringtable.xml b/addons/reload/stringtable.xml index a7873948b1..9f3cee93f1 100644 --- a/addons/reload/stringtable.xml +++ b/addons/reload/stringtable.xml @@ -1,14 +1,27 @@ - - + Check ammo on weapon reload + Prüfe Munition beim Nachladen + Vérifier munitions au rechargement Comprovar munición al recargar el arma + Проверять боезапас при перезарядке + Zkontrolovat munici při nabití + Sprawdź stan amunicji przy przeładowaniu broni + Vérifier les munitions pendant le rechargement d'une arme + Munition beim Nachladen prüfen Check the ammo in your new magazine on magazine reload. + Prüfe nachgeladenes Magazin + Vérifie les munitions disponibles dans le nouveau chargeur Comprueva la munición del nuevo cargador al recargar. + Проверяет количество патронов в новом магазине при перезарядке. + Kontroluje munice při nabití nového zásobníku. + Pokaż stan amunicji w nowym magazynku przy przeładowaniu broni + Vérifier les munitions dans votre nouveau chargeur au rechargement de vos chargeurs. + Munition im neuen Magazin beim Magazinfüllen prüfen Check Ammo @@ -36,11 +49,23 @@ Link belt + Gurt herstellen + Attacher bande Enlazar cinta + Сцепить ленты + Spojit pás munice + Podłącz taśmę + Gurt anhängen Linking belt... + Stelle Gurt her.... + Attachement de la bande .. Enlazando cinta... + Сцепка лент ... + Spojuji pás... + Podłączanie taśmy... + Gurt anhängen... diff --git a/addons/reloadlaunchers/stringtable.xml b/addons/reloadlaunchers/stringtable.xml index 87ebbe4b75..a7be29cc96 100644 --- a/addons/reloadlaunchers/stringtable.xml +++ b/addons/reloadlaunchers/stringtable.xml @@ -1,28 +1,40 @@  - Load launcher Panzerabwehr laden Cargar lanzador + Зарядить ПУ + Nabít odpalovač + Załaduj wyrzutnię Loading launcher ... + Chargement du tube ... Panzerabwehr wird geladen ... Cargando lanzador ... + Зарядка ПУ ... + Nabíjím odpalovač ... + Ładowanie wyrzutni ... Launcher loaded + Tube chargé Panzerabwehr geladen Lanzador cargado + ПУ заряжено + Odpalovač nabit + Wyrzutnia załadowana - Load %1 + Chargé %1 Lade %1 Cargar %1 + Загрузка %1 + Nabít %1 + Załadowano %1 - diff --git a/addons/respawn/stringtable.xml b/addons/respawn/stringtable.xml index ae1f5d819f..6a506f5c70 100644 --- a/addons/respawn/stringtable.xml +++ b/addons/respawn/stringtable.xml @@ -3,23 +3,35 @@ Deploy in 5 seconds ... + Déploiement dans 5 secondes ... Wird in 5 Sekunden errichtet ... Desplegando en 5 segundos ... + Возрождение через 5 секунд ... + Rozmieszczenie za 5 sekund ... Rallypoint deployed + Point de ralliement déployé Rallypoint errichtet Punto de reunión desplegado + Точка сбора установлена + Punkt zbiórki rozmieszczony Teleported to Base + Téléporté à la base Zur Basis teleportiert Teletransportado a base + Телепорт на базу + Przeteleportowano do bazy Teleported to Rallypoint + Téléporté au point de ralliement Zum Rallypoint teleportiert Teletransportado al punto de reunión + Телепорт на точку сбора + Przeteleportowano do punktu zbiórki diff --git a/addons/safemode/XEH_postInit.sqf b/addons/safemode/XEH_postInit.sqf index ff6a76d834..aa13029547 100644 --- a/addons/safemode/XEH_postInit.sqf +++ b/addons/safemode/XEH_postInit.sqf @@ -1,6 +1,8 @@ // by esteldunedain #include "script_component.hpp" +if (!hasInterface) exitWith {}; + //["Soldier", {_player = ACE_player; if (currentWeapon _player in (_player getVariable [QGVAR(safedWeapons), []])) then {[false] call FUNC(setSafeModeVisual)}] call EFUNC(common,addInfoDisplayEventHandler); //@todo addEventHandler infoDisplayChanged with select 1 == "Soldier" diff --git a/addons/safemode/stringtable.xml b/addons/safemode/stringtable.xml index 9684babfdf..cb74ef060e 100644 --- a/addons/safemode/stringtable.xml +++ b/addons/safemode/stringtable.xml @@ -4,6 +4,7 @@ Safe Mode + Mode de sécurité Waffe sichern Seguro puesto Bezpiecznik @@ -13,6 +14,7 @@ Take off Safety + Retirer le cran de sureté Waffe entsichern Quitar seguro Zwolnij bezpiecznik @@ -22,6 +24,7 @@ Put on Safety + Mettre le cran de sureté Waffe gesichert Poner seguro Zabezpiecz broń @@ -31,6 +34,7 @@ Took off Safety + Enlever le cran de sureté Waffe entsichert Seguro quitado Odbezpieczono broń @@ -39,4 +43,4 @@ Снят с предохранителя - \ No newline at end of file + diff --git a/addons/switchunits/stringtable.xml b/addons/switchunits/stringtable.xml index 842bf89127..007b37b24f 100644 --- a/addons/switchunits/stringtable.xml +++ b/addons/switchunits/stringtable.xml @@ -1,8 +1,10 @@  + Switched unit + Unité à transférer Einheit gewechselt Юнит переключен Prohozená jednotka @@ -11,11 +13,12 @@ This unit is too close to the enemy. + Cette unité est trop près d'un ennemi. Diese Einheit ist zu nah am Feind. - Юнит слишком близок к противнику + Юнит слишком близок к противнику. Tato jednotka je moc blízko k nepříteli. Ta jednostka jest zbyt blisko przeciwnika. Esta unidad está demasiado cerca del enemigo. - + \ No newline at end of file diff --git a/addons/vector/XEH_postInit.sqf b/addons/vector/XEH_postInit.sqf index 8bbf7d7aa6..0969a4285d 100644 --- a/addons/vector/XEH_postInit.sqf +++ b/addons/vector/XEH_postInit.sqf @@ -1,4 +1,6 @@ // by commy2 #include "script_component.hpp" +if (!hasInterface) exitWith {}; + #include "initKeybinds.sqf" diff --git a/addons/vector/initKeybinds.sqf b/addons/vector/initKeybinds.sqf index 1e186f36ca..31fb3bbd1b 100644 --- a/addons/vector/initKeybinds.sqf +++ b/addons/vector/initKeybinds.sqf @@ -3,9 +3,9 @@ ["ACE3", QGVAR(AzimuthKey), localize "STR_ACE_Vector_AzimuthKey", { // Conditions: canInteract - if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false}; + if !([ACE_player, objNull, ["isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; // Conditions: specific - if !(currentWeapon ACE_player == "ACE_Vector" && {ACE_player == cameraOn} && {cameraView == "GUNNER"}) exitWith {false}; + if !(currentWeapon ACE_player == "ACE_Vector" && {cameraView == "GUNNER"}) exitWith {false}; // prevent holding down if (GETGVAR(isDownStateKey1,false)) exitWith {false}; @@ -20,7 +20,7 @@ GVAR(isDownStateKey1) = false; // Conditions: canInteract - if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false}; + if !([ACE_player, objNull, ["isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; // Statement ["azimuth"] call FUNC(onKeyUp); @@ -32,9 +32,9 @@ ["ACE3", QGVAR(DistanceKey), localize "STR_ACE_Vector_DistanceKey", { // Conditions: canInteract - if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false}; + if !([ACE_player, objNull, ["isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; // Conditions: specific - if !(currentWeapon ACE_player == "ACE_Vector" && {ACE_player == cameraOn} && {cameraView == "GUNNER"}) exitWith {false}; + if !(currentWeapon ACE_player == "ACE_Vector" && {cameraView == "GUNNER"}) exitWith {false}; // prevent holding down if (GETGVAR(isDownStateKey2,false)) exitWith {false}; @@ -49,7 +49,7 @@ GVAR(isDownStateKey2) = false; // Conditions: canInteract - if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false}; + if !([ACE_player, objNull, ["isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false}; // Statement ["distance"] call FUNC(onKeyUp); diff --git a/addons/vector/stringtable.xml b/addons/vector/stringtable.xml index 7a27cf272e..2a5f29b509 100644 --- a/addons/vector/stringtable.xml +++ b/addons/vector/stringtable.xml @@ -1,5 +1,5 @@  - + @@ -32,7 +32,7 @@ Vector - Tecla de acimut Vector - Touche Azimuth Vector - Azymut - Vector - Zobrazit Azimut + Vector - Zobrazit azimut Vector - Tasto Azimuth Vector - Tecla de Azimute Vector - Irányszög gomb diff --git a/addons/weaponselect/stringtable.xml b/addons/weaponselect/stringtable.xml index dd65d3a4d9..bdac2fbc65 100644 --- a/addons/weaponselect/stringtable.xml +++ b/addons/weaponselect/stringtable.xml @@ -1,14 +1,21 @@  - Display text on grenade throw + Zeige Text beim Granatwurf Mostrar texto al lanzar granada + Показывать текст при броске + Zobrazí text při hodu granátem + Wyświetl tekst przy rzucie granatem Display a hint or text on grenade throw. + Zeige Hinweis oder Text beim Granatwurf Muestra una notificación o texto al lanzar granada + Показывать текст или подсказку при броске гранаты. + Zobrazí upozornění nebo text při hodu granátem. + Wyświetla powiadomienie lub tekst przy rzucie granatem. Select Pistol @@ -144,6 +151,7 @@ Grenade %1 + Grenade %1 Granate %1 Granada %1 Granat %1 @@ -153,6 +161,7 @@ Ready Grenade + Grenade Prête Granate nehmen Granada lista Przygotuj granat @@ -165,7 +174,7 @@ Explosive Granate auswählen Seleccionar granada de fragmenación Wybierz granat odłamkowy - Sélectionner grenade à fragmentation + Sélectionner une grenade à fragmentation Repeszgránát Kiválasztása Zvolit Výbušný Granát Selecionar Granada de Fragmentação @@ -228,7 +237,7 @@ Už nejsou žádné ostatní granáty Não há outras granadas restantes Nessun'altra granata rimanente. - Невзрывоопасные гранаты закончились + Летальные гранаты закончились No grenade selected diff --git a/addons/wep_javelin/$PBOPREFIX$ b/addons/wep_javelin/$PBOPREFIX$ deleted file mode 100644 index 311c0dad43..0000000000 --- a/addons/wep_javelin/$PBOPREFIX$ +++ /dev/null @@ -1 +0,0 @@ -z\ace\addons\wep_javelin \ No newline at end of file diff --git a/addons/wep_javelin/XEH_clientInit.sqf b/addons/wep_javelin/XEH_clientInit.sqf deleted file mode 100644 index 1d3b546e39..0000000000 --- a/addons/wep_javelin/XEH_clientInit.sqf +++ /dev/null @@ -1,3 +0,0 @@ -#include "script_component.hpp" - -#include "initKeybinds.sqf" \ No newline at end of file diff --git a/addons/wep_javelin/functions/fnc_onOpticDraw.sqf b/addons/wep_javelin/functions/fnc_onOpticDraw.sqf deleted file mode 100644 index 586f4cb99e..0000000000 --- a/addons/wep_javelin/functions/fnc_onOpticDraw.sqf +++ /dev/null @@ -1,125 +0,0 @@ -//#define DEBUG_MODE_FULL -#include "script_component.hpp" -//TRACE_1("enter", _this); - -#define __TRACKINTERVAL 0.1 // how frequent the check should be. -#define __LOCKONTIME 1.85 // Lock on won't occur sooner -#define __LOCKONTIMERANDOM 0.3 // Deviation in lock on time -#define __SENSORSQUARE 1 // Locking on sensor square side in angles - -private["_args", "_lastTick", "_runTime", "_soundTime", "_lockTime", "_newTarget", "_currentTarget", "_range", "_pos", "_targetArray"]; - -// Reset arguments if we havnt rendered in over a second -_args = uiNamespace getVariable[QGVAR(arguments), [] ]; -if( (count _args) > 0) then { - _lastTick = _args select 0; - if(diag_tickTime - _lastTick > 1) then { - [] call FUNC(onOpticLoad); - }; -}; - -// Pull the arguments -_currentTarget = _args select 1; -_runTime = _args select 2; -_lockTime = _args select 3; -_soundTime = _args select 4; - -// Find a target within the optic range -_newTarget = objNull; - -// Bail on fast movement -if ((velocity ACE_player) distance [0,0,0] > 0.5 && {cameraView == "GUNNER"} && {cameraOn == ACE_player}) exitWith { // keep it steady. - ACE_player switchCamera "INTERNAL"; -}; - -// Refresh the firemode -[] call FUNC(showFireMode); - -// Only start locking on holding tab -if(!GVAR(isLockKeyDown)) exitWith { false }; - -_range = parseNumber (ctrlText __JavelinIGUIRangefinder); -if (_range > 50 && {_range < 2500}) then { - _pos = positionCameraToWorld [0,0,_range]; - _targetArray = _pos nearEntities ["AllVehicles", _range/25]; - if (count (_targetArray) > 0) then { - _newTarget = _targetArray select 0; - }; -}; - -if (isNull _newTarget) then { - _newTarget = cursorTarget; -}; - -if (isNull _newTarget) then { - // No targets found - _currentTarget = objNull; - _lockTime = 0; - - __JavelinIGUISeek ctrlSetTextColor __ColorGray; - __JavelinIGUINFOV ctrlSetTextColor __ColorGreen; - __JavelinIGUITargetingConstrains ctrlShow false; - __JavelinIGUITargetingGate ctrlShow false; - __JavelinIGUITargetingLines ctrlShow false; - - ACE_player setVariable ["ace_missileguidance_target",nil, false]; - - // Disallow fire - //if (ACE_player ammo "Javelin" > 0 || {ACE_player ammo "ACE_Javelin_Direct" > 0}) then {ACE_player setWeaponReloadingTime //[player, "Javelin", 0.2];}; -} else { - if (_newTarget distance ACE_player < 2500 - // && {(call CBA_fnc_getFoV) select 1 > 7} - // && { (currentVisionMode ACE_player == 2)} - ) then { - // Lock on after 3 seconds - if(_currentTarget != _newTarget) then { - TRACE_1("New Target, reseting locking", _newTarget); - _lockTime = diag_tickTime; - _currentTarget = _newTarget; - - playSound "ACE_Javelin_Locking"; - } else { - if(diag_tickTime - _lockTime > 3) then { - TRACE_2("LOCKED!", _currentTarget, _lockTime); - __JavelinIGUISeek ctrlSetTextColor __ColorGreen; - __JavelinIGUINFOV ctrlSetTextColor __ColorNull; - __JavelinIGUITargetingConstrains ctrlShow true; - - ACE_player setVariable["ace_missileguidance_target", _currentTarget, false]; - - if(diag_tickTime > _soundTime) then { - playSound "ACE_Javelin_Locked"; - _soundTime = diag_tickTime + 0.25; - }; - } else { - if(diag_tickTime > _soundTime) then { - playSound "ACE_Javelin_Locking"; - _soundTime = diag_tickTime + 0.25; - }; - }; - }; - } else { - // Something is wrong with our seek - _currentTarget = objNull; - - __JavelinIGUISeek ctrlSetTextColor __ColorGray; - __JavelinIGUINFOV ctrlSetTextColor __ColorGray; - __JavelinIGUITargetingConstrains ctrlShow false; - __JavelinIGUITargetingGate ctrlShow false; - __JavelinIGUITargetingLines ctrlShow false; - - ACE_player setVariable ["ace_missileguidance_target",nil, false]; - }; - -}; - -//TRACE_2("", _newTarget, _currentTarget); - -// Save arguments for next run -_args set[0, diag_tickTime]; -_args set[1, _currentTarget]; -_args set[2, _runTime]; -_args set[3, _lockTime]; -_args set[4, _soundTime]; - -uiNamespace setVariable[QGVAR(arguments), _args ]; \ No newline at end of file diff --git a/addons/wep_javelin/functions/fnc_translateToModelSpace.sqf b/addons/wep_javelin/functions/fnc_translateToModelSpace.sqf deleted file mode 100644 index 12f828769a..0000000000 --- a/addons/wep_javelin/functions/fnc_translateToModelSpace.sqf +++ /dev/null @@ -1,20 +0,0 @@ -//#define DEBUG_MODE_FULL -#include "script_component.hpp" -TRACE_1("enter", _this); - -_object = _this select 0; -_origin = getPosASL _object; -_matrix = _this select 1; -_xVec = _matrix select 0; -_yVec = _matrix select 1; -_zVec = _matrix select 2; - -_offset = _this select 2; - -_x = _offset select 0; -_y = _offset select 1; -_z = _offset select 2; - -_out = (((_xVec vectorMultiply _x) vectorAdd (_yVec vectorMultiply _y)) vectorAdd (_zVec vectorMultiply _z)) vectorAdd _origin; - -_out; \ No newline at end of file diff --git a/addons/wep_javelin/functions/fnc_translateToWeaponSpace.sqf b/addons/wep_javelin/functions/fnc_translateToWeaponSpace.sqf deleted file mode 100644 index 8f85005d48..0000000000 --- a/addons/wep_javelin/functions/fnc_translateToWeaponSpace.sqf +++ /dev/null @@ -1,26 +0,0 @@ -//#define DEBUG_MODE_FULL -#include "script_component.hpp" -TRACE_1("enter", _this); - -_object = _this select 0; -_origin = getPosASL _object; -_matrix = _this select 1; -_xVec = _matrix select 0; -_yVec = _matrix select 1; -_zVec = _matrix select 2; - -_offset = _this select 2; - -_offset = _offset vectorDiff _origin; - -_x = _offset select 0; -_y = _offset select 1; -_z = _offset select 2; - -_out = [ - ((_xVec select 0)*_x) + ((_xVec select 1)*_y) + ((_xVec select 2)*_z), - ((_yVec select 0)*_x) + ((_yVec select 1)*_y) + ((_yVec select 2)*_z), - ((_zVec select 0)*_x) + ((_zVec select 1)*_y) + ((_zVec select 2)*_z) - ]; - -_out; \ No newline at end of file diff --git a/addons/wep_javelin/functions/script_component.hpp b/addons/wep_javelin/functions/script_component.hpp deleted file mode 100644 index fdc194ff7b..0000000000 --- a/addons/wep_javelin/functions/script_component.hpp +++ /dev/null @@ -1 +0,0 @@ -#include "\z\ace\addons\wep_javelin\script_component.hpp" \ No newline at end of file diff --git a/addons/wep_javelin/stringtable.xml b/addons/wep_javelin/stringtable.xml deleted file mode 100644 index a691c750cb..0000000000 --- a/addons/wep_javelin/stringtable.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - Lock Target (Hold) - Lock Target (Hold) - Lock Target (Hold) - Lock Target (Hold) - Lock Target (Hold) - Fijar objetivo (Mantener) - Lock Target (Hold) - - - Cycle Fire Mode - Cycle Fire Mode - Cycle Fire Mode - Cycle Fire Mode - Cycle Fire Mode - Cambiar modo de fuego - Cycle Fire Mode - - - diff --git a/addons/winddeflection/stringtable.xml b/addons/winddeflection/stringtable.xml index a1e67fa0d4..59a07bd33b 100644 --- a/addons/winddeflection/stringtable.xml +++ b/addons/winddeflection/stringtable.xml @@ -1,32 +1,52 @@ - - - - - - Wind Information - Informacje o wietrze - Información del viento - - - Direction: %1 - Kierunek: %1 - Dirección: %1 - - - Speed: %1 m/s - Prędkość: %1 - Velocidad: %1 m/s - - - Weather Information - Informacje o pogodzie - Información meteorológica - - - Humidity: %1% - Wilgotność: %1 - Humedad: %1% - - - + + + + + + Wind Information + Informacje o wietrze + Información del viento + Ветер + Informace o větru + Informations sur le Vent + Windinformationen + + + Direction: %1 + Kierunek: %1 + Dirección: %1 + Направление: %1 + Směr: %1 + Direction : %1 + Richtung: %1 + + + Speed: %1 m/s + Prędkość: %1 + Velocidad: %1 m/s + Скорость: %1 м/с + Rychlost: %1 m/s + Vitesse : %1 m/s + Geschwindigkeit: %1m/s + + + Weather Information + Informacje o pogodzie + Información Meteorológica + Погода + Informace o počasí + Informations sur la Météo + Wetterinformationen + + + Humidity: %1% + Wilgotność: %1 + Humedad: %1% + Влажность: %1% + Vlhkost: %1% + Humidité : %1 + Feuchtigkeit: %1% + + + diff --git a/documentation/development/ace3-config-entries.md b/documentation/development/ace3-config-entries.md index f56285052d..cc0104a8b1 100644 --- a/documentation/development/ace3-config-entries.md +++ b/documentation/development/ace3-config-entries.md @@ -1,7 +1,7 @@ --- layout: wiki title: ACE3 Config Entries -group: dev +group: development parent: wiki order: 2 --- diff --git a/documentation/development/ace3-events-system.md b/documentation/development/ace3-events-system.md index 6b708b01dd..d7c99e558e 100644 --- a/documentation/development/ace3-events-system.md +++ b/documentation/development/ace3-events-system.md @@ -1,7 +1,7 @@ --- layout: wiki title: ACE3 Events System -group: dev +group: development parent: wiki order: 3 --- diff --git a/documentation/development/arma-3-issues.md b/documentation/development/arma-3-issues.md index b6ef063cbc..3b4a6f036b 100644 --- a/documentation/development/arma-3-issues.md +++ b/documentation/development/arma-3-issues.md @@ -1,7 +1,7 @@ --- layout: wiki title: Arma 3 Issues -group: dev +group: development parent: wiki order: 6 --- @@ -18,6 +18,8 @@ Keeping track of Arma 3 issues that need to be fixed. If you want to support us * [commy2: 0021443: Unexpected behavior of += array in configs](http://feedback.arma3.com/view.php?id=21443) * [commy2: 0022671: setVariable is not always JIP persistent](http://feedback.arma3.com/view.php?id=22671) * [CorruptedHeart: 0022318: Can no longer use "MenuBack" shortcut in AddAction](http://feedback.arma3.com/view.php?id=22318) +* [James2464: 0023725: All Environment Rocks Should Have PhysX LODs](http://feedback.arma3.com/view.php?id=23725) +* [Jaynus: 0023679: Display event handler return values for mouse buttons should be respected](http://feedback.arma3.com/view.php?id=23679) **Resolved:** diff --git a/documentation/development/arma-3-scheduler-and-our-practices.md b/documentation/development/arma-3-scheduler-and-our-practices.md index 90646b3b4a..bef0224819 100644 --- a/documentation/development/arma-3-scheduler-and-our-practices.md +++ b/documentation/development/arma-3-scheduler-and-our-practices.md @@ -1,7 +1,7 @@ --- layout: wiki title: Arma 3 Scheduler And Our Practices -group: dev +group: development parent: wiki order: 8 --- diff --git a/documentation/development/coding-guidelines.md b/documentation/development/coding-guidelines.md index c3517dec1d..f72263eeaa 100644 --- a/documentation/development/coding-guidelines.md +++ b/documentation/development/coding-guidelines.md @@ -1,7 +1,7 @@ --- layout: wiki title: Coding Guidelines -group: dev +group: development parent: wiki order: 1 --- diff --git a/documentation/development/extension-guidelines.md b/documentation/development/extension-guidelines.md index b56349e82b..0558d49d5e 100644 --- a/documentation/development/extension-guidelines.md +++ b/documentation/development/extension-guidelines.md @@ -1,7 +1,7 @@ --- layout: wiki title: Extension Guidelines -group: dev +group: development parent: wiki order: 9 --- diff --git a/documentation/development/fragmentation-configuration.md b/documentation/development/fragmentation-configuration.md index ab0baa0612..17ff36fa13 100644 --- a/documentation/development/fragmentation-configuration.md +++ b/documentation/development/fragmentation-configuration.md @@ -1,7 +1,7 @@ --- layout: wiki title: Fragmentation Configuration -group: dev +group: development parent: wiki order: 7 --- diff --git a/documentation/development/how-to-translate-ace3.md b/documentation/development/how-to-translate-ace3.md index a6f81c3b30..b7e23fa575 100644 --- a/documentation/development/how-to-translate-ace3.md +++ b/documentation/development/how-to-translate-ace3.md @@ -1,7 +1,7 @@ --- layout: wiki title: How to translate ACE3 -group: dev +group: development parent: wiki order: 20 --- diff --git a/documentation/development/merging-pull-requests.md b/documentation/development/merging-pull-requests.md index 2e754efe93..6bc34464f0 100644 --- a/documentation/development/merging-pull-requests.md +++ b/documentation/development/merging-pull-requests.md @@ -1,7 +1,7 @@ --- layout: wiki title: Merging Pull Requests -group: dev +group: development parent: wiki order: 5 --- @@ -33,4 +33,4 @@ Non-trivial pull requests remain open for a minimum of 48 hours, to give all oth If a pull request adds a new addon, or changes something else, like the README, everyone has 72 hours to comment on the changes. After that, one of the team leads ([NouberNou](https://github.com/NouberNou), [KoffeinFlummi](https://github.com/KoffeinFlummi), [Glowbal](https://github.com/Glowbal)) will merge it. -Trivial changes such as spelling fixes can be merged immediately by any contributor. \ No newline at end of file +Trivial changes such as spelling fixes can be merged immediately by any contributor. diff --git a/documentation/development/modularity-and-pbo-structure.md b/documentation/development/modularity-and-pbo-structure.md index b992455db7..ad1194e39c 100644 --- a/documentation/development/modularity-and-pbo-structure.md +++ b/documentation/development/modularity-and-pbo-structure.md @@ -1,7 +1,7 @@ --- layout: wiki title: Modularity And PBO Structure -group: dev +group: development parent: wiki order: 4 --- diff --git a/documentation/development/setting-up-the-development-environment.md b/documentation/development/setting-up-the-development-environment.md index 3d0f0b1937..0fbc0793f2 100644 --- a/documentation/development/setting-up-the-development-environment.md +++ b/documentation/development/setting-up-the-development-environment.md @@ -1,7 +1,7 @@ --- layout: wiki title: Setting Up The Development Environment -group: dev +group: development parent: wiki order: 0 --- diff --git a/documentation/missionmaker/modules.md b/documentation/missionmaker/modules.md index 1ea5b6c4eb..0b0f13f8d6 100644 --- a/documentation/missionmaker/modules.md +++ b/documentation/missionmaker/modules.md @@ -1,7 +1,7 @@ --- layout: wiki title: Modules -group: missionMaker +group: missionmaker order: 5 parent: wiki --- diff --git a/extras/assets/icons/Icons_Actions.psd b/extras/assets/icons/Icons_Actions.psd new file mode 100644 index 0000000000..616ab7a7fa Binary files /dev/null and b/extras/assets/icons/Icons_Actions.psd differ diff --git a/extras/assets/icons/png/Icon_Actions/disarm.png b/extras/assets/icons/png/Icon_Actions/disarm.png new file mode 100644 index 0000000000..1bf8de1548 Binary files /dev/null and b/extras/assets/icons/png/Icon_Actions/disarm.png differ diff --git a/extras/assets/icons/png/Icon_Module_Ambient_Sounds_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_Ambient_Sounds_ca.png similarity index 100% rename from extras/assets/icons/png/Icon_Module_Ambient_Sounds_ca.png rename to extras/assets/icons/png/Icon_Module/Icon_Module_Ambient_Sounds_ca.png diff --git a/extras/assets/icons/png/Icon_Module_BFTracking_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_BFTracking_ca.png similarity index 100% rename from extras/assets/icons/png/Icon_Module_BFTracking_ca.png rename to extras/assets/icons/png/Icon_Module/Icon_Module_BFTracking_ca.png diff --git a/extras/assets/icons/png/Icon_Module_CheckPBO_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_CheckPBO_ca.png similarity index 100% rename from extras/assets/icons/png/Icon_Module_CheckPBO_ca.png rename to extras/assets/icons/png/Icon_Module/Icon_Module_CheckPBO_ca.png diff --git a/extras/assets/icons/png/Icon_Module_Explosives_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_Explosives_ca.png similarity index 100% rename from extras/assets/icons/png/Icon_Module_Explosives_ca.png rename to extras/assets/icons/png/Icon_Module/Icon_Module_Explosives_ca.png diff --git a/extras/assets/icons/png/Icon_Module_FriendlyFire_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_FriendlyFire_ca.png similarity index 100% rename from extras/assets/icons/png/Icon_Module_FriendlyFire_ca.png rename to extras/assets/icons/png/Icon_Module/Icon_Module_FriendlyFire_ca.png diff --git a/extras/assets/icons/png/Icon_Module_Hearing_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_Hearing_ca.png similarity index 100% rename from extras/assets/icons/png/Icon_Module_Hearing_ca.png rename to extras/assets/icons/png/Icon_Module/Icon_Module_Hearing_ca.png diff --git a/extras/assets/icons/png/Icon_Module_Interaction_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_Interaction_ca.png similarity index 100% rename from extras/assets/icons/png/Icon_Module_Interaction_ca.png rename to extras/assets/icons/png/Icon_Module/Icon_Module_Interaction_ca.png diff --git a/extras/assets/icons/png/Icon_Module_LSD_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_LSD_ca.png similarity index 100% rename from extras/assets/icons/png/Icon_Module_LSD_ca.png rename to extras/assets/icons/png/Icon_Module/Icon_Module_LSD_ca.png diff --git a/extras/assets/icons/png/Icon_Module_Make_Unit_Surrender_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_Make_Unit_Surrender_ca.png similarity index 100% rename from extras/assets/icons/png/Icon_Module_Make_Unit_Surrender_ca.png rename to extras/assets/icons/png/Icon_Module/Icon_Module_Make_Unit_Surrender_ca.png diff --git a/extras/assets/icons/png/Icon_Module_Map_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_Map_ca.png similarity index 100% rename from extras/assets/icons/png/Icon_Module_Map_ca.png rename to extras/assets/icons/png/Icon_Module/Icon_Module_Map_ca.png diff --git a/extras/assets/icons/png/Icon_Module_Medical_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_Medical_ca.png similarity index 100% rename from extras/assets/icons/png/Icon_Module_Medical_ca.png rename to extras/assets/icons/png/Icon_Module/Icon_Module_Medical_ca.png diff --git a/extras/assets/icons/png/Icon_Module_NameTags_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_NameTags_ca.png similarity index 100% rename from extras/assets/icons/png/Icon_Module_NameTags_ca.png rename to extras/assets/icons/png/Icon_Module/Icon_Module_NameTags_ca.png diff --git a/extras/assets/icons/png/Icon_Module_Rallypoint_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_Rallypoint_ca.png similarity index 100% rename from extras/assets/icons/png/Icon_Module_Rallypoint_ca.png rename to extras/assets/icons/png/Icon_Module/Icon_Module_Rallypoint_ca.png diff --git a/extras/assets/icons/png/Icon_Module_Respawn_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_Respawn_ca.png similarity index 100% rename from extras/assets/icons/png/Icon_Module_Respawn_ca.png rename to extras/assets/icons/png/Icon_Module/Icon_Module_Respawn_ca.png diff --git a/extras/assets/icons/png/Icon_Module_SwitchUnits_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_SwitchUnits_ca.png similarity index 100% rename from extras/assets/icons/png/Icon_Module_SwitchUnits_ca.png rename to extras/assets/icons/png/Icon_Module/Icon_Module_SwitchUnits_ca.png diff --git a/extras/assets/icons/png/Icon_Module_VehicleKey_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_VehicleKey_ca.png similarity index 100% rename from extras/assets/icons/png/Icon_Module_VehicleKey_ca.png rename to extras/assets/icons/png/Icon_Module/Icon_Module_VehicleKey_ca.png diff --git a/extras/assets/icons/png/Icon_Module_VehicleLock_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_VehicleLock_ca.png similarity index 100% rename from extras/assets/icons/png/Icon_Module_VehicleLock_ca.png rename to extras/assets/icons/png/Icon_Module/Icon_Module_VehicleLock_ca.png diff --git a/extras/assets/icons/png/Icon_Module_Wind_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_Wind_ca.png similarity index 100% rename from extras/assets/icons/png/Icon_Module_Wind_ca.png rename to extras/assets/icons/png/Icon_Module/Icon_Module_Wind_ca.png diff --git a/extras/assets/icons/png/Icon_Module_microDAGR_ca.png b/extras/assets/icons/png/Icon_Module/Icon_Module_microDAGR_ca.png similarity index 100% rename from extras/assets/icons/png/Icon_Module_microDAGR_ca.png rename to extras/assets/icons/png/Icon_Module/Icon_Module_microDAGR_ca.png diff --git a/tools/make.py b/tools/make.py index cdd2de22ed..65f447bff9 100644 --- a/tools/make.py +++ b/tools/make.py @@ -675,7 +675,6 @@ See the make.cfg file for additional build options. if not build_successful: print_error("pboProject return code == " + str(ret)) print_error("Module not successfully built/signed.") - input("Press Enter to continue...") print ("Resuming build...") continue diff --git a/tools/make64.py b/tools/make64.py index 61dee96310..0382bb9179 100644 --- a/tools/make64.py +++ b/tools/make64.py @@ -675,7 +675,6 @@ See the make.cfg file for additional build options. if not build_successful: print_error("pboProject return code == " + str(ret)) print_error("Module not successfully built/signed.") - input("Press Enter to continue...") print ("Resuming build...") continue