diff --git a/addons/ballistics/CfgAmmo.hpp b/addons/ballistics/CfgAmmo.hpp index 509217ff430..5e7592860e5 100644 --- a/addons/ballistics/CfgAmmo.hpp +++ b/addons/ballistics/CfgAmmo.hpp @@ -546,7 +546,7 @@ class CfgAmmo { ACE_muzzleVelocities[]={867}; ACE_barrelLengths[]={736.6}; }; - class ACE_408_Ball: BulletBase { + class ACE_408_Ball: B_408_Ball { timeToLive=10; airFriction=-0.00065414; typicalSpeed=1067; diff --git a/addons/common/XEH_preInit.sqf b/addons/common/XEH_preInit.sqf index f2194deb64f..bb2a0c6810a 100644 --- a/addons/common/XEH_preInit.sqf +++ b/addons/common/XEH_preInit.sqf @@ -33,9 +33,7 @@ ACE_COUNTERS = []; // Load ace_settings into CBA Settings [] call FUNC(cbaSettings); -GVAR(statusEffect_Names) = []; -GVAR(statusEffect_isGlobal) = []; -GVAR(statusEffect_sendJIP) = []; +GVAR(statusEffects) = createHashMap; GVAR(setHearingCapabilityMap) = []; diff --git a/addons/common/functions/fnc_statusEffect_addType.sqf b/addons/common/functions/fnc_statusEffect_addType.sqf index 5535b0d9145..790f1e41269 100644 --- a/addons/common/functions/fnc_statusEffect_addType.sqf +++ b/addons/common/functions/fnc_statusEffect_addType.sqf @@ -6,8 +6,9 @@ * Arguments: * 0: Status Effect Name, this should match a corresponding event name * 1: Send event globally - * 2: Common Effect Reaons to pre-seed durring init + * 2: Common Effect Reasons to pre-seed during init * 3: Send event to JIP (requires sending event globally) + * 4: Event name (default: "ace_common_") * * Return Value: * None @@ -18,16 +19,16 @@ * Public: No */ -params [["_name", "", [""]], ["_isGlobal", false, [false]], ["_commonReasonsArray", [], [[]]], ["_sendJIP", false, [false]]]; -TRACE_3("params",_name,_isGlobal,_commonReasonsArray); +params [["_name", "", [""]], ["_isGlobal", false, [false]], ["_commonReasonsArray", [], [[]]], ["_sendJIP", false, [false]], ["_eventName", "", [""]]]; +TRACE_4("params",_name,_isGlobal,_commonReasonsArray,_eventName); +_name = toLowerANSI _name; if (_name == "") exitWith {ERROR_1("addStatusEffect - Bad Name %1",_this)}; -if (_name in GVAR(statusEffect_Names)) exitWith {WARNING_1("addStatusEffect - Effect Already Added (note, will not update global bit) %1",_this)}; +if (_name in GVAR(statusEffects)) exitWith {WARNING_1("addStatusEffect - Effect Already Added (note, will not update global bit) %1",_this)}; if (_sendJIP && !_isGlobal) exitWith {WARNING_1("addStatusEffect - Trying to add non-global JIP effect %1",_this)}; +if (_eventName == "") then { _eventName = format [QGVAR(%1), _name]; }; -GVAR(statusEffect_Names) pushBack _name; -GVAR(statusEffect_isGlobal) pushBack _isGlobal; -GVAR(statusEffect_sendJIP) pushBack _sendJIP; +GVAR(statusEffects) set [_name, [_isGlobal, _sendJIP, _eventName]]; //We add reasons at any time, but more efficenet to add all common ones at one time during init if (isServer && {_commonReasonsArray isNotEqualTo []}) then { diff --git a/addons/common/functions/fnc_statusEffect_get.sqf b/addons/common/functions/fnc_statusEffect_get.sqf index e7b2a19b289..a1bbbdebaca 100644 --- a/addons/common/functions/fnc_statusEffect_get.sqf +++ b/addons/common/functions/fnc_statusEffect_get.sqf @@ -4,7 +4,7 @@ * Retrives list of current status effects * * Arguments: - * 0: vehicle that it will be attached to (player or vehicle) + * 0: Vehicle that it will be attached to (player or vehicle) * 1: Effect Name * * Return Value: diff --git a/addons/common/functions/fnc_statusEffect_localEH.sqf b/addons/common/functions/fnc_statusEffect_localEH.sqf index e60679350d0..8d7f3679c04 100644 --- a/addons/common/functions/fnc_statusEffect_localEH.sqf +++ b/addons/common/functions/fnc_statusEffect_localEH.sqf @@ -4,7 +4,7 @@ * Handles locality switch, runs a respawn check and then reapplies all effect events. * * Arguments: - * 0: vehicle that it will be attached to (player or vehicle) + * 0: Vehicle that it will be attached to (player or vehicle) * 1: isLocal * * Return Value: diff --git a/addons/common/functions/fnc_statusEffect_resetVariables.sqf b/addons/common/functions/fnc_statusEffect_resetVariables.sqf index a9b6853b9f8..9ebe142b6ca 100644 --- a/addons/common/functions/fnc_statusEffect_resetVariables.sqf +++ b/addons/common/functions/fnc_statusEffect_resetVariables.sqf @@ -4,7 +4,7 @@ * Resets all effect numbers to 0 when an object respawns (but does not apply the effect event). * * Arguments: - * 0: vehicle that it will be attached to (player or vehicle) + * 0: Vehicle that it will be attached to (player or vehicle) * * Return Value: * None @@ -39,6 +39,6 @@ if (_object == _objectRef) exitWith {}; TRACE_2("forced reset defined array on object mismatch",_x,_effectNumber); _object setVariable [_effectVarName, 0, true]; //This always resets to 0 (not -1/nil)! }; -} forEach GVAR(statusEffect_Names); +} forEach GVAR(statusEffects); _object setVariable [QGVAR(statusEffect_object), _object, true]; diff --git a/addons/common/functions/fnc_statusEffect_respawnEH.sqf b/addons/common/functions/fnc_statusEffect_respawnEH.sqf index edad032a9aa..71be834af6b 100644 --- a/addons/common/functions/fnc_statusEffect_respawnEH.sqf +++ b/addons/common/functions/fnc_statusEffect_respawnEH.sqf @@ -4,7 +4,7 @@ * Handles the Respawn Event Handler to reset effects. * * Arguments: - * 0: vehicle that it will be attached to (player or vehicle) + * 0: Vehicle that it will be attached to (player or vehicle) * * Return Value: * None diff --git a/addons/common/functions/fnc_statusEffect_sendEffects.sqf b/addons/common/functions/fnc_statusEffect_sendEffects.sqf index a4e3f2d2a45..79368945f2c 100644 --- a/addons/common/functions/fnc_statusEffect_sendEffects.sqf +++ b/addons/common/functions/fnc_statusEffect_sendEffects.sqf @@ -21,31 +21,34 @@ TRACE_2("params",_object,_effectName); if (isNull _object) exitWith {}; -{ - if ((_effectName == "") || {_effectName == _x}) then { - private _effectVarName = format [QGVAR(effect_%1), _x]; - private _effectNumber = _object getVariable [_effectVarName, -1]; +if (_effectName == "") exitWith { // Recurse through all possible effects + { + [_object, _x] call FUNC(statusEffect_sendEffects) + } forEach (keys GVAR(statusEffects)); +}; - //We only do anything if the effect has been defined at some point in the game for this unit - TRACE_2("checking if event is nil",_x,_effectNumber); - if (_effectNumber != -1) then { - private _eventName = format [QGVAR(%1), _x]; - switch (true) do { - case (GVAR(statusEffect_sendJIP) select _forEachIndex): { - TRACE_2("Sending Global JIP Event",_object,_effectNumber); - private _jipID = format [QGVAR(effect_%1_%2), _eventName, hashValue _object]; - [_eventName, [_object, _effectNumber], _jipID] call CBA_fnc_globalEventJIP; - [_jipID, _object] call CBA_fnc_removeGlobalEventJIP; - }; - case (GVAR(statusEffect_isGlobal) select _forEachIndex): { - TRACE_2("Sending Global Event",_object,_effectNumber); - [_eventName, [_object, _effectNumber]] call CBA_fnc_globalEvent; - }; - default { - TRACE_2("Sending Target Event",_object,_effectNumber); - [_eventName, [_object, _effectNumber], _object] call CBA_fnc_targetEvent; - }; - }; + +private _effectVarName = format [QGVAR(effect_%1), _effectName]; +private _effectNumber = _object getVariable [_effectVarName, -1]; + +// We only do anything if the effect has been defined at some point in the game for this unit +TRACE_2("checking if event is nil",_effectName,_effectNumber); +if (_effectNumber != -1) then { + (GVAR(statusEffects) get toLowerANSI _effectName) params ["_isGlobal", "_sendJIP", "_eventName"]; + switch (true) do { + case (_sendJIP): { + TRACE_2("Sending Global JIP Event",_object,_effectNumber); + private _jipID = format [QGVAR(effect_%1_%2), _eventName, hashValue _object]; + [_eventName, [_object, _effectNumber], _jipID] call CBA_fnc_globalEventJIP; + [_jipID, _object] call CBA_fnc_removeGlobalEventJIP; + }; + case (_isGlobal): { + TRACE_2("Sending Global Event",_object,_effectNumber); + [_eventName, [_object, _effectNumber]] call CBA_fnc_globalEvent; + }; + default { + TRACE_2("Sending Target Event",_object,_effectNumber); + [_eventName, [_object, _effectNumber], _object] call CBA_fnc_targetEvent; }; }; -} forEach GVAR(statusEffect_Names); +}; diff --git a/addons/common/functions/fnc_statusEffect_set.sqf b/addons/common/functions/fnc_statusEffect_set.sqf index a4bf352a565..adc5ff87495 100644 --- a/addons/common/functions/fnc_statusEffect_set.sqf +++ b/addons/common/functions/fnc_statusEffect_set.sqf @@ -4,7 +4,7 @@ * Adds or removes an id to a status effect and will send an event to apply. * * Arguments: - * 0: vehicle that it will be attached to (player or vehicle) + * 0: Vehicle that it will be attached to (player or vehicle) * 1: Effect Name * 2: Unique Reason ID * 3: Is Set (true adds/false removes) diff --git a/addons/cookoff/XEH_postInit.sqf b/addons/cookoff/XEH_postInit.sqf index 63e1486c82b..5ea72193853 100644 --- a/addons/cookoff/XEH_postInit.sqf +++ b/addons/cookoff/XEH_postInit.sqf @@ -17,7 +17,7 @@ if (isServer) then { { deleteVehicle _x; } forEach ((_this select 0) getVariable [QGVAR(effects), []]); -}, true, ["CAManBase", "StaticWeapon"], true] call CBA_fnc_addClassEventHandler; +}, true, ["Man", "StaticWeapon"], true] call CBA_fnc_addClassEventHandler; // Use "Man" to exclude animals as well ["ReammoBox_F", "Deleted", { { @@ -58,7 +58,7 @@ if (isServer) then { random [MIN_AMMO_DETONATION_START_DELAY, (MIN_AMMO_DETONATION_START_DELAY + MAX_AMMO_DETONATION_START_DELAY) / 2, MAX_AMMO_DETONATION_START_DELAY] ]] call CBA_fnc_serverEvent; }; -}, true, ["CAManBase", "StaticWeapon"], true] call CBA_fnc_addClassEventHandler; +}, true, ["Man", "StaticWeapon"], true] call CBA_fnc_addClassEventHandler; // Use "Man" to exclude animals as well if (hasInterface) then { // Plays a sound locally, so that different sounds can be used for various distances diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml index f81c7ba383e..86d2276a7b7 100644 --- a/addons/explosives/stringtable.xml +++ b/addons/explosives/stringtable.xml @@ -784,7 +784,7 @@ Увеличивать время завершения действий для не-специалистов? По умолчанию: Нет Entschärfungszeit für Nicht-Sprengstoffexperten erhöhen? Standard: Ja 비전문가가 폭발물을 해체 시 더욱 많은 시간을 소요합니까? 기본설정: 예 - 専門兵以外がアクション完了するのに必要な時間を増加しますか? デフォルト: 有効 + 専門兵以外がアクションを完了するのに必要な時間を増加しますか? デフォルト: 有効 增加非專業人員相關操作的時間? 預設: 是 增加非专业人员相关操作的时间? 预设:是 Nem-specialisták esetén több ideig tartson a cselekvés befejezése? Alapértelmezett: Igen diff --git a/addons/field_rations/XEH_postInit.sqf b/addons/field_rations/XEH_postInit.sqf index ee921c5139a..04fcdf0e75f 100644 --- a/addons/field_rations/XEH_postInit.sqf +++ b/addons/field_rations/XEH_postInit.sqf @@ -138,6 +138,15 @@ if !(hasInterface) exitWith {}; // Add respawn eventhandler to reset necessary variables, done through script so only added if field rations is enabled ["CAManBase", "respawn", LINKFUNC(handleRespawn)] call CBA_fnc_addClassEventHandler; + // Add status effect to block hunger/thirst updates + ["field_rations_blockUpdates", false, [], false, QGVAR(blockUpdates)] call EFUNC(common,statusEffect_addType); + + [QGVAR(blockUpdates), { + params ["_object", "_set"]; + TRACE_2("blockUpdates EH",_object,_set); + _object setVariable [QGVAR(blockUpdates), _set > 0]; + }] call CBA_fnc_addEventHandler; + // Start update loop [LINKFUNC(update), CBA_missionTime + MP_SYNC_INTERVAL, 1] call CBA_fnc_waitAndExecute; diff --git a/addons/field_rations/functions/fnc_update.sqf b/addons/field_rations/functions/fnc_update.sqf index 762af12d883..cd757237494 100644 --- a/addons/field_rations/functions/fnc_update.sqf +++ b/addons/field_rations/functions/fnc_update.sqf @@ -23,8 +23,13 @@ params ["_nextMpSync"]; // Access global variable once private _player = ACE_player; -// Exit if player is not alive or a virtual unit -if (!alive _player || {_player isKindOf "VirtualMan_F"}) exitWith { +// Exit if player is not alive, a virtual unit, or is in Zeus interface (if setting is enabled) +if ( + !alive _player || + {_player isKindOf "VirtualMan_F"} || + {!GVAR(zeusUpdates) && {!isNull findDisplay 312}} || + {_player getVariable [QGVAR(blockUpdates), false]} +) exitWith { [LINKFUNC(update), _nextMpSync, 1] call CBA_fnc_waitAndExecute; QGVAR(hud) cutFadeOut 0.5; }; diff --git a/addons/field_rations/initSettings.inc.sqf b/addons/field_rations/initSettings.inc.sqf index 16e2d4eb2d6..82d9f6243f6 100644 --- a/addons/field_rations/initSettings.inc.sqf +++ b/addons/field_rations/initSettings.inc.sqf @@ -101,3 +101,12 @@ [[-1, 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8], [LSTRING(Dynamic), "0%", "10%", "20%", "30%", "40%", "50%", "60%", "70%", "80%", 0], 0], false ] call CBA_fnc_addSetting; + +[ + QGVAR(zeusUpdates), + "CHECKBOX", + [LSTRING(ZeusUpdates_DisplayName), LSTRING(ZeusUpdates_Description)], + LSTRING(DisplayName), + false, + 1 +] call CBA_fnc_addSetting; diff --git a/addons/field_rations/stringtable.xml b/addons/field_rations/stringtable.xml index 166e3d5ed38..e3d1e572985 100644 --- a/addons/field_rations/stringtable.xml +++ b/addons/field_rations/stringtable.xml @@ -1282,5 +1282,11 @@ 飲用水補給 饮用水补给 + + If enabled, hunger and thirst will continue to increase while the Zeus interface is open. + + + Update Hunger and Thirst in Zeus + diff --git a/addons/goggles/stringtable.xml b/addons/goggles/stringtable.xml index fe3b5308400..d59584d8b3b 100644 --- a/addons/goggles/stringtable.xml +++ b/addons/goggles/stringtable.xml @@ -17,6 +17,10 @@ 护目镜 Gözlük + + Show Goggles Overlay + ゴーグルのオーバーレイを表示する + Show Wipe Goggles self interaction Ukaž Vyčistit brýle v menu Interakce (vlastní) @@ -28,7 +32,7 @@ Показывать действие Протереть очки Zeige "Brille abwischen" im Selbstinteraktionsmenü 자기상호작용에 고글 닦기 선택 보이기 - ゴーグル拭き取りのアクションを表示 + ゴーグルを拭うセルフ・インタラクションを表示する 在自我互動中顯示擦拭護目鏡的動作 在自我互动中显示擦拭护目镜的动作 Kendi etkileşim menüsün de gözlük camlarını silmeyi göster @@ -60,7 +64,7 @@ Вкл. эффект очков от 3-го лица Brilleneffekt in dritter Person anzeigen 3인칭 시에도 고글 효과를 보이게 하기 - 三人称視点でもゴーグルによる効果を表示 + 三人称視点でもゴーグルによるエフェクトを表示する 在第三人稱視角顯示護目鏡效果 在第三人称视角显示护目镜效果 Gözlük efektlerini 3. şahıs görünümün de göster @@ -77,7 +81,7 @@ Протереть очки Brille abwischen 고글 닦기 - ゴーグルを拭く + ゴーグルを拭う 擦拭護目鏡 擦拭护目镜 Gözlük Camlarını Sil @@ -94,7 +98,7 @@ Эффект очков Brilleneffekt 고글 효과 - ゴーグルによる効果 + ゴーグルによるエフェクト 護目鏡效果 护目镜效果 Gözlük efektleri @@ -110,7 +114,7 @@ Эффекты Effekte 효과 - エフェクト + エフェクトのみ 影響 影响 Efektler @@ -147,8 +151,5 @@ 着色 + 效果 Ton + Efektler - - Show Goggles Overlay - diff --git a/addons/interact_menu/stringtable.xml b/addons/interact_menu/stringtable.xml index e951a0b68b6..23ee4dd3c7c 100644 --- a/addons/interact_menu/stringtable.xml +++ b/addons/interact_menu/stringtable.xml @@ -282,7 +282,7 @@ Добавляет действия открывания дверей и залезания на лестницы для зданий. (Примечание: возможно падение производительности при открытии меню взаимодействия, особенно в городах) Fügt Aktionen zum Türöffnen oder für eine Leiter zum Besteigen von Gebäuden hinzu. (Hinweis: Verschlechtert die Leistung wenn das Interaktionsmenü geöffnet wird. Insbesondere in Städten) 건물의 문을 열거나 사다리에 오르는 상호작용 행동을 추가합니다. (주의: 상호작용 메뉴를 열 경우 성능하락이 있을 수 있음, 특히 마을 내부에서) - 建物にドアを開閉したり梯子を昇降するためのインタラクション アクションを追加します。\n(注: 街中でインタラクション メニューを開く際には特に描画パフォーマンスに影響を及ぼします) + 建物にドアを開閉したり梯子を昇降するためのインタラクション アクションを追加します。\n(注: インタラクション メニューを開く際には描画パフォーマンスに影響を及ぼします。街中などでは顕著です) 增加互動選單的功能在可開啟的門與建築物的梯子上。(注意: 此功能有可能會降低系統效能,特別是在城鎮區更明顯) 增加互动菜单的功能在可开启的门与建筑物的梯子上。(注意:此功能有可能会降低系统效能,特别是在城镇区更明显) Binalara kapıları açmak ve merdivenleri monte etmek için etkileşim eylemleri ekler. (Not: Etkileşim menüsünü açarken, özellikle şehirlerde bir performansı etkiler) diff --git a/addons/interaction/CfgVehicles.hpp b/addons/interaction/CfgVehicles.hpp index 614cd3e0e06..cc4742d0dab 100644 --- a/addons/interaction/CfgVehicles.hpp +++ b/addons/interaction/CfgVehicles.hpp @@ -68,6 +68,15 @@ class CfgVehicles { }; }; + class ACE_PassThrowable { + displayName = CSTRING(PassThrowable); + condition = QUOTE([ARR_3(_player,_target,(currentThrowable _player) param [ARR_2(0,'')])] call FUNC(canPassThrowable)); + statement = QUOTE([ARR_3(_player,_target,(currentThrowable _player) param [ARR_2(0,'')])] call FUNC(passThrowable)); + exceptions[] = {"isNotSwimming"}; + showDisabled = 0; + modifierFunction = QUOTE(_this select 3 set [ARR_2(2,getText (configFile >> 'CfgMagazines' >> (currentThrowable (_this select 1)) param [ARR_2(0,'HandGrenade')] >> 'picture'))];); // Set picture of the current throwable + }; + class ACE_TeamManagement { displayName = CSTRING(TeamManagement); condition = QUOTE([ARR_2(_player,_target)] call DFUNC(canJoinTeam) && {GVAR(EnableTeamManagement)}); diff --git a/addons/interaction/XEH_PREP.hpp b/addons/interaction/XEH_PREP.hpp index 63053fd5122..dc6e5f41a23 100644 --- a/addons/interaction/XEH_PREP.hpp +++ b/addons/interaction/XEH_PREP.hpp @@ -24,7 +24,9 @@ PREP(modifyTeamManagementAction); PREP(canJoinTeam); PREP(joinTeam); PREP(canPassMagazine); +PREP(canPassThrowable); PREP(passMagazine); +PREP(passThrowable); PREP(canBecomeLeader); PREP(doBecomeLeader); PREP(doRemoteControl); diff --git a/addons/interaction/functions/fnc_canPassThrowable.sqf b/addons/interaction/functions/fnc_canPassThrowable.sqf new file mode 100644 index 00000000000..a15e851d66a --- /dev/null +++ b/addons/interaction/functions/fnc_canPassThrowable.sqf @@ -0,0 +1,28 @@ +#include "..\script_component.hpp" +/* + * Author: Timi007 + * Checks if target unit can accept given throwable. + * Does not check if the throwable exists in the inventory of the player. + * + * Arguments: + * 0: Unit that passes the throwable + * 1: Unit to pass the throwable to + * 2: Throwable classname + * + * Return Value: + * Unit can pass throwable + * + * Example: + * [_player, _target, "HandGrenade"] call ace_interaction_fnc_canPassThrowable + * + * Public: No + */ + +params ["_player", "_target", "_throwable"]; + +if (!GVAR(enableThrowablePassing)) exitWith {false}; +if (_throwable isEqualTo "") exitWith {false}; +if !(_target call EFUNC(common,isAwake)) exitWith {false}; +if ((!isNull objectParent _target) && {(vehicle _target) isNotEqualTo (vehicle _player)}) exitWith {false}; + +[_target, _throwable] call CBA_fnc_canAddItem diff --git a/addons/interaction/functions/fnc_passThrowable.sqf b/addons/interaction/functions/fnc_passThrowable.sqf new file mode 100644 index 00000000000..e765b0e0697 --- /dev/null +++ b/addons/interaction/functions/fnc_passThrowable.sqf @@ -0,0 +1,57 @@ +#include "..\script_component.hpp" +/* + * Author: Timi007 + * Pass throwable to another unit. + * + * Arguments: + * 0: Unit that passes the throwable + * 1: Unit to pass the throwable to + * 2: Throwable classname + * 3: Play passing animation (default: true) + * + * Return Value: + * None + * + * Example: + * [_player, _target, "HandGrenade"] call ace_interaction_fnc_passThrowable + * + * Public: No + */ + +params ["_player", "_target", "_throwable", ["_animate", true, [true]]]; +TRACE_4("Pass throwable params",_player,_target,_throwable,_animate); + +if (_throwable isEqualTo "") exitWith {ERROR("No throwable specified.")}; +if !([_target, _throwable] call CBA_fnc_canAddItem) exitWith {ERROR("Cannot add throwable to target due to lack of inventory space.")}; + +private _allOccurrencesOfThrowable = (magazinesAmmoFull _player) select {(_x select 0) == _throwable}; +if (_allOccurrencesOfThrowable isEqualTo []) exitWith {ERROR("Throwable not in the inventory of player.")}; + +private _cfgThrowable = configFile >> "CfgMagazines" >> _throwable; +if ((getNumber (_cfgThrowable >> "count")) == 1) then { + // Optimized and straightforward case, as most throwables only have an ammo count of 1 + _player removeItem _throwable; + _target addItem _throwable; +} else { + // Some throwables have more than 1 ammo count ("vn_v40_grenade_mag") + + // Get highest ammo count available + private _highestAmmoCount = (_allOccurrencesOfThrowable select 0) select 1; + { + _x params ["", "_ammoCount"]; + + if (_ammoCount > _highestAmmoCount) then { + _highestAmmoCount = _ammoCount; + }; + } forEach _allOccurrencesOfThrowable; + + TRACE_2("Passing throwable with most ammo",_throwable,_highestAmmoCount); + [_player, _throwable, _highestAmmoCount] call EFUNC(common,removeSpecificMagazine); + _target addMagazine [_throwable, _highestAmmoCount]; +}; + +if (_animate) then {[_player, "PutDown"] call EFUNC(common,doGesture)}; + +private _playerName = [_player] call EFUNC(common,getName); +private _displayName = getText (_cfgThrowable >> "displayName"); +[QEGVAR(common,displayTextStructured), [[LSTRING(PassThrowableHint), _playerName, _displayName], 1.5, _target], [_target]] call CBA_fnc_targetEvent; diff --git a/addons/interaction/initSettings.inc.sqf b/addons/interaction/initSettings.inc.sqf index f634b44313f..6ff2f17ffb0 100644 --- a/addons/interaction/initSettings.inc.sqf +++ b/addons/interaction/initSettings.inc.sqf @@ -21,6 +21,13 @@ true ] call CBA_fnc_addSetting; +[ + QGVAR(enableThrowablePassing), "CHECKBOX", + LSTRING(PassThrowableSetting), + format ["ACE %1", LLSTRING(DisplayName)], + true +] call CBA_fnc_addSetting; + [ QGVAR(disableNegativeRating), "CHECKBOX", [LSTRING(DisableNegativeRating_DisplayName), LSTRING(DisableNegativeRating_Description)], diff --git a/addons/interaction/stringtable.xml b/addons/interaction/stringtable.xml index 4d4e2d61e50..f516838ac7a 100644 --- a/addons/interaction/stringtable.xml +++ b/addons/interaction/stringtable.xml @@ -814,7 +814,7 @@ %1 передал вам магазин %2. %1 hat dir ein %2 Magazin gegeben. %1에게서 %2탄창을 받았다 - %1 は あなたに弾倉 %2 を渡した。 + %1 は あなたに %2 の弾倉を渡した。 %1給你%2彈匣 %1给你%2弹匣 @@ -845,10 +845,25 @@ Показывать действие "передать магазин" Zeige "Magazine geben" Interaktion '탄창 건네기'를 상호작용에서 보여줌 - 弾倉を渡すをインタラクションに表示 + "弾倉を渡す"をインタラクションに表示 顯示"給予彈匣"互動動作 显示"给予弹匣"互动动作 + + Pass grenade + Granate geben + 手榴弾を渡す + + + %1 passed you %2. + %1 hat dir %2 gegeben. + %1 は あなたに %2 を渡した。 + + + Show "pass grenade" interaction + Zeige "Granate geben" Interaktion + "手榴弾を渡す"をインタラクションに表示 + Passengers Pasažéři diff --git a/addons/medical/XEH_PREP.hpp b/addons/medical/XEH_PREP.hpp index dcbb9b016a5..d1edb26493b 100644 --- a/addons/medical/XEH_PREP.hpp +++ b/addons/medical/XEH_PREP.hpp @@ -1,5 +1,6 @@ PREP(addDamageToUnit); PREP(adjustPainLevel); PREP(deserializeState); +PREP(fullHeal); PREP(serializeState); PREP(setUnconscious); diff --git a/addons/medical/functions/fnc_fullHeal.sqf b/addons/medical/functions/fnc_fullHeal.sqf new file mode 100644 index 00000000000..13b3a1f979a --- /dev/null +++ b/addons/medical/functions/fnc_fullHeal.sqf @@ -0,0 +1,30 @@ +#include "..\script_component.hpp" +/* + * Author: DartRuffian + * Fully heals the patient. + * + * Arguments: + * 0: Patient + * 1: Medic (default: objNull) + * 2: Write message to patient log (default: false) + * + * Return Value: + * None + * + * Example: + * player call ace_medical_fnc_fullHeal + * + * Public: Yes + */ + +params [["_patient", objNull, [objNull]], ["_medic", objNull, [objNull]], ["_logMessage", false, [false]]]; + +if (isNull _medic) then { + _medic = _patient; +}; + +if (!alive _patient) exitWith { + ERROR_2("fullHeal [medic %1][patient %2] Patient is dead or null",_medic,_patient); +}; + +[_medic, _patient, _logMessage] call EFUNC(medical_treatment,fullHeal); diff --git a/addons/medical_treatment/functions/fnc_fullHeal.sqf b/addons/medical_treatment/functions/fnc_fullHeal.sqf index 0d8e93d3c70..e9295e3bac8 100644 --- a/addons/medical_treatment/functions/fnc_fullHeal.sqf +++ b/addons/medical_treatment/functions/fnc_fullHeal.sqf @@ -6,6 +6,7 @@ * Arguments: * 0: Medic * 1: Patient + * 2: Write message to patient log (default: true) * * Return Value: * None @@ -16,8 +17,10 @@ * Public: No */ -params ["_medic", "_patient"]; +params ["_medic", "_patient", ["_logMessage", true]]; -[_patient, "activity", LSTRING(Activity_fullHeal), [[_medic, false, true] call EFUNC(common,getName)]] call FUNC(addToLog); +if (_logMessage) then { + [_patient, "activity", LSTRING(Activity_fullHeal), [[_medic, false, true] call EFUNC(common,getName)]] call FUNC(addToLog); +}; [QGVAR(fullHealLocal), _patient, _patient] call CBA_fnc_targetEvent; diff --git a/addons/medical_treatment/stringtable.xml b/addons/medical_treatment/stringtable.xml index 2c353173b6b..035bfc3e3fb 100644 --- a/addons/medical_treatment/stringtable.xml +++ b/addons/medical_treatment/stringtable.xml @@ -3570,7 +3570,7 @@ Makes Check Pulse action give a numerical value based on setting Заставляет действие контрольного импульса выдавать числовое значение, основанное на настройке - 脈拍の確認アクションから得られる情報が数値化される医療レベルを設定します + 脈拍の確認アクションから得られる情報が数値化されるようになる医療レベルを設定します Numerical Pulse diff --git a/addons/overheating/stringtable.xml b/addons/overheating/stringtable.xml index 2432138c2ad..c5c2bb3e6b9 100644 --- a/addons/overheating/stringtable.xml +++ b/addons/overheating/stringtable.xml @@ -863,7 +863,7 @@ Вертоятность того, что устранение заклинивания не сработает, и его придется повторить. Wahrscheinlichkeit, dass der Versuch eine Ladehemmung zu beheben fehl schlägt und erneut durchgeführt werden muss. 기능고장 해결 시도시 실패할 확률이 있습니다. 이는 다시 기능고장 해결을 시도해야함을 의미합니다. - 弾詰まり解除アクションに失敗し、繰り返しが必要になる確率。 + 弾詰まり解除のアクションに失敗し、再実行が必要になる確率。 清除卡彈時有可能會失敗,需要反覆進行清槍。 清除卡弹时有可能会失败,需要反覆进行清枪。 Valószínűsége annak, hogy egy akadály eltávolítás művelet kudarcot vall, megismétlést igényel. diff --git a/addons/reload/stringtable.xml b/addons/reload/stringtable.xml index acc5e049b4d..465aa675801 100644 --- a/addons/reload/stringtable.xml +++ b/addons/reload/stringtable.xml @@ -132,7 +132,7 @@ Показывать проверку боеприпасов даже вне стационарного орудия Zeigt die Selbstinteraktion der Munitionsüberprüfung an, auch wenn nicht in statischen Waffen. 탄약 확인을 상호작용에서 할 수 있도록 합니다. - 設置型火器以外でも常にセルフ・インタラクションに弾薬確認アクションを表示します。 + 設置型火器以外でもセルフ・インタラクションに弾薬確認アクションを常に表示します。 即使不是固定式支援武器也依然在自我互動中顯示檢查彈藥動作 即使不是固定式支援武器也依然在自我互动中显示检查弹药动作 diff --git a/addons/tagging/stringtable.xml b/addons/tagging/stringtable.xml index 230d44bf9a0..ad9d061a308 100644 --- a/addons/tagging/stringtable.xml +++ b/addons/tagging/stringtable.xml @@ -59,7 +59,7 @@ Действие, выполняемое при выборе главного пункта меню маркировки. Aktion, die am Haupt-Interaktionspunkt ausgeführt werden soll. 상호작용 시 표시할 낙서를 고릅니다. - メインのインタラクションポイント(タグ)を選択した際に行われるアクション。 + 上層にある"タグ"のインタラクションを選択した際に行われるアクション。 直接噴漆在互動選單瞄準的點上。 直接喷漆在互动菜单瞄准的点上。 diff --git a/addons/vehicles/stringtable.xml b/addons/vehicles/stringtable.xml index 193d915f28a..9f52eedb32d 100644 --- a/addons/vehicles/stringtable.xml +++ b/addons/vehicles/stringtable.xml @@ -55,7 +55,7 @@ Убирает действие 'Выпрыгнуть' из меню. (Требует перезагрузки) Versteckt den Abspringen-Eintrag aus dem Aktionsmenü. Benötigt Neustart des Spiels. 휠액션에서 탈출을 숨깁니다. 게임 재시작을 필요로 합니다. - アクションメニューから脱出アクションを消します。ゲームの再起動が必要です。 + アクションメニューに"脱出"の項目を表示しないようにします。ゲームの再起動が必要です。 隱藏在動作選單中逃脫動作的選項。要求遊戲重新啟動。 隐藏鼠标滚轮菜单中的下车选项。需要重新启动游戏。 diff --git a/docs/wiki/feature/interaction.md b/docs/wiki/feature/interaction.md index 7e34645687f..8ab548dc3ed 100644 --- a/docs/wiki/feature/interaction.md +++ b/docs/wiki/feature/interaction.md @@ -45,3 +45,6 @@ Some of the zeus actions are also available (while in zeus) in the interaction m - Open the interaction menu. - Select `Waypoints`. - From here you can modify the speed / formation / behavior of the units / groups that are moving to that waypoint. + +### 2.4 Passing a grenade +- Using the "Pass grenade" action, you can pass the currently selected grenade or throwable (which will be thrown if you press G) to another unit.