mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Interaction - Show all possible modes for an attachment (#8154)
* Interaction - Show all possible modes for an attachement * Move attach & detach actions under item action * Remove switching from PIP to regular 2D * Remove attachment name from attach/detach actions * Fixed typo in variable name --------- Co-authored-by: johnb432 <58661205+johnb432@users.noreply.github.com>
This commit is contained in:
parent
aa6e5c30ec
commit
e3d8f40538
@ -1,6 +1,6 @@
|
||||
#include "..\script_component.hpp"
|
||||
/*
|
||||
* Author: mharis001, Dystopian
|
||||
* Author: mharis001, Dystopian, PabstMirror, johnb43
|
||||
* Returns children actions for weapon attachment switching.
|
||||
*
|
||||
* Arguments:
|
||||
@ -21,48 +21,111 @@ params ["_unit"];
|
||||
params ["_unit"];
|
||||
|
||||
private _currentWeapon = currentWeapon _unit;
|
||||
if (_currentWeapon isEqualTo "") exitWith {[]};
|
||||
private _weaponItems = _unit weaponAccessories _currentWeapon;
|
||||
|
||||
if (_currentWeapon == "") exitWith {[]};
|
||||
|
||||
private _cfgWeapons = configFile >> "CfgWeapons";
|
||||
private _actions = [];
|
||||
private _weaponItems = _unit weaponAccessories _currentWeapon;
|
||||
|
||||
// "attach" actions
|
||||
private _items = _unit call EFUNC(common,uniqueItems);
|
||||
private _compatibleItems = _currentWeapon call CBA_fnc_compatibleItems;
|
||||
{
|
||||
// Get current weapon attachments, as well as compatible attachments in inventory
|
||||
private _allAttachments = (+_weaponItems) - [""];
|
||||
_allAttachments append ((_unit call EFUNC(common,uniqueItems)) arrayIntersect (compatibleItems _currentWeapon));
|
||||
|
||||
(_allAttachments arrayIntersect _allAttachments) apply {
|
||||
private _config = _cfgWeapons >> _x;
|
||||
private _name = format [LLSTRING(weaponAttachmentsAttach), getText (_config >> "displayName")];
|
||||
private _picture = getText (_config >> "picture");
|
||||
private _type = getNumber (_config >> "itemInfo" >> "type");
|
||||
private _oldAttachment = _weaponItems select ([TYPE_MUZZLE, TYPE_FLASHLIGHT, TYPE_OPTICS, TYPE_BIPOD] find _type);
|
||||
|
||||
private _action = [
|
||||
_x, _name, _picture,
|
||||
LINKFUNC(switchWeaponAttachment),
|
||||
{true},
|
||||
{},
|
||||
[_currentWeapon, _x, _oldAttachment]
|
||||
] call EFUNC(interact_menu,createAction);
|
||||
_actions pushBack [_action, [], _unit];
|
||||
} forEach ((_items arrayIntersect _compatibleItems) - _weaponItems);
|
||||
|
||||
// "detach" actions
|
||||
{
|
||||
if (_x isEqualTo "") then {continue};
|
||||
|
||||
private _config = _cfgWeapons >> _x;
|
||||
private _name = format [LLSTRING(weaponAttachmentsDetach), getText (_config >> "displayName")];
|
||||
private _name = getText (_config >> "displayName");
|
||||
private _picture = getText (_config >> "picture");
|
||||
|
||||
private _action = [
|
||||
_x, _name, _picture,
|
||||
LINKFUNC(switchWeaponAttachment),
|
||||
{true},
|
||||
{},
|
||||
[_currentWeapon, "", _x]
|
||||
] call EFUNC(interact_menu,createAction);
|
||||
_actions pushBack [_action, [], _unit];
|
||||
} forEach _weaponItems;
|
||||
[
|
||||
[
|
||||
_x,
|
||||
_name,
|
||||
_picture,
|
||||
{},
|
||||
{true},
|
||||
{
|
||||
params ["_unit", "", "_args"];
|
||||
_args params ["_attachment", "_name", "_picture", "_weaponItems", "_currentWeapon"];
|
||||
|
||||
_actions
|
||||
private _cfgWeapons = configFile >> "CfgWeapons";
|
||||
private _attachmentNotOnGun = !(_attachment in _weaponItems);
|
||||
private _actions = [];
|
||||
|
||||
// "attach" action
|
||||
if (_attachmentNotOnGun && {[_unit, _attachment] call EFUNC(common,hasItem)}) then {
|
||||
private _type = getNumber (_cfgWeapons >> _attachment >> "itemInfo" >> "type");
|
||||
private _currentAttachment = _weaponItems select ([TYPE_MUZZLE, TYPE_FLASHLIGHT, TYPE_OPTICS, TYPE_BIPOD] find _type);
|
||||
|
||||
_actions pushBack [
|
||||
[
|
||||
QGVAR(attach_) + _attachment,
|
||||
LLSTRING(weaponAttachmentsAttach),
|
||||
_picture,
|
||||
LINKFUNC(switchWeaponAttachment),
|
||||
{true},
|
||||
{},
|
||||
[_currentWeapon, _attachment, _currentAttachment]
|
||||
] call EFUNC(interact_menu,createAction),
|
||||
[],
|
||||
_unit
|
||||
];
|
||||
};
|
||||
|
||||
// Don't show interaction with attachments that aren't on the current weapon
|
||||
if (_attachmentNotOnGun) exitWith {_actions};
|
||||
|
||||
// "detach" action
|
||||
_actions pushBack [
|
||||
[
|
||||
QGVAR(detach_) + _attachment,
|
||||
LLSTRING(weaponAttachmentsDetach),
|
||||
_picture,
|
||||
LINKFUNC(switchWeaponAttachment),
|
||||
{true},
|
||||
{},
|
||||
[_currentWeapon, "", _attachment]
|
||||
] call EFUNC(interact_menu,createAction),
|
||||
[],
|
||||
_unit
|
||||
];
|
||||
|
||||
private _CBA_PIPItems = configFile >> "CBA_PIPItems";
|
||||
|
||||
// "switch" action
|
||||
{
|
||||
// Ignore 2D scopes when using a PIP scope (e.g. CUP uses this)
|
||||
if (getText (_CBA_PIPItems >> _x) == _attachment) then {
|
||||
continue;
|
||||
};
|
||||
|
||||
private _config = _cfgWeapons >> _x;
|
||||
private _modeName = getText (_config >> "MRT_SwitchItemHintText");
|
||||
|
||||
if (_modeName == "") then {
|
||||
_modeName = getText (_config >> "displayName");
|
||||
};
|
||||
|
||||
_actions pushBack [
|
||||
[
|
||||
QGVAR(switch_) + _x,
|
||||
format ["%1: %2", localize "str_sensortype_switch", _modeName],
|
||||
getText (_config >> "picture"),
|
||||
LINKFUNC(switchWeaponAttachment),
|
||||
{true},
|
||||
{},
|
||||
[_currentWeapon, _x, ""]
|
||||
] call EFUNC(interact_menu,createAction),
|
||||
[],
|
||||
_unit
|
||||
];
|
||||
} forEach ((_attachment call CBA_fnc_switchableAttachments) - [_attachment]); // Don't allow switching to current mode
|
||||
|
||||
_actions
|
||||
},
|
||||
[_x, _name, _picture, _weaponItems, _currentWeapon]
|
||||
] call EFUNC(interact_menu,createAction),
|
||||
[],
|
||||
_unit
|
||||
]
|
||||
} // return
|
||||
}, _unit, QGVAR(weaponAttachmentsActions), 5, QGVAR(clearWeaponAttachmentsActionsCache)] call EFUNC(common,cachedCall);
|
||||
|
@ -1247,30 +1247,30 @@
|
||||
<Korean>전면유리 부수기</Korean>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interaction_weaponAttachmentsAttach">
|
||||
<English>Attach %1</English>
|
||||
<Russian>Установить %1</Russian>
|
||||
<Japanese>%1 を取り付け</Japanese>
|
||||
<Spanish>Acoplar %1</Spanish>
|
||||
<French>Fixer %1</French>
|
||||
<Polish>Przyczep %1</Polish>
|
||||
<German>Befestige %1</German>
|
||||
<Italian>Attacca %1</Italian>
|
||||
<Chinesesimp>附加 %1</Chinesesimp>
|
||||
<Korean>%1 붙이기</Korean>
|
||||
<Portuguese>Fixar %1</Portuguese>
|
||||
<English>Attach</English>
|
||||
<Russian>Установить</Russian>
|
||||
<Japanese>を取り付け</Japanese>
|
||||
<Spanish>Acoplar</Spanish>
|
||||
<French>Fixer</French>
|
||||
<Polish>Przyczep</Polish>
|
||||
<German>Befestige</German>
|
||||
<Italian>Attacca</Italian>
|
||||
<Chinesesimp>附加</Chinesesimp>
|
||||
<Korean>붙이기</Korean>
|
||||
<Portuguese>Fixar</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interaction_weaponAttachmentsDetach">
|
||||
<English>Detach %1</English>
|
||||
<Russian>Снять %1</Russian>
|
||||
<Japanese>%1 を外す</Japanese>
|
||||
<Spanish>Desacoplar %1</Spanish>
|
||||
<French>Retirer %1</French>
|
||||
<Polish>Odczep %1</Polish>
|
||||
<German>Löse %1</German>
|
||||
<Italian>Stacca %1</Italian>
|
||||
<Chinesesimp>拆卸 %1</Chinesesimp>
|
||||
<Korean>%1 떼내기</Korean>
|
||||
<Portuguese>Desfixar %1</Portuguese>
|
||||
<English>Detach</English>
|
||||
<Russian>Снять</Russian>
|
||||
<Japanese>を外す</Japanese>
|
||||
<Spanish>Desacoplar</Spanish>
|
||||
<French>Retirer</French>
|
||||
<Polish>Odczep</Polish>
|
||||
<German>Löse</German>
|
||||
<Italian>Stacca</Italian>
|
||||
<Chinesesimp>拆卸</Chinesesimp>
|
||||
<Korean>떼내기</Korean>
|
||||
<Portuguese>Desfixar</Portuguese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Interaction_weaponAttachments_Description">
|
||||
<English>Enables attach/detach weapon attachment actions for current weapon.</English>
|
||||
|
Loading…
Reference in New Issue
Block a user