Merge remote-tracking branch 'upstream/master'

This commit is contained in:
SilentSpike 2015-06-22 00:37:28 +01:00
commit 378b39db77
151 changed files with 2827 additions and 525 deletions

View File

@ -4,11 +4,11 @@
</p>
<p align="center">
<a href="https://github.com/acemod/ACE3/releases">
<img src="https://img.shields.io/badge/Version-3.0.1-blue.svg"
<img src="https://img.shields.io/badge/Version-3.1.1-blue.svg"
alt="ACE version">
</a>
<a href="https://github.com/acemod/ACE3/releases/download/v3.0.1/ace3_3.0.1.zip">
<img src="http://img.shields.io/badge/Download-40.9_MB-green.svg"
<a href="https://github.com/acemod/ACE3/releases/download/v3.1.1/ace3_3.1.1.zip">
<img src="http://img.shields.io/badge/Download-51.7_MB-green.svg"
alt="ACE download">
</a>
<a href="https://github.com/acemod/ACE3/issues">

Binary file not shown.

Binary file not shown.

View File

@ -30,142 +30,166 @@
<Polish>Zaawansowana balistyka</Polish>
<Spanish>Balística avanzada</Spanish>
<German>Erweiterte Ballistik</German>
<Czech>Pokročilá balistika</Czech>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_enabled_DisplayName">
<English>Advanced Ballistics</English>
<Polish>Zaawansowana balistyka</Polish>
<Spanish>Balística avanzada</Spanish>
<German>Erweiterte Ballistik</German>
<Czech>Pokročilá balistika</Czech>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_enabled_Description">
<English>Enables advanced ballistics</English>
<Polish>Aktywuje zaawansowaną balistykę</Polish>
<Spanish>Activa la balística avanzada</Spanish>
<German>Aktiviert die erweiterte Ballistik</German>
<Czech>Aktivuje pokročilou balistiku</Czech>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulateForSnipers_DisplayName">
<English>Enabled For Snipers</English>
<Spanish>Activada para francotiradores</Spanish>
<Polish>Akt. dla snajperów</Polish>
<German>Für Scharfschützen aktiviert</German>
<Czech>Povoleno pro odstřelovače</Czech>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulateForSnipers_Description">
<English>Enables advanced ballistics for non local snipers (when using high power optics)</English>
<Spanish>Activa la balística avanzada para francotiradores no locales (cuando se usa una mira telescópica)</Spanish>
<Polish>Aktywuje zaawansowaną balistykę dla nielokalnych snajperów (kiedy używają optyki)</Polish>
<German>Aktiviert die erweiterte Ballistik für nicht lokale Scharfschützen (bei Benutzung von Optiken mit starker Vergrößerung)</German>
<Czech>Aktivuje pokročilou balistiku pro nelokální odstřelovače (když používá výkonnou optiku)</Czech>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulateForGroupMembers_DisplayName">
<English>Enabled For Group Members</English>
<Spanish>Activada para miembros de grupo</Spanish>
<Polish>Akt. dla czł. grupy</Polish>
<German>Für Gruppenmitglieder aktiviert</German>
<Czech>Povoleno pro členy skupiny</Czech>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulateForGroupMembers_Description">
<English>Enables advanced ballistics for non local group members</English>
<Spanish>Activada la balística avanzada para miembros de grupo no locales</Spanish>
<Polish>Aktywuje zaawansowaną balistykę dla nielokalnych członków grupy</Polish>
<German>Aktiviert die erweiterte Ballistik für nicht lokale Gruppenmitglieder</German>
<Czech>Aktivuje pokročilou balistiku pro nelokální členy skupiny</Czech>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulateForEveryone_DisplayName">
<English>Enabled For Everyone</English>
<Spanish>Activada para todos</Spanish>
<Polish>Akt. dla wszystkich</Polish>
<German>Für jeden aktiviert</German>
<Czech>Povoleno pro všechny</Czech>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulateForEveryone_Description">
<English>Enables advanced ballistics for all non local players (enabling this may degrade performance during heavy firefights in multiplayer)</English>
<Spanish>Activada la balística avanzada para todos los jugadores no locales (activarlo puede degradar el rendimiento durante grandes tiroteos en multijugador).</Spanish>
<Polish>Aktywuje zaawansowaną balistykę dla wszystkich nielokalnych graczy (aktywacja tej opcji może spodowować spory spadek wydajności podczas ciężkiej wymiany ognia)</Polish>
<German>Aktiviert die erweiterte Ballistik für alle nicht lokalen Spieler (das Aktivieren dieser Funktion kann zur Beeinträchtigung des Spielerlebnisses im Multiplayer führen)</German>
<Czech>Aktivovat pokročilou balistiku pro všechny nelokální hráče (aktivace této možnosti způsobuje pokles snímu za sekundu během těžké přestřelky v multiplayeru)</Czech>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_alwaysSimulateForGroupMembers_DisplayName">
<English>Always Enabled For Group Members</English>
<Polish>Zawsze akt. dla czł. grupy</Polish>
<Spanish>Siempre activada para miembros de grupo</Spanish>
<German>Für Gruppenmitglieder immer aktiviert</German>
<Czech>Vždy povoleno pro členy skupiny</Czech>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_alwaysSimulateForGroupMembers_Description">
<English>Always enables advanced ballistics when a group member fires</English>
<Polish>Aktywuje zaawansowaną balistykę dla wszystkich członków grupy</Polish>
<Spanish>Activada la balística avanzada siempre cuando miembros de grupo disparan</Spanish>
<German>Aktiviert die erweiterte Ballistik immer, wenn ein Gruppenmitglied schießt</German>
<Czech>Aktivuje pokročilou balistiku pro členy skupiny</Czech>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_disabledInFullAutoMod_DisplayName">
<English>Disabled In FullAuto Mode</English>
<Polish>Wył. podczas ognia auto.</Polish>
<Spanish>Desactivada en modo automático</Spanish>
<German>Beim vollautomatischen Feuern deaktiviert</German>
<Czech>Zakázáno v automatickém režimu střelby</Czech>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_disabledInFullAutoMod_Description">
<English>Disables the advanced ballistics during full auto fire</English>
<Polish>Dezaktywuje zaawansowaną balistykę podczas ognia automatycznego</Polish>
<Spanish>Desactivada la balística avanzada durante el fuego automático</Spanish>
<German>Deaktiviert die erweiterte Ballistik beim vollautomatischen Feuern</German>
<Czech>Zákáže pokročilou balistiku během střelby v režimu automat</Czech>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_ammoTemperatureEnabled_DisplayName">
<English>Enable Ammo Temperature Simulation</English>
<Polish>Symulacja temp. amunicji</Polish>
<Spanish>Activar simulación de temperatura de munición</Spanish>
<German>Simulation der Munitionstemperatur aktivieren</German>
<Czech>Povolit simulaci teploty munice</Czech>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_ammoTemperatureEnabled_Description">
<English>Muzzle velocity varies with ammo temperature</English>
<Polish>Prędkość wylotowa pocisku jest zależna od temperatury amunicji</Polish>
<Spanish>La velocidad de salida varía con la temperatura de la munición</Spanish>
<German>Munitionstemperatur hat Einfluss auf die Mündungsgeschwindigkeit</German>
<Czech>Úsťová rychlost je závislá na teplotě munice</Czech>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_barrelLengthInfluenceEnabled_DisplayName">
<English>Enable Barrel Length Simulation</English>
<Polish>Symulacja długości lufy</Polish>
<Spanish>Habilitar la simulación de longitud del cañón</Spanish>
<German>Simulation der Lauflänge aktivieren</German>
<Czech>Povolit simulaci délky hlavně</Czech>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_barrelLengthInfluenceEnabled_Description">
<English>Muzzle velocity varies with barrel length</English>
<Polish>Prędkość wylotowa pocisku jest zależna od długości lufy</Polish>
<Spanish>La velocidad de salidal varía con la longitud del cañón</Spanish>
<German>Lauflänge beeinflusst Mündungsgeschwindigkeit</German>
<Czech>Úsťová rychlost je závislá na délce hlavně</Czech>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_bulletTraceEnabled_DisplayName">
<English>Enable Bullet Trace Effect</English>
<Polish>Efekt smugi pocisku</Polish>
<Spanish>Activar el efecto trazador de la bala</Spanish>
<German>Geschossspureffekt aktivieren</German>
<Czech>Povolit efekt trasírek</Czech>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_bulletTraceEnabled_Description">
<English>Enables a bullet trace effect to high caliber bullets (only visible when looking through high power optics)</English>
<Polish>Aktywuje efekt smugi pocisku dla pocisków wysokokalibrowych (widoczne tylko podczas patrzenia przez optykę)</Polish>
<Spanish>Activa el efecto trazador de la balas de gran calibre (solo visible cuando se mira a través de una mira telescópica)</Spanish>
<German>Aktiviere Geschossspureffekt für hohe Kaliber (bei Benutzung von Optiken mit starker Vergrößerung)</German>
<Czech>Aktivuje efekt trasírek z vysokokaliberních zbraní (viditelné pouze skrze výkonnou optiku)</Czech>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulationInterval_DisplayName">
<English>Simulation Interval</English>
<Polish>Interwał symulacji</Polish>
<Spanish>Intervalo de simulación</Spanish>
<German>Simulationsintervall</German>
<Czech>Interval simulace</Czech>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulationInterval_Description">
<English>Defines the interval between every calculation step</English>
<Polish>Określa interwał pomiędzy każdym krokiem kalkulacji</Polish>
<Spanish>Define el intervalo entre cada cálculo</Spanish>
<German>Legt das Intervall zwischen den Berechnungsschritten fest</German>
<Czech>Určuje interval mezi každým výpočtem</Czech>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulationRadius_DisplayName">
<English>Simulation Radius</English>
<Polish>Zasięg symulacji</Polish>
<Spanish>Radio de simulación</Spanish>
<German>Simulationsradius</German>
<Czech>Rozsah simulace</Czech>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_simulationRadius_Description">
<English>Defines the radius around the player (in meters) at which advanced ballistics are applied to projectiles</English>
<Polish>Określa obszar naokoło gracza (w metrach), na którym zaawansowana balistyka jest aplikowana dla pocisków</Polish>
<Spanish>Define el radio alrededor del jugador (en metros) en el cual se aplica la balística avanzada a los proyectiles</Spanish>
<German>Gibt den Radius (in Metern) um den Spieler an, bei dem die erweiterte Ballistik auf Geschosse angewendet wird</German>
<Czech>Určuje oblast kolem hráče (v metrech), kde je pokročilá balistika použita na projektil</Czech>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_Description">
<English></English>
<Polish>Moduł ten pozwala aktywować zaawansowaną balistykę biorącą przy obliczeniach trajektorii lotu pocisku pod uwagę takie rzeczy jak temperatura powietrza, ciśnienie atmosferyczne, wilgotność powietrza, siły Coriolisa i Eotvosa, grawitację a także broń z jakiej wykonywany jest strzał oraz rodzaj amunicji. Wszystko to sprowadza się na bardzo dokładne odwzorowanie balistyki.</Polish>
<Czech>Tento modul umožňuje aktivovat pokročilou balistiku, která vypočítává trajektorii kulky a bere do úvahy věci jako je teplota vzduchu, atmosférický tlak, vlhkost vzduchu, gravitaci, typ munice a zbraň, ze které je náboj vystřelen. To vše přispívá k velmi přesné balistice.</Czech>
</Key>
</Package>
</Project>
</Project>

BIN
addons/apl/data/plech.paa Normal file

Binary file not shown.

View File

@ -11,4 +11,26 @@
false
},
{false},
[0, [false, false, false]], false, 0] call CBA_fnc_addKeybind; // (empty default key)
[0, [false, false, false]], false, 0] call CBA_fnc_addKeybind; // (empty default key)
//Add deviceKey entry:
private ["_conditonCode", "_toggleCode", "_closeCode"];
_conditonCode = {
[] call FUNC(can_show);
};
_toggleCode = {
// Conditions: canInteract
if !([ACE_player, objNull, ["notOnMap", "isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {};
if (GVAR(active)) exitWith {
closeDialog 0;
};
// Statement
[] call FUNC(create_dialog);
};
_closeCode = {
if (GVAR(active)) exitWith {
closeDialog 0;
};
};
[(localize LSTRING(Name)), QUOTE(PATHTOF(UI\ATRAG_Icon.paa)), _conditonCode, _toggleCode, _closeCode] call EFUNC(common,deviceKeyRegisterNew);

View File

@ -60,7 +60,7 @@ if (toLower _itemName in ["b_ir_grenade", "o_ir_grenade", "i_ir_grenade"]) then
detach _attachedObject;
_attachedObject setPos ((getPos _unit) vectorAdd [0, 0, -1000]);
// Delete attached item after 0.5 seconds
[{deleteVehicle (_this select 0)}, [_attachedObject], 0.5, 0] call EFUNC(common,waitAndExecute);
[{deleteVehicle (_this select 0)}, [_attachedObject], 2] call EFUNC(common,waitAndExecute);
} else {
// Delete attached item
deleteVehicle _attachedObject;

View File

@ -1597,6 +1597,7 @@
<Polish>[ACE] Skrzynka z amunicją</Polish>
<Spanish>[ACE] Caja de suministros de munición</Spanish>
<German>[ACE] Munitionskiste</German>
<Czech>[ACE] Bedna s municí</Czech>
</Key>
</Package>
</Project>
</Project>

View File

@ -56,15 +56,12 @@ class CfgVehicles {
priority = 2.2;
hotkey = "L";
};
class ACE_FriskPerson {
displayName = CSTRING(FriskPerson);
distance = 2;
condition = QUOTE([ARR_2(_player, _target)] call FUNC(canFriskPerson));
statement = QUOTE([ARR_2(_player, _target)] call FUNC(doFriskPerson));
showDisabled = 0;
//icon = ""; //@todo
priority = 3;
hotkey = "F";
class GVAR(UnloadCaptive) {
displayName = CSTRING(UnloadCaptive);
distance = 4;
condition = QUOTE([ARR_2(_player, _target)] call FUNC(canUnloadCaptive));
statement = QUOTE([ARR_2(_player, _target)] call FUNC(doUnloadCaptive));
priority = 1.2;
};
};
};
@ -111,13 +108,6 @@ class CfgVehicles {
exceptions[] = {"isNotEscorting"}; \
priority = 1.2; \
}; \
class GVAR(UnloadCaptive) { \
displayName = CSTRING(UnloadCaptive); \
distance = 4; \
condition = QUOTE([ARR_2(_player, _target)] call FUNC(canUnloadCaptive)); \
statement = QUOTE([ARR_2(_player, _target)] call FUNC(doUnloadCaptive)); \
priority = 1.2; \
}; \
}; \
};

View File

@ -23,4 +23,6 @@ PARAMS_2(_unit,_target);
(_target getVariable [QGVAR(isHandcuffed), false]) &&
{isNull (attachedTo _target)} &&
{alive _target} &&
{!(_target getVariable ["ACE_isUnconscious", false])}
{!(_target getVariable ["ACE_isUnconscious", false])} &&
{(vehicle _unit) == _unit} &&
{(vehicle _target) == _target}

View File

@ -3,15 +3,14 @@
* Check if the unit can unload a captive from the vehicle.
*
* Arguments:
* 0: Unit that wants to unload a captive <OBJECT>
* 1: A captive. ObjNull for the first escorted captive <OBJECT>
* 2: Vehicle to unload a captive from <OBJECT>
* 0: Unit that wants to unload a captive (player) <OBJECT>
* 1: A captive loaded in a vehicle <OBJECT>
*
* Return Value:
* The return value <BOOL>
*
* Example:
* [player, bob, car1] call ACE_captives_fnc_canUnloadCaptive;
* [player, bob] call ACE_captives_fnc_canUnloadCaptive;
*
* Public: No
*/
@ -19,10 +18,6 @@
private ["_cargo"];
PARAMS_2(_unit,_vehicle);
PARAMS_2(_player,_unit);
_cargo = crew _vehicle; // Can also unload from driver, gunner, commander, turret positions. They shouldn't be there anyway.
_cargo = [_cargo, {_this getVariable [QGVAR(isHandcuffed), false]}] call EFUNC(common,filter);
count _cargo > 0
((vehicle _unit) != _unit) && {_unit getVariable [QGVAR(isHandcuffed), false]}

View File

@ -4,29 +4,18 @@
*
* Arguments:
* 0: Unit that wants to unload a captive <OBJECT>
* 1: Vehicle to unload a captive from. <BOOL>
* 1: A captive loaded in a vehicle <OBJECT>
*
* Return Value:
* Nothing
*
* Example:
* [bob, car] call ACE_captives_fnc_doUnloadCaptive
* [bob, prisoner] call ACE_captives_fnc_doUnloadCaptive
*
* Public: No
*/
#include "script_component.hpp"
PARAMS_2(_unit,_vehicle);
PARAMS_2(_unit,_target);
private ["_cargo", "_target"];
_cargo = crew _vehicle; // Can also unload from driver, gunner, commander, turret positions. They shouldn't be there anyway.
_cargo = [_cargo, {_this getVariable [QGVAR(isHandcuffed), false]}] call EFUNC(common,filter);
if ((count _cargo) > 0) then {
_target = _cargo select 0;
["MoveOutCaptive", [_target], [_target]] call EFUNC(common,targetEvent);
} else {
ERROR("No captive to unload");
};
["MoveOutCaptive", [_target], [_target]] call EFUNC(common,targetEvent);

View File

@ -162,42 +162,50 @@
<Polish>Skapituluj jednostkę</Polish>
<Spanish>Hacer que la unidad se rinda</Spanish>
<German>Einheit kapitulieren lassen</German>
<Czech>Vzdávající se jednotka</Czech>
</Key>
<Key ID="STR_ACE_Captives_ModuleSurrender_Description">
<English>Sync a unit to make them surrender.&lt;br /&gt;Source: ace_captives</English>
<Polish>Zsynchronizuj z jednostką, aby skapitulowała.&lt;br /&gt;Źródło: ace_captives</Polish>
<Spanish>Sincroniza una unidad para hacer que se rinda.&lt;br /&gt;Fuente: ace_captives</Spanish>
<German>Einheit synchronisieren, um sie kapitulieren zu lassen.&lt;br /&gt;Quelle: ace_captives</German>
<Czech>Synchronizuj s jednotkou, která se má vzdát.&lt;br /&gt;Zdroj: ace_captives</Czech>
</Key>
<Key ID="STR_ACE_Captives_ModuleSettings_DisplayName">
<English>Captives Settings</English>
<Polish>Ustawienia więźniów</Polish>
<Spanish>Ajustes de prisioneros</Spanish>
<Czech>Nastavení zajatce</Czech>
</Key>
<Key ID="STR_ACE_Captives_ModuleSettings_Description">
<English>Controls settings for surrender and cable ties</English>
<Polish>Moduł ten kontroluje ustawienia kapitulacji oraz opasek zaciskowych</Polish>
<Spanish>Ajustes de control para rendición y precintos</Spanish>
<Czech>Toto kontroluje nastavení kapitulace a pout</Czech>
</Key>
<Key ID="STR_ACE_Captives_ModuleSettings_handcuffSide_name">
<English>Can handcuff own side</English>
<Polish>Skuwanie sojuszników</Polish>
<Spanish>Se puede esposar el bando propio</Spanish>
<Czech>Může spoutat spolubojovníky</Czech>
</Key>
<Key ID="STR_ACE_Captives_ModuleSettings_handcuffSide_description">
<English>Can players cabletie units on their own side</English>
<Polish>Czy gracze mogą skuwać sojuszników?</Polish>
<Spanish>Pueden los jugadores esposar unidades en su propio bando</Spanish>
<Czech>Mohou hráči spoutat jednotky na své straně</Czech>
</Key>
<Key ID="STR_ACE_Captives_ModuleSettings_allowSurrender_name">
<English>Allow surrendering</English>
<Polish>Pozwól kapitulować</Polish>
<Spanish>Permitir rendición</Spanish>
<Czech>Povolit vzdávání</Czech>
</Key>
<Key ID="STR_ACE_Captives_ModuleSettings_allowSurrender_description">
<English>Players can surrender after holstering their weapon</English>
<Polish>Gracze mogą skapitulować po schowaniu swojej broni do kabury</Polish>
<Spanish>Los jugadores pueden rendirse después de enfundar su arma</Spanish>
<Czech>Hráč se může vzdát poté, co si skryje zbraň</Czech>
</Key>
</Package>
</Project>

View File

@ -41,6 +41,8 @@
["fixFloating", DFUNC(fixFloating)] call FUNC(addEventhandler);
["fixPosition", DFUNC(fixPosition)] call FUNC(addEventhandler);
["unloadPersonEvent", DFUNC(unloadPersonLocal)] call FUNC(addEventhandler);
["lockVehicle", {
_this setVariable [QGVAR(lockStatus), locked _this];
_this lock 2;
@ -101,6 +103,52 @@ if(!isServer) then {
call FUNC(checkFiles);
// Create a pfh to wait until all postinits are ready and settings are initialized
[{
PARAMS_1(_args);
EXPLODE_1_PVT(_args,_waitingMsgSent);
// If post inits are not ready then wait
if !(SLX_XEH_MACHINE select 8) exitWith {};
// If settings are not initialized then wait
if (isNil QGVAR(settings) || {(!isServer) && (isNil QEGVAR(modules,serverModulesRead))}) exitWith {
if (!_waitingMsgSent) then {
_args set [0, true];
diag_log text format["[ACE] Waiting on settings from server"];
};
};
[(_this select 1)] call cba_fnc_removePerFrameHandler;
diag_log text format["[ACE] Settings received from server"];
// Event so that ACE_Modules have their settings loaded:
["InitSettingsFromModules", []] call FUNC(localEvent);
// Load user settings from profile
if (hasInterface) then {
call FUNC(loadSettingsFromProfile);
call FUNC(loadSettingsLocalizedText);
};
diag_log text format["[ACE] Settings initialized"];
//Event that settings are safe to use:
["SettingsInitialized", []] call FUNC(localEvent);
}, 0, [false]] call cba_fnc_addPerFrameHandler;
["SettingsInitialized", {
[
GVAR(checkPBOsAction),
GVAR(checkPBOsCheckAll),
call compile GVAR(checkPBOsWhitelist)
] call FUNC(checkPBOs)
}] call FUNC(addEventHandler);
/***************************************************************/
/***************************************************************/
/***************************************************************/
@ -269,47 +317,41 @@ if(isMultiplayer && { ACE_time > 0 || isNull player } ) then {
}, 0, []] call cba_fnc_addPerFrameHandler;
};
["SettingsInitialized", {
[
GVAR(checkPBOsAction),
GVAR(checkPBOsCheckAll),
call compile GVAR(checkPBOsWhitelist)
] call FUNC(checkPBOs)
}] call FUNC(addEventHandler);
//Device Handler:
GVAR(deviceKeyHandlingArray) = [];
GVAR(deviceKeyCurrentIndex) = -1;
["ACE3 Equipment", QGVAR(openDevice), (localize "STR_ACE_Common_toggleHandheldDevice"),
{
[] call FUNC(deviceKeyFindValidIndex);
if (GVAR(deviceKeyCurrentIndex) == -1) exitWith {false};
[] call ((GVAR(deviceKeyHandlingArray) select GVAR(deviceKeyCurrentIndex)) select 3);
true
},
{false},
[0xC7, [false, false, false]], false] call cba_fnc_addKeybind; //Home Key
["ACE3 Equipment", QGVAR(closeDevice), (localize "STR_ACE_Common_closeHandheldDevice"),
{
[] call FUNC(deviceKeyFindValidIndex);
if (GVAR(deviceKeyCurrentIndex) == -1) exitWith {false};
[] call ((GVAR(deviceKeyHandlingArray) select GVAR(deviceKeyCurrentIndex)) select 4);
true
},
{false},
[0xC7, [false, true, false]], false] call cba_fnc_addKeybind; //CTRL + Home Key
["ACE3 Equipment", QGVAR(cycleDevice), (localize "STR_ACE_Common_cycleHandheldDevices"),
{
[1] call FUNC(deviceKeyFindValidIndex);
if (GVAR(deviceKeyCurrentIndex) == -1) exitWith {false};
_displayName = ((GVAR(deviceKeyHandlingArray) select GVAR(deviceKeyCurrentIndex)) select 0);
_iconImage = ((GVAR(deviceKeyHandlingArray) select GVAR(deviceKeyCurrentIndex)) select 1);
[_displayName, _iconImage] call FUNC(displayTextPicture);
true
},
{false},
[0xC7, [true, false, false]], false] call cba_fnc_addKeybind; //SHIFT + Home Key
GVAR(commonPostInited) = true;
// Create a pfh to wait until all postinits are ready and settings are initialized
[{
PARAMS_1(_args);
EXPLODE_1_PVT(_args,_waitingMsgSent);
// If post inits are not ready then wait
if !(SLX_XEH_MACHINE select 8) exitWith {};
// If settings are not initialized then wait
if (isNil QGVAR(settings)) exitWith {
if (!_waitingMsgSent) then {
_args set [0, true];
diag_log text format["[ACE] Waiting on settings from server"];
};
};
[(_this select 1)] call cba_fnc_removePerFrameHandler;
diag_log text format["[ACE] Settings received from server"];
// Event so that ACE_Modules have their settings loaded:
["InitSettingsFromModules", []] call FUNC(localEvent);
// Load user settings from profile
if (hasInterface) then {
call FUNC(loadSettingsFromProfile);
call FUNC(loadSettingsLocalizedText);
};
diag_log text format["[ACE] Settings initialized"];
//Event that settings are safe to use:
["SettingsInitialized", []] call FUNC(localEvent);
}, 0, [false]] call cba_fnc_addPerFrameHandler;

View File

@ -11,7 +11,6 @@ PREP(addCanInteractWithCondition);
PREP(addLineToDebugDraw);
PREP(addSetting);
PREP(addToInventory);
PREP(adminKick);
PREP(ambientBrightness);
PREP(applyForceWalkStatus);
PREP(ASLToPosition);
@ -35,6 +34,8 @@ PREP(currentChannel);
PREP(debug);
PREP(debugModule);
PREP(defineVariable);
PREP(deviceKeyFindValidIndex);
PREP(deviceKeyRegisterNew);
PREP(disableAI);
PREP(disableUserInput);
PREP(displayIcon);

View File

@ -1,8 +0,0 @@
// by commy2
#include "script_component.hpp"
private "_name";
_name = name (_this select 0);
[_name, "{if (serverCommandAvailable '#kick') then {serverCommand format['#kick %1', _this]}}"] call FUNC(execRemoteFnc);

View File

@ -67,24 +67,26 @@ if (!isServer) then {
//[_error, "{systemChat _this}"] call FUNC(execRemoteFnc);
diag_log text _error;
_text = composeText [lineBreak, parseText format ["<t align='center'>%1</t>", _text]];
if (_mode < 2) then {
_text = composeText [lineBreak, parseText format ["<t align='center'>%1</t>", _text]];
_rscLayer = "ACE_RscErrorHint" call BIS_fnc_rscLayer;
_rscLayer cutRsc ["ACE_RscErrorHint", "PLAIN", 0, true];
_rscLayer = "ACE_RscErrorHint" call BIS_fnc_rscLayer;
_rscLayer cutRsc ["ACE_RscErrorHint", "PLAIN", 0, true];
disableSerialization;
_ctrlHint = uiNamespace getVariable "ACE_ctrlErrorHint";
_ctrlHint ctrlSetStructuredText _text;
disableSerialization;
_ctrlHint = uiNamespace getVariable "ACE_ctrlErrorHint";
_ctrlHint ctrlSetStructuredText _text;
if (_mode == 0) then {
sleep 10;
_rscLayer cutFadeOut 0.2;
if (_mode == 0) then {
sleep 10;
_rscLayer cutFadeOut 0.2;
};
};
if (_mode == 2) then {
sleep 10;
waitUntil {alive player};
[player] call FUNC(adminKick);
waitUntil {alive player}; // To be able to show list if using checkAll
_text = composeText [parseText format ["<t align='center'>%1</t>", _text]];
["[ACE] ERROR", _text, {findDisplay 46 closeDisplay 0}] call FUNC(errorMessage);
};
};
};

View File

@ -0,0 +1,45 @@
/*
* Author: PabstMirror
* Finds next valid index for the device array.
*
* Arguments:
* 0: Offset from currentIndex (use 1 to find next valid after current) or a displayName string <STRING>or<NUMBER><OPTIONAL>
*
* Return Value:
* The new index (-1 if no valid) <NUMBER>
*
* Example:
* [] call ace_common_fnc_deviceKeyFindValidIndex
* ["kestral4500"] call ace_common_fnc_deviceKeyFindValidIndex
*
* Public: No
*/
#include "script_component.hpp"
DEFAULT_PARAM(0,_searchOffsetOrName,0);
private ["_validIndex", "_offsetBy", "_realIndex", "_offset"];
_validIndex = -1;
if ((typeName _searchOffsetOrName) == "STRING") then {
{
if ((_x select 0) == _searchOffsetOrName) exitWith {
_validIndex = _forEachIndex;
};
} forEach GVAR(deviceKeyHandlingArray);
} else {
if ((count GVAR(deviceKeyHandlingArray)) > 0) then {
_baseIndex = if (GVAR(deviceKeyCurrentIndex) == -1) then {0} else {GVAR(deviceKeyCurrentIndex) + _searchOffsetOrName};
for "_offset" from _baseIndex to ((count GVAR(deviceKeyHandlingArray)) - 1 + _baseIndex) do {
_realIndex = _offset % (count GVAR(deviceKeyHandlingArray));
if ([] call ((GVAR(deviceKeyHandlingArray) select _realIndex) select 2)) exitWith {
_validIndex = _realIndex;
};
};
};
};
GVAR(deviceKeyCurrentIndex) = _validIndex;
GVAR(deviceKeyCurrentIndex)

View File

@ -0,0 +1,25 @@
/*
* Author: PabstMirror
* Finds next valid index for the device array.
*
* Arguments:
* 0: Localized Device Display Name <STRING>
* 1: Image <STRING>
* 2: Condtion Code (do they have the device) <CODE>
* 3: Toggle Code (on home press) <CODE>
* 4: Close Code (on ctrl-home press) <CODE>
*
* Return Value:
* Nothing
*
* Example:
* [(localize "STR_ACE_microdagr_itemName"), QUOTE(PATHTOF(images\microDAGR_item.paa)), _conditionCode, _toggleCode, _closeCode] call ace_common_fnc_deviceKeyRegisterNew
*
* Public: No
*/
#include "script_component.hpp"
PARAMS_5(_displayName,_iconImage,_conditionCode,_toggleCode,_closeCode);
GVAR(deviceKeyHandlingArray) pushBack [_displayName,_iconImage,_conditionCode,_toggleCode,_closeCode];
[] call FUNC(deviceKeyFindValidIndex);

View File

@ -1,15 +1,21 @@
/*
* Author: bux578, commy2
* Author: bux578, commy2, akalegman
*
* Checks if a unit is a player / curator controlled unit.
* Currently returns false for non-local remote controlled zeus units. (Remotes from another zeus machine)
*
* Arguments:
* 0: unit to be checked (object)
* 1: exclude remote controlled units (boolean)
*
* Return Value:
* Bool: is unit a player?
*/
#include "script_component.hpp"
isPlayer (_this select 0) || {_this select 0 == call FUNC(player)}
private ["_unit", "_excludeRemoteControlled"];
_unit = _this select 0;
_excludeRemoteControlled = if (count _this > 1) then {_this select 1} else {false};
isPlayer _unit || (!_excludeRemoteControlled && {_unit == call FUNC(player)})

View File

@ -15,21 +15,41 @@
#define GROUP_SWITCH_ID QUOTE(FUNC(loadPerson))
private ["_vehicle", "_loaded", "_emptyPos"];
PARAMS_1(_unit);
_vehicle = vehicle _unit;
private ["_loaded", "_emptyPos"];
PARAMS_2(_unit,_vehicle);
if (_vehicle == _unit) exitwith {false;};
if !(speed _vehicle <1 && (((getpos _vehicle) select 2) < 2)) exitwith {false;};
if (driver _vehicle == _unit) exitwith {TRACE_1("Exiting on Failed Driver Check", driver _vehicle == _unit); false;};
TRACE_1("Vehicle Check", driver _vehicle == _unit);
if !(speed _vehicle <1 && (((getPos _vehicle) select 2) < 2)) exitwith {TRACE_1("Exiting on Failed speed check", getPosASL _vehicle == _unit); false;};
TRACE_1("getPosASL Vehicle Check", getPos _vehicle);
_emptyPos = ((getPos _vehicle) findEmptyPosition [0, 10, typeof _unit]);
if (count _emptyPos == 0) exitwith {false};
_emptyPos = ((getPosASL _vehicle) call EFUNC(common,ASLtoPosition) findEmptyPosition [0, 13, typeof _unit]);
if (count _emptyPos == 0) exitwith {false}; //consider displaying text saying there are no safe places to exit the vehicle
_unit setPos _emptyPos;
unassignVehicle _unit;
if (!alive _unit) then {
_unit action ["Eject", vehicle _unit];
};
[_unit] orderGetIn false;
TRACE_1("Ejecting", alive _unit);
_unit action ["Eject", vehicle _unit];
[ {
private "_anim";
PARAMS_2(_unit,_emptyPos);
_unit setPosASL (_emptyPos call EFUNC(common,PositiontoASL));
if (!([_unit] call FUNC(isAwake))) then {
TRACE_1("Check if isAwake", [_unit] call FUNC(isAwake));
if (driver _unit == _unit) then {
_anim = [_unit] call EFUNC(common,getDeathAnim);
[_unit, _anim, 1, true] call EFUNC(common,doAnimation);
[{
_unit = _this select 0;
_anim = _this select 1;
if ((_unit getVariable "ACE_isUnconscious") and (animationState _unit != _anim)) then {
[_unit, _anim, 2, true] call EFUNC(common,doAnimation);
};
}, [_unit, _anim], 0.5, 0] call EFUNC(common,waitAndExecute);
};
};
},[_unit,_emptyPos], 0.5, 0] call EFUNC(common,waitAndExecute);
[_unit, false, GROUP_SWITCH_ID, side group _unit] call FUNC(switchToGroupSide);
@ -37,8 +57,4 @@ _loaded = _vehicle getvariable [QGVAR(loaded_persons),[]];
_loaded = _loaded - [_unit];
_vehicle setvariable [QGVAR(loaded_persons),_loaded,true];
if (!([_unit] call FUNC(isAwake))) then {
[_unit,([_unit] call FUNC(getDeathAnim)), 1, true] call FUNC(doAnimation);
};
true;
true

View File

@ -475,78 +475,103 @@
<Polish>Sprawdzaj PBO</Polish>
<Spanish>Comprobar PBOs</Spanish>
<German>Überprüfe PBOs</German>
<Czech>Zkontrolovat PBO</Czech>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Description">
<English></English>
<Polish>Sprawdzaj spójność addonów z serwerem</Polish>
<Spanish>Este módulo verifica la integridad de los addons con los que iniciamos el simulador</Spanish>
<German>Dieses Modul überprüft ob jeder Spieler die richtigen PBO-Dateien hat.</German>
<Czech>Zjistit addon který je v souladu se serverem</Czech>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Action_DisplayName">
<English>Action</English>
<Polish>Akcja</Polish>
<Spanish>Acción</Spanish>
<German>Aktion</German>
<Czech>Akce</Czech>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Action_Description">
<English>What to do with people who do not have the right PBOs?</English>
<Polish>Co zrobić z graczami, którzy nie mają właściwych PBO?</Polish>
<Spanish>¿Qué hacer con la gente que no tiene correctamente los PBOs?</Spanish>
<German>Was soll mit Leuten passieren, die nicht die richtigen PBOs haben?</German>
<Czech>Co udělat s lidmi, co nemají správné addony?</Czech>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Action_WarnOnce">
<English>Warn once</English>
<Polish>Ostrzeż raz</Polish>
<Spanish>Avisar una vez</Spanish>
<German>Einmal verwarnen</German>
<Czech>Upozornit jednou</Czech>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Action_WarnPerm">
<English>Warn (permanent)</English>
<Polish>Ostrzeżenie (permanentne)</Polish>
<Spanish>Avisar (permanente)</Spanish>
<German>Immer verwarnen</German>
<Czech>Upozornit (permanentně)</Czech>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Action_Kick">
<English>Kick</English>
<Polish>Kick</Polish>
<Spanish>Expulsar</Spanish>
<German>Kicken</German>
<Czech>Vyhodit</Czech>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_CheckAll_DisplayName">
<English>Check all addons</English>
<Polish>Sprawdź wsz. addony</Polish>
<Spanish>Comprobar todos los addons</Spanish>
<German>Alle Addons überprüfen</German>
<Czech>Zkontrolovat všechny addony</Czech>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_CheckAll_Description">
<English>Check all addons instead of only those of ACE?</English>
<Polish>Sprawdzaj wszystkie addony czy tylko te z ACE?</Polish>
<Spanish>Comprobar todos los addons en vez de solo los del ACE</Spanish>
<German>Alle Addons anstatt nur ACE überprüfen?</German>
<Czech>Zkontrolovat všechny addony namísto jen těch od ACE?</Czech>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Whitelist_DisplayName">
<English>Whitelist</English>
<Polish>Biała lista</Polish>
<Spanish>Lista blanca</Spanish>
<German>Whitelist</German>
<Czech>Seznam povolených</Czech>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Whitelist_Description">
<English>What addons are allowed regardless?</English>
<Polish>Jakie addony są dozwolone?</Polish>
<Spanish>Qué addons están permitidos igualmente</Spanish>
<German>Welche Addons werden dennoch erlaubt?</German>
<Czech>Jaké addony jsou povoleny?</Czech>
</Key>
<Key ID="STR_ACE_Common_LSDVehicles_DisplayName">
<English>LSD Vehicles</English>
<Polish>Pojazdy LSD</Polish>
<Spanish>Vehículos LSD</Spanish>
<German>LSD-Fahrzeuge</German>
<Czech>LSD vozidla</Czech>
</Key>
<Key ID="STR_ACE_Common_LSDVehicles_Description">
<English>Adds LSD effect to synchronized vehicle</English>
<Polish>Dodaje efekt LSD pod zsynchronizowany pojazd</Polish>
<Spanish>Añade el efecto LSD al vehículo sincronizado</Spanish>
<German>Fügt einen LSD-Effekt zum synchronisierten Fahrzeug hinzu</German>
<Czech>Přidá LSD efekt pro synchronizované vozidla</Czech>
</Key>
<Key ID="STR_ACE_Common_toggleHandheldDevice">
<English>Toggle Handheld Device</English>
<Spanish>Seleccionar dispositivo de mano</Spanish>
</Key>
<Key ID="STR_ACE_Common_closeHandheldDevice">
<English>Close Handheld Device</English>
<Spanish>Cerrar dispositivo de mano</Spanish>
</Key>
<Key ID="STR_ACE_Common_cycleHandheldDevices">
<English>Cycle Handheld Devices</English>
<Spanish>Cambiar dispositivos de mano</Spanish>
</Key>
</Package>
</Project>
</Project>

View File

@ -1,8 +1,13 @@
#include "script_component.hpp"
if (!hasInterface) exitWith {};
#include "initKeybinds.sqf"
GVAR(outputPFH) = -1;
GVAR(run) = false;
GVAR(hidden) = true;
GVAR(menuRun) = false;
GVAR(useDegrees) = true;
GVAR(updateInterval) = 0.5;

View File

@ -69,7 +69,7 @@ GVAR(showOutOfSpace) = false;
GVAR(PWR) = false;
GVAR(menuRun) = true;
[{
if (!dialog || GVAR(PWR)) exitWith {
if (!dialog || GVAR(PWR) || !GVAR(menuRun)) exitWith {
closeDialog 266860;
GVAR(menuRun) = false;
[_this select 1] call CBA_fnc_removePerFrameHandler;

View File

@ -27,11 +27,14 @@
__background ctrlSetText QUOTE(PATHTOF(UI\dagr_gps.paa));
[{
if (GVAR(outputPFH) != -1) exitWith {};
GVAR(outputPFH) = [{
private ["_pos", "_mapSize", "_gridConfig", "_offsetX", "_offsetY", "_stepX", "_stepY", "_xgrid", "_ygrid", "_xcoord", "_ycoord", "_speed", "_dagrHeading", "_dagrGrid", "_dagrElevation", "_dagrSpeed", "_dagrTime", "_elevation"];
// Abort Condition
if !(GVAR(run) && [ACE_player, "ACE_DAGR"] call EFUNC(common,hasItem)) exitWith {
GVAR(outputPFH) = -1;
135471 cutText ["", "PLAIN"];
[_this select 1] call CBA_fnc_removePerFrameHandler;
};

View File

@ -27,11 +27,14 @@
__background ctrlSetText QUOTE(PATHTOF(UI\dagr_wp.paa));
[{
if (GVAR(outputPFH) != -1) exitWith {};
GVAR(outputPFH) = [{
private ["_pos", "_mapSize", "_gridConfig", "_offsetX", "_offsetY", "_stepX", "_stepY", "_xGrid", "_yGrid", "_xCoord", "_yCoord", "_dagrHeading", "_dagrGrid", "_bearing", "_MYpos", "_WPpos", "_dagrDistance", "_distance"];
// Abort Condition
if !(GVAR(run) && [ACE_player, "ACE_DAGR"] call EFUNC(common,hasItem)) exitWith {
GVAR(outputPFH) = -1;
135471 cutText ["", "PLAIN"];
[_this select 1] call CBA_fnc_removePerFrameHandler;
};

View File

@ -14,27 +14,41 @@
*/
#include "script_component.hpp"
if (cameraView == "GUNNER") exitWith {};
GVAR(run) = !GVAR(run);
if (GVAR(run)) then {
switch (toUpper GVAR(displaySelection)) do {
case "WP" : {
call FUNC(outputWP);
};
case "VECTOR" : {
call FUNC(outputVector);
};
case "DATA" : {
call FUNC(outputData);
};
if (GVAR(menuRun) && dialog) then {
GVAR(menuRun) = false;
closeDialog 0;
};
GVAR(hidden) = true;
[{
EXPLODE_1_PVT(_this select 0,_vehicle);
if (!GVAR(run) || (!alive ACE_player) || (cameraView == "GUNNER") || (vehicle ACE_player != _vehicle)) exitWith {
if (!GVAR(run) || (!alive ACE_player) || (vehicle ACE_player != _vehicle)) exitWith {
GVAR(run) = false;
135471 cutText ["", "PLAIN"];
[_this select 1] call CBA_fnc_removePerFrameHandler;
};
if (cameraView == "GUNNER") then {
if (!GVAR(hidden)) then {
GVAR(hidden) = true;
135471 cutText ["", "PLAIN"];
};
} else {
if (GVAR(hidden)) then {
GVAR(hidden) = false;
switch (toUpper GVAR(displaySelection)) do {
case "WP" : {
call FUNC(outputWP);
};
case "VECTOR" : {
call FUNC(outputVector);
};
case "DATA" : {
call FUNC(outputData);
};
};
};
};
}, 0.1, [vehicle ACE_player]] call CBA_fnc_addPerFrameHandler;
};

View File

@ -3,8 +3,8 @@
{
// Conditions: canInteract
if !([ACE_player, objNull, ["notOnMap", "isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false};
if !([_player, "ACE_DAGR"] call EFUNC(common,hasItem)) exitWith {false};
if !([ACE_player, "ACE_DAGR"] call EFUNC(common,hasItem)) exitWith {false};
// Statement
if (!GVAR(menuRun)) then {
[] call FUNC(menuInit);
@ -14,17 +14,46 @@
true
},
{false},
[199, [false, true, false]], false] call cba_fnc_addKeybind; // (CTRL + Home)
[0, [false, true, false]], false] call cba_fnc_addKeybind; // (empty default key)
["ACE3 Equipment", QGVAR(ToggleKey), "Toggle DAGR",
{
// Conditions: canInteract
if !([ACE_player, objNull, ["notOnMap", "isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false};
if !([_player, "ACE_DAGR"] call EFUNC(common,hasItem)) exitWith {false};
if !([ACE_player, "ACE_DAGR"] call EFUNC(common,hasItem)) exitWith {false};
// Statement
[] call FUNC(toggleOverlay);
true
},
{false},
[199, [false, false, false]], false] call cba_fnc_addKeybind; // (Home)
[0, [false, false, false]], false] call cba_fnc_addKeybind; // (empty default key)
//Add deviceKey entry:
private ["_conditonCode", "_toggleCode", "_closeCode"];
_conditonCode = {
([ACE_player, "ACE_DAGR"] call EFUNC(common,hasItem));
};
_toggleCode = {
// Conditions: canInteract
if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {};
// Statement
[] call FUNC(toggleOverlay);
if (!GVAR(run)) then {
[] call FUNC(menuInit);
};
};
_closeCode = {
// Statement
if (GVAR(run)) then {
//If dispaly is open, close it:
[] call FUNC(toggleOverlay);
};
if (dialog && GVAR(menuRun)) then {
//If dialog is open, close it:
GVAR(menuRun) = false;
closeDialog 0;
};
};
["DAGR", QUOTE(PATHTOF(UI\DAGR_Icon.paa)), _conditonCode, _toggleCode, _closeCode] call EFUNC(common,deviceKeyRegisterNew);

View File

@ -50,4 +50,4 @@
<Russian>Нести</Russian>
</Key>
</Package>
</Project>
</Project>

View File

@ -7,4 +7,10 @@ class ACE_Settings {
value = 1;
typeName = "BOOL";
};
class GVAR(ExplodeOnDefuse) {
displayName = CSTRING(ExplodeOnDefuse_DisplayName);
description = CSTRING(ExplodeOnDefuse_Description);
value = 1;
typeName = "BOOL";
};
};

View File

@ -69,25 +69,52 @@ class CfgAmmo {
/*class DemoCharge_Remote_Ammo_Scripted: DemoCharge_Remote_Ammo;
class SatchelCharge_Remote_Ammo_Scripted: SatchelCharge_Remote_Ammo;*/
class IEDUrbanBig_Remote_Ammo: PipeBombBase {
mineTrigger = "RangeTrigger";
triggerWhenDestroyed = 1;
soundTrigger[] = {"A3\Sounds_F\weapons\mines\mech_trigger_1", 0.562341, 1, 40};
ACE_explodeOnDefuse = 0.02;
soundTrigger[] = {"A3\Sounds_F\weapons\mines\mech_trigger_1", 0.8, 1, 40};
};
class IEDLandBig_Remote_Ammo: PipeBombBase {
class IEDUrbanBig_Command_Ammo: IEDUrbanBig_Remote_Ammo {
mineTrigger = "RemoteTrigger";
};
class IEDUrbanBig_Range_Ammo: IEDUrbanBig_Remote_Ammo {
mineTrigger = "RangeTrigger";
triggerWhenDestroyed = 1;
soundTrigger[] = {"A3\Sounds_F\weapons\mines\mech_trigger_1", 0.562341, 1, 40};
};
class IEDUrbanSmall_Remote_Ammo: PipeBombBase {
mineTrigger = "RangeTrigger";
triggerWhenDestroyed = 1;
soundTrigger[] = {"A3\Sounds_F\weapons\mines\mech_trigger_1", 0.562341, 1, 40};
ACE_explodeOnDefuse = 0.02;
soundTrigger[] = {"A3\Sounds_F\weapons\mines\mech_trigger_1", 0.8, 1, 40};
};
class IEDUrbanSmall_Command_Ammo: IEDUrbanSmall_Remote_Ammo {
mineTrigger = "RemoteTrigger";
};
class IEDLandSmall_Remote_Ammo: PipeBombBase {
class IEDUrbanSmall_Range_Ammo: IEDUrbanSmall_Remote_Ammo {
mineTrigger = "RangeTrigger";
};
class IEDLandBig_Remote_Ammo: PipeBombBase {
triggerWhenDestroyed = 1;
soundTrigger[] = {"A3\Sounds_F\weapons\mines\mech_trigger_1", 0.562341, 1, 40};
ACE_explodeOnDefuse = 0.02;
soundTrigger[] = {"A3\Sounds_F\weapons\mines\mech_trigger_1", 0.8, 1, 40};
};
class IEDLandBig_Command_Ammo: IEDLandBig_Remote_Ammo {
mineTrigger = "RemoteTrigger";
};
class IEDLandBig_Range_Ammo: IEDLandBig_Remote_Ammo {
mineTrigger = "RangeTrigger";
};
class IEDLandSmall_Remote_Ammo: PipeBombBase {
triggerWhenDestroyed = 1;
ACE_explodeOnDefuse = 0.02;
soundTrigger[] = {"A3\Sounds_F\weapons\mines\mech_trigger_1", 0.8, 1, 40};
};
class IEDLandSmall_Command_Ammo: IEDLandSmall_Remote_Ammo {
mineTrigger = "RemoteTrigger";
};
class IEDLandSmall_Range_Ammo: IEDLandSmall_Remote_Ammo {
mineTrigger = "RangeTrigger";
};
};

View File

@ -44,10 +44,11 @@ class CfgMagazines {
ACE_SetupObject = "ACE_Explosives_Place_Claymore";
ACE_DelayTime = 1.5;
class ACE_Triggers {
SupportedTriggers[] = {"Command"};
SupportedTriggers[] = {"Command", "MK16_Transmitter"};
class Command {
FuseTime = 0.5;
FuseTime = 0.5;
};
class MK16_Transmitter: Command {};
};
};
@ -95,45 +96,51 @@ class CfgMagazines {
};
};
};
class IEDUrbanBig_Remote_Mag: DemoCharge_Remote_Mag {
ACE_SetupObject = "ACE_Explosives_Place_IEDUrbanBig";
class ACE_Triggers {
SupportedTriggers[] = {"Command","DeadmanSwitch", "Cellphone", "PressurePlate"};
SupportedTriggers[] = {"Command", "DeadmanSwitch", "Cellphone", "PressurePlate"};
class Command {
FuseTime = 0.5;
ammo = "IEDUrbanBig_Command_Ammo";
};
class DeadmanSwitch:Command {};
class Cellphone:Command {};
class PressurePlate {
displayName = CSTRING(SLAME_Magnetic);
displayName = CSTRING(PressurePlate);
digDistance = 0;
ammo = "IEDUrbanBig_Remote_Ammo";
ammo = "IEDUrbanBig_Range_Ammo";
pitch = 0;
};
};
};
};
class IEDLandBig_Remote_Mag: IEDUrbanBig_Remote_Mag {
ACE_SetupObject = "ACE_Explosives_Place_IEDLandBig";
class ACE_Triggers: ACE_Triggers {
class Command: Command {
ammo = "IEDLandBig_Command_Ammo";
};
class PressurePlate: PressurePlate {
ammo = "IEDLandBig_Remote_Ammo";
ammo = "IEDLandBig_Range_Ammo";
};
};
};
class IEDUrbanSmall_Remote_Mag: DemoCharge_Remote_Mag {
ACE_SetupObject = "ACE_Explosives_Place_IEDUrbanSmall";
class ACE_Triggers {
SupportedTriggers[] = {"Command","DeadmanSwitch", "Cellphone", "PressurePlate"};
SupportedTriggers[] = {"Command", "DeadmanSwitch", "Cellphone", "PressurePlate"};
class Command {
FuseTime = 0.5;
ammo = "IEDUrbanSmall_Command_Ammo";
};
class DeadmanSwitch: Command {};
class Cellphone: Command {};
class PressurePlate {
displayName = CSTRING(SLAME_Magnetic);
displayName = CSTRING(PressurePlate);
digDistance = 0;
ammo = "IEDUrbanSmall_Remote_Ammo";
ammo = "IEDUrbanSmall_Range_Ammo";
pitch = 0;
};
};
@ -141,8 +148,11 @@ class CfgMagazines {
class IEDLandSmall_Remote_Mag: IEDUrbanSmall_Remote_Mag {
ACE_SetupObject = "ACE_Explosives_Place_IEDLandSmall";
class ACE_Triggers: ACE_Triggers {
class Command: Command {
ammo = "IEDLandSmall_Command_Ammo";
};
class PressurePlate: PressurePlate {
ammo = "IEDLandSmall_Remote_Ammo";
ammo = "IEDLandSmall_Range_Ammo";
};
};
};

View File

@ -20,6 +20,12 @@ class ACE_ModuleExplosive: ACE_Module {
typeName = "BOOL";
defaultValue = 1;
};
class ExplodeOnDefuse {
displayName = "$STR_ACE_Explosive_ExplodeOnDefuse_DisplayName";
description = "$STR_ACE_Explosive_ExplodeOnDefuse_Description";
typeName = "BOOL";
defaultValue = 1;
};
};
class ModuleDescription {
description = CSTRING(Module_Description);

View File

@ -103,7 +103,7 @@ class CfgVehicles {
statement = "";
insertChildren = QUOTE([ARR_3(_target getVariable QUOTE(QGVAR(class)),_target,_player)] call FUNC(addTriggerActions););
showDisabled = 0;
exceptions[] = {};
exceptions[] = {"isNotSwimming"};
priority = 5;
icon = QUOTE(PATHTOF(UI\Explosives_Menu_ca.paa));
};
@ -114,7 +114,7 @@ class CfgVehicles {
condition = "true";
statement = QUOTE([ARR_2(_player,_target getVariable QUOTE(QGVAR(class)))] call EFUNC(common,addToInventory);deleteVehicle _target;);
showDisabled = 0;
exceptions[] = {};
exceptions[] = {"isNotSwimming"};
priority = 5;
icon = "\A3\ui_f\data\IGUI\Cfg\Actions\Obsolete\ui_action_takemine_ca.paa";
};

View File

@ -15,7 +15,7 @@ class RscEdit;
class Rsc_ACE_CallScreen_Edit:RscEdit {
canModify = 1;
colorBackground[] = {0,0,0,1};
colorBackground[] = {0,0,0,0};
colorText[] = {0,0,0,1};
colorDisabled[] = {1,1,1,0.25};
colorSelection[] = {

View File

@ -17,7 +17,7 @@
#include "script_component.hpp"
EXPLODE_2_PVT(_this,_unit,_explosive);
if (getNumber (ConfigFile >> "CfgAmmo" >> typeof _explosive >> "ACE_explodeOnDefuse") == 1) exitWith {
if (GVAR(ExplodeOnDefuse) && (random 1.0) < getNumber(ConfigFile >> "CfgAmmo" >> typeOf _explosive >> "ACE_explodeOnDefuse")) exitWith {
[_unit, -1, [_explosive, 1], true] call FUNC(detonateExplosive);
};

View File

@ -27,5 +27,7 @@ if !(_activated) exitWith {};
call EFUNC(Common,readSettingFromModule);
[_logic, QGVAR(PunishNonSpecialists),"PunishNonSpecialists"]
call EFUNC(Common,readSettingFromModule);
[_logic, QGVAR(ExplodeOnDefuse),"ExplodeOnDefuse"]
call EFUNC(Common,readSettingFromModule);
diag_log text "[ACE]: Explosive Module Initialized.";

View File

@ -510,35 +510,47 @@
<Polish>System ładunków wybuchowych</Polish>
<Spanish>Sistema de explosivos</Spanish>
<German>Sprengstoffsystem</German>
<Czech>Systém výbušnin</Czech>
</Key>
<Key ID="STR_ACE_Explosives_RequireSpecialist_DisplayName">
<English>Require specialists?</English>
<Polish>Wymagaj specjalistów?</Polish>
<Spanish>¿Requiere especialista?</Spanish>
<German>Benötigt Sprengstoffexperten?</German>
<Czech>Vyžadovat specialistu?</Czech>
</Key>
<Key ID="STR_ACE_Explosives_RequireSpecialist_Description">
<English>Require explosive specialists to disable explosives? Default: No</English>
<Polish>Wymagać saperów do rozbrajania ładunków wybuchowych? Domyślnie: Nie</Polish>
<Spanish>Requiere especialista en explosivos para desactivar explosivos?. Por defecto: No</Spanish>
<German>Benötige Sprengstoffexperte um Sprengladungen zu entschärfen? Standard: Nein</German>
<Czech>Vyžadovat specialistu na zneškodnění výbušniny? Výchozí: Ne</Czech>
</Key>
<Key ID="STR_ACE_Explosives_PunishNonSpecialists_DisplayName">
<English>Punish non-specialists?</English>
<Polish>Karaj nie-specjalistów?</Polish>
<Spanish>¿Penalizar a los no especialistas?</Spanish>
<German>Bestrafe Nicht-Sprengstoffexperten?</German>
<Czech>Potrestat, pokud není specialista?</Czech>
</Key>
<Key ID="STR_ACE_Explosives_PunishNonSpecialists_Description">
<English>Increase the time it takes to complete actions for non-specialists? Default: Yes</English>
<Polish>Zwiększyć ilość wymaganego czasu do ukończenia akcji dla nie-specjalistów? Domyślnie: Tak</Polish>
<Spanish>Aumenta el tiempo que lleva completar acciones para los no especialstas?. Por defecto: Si</Spanish>
<German>Entschärfungszeit für Nicht-Sprengstoffexperten erhöhen? Standard: Ja</German>
<Czech>Zvýšit čas potřebný k dokončení akce pokud není specialista? Výchozí: Ano</Czech>
</Key>
<Key ID="STR_ACE_Explosives_ExplodeOnDefuse_DisplayName">
<English>Explode on defusal?</English>
</Key>
<Key ID="STR_ACE_Explosives_ExplodeOnDefuse_Description">
<English>Enable certain explosives to explode on defusal? Default: Yes</English>
</Key>
<Key ID="STR_ACE_Explosives_Module_Description">
<English></English>
<Polish>Moduł ten pozwala dostosować opcje związane z ładunkami wybuchowymi, ich podkładaniem oraz rozbrajaniem.</Polish>
<German>Dieses Modul erlaubt die Einstellungen für Sprengstoffe zu verändern.</German>
<Czech>Tento modul umoňuje přizpůsobit nastavení týkajících se výbušnin.</Czech>
</Key>
</Package>
</Project>

View File

@ -6,59 +6,69 @@
<Polish>Symulacja fragmentacji</Polish>
<Spanish>Simulación de fragmentación</Spanish>
<German>Splittersimulation</German>
<Czech>Simulace fragmentace</Czech>
</Key>
<Key ID="STR_ACE_Frag_EnableFrag_Desc">
<English>Enable the ACE Fragmentation Simulation</English>
<Spanish>Activa la simulación de fragmentación ACE</Spanish>
<Polish>Aktywuje symulację fragmentacji ACE</Polish>
<German>Aktiviere die ACE-Splittersimulation</German>
<Czech>Povolit ACE simulaci fragmentace</Czech>
</Key>
<Key ID="STR_ACE_Frag_EnableSpall">
<English>Spalling Simulation</English>
<Spanish>Simulación de astillamiento</Spanish>
<Polish>Symulacja odprysków</Polish>
<German>Explosionssimulation</German>
<Czech>Simulace úlomků</Czech>
</Key>
<Key ID="STR_ACE_Frag_EnableSpall_Desc">
<English>Enable the ACE Spalling Simulation</English>
<Spanish>Activa la simulación de astillamiento ACE</Spanish>
<Polish>Aktywuje symulację odprysków ACE</Polish>
<German>Aktiviere ACE-Explosionssimulation</German>
<Czech>Povolit ACE simulaci úlomků</Czech>
</Key>
<Key ID="STR_ACE_Frag_MaxTrack">
<English>Maximum Projectiles Tracked</English>
<Spanish>Máximos proyectiles rastreados</Spanish>
<Polish>Maks. liczba śledzonych pocisków</Polish>
<German>Maximalzahl der verfolgten Projektile</German>
<Czech>Maximální počet sledovaných projektilů</Czech>
</Key>
<Key ID="STR_ACE_Frag_MaxTrack_Desc">
<English>This setting controls the maximum amount of projectiles the fragmentation and spalling system will track at any given time. If more projectiles are fired, they will not be tracked. Lower this setting if you do not want FPS drops at high-count projectile scenarios ( &gt;200 rounds in the air at once)</English>
<Spanish>Este ajuste controla la cantidad máxima de proyectiles del sistema de fragmentación y astillamiento de los que se hará un seguimiento en cualquier momento dado. Si se disparan más proyectiles, no serán rastreados. Baja esta opción si no deseas una bajada de FPS en escenarios con muchos proyectiles (&gt;200 proyectiles en el aire a la vez)</Spanish>
<Polish>To ustawienie kontroluje maksymalną ilość pocisków, jakie fragmentacja i odpryski symulują w danym momencie. Jeżeli więcej pocisków będzie wystrzelonych, wtedy nie będą one śledzone. Zmniejsz tą opcję jeżeli nie chcesz odczuwać spadków FPS podczas ciężkiej wymiany ognia (więcej niż 200 pocisków w powietrzu na raz).</Polish>
<German>Diese Einstellung steuert die maximale Anzahl an Projektilen, die das Splitter- und Explosionssystem gleichzeitig verfolgen wird. Wenn mehr Projektile abgefeuert werden, werden sie nicht verfolgt werden. Diese Einstellung zu verringern, kann FPS-Einbrüche bei Szenarien mit vielen Projektilen verhindern (&gt;200 Objekte gleichzeitig in der Luft)</German>
<Czech>Toto nastavení kontroluje maximální množství projektilů z fragmentace a úlomků, která jsou sledována v dané době. Pokud je vystřeleno více projektilů, tak nebudou sledovány. Snižte toto nastavení pokud si nepřejete propady FPS v situacích, kde je velké množství projektilů ( &gt;200 nábojů najednou ve vzduchu)</Czech>
</Key>
<Key ID="STR_ACE_Frag_MaxTrackPerFrame">
<English>Maximum Projectiles Per Frame</English>
<Spanish>Máximos proyectiles por cuadro</Spanish>
<German>Maximale Anzahl an Projektilen pro Frame</German>
<Polish>Maks. liczba pocisków na klatkę</Polish>
<Czech>Maximální počet projektilů ze jeden snímek</Czech>
</Key>
<Key ID="STR_ACE_Frag_MaxTrackPerFrame_Desc">
<English>The number of spall track calculations to perform in any given frame. This helps spread the FPS impact of tracking spall rounds across multiple frames, limiting its impact even further.</English>
<Polish>Ilość obliczeń wykonywanych przez symulację odprysków w danej klatce. Ta opcja pomaga rozprzestrzenić obliczenia odprysków na więcej klatek, zmniejszając spadek FPS jeszcze bardziej.</Polish>
<German>Gibt die Anzahl der Explosionverfolgungsberechnungen an, die gleichzeitig ausgeführt werden. Das kann dabei helfen den FPS-Einfluss abzuschwächen, wenn Teile über mehrere Frames hinweg verfolgt werden.</German>
<Spanish>El número de cálculos de esquirlas que se hará en cualquier cuadro. Esto ayuda a dispersar el impacto en FPS del seguimiento de esquirlas de balas a través de múltiples cuadros, lo que limita aún más su impacto.</Spanish>
<Czech>Počet úlomků v daném snímku. Toto pomáhá rozšířit FPS dopad sledovaného úlomku napříč více snímky, omezuje jeho vliv ještě více.</Czech>
</Key>
<Key ID="STR_ACE_Frag_EnableDebugTrace">
<English>(SP Only) Frag/Spall Debug Tracing</English>
<Spanish>(Solo SP) Seguimiento de depuración de Fragmentación/Astillamiento </Spanish>
<Polish>(Tylko SP) Wizualny debug odł./odpr.</Polish>
<Czech>(Pouze SP) Debug sledování Frag/Úlomků</Czech>
</Key>
<Key ID="STR_ACE_Frag_EnableDebugTrace_Desc">
<English>(SP Only) Requires a mission/editor restart. Enables visual tracing of fragmentation and spalling rounds in SP game mode only.</English>
<Spanish>(Solo SP) Requiere un reinicio misión/editor. Permite el seguimiento visual de la fragmentación y astillamientos de los proyectiles en modo SP.</Spanish>
<Polish>(Tylko SP) Wymaga restartu misji/edytora. Aktywuje wizualne śledzenie odłamków oraz odprysków w trybie gry Single Player.</Polish>
<German>(nur SP) Splitter-/Explosions-Debugging</German>
<Czech>(Pouze SP) Vyžaduje restart mise/editoru. Aktivuje vizuální stopování fragmentace a úlomů pouze v režimu jednoho hráče.</Czech>
</Key>
</Package>
</Project>

View File

@ -3,6 +3,7 @@ class CfgAmmo {
class FlareBase: FlareCore {
intensity = 20000;
flareSize = 12;
timeToLive = 60;
};
class F_40mm_White: FlareBase {
intensity = 40000;
@ -10,7 +11,7 @@ class CfgAmmo {
};
class F_20mm_White: FlareBase {
intensity = 20000;
flareSize = 12;
flareSize = 6;
};
class F_Signal_Green: FlareBase {
intensity = 20000;
@ -19,6 +20,7 @@ class CfgAmmo {
class Flare_82mm_AMOS_White: FlareCore {
intensity = 80000;
flareSize = 12;
timeToLive = 60;
};
class F_20mm_Red: F_20mm_White {};

View File

@ -11,4 +11,12 @@ class CfgSounds {
sound[] = {QUOTE(PATHTOF(sounds\ACE_earringing_heavy.wav)),8,1.7};
titles[] = {};
};
class ACE_Combat_Deafness {
sound[] = {QUOTE(PATHTOF(sounds\deafness.ogg)),3,1};
titles[] = {};
};
class ACE_Ring_Backblast {
sound[] = {QUOTE(PATHTOF(sounds\backblast_ring.ogg)),1,1};
titles[] = {};
};
};

View File

@ -6,6 +6,13 @@ GVAR(currentDeafness) = 0;
GVAR(newStrength) = 0;
GVAR(playerVehAttenuation) = 1;
GVAR(beep) = false;
GVAR(beep2) = false;
GVAR(time2) = 0;
GVAR(time3) = 0;
GVAR(time4) = 0;
GVAR(earRingingPFH) = -1;
// Spawn volume updating process
[FUNC(updateVolume), 0.1, [] ] call CBA_fnc_addPerFrameHandler;
@ -15,6 +22,14 @@ GVAR(playerVehAttenuation) = 1;
//Reset deafness on respawn (or remote control player switch)
["playerChanged", {
ACE_player setVariable [QGVAR(dv), 0];
ACE_player setVariable [QGVAR(prior), 0];
ACE_player setvariable [QGVAR(deaf), false];
GVAR(beep) = false;
GVAR(beep2) = false;
GVAR(time2) = 0;
GVAR(time3) = 0;
GVAR(time4) = 0;
GVAR(currentDeafness) = 0;
GVAR(newStrength) = 0;
}] call EFUNC(common,addEventhandler);

View File

@ -6,7 +6,7 @@ class CfgPatches {
weapons[] = {"ACE_EarPlugs"};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_interaction"};
author[] = {"KoffeinFlummi", "esteldunedain", "HopeJ", "commy2"};
author[] = {"KoffeinFlummi", "esteldunedain", "HopeJ", "commy2", "Rocko", "Rommel", "Ruthberg"};
authorUrl = "https://github.com/KoffeinFlummi/";
VERSION_CONFIG;
};

View File

@ -1,56 +1,92 @@
/*
* Author: KoffeinFlummi, commy2
* Creates ear ringing effect with set strength.
* Author: KoffeinFlummi, commy2, Rocko, Rommel, Ruthberg
* Ear ringing PFH
*
* Arguments:
* 0: Unit (player) <OBJECT>
* 0: unit <OBJECT>
* 1: strength of ear ringing (Number between 0 and 1) <NUMBER>
*
* Return Value:
* None
*
* Example:
* [clientExplosionEvent] call ace_hearing_fnc_earRinging
* [_unit, _strength] call ace_hearing_fnc_earRinging
*
* Public: No
*/
#include "script_component.hpp"
private ["_unit", "_strength"];
if (GVAR(DisableEarRinging)) exitWith {};
_unit = _this select 0;
_strength = _this select 1;
PARAMS_2(_unit,_strength);
if (isNull _unit) exitWith {};
if (_strength < 0.05) exitWith {};
if (_unit getVariable ["ACE_hasEarPlugsin", false]) then {
_strength = _strength / 4;
};
GVAR(newStrength) = GVAR(newStrength) max _strength;
_unit setVariable [QGVAR(dv), (_unit getVariable [QGVAR(dv), 0]) + _strength];
if (missionNamespace getVariable [QGVAR(isEarRingingPlaying), false]) exitWith {};
if (GVAR(earRingingPFH) != -1) exitWith {};
GVAR(earRingingPFH) = [{
EXPLODE_1_PVT(_this select 0,_unit);
private ["_prior"];
_prior = (_unit getvariable [QGVAR(dv), 0]) min 20;
if (!alive _unit || _prior <= 0) exitWith {
_unit setVariable [QGVAR(dv), 0];
_unit setVariable [QGVAR(prior), 0];
GVAR(beep) = false;
GVAR(beep2) = false;
GVAR(time2) = 0;
GVAR(time3) = 0;
GVAR(time4) = 0;
GVAR(earRingingPFH) = -1;
[_this select 1] call cba_fnc_removePerFrameHandler;
};
if (((_unit getvariable [QGVAR(dv), 0]) - (_unit getvariable [QGVAR(prior), 0])) > 2) then {
if (ACE_time > GVAR(time3)) then {
GVAR(beep2) = false;
};
if (!GVAR(beep2)) then {
playSound "ACE_Combat_Deafness";
GVAR(beep2) = true;
GVAR(time3) = ACE_time + 5;
};
};
_unit setvariable [QGVAR(prior), _prior];
GVAR(volume) = (1 - (_prior / 20)) max 0;
if (_prior > 19.75) then {
_unit setvariable [QGVAR(deaf), true];
} else {
_unit setvariable [QGVAR(deaf), false];
};
if ((_unit getvariable [QGVAR(deaf), false]) && {ACE_time > GVAR(time4)}) then {
playSound "ACE_Combat_Deafness";
GVAR(beep2) = true;
GVAR(time3) = ACE_time + 10;
GVAR(time4) = ACE_time + 30;
};
if (GVAR(DisableEarRinging)) exitWith {};
if (_strength > 0.75) exitWith {
playSound "ACE_EarRinging_Heavy";
GVAR(isEarRingingPlaying) = true;
[
{GVAR(isEarRingingPlaying) = false;}, [], 7.0, 0.25
] call EFUNC(common,waitAndExecute);
};
if (_strength > 0.5) exitWith {
playSound "ACE_EarRinging_Medium";
GVAR(isEarRingingPlaying) = true;
[
{GVAR(isEarRingingPlaying) = false;}, [], 5.0, 0.25
] call EFUNC(common,waitAndExecute);
};
if (_strength > 0.2) exitWith {
playSound "ACE_EarRinging_Weak";
GVAR(isEarRingingPlaying) = true;
GVAR(isEarRingingPlaying) = true;
[
{GVAR(isEarRingingPlaying) = false;}, [], 3.0, 0.25
] call EFUNC(common,waitAndExecute);
};
// Hearing takes longer to return to normal after it hits rock bottom
_unit setvariable [QGVAR(dv), _prior - (0.5 * (GVAR(volume) max 0.1))];
if (_prior > 10) then {
//check if the ringing is already being played
if (ACE_time > GVAR(time2)) then {
GVAR(beep) = false;
};
if (!GVAR(beep)) then {
playSound "ACE_Ring_Backblast";
GVAR(time2) = ACE_time + 22;
GVAR(beep) = true;
};
};
}, 1, [_unit]] call CBA_fnc_addPerFrameHandler;

View File

@ -1,5 +1,5 @@
/*
* Author: KoffeinFlummi, commy2
* Author: KoffeinFlummi, commy2, Ruthberg
* Handles deafness due to explosions going off near the player.
*
* Arguments:
@ -16,12 +16,10 @@
*/
#include "script_component.hpp"
private ["_unit", "_damage", "_strength"];
PARAMS_2(_unit,_damage);
_unit = _this select 0;
_damage = _this select 1;
_strength = (_damage * 2) min 1;
private ["_strength"];
_strength = 0 max _damage;
if (_strength < 0.01) exitWith {};
[{_this call FUNC(earRinging)}, [_unit, _strength], 0.2, 0] call EFUNC(common,waitAndExecute);

View File

@ -21,7 +21,7 @@
*/
#include "script_component.hpp"
private ["_silencer", "_audibleFireCoef", "_audibleFire", "_loudness", "_strength", "_vehAttenuation"];
private ["_silencer", "_audibleFireCoef", "_loudness", "_strength", "_vehAttenuation", "_magazine", "_muzzles", "_weaponMagazines", "_muzzleMagazines", "_ammoType", "_initSpeed", "_ammoConfig", "_caliber", "_parentClasses"];
PARAMS_7(_object,_firer,_distance,_weapon,_muzzle,_mode,_ammo);
@ -30,10 +30,11 @@ if (!GVAR(enableCombatDeafness)) exitWith {};
//Only run if firedNear object is player or player's vehicle:
if ((ACE_player != _object) && {(vehicle ACE_player) != _object}) exitWith {};
if (_weapon in ["Throw", "Put"]) exitWith {};
if (_distance > 50) exitWith {};
_vehAttenuation = if ((ACE_player == (vehicle ACE_player)) || {isTurnedOut ACE_player}) then {1} else {GVAR(playerVehAttenuation)};
if (_distance < 1) then {_distance = 1;};
_distance = 1 max _distance;
_silencer = switch (_weapon) do {
case (primaryWeapon _firer) : {(primaryWeaponItems _firer) select 0};
@ -47,10 +48,51 @@ if (_silencer != "") then {
_audibleFireCoef = getNumber (configFile >> "CfgWeapons" >> _silencer >> "ItemInfo" >> "AmmoCoef" >> "audibleFire");
};
_audibleFire = getNumber (configFile >> "CfgAmmo" >> _ammo >> "audibleFire");
_weaponMagazines = missionNamespace getVariable [format[QEGVAR(common,weaponMagazines_%1),_weapon], []];
if (count _weaponMagazines == 0) then {
_muzzles = getArray (configFile >> "CfgWeapons" >> _weapon >> "muzzles");
_weaponMagazines = getArray (configFile >> "CfgWeapons" >> _weapon >> "magazines");
{
if (_x != "this") then {
_muzzleMagazines = getArray (configFile >> "CfgWeapons" >> _weapon >> _x >> "magazines");
_weaponMagazines append _muzzleMagazines;
};
} forEach _muzzles;
{
_ammoType = getText(configFile >> "CfgMagazines" >> _x >> "ammo");
_weaponMagazines set [_forEachIndex, [_x, _ammoType]];
} forEach _weaponMagazines;
missionNamespace setVariable [format[QEGVAR(common,weaponMagazines_%1),_weapon], _weaponMagazines];
};
_loudness = _audibleFireCoef * _audibleFire / 64;
_strength = _vehAttenuation * (_loudness - (_loudness/50 * _distance)); // linear drop off
_magazine = "";
{
EXPLODE_2_PVT(_x,_magazineType,_ammoType)
if (_ammoType == _ammo) exitWith {
_magazine = _magazineType;
};
} forEach _weaponMagazines;
if (_magazine == "") exitWith {};
_initSpeed = getNumber(configFile >> "CfgMagazines" >> _magazine >> "initSpeed");
_ammoConfig = (configFile >> "CfgAmmo" >> _ammo);
_parentClasses = [_ammoConfig, true] call BIS_fnc_returnParents;
_caliber = getNumber(_ammoConfig >> "ACE_caliber");
_caliber = switch (true) do {
case ("ShellBase" in _parentClasses): { 80 };
case ("RocketBase" in _parentClasses): { 200 };
case ("MissileBase" in _parentClasses): { 600 };
case ("SubmunitionBase" in _parentClasses): { 80 };
default {
if (_caliber <= 0) then { 6.5 } else { _caliber };
};
};
_loudness = (_caliber ^ 1.25 / 10) * (_initspeed / 1000) * _audibleFireCoef / 5;
_strength = _vehAttenuation * (_loudness - (_loudness / 50 * _distance)); // linear drop off
//systemChat format["%1 : %2 : %3", _strength, _initSpeed, _parentClasses];
//systemChat format["%1 : %2 : %3", _weapon, _magazine, _initSpeed];
if (_strength < 0.01) exitWith {};

View File

@ -15,6 +15,8 @@
*/
#include "script_component.hpp"
private ["_effectType", "_newAttenuation", "_turretConfig", "_turretPath", "_vehicle"];
_vehicle = vehicle ACE_player;
if (isNull _vehicle) exitWith {};

View File

@ -1,5 +1,5 @@
/*
* Author: commy2 and esteldunedain
* Author: commy2 and esteldunedain and Ruthberg
* Updates and applys the current deafness. Called every 0.1 sec from a PFEH.
*
* Arguments:
@ -15,19 +15,16 @@
*/
#include "script_component.hpp"
#define STRENGHTODEAFNESS 3
#define MAXDEAFNESS 1.1
private ["_recoverRate", "_volume"];
// Exit if combat deafness is disabled
if !(GVAR(enableCombatDeafness)) exitWith {};
// Check if new noises increase deafness
if (GVAR(newStrength) * STRENGHTODEAFNESS > GVAR(currentDeafness)) then {
GVAR(currentDeafness) = GVAR(newStrength) * STRENGHTODEAFNESS min MAXDEAFNESS;
GVAR(newStrength) = (((ACE_player getvariable [QGVAR(dv), 0]) min 20) / 20) ^ 2;
if (GVAR(newStrength) > GVAR(currentDeafness)) then {
GVAR(currentDeafness) = GVAR(newStrength);
};
GVAR(newStrength) = 0;
// Recover rate is slower if deafness is severe
_recoverRate = 0.01;

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -114,23 +114,27 @@
<Polish>Słuch</Polish>
<Spanish>Audición</Spanish>
<German>Gehör</German>
<Czech>Sluch</Czech>
</Key>
<Key ID="STR_ACE_Hearing_CombatDeafness_DisplayName">
<English>Enable combat deafness?</English>
<Polish>Wł. głuchotę bojową</Polish>
<Spanish>¿Habilitar sordera de combate?</Spanish>
<German>Aktiviere Taubheit im Gefecht?</German>
<Czech>Povolit ztrátu sluchu?</Czech>
</Key>
<Key ID="STR_ACE_Hearing_CombatDeafness_Description">
<English>Enable combat deafness?</English>
<Polish>Możliwość chwilowej utraty słuchu przy głośnych wystrzałach i jednoczesnym braku włożonych stoperów</Polish>
<Spanish>Habilita la sordera de combate</Spanish>
<German>Aktiviere Taubheit im Gefecht?</German>
<Czech>Povolit ztrátu sluchu?</Czech>
</Key>
<Key ID="STR_ACE_Hearing_Module_Description">
<English></English>
<Polish>Głuchota bojowa pojawia się w momentach, kiedy stoimy w pobliżu broni wielkokalibrowej bez ochrony słuchu, lub np. podczas ostrzału artyleryjskiego. Moduł ten pozwala na włączenie lub wyłączenie tego efektu.</Polish>
<German>Dieses Modul aktiviert/deaktiviert die Taubheit im Gefecht. Wenn aktiviert, können Spieler ohne Gehörschutz taub werden, wenn eine Waffe in ihrer Nähe abgefeuert wird oder eine Explosion stattfindet.</German>
<Czech>Ztráta sluchu je možná ve chvíly, kdy se v bezprostřední blízkosti střílí z velkorážní zbraně nebo při bombardování a osoba je bez ochrany sluchu (např. špunty). Tento modul umožňuje tuto věc povolit nebo zakázat.</Czech>
</Key>
</Package>
</Project>
</Project>

View File

@ -19,16 +19,45 @@ class CfgVehicles {
class Parachute_02_base_F;
class ACE_HuntIR: Parachute_02_base_F {
scope = 1;
author = ECSTRING(common,ACETeam);
castDriverShadow = 0;
destrType = "DestructDefault";
displayName = "HuntIR";
model = PATHTOF(data\huntir.p3d);
castDriverShadow = 0;
soundEnviron[] = {"z\ace\addons\apl\sounds\padak_let", 0.316228, 1, 80};
scope = 1;
soundCrash[] = {"", db-30, 1 };
soundEnviron[] = {"z\ace\addons\apl\sounds\padak_let", 0.316228, 1, 80};
soundLandCrash[] = {"", db-30, 1 };
soundWaterCrash[] = {"", db10, 1 };
mapSize = 0;
class HitPoints {
class HitEngine {
armor = 0;
material = -1;
name = "";
visual = "";
radius = 0;
passThrough = 0;
explosionShielding = 0;
};
class HitParachute {
armor = 0.0001;
material = -1;
name = "parachute";
visual = "";
radius = 0.2;
passThrough = 1;
explosionShielding = 0;
};
class HitCamera {
armor = 0.001;
material = -1;
name = "camera";
visual = "";
radius = 0.025;
passThrough = 1;
explosionShielding = 1;
};
};
};
class Item_Base_F;
@ -56,4 +85,14 @@ class CfgVehicles {
MACRO_ADDMAGAZINE(ACE_HuntIR_M203,20);
};
};
class Box_NATO_Support_F;
class ACE_Box_Misc: Box_NATO_Support_F {
class TransportItems {
MACRO_ADDITEM(ACE_HuntIR_monitor,5);
};
class TransportMagazines {
MACRO_ADDMAGAZINE(ACE_HuntIR_M203,20);
};
};
};

Binary file not shown.

View File

@ -65,12 +65,12 @@ GVAR(no_cams) sort true;
[{
GVAR(nearHuntIRs) = ACE_player nearEntities ["ACE_HuntIR", HUNTIR_MAX_TRANSMISSION_RANGE];
{
if (((getPosVisual _x) select 2) > 20 && {!(_x in GVAR(no_cams))} && {damage _x < 0.5}) then {
if (((getPosVisual _x) select 2) > 20 && {!(_x in GVAR(no_cams))} && {_x getHitPointDamage "HitCamera" < 0.25}) then {
GVAR(no_cams) pushBack _x;
};
} forEach GVAR(nearHuntIRs);
{
if (((getPosVisual _x) select 2) <= 20 || {!(_x in GVAR(nearHuntIRs))} || {damage _x >= 0.5}) then {
if (((getPosVisual _x) select 2) <= 20 || {!(_x in GVAR(nearHuntIRs))} || {_x getHitPointDamage "HitCamera" >= 0.25}) then {
GVAR(no_cams) deleteAt _forEachIndex;
if (_forEachIndex < GVAR(cur_cam)) then {
GVAR(cur_cam) = GVAR(cur_cam) - 1;
@ -125,7 +125,7 @@ GVAR(no_cams) sort true;
};
};
private ["_cam_coord_y", "_cam_coord_x", "_speed", "_cam_time", "_cam_pos"];
private ["_cam_coord_y", "_cam_coord_x", "_cam_time", "_cam_pos"];
GVAR(logic) setPosATL (GVAR(pos) vectorAdd [0, 0, -5]);
GVAR(logic) setDir GVAR(ROTATE);
@ -138,8 +138,7 @@ GVAR(no_cams) sort true;
ctrlSetText [1, format["%1 m", round(GVAR(pos) select 2)]];
ctrlSetText [2, format["%1", GVAR(cur_cam) + 1]];
_speed = 1 max abs((velocity GVAR(huntIR)) select 2);
_cam_time = ((GVAR(pos) select 2) - 20) / _speed;
_cam_time = ACE_time - (GVAR(huntIR) getVariable [QGVAR(startTime), ACE_time]);
ctrlSetText [3, format["%1 s", round(_cam_time)]];
_cam_pos = getPosVisual GVAR(huntIR);
_cam_pos = format ["X = %1, Y = %2", round (_cam_pos select 0), round (_cam_pos select 1)];

View File

@ -31,17 +31,20 @@ if (_ammo != "F_HuntIR") exitWith {};
private ["_huntir"];
_huntir = createVehicle ["ACE_HuntIR", _position, [], 0, "FLY"];
_huntir setPosATL _position;
_huntir setVariable [QGVAR(startTime), ACE_time, true];
[{
EXPLODE_1_PVT(_this select 0,_huntir);
private ["_deltaT"];
if (isNull _huntir) exitWith {
[_this select 1] call CBA_fnc_removePerFrameHandler;
};
if (damage _huntir > 0) then {
_deltaT = ACE_time - (_huntir getVariable [QGVAR(lastTime), ACE_time]);
_huntir setVelocity (velocity _huntir vectorAdd [0, 0, -9.8066 * (damage _huntir) * _deltaT]);
_huntir setVariable [QGVAR(lastTime), ACE_time];
private ["_parachuteDamage", "_velocity"];
_parachuteDamage = _huntir getHitPointDamage "HitParachute";
if (_parachuteDamage > 0) then {
_velocity = velocity _huntir;
_velocity set [2, -1 min -20 * sqrt(_parachuteDamage)];
_huntir setVelocity _velocity;
_huntir setVectorUp [0, 0, 1];
};
}, 0.1, [_huntir]] call CBA_fnc_addPerFrameHandler;
}, [getPosATL _projectile vectorAdd [0, 0, 400]], 5, 0] call EFUNC(common,waitAndExecute);
}, 0, [_huntir]] call CBA_fnc_addPerFrameHandler;
}, [getPosATL _projectile vectorAdd [0, 0, 50]], 2, 0] call EFUNC(common,waitAndExecute);
}, [_projectile], 5, 0] call EFUNC(common,waitAndExecute);

View File

@ -61,7 +61,7 @@ createDialog "ace_huntir_cam_dialog_off";
if (_elapsedTime > 10) then {
GVAR(state) = "noGDS";
};
if (_elapsedTime > 5 && {count _nearestHuntIRs > 0}) then {
if (_elapsedTime > 5 && {{_x getHitPointDamage "HitCamera" < 0.25} count _nearestHuntIRs > 0}) then {
GVAR(state) = "connecting";
};
};

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="HuntIR">
<Key ID="STR_DN_ACE_HUNTIRBOX">
@ -170,7 +170,7 @@
<English>Esc - Exit help</English>
<German>ESC - Hilfe verlassen</German>
<Spanish>Esc - Exit help</Spanish>
<Czech>Esc - Ukončit Pomoc </Czech>
<Czech>Esc - Ukončit pomoc </Czech>
<Russian>Esc - Выйти из помощи</Russian>
<Italian>Esc - Exit help</Italian>
<Polish>Esc - wyjście z ekranu Pomocy</Polish>

View File

@ -221,21 +221,25 @@
<English>Interaction menu background</English>
<Polish>Tło menu interakcji</Polish>
<Spanish>Fondo del menú de interacción</Spanish>
<Czech>Pozadí menu interakce</Czech>
</Key>
<Key ID="STR_ACE_Interact_Menu_blurScreenDesc">
<English>Blur the background while the interaction menu is open.</English>
<Polish>Rozmywa lub przyciemnia tło na czas otwarcia menu interakcji</Polish>
<Spanish>Desenfocar el fondo mientras el menú de interacción está abierto.</Spanish>
<Czech>Rozmazat obraz pokud je interakční menu otevřené.</Czech>
</Key>
<Key ID="STR_ACE_Interact_Menu_backgroundBlur">
<English>Blur screen</English>
<Polish>Rozmycie ekranu</Polish>
<Spanish>Pantalla de desenfoque</Spanish>
<Czech>Rozmazaný obraz</Czech>
</Key>
<Key ID="STR_ACE_Interact_Menu_backgroundBlack">
<English>Black</English>
<Polish>Przyciemnienie ekranu</Polish>
<Spanish>Negra</Spanish>
<Czech>Černý obraz</Czech>
</Key>
</Package>
</Project>

View File

@ -548,6 +548,30 @@ class CfgVehicles {
};
};
};
class StaticMGWeapon: StaticWeapon {};
class HMG_01_base_F: StaticMGWeapon {};
class HMG_01_high_base_F: HMG_01_base_F {
class ACE_Actions: ACE_Actions {
class ACE_MainActions: ACE_MainActions {
position = "[-0.172852,0.164063,-0.476091]";
};
};
};
class AA_01_base_F: StaticMGWeapon {
class ACE_Actions: ACE_Actions {
class ACE_MainActions: ACE_MainActions {
position = "[0,0.515869,-0.200671]";
};
};
};
class AT_01_base_F: StaticMGWeapon {
class ACE_Actions: ACE_Actions {
class ACE_MainActions: ACE_MainActions {
position = "[0,0.515869,-0.200671]";
};
};
};
class thingX;
class ReammoBox_F: thingX {

View File

@ -23,15 +23,24 @@ private ["_actions"];
_actions = [];
{
private ["_unit"];
private ["_unit", "_icon"];
_unit = _x;
if ((_unit != _player) && {(getText (configFile >> "CfgVehicles" >> (typeOf _x) >> "simulation")) != "UAVPilot"}) then {
_icon = switch _unit do {
case (driver _vehicle): { QUOTE(A3\ui_f\data\IGUI\RscIngameUI\RscUnitInfo\role_driver_ca.paa) };
case (gunner _vehicle): { QUOTE(A3\ui_f\data\IGUI\RscIngameUI\RscUnitInfo\role_gunner_ca.paa) };
case (commander _vehicle): { QUOTE(A3\ui_f\data\IGUI\RscIngameUI\RscUnitInfo\role_commander_ca.paa) };
default { "" };
};
if (_unit getVariable [QEGVAR(captives,isHandcuffed), false]) then {
_icon = QUOTE(PATHTOEF(captives,UI\handcuff_ca.paa));
};
_actions pushBack
[
[
str(_unit),
[_unit, true] call EFUNC(common,getName),
"",
_icon,
{},
{true},
{_this call FUNC(addPassengerActions);},

View File

@ -77,7 +77,7 @@
<English>Right Leg</English>
<German>Rechtes Bein</German>
<Spanish>Pierna derecha</Spanish>
<Czech>Pravá hona</Czech>
<Czech>Pravá noha</Czech>
<Polish>Prawa noga</Polish>
<French>Jambe droite</French>
<Russian>Правая нога</Russian>
@ -632,7 +632,7 @@
<Polish>Dołącz do zielonych</Polish>
<Portuguese>Entrar em Verde</Portuguese>
<Hungarian>Belépés a Zöldbe</Hungarian>
<Czech> Připojit k zeleným</Czech>
<Czech>Připojit k zeleným</Czech>
<Russian>Присоединиться к Зеленой группе</Russian>
<French>Rejoindre vert</French>
<Italian>Unirsi al team verde</Italian>
@ -691,7 +691,7 @@
<Spanish>Has dejado el equipo</Spanish>
<French>Tu as quitté l'équipe</French>
<Polish>Opuściłeś drużynę</Polish>
<Czech>Opustil si tým</Czech>
<Czech>Opustil jsi tým</Czech>
<Russian>Вы покинули группу</Russian>
<Portuguese>Você deixou a Equipe</Portuguese>
<Italian>Hai lasciato il team</Italian>
@ -798,23 +798,27 @@
<Polish>System interakcji</Polish>
<Spanish>Sistema de interacción</Spanish>
<German>Interaktionssystem</German>
<Czech>Systém interakce</Czech>
</Key>
<Key ID="STR_ACE_Interaction_EnableTeamManagement_DisplayName">
<English>Enable Team Management</English>
<Polish>Wł. zarządzanie drużyną</Polish>
<Spanish>Habilitar gestión de equipos</Spanish>
<German>Aktiviere Gruppenverwaltung</German>
<Czech>Povolit správu týmu</Czech>
</Key>
<Key ID="STR_ACE_Interaction_EnableTeamManagement_Description">
<English>Should players be allowed to use the Team Management Menu? Default: Yes</English>
<Polish>Czy gracze mogą korzystać z menu zarządzania drużyną? Domyślnie: Tak</Polish>
<Spanish>¿Deben tener permitido los jugadores el uso del menu de gestión de equipos? Por defecto: Si</Spanish>
<German>Sollen Spieler das Gruppenverwaltungsmenü verwenden dürfen? Standard: Ja</German>
<Czech>Mohou hráči použít menu správy týmu? Výchozí: Ano</Czech>
</Key>
<Key ID="STR_ACE_Interaction_Module_Description">
<English></English>
<Polish>Na zarządzanie drużyną składa się: przydział kolorów dla członków drużyny, przejmowanie dowodzenia, dołączanie/opuszczanie drużyn.</Polish>
<German>Die Gruppenverwaltung erlaubt die Zuweisung von Farben für Einheiten, die Kommandierung und das Beitreten/Verlassen einer Gruppe.</German>
<Czech>Správa týmu se skládá z: přidělení barev pro členy týmu, převzetí velení, připojení/odpojení. </Czech>
</Key>
</Package>
</Project>
</Project>

View File

@ -7,7 +7,7 @@ TRACE_1("enter", _this);
private["_apos", "_aposX", "_aposY", "_args", "_boundsInput", "_bpos", "_canFire", "_constraintBottom"];
private["_constraintLeft", "_constraintRight", "_constraintTop", "_currentTarget", "_fireDisabledEH"];
private["_firedEH", "_fov", "_lastTick", "_lockTime", "_maxX", "_maxY", "_minX", "_minY", "_newTarget"];
private["_firedEH", "_fov", "_lastTick", "_lockTime", "_maxX", "_maxY", "_minX", "_minY", "_newTarget"];
private["_offsetX", "_offsetY", "_pos", "_randomLockInterval", "_randomPosWithinBounds", "_range"];
private["_runTime", "_soundTime", "_targetArray", "_zamerny", "_currentShooter"];
@ -44,24 +44,24 @@ _magazineConfig = if ((currentMagazine _currentShooter) != "") then {
[]
};
//Only enable if both weapon and currentMagazine are enabled (bandaid to allow firing the "AP" missle)
if (((count _weaponConfig) < 1) || {(getNumber (_weaponConfig select 0)) != 1} || {(count _magazineConfig) < 1} || {(getNumber ((_magazineConfig select 0) >> "enabled")) != 1}) exitWith {
//If weapon does not have "javelin enabled", then exit PFEH
if (((count _weaponConfig) < 1) || {(getNumber (_weaponConfig select 0)) != 1}) exitWith {
__JavelinIGUITargeting ctrlShow false;
__JavelinIGUITargetingGate ctrlShow false;
__JavelinIGUITargetingLines ctrlShow false;
__JavelinIGUITargetingConstraints ctrlShow false;
if(!isNil "_fireDisabledEH") then {
_fireDisabledEH = [_fireDisabledEH] call FUNC(enableFire);
};
[(_this select 1)] call cba_fnc_removePerFrameHandler;
uiNamespace setVariable["ACE_RscOptics_javelin_PFH", nil];
};
// Find a target within the optic range
_newTarget = objNull;
// Bail on fast movement
if ((velocity ACE_player) distance [0,0,0] > 0.5 && {cameraView == "GUNNER"} && {cameraOn == ACE_player}) exitWith { // keep it steady.
ACE_player switchCamera "INTERNAL";
@ -69,19 +69,20 @@ if ((velocity ACE_player) distance [0,0,0] > 0.5 && {cameraView == "GUNNER"} &&
// Refresh the firemode
[] call FUNC(showFireMode);
// bail on not loaded
if( (vehicle ACE_player) != ACE_player) then {
if( (vehicle player) magazineTurretAmmo ["1Rnd_GAT_missiles", [0]] < 1) exitWith {
TRACE_1("No turret ammo, exit", "");
_ammo = _currentShooter ammo (currentWeapon _currentShooter);
// not loaded or not "javelin enabled" for magazine, hide targeting and enable firing
if ((_ammo == 0) || {(count _magazineConfig) < 1} || {(getNumber ((_magazineConfig select 0) >> "enabled")) != 1}) exitWith {
__JavelinIGUITargeting ctrlShow false;
__JavelinIGUITargetingGate ctrlShow false;
__JavelinIGUITargetingLines ctrlShow false;
__JavelinIGUITargetingConstraints ctrlShow false;
if(!isNil "_fireDisabledEH") then {
_fireDisabledEH = [_fireDisabledEH] call FUNC(enableFire);
};
} else {
if (ACE_player ammo (currentWeapon ACE_player) < 1 ) exitWith {
TRACE_1("No ammo, exit", "");
};
};
_range = parseNumber (ctrlText __JavelinIGUIRangefinder);
TRACE_1("Viewing range", _range);
if (_range > 50 && {_range < 2500}) then {
@ -113,7 +114,7 @@ _zamerny = if (_currentTarget isKindOf "CAManBase") then {_currentTarget selecti
_randomPosWithinBounds = [(_zamerny select 0) + 1 - (random 2.0),(_zamerny select 1) + 1 - (random 2.0),(_zamerny select 2) + 0.5 - (random 1.0)];
_apos = worldToScreen (_currentTarget modelToWorld _randomPosWithinBounds);
_aposX = 0;
_aposY = 0;
if (count _apos < 2) then {
@ -124,7 +125,7 @@ if (count _apos < 2) then {
_aposY = (_apos select 1) + _offsetY;
};
if((call CBA_fnc_getFoV) select 1 > 9) then {
if((call CBA_fnc_getFoV) select 1 > 9) then {
__JavelinIGUINFOV ctrlSetTextColor __ColorGreen;
__JavelinIGUIWFOV ctrlSetTextColor __ColorGray;
} else {
@ -134,9 +135,9 @@ if((call CBA_fnc_getFoV) select 1 > 9) then {
FUNC(disableFire) = {
_firedEH = _this select 0;
if(_firedEH < 0 && difficulty > 0) then {
_firedEH = [ACE_player, "DefaultAction", {true}, {
_firedEH = [ACE_player, "DefaultAction", {true}, {
_canFire = (_this select 1) getVariable["ace_missileguidance_target", nil];
if(!isNil "_canFire") exitWith { false };
true
@ -146,7 +147,7 @@ FUNC(disableFire) = {
};
FUNC(enableFire) = {
_firedEH = _this select 0;
if(_firedEH > 0 && difficulty > 0) then {
[ACE_player, "DefaultAction", _firedEH] call EFUNC(common,removeActionEventHandler);
};
@ -157,38 +158,38 @@ if (isNull _newTarget) then {
// No targets found
_currentTarget = objNull;
_lockTime = 0;
__JavelinIGUISeek ctrlSetTextColor __ColorGray;
__JavelinIGUITargeting ctrlShow false;
__JavelinIGUITargetingGate ctrlShow false;
__JavelinIGUITargetingLines ctrlShow false;
__JavelinIGUITargetingConstraints ctrlShow false;
_currentShooter setVariable ["ace_missileguidance_target",nil, false];
_currentShooter setVariable ["ace_missileguidance_target",nil, false];
// Disallow fire
_fireDisabledEH = [_fireDisabledEH] call FUNC(disableFire);
} else {
_fov = [] call CBA_fnc_getFoV;
TRACE_1("FOV", _fov);
if (_newTarget distance ACE_player < 2500
&& {(call CBA_fnc_getFoV) select 1 > 9}
&& { (currentVisionMode ACE_player == 2)}
&& GVAR(isLockKeyDown)
) then {
&& {(call CBA_fnc_getFoV) select 1 > 9}
&& { (currentVisionMode ACE_player == 2)}
&& GVAR(isLockKeyDown)
) then {
// Lock on after 3 seconds
if(_currentTarget != _newTarget) then {
if(_currentTarget != _newTarget) then {
TRACE_1("New Target, reseting locking", _newTarget);
_lockTime = ACE_diagTime;
_currentTarget = _newTarget;
playSound "ACE_Javelin_Locking";
} else {
if(ACE_diagTime - _lockTime > __LOCKONTIME + _randomLockInterval) then {
TRACE_2("LOCKED!", _currentTarget, _lockTime);
__JavelinIGUISeek ctrlSetTextColor __ColorGreen;
__JavelinIGUITargeting ctrlShow true;
__JavelinIGUITargetingConstrains ctrlShow false;
__JavelinIGUITargetingGate ctrlShow true;
@ -198,34 +199,34 @@ if (isNull _newTarget) then {
//__JavelinIGUITargetingLineV ctrlSetPosition [_aposX,ctrlPosition __JavelinIGUITargetingLineV select 1];
//__JavelinIGUITargetingLineH ctrlSetPosition [ctrlPosition __JavelinIGUITargetingLineH select 0,_aposY];
//{_x ctrlCommit __TRACKINTERVAL} forEach [__JavelinIGUITargetingLineH,__JavelinIGUITargetingLineV];
_boundsInput = if (_currentTarget isKindOf "CAManBase") then {
[_currentTarget,[-1,-1,-2],_currentTarget selectionPosition "body"];
} else {
[_currentTarget,[-1,-1,-2],_currentTarget selectionPosition "zamerny"];
};
_bpos = _boundsInput call EFUNC(common,worldToScreenBounds);
_minX = ((_bpos select 0) + _offsetX) max _constraintLeft;
_minY = ((_bpos select 1) + _offsetY) max _constraintTop;
_maxX = ((_bpos select 2) + _offsetX) min (_constraintRight - 0.025*(3/4)*SafezoneH);
_maxY = ((_bpos select 3) + _offsetY) min (_constraintBottom - 0.025*SafezoneH);
TRACE_4("", _boundsInput, _bpos, _minX, _minY);
__JavelinIGUITargetingGateTL ctrlSetPosition [_minX,_minY];
__JavelinIGUITargetingGateTR ctrlSetPosition [_maxX,_minY];
__JavelinIGUITargetingGateBL ctrlSetPosition [_minX,_maxY];
__JavelinIGUITargetingGateBR ctrlSetPosition [_maxX,_maxY];
{_x ctrlCommit __TRACKINTERVAL} forEach [__JavelinIGUITargetingGateTL,__JavelinIGUITargetingGateTR,__JavelinIGUITargetingGateBL,__JavelinIGUITargetingGateBR];
_currentShooter setVariable["ace_missileguidance_target", _currentTarget, false];
// Allow fire
_fireDisabledEH = [_fireDisabledEH] call FUNC(enableFire);
if(ACE_diagTime > _soundTime) then {
playSound "ACE_Javelin_Locked";
_soundTime = ACE_diagTime + 0.25;
@ -233,31 +234,31 @@ if (isNull _newTarget) then {
} else {
__JavelinIGUITargeting ctrlShow true;
__JavelinIGUITargetingGate ctrlShow true;
__JavelinIGUITargetingConstrains ctrlShow true;
__JavelinIGUITargetingConstrains ctrlShow true;
__JavelinIGUITargetingLines ctrlShow false;
_currentShooter setVariable["ace_missileguidance_target", nil, false];
_boundsInput = if (_currentTarget isKindOf "CAManBase") then {
[_newTarget,[-1,-1,-2],_currentTarget selectionPosition "body"];
} else {
[_newTarget,[-1,-1,-1],_currentTarget selectionPosition "zamerny"];
};
_bpos = _boundsInput call EFUNC(common,worldToScreenBounds);
_minX = ((_bpos select 0) + _offsetX) max _constraintLeft;
_minY = ((_bpos select 1) + _offsetY) max _constraintTop;
_maxX = ((_bpos select 2) + _offsetX) min (_constraintRight - 0.025*(3/4)*SafezoneH);
_maxY = ((_bpos select 3) + _offsetY) min (_constraintBottom - 0.025*SafezoneH);
TRACE_4("", _boundsInput, _bpos, _minX, _minY);
__JavelinIGUITargetingGateTL ctrlSetPosition [_minX,_minY];
__JavelinIGUITargetingGateTR ctrlSetPosition [_maxX,_minY];
__JavelinIGUITargetingGateBL ctrlSetPosition [_minX,_maxY];
__JavelinIGUITargetingGateBR ctrlSetPosition [_maxX,_maxY];
{_x ctrlCommit __TRACKINTERVAL} forEach [__JavelinIGUITargetingGateTL,__JavelinIGUITargetingGateTR,__JavelinIGUITargetingGateBL,__JavelinIGUITargetingGateBR];
if(ACE_diagTime > _soundTime) then {
@ -265,25 +266,25 @@ if (isNull _newTarget) then {
_soundTime = ACE_diagTime + 0.25;
};
// Disallow fire
_fireDisabledEH = [_fireDisabledEH] call FUNC(disableFire);
_fireDisabledEH = [_fireDisabledEH] call FUNC(disableFire);
};
};
} else {
} else {
// No targets found
_currentTarget = objNull;
_lockTime = 0;
__JavelinIGUISeek ctrlSetTextColor __ColorGray;
__JavelinIGUITargeting ctrlShow false;
__JavelinIGUITargetingGate ctrlShow false;
__JavelinIGUITargetingLines ctrlShow false;
__JavelinIGUITargetingConstraints ctrlShow false;
_currentShooter setVariable ["ace_missileguidance_target",nil, false];
// Disallow fire
_fireDisabledEH = [_fireDisabledEH] call FUNC(disableFire);
};
};
};
//TRACE_2("", _newTarget, _currentTarget);

View File

@ -20,7 +20,7 @@ __JavelinIGUITargetingLines ctrlShow false;
uiNameSpace setVariable [QGVAR(arguments),
[
0, // Last runtime
ACE_diagTime, // Last runtime
objNull, // currentTargetObject
0, // Run Time
0, // Lock Time

View File

@ -11,24 +11,24 @@ class CfgVehicles {
priority = 0.1;
icon = QUOTE(PATHTOF(UI\Kestrel4500_Icon.paa));
exceptions[] = {"notOnMap"};
};
class GVAR(show) {
displayName = CSTRING(ShowKestrel);
condition = QUOTE(call FUNC(canShow) && !GVAR(Overlay));
statement = QUOTE(call FUNC(displayKestrel));
showDisabled = 0;
priority = 0.2;
icon = QUOTE(PATHTOF(UI\Kestrel4500_Icon.paa));
exceptions[] = {"notOnMap", "isNotInside"};
};
class GVAR(hide) {
displayName = CSTRING(HideKestrel);
condition = QUOTE(GVAR(Overlay));
statement = QUOTE(call FUNC(displayKestrel));
showDisabled = 0;
priority = 0.3;
icon = QUOTE(PATHTOF(UI\Kestrel4500_Icon.paa));
exceptions[] = {"notOnMap", "isNotInside"};
class GVAR(show) {
displayName = CSTRING(ShowKestrel);
condition = QUOTE(call FUNC(canShow) && !GVAR(Overlay));
statement = QUOTE(call FUNC(displayKestrel));
showDisabled = 0;
priority = 0.2;
icon = QUOTE(PATHTOF(UI\Kestrel4500_Icon.paa));
exceptions[] = {"notOnMap", "isNotInside"};
};
class GVAR(hide) {
displayName = CSTRING(HideKestrel);
condition = QUOTE(GVAR(Overlay));
statement = QUOTE(call FUNC(displayKestrel));
showDisabled = 0;
priority = 0.3;
icon = QUOTE(PATHTOF(UI\Kestrel4500_Icon.paa));
exceptions[] = {"notOnMap", "isNotInside"};
};
};
};
};

View File

@ -24,3 +24,36 @@
},
{false},
[0, [true, false, false]], false, 0] call CBA_fnc_addKeybind; // (empty default key)
//Add deviceKey entry:
private ["_conditonCode", "_toggleCode", "_closeCode"];
_conditonCode = {
[] call FUNC(canShow);
};
_toggleCode = {
// Conditions: canInteract
if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {};
// Statement
if (!GVAR(Overlay)) then {
//If no overlay, show it:
[] call FUNC(displayKestrel);
} else {
//If overlay is up, switch to dialog:
[] call FUNC(createKestrelDialog);
};
};
_closeCode = {
// Statement
if (GVAR(Overlay)) then {
//If dispaly is open, close it:
GVAR(Overlay) = false;
};
if (dialog && {!isNull (uiNamespace getVariable ["Kestrel4500_Display", displayNull])}) then {
//If dialog is open, close it:
GVAR(Kestrel4500) = false;
closeDialog 0;
};
};
[(localize LSTRING(Name)), QUOTE(PATHTOF(UI\Kestrel4500.paa)), _conditonCode, _toggleCode, _closeCode] call EFUNC(common,deviceKeyRegisterNew);

View File

@ -0,0 +1,6 @@
class ACE_Settings {
class GVAR(enabled) {
typeName = "BOOL";
value = 1;
};
};

View File

@ -1,7 +1,7 @@
// by commy2
#include "script_component.hpp"
// fixes laser when being captured. Needed, because the selectionpsoition of the right hand is used
// fixes laser when being captured. Needed, because the selectionPosition of the right hand is used
["SetHandcuffed", {if (_this select 1) then {(_this select 0) action ["GunLightOff", _this select 0]};}] call EFUNC(common,addEventHandler);
//If user has ASDG JR without the compat patch, then ace's' laser pointers won't be compatible with anything
@ -14,26 +14,28 @@ if !(hasInterface) exitWith {};
GVAR(nearUnits) = [];
// @todo. Maybe move to common?
[{
private "_nearUnits";
_nearUnits = [];
{
_nearUnits append crew _x;
if (count _nearUnits > 10) exitWith {
_nearUnits resize 10;
};
} forEach nearestObjects [positionCameraToWorld [0,0,0], ["AllVehicles"], 50]; // when moving this, search also for units inside vehicles. currently breaks the laser in FFV
GVAR(nearUnits) = _nearUnits;
} , 5, []] call CBA_fnc_addPerFrameHandler;
addMissionEventHandler ["Draw3D", {
call FUNC(onDraw);
}];
#include "initKeybinds.sqf"
["SettingsInitialized", {
//If not enabled, dont't add draw eventhandler or PFEH (for performance)
if (!GVAR(enabled)) exitWith {};
// @todo. Maybe move to common?
[{
private "_nearUnits";
_nearUnits = [];
{
_nearUnits append crew _x;
if (count _nearUnits > 10) exitWith {
_nearUnits resize 10;
};
} forEach nearestObjects [positionCameraToWorld [0,0,0], ["AllVehicles"], 50]; // when moving this, search also for units inside vehicles. currently breaks the laser in FFV
GVAR(nearUnits) = _nearUnits;
} , 5, []] call CBA_fnc_addPerFrameHandler;
addMissionEventHandler ["Draw3D", {
call FUNC(onDraw);
}];
}] call EFUNC(common,addEventHandler);

View File

@ -12,6 +12,7 @@ class CfgPatches {
};
};
#include "ACE_Settings.hpp"
#include "CfgEventHandlers.hpp"
#include "CfgVehicles.hpp"
#include "CfgWeapons.hpp"

View File

@ -1,6 +1,8 @@
// by commy2 and esteldunedain
#include "script_component.hpp"
private ["_p0", "_p1", "_p0Pos", "_offV1", "_offV2", "_offV3", "_camPos", "_intermediatePos", "_iteration", "_light", "_line", "_pL", "_pL2", "_pX", "_size", "_units", "_fnc_getDistanceToTerrain", "_fnc_doesIntersectWithMan"];
// init object
/*if (isNil QGVAR(laserdot)) then {
_light = "#lightpoint" createVehicleLocal [0,0,0];
@ -14,7 +16,7 @@
GVAR(laserdot) = _light;
};*/
EXPLODE_3_PVT(_this,_unit,_range,_isGreen);
EXPLODE_4_PVT(_this,_unit,_range,_isGreen,_brightness);
_p0Pos = _unit modelToWorldVisual (_unit selectionPosition "righthand");
@ -47,7 +49,7 @@ _p1 = _p0 vectorAdd (_v1 vectorMultiply _range);
//Debugaaa = lineIntersectsObjs [_p0, _p1, objNull, _unit, false, 2];
_fnc_getDistanceToTerrain = {
private "_distance";
private ["_distance"];
_pX = + _p0;
_line = [_p0, _pX];
@ -55,9 +57,7 @@ _fnc_getDistanceToTerrain = {
_distance = _this;
_iteration = _distance;
while {
_iteration > 0.05 / 2
} do {
while {_iteration > 0.05 / 2} do {
_iteration = _iteration / 2;
_pX = _p0 vectorAdd (_v1 vectorMultiply _distance);

View File

@ -1,18 +1,19 @@
// by commy2
#include "script_component.hpp"
_brightness = 2 - call EFUNC(common,ambientBrightness);
_isIR = currentVisionMode ACE_player;
private ["_brightness", "_cacheName", "_isIR", "_laser", "_laserID", "_weapon"];
_isIR = currentVisionMode ACE_player;
if (_isIR == 2) exitWith {};
_isIR = _isIR == 1;
_brightness = 2 - call EFUNC(common,ambientBrightness);
{
_weapon = currentWeapon _x;
_laser = switch (_weapon) do {
case (""): {""};
case (primaryWeapon _x): {
primaryWeaponItems _x select 1;
};
@ -34,7 +35,7 @@ _isIR = _isIR == 1;
};
if (_laserID > 0 && {_x isFlashlightOn _weapon}) then {
[_x, 50, _laserID == 2 || _isIR] call FUNC(drawLaserpoint);
[_x, 50, (_laserID == 2 || _isIR), _brightness] call FUNC(drawLaserpoint);
};
};

View File

@ -37,6 +37,11 @@ _nextPointer = getText (_config >> "ACE_nextModeClass");
if (_nextPointer == "") exitWith {};
//If system disabled, don't switch to a laser:
private "_nextPointerIsLaser";
_nextPointerIsLaser = getNumber (configFile >> "CfgWeapons" >> _nextPointer >> "ACE_laserpointer");
if ((!GVAR(enabled)) && {_nextPointerIsLaser == 1}) exitWith {};
// disable inheritance for this entry, because addons claim this as a base class for convenience
if !((_config >> "ACE_nextModeClass") in configProperties [_config, "true", false]) exitWith {};

View File

@ -17,7 +17,7 @@
#include "script_component.hpp"
//find is case sensitive, so keep everything lowercase
#define FENCE_TYPENAMES ["land_net_fence_4m_f", "land_net_fence_8m_f", "land_net_fenced_8m_f", "land_new_wiredfence_5m_f", "land_new_wiredfence_10m_dam_f", "land_new_wiredfence_10m_f", "land_pipe_fence_4m_f", "land_pipe_fence_4mnolc_f", "land_sportground_fence_f", "land_wired_fence_4m_f", "land_wired_fence_4md_f", "land_wired_fence_8m_f", "land_wired_fence_8md_f", "land_razorwire_f"]
#define FENCE_TYPENAMES ["land_net_fence_4m_f", "land_net_fence_8m_f", "land_net_fenced_8m_f", "land_new_wiredfence_5m_f", "land_new_wiredfence_10m_dam_f", "land_new_wiredfence_10m_f", "land_pipe_fence_4m_f", "land_pipe_fence_4mnolc_f", "land_sportground_fence_f", "land_wired_fence_4m_f", "land_wired_fence_4md_f", "land_wired_fence_8m_f", "land_wired_fence_8md_f", "land_razorwire_f", "ace_concertinawire"]
#define FENCE_P3DS ["mil_wiredfence_f.p3d","wall_indfnc_3.p3d", "wall_indfnc_9.p3d", "wall_indfnc_corner.p3d", "pletivo_wired.p3d", "wall_fen1_5.p3d"]

View File

@ -4,8 +4,8 @@
#define PREFIX ace
#define MAJOR 3
#define MINOR 0
#define PATCHLVL 1
#define MINOR 1
#define PATCHLVL 2
#define BUILD 0
#define VERSION MAJOR.MINOR.PATCHLVL.BUILD

View File

@ -6,94 +6,110 @@
<Polish>Mapa</Polish>
<Spanish>Mapa</Spanish>
<German>Karte</German>
<Czech>Mapa</Czech>
</Key>
<Key ID="STR_ACE_Map_MapIllumination_DisplayName">
<English>Map illumination?</English>
<Polish>Oświetlenie mapy</Polish>
<Spanish>¿Iluminación de mapa?</Spanish>
<German>Kartenausleuchtung</German>
<Czech>Osvětlení mapy</Czech>
</Key>
<Key ID="STR_ACE_Map_MapIllumination_Description">
<English>Calculate dynamic map illumination based on light conditions?</English>
<Polish>Oblicza dynamiczne oświetlenie mapy bazujące na warunkach oświetleniowych</Polish>
<Spanish>Calcula la iluminación dinámica del mapa basandose en las condiciones de luz</Spanish>
<German>Berechne die Kartenauslichtung anhand des Umgebungslichts?</German>
<Czech>Vypočítat dynamické osvětlení mapy na základně světelných podmínek?</Czech>
</Key>
<Key ID="STR_ACE_Map_MapShake_DisplayName">
<English>Map shake?</English>
<Polish>Drżenie mapy</Polish>
<Spanish>¿Temblor de mapa?</Spanish>
<German>Kamerawackeln</German>
<Czech>Třesení mapy?</Czech>
</Key>
<Key ID="STR_ACE_Map_MapShake_Description">
<English>Make map shake when walking?</English>
<Polish>Ekran mapy drży podczas ruchu</Polish>
<Spanish>Hace que el mapa tiemble cuando caminas</Spanish>
<German>Kamerawackeln beim Gehen?</German>
<Czech>Umožnit třesení mapy za pochodu?</Czech>
</Key>
<Key ID="STR_ACE_Map_MapLimitZoom_DisplayName">
<English>Limit map zoom?</English>
<Polish>Ograniczony zoom</Polish>
<Spanish>¿Limitar el zoom de mapa?</Spanish>
<German>Kartenzoom einschränken</German>
<Czech>Omezit přiblížení mapy?</Czech>
</Key>
<Key ID="STR_ACE_Map_MapLimitZoom_Description">
<English>Limit the amount of zoom available for the map?</English>
<Polish>Ogranicza maksymalny stopień przybliżenia mapy</Polish>
<Spanish>Limita la cantidad de zoom disponible para el mapa</Spanish>
<German>Zoomstufe der Karte einschränken?</German>
<Czech>Omezit stupeň přiblížení pro mapu?</Czech>
</Key>
<Key ID="STR_ACE_Map_MapShowCursorCoordinates_DisplayName">
<English>Show cursor coordinates?</English>
<Polish>Koordynaty pod kursorem</Polish>
<Spanish>¿Mostrar coordenadas de cursor?</Spanish>
<German>Zeige Cursor-Koordinaten?</German>
<Czech>Zobrazit souřadnice u kurzoru?</Czech>
</Key>
<Key ID="STR_ACE_Map_MapShowCursorCoordinates_Description">
<English>Show the grid coordinates on the mouse pointer?</English>
<Polish>Pokazuje pod kursorem koordynaty wskazanego kwadratu mapy</Polish>
<Spanish>Muestra las coordenadas de la cuadricula en el puntero del ratón</Spanish>
<German>Gitter-Koordinaten auf dem Mauszeiger anzeigen?</German>
<Czech>Zobrazit souřadnice u kurzoru v mapě?</Czech>
</Key>
<Key ID="STR_ACE_Map_Module_Description">
<English></English>
<Polish>Moduł ten pozwala dostosować opcje widoku ekranu mapy.</Polish>
<German>Dieses Modul erweitert die Kartenfunktionen.</German>
<Czech>Tento modul umožňuje přizpůsobit mapu s obrazem.</Czech>
</Key>
<Key ID="STR_ACE_Map_BFT_Module_DisplayName">
<English>Blue Force Tracking</English>
<Polish>Blue Force Tracking</Polish>
<Spanish>Seguimiento de fuerzas amigas</Spanish>
<German>Blue Force Tracking</German>
<Czech>Blue Force Tracking</Czech>
</Key>
<Key ID="STR_ACE_Map_BFT_Interval_DisplayName">
<English>Interval</English>
<Polish>Interwał</Polish>
<Spanish>Intervalo</Spanish>
<German>Intervall</German>
<Czech>Interval</Czech>
</Key>
<Key ID="STR_ACE_Map_BFT_Interval_Description">
<English>How often the markers should be refreshed (in seconds)</English>
<Polish>Jak często markery powinny być odświeżane (w sekundach)</Polish>
<Spanish>Frecuencia de actualización de los marcadores (en segundos)</Spanish>
<German>Wie oft sollen die Markierungen aktualisiert werden (in Sekunden)</German>
<Czech>Jak často budou značky aktualizovány (v sekundách)</Czech>
</Key>
<Key ID="STR_ACE_Map_BFT_HideAiGroups_DisplayName">
<English>Hide AI groups?</English>
<Polish>Ukryj grupy AI</Polish>
<Spanish>¿Ocultar grupos de IA?</Spanish>
<German>KI-Gruppen verstecken?</German>
<Czech>Skrýt AI skupiny?</Czech>
</Key>
<Key ID="STR_ACE_Map_BFT_HideAiGroups_Description">
<English>Hide markers for 'AI only' groups?</English>
<Polish>Ukrywa markery dla grup złożonych tylko z AI</Polish>
<Spanish>Oculta las marcas de grupos 'solo IA'</Spanish>
<German>Verstecke Marker für "nur KI"-Gruppen?</German>
<Czech>Skrýt značky pouze pro AI skupiny?</Czech>
</Key>
<Key ID="STR_ACE_Map_BFT_Module_Description">
<English></English>
<Polish>Pozwala śledzić na mapie pozycje sojuszniczych jednostek za pomocą markerów BFT.</Polish>
<German>Dieses Modul ermöglicht es verbündete Einheiten mit dem BFT auf der Karte zu verfolgen.</German>
<Czech>Umožňuje sledovat přátelské jednokty na mapě v rámci BFT.</Czech>
</Key>
</Package>
</Project>
</Project>

View File

@ -219,7 +219,7 @@ class ACE_Medical_Actions {
items[] = {"ACE_personalAidKit"};
treatmentLocations[] = {QGVAR(useLocation_PAK)};
requiredMedic = QGVAR(medicSetting_PAK);
treatmentTime = 10;
treatmentTime = QUOTE((_this select 1) call FUNC(treatmentAdvanced_fullHealTreatmentTime));
callbackSuccess = QUOTE(DFUNC(treatmentAdvanced_fullHeal));
itemConsumed = QGVAR(consumeItem_PAK);
animationPatient = "";
@ -328,6 +328,7 @@ class ACE_Medical_Advanced {
class Large {
name = CSTRING(Wounds_Abrasion_Large);
minDamage = 0.3;
maxDamage = 0.5;
bleedingRate = 0.0002;
};
};

View File

@ -59,6 +59,10 @@ class ACE_Settings {
typeName = "SCALAR";
values[] = {"Disabled", "50/50", "Enabled"};
};
class GVAR(remoteControlledAI) {
typeName = "BOOL";
value = 1;
};
class GVAR(preventInstaDeath) {
typeName = "BOOL";
value = 0;
@ -134,6 +138,12 @@ class ACE_Settings {
value = 1;
};
class GVAR(healHitPointAfterAdvBandage) {
displayName = CSTRING(healHitPointAfterAdvBandage);
typeName = "BOOL";
value = 0;
};
class GVAR(painIsOnlySuppressed) {
displayName = CSTRING(painIsOnlySuppressed);
typeName = "BOOL";
value = 1;
};

View File

@ -106,6 +106,12 @@ class CfgVehicles {
};
};
};
class remoteControlledAI {
displayName = CSTRING(MedicalSettings_remoteControlledAI_DisplayName);
description = CSTRING(MedicalSettings_remoteControlledAI_Description);
typeName = "BOOL";
defaultValue = 1;
};
class preventInstaDeath {
displayName = CSTRING(MedicalSettings_preventInstaDeath_DisplayName);
description = CSTRING(MedicalSettings_preventInstaDeath_Description);
@ -221,7 +227,18 @@ class CfgVehicles {
displayName = CSTRING(AdvancedMedicalSettings_useLocation_SurgicalKit_DisplayName);
description = CSTRING(AdvancedMedicalSettings_useLocation_SurgicalKit_Description);
};
class healHitPointAfterAdvBandage {
displayName = CSTRING(AdvancedMedicalSettings_healHitPointAfterAdvBandage_DisplayName);
description = CSTRING(AdvancedMedicalSettings_healHitPointAfterAdvBandage_Description);
typeName = "BOOL";
defaultValue = 0;
};
class painIsOnlySuppressed {
displayName = CSTRING(AdvancedMedicalSettings_painIsOnlySuppressed_DisplayName);
description = CSTRING(AdvancedMedicalSettings_painIsOnlySuppressed_Description);
typeName = "BOOL";
defaultValue = 1;
};
};
class ModuleDescription {
description = CSTRING(AdvancedMedicalSettings_Module_Description);
@ -666,7 +683,7 @@ class CfgVehicles {
EGVAR(dragging,dragDirection) = 0;
class ACE_Actions {
class ACE_MainActions {
displayName = CSTRING(MainAction);
displayName = ECSTRING(interaction,MainAction);
distance = 5;
condition = QUOTE(true);
statement = "";

View File

@ -40,6 +40,7 @@ PREP(handleDamage_caching);
PREP(handleDamage_fractures);
PREP(handleDamage_internalInjuries);
PREP(handleDamage_wounds);
PREP(handleDamage_woundsOld);
PREP(handleUnitVitals);
PREP(handleKilled);
PREP(handleLocal);
@ -76,6 +77,7 @@ PREP(treatmentAdvanced_CPR);
PREP(treatmentAdvanced_CPRLocal);
PREP(treatmentAdvanced_fullHeal);
PREP(treatmentAdvanced_fullHealLocal);
PREP(treatmentAdvanced_fullHealTreatmentTime);
PREP(treatmentAdvanced_medication);
PREP(treatmentAdvanced_medicationLocal);
PREP(treatmentAdvanced_surgicalKit_onProgress);
@ -111,6 +113,8 @@ PREP(handleCreateLitter);
GVAR(injuredUnitCollection) = [];
GVAR(IVBags) = [];
DFUNC(handleDamage_assignWounds) = if ("ace_medical" callExtension "version" == "") then { DFUNC(handleDamage_woundsOld) } else { DFUNC(handleDamage_wounds)};
call FUNC(parseConfigForInjuries);
GVAR(HITPOINTS) = ["HitHead", "HitBody", "HitLeftArm", "HitRightArm", "HitLeftLeg", "HitRightLeg"];

View File

@ -24,4 +24,4 @@ _drag = if (count _this > 2) then {_this select 2} else {false};
if (vehicle _target == _target) exitwith {};
if (([_target] call EFUNC(common,isAwake))) exitwith {};
[_target] call EFUNC(common,unloadPerson)
["unloadPersonEvent", _target, [_target, vehicle _target]] call EFUNC(common,targetEvent)

View File

@ -42,7 +42,7 @@ _unit setvariable [QGVAR(bodyPartStatus), _damageBodyParts, true];
[_unit] call FUNC(handleDamage_advancedSetDamage);
_typeOfDamage = [_typeOfProjectile] call FUNC(getTypeOfDamage);
[_unit, _selectionName, _newDamage, _typeOfProjectile, _typeOfDamage] call FUNC(handleDamage_wounds);
[_unit, _selectionName, _newDamage, _typeOfProjectile, _typeOfDamage] call FUNC(handleDamage_assignWounds);
// TODO Disabled until implemented fully
//if (GVAR(enableAirway)) then {

View File

@ -18,7 +18,7 @@
#include "script_component.hpp"
private ["_unit", "_selectionName","_damage", "_source","_projectile","_hitSelections","_hitPoints","_newDamage","_cache_hitpoints","_cache_projectiles","_cache_params","_cache_damages"];
private ["_unit", "_selectionName", "_damage", "_source", "_projectile", "_hitSelections", "_hitPoints", "_impactVelocity", "_newDamage", "_cache_hitpoints", "_cache_projectiles", "_cache_params", "_cache_damages"];
_unit = _this select 0;
_selectionName = _this select 1;
_damage = _this select 2;
@ -46,21 +46,29 @@ if (vehicle _unit != _unit && {!(vehicle _unit isKindOf "StaticWeapon")} && {isN
};
};
// From AGM medical:
// Exclude falling damage to everything other than legs; reduce structural damage.
if (((velocity _unit) select 2 < -5) && {(vehicle _unit == _unit)}) then {
// Handle falling damage
_impactVelocity = (velocity _unit) select 2;
if (_impactVelocity < -5 && {vehicle _unit == _unit}) then {
_unit setVariable [QGVAR(isFalling), true];
_unit setVariable [QGVAR(impactVelocity), _impactVelocity];
};
if (_unit getVariable [QGVAR(isFalling), false]) then {
if !(_selectionName in ["", "leg_l", "leg_r"]) then {
if (_selectionName == "body") then {
_newDamage = _newDamage * abs(_unit getVariable [QGVAR(impactVelocity), _impactVelocity]) / 50;
} else {
_newDamage = _newDamage * 0.5;
};
} else {
if (_selectionName == "") then {
_selectionName = ["leg_l", "leg_r"] select (floor(random 2));
_this set [1, _selectionName];
};
_newDamage = _newDamage * 0.7;
};
_projectile = "falling";
_this set [4, "falling"];
};
if (_unit getVariable [QGVAR(isFalling), false] && {!(_selectionName in ["", "leg_l", "leg_r"])}) exitWith {0};
if (_unit getVariable [QGVAR(isFalling), false]) then {
if (_selectionName == "") then {
_selectionName = ["leg_l", "leg_r"] select (floor(random 2));
};
_this set [1, _selectionName];
_newDamage = _newDamage * 0.7;
};
// Finished with the current frame, reset variables
// Note: sometimes handleDamage spans over 2 or even 3 frames.
@ -95,7 +103,7 @@ if (_selectionName != "") then {
private ["_index","_otherDamage"];
_index = _cache_projectiles find _projectile;
// Check if the current projectile has already been handled once
if (_index >= 0) exitwith {
if (_index >= 0 && {_projectile != "falling"}) exitwith {
_cache_damages = _unit getVariable QGVAR(cachedDamages);
// Find the previous damage this projectile has done
_otherDamage = (_cache_damages select _index);

View File

@ -0,0 +1,143 @@
/*
* Author: Glowbal
* Handling of the open wounds & injuries upon the handleDamage eventhandler.
*
* Arguments:
* 0: Unit That Was Hit <OBJECT>
* 1: Name Of Hit Selection <STRING>
* 2: Amount Of Damage <NUMBER>
* 3: Shooter or source of the damage <OBJECT>
* 4: Type of the damage done <STRING>
*
* Return Value:
* None <NIL>
*
* Public: No
*/
#include "script_component.hpp"
private ["_unit", "_selectionName", "_damage", "_typeOfProjectile", "_typeOfDamage", "_bodyPartn", "_injuryTypeInfo", "_allInjuriesForDamageType", "_allPossibleInjuries", "_highestPossibleDamage", "_highestPossibleSpot", "_minDamage", "_openWounds", "_woundID", "_toAddInjury", "_painToAdd", "_bloodLoss", "_bodyPartNToAdd", "_classType", "_damageLevels", "_foundIndex", "_i", "_injury", "_maxDamage", "_pain", "_painLevel", "_selections", "_toAddClassID", "_woundsCreated"];
_unit = _this select 0;
_selectionName = _this select 1;
_damage = _this select 2;
_typeOfProjectile = _this select 3;
_typeOfDamage = _this select 4;
// Convert the selectionName to a number and ensure it is a valid selection.
_bodyPartn = [_selectionName] call FUNC(selectionNameToNumber);
if (_bodyPartn < 0) exitwith {};
// Get the injury type information. Format: [typeDamage thresholds, selectionSpecific, woundTypes]
_injuryTypeInfo = missionNamespace getvariable [format[QGVAR(woundInjuryType_%1), _typeOfDamage],[[], false, []]];
// This are the available injuries for this damage type. Format [[classtype, selections, bloodloss, minimalDamage, pain], ..]
_allInjuriesForDamageType = _injuryTypeInfo select 2;
// It appears we are dealing with an unknown type of damage.
if (count _allInjuriesForDamageType == 0) then {
// grabbing the configuration for unknown damage type
_injuryTypeInfo = missionNamespace getvariable [QGVAR(woundInjuryType_unknown),[[], false, []]];
_allInjuriesForDamageType = _injuryTypeInfo select 2;
};
// find the available injuries for this damage type and damage amount
_highestPossibleSpot = -1;
_highestPossibleDamage = -1;
_allPossibleInjuries = [];
{
_damageLevels = _x select 4;
_minDamage = _damageLevels select 0;
_maxDamage = _damageLevels select 1;
// Check if the damage is higher as the min damage for the specific injury
if (_damage >= _minDamage && {_damage <= _maxDamage || _maxDamage < 0}) then {
//_classType = _x select 0;
_selections = _x select 1;
//_bloodLoss = _x select 2;
//_pain = _x select 3;
// Check if the injury can be applied to the given selection name
if ("All" in _selections || _selectionName in _selections) then {
// Find the wound which has the highest minimal damage, so we can use this later on for adding the correct injuries
if (_minDamage > _highestPossibleDamage) then {
_highestPossibleSpot = _foreachIndex;
_highestPossibleDamage = _minDamage;
};
// Store the valid possible injury for the damage type, damage amount and selection
_allPossibleInjuries pushback _x;
};
};
}foreach _allInjuriesForDamageType;
// No possible wounds available for this damage type or damage amount.
if (_highestPossibleSpot < 0) exitwith {};
// Administration for open wounds and ids
_openWounds = _unit getvariable[QGVAR(openWounds), []];
_woundID = _unit getvariable[QGVAR(lastUniqueWoundID), 1];
_painToAdd = 0;
_woundsCreated = [];
{
if (_x select 0 <= _damage) exitwith {
for "_i" from 0 to (1+ floor(random(_x select 1)-1)) /* step +1 */ do {
// Find the injury we are going to add. Format [ classID, allowdSelections, bloodloss, painOfInjury, minimalDamage]
_toAddInjury = if (random(1) >= 0.85) then {_allInjuriesForDamageType select _highestPossibleSpot} else {_allPossibleInjuries select (floor(random (count _allPossibleInjuries)));};
_toAddClassID = _toAddInjury select 0;
_foundIndex = -1;
_bodyPartNToAdd = if (_injuryTypeInfo select 1) then {_bodyPartn} else {floor(random(6))};
// If the injury type is selection part specific, we will check if one of those injury types already exists and find the spot for it..
if ((_injuryTypeInfo select 1)) then {
{
// Check if we have an id of the given class on the given bodypart already
if (_x select 1 == _toAddClassID && {_x select 2 == _bodyPartNToAdd}) exitwith {
_foundIndex = _foreachIndex;
};
}foreach _openWounds;
};
_injury = [];
if (_foundIndex < 0) then {
// Create a new injury. Format [ID, classID, bodypart, percentage treated, bloodloss rate]
_injury = [_woundID, _toAddInjury select 0, _bodyPartNToAdd, 1, _toAddInjury select 2];
// Since it is a new injury, we will have to add it to the open wounds array to store it
_openWounds pushback _injury;
// New injuries will also increase the wound ID
_woundID = _woundID + 1;
} else {
// We already have one of these, so we are just going to increase the number that we have of it with a new one.
_injury = _openWounds select _foundIndex;
_injury set [3, (_injury select 3) + 1];
};
// Store the injury so we can process it later correctly.
_woundsCreated pushback _injury;
// Collect the pain that is caused by this injury
_painToAdd = _painToAdd + (_toAddInjury select 3);
};
};
}foreach (_injuryTypeInfo select 0); // foreach damage thresholds
_unit setvariable [QGVAR(openWounds), _openWounds, !USE_WOUND_EVENT_SYNC];
// Only update if new wounds have been created
if (count _woundsCreated > 0) then {
// _unit setvariable [QGVAR(lastUniqueWoundID), _woundID, true];
};
if (USE_WOUND_EVENT_SYNC) then {
// Broadcast the new injuries across the net in parts. One broadcast per injury. Prevents having to broadcast one massive array of injuries.
{
// ["medical_propagateWound", [_unit, _x]] call EFUNC(common,globalEvent);
}foreach _woundsCreated;
};
_painLevel = _unit getvariable [QGVAR(pain), 0];
_unit setvariable [QGVAR(pain), _painLevel + _painToAdd];

View File

@ -33,3 +33,5 @@ if !(_activated) exitWith {};
[_logic, QGVAR(consumeItem_SurgicalKit), "consumeItem_SurgicalKit"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(useLocation_PAK), "useLocation_PAK"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(useLocation_SurgicalKit), "useLocation_SurgicalKit"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(healHitPointAfterAdvBandage), "healHitPointAfterAdvBandage"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(painIsOnlySuppressed), "painIsOnlySuppressed"] call EFUNC(common,readSettingFromModule);

View File

@ -30,6 +30,7 @@ if !(_activated) exitWith {};
[_logic, QGVAR(playerDamageThreshold), "playerDamageThreshold"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(AIDamageThreshold), "AIDamageThreshold"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(enableUnconsciousnessAI), "enableUnconsciousnessAI"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(remoteControlledAI), "remoteControlledAI"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(preventInstaDeath), "preventInstaDeath"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(bleedingCoefficient), "bleedingCoefficient"] call EFUNC(common,readSettingFromModule);
[_logic, QGVAR(painCoefficient), "painCoefficient"] call EFUNC(common,readSettingFromModule);

View File

@ -48,7 +48,7 @@ if (_unit == ACE_player) then {
// if we have unconsciousness for AI disabled, we will kill the unit instead
_isDead = false;
if (!([_unit] call EFUNC(common,isPlayer)) && !_force) then {
if (!([_unit, GVAR(remoteControlledAI)] call EFUNC(common,isPlayer)) && !_force) then {
_enableUncon = _unit getVariable [QGVAR(enableUnconsciousnessAI), GVAR(enableUnconsciousnessAI)];
if (_enableUncon == 0 or {_enableUncon == 1 and (random 1) < 0.5}) then {
[_unit, true] call FUNC(setDead);

View File

@ -0,0 +1,26 @@
/*
* Author: Ruthberg
* Calculates the personal aid kit treatment time based on amount of damage to heal
*
* Arguments:
* unit <OBJECT>
*
* Return Value:
* treatment time <NUMBER>
*
* Example:
* [_target] call ace_medical_fnc_treatmentAdvanced_fullHealTreatmentTime
*
* Public: No
*/
#include "script_component.hpp"
private ["_target", "_totalDamage"];
_target = _this;
_totalDamage = 0;
{
_totalDamage = _totalDamage + _x;
} forEach (_target getVariable [QGVAR(bodyPartStatus), []]);
(10 max (_totalDamage * 10) min 120)

View File

@ -60,21 +60,25 @@ _heartRate = _target getvariable [QGVAR(heartRate), 70];
if (alive _target) then {
if (_heartRate > 0) then {
if (_heartRate <= 45) then {
[_target, ((_hrIncreaseLow select 0) + random((_hrIncreaseLow select 1))), (_hrIncreaseLow select 2), _hrCallback] call FUNC(addHeartRateAdjustment);
[_target, ((_hrIncreaseLow select 0) + random ((_hrIncreaseLow select 1) - (_hrIncreaseLow select 0))), (_hrIncreaseLow select 2), _hrCallback] call FUNC(addHeartRateAdjustment);
} else {
if (_heartRate > 120) then {
[_target, ((_hrIncreaseHigh select 0) + random((_hrIncreaseHigh select 1))), (_hrIncreaseHigh select 2), _hrCallback] call FUNC(addHeartRateAdjustment);
[_target, ((_hrIncreaseHigh select 0) + random ((_hrIncreaseHigh select 1) - (_hrIncreaseHigh select 0))), (_hrIncreaseHigh select 2), _hrCallback] call FUNC(addHeartRateAdjustment);
} else {
[_target, ((_hrIncreaseNorm select 0) + random((_hrIncreaseNorm select 1))), (_hrIncreaseNorm select 2), _hrCallback] call FUNC(addHeartRateAdjustment);
[_target, ((_hrIncreaseNorm select 0) + random ((_hrIncreaseNorm select 1) - (_hrIncreaseNorm select 0))), (_hrIncreaseNorm select 2), _hrCallback] call FUNC(addHeartRateAdjustment);
};
};
};
};
if (_painReduce > 0) then {
// Reduce the pain level
// Reduce pain
_painSuppress = _target getvariable [QGVAR(painSuppress), 0];
_target setvariable [QGVAR(painSuppress), (_painSuppress + _painReduce) max 0];
if (!GVAR(painIsOnlySuppressed)) then {
_pain = _target getvariable [QGVAR(pain), 0];
_target setvariable [QGVAR(pain), (_pain - _painReduce) max 0, true];
};
};
_resistance = _target getvariable [QGVAR(peripheralResistance), 100];

View File

@ -1591,6 +1591,7 @@
<Polish>Żadna</Polish>
<Spanish>Nada</Spanish>
<German>Keine</German>
<Czech>Žádný</Czech>
</Key>
<Key ID="STR_ACE_Medical_Check_Pulse_Weak">
<English>Weak</English>
@ -2204,6 +2205,20 @@
<Czech>Pravá noha</Czech>
<Portuguese>Perna Direita</Portuguese>
</Key>
<Key ID="STR_ACE_Medical_healHitPointAfterAdvBandage">
<English>Bandaging removes bloodstains</English>
<German>Bandagieren entfernt Blutflecken</German>
<Polish>Bandażowanie usuwa ślady krwi</Polish>
<Czech>Obvázání odstraňuje skvrny od krve</Czech>
<Spanish>El vendaje elimina las manchas de sangre</Spanish>
</Key>
<Key ID="STR_ACE_Medical_painIsOnlySuppressed">
<English>Pain is only temporarily suppressed</English>
<German>Schmerzen werden nur vorübergehend unterdrückt</German>
<Polish>Ból jest tymczasowo zwalczany</Polish>
<Czech>Bolest je potlačena pouze dočasně</Czech>
<Spanish>El dolor se suprime solo temporalmente</Spanish>
</Key>
<Key ID="STR_ACE_Medical_painEffectType">
<English>Pain Effect Type</English>
<German>Schmerzeffekt-Typ</German>
@ -2714,6 +2729,7 @@
<Polish>ACE Opcje medyczne</Polish>
<Spanish>Médico ACE</Spanish>
<German>ACE-Medicsystem</German>
<Czech>ACE Zdravotnické</Czech>
</Key>
<Key ID="STR_ACE_Medical_MedicalSettings_Module_DisplayName">
<English>Medical Settings [ACE]</English>
@ -2721,6 +2737,7 @@
<Polish>Ustawienia medyczne [ACE]</Polish>
<Spanish>Ajustes médicos [ACE]</Spanish>
<German>Medizinische Einstellungen [ACE]</German>
<Czech>Lékařské nastavení [ACE]</Czech>
</Key>
<Key ID="STR_ACE_Medical_MedicalSettings_level_DisplayName">
<English>Medical Level</English>
@ -2728,6 +2745,7 @@
<Polish>Poziom medyczny</Polish>
<Spanish>Nivel médico</Spanish>
<German>Medizinisches Level</German>
<Czech>Úroveň medického</Czech>
</Key>
<Key ID="STR_ACE_Medical_MedicalSettings_level_Description">
<English>What is the medical simulation level?</English>
@ -2735,6 +2753,7 @@
<Polish>Jaki jest poziom symulacji medycznej?</Polish>
<Spanish>¿Cuál es el nivel de simulación médica?</Spanish>
<German>Wie hoch soll das medizinische Simulationslevel sein?</German>
<Czech>Jaká je úroveň lékařské simulace?</Czech>
</Key>
<Key ID="STR_ACE_Medical_MedicalSettings_basic">
<English>Basic</English>
@ -2742,6 +2761,7 @@
<Polish>Podstawowy</Polish>
<Spanish>Básico</Spanish>
<German>Standard</German>
<Czech>Základní</Czech>
</Key>
<Key ID="STR_ACE_Medical_MedicalSettings_advanced">
<English>Advanced</English>
@ -2749,6 +2769,7 @@
<Polish>Zaawansowany</Polish>
<Spanish>Avanzado</Spanish>
<German>Erweitert</German>
<Czech>Pokročilé</Czech>
</Key>
<Key ID="STR_ACE_Medical_MedicalSettings_medicSetting_DisplayName">
<English>Medics setting</English>
@ -2756,12 +2777,14 @@
<Polish>Poziom medyków</Polish>
<Spanish>Configuración médica</Spanish>
<German>Medizinische Einstellungen</German>
<Czech>Úroveň zdravotníků</Czech>
</Key>
<Key ID="STR_ACE_Medical_MedicalSettings_medicSetting_Description">
<English>What is the level of detail prefered for medics?</English>
<Russian>Каков уровень подробностей для медиков?</Russian>
<Polish>Jaki jest poziom detali medycznych wyświetlanych dla medyków?</Polish>
<Spanish>¿Cuál es el nivel de detalle preferido para los médicos?</Spanish>
<Czech>Jaká úroveň detailů je preferována pro zdravotníky?</Czech>
</Key>
<Key ID="STR_ACE_Medical_MedicalSettings_medicSetting_disable">
<English>Disable medics</English>
@ -2769,6 +2792,7 @@
<Polish>Wyłącz medyków</Polish>
<Spanish>Desactivar médicos</Spanish>
<German>Sanitäter deaktivieren</German>
<Czech>Zakázat zdravotníky</Czech>
</Key>
<Key ID="STR_ACE_Medical_MedicalSettings_allowLitterCreation_DisplayName">
<English>Enable Litter</English>
@ -2776,6 +2800,7 @@
<Polish>Aktywuj odpadki</Polish>
<Spanish>Activar restos médicos</Spanish>
<German>Abfälle aktivieren</German>
<Czech>Povolit odpadky</Czech>
</Key>
<Key ID="STR_ACE_Medical_MedicalSettings_allowLitterCreation_Description">
<English>Enable litter being created upon treatment</English>
@ -2783,6 +2808,7 @@
<Polish>Twórz odpadki medyczne podczas leczenia</Polish>
<Spanish>Activar los restos médicos que se crean en el tratamiento</Spanish>
<German>Aktiviere Abfälle, wenn eine Behandlung durchgeführt wurde</German>
<Czech>Vytváří odpad zdravotnického materiálu pří léčení</Czech>
</Key>
<Key ID="STR_ACE_Medical_MedicalSettings_litterCleanUpDelay_DisplayName">
<English>Life time of litter objects</English>
@ -2790,6 +2816,7 @@
<Polish>Długość życia odpadków</Polish>
<Spanish>Tiempo de vida de los restos médicos</Spanish>
<German>Dauer des angezeigten Abfalls</German>
<Czech>Životnost pro odpadky</Czech>
</Key>
<Key ID="STR_ACE_Medical_MedicalSettings_litterCleanUpDelay_Description">
<English>How long should litter objects stay? In seconds. -1 is forever.</English>
@ -2797,6 +2824,7 @@
<Polish>Ile czasu musi upłynąć, aby odpadki zaczęły znikać? W sekundach. -1 dla nieskończoności.</Polish>
<Spanish>¿Por cuánto tiempo deben permanecer los restos médicos? En segundos. -1 es para siempre.</Spanish>
<German>Wie lange sollen Abfälle am Boden liegen (in Sekunden)? -1 ist für immer.</German>
<Czech>Za jak dlouho začnou odpadky mizet? V sekundách. -1 navždy.</Czech>
</Key>
<Key ID="STR_ACE_Medical_MedicalSettings_enableScreams_DisplayName">
<English>Enable Screams</English>
@ -2804,6 +2832,7 @@
<Polish>Aktywuj wrzaski</Polish>
<Spanish>Activar gritos</Spanish>
<German>Schreie aktivieren</German>
<Czech>Povolit křik</Czech>
</Key>
<Key ID="STR_ACE_Medical_MedicalSettings_enableScreams_Description">
<English>Enable screaming by injuried units</English>
@ -2811,6 +2840,7 @@
<Polish>Aktywuj wrzeszczenie z bólu przez ranne jednostki</Polish>
<Spanish>Activar gritos para unidades heridas</Spanish>
<German>Aktiviere Schreie bei verletzten Einheiten</German>
<Czech>Povolit křičení zraněných jednotek</Czech>
</Key>
<Key ID="STR_ACE_Medical_MedicalSettings_playerDamageThreshold_DisplayName">
<English>Player Damage</English>
@ -2818,6 +2848,7 @@
<Polish>Próg obrażeń graczy</Polish>
<Spanish>Daño de jugador</Spanish>
<German>Spielerschaden</German>
<Czech>Poškození hráče</Czech>
</Key>
<Key ID="STR_ACE_Medical_MedicalSettings_playerDamageThreshold_Description">
<English>What is the damage a player can take before being killed?</English>
@ -2825,6 +2856,7 @@
<Polish>Jaki jest próg obrażeń, jakie gracz może otrzymać zanim zostanie zabity?</Polish>
<Spanish>¿Cuál es el daño que un jugador puede sufrir antes de morir?</Spanish>
<German>Wie viel Schaden kann ein Spieler erleiden, bevor er getötet wird?</German>
<Czech>Jaké poškození může hráč dostat než bude zabit?</Czech>
</Key>
<Key ID="STR_ACE_Medical_MedicalSettings_AIDamageThreshold_DisplayName">
<English>AI Damage</English>
@ -2832,6 +2864,7 @@
<Polish>Próg obrażeń AI</Polish>
<Spanish>Daño IA</Spanish>
<German>KI-Schaden</German>
<Czech>Poškození AI</Czech>
</Key>
<Key ID="STR_ACE_Medical_MedicalSettings_AIDamageThreshold_Description">
<English>What is the damage an AI can take before being killed?</English>
@ -2839,6 +2872,7 @@
<Polish>Jaki jest próg obrażeń, jakie AI może otrzymać zanim zostanie zabite?</Polish>
<Spanish>¿Cuál es el daño que la IA puede sufrir antes de morir?</Spanish>
<German>Wie viel Schaden kann eine KI erleiden, bis sie getötet wird?</German>
<Czech>Jaké poškození může AI dostat než bude zabito?</Czech>
</Key>
<Key ID="STR_ACE_Medical_MedicalSettings_enableUnconsciousnessAI_DisplayName">
<English>AI Unconsciousness</English>
@ -2846,6 +2880,7 @@
<Polish>Nieprzytomność AI</Polish>
<Spanish>Inconsciencia IA</Spanish>
<German>KI-Bewusstlosigkeit</German>
<Czech>Bezvědomí AI</Czech>
</Key>
<Key ID="STR_ACE_Medical_MedicalSettings_enableUnconsciousnessAI_Description">
<English>Allow AI to go unconscious</English>
@ -2853,6 +2888,15 @@
<Polish>Czy AI może być nieprzytomne od odniesionych obrażeń?</Polish>
<Spanish>Permita a la IA caer inconsciente</Spanish>
<German>KI kann bewusstlos werden</German>
<Czech>Umožňuje AI upadnout do bezvědomí</Czech>
</Key>
<Key ID="STR_ACE_Medical_MedicalSettings_remoteControlledAI_DisplayName">
<English>Remote Controlled AI</English>
<Spanish>IA controlada remotamente</Spanish>
</Key>
<Key ID="STR_ACE_Medical_MedicalSettings_remoteControlledAI_Description">
<English>Treat remote controlled units as AI not players?</English>
<Spanish>¿Tratar unidades remotamente controladas como IA?</Spanish>
</Key>
<Key ID="STR_ACE_Medical_disabled">
<English>Disabled</English>
@ -2860,6 +2904,7 @@
<Polish>Wyłączone</Polish>
<Spanish>Activado</Spanish>
<German>Deaktiviert</German>
<Czech>Zakázáno</Czech>
</Key>
<Key ID="STR_ACE_Medical_enabled">
<English>Enabled</English>
@ -2867,6 +2912,7 @@
<Polish>Włączone</Polish>
<Spanish>Desactivado</Spanish>
<German>Aktiviert</German>
<Czech>Povoleno</Czech>
</Key>
<Key ID="STR_ACE_Medical_MedicalSettings_preventInstaDeath_DisplayName">
<English>Prevent instant death</English>
@ -2874,6 +2920,7 @@
<Polish>Wył. natychmiast. śmierć</Polish>
<Spanish>Prevenir muerte instantánea</Spanish>
<German>Verhindere direkten Tod</German>
<Czech>Zabránit okamžité smrti</Czech>
</Key>
<Key ID="STR_ACE_Medical_MedicalSettings_preventInstaDeath_Description">
<English>Have a unit move to unconscious instead of death</English>
@ -2881,6 +2928,7 @@
<Polish>Spraw, aby jednostka została przeniesiona do stanu nieprzytomności zamiast ginąć na miejscu od śmiertelnych obrażeń</Polish>
<Spanish>Mover una unidad a inconsciente en vez de a muerta</Spanish>
<German>Lässt eine Einheit bewusstlos werden anstatt zu sterben</German>
<Czech>Jednotka upadne do bezvědomí namísto smrti</Czech>
</Key>
<Key ID="STR_ACE_Medical_MedicalSettings_bleedingCoefficient_DisplayName">
<English>Bleeding coefficient</English>
@ -2888,6 +2936,7 @@
<Polish>Mnożnik krwawienia</Polish>
<Spanish>Coeficiente de sangrado</Spanish>
<German>Verblutungsmultiplikator</German>
<Czech>Koeficient krvácení</Czech>
</Key>
<Key ID="STR_ACE_Medical_MedicalSettings_bleedingCoefficient_Description">
<English>Coefficient to modify the bleeding speed</English>
@ -2895,6 +2944,7 @@
<Polish>Mnożnik modyfikujący prędkość wykrwawiania się</Polish>
<Spanish>Coeficiente para modificar la velocidad de sangrado</Spanish>
<German>Multiplikator um die Verblutungsgeschwindigkeit zu verändern</German>
<Czech>Koeficient rychlosti krvácení</Czech>
</Key>
<Key ID="STR_ACE_Medical_MedicalSettings_painCoefficient_DisplayName">
<English>Pain coefficient</English>
@ -2902,6 +2952,7 @@
<Polish>Mnożnik bólu</Polish>
<Spanish>Coeficiente de dolor</Spanish>
<German>Schmerzmultiplikator</German>
<Czech>Koeficient bolesti</Czech>
</Key>
<Key ID="STR_ACE_Medical_MedicalSettings_painCoefficient_Description">
<English>Coefficient to modify the pain intensity</English>
@ -2909,6 +2960,7 @@
<Polish>Mnożnik modyfikujący intensywność bólu</Polish>
<Spanish>Coeficiente para modificar la intensidad del dolor</Spanish>
<German>Multiplikator um den Schmerzintensität zu verändern</German>
<Czech>Koeficient intenzity bolesti</Czech>
</Key>
<Key ID="STR_ACE_Medical_MedicalSettings_keepLocalSettingsSynced_DisplayName">
<English>Sync status</English>
@ -2916,6 +2968,7 @@
<Polish>Synchronizuj status</Polish>
<Spanish>Sincronizador estado</Spanish>
<German>Status synchronisieren</German>
<Czech>Synchronizovat status</Czech>
</Key>
<Key ID="STR_ACE_Medical_MedicalSettings_keepLocalSettingsSynced_Description">
<English>Keep unit status synced. Recommended on.</English>
@ -2923,6 +2976,7 @@
<Polish>Utrzymuj synchronizację statusu jednostek. Zalecane zostawienie tej opcji włączonej.</Polish>
<Spanish>Mantener el estado de la unidad sincronizado. Recomendado activado</Spanish>
<German>Status der Einheit synchron halten. Sollte aktiviert bleiben.</German>
<Czech>Udržuje status jednotky synchronizovaný. Doporučeno zapnout.</Czech>
</Key>
<Key ID="STR_ACE_Medical_MedicalSettings_Module_Description">
<English>Provides a medical system for both players and AI.</English>
@ -2930,6 +2984,7 @@
<Polish>Moduł ten dostarcza system medyczny dla graczy oraz AI.</Polish>
<Spanish>Proporciona un sistema médico para jugadores e IA.</Spanish>
<German>Aktiviert ein medizinisches System für Spieler und KI.</German>
<Czech>Poskytuje zdravotní systém pro hráče a AI.</Czech>
</Key>
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_Module_DisplayName">
<English>Advanced Medical Settings [ACE]</English>
@ -2937,6 +2992,7 @@
<Polish>Zaawansowane ustawienia medyczne [ACE]</Polish>
<Spanish>Ajustes médicos avanzados [ACE]</Spanish>
<German>Erweiterte medizinische Einstellungen [ACE]</German>
<Czech>Pokročilé zdravotnické nastavení [ACE]</Czech>
</Key>
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_enableFor_DisplayName">
<English>Enabled for</English>
@ -2944,6 +3000,7 @@
<Polish>Aktywne dla</Polish>
<Spanish>Hablitado para</Spanish>
<German>Aktiviert für</German>
<Czech>Povoleno pro</Czech>
</Key>
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_enableFor_Description">
<English>Select what units the advanced medical system will be enabled for</English>
@ -2951,6 +3008,7 @@
<Polish>Wybierz dla kogo zaawansowany system medyczny będzie aktywny</Polish>
<Spanish>Seleccione para qué unidades será habilitado el sistema médico avanzado</Spanish>
<German>Wähle aus welche Einheiten das erweiterte medizinische System haben</German>
<Czech>Vyberte, pro jaké jednotky bude pokročilý zdravotní systém povolen</Czech>
</Key>
<Key ID="STR_ACE_Medical_playeronly">
<English>Players only</English>
@ -2958,6 +3016,7 @@
<Polish>Tylko dla graczy</Polish>
<Spanish>Solo jugadores</Spanish>
<German>Nur Spieler</German>
<Czech>Pouze hráči</Czech>
</Key>
<Key ID="STR_ACE_Medical_playersandai">
<English>Players and AI</English>
@ -2965,6 +3024,7 @@
<Polish>Gracze oraz AI</Polish>
<Spanish>Jugadors e IA</Spanish>
<German>Spieler und KI</German>
<Czech>Hráči a AI</Czech>
</Key>
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_enableAdvancedWounds_DisplayName">
<English>Enable Advanced wounds</English>
@ -2972,6 +3032,7 @@
<Polish>Akt. zaawansowane rany</Polish>
<Spanish>Activa heridas avanzadas</Spanish>
<German>Aktiviere erweiterte Wunden</German>
<Czech>Povolit pokročilé zranění</Czech>
</Key>
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_enableAdvancedWounds_Description">
<English>Allow reopening of bandaged wounds?</English>
@ -2979,6 +3040,7 @@
<Polish>Pozwól na otwieranie się zabandażowanych ran?</Polish>
<Spanish>Permitir la reapertura de las heridas vendadas?</Spanish>
<German>Erlaube das Öffnen von bandagierten Wunden?</German>
<Czech>Umožnit znovuotevření zavázané rány?</Czech>
</Key>
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_enableVehicleCrashes_DisplayName">
<English>Vehicle Crashes</English>
@ -2986,6 +3048,7 @@
<Polish>Obrażenia od kolizji</Polish>
<Spanish>Accidentes de vehículos</Spanish>
<German>Fahrzeugunfälle</German>
<Czech>Poškození z kolize</Czech>
</Key>
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_enableVehicleCrashes_Description">
<English>Do units take damage from a vehicle crash?</English>
@ -2993,6 +3056,7 @@
<Polish>Czy jednostki otrzymują obrażenia w wyniku kolizji pojazdów?</Polish>
<Spanish>¿Las unidades reciben daño de un accidente de tráfico?</Spanish>
<German>Bekommen Einheiten von Fahrzeugunfällen Schaden?</German>
<Czech>Dostane jednotka poškození při autonehodě?</Czech>
</Key>
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_medicSetting_PAK_DisplayName">
<English>Allow PAK</English>
@ -3000,6 +3064,7 @@
<Polish>Ust. apteczek osobistych</Polish>
<Spanish>Permitir EPA</Spanish>
<German>Erlaube Erstehilfekasten</German>
<Czech>Povolit osobní lékárničky</Czech>
</Key>
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_medicSetting_PAK_Description">
<English>Who can use the PAK for full heal?</English>
@ -3007,6 +3072,7 @@
<Polish>Kto może skorzystać z apteczki osobistej w celu pełnego uleczenia?</Polish>
<Spanish>¿Quién puede utilizar el EPA para una cura completa?</Spanish>
<German>Wer kann den Erstehilfekasten für eine Endheilung verwenden?</German>
<Czech>Kdo může použít osobní lékárničku pro plné vyléčení?</Czech>
</Key>
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_anyone">
<English>Anyone</English>
@ -3014,6 +3080,7 @@
<Polish>Wszyscy</Polish>
<Spanish>Nadie</Spanish>
<German>Jeder</German>
<Czech>Kdokoliv</Czech>
</Key>
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_Medic">
<English>Medics only</English>
@ -3021,6 +3088,7 @@
<Polish>Tylko medycy</Polish>
<Spanish>Solo médicos</Spanish>
<German>Nur Sanitäter</German>
<Czech>Pouze zdravotník</Czech>
</Key>
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_Special">
<English>Doctors only</English>
@ -3028,6 +3096,7 @@
<Polish>Tylko doktorzy</Polish>
<Spanish>Solo doctores</Spanish>
<German>Nur Ärzte</German>
<Czech>Pouze doktor</Czech>
</Key>
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_consumeItem_PAK_DisplayName">
<English>Remove PAK on use</English>
@ -3035,6 +3104,7 @@
<Polish>Usuń apteczkę po użyciu</Polish>
<Spanish>Eliminar EPA después del uso</Spanish>
<German>Entferne Erstehilfekasten bei Verwendung</German>
<Czech>Odebrat osobní lékárničku po použití</Czech>
</Key>
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_consumeItem_PAK_Description">
<English>Should PAK be removed on usage?</English>
@ -3042,6 +3112,7 @@
<Polish>Czy apteczka osobista powinna zniknąć z ekwipunku po jej użyciu?</Polish>
<Spanish>El EPA será eliminado después de usarlo</Spanish>
<German>Sollen Erstehilfekästen bei Verwendung entfernt werden?</German>
<Czech>Má se osobní lékárnička odstranit po použití?</Czech>
</Key>
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_useLocation_PAK_DisplayName">
<English>Locations PAK</English>
@ -3049,6 +3120,7 @@
<Polish>Ogr. apteczek osobistych</Polish>
<Spanish>Ubicacions del EPA</Spanish>
<German>Orte für Erstehilfekasten</German>
<Czech>Lokace osobní lékárničky</Czech>
</Key>
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_useLocation_PAK_Description">
<English>Where can the personal aid kit be used?</English>
@ -3056,6 +3128,7 @@
<Polish>Gdzie można korzystać z apteczek osobistych?</Polish>
<Spanish>¿Dónde se puede utilizar el equipo de primeros auxilios?</Spanish>
<German>Wo kann der Erstehilfekasten verwendet werden?</German>
<Czech>Kde může být osobní lékárnička použita?</Czech>
</Key>
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_anywhere">
<English>Anywhere</English>
@ -3063,6 +3136,7 @@
<Polish>Wszędzie</Polish>
<Spanish>Donde sea</Spanish>
<German>Überall</German>
<Czech>Kdekoliv</Czech>
</Key>
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_vehicle">
<English>Medical vehicles</English>
@ -3070,6 +3144,7 @@
<Polish>Pojazdy medyczne</Polish>
<Spanish>Vehiculos médicos</Spanish>
<German>Medizinische Fahrzeuge</German>
<Czech>Zdravotnická vozidla</Czech>
</Key>
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_facility">
<English>Medical facility</English>
@ -3077,6 +3152,7 @@
<Polish>Budynki medyczne</Polish>
<Spanish>Centro médico</Spanish>
<German>Medizinische Einrichtungen</German>
<Czech>Zdravotnické zařízení</Czech>
</Key>
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_vehicleAndFacility">
<English>Vehicles &amp; facility</English>
@ -3084,6 +3160,7 @@
<Polish>Pojazdy i budynki medyczne</Polish>
<Spanish>Vehículos y centros</Spanish>
<German>Fahrzeuge &amp; Einrichtungen</German>
<Czech>Vozidla a zařízení</Czech>
</Key>
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_disabled">
<English>Disabled</English>
@ -3091,6 +3168,7 @@
<Polish>Wyłączone</Polish>
<Spanish>Desactivado</Spanish>
<German>Deaktiviert</German>
<Czech>Zakázáno</Czech>
</Key>
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_medicSetting_SurgicalKit_DisplayName">
<English>Allow Surgical kit (Adv)</English>
@ -3098,6 +3176,7 @@
<Polish>Ust. zestawu chirurg.</Polish>
<Spanish>Permitir equipo quirúrgico (Avanzado)</Spanish>
<German>Erlaube Operationskasten</German>
<Czech>Povolit chirurgickou soupravu (Pokr.)</Czech>
</Key>
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_medicSetting_SurgicalKit_Description">
<English>Who can use the surgical kit?</English>
@ -3105,6 +3184,7 @@
<Polish>Kto może skorzystać z zestawu chirurgicznego w celu zszycia ran?</Polish>
<Spanish>¿Quién puede utilizar el equipo quirúrgico?</Spanish>
<German>Wer kann den Operationskasten verwenden?</German>
<Czech>Kdo může použít chirurgickou soupravu?</Czech>
</Key>
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_consumeItem_SurgicalKit_DisplayName">
<English>Remove Surgical kit (Adv)</English>
@ -3112,6 +3192,7 @@
<Polish>Usuń zest. chir. po użyciu</Polish>
<Spanish>Eliminar equipo quirúrgico (Avanzado)</Spanish>
<German>Enrtferne Operationskasten (erweitert)</German>
<Czech>Odebrat chirurgickou soupravu (Pokr.)</Czech>
</Key>
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_consumeItem_SurgicalKit_Description">
<English>Should Surgical kit be removed on usage?</English>
@ -3119,6 +3200,7 @@
<Polish>Czy zestaw chirurgiczny powinien zniknąć z ekwipunku po jego użyciu?</Polish>
<Spanish>Eliminar el equipo quirúrgico después del uso</Spanish>
<German>Entferne Operationskästen bei Verwendung?</German>
<Czech>Odebrat chirurgickou soupravu po použití?</Czech>
</Key>
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_useLocation_SurgicalKit_DisplayName">
<English>Locations Surgical kit (Adv)</English>
@ -3126,6 +3208,7 @@
<Polish>Ogr. zestawu chirurg.</Polish>
<Spanish>Ubicaciones del equipo quirúrgico (Avanzado)</Spanish>
<German>Orte für Operationskästen (erweitert)</German>
<Czech>Lokace chirurgické soupravy (Pokr.)</Czech>
</Key>
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_useLocation_SurgicalKit_Description">
<English>Where can the Surgical kit be used?</English>
@ -3133,6 +3216,35 @@
<Polish>Gdzie można korzystać z zestawu chirurgicznego?</Polish>
<Spanish>Dónde se puede utilizar el equipo quirúrgico</Spanish>
<German>Wo kann der Operationskasten verwendet werden?</German>
<Czech>Kde může být použita chirurgická souprava?</Czech>
</Key>
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_healHitPointAfterAdvBandage_DisplayName">
<English>Bloodstains</English>
<German>Blutflecken</German>
<Polish>Plamy krwi</Polish>
<Czech>Skvrny od krve</Czech>
<Spanish>Manchas de sangre</Spanish>
</Key>
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_healHitPointAfterAdvBandage_Description">
<English>Bandaging removes bloodstains</English>
<German>Bandagieren entfernt Blutflecken</German>
<Polish>Bandażowanie usuwa ślady krwi</Polish>
<Czech>Obvázání odstraňuje skvrny od krve</Czech>
<Spanish>El vendaje elimina las manchas de sangre</Spanish>
</Key>
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_painIsOnlySuppressed_DisplayName">
<English>Pain suppression</English>
<German>Schmerzunterdrückung</German>
<Polish>Zwalczanie bólu</Polish>
<Czech>Potlačení bolesti</Czech>
<Spanish>Supresión del dolor</Spanish>
</Key>
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_painIsOnlySuppressed_Description">
<English>Pain is only temporarily suppressed, not removed</English>
<German>Schmerzen werden nur vorübergehend unterdrückt, nicht entfernt</German>
<Polish>Ból jest tylko tymczasowo zwalczany, nie jest usuwany trwale</Polish>
<Czech>Bolest je potlačena, ale jen dočastně</Czech>
<Spanish>El dolor se suprime solo temporalmente, no se elimina.</Spanish>
</Key>
<Key ID="STR_ACE_Medical_AdvancedMedicalSettings_Module_Description">
<English>Configure the treatment settings from ACE Medical</English>
@ -3140,6 +3252,7 @@
<Polish>Skonfiguruj zaawansowane ustawienia leczenia systemu medycznego ACE</Polish>
<Spanish>Configure las opciones de tratamiento del ACE Médico</Spanish>
<German>Behandlungseinstellungen vom ACE-Medical konfigurieren</German>
<Czech>Konfigurace nastavení léčby ze zdravotnické systému ACE</Czech>
</Key>
<Key ID="STR_ACE_Medical_ReviveSettings_Module_DisplayName">
<English>Revive Settings [ACE]</English>
@ -3147,6 +3260,7 @@
<Polish>Ustawienia wskrzeszania [ACE]</Polish>
<Spanish>Sistema de resucitado [ACE]</Spanish>
<German>Wiederbelebungseinstellungen [ACE]</German>
<Czech>Nastavení oživení [ACE]</Czech>
</Key>
<Key ID="STR_ACE_Medical_ReviveSettings_enableRevive_DisplayName">
<English>Enable Revive</English>
@ -3154,6 +3268,7 @@
<Polish>Aktywuj wskrzeszanie</Polish>
<Spanish>Habilitar resucitado</Spanish>
<German>Erlaube Wiederbelebung</German>
<Czech>Povolit oživení</Czech>
</Key>
<Key ID="STR_ACE_Medical_ReviveSettings_enableRevive_Description">
<English>Enable a basic revive system</English>
@ -3161,6 +3276,7 @@
<Polish>Aktywuj podstawowy system wskrzeszania</Polish>
<Spanish>Habilitar un sistema básico de resucitado</Spanish>
<German>Aktiviere Standard-Wiederbelebungssystem</German>
<Czech>Povolit základní systém oživení</Czech>
</Key>
<Key ID="STR_ACE_Medical_ReviveSettings_maxReviveTime_DisplayName">
<English>Max Revive time</English>
@ -3168,6 +3284,7 @@
<Polish>Maks. czas agonii</Polish>
<Spanish>Tiempo máximo de resucitado</Spanish>
<German>Maximale Wiederbelebungszeit</German>
<Czech>Maximální čas pro oživení</Czech>
</Key>
<Key ID="STR_ACE_Medical_ReviveSettings_maxReviveTime_Description">
<English>Max amount of seconds a unit can spend in revive state</English>
@ -3175,6 +3292,7 @@
<Polish>Maksymalna długość agonii w sekundach (czas na wskrzeszenie)</Polish>
<Spanish>Cantidad máxima de segundos que una unidad puede gastar en estado de resucitación</Spanish>
<German>Maximale Zeitspanne in Sekunden die eine Einheit im Wiederbelebungszustand verbringen kann</German>
<Czech>Maximální doba v agónii v sekundách</Czech>
</Key>
<Key ID="STR_ACE_Medical_ReviveSettings_amountOfReviveLives_DisplayName">
<English>Max Revive lives</English>
@ -3182,6 +3300,7 @@
<Polish>Maks. ilość wskrzeszeń</Polish>
<Spanish>Vidas máximas de resucitado</Spanish>
<German>Maximale Leben bei Wiederbelebung</German>
<Czech>Maximální počet oživení</Czech>
</Key>
<Key ID="STR_ACE_Medical_ReviveSettings_amountOfReviveLives_Description">
<English>Max amount of lives a unit. 0 or -1 is disabled.</English>
@ -3189,6 +3308,7 @@
<Polish>Maksymalna ilość wskrzeszeń. Wpisz 0 lub -1 aby wyłączyć.</Polish>
<Spanish>Cantidad máxima de vidas por unidad. 0 o -1 es desactivado.</Spanish>
<German>Maximale Anzahl von Leben einer Einheit. 0 or -1 bedeutet deaktiviert.</German>
<Czech>Maximální počet životu pro jednotku. 0 nebo -1 je zakázáno.</Czech>
</Key>
<Key ID="STR_ACE_Medical_ReviveSettings_Module_Description">
<English>Provides a medical system for both players and AI.</English>
@ -3196,6 +3316,7 @@
<Polish>Moduł ten aktywuje podstawowy system wskrzeszania. Jednostka po otrzymaniu śmiertelnych obrażeń przechodzi do stanu agonii, która trwa określoną długość czasu. W tym czasie aby wskrzesić i jednocześnie odratować jednostkę należy opatrzeć jej rany i wykonać RKO.</Polish>
<Spanish>Proporciona un sistema médico para jugadores e IA.</Spanish>
<German>Aktiviert das Medicsystem für Spieler und KI.</German>
<Czech>Poskytuje zdravotní systém pro hráče a AI.</Czech>
</Key>
<Key ID="STR_ACE_Medical_AssignMedicRoles_Module_DisplayName">
<English>Set Medic Class [ACE]</English>
@ -3203,6 +3324,7 @@
<Polish>Ustaw klasę medyka [ACE]</Polish>
<Spanish>Establecer case médica [ACE]</Spanish>
<German>Setze Sanitäterklassen [ACE]</German>
<Czech>Určit třídu medika [ACE]</Czech>
</Key>
<Key ID="STR_ACE_Medical_AssignMedicRoles_EnableList_DisplayName">
<English>List</English>
@ -3210,6 +3332,7 @@
<Polish>Lista</Polish>
<Spanish>Lista</Spanish>
<German>Liste</German>
<Czech>Seznam</Czech>
</Key>
<Key ID="STR_ACE_Medical_AssignMedicRoles_EnableList_Description">
<English>List of unit names that will be classified as medic, separated by commas.</English>
@ -3217,6 +3340,7 @@
<Polish>Lista nazw jednostek, które są sklasyfikowane jako medycy, oddzielone przecinkami.</Polish>
<Spanish>Lista de los nombres de las unidades que se clasifican como médico, separados por comas.</Spanish>
<German>Liste von Namen, die als Sanitäter verwendet werden. Wird durch Kommas getrennt.</German>
<Czech>Seznam osob které budou klasifikovány jako zdravotník, oddělené čárkami.</Czech>
</Key>
<Key ID="STR_ACE_Medical_AssignMedicRoles_role_DisplayName">
<English>Is Medic</English>
@ -3224,12 +3348,14 @@
<Polish>Klasa medyczna</Polish>
<Spanish>Es médico</Spanish>
<German>Ist Sanitäter</German>
<Czech>Je zdravotník</Czech>
</Key>
<Key ID="STR_ACE_Medical_AssignMedicRoles_role_Description">
<English></English>
<Russian></Russian>
<Polish></Polish>
<German>Dieses Modul legt fest welche Einheit ein Sanitäter ist.</German>
<Czech>Tento modul určuje, která jednotka je zdravotník.</Czech>
</Key>
<Key ID="STR_ACE_Medical_AssignMedicRoles_role_none">
<English>None</English>
@ -3237,6 +3363,7 @@
<Polish>Żadna</Polish>
<Spanish>Nada</Spanish>
<German>Keine</German>
<Czech>Žádný</Czech>
</Key>
<Key ID="STR_ACE_Medical_AssignMedicRoles_role_medic">
<English>Regular medic</English>
@ -3244,6 +3371,7 @@
<Polish>Zwykły medyk</Polish>
<Spanish>Médico regular</Spanish>
<German>Normaler Sanitäter</German>
<Czech>Řadový zdravotník</Czech>
</Key>
<Key ID="STR_ACE_Medical_AssignMedicRoles_role_doctor">
<English>Doctor (Only Advanced Medics)</English>
@ -3251,6 +3379,7 @@
<Polish>Doktor (tylko zaawansowani medycy)</Polish>
<Spanish>Doctor (Solo medicina avanzada)</Spanish>
<German>Arzt (nur erweiterte Sanitäter)</German>
<Czech>Doktor (Pouze pokročilý zdravotníci)</Czech>
</Key>
<Key ID="STR_ACE_Medical_AssignMedicRoles_Module_Description">
<English>Assigns the ACE medic class to a unit</English>
@ -3258,6 +3387,7 @@
<Polish>Moduł ten przypisuje klasę medyka ACE do jednostek.</Polish>
<Spanish>Asigna la clase médico ACE a una unidad</Spanish>
<German>Weise die ACE-Sanitäterklasse einer Einheit zu</German>
<Czech>Přiřadí ACE třídu zdravotníka do jednotky</Czech>
</Key>
<Key ID="STR_ACE_Medical_AssignMedicVehicle_Module_DisplayName">
<English>Set Medical Vehicle [ACE]</English>
@ -3265,6 +3395,7 @@
<Polish>Ustaw pojazd medyczny [ACE]</Polish>
<Spanish>Establecer vehículos médicos [ACE]</Spanish>
<German>Setze medizinisches Fahrzeug [ACE]</German>
<Czech>Určit zdravotnické vozidlo [ACE]</Czech>
</Key>
<Key ID="STR_ACE_Medical_AssignMedicVehicle_EnableList_DisplayName">
<English>List</English>
@ -3272,6 +3403,7 @@
<Polish>Lista</Polish>
<Spanish>Lista</Spanish>
<German>Liste</German>
<Czech>Seznam</Czech>
</Key>
<Key ID="STR_ACE_Medical_AssignMedicVehicle_EnableList_Description">
<English>List of vehicles that will be classified as medical vehicle, separated by commas.</English>
@ -3279,6 +3411,7 @@
<Polish>Lista nazw pojazdów, które są sklasyfikowane jako pojazdy medyczne, oddzielone przecinkami.</Polish>
<Spanish>Lista de los vehículos que se clasifican como vehículo médicos, separados por comas.</Spanish>
<German>Liste ovn Fahrzeugen, die als medizinische Fahrzeuge verwendet werden. Wird durch Kommas getrennt.</German>
<Czech>Seznam vozidel které budou klasifikovány jako zdravotnická vozidla, oddělené čárkami.</Czech>
</Key>
<Key ID="STR_ACE_Medical_AssignMedicVehicle_enabled_DisplayName">
<English>Is Medical Vehicle</English>
@ -3286,6 +3419,7 @@
<Polish>Jest pojazdem med.</Polish>
<Spanish>Es vehículo médico</Spanish>
<German>Ist medizinisches Fahrzeug</German>
<Czech>Je zdravotnické vozidlo</Czech>
</Key>
<Key ID="STR_ACE_Medical_AssignMedicVehicle_enabled_Description">
<English>Whatever or not the objects in the list will be a medical vehicle.</English>
@ -3293,6 +3427,7 @@
<Polish>Czy pojazdy z tej listy są pojazdami medycznymi.</Polish>
<Spanish>Cualquiera de la lista o fuera de ella será un vehículo médico.</Spanish>
<German>Leg fest ob das Objekt in der Liste ein medizinisches Fahrzeug ist.</German>
<Czech>Ať už jsou nebo nejsou objekty v seznamu budou zdravotnická vozidla.</Czech>
</Key>
<Key ID="STR_ACE_Medical_AssignMedicVehicle_Module_Description">
<English>Assigns the ACE medic class to a unit</English>
@ -3300,6 +3435,7 @@
<Polish>Moduł ten pozwala na przypisanie danym pojazdom statusu pojazdów medycznych. Wewnątrz takiego pojazdu można wykonywać zaawansowane zabiegi medyczne.</Polish>
<Spanish>Asigna la clase médico ACE a una unidad</Spanish>
<German>Weist die ACE-Sanitäterklasse einer Einheit zu</German>
<Czech>Přiřadí ACE třídu zdravotníka do jednotky</Czech>
</Key>
<Key ID="STR_ACE_Medical_AssignMedicalFacility_Module_DisplayName">
<English>Set Medical Facility [ACE]</English>
@ -3307,6 +3443,7 @@
<Polish>Ustaw budynek medyczny [ACE]</Polish>
<Spanish>Establece el centro médico [ACE]</Spanish>
<German>Setze medizinische Einrichtung [ACE]</German>
<Czech>Určit zdravotnické zařízení [ACE]</Czech>
</Key>
<Key ID="STR_ACE_Medical_AssignMedicalFacility_enabled_DisplayName">
<English>Is Medical Facility</English>
@ -3314,6 +3451,7 @@
<Polish>Jest budynkiem med.</Polish>
<Spanish>Es centro médico</Spanish>
<German>Ist eine medizinische Einrichtung</German>
<Czech>Je zdravotnické zařízení</Czech>
</Key>
<Key ID="STR_ACE_Medical_AssignMedicalFacility_enabled_Description">
<English>Registers an object as a medical facility</English>
@ -3321,6 +3459,7 @@
<Polish>Przypisuje danemu obiektowi status budynku medycznego</Polish>
<Spanish>Registra un objeto como un centro médico</Spanish>
<German>Definiert ein Objekt als medizinische Einrichtung</German>
<Czech>Registruje objekt jako zdravotnické zařízení</Czech>
</Key>
<Key ID="STR_ACE_Medical_AssignMedicalFacility_Module_Description">
<English>Defines an object as a medical facility. This allows for more advanced treatments. Can be used on buildings and vehicles.</English>
@ -3328,6 +3467,7 @@
<Polish>Moduł ten pozwala przypisać status budynku medycznego danemu obiektowi. Budynek taki pozwala na wykonywanie zaawansowanych zabiegów medycznych. Może być użyte na pojazdach i budynkach.</Polish>
<Spanish>Define un objeto como un centro médico. Esto permite tratamientos más avanzados. Se puede utilizar en edificios y vehículos.</Spanish>
<German>Definiert ein Objekt als medizinische Einrichtung. Das ermöglicht weitere Behandlungen. Kann bei Gebäuden und Fahrzeugen verwendet werden.</German>
<Czech>Definuje objekt jako zdravotnické zařízení. To umožňuje více pokročilé léčení. Může být použito na budovy nebo na vozidla.</Czech>
</Key>
<Key ID="STR_ACE_Medical_medicalSupplyCrate">
<English>[ACE] Medical Supply Crate (Basic)</English>
@ -3335,6 +3475,7 @@
<Polish>[ACE] Skrzynka z zapasami medycznymi (podstawowa)</Polish>
<Spanish>[ACE] Caja de suministros médicos (Básica)</Spanish>
<German>[ACE] Medizinische Kiste (standard)</German>
<Czech>[ACE] Zdravotnické zásoby (základní)</Czech>
</Key>
<Key ID="STR_ACE_Medical_medicalSupplyCrate_advanced">
<English>[ACE] Medical Supply Crate (Advanced)</English>
@ -3342,6 +3483,7 @@
<Polish>[ACE] Skrzynka z zapasami medycznymi (zaawansowana)</Polish>
<Spanish>[ACE] Caja de suministros médicos (Avanzada)</Spanish>
<German>[ACE] Medizinische Kiste (erweitert)</German>
<Czech>[ACE] Zdravotnické zásoby (pokročilé)</Czech>
</Key>
<Key ID="STR_ACE_Medical_Yes">
<English>Yes</English>
@ -3368,4 +3510,4 @@
<Italian>No</Italian>
</Key>
</Package>
</Project>
</Project>

View File

@ -3,34 +3,28 @@ class CfgVehicles {
class CAManBase: Man {
class ACE_SelfActions {
class ACE_Equipment {
class GVAR(show) {
//Opens the mini map
displayName = CSTRING(show);
condition = QUOTE(([DISPLAY_MODE_DISPLAY] call FUNC(canShow)) && {GVAR(currentShowMode) != DISPLAY_MODE_DISPLAY});
statement = QUOTE([DISPLAY_MODE_DISPLAY] call FUNC(openDisplay));
showDisabled = 0;
priority = 0.2;
icon = QUOTE(PATHTOF(UI\icon_microDAGR.paa));
exceptions[] = {"notOnMap", "isNotInside"};
};
class GVAR(configure) {
//Opens the dialog
displayName = CSTRING(configure);
condition = QUOTE(([DISPLAY_MODE_DIALOG] call FUNC(canShow)) && {GVAR(currentShowMode) != DISPLAY_MODE_DIALOG});
statement = QUOTE([DISPLAY_MODE_DIALOG] call FUNC(openDisplay));
showDisabled = 0;
priority = 0.1;
icon = QUOTE(PATHTOF(UI\icon_microDAGR.paa));
exceptions[] = {"notOnMap", "isNotInside"};
};
class GVAR(close) {
displayName = CSTRING(closeUnit);
condition = QUOTE(GVAR(currentShowMode) != DISPLAY_MODE_CLOSED);
statement = QUOTE([DISPLAY_MODE_CLOSED] call FUNC(openDisplay));
showDisabled = 0;
priority = 0.3;
icon = QUOTE(PATHTOF(UI\icon_microDAGR.paa));
exceptions[] = {"notOnMap", "isNotInside"};
class GVAR(show) {
//Opens the mini map
displayName = CSTRING(show);
condition = QUOTE(([DISPLAY_MODE_DISPLAY] call FUNC(canShow)) && {GVAR(currentShowMode) != DISPLAY_MODE_DISPLAY});
statement = QUOTE([DISPLAY_MODE_DISPLAY] call FUNC(openDisplay));
icon = QUOTE(PATHTOF(UI\icon_microDAGR.paa));
exceptions[] = {"notOnMap", "isNotInside"};
};
class GVAR(close) {
displayName = CSTRING(closeUnit);
condition = QUOTE(GVAR(currentShowMode) != DISPLAY_MODE_CLOSED);
statement = QUOTE([DISPLAY_MODE_CLOSED] call FUNC(openDisplay));
icon = QUOTE(PATHTOF(UI\icon_microDAGR.paa));
exceptions[] = {"notOnMap", "isNotInside"};
};
};
};
};

View File

@ -3,33 +3,21 @@
if (!hasInterface) exitWith {};
//Add Keybinds:
["ACE3 Equipment", QGVAR(openGPS), (localize LSTRING(toggleUnit)),
{
// canInteractWith (can use on map)
if !([ACE_player, objNull, ["notOnMap", "isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false};
// Conditions: specific
if (!("ACE_microDAGR" in (items ace_player))) exitWith {false};
//Add deviceKey entry:
private ["_conditonCode", "_toggleCode", "_closeCode"];
_conditonCode = {
("ACE_microDAGR" in (items ACE_player))
};
_toggleCode = {
if !([ACE_player, objNull, ["notOnMap", "isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {};
[] call FUNC(openDisplay); //toggle display mode
true;
},
{false},
[0xC7, [false, false, false]], false] call cba_fnc_addKeybind; //Home Key
};
_closeCode = {
if (GVAR(currentShowMode) == DISPLAY_MODE_CLOSED) exitWith {};
[DISPLAY_MODE_CLOSED] call FUNC(openDisplay);
};
[(localize LSTRING(itemName)), QUOTE(PATHTOF(images\microDAGR_item.paa)), _conditonCode, _toggleCode, _closeCode] call EFUNC(common,deviceKeyRegisterNew);
["ACE3 Equipment", QGVAR(closeGPS), (localize LSTRING(closeUnit)),
{
// canInteractWith (can use on map)
if !([ACE_player, objNull, ["notOnMap", "isNotInside"]] call EFUNC(common,canInteractWith)) exitWith {false};
// Conditions: specific
if (!("ACE_microDAGR" in (items ace_player))) exitWith {false};
if (GVAR(currentShowMode) == DISPLAY_MODE_CLOSED) exitWith {false};
[DISPLAY_MODE_CLOSED] call FUNC(openDisplay); //close unit
true;
},
{false},
[0xC7, [false, true, false]], false] call cba_fnc_addKeybind; //CTRL + Home Key
//Add Eventhandler:
["RangerfinderData", {_this call FUNC(recieveRangefinderData)}] call EFUNC(common,addEventHandler);

View File

@ -270,7 +270,7 @@
<German>Zeige MicroDAGR</German>
<Spanish>Mostrar MicroDAGR</Spanish>
<Russian>Показать MicroDAGR</Russian>
<Czech>Ukázat MicroDAGR GPS</Czech>
<Czech>Ukázat MicroDAGR</Czech>
<Polish>Pokaż MicroDAGR</Polish>
<French>Afficher MicroDAGR</French>
<Hungarian>MicroDAGR mutatása</Hungarian>
@ -282,7 +282,7 @@
<German>Konfiguriere MicroDAGR</German>
<Spanish>Configurar MicroDAGR</Spanish>
<Russian>Настроить MicroDAGR</Russian>
<Czech>Konfigurovat MicroDAGR GPS</Czech>
<Czech>Konfigurovat MicroDAGR</Czech>
<Polish>Konfiguruj MicroDAGR</Polish>
<French>Configurer MicroDAGR</French>
<Hungarian>MicroDAGR konfigurálása</Hungarian>
@ -294,7 +294,7 @@
<German>Schließe MicroDAGR</German>
<Spanish>Cerrar MicroDAGR</Spanish>
<Russian>Закрыть MicroDAGR</Russian>
<Czech>Zavřít MicroDAGR GPS</Czech>
<Czech>Zavřít MicroDAGR</Czech>
<Polish>Zamknij MicroDAGR</Polish>
<French>Fermer MicroDAGR</French>
<Hungarian>MicroDAGR elrejtése</Hungarian>
@ -305,41 +305,48 @@
<English>MicroDAGR Map Fill</English>
<Polish>Wypełnienie mapy MicroDAGR</Polish>
<Spanish>Relleno del mapa MicroDAGR</Spanish>
<Czech>MicroDAGR - Vyplnění mapy</Czech>
</Key>
<Key ID="STR_ACE_MicroDAGR_MapDataAvailable_DisplayName">
<English>MicroDAGR Map Fill</English>
<Polish>Wypełnienie mapy MicroDAGR</Polish>
<Spanish>Relleno del mapa MicroDAGR</Spanish>
<Czech>MicroDAGR - Vyplnění mapy</Czech>
</Key>
<Key ID="STR_ACE_MicroDAGR_MapDataAvailable_Description">
<English>How much map data is filled on MicroDAGR's</English>
<Polish>Jak duża część informacji mapy jest załadowana do MicroDAGR?</Polish>
<Spanish>Cuanta información está disponible en el mapa del MicroDAG</Spanish>
<German>Wie viel Daten auf einem MicroDAGR zu sehen sind</German>
<Czech>Kolik informací je načteno do MicroDAGR?</Czech>
</Key>
<Key ID="STR_ACE_MicroDAGR_None">
<English>Full Satellite + Buildings</English>
<Polish>Pełna satelitarna + budynki</Polish>
<Spanish>Satelite completo + Edificios</Spanish>
<German>Satellitenbild + Gebäude</German>
<Czech>Satelit + Budovy</Czech>
</Key>
<Key ID="STR_ACE_MicroDAGR_Side">
<English>Topographical + Roads</English>
<Polish>Topograficzna + drogi</Polish>
<Spanish>Topografico + Carreteras</Spanish>
<German>Topografisch + Straßen</German>
<Czech>Topografické + Cesty</Czech>
</Key>
<Key ID="STR_ACE_MicroDAGR_Unique">
<English>None (Cannot use map view)</English>
<Polish>Żadna (wyłącza ekran mapy)</Polish>
<Spanish>Nada (No se puede el mapa)</Spanish>
<German>Keine (kann keine Kartenansicht verwenden)</German>
<Czech>Žádný (Nelze použít zobrazení mapy)</Czech>
</Key>
<Key ID="STR_ACE_MicroDAGR_Module_Description">
<English>Controls how much data is filled on the microDAGR items. Less data restricts the map view to show less on the minimap.&lt;br /&gt;Source: microDAGR.pbo</English>
<Polish>Moduł ten pozwala kontrolować jak duża ilość informacji jest załadowana do przedmiotów MicroDAGR. Mniejsza ilość danych ogranicza widok mapy pokazując mniej rzeczy na minimapie.&lt;br /&gt;Źródło: microDAGR.pbo</Polish>
<Spanish>Controla la cantidad de información disponible en el microDAGR. Menos datos limitan la vista del mapa a mostrar menos en el minimapa.&lt;br /&gt;Fuente: microDAGR.pbo</Spanish>
<German>Steuert wie viel Daten auf dem microDAGR zu sehen ist. Weniger Daten schränken die Kartenansicht ein, um mehr auf der Minimap zu sehen.&lt;br /&gt;Quelle: microDAGR.pbo</German>
<Czech>Tento modul umožňuje kontrolovat, kolik informací je obsaženo v MicroDAGR. Menší množství dat omezené zobrazením mapy ukazují méně věcí na minimapě.&lt;br /&gt;Zdroj: microDAGR.pbo</Czech>
</Key>
</Package>
</Project>
</Project>

View File

@ -20,6 +20,7 @@ class CfgVehicles {
class ACE_Comanche_Test : B_Heli_Attack_01_F {
scope = 1;
scopeCurator = 0;
displayName = "ACE_Comanche_Test";
author = "ACE Team";
class Library {

View File

@ -2,7 +2,7 @@
class CfgPatches {
class ADDON {
units[] = {};
units[] = {"ACE_Comanche_Test"};
weapons[] = {};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_laser"};

View File

@ -102,18 +102,21 @@
<Polish>Wyłącz</Polish>
<Spanish>Desactivado</Spanish>
<German>Aus</German>
<Czech>Vypnout</Czech>
</Key>
<Key ID="STR_ACE_MissileGuidance_PlayerOnly">
<English>Player Only</English>
<Polish>Tylko gracz</Polish>
<Spanish>Solo jugador</Spanish>
<German>Nur Spieler</German>
<Czech>Pouze hráči</Czech>
</Key>
<Key ID="STR_ACE_MissileGuidance_PlayerAndAi">
<English>Player and AI</English>
<Polish>Gracz oraz AI</Polish>
<Spanish>Jugador e IA</Spanish>
<German>Spieler und KI</German>
<Czech>Hráči a AI</Czech>
</Key>
</Package>
</Project>
</Project>

View File

@ -6,102 +6,119 @@
<Polish>ACE Moduły misji</Polish>
<Spanish>Módulo de misiones ACE</Spanish>
<German>ACE-Missionsmodule</German>
<Czech>ACE Moduly mise</Czech>
</Key>
<Key ID="STR_ACE_MissionModules_AmbianceSounds_DisplayName">
<English>Ambiance Sounds [ACE]</English>
<Polish>Dźwięki [ACE]</Polish>
<Spanish>[ACE] Sonidos ambiente</Spanish>
<German>Umgebungsgeräusche [ACE]</German>
<Czech>Zvuky prostředí [ACE]</Czech>
</Key>
<Key ID="STR_ACE_MissionModules_AmbianceSounds_soundFiles_DisplayName">
<English>Sounds</English>
<Polish>Dźwięki</Polish>
<Spanish>Sonidos</Spanish>
<German>Sounds</German>
<Czech>Zvuky</Czech>
</Key>
<Key ID="STR_ACE_MissionModules_AmbianceSounds_soundFiles_Description">
<English>Class names of the ambiance sounds to be played. Seperated by ','</English>
<Polish>Class name-y dźwięków do odtwarzania. Oddzielone przy użyciu ','</Polish>
<Spanish>Class names de los sonidos ambiente que se reproducirán. Separados por ','</Spanish>
<German>Klassennamen der Umgebungsgeräusche, die abgespielt werden sollen. Getrennt durch ","</German>
<Czech>Class names zvuků prostředí, které budou přehrány. Oddělené ',' </Czech>
</Key>
<Key ID="STR_ACE_MissionModules_AmbianceSounds_minimalDistance_DisplayName">
<English>Minimal Distance</English>
<Polish>Minimalny dystans</Polish>
<Spanish>Distancia mínima</Spanish>
<German>Mindestabstand</German>
<Czech>Minimální vzdálenost</Czech>
</Key>
<Key ID="STR_ACE_MissionModules_AmbianceSounds_minimalDistance_Description">
<English>Used for calculating a random position and sets the minimal distance between the players and the played sound file(s)</English>
<Polish>Używany do obliczania losowej pozycji a także ustawia minimalny dystans pomiędzy graczami a odtwarzanymi plikami dźwiękowymi</Polish>
<Spanish>Usado para calcular una posición aleatoria y establecer la distancia mínima entre los jugadores y los ficheros de sonido reproducidos</Spanish>
<German>Wird verwendet, um eine zufällige Position zu bestimmen und setzt den Mindestabstand zwischen Spielern und der/den abzuspielenden Sounddatei(en) fest</German>
<Czech>Používá se pro výpočet náhodné pozice a určuje minimální vzdálenost mezi hráči a přehrávaným zvukem.</Czech>
</Key>
<Key ID="STR_ACE_MissionModules_AmbianceSounds_maximalDistance_DisplayName">
<English>Maximum Distance</English>
<Polish>Maksymalny dystans</Polish>
<Spanish>Distancia máxima</Spanish>
<German>Maximalabstand</German>
<Czech>Maximální vzdálenost</Czech>
</Key>
<Key ID="STR_ACE_MissionModules_AmbianceSounds_maximalDistance_Description">
<English>Used for calculating a random position and sets the maximum distance between the players and the played sound file(s)</English>
<Polish>Używany do obliczania losowej pozycji a także ustawia maksymalny dystans pomiędzy graczami a odtwarzanymi plikami dźwiękowymi</Polish>
<Spanish>Usado para calcular una posición aleatoria y establecer la distancia máxima entre los jugadores y los ficheros de sonido reproducidos</Spanish>
<German>Wird verwendet, um eine zufällige Position zu bestimmen und setzt den Maximalabstand zwischen Spielern und der/den abzuspielenden Sounddatei(en) fest</German>
<Czech>Používá se pro výpočet náhodné pozice a určuje maximální vzdálenost mezi hráči a přehrávaným zvukem.</Czech>
</Key>
<Key ID="STR_ACE_MissionModules_AmbianceSounds_minimalDelay_DisplayName">
<English>Minimal Delay</English>
<Polish>Minimalne opóźnienie</Polish>
<Spanish>Retraso mínimo</Spanish>
<German>Minimale Verzögerung</German>
<Czech>Minimální prodleva</Czech>
</Key>
<Key ID="STR_ACE_MissionModules_AmbianceSounds_minimalDelay_Description">
<English>Minimal delay between sounds played</English>
<Polish>Minimalne opóźnienie pomiędzy odtwarzanymi dźwiękami</Polish>
<Spanish>Retraso mínimo entre los sonidos reproducidos</Spanish>
<German>Minimale Verzögerung zwischen abzuspielenden Sounds</German>
<Czech>Minimální prodleva mezi přehrávanými zvuky</Czech>
</Key>
<Key ID="STR_ACE_MissionModules_AmbianceSounds_maximalDelay_DisplayName">
<English>Maximum Delay</English>
<Polish>Maksymalne opóźnienie</Polish>
<Spanish>Retraso máximo</Spanish>
<German>Maximale Verzögerung</German>
<Czech>Maximální prodleva</Czech>
</Key>
<Key ID="STR_ACE_MissionModules_AmbianceSounds_maximalDelay_Description">
<English>Maximum delay between sounds played</English>
<Polish>Maksymalne opóźnienie pomiędzy odtwarzanymi dźwiękami</Polish>
<Spanish>Retraso máximo entre los sonidos reproducidos</Spanish>
<German>Maximale Verzögerung zwischen abzuspielenden Sounds</German>
<Czech>Maximální prodleva mezi přehrávanými zvuky</Czech>
</Key>
<Key ID="STR_ACE_MissionModules_AmbianceSounds_followPlayers_DisplayName">
<English>Follow Players</English>
<Polish>Podążaj za graczami</Polish>
<Spanish>Seguir jugadores</Spanish>
<German>Spielern folgen</German>
<Czech>Následovat hráče</Czech>
</Key>
<Key ID="STR_ACE_MissionModules_AmbianceSounds_followPlayers_Description">
<English>Follow players. If set to false, loop will play sounds only nearby logic position.</English>
<Polish>Podążaj za graczami. Jeżeli ustawione na 'Nie', pętla będzie odtwarzana tylko w pobliżu pozycji logiki.</Polish>
<Spanish>Seguir jugadores. Si esta desabilitado (false), se reproducirán sonidos en bucle solo cerca de la posición lógica.</Spanish>
<German>Spielern folgen. Wenn auf falsch gesetzt, werden Sounds nur in der Nähe des Logikmoduls abgespielt.</German>
<Czech>Následuj hráče. Pokud je FALSE, smyčka zvuku bude přehrávána na nejbližší pozici logiki.</Czech>
</Key>
<Key ID="STR_ACE_MissionModules_AmbianceSounds_soundVolume_DisplayName">
<English>Volume</English>
<Polish>Głośność</Polish>
<Spanish>Volumen</Spanish>
<German>Lautstärke</German>
<Czech>Hlasitost</Czech>
</Key>
<Key ID="STR_ACE_MissionModules_AmbianceSounds_soundVolume_Description">
<English>The volume of the sounds played</English>
<Polish>Głośność odtwarzanych dźwięków</Polish>
<Spanish>Volumen de los sonidos reproducidos</Spanish>
<German>Lautstärke der abzuspielenden Sounds</German>
<Czech>Hlasitost přehrávaného zvuku</Czech>
</Key>
<Key ID="STR_ACE_MissionModules_AmbianceSounds_Description">
<English>Ambiance sounds loop (synced across MP)</English>
<Polish>Pętla odtwarzania dzwięków (synchronizowana na MP)</Polish>
<Spanish>Bucle de sonidos ambiente (sincronizados en MP)</Spanish>
<German>Umgebungsgeräusch-Schleife (im MP synchronisiert)</German>
<Czech>Smyčka okkolního zvuku (synchronizováno v MP)</Czech>
</Key>
</Package>
</Project>
</Project>

View File

@ -54,47 +54,55 @@
<Polish>Moździerz MK6 - Ustawienia</Polish>
<Spanish>Ajustes MK6</Spanish>
<German>MK6-Einstellungen</German>
<Czech>MK6 - Nastavení</Czech>
</Key>
<Key ID="STR_ACE_Mk6Mortar_airResistanceEnabled_DisplayName">
<English>Air Resistance</English>
<Polish>Opór powietrza</Polish>
<Spanish>Resistencia al aire</Spanish>
<German>Luftwiderstand</German>
<Czech>Odpor vzduchu</Czech>
</Key>
<Key ID="STR_ACE_Mk6Mortar_airResistanceEnabled_Description">
<English>For Player Shots, Model Air Resistance and Wind Effects</English>
<Polish>Modeluj opór powietrza oraz wpływ wiatru na tor lotu pocisku dla strzałów z moździerza MK6 przez graczy</Polish>
<Spanish>Para disparos del jugador, modelo de resistencia al aire y efectos de viento</Spanish>
<German>Für Spielerschüsse, Luftwiderstand und Windeffekte</German>
<Czech>Pro hráčovu střelbu, Model odporu vzduchu a povětrných podmínek</Czech>
</Key>
<Key ID="STR_ACE_Mk6Mortar_allowComputerRangefinder_DisplayName">
<English>Allow MK6 Computer</English>
<Polish>Komputer MK6</Polish>
<Spanish>Habilitar ordenador del MK6</Spanish>
<German>Erlaube MK6-Computer</German>
<Czech>MK6 - Povolit počítač</Czech>
</Key>
<Key ID="STR_ACE_Mk6Mortar_allowComputerRangefinder_Description">
<English>Show the Computer and Rangefinder (these NEED to be removed if you enable air resistance)</English>
<Polish>Zezwól na komputer i dalmierz (opcja ta MUSI zostać wyłączona jeżeli aktywowałeś opór powietrza)</Polish>
<Spanish>Muestra el ordenador y el medidor de distancia (DEBEN ser quitados si se activa la resistecia al aire)</Spanish>
<German>Zeige den Computer und den Entfernungsmesser an (diese MÜSSEN entfernt werden, wenn der Luftwiderstand aktiviert ist)</German>
<Czech>Zobrazit počítač a dálkoměr (toto MUSÍ být odstraněno pokud je zapnut odpor vzduchu)</Czech>
</Key>
<Key ID="STR_ACE_Mk6Mortar_allowCompass_DisplayName">
<English>Allow MK6 Compass</English>
<Polish>Kompas MK6</Polish>
<Spanish>Habilitar brujula del MK6</Spanish>
<German>Erlaube MK6-Kompass</German>
<Czech>MK6 - Povolit kompas</Czech>
</Key>
<Key ID="STR_ACE_Mk6Mortar_allowCompass_Description">
<English>Show the MK6 Digital Compass</English>
<Polish>Pokaż kompas MK6</Polish>
<Spanish>Muestra la brujula digital en el MK6</Spanish>
<German>Zeige MK6-Digitaler-Kompass</German>
<Czech>MK6 - Zobrazit digitální kompas</Czech>
</Key>
<Key ID="STR_ACE_Mk6Mortar_Module_Description">
<English></English>
<Polish>Moduł ten pozwala dostosować ustawienia moździerza MK6.</Polish>
<German>Dieses Modul erlaubt das Einstellen des MK6-Mörsers.</German>
<Czech>Tento modul umožňuje nastavení minometu MK6.</Czech>
</Key>
</Package>
</Project>
</Project>

View File

@ -43,4 +43,9 @@
};
};
}foreach GVAR(moduleInitCollection);
if (isServer) then {
GVAR(serverModulesRead) = true;
publicVariable QGVAR(serverModulesRead);
};
}] call EFUNC(common,addEventhandler);

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