diff --git a/AUTHORS.txt b/AUTHORS.txt index e8d1b9affb..4781fdb531 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -9,6 +9,7 @@ Brandon (TCVM) bux578 commy2 +Dahlgren esteldunedain Felix Wiegand Garth "L-H" de Wet diff --git a/addons/arsenal/functions/fnc_sortStatement_protection.sqf b/addons/arsenal/functions/fnc_sortStatement_protection.sqf index 4ab0509e42..463c75e03d 100644 --- a/addons/arsenal/functions/fnc_sortStatement_protection.sqf +++ b/addons/arsenal/functions/fnc_sortStatement_protection.sqf @@ -14,7 +14,8 @@ * Public: No */ -params ["_itemCfg", "_ballisticCo", "_explosiveCo"]; +params ["_itemInfo", "_ballisticCo", "_explosiveCo"]; +_itemInfo params ["_itemCfg"]; (([[_itemCfg], ["passthrough", "armor"]] call BIS_fnc_configExtremes) select 1) params [["_passthroughMax", 0], ["_armorMax", 0]]; diff --git a/addons/arsenal/stringtable.xml b/addons/arsenal/stringtable.xml index 2585abc530..ebb9d7a5c8 100644 --- a/addons/arsenal/stringtable.xml +++ b/addons/arsenal/stringtable.xml @@ -418,9 +418,11 @@ Sort by ballistic protection + Trier par protection balistique Sort by explosive protection + Trier par résistance aux explosifs Share or stop sharing the selected loadout diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index 20e9af803b..8ad1b4729a 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -130,6 +130,14 @@ class CfgAmmo { ACE_muzzleVelocities[]={723, 764, 796, 825, 843, 866, 878, 892, 906, 915, 922, 900}; ACE_barrelLengths[]={210.82, 238.76, 269.24, 299.72, 330.2, 360.68, 391.16, 419.1, 449.58, 480.06, 508.0, 609.6}; }; + + class B_556x45_dual: B_556x45_Ball { + airFriction = -0.00055; + ACE_ammoTempMuzzleVelocityShifts[] = {-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_muzzleVelocities[] = {268}; // at 21°C, at 15°C 267 m/s according with the 20Rnd_556x45_UW_mag initSpeed + ACE_barrelLengths[] = {457.2}; // according with the SDAR barrel length: https://en.wikipedia.org/wiki/Kel-Tec_RFB + }; + class ACE_556x45_Ball_Mk262 : B_556x45_Ball { airFriction=-0.00111805; ACE_caliber=5.69; diff --git a/addons/captives/functions/fnc_addLoadCaptiveActions.sqf b/addons/captives/functions/fnc_addLoadCaptiveActions.sqf index d1ad8f603d..279ca0924e 100644 --- a/addons/captives/functions/fnc_addLoadCaptiveActions.sqf +++ b/addons/captives/functions/fnc_addLoadCaptiveActions.sqf @@ -22,4 +22,4 @@ private _statement = { [_player, _target, _vehicle] call FUNC(doLoadCaptive); }; -[_target call EFUNC(common,nearestVehiclesFreeSeat), _statement, _target] call EFUNC(interact_menu,createVehiclesActions) +[[_target, nil, true] call EFUNC(common,nearestVehiclesFreeSeat), _statement, _target] call EFUNC(interact_menu,createVehiclesActions) diff --git a/addons/captives/functions/fnc_canLoadCaptive.sqf b/addons/captives/functions/fnc_canLoadCaptive.sqf index 2129b36f5a..b1757884b7 100644 --- a/addons/captives/functions/fnc_canLoadCaptive.sqf +++ b/addons/captives/functions/fnc_canLoadCaptive.sqf @@ -34,7 +34,7 @@ if (isNull _target || {(vehicle _target) != _target} || {!(_target getVariable [ if (isNull _vehicle) then { // Looking at a captive unit, get nearest vehicle with valid seat: - _vehicle = (_target call EFUNC(common,nearestVehiclesFreeSeat)) param [0, objNull]; + _vehicle = ([_target, nil, true] call EFUNC(common,nearestVehiclesFreeSeat)) param [0, objNull]; } else { // We have a vehicle picked, make sure it has empty seats: if (_vehicle emptyPositions "cargo" == 0 && {_vehicle emptyPositions "gunner" == 0}) then { diff --git a/addons/captives/functions/fnc_doLoadCaptive.sqf b/addons/captives/functions/fnc_doLoadCaptive.sqf index e4e3b5f45b..7740610b6a 100644 --- a/addons/captives/functions/fnc_doLoadCaptive.sqf +++ b/addons/captives/functions/fnc_doLoadCaptive.sqf @@ -31,7 +31,7 @@ if (isNull _target || {(vehicle _target) != _target} || {!(_target getVariable [ if (isNull _vehicle) then { // Looking at a captive unit, get nearest vehicle with valid seat: - _vehicle = (_target call EFUNC(common,nearestVehiclesFreeSeat)) param [0, objNull]; + _vehicle = ([_target, nil, true] call EFUNC(common,nearestVehiclesFreeSeat)) param [0, objNull]; } else { // We have a vehicle picked, make sure it has empty seats: if (_vehicle emptyPositions "cargo" == 0 && {_vehicle emptyPositions "gunner" == 0}) then { diff --git a/addons/common/functions/fnc_loadPersonLocal.sqf b/addons/common/functions/fnc_loadPersonLocal.sqf index 0426a94582..7135e9e302 100644 --- a/addons/common/functions/fnc_loadPersonLocal.sqf +++ b/addons/common/functions/fnc_loadPersonLocal.sqf @@ -21,11 +21,30 @@ params ["_unit", "_vehicle", ["_caller", objNull]]; TRACE_3("loadPersonLocal",_unit,_vehicle,_caller); private _slotsOpen = false; -if ((_vehicle emptyPositions "cargo" > 0) && {!(_unit getVariable ['ACE_isUnconscious', false])} || {(getNumber (configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "ejectDeadCargo")) == 0}) then { +if ((_vehicle emptyPositions "cargo" > 0) && {!(_unit getVariable ['ACE_isUnconscious', false]) || {(getNumber (configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "ejectDeadCargo")) == 0}}) then { _unit moveInCargo _vehicle; + TRACE_1("moveInCargo",_vehicle); _slotsOpen = true; } else { - if (_vehicle emptyPositions "gunner" > 0) then { + // Check if an empty turret is available + // This already excludes FFV seats, which count as cargo positions + private _turrets = fullCrew [_vehicle, "turret", true]; + private _index = _turrets findIf {isNull (_x#0)}; + if (_index >= 0) exitWith { + _unit moveInTurret [_vehicle, _turrets#_index#3]; + TRACE_2("moveInTurret",_vehicle,_turrets#_index#3); + _slotsOpen = true; + }; + + // Check if the commander seat is available + if (_vehicle emptyPositions "commander" > 0) exitWith { + _unit moveInCommander _vehicle; + TRACE_1("moveInCommander",_vehicle); + _slotsOpen = true; + }; + + // Lastly, check if the gunner seat is available + if (_vehicle emptyPositions "gunner" > 0) exitWith { _unit moveInGunner _vehicle; _slotsOpen = true; }; diff --git a/addons/common/functions/fnc_nearestVehiclesFreeSeat.sqf b/addons/common/functions/fnc_nearestVehiclesFreeSeat.sqf index aba75ff60f..83ed8ceb20 100644 --- a/addons/common/functions/fnc_nearestVehiclesFreeSeat.sqf +++ b/addons/common/functions/fnc_nearestVehiclesFreeSeat.sqf @@ -5,22 +5,29 @@ * * Arguments: * 0: Unit - * 1: Distance + * 1: Distance + * 2: Restriceted to cargo only * * Return Value: * Nearest vehicles with a free seat * * Example: - * [bob] call ace_common_fnc_nearestVehiclesFreeSeat + * [cursorObject] call ace_common_fnc_nearestVehiclesFreeSeat * * Public: Yes */ -params ["_unit", ["_distance", 10]]; +params ["_unit", ["_distance", 10], ["_cargoOnly", false]]; private _nearVehicles = nearestObjects [_unit, ["Car", "Air", "Tank", "Ship_F", "Pod_Heli_Transport_04_crewed_base_F"], _distance]; _nearVehicles select { // Filter cargo seats that will eject unconscious units (e.g. quad bike) - ((_x emptyPositions "cargo" > 0) && {!(_unit getVariable ['ACE_isUnconscious', false])} || {(getNumber (configFile >> "CfgVehicles" >> (typeOf _x) >> "ejectDeadCargo")) == 0}) - || {_x emptyPositions "gunner" > 0} + private _canSitInCargo = (!(_unit getVariable ['ACE_isUnconscious', false])) || {(getNumber (configFile >> "CfgVehicles" >> (typeOf _x) >> "ejectDeadCargo")) == 0}; + ((fullCrew [_x, "", true]) findIf { + _x params ["_body", "_role", "_cargoIndex"]; + (isNull _body) // seat empty + && {_role != "DRIVER"} // not driver seat + && {_canSitInCargo || {_cargoIndex == -1}} // won't be ejected (uncon) + && {(!_cargoOnly) || {_cargoIndex != -1}} // not restricted (captive) + }) > -1 } diff --git a/addons/common/functions/fnc_unloadPersonLocal.sqf b/addons/common/functions/fnc_unloadPersonLocal.sqf index d51f911eaf..dd4480c1f9 100644 --- a/addons/common/functions/fnc_unloadPersonLocal.sqf +++ b/addons/common/functions/fnc_unloadPersonLocal.sqf @@ -49,6 +49,16 @@ unassignVehicle _unit; TRACE_1("Ejecting", alive _unit); _unit action ["Eject", vehicle _unit]; +// Failsafe - sometimes eject alone doesn't work, but moveOut does +[{ + params ["_unit"]; + + if (vehicle _unit != _unit) then { + WARNING_1("UnloadPersonLocal [%1] did not eject normally",_unit); + moveOut _unit; + }; +}, [_unit], 1] call CBA_fnc_waitAndExecute; + [{ params ["_unit", "_emptyPos"]; (alive _unit) && {(vehicle _unit) != _unit} diff --git a/addons/dagr/Dialog.hpp b/addons/dagr/Dialog.hpp index 52e3a8f683..51b6c988b6 100644 --- a/addons/dagr/Dialog.hpp +++ b/addons/dagr/Dialog.hpp @@ -201,7 +201,6 @@ class DAGR_Menu { class DAGR_NEXT_Button : DAGR_Button { idc = 266868; - action = QUOTE(DAGR_NEXT = true); x = 0.60; y = 0.65; }; diff --git a/addons/dagr/functions/fnc_menuInit.sqf b/addons/dagr/functions/fnc_menuInit.sqf index c535ac1349..498d6614d4 100644 --- a/addons/dagr/functions/fnc_menuInit.sqf +++ b/addons/dagr/functions/fnc_menuInit.sqf @@ -596,7 +596,6 @@ GVAR(menuRun) = true; GVAR(F1) = false; GVAR(MENU_B) = false; GVAR(SEL) = false; - DAGR_NEXT = false; GVAR(RIGHT) = false; GVAR(LEFT) = false; GVAR(UP) = false; diff --git a/addons/disarming/functions/fnc_disarmDropItems.sqf b/addons/disarming/functions/fnc_disarmDropItems.sqf index 4c8fb3bf2d..f46c06b280 100644 --- a/addons/disarming/functions/fnc_disarmDropItems.sqf +++ b/addons/disarming/functions/fnc_disarmDropItems.sqf @@ -92,7 +92,6 @@ if (({((_x select 0) in _listOfItemsToRemove) && {(getNumber (configFile >> "Cfg }; //Verify holder has mags unit had if (!([_targetMagazinesStart, _targetMagazinesEnd, _holderMagazinesStart, _holderMagazinesEnd] call FUNC(verifyMagazinesMoved))) then { - ERR = [_targetMagazinesStart, _targetMagazinesEnd, _holderMagazinesStart, _holderMagazinesEnd]; _holder setVariable [QGVAR(holderInUse), false]; [_caller, _target, "Debug: Crate Magazines not in holder"] call FUNC(eventTargetFinish); }; diff --git a/addons/explosives/functions/fnc_addClacker.sqf b/addons/explosives/functions/fnc_addClacker.sqf index 684161d7ee..6b48980d54 100644 --- a/addons/explosives/functions/fnc_addClacker.sqf +++ b/addons/explosives/functions/fnc_addClacker.sqf @@ -46,3 +46,5 @@ _unit setVariable [QGVAR(Clackers), _clacker, true]; //display clacker code message: [format [localize LSTRING(DetonateCode), GVAR(PlacedCount)]] call EFUNC(common,displayTextStructured); + +[QGVAR(clackerAdded), [_unit, _explosive, GVAR(PlacedCount)]] call CBA_fnc_localEvent; diff --git a/addons/interact_menu/functions/fnc_keyUp.sqf b/addons/interact_menu/functions/fnc_keyUp.sqf index 2504ca2b78..9ed14d66d3 100644 --- a/addons/interact_menu/functions/fnc_keyUp.sqf +++ b/addons/interact_menu/functions/fnc_keyUp.sqf @@ -25,8 +25,6 @@ if (uiNamespace getVariable [QGVAR(cursorMenuOpened),false]) then { }; if (GVAR(actionSelected)) then { - this = GVAR(selectedTarget); - private _player = ACE_Player; private _target = GVAR(selectedTarget); @@ -38,6 +36,11 @@ if (GVAR(actionSelected)) then { // Check the action conditions private _actionData = GVAR(selectedAction) select 0; + + // Use global variable this for action condition and action code + private _savedThis = this; + this = GVAR(selectedTarget); + if ([_target, _player, _actionData select 6] call (_actionData select 4)) then { // Call the statement [_target, _player, _actionData select 6] call (_actionData select 3); @@ -45,6 +48,9 @@ if (GVAR(actionSelected)) then { // Clear the conditions caches again if the action was performed [QGVAR(clearConditionCaches), []] call CBA_fnc_localEvent; }; + + // Restore this variable + this = _savedThis; }; ["ace_interactMenuClosed", [GVAR(openedMenuType)]] call CBA_fnc_localEvent; diff --git a/addons/interact_menu/functions/fnc_render.sqf b/addons/interact_menu/functions/fnc_render.sqf index 687498e7cd..36e86cd9b3 100644 --- a/addons/interact_menu/functions/fnc_render.sqf +++ b/addons/interact_menu/functions/fnc_render.sqf @@ -91,13 +91,16 @@ if (GVAR(openedMenuType) >= 0) then { }; }; if (_runOnHover) then { - this = GVAR(selectedTarget); private _player = ACE_Player; private _target = GVAR(selectedTarget); // Clear the conditions caches [QGVAR(clearConditionCaches), []] call CBA_fnc_localEvent; + // Use global variable this for action condition and action code + private _savedThis = this; + this = GVAR(selectedTarget); + // Check the action conditions private _actionData = GVAR(selectedAction) select 0; if ([_target, _player, _actionData select 6] call (_actionData select 4)) then { @@ -107,6 +110,9 @@ if (GVAR(openedMenuType) >= 0) then { // Clear the conditions caches again if the action was performed [QGVAR(clearConditionCaches), []] call CBA_fnc_localEvent; }; + + // Restore this variable + this = _savedThis; }; }; }; diff --git a/addons/interact_menu/functions/fnc_userActions_getHouseActions.sqf b/addons/interact_menu/functions/fnc_userActions_getHouseActions.sqf index 46667857f5..0d02b6a6c1 100644 --- a/addons/interact_menu/functions/fnc_userActions_getHouseActions.sqf +++ b/addons/interact_menu/functions/fnc_userActions_getHouseActions.sqf @@ -41,15 +41,34 @@ private _fnc_getMemPointOffset = { private _fnc_userAction_Statement = { params ["_target", "_player", "_variable"]; _variable params ["_actionStatement", "_actionCondition"]; + + // Use global variable this for action condition and action code + private _savedThis = this; this = _target getVariable [QGVAR(building), objNull]; + call _actionStatement; + + // Restore this variable + this = _savedThis; }; + private _fnc_userAction_Condition = { params ["_target", "_player", "_variable"]; _variable params ["_actionStatement", "_actionCondition"]; + + private _building = _target getVariable [QGVAR(building), objNull]; + if (isNull _building) exitWith {false}; + + // Use global variable this for action condition and action code + private _savedThis = this; this = _target getVariable [QGVAR(building), objNull]; - if (isNull this) exitWith {false}; - call _actionCondition; + + private _result = call _actionCondition; + + // Restore this variable + this = _savedThis; + + _result }; private _configPath = configFile >> "CfgVehicles" >> _typeOfBuilding >> "UserActions"; diff --git a/addons/markers/stringtable.xml b/addons/markers/stringtable.xml index 1fb27d8a1d..3b0fed2a04 100644 --- a/addons/markers/stringtable.xml +++ b/addons/markers/stringtable.xml @@ -152,45 +152,59 @@ Allow Timestamps + Permettre l'horodatage Whether to allow timestamps to be automatically applied to markers + Active une interface permettant d'apposer un horodatage sur les marqueurs. Add Timestamp: + Ajouter l'horodatage Watch Required + Une montre est requise. Timestamp Format + Horodatage - Format Changes the timestamp format + Modifie le format de l'horodatage. "HH" - Hour + "HH" - Heures "MM" - Minute + "MM" - Minutes "SS" - Seconds + "SS" - Secondes "MM" - Milliseconds + "MS" - Millisecondes Timestamp Hour Format + Horodatage - Système horaire 24-Hour Clock + Format 24 heures 12-Hour Clock + Format 12 heures Changes timestamp to use either 24-hour or 12-hour clock format + Permet de choisir le système d'horodatage souhaité, au format 12 ou 24 heures. diff --git a/addons/medical_ai/functions/fnc_canRequestMedic.sqf b/addons/medical_ai/functions/fnc_canRequestMedic.sqf index c2a29c1c9f..135c345750 100644 --- a/addons/medical_ai/functions/fnc_canRequestMedic.sqf +++ b/addons/medical_ai/functions/fnc_canRequestMedic.sqf @@ -19,7 +19,8 @@ // we ignore this here. We need to "notice" the medic that he should // treat other units, or else he won't do anything on his own. -if ([_this] call EFUNC(medical_treatment,isMedic) || {vehicle _this != _this}) exitWith {false}; +private _isMedic = [_this] call EFUNC(medical_treatment,isMedic); +if (_isMedic && {!IS_UNCONSCIOUS(_this)} || {vehicle _this != _this}) exitWith {false}; // Search for a medic, prioritize unitReady private _medic = objNull; diff --git a/addons/medical_gui/stringtable.xml b/addons/medical_gui/stringtable.xml index a081b31695..709b03fc25 100644 --- a/addons/medical_gui/stringtable.xml +++ b/addons/medical_gui/stringtable.xml @@ -191,9 +191,11 @@ Show Triage Level in Interaction Menu + Couleur de triage dans le menu d'interaction Shows the patient's triage level by changing the color of the main and medical menu actions. + Modifie la couleur du menu d'interactions et du sous-menu médical en fonction de la fiche de triage du patient. Medical diff --git a/addons/medical_statemachine/Statemachine.hpp b/addons/medical_statemachine/Statemachine.hpp index 17a4baaf07..eecb6a236c 100644 --- a/addons/medical_statemachine/Statemachine.hpp +++ b/addons/medical_statemachine/Statemachine.hpp @@ -103,6 +103,7 @@ class ACE_Medical_StateMachine { }; class Bleedout { targetState = "Dead"; + condition = QUOTE((GVAR(cardiacArrestBleedoutEnabled))); // wrap to ensure cba uses this as code and not a direct variable events[] = {QEGVAR(medical,Bleedout)}; }; }; diff --git a/addons/medical_statemachine/functions/fnc_resetStateDefault.sqf b/addons/medical_statemachine/functions/fnc_resetStateDefault.sqf index 4cffd47076..b29adcb9f4 100644 --- a/addons/medical_statemachine/functions/fnc_resetStateDefault.sqf +++ b/addons/medical_statemachine/functions/fnc_resetStateDefault.sqf @@ -17,7 +17,4 @@ params ["_unit"]; -// Statemachine only handles local units -if !(local _unit) exitWith {}; - [_unit, EGVAR(medical,STATE_MACHINE), "Dead", "Default"] call CBA_statemachine_fnc_manualTransition; diff --git a/addons/medical_statemachine/initSettings.sqf b/addons/medical_statemachine/initSettings.sqf index df66002ff9..75d93f19b2 100644 --- a/addons/medical_statemachine/initSettings.sqf +++ b/addons/medical_statemachine/initSettings.sqf @@ -41,3 +41,12 @@ [1, 3600, 300], true ] call CBA_settings_fnc_init; + +[ + QGVAR(cardiacArrestBleedoutEnabled), + "CHECKBOX", + [LSTRING(CardiacArrestBleedout_DisplayName), LSTRING(CardiacArrestBleedout_Description)], + [ELSTRING(medical,Category), LSTRING(SubCategory)], + true, + true +] call CBA_settings_fnc_init; diff --git a/addons/medical_statemachine/stringtable.xml b/addons/medical_statemachine/stringtable.xml index 6952f16dd5..31a91d1413 100644 --- a/addons/medical_statemachine/stringtable.xml +++ b/addons/medical_statemachine/stringtable.xml @@ -98,7 +98,7 @@ Cardiac Arrest Time - Zeit bis zum Herzstillstand + Überlebenszeit im Herzstillstand 心停止時間 Длительность остановки сердца Durée de l'arrêt cardiaque @@ -119,6 +119,7 @@ Controlla quanto tempo ci vuole per morire di arresto cardiaco. Nastavuje po jak dlouhé době pacient zemře kvůli srdeční zástavě. Definiuje czas potrzebny na śmierć z powodu zatrzymania akcji serca. + Bestimmt die Dauer bis zum Tod durch Herzstillstand. Ne kadar süre de kalbi durarak ölmesini belirleyin. @@ -134,5 +135,15 @@ Zatrzymanie Akcji Serca Kalbi Durdu + + Bleedout During Cardiac Arrest + Ausbluten im Herzstillstand + Saignement durant l'arrêt cardiaque + + + Controls whether a person can die in cardiac arrest by blood loss before the cardiac arrest time runs out. + Legt fest, ob man während des Herzstillstands durch Blutverlust sterben kann, auch wenn die Überlebenszeit im Herzstillstand noch nicht ausgelaufen ist. + Définit si un joueur en arrêt cardiaque peut mourir par exsanguination, avant que la durée de l'arrêt cardiaque définie ci-dessus ne soit écoulée. + diff --git a/addons/medical_status/functions/fnc_setUnconsciousState.sqf b/addons/medical_status/functions/fnc_setUnconsciousState.sqf index 715041d701..6508e2fb1c 100644 --- a/addons/medical_status/functions/fnc_setUnconsciousState.sqf +++ b/addons/medical_status/functions/fnc_setUnconsciousState.sqf @@ -52,9 +52,20 @@ if (_active) then { // Do "Unlock controls" user action, co-pilot will then have to do the "Take Controls" actions _unit action ["UnlockVehicleControl", vehicle _unit]; }; + + // Disable AI aiming + if (!isPlayer _unit && {_unit checkAIFeature "WEAPONAIM"}) then { + _unit disableAI "WEAPONAIM"; + _unit setVariable [QGVAR(reenableWeaponAim), true, true]; + }; } else { // Unit has woken up, no longer need to track this _unit setVariable [QEGVAR(medical,lastWakeUpCheck), nil]; + + // Reenable AI aiming + if (_unit getVariable [QGVAR(reenableWeaponAim), false]) then { + _unit enableAI "WEAPONAIM"; + }; }; // This event doesn't correspond to unconscious in statemachine diff --git a/addons/medical_treatment/stringtable.xml b/addons/medical_treatment/stringtable.xml index 1c59c6ba81..514a4795e6 100644 --- a/addons/medical_treatment/stringtable.xml +++ b/addons/medical_treatment/stringtable.xml @@ -240,48 +240,50 @@ Autoinjector Treatment Time + Durée d'interaction - Auto-injecteurs Time, in seconds, required to administer medication using an autoinjector. + Définit le temps nécessaire à l'administration d'une substance auto-injectable (en secondes). Tourniquet Treatment Time - Temps de traitement du tourniquet + Durée d'interaction - Garrots Tourniquet-Behandlungszeit Time, in seconds, required to apply/remove a tourniquet. - Temps en secondes nécessaire pour appliquer un garrot. + Définit le temps nécessaire à l'application ou au retrait d'un garrot (en secondes). Zeit in Sekunden, die benötigt wird, um ein Tourniquet anzuwenden. IV Bag Treatment Time - Temps de traitement du sac IV + Durée d'interaction - IVs IV Beutelbehandlungszeit Time, in seconds, required to administer an IV bag. - Temps en secondes nécessaire pour appliquer un sac IV. + Définit le temps nécessaire à la pose d'une perfusion IV (en secondes). Zeit in Sekunden, die benötigt wird, um einen Infusionsbeutel aufzutragen. Splint Treatment Time - Temps de traitement de l'attelle + Durée d'interaction - Attelles Schienenbehandlungszeit Time, in seconds, required to apply a splint. - Temps en secondes nécessaire pour appliquer une attelle. + Définit le temps nécessaire à l'application d'une attelle (en secondes). Zeit in Sekunden, die zum Anbringen einer Schiene benötigt wird. Body Bag Use Time - Temps d'utilisation du sac mortuaire + Durée d'interaction - Housses mortuaires Anwendungszeit für Leichensack Time, in seconds, required to put a patient in a body bag. - Temps en secondes qu'il faut pour appliquer un sac mortuaire. + Définit le temps nécessaire à la mise en housse d'un corps (en secondes). Zeit in Sekunden, die benötigt wird, um einen Leichensack aufzutragen. @@ -303,7 +305,7 @@ Training level required to use epinephrine. アドレナリンの使用に訓練レベルを必要とさせます。 - Définit quelle qualification médicale est requise pour pouvoir utiliser l'épinéphrine. + Définit la qualification médicale requise pour utiliser l'épinéphrine. Уровень подготовки, необходимый для использования Адреналина. É necessária uma qualificação médica para usar epinefrina. 要受過何種程度的醫療訓練才可以使用腎上腺素 @@ -332,7 +334,7 @@ Controls where epinephrine can be used. アドレナリンが使える場所を決定します。 - Définit où l'épinéphrine peut être utilisée. + Définit les lieux où l'usage d'épinéphrine est autorisé. Контролирует, где можно использовать Адреналин. Controla onde Epinefrina pode ser utilizada. 控制何處能使用腎上腺素 @@ -362,7 +364,7 @@ Training level required to use a PAK. 応急処置キットの使用に訓練レベルを必要とさせます。 - Définit quelle qualification médicale est requise pour pouvoir utiliser la trousse sanitaire. + Définit la qualification médicale requise pour utiliser la trousse sanitaire. Уровень подготовки, необходимый для использования Аптечки. É necessária uma qualificação médica para usar KPS 要受過何種程度的醫療訓練才可以使用個人急救包 @@ -392,7 +394,7 @@ Controls where a PAK can be used. 応急処置キットが使える場所を決定します。 - Définit où la trousse sanitaire peut être utilisée. + Définit les lieux où l'usage de la trousse sanitaire est autorisé. Контролирует, где можно использовать Аптечку. Controla onde o KPS pode ser utilizado. 控制何處能使用個人急救包 @@ -494,7 +496,7 @@ Training level required to use a surgical kit. 縫合キットの使用に訓練レベルを必要とさせます。 - Définit quelle qualification médicale est requise pour pouvoir utiliser une trousse chirurgicale. + Définit la qualification médicale requise pour utiliser la trousse chirurgicale. Уровень медицинской подготовки, необходимый для использования Хирургического набора. É necessária uma qualificação médica para usar Kit Cirúrgico 要受過多少程度的醫療訓練才能使用手術包。 @@ -520,7 +522,7 @@ Controls where a surgical kit can be used. 縫合キットが使える場所を決定します。 - Définit où la trousse chirurgicale peut être utilisée. + Définit les lieux où l'usage de la trousse chirurgicale est autorisé. Контролирует, где можно использовать Хирургический набор Controle onde o Kit Cirúrgico pode ser utilizado. 控制何處能使用手術包 @@ -556,7 +558,7 @@ Self Stitching - Suturer soi-même + Réaliser des sutures sur soi-même Auto-Cirurgia 自己縫合 自我縫合 @@ -580,16 +582,18 @@ Wound Stitch Time + Durée d'interaction - Sutures Time, in seconds, required to stitch a single wound. + Définit le temps nécessaire à la suture d'une plaie (en secondes). Self IV Transfusion Eigennutzung von Bluttransfusionen Внутривенное переливание на себе 自己 IV 輸血 - Autotransfusion d'IV + Pose d'IV sur soi-même Autotransfusão de IV 自我注射點滴 Samoaplikace IV transfuze @@ -601,7 +605,7 @@ Erlaube Bluttransfusionen an sich selbst zu benutzen Позволяет использовать внутривенные переливания на себе 自らに対して IV 輸血を可能にします。 - Permet de poser des IV sur soi-même. + Active la possibilité de s'auto-poser des IVs. Permite utilizar bolsas de IV para transfusão em si mesmo 啟用是否能對自己注射點滴 Umožňuje aplikovat IV transfuze na sama sebe. @@ -610,15 +614,17 @@ Allow Unconscious Body Bag + Housse mortuaire - Autoriser patients inconscients Enables placing an unconscious patient in a body bag. + Active la possibilité de placer des patients inconscients dans les housses mortuaires.\nAttention : le cas échéant cela provoquera la mort du patient. Allow IV Transfusion Erlaube Bluttransfusionen Zezwalaj na przetaczanie płynów IV - Pose de perfusion autorisée pour + Pose de perfusions autorisée pour 允許操作點滴 IV 輸血の制限 Povolit IV transfuzi @@ -628,7 +634,7 @@ Training level required to transfuse IVs. 'Fähigkeiten-Level', das benötigt wird, um Blut zu transfundieren. Poziom wyszkolenia potrzebny aby móc przetaczać płyny IV. - Définit quelle qualification médicale est requise pour pouvoir poser des perfusions intraveineuses. + Définit la qualification médicale requise pour poser des perfusions intraveineuses. 要有何種醫療水準才可注射點滴。 IV 輸血を行うのに訓練済レベルを要求とします。 Úroveň výcviku nutná pro IV transfuzi. @@ -844,9 +850,11 @@ CPR Treatment Time + Durée d'interaction - RCP Time, in seconds, required to perform CPR on a patient. + Définit le temps nécessaire à la mise en œuvre d'une RCP (en secondes). Holster Required @@ -4298,6 +4306,7 @@ The body twitched and may not be dead! + L'unité a bougé et n'est peut-être pas morte ! diff --git a/addons/repair/functions/fnc_normalizeHitPoints.sqf b/addons/repair/functions/fnc_normalizeHitPoints.sqf index fb07147a6a..5a33151875 100644 --- a/addons/repair/functions/fnc_normalizeHitPoints.sqf +++ b/addons/repair/functions/fnc_normalizeHitPoints.sqf @@ -46,9 +46,11 @@ TRACE_2("",_realHitPoints,_dependentHitPoints); if (_dependentHitPoints isEqualTo []) exitWith {}; -// Define global variables -Total = damage _vehicle; +// Define global variables and save original values +private _savedGlobals = [["total", total]]; +total = damage _vehicle; { + _savedGlobals pushBack [_x, missionNamespace getVariable _x]; missionNamespace setVariable [_x, _vehicle getHitPointDamage _x]; } forEach _realHitPoints; @@ -58,3 +60,8 @@ Total = damage _vehicle; TRACE_2("setting depend hitpoint", _x, _damage); _vehicle setHitPointDamage [_x, _damage]; } forEach _dependentHitPoints; + +// Restore global variables +{ + missionNamespace setVariable _x; +} forEach _savedGlobals; diff --git a/addons/scopes/CfgWeapons.hpp b/addons/scopes/CfgWeapons.hpp index b521b541eb..653742180f 100644 --- a/addons/scopes/CfgWeapons.hpp +++ b/addons/scopes/CfgWeapons.hpp @@ -340,7 +340,7 @@ class CfgWeapons { class arifle_SDAR_F: SDAR_base_F { ACE_RailHeightAboveBore = 0; - ACE_IronSightBaseAngle = -0.037242; + ACE_IronSightBaseAngle = -0.042972; }; class SMG_01_Base: Rifle_Short_Base_F { diff --git a/docs/team.md b/docs/team.md index 3846f7e1fe..5ea6fb7264 100644 --- a/docs/team.md +++ b/docs/team.md @@ -38,7 +38,7 @@ This lists all the maintainers responsible for project management and the overal - Coding, Performance, SME - [jokoho48](https://github.com/jokoho48){:target="_blank"} - Scripting, Model Editing / Import -- [SilentSpike](https://github.com/SilentSpike){:target="_blank"} +- [SilentSpike](https://github.com/kymckay){:target="_blank"} - Scripting, Config - [Ruthberg](https://github.com/ulteq){:target="_blank"} - Scripting, Config @@ -61,6 +61,7 @@ This lists all the maintainers responsible for project management and the overal - [mharis001](https://github.com/mharis001){:target="_blank"} - [Brandon (TCVM)](https://github.com/TheCandianVendingMachine){:target="_blank"} - [veteran29](https://github.com/veteran29){:target="_blank"} +- [Dahlgren](https://github.com/Dahlgren){:target="_blank"} ## Contributors diff --git a/docs/wiki/framework/events-framework.md b/docs/wiki/framework/events-framework.md index 30feada6cf..d1cc6d01d0 100644 --- a/docs/wiki/framework/events-framework.md +++ b/docs/wiki/framework/events-framework.md @@ -82,6 +82,7 @@ MenuType: 0 = Interaction, 1 = Self Interaction | Event Key | Parameters | Locality | Type | Description | |----------|---------|---------|---------|---------|---------| |`ace_tripflareTriggered` | [_flareObject, [_posX, _posY, _posZ]] | Global | Listen | Tripflare triggered +|`ace_explosives_clackerAdded` | [_unit, _explosive, _id] | Local | Listen | Clacker added to explosive ### 2.9 Logistics Wirecutter (`ace_logistics`)