Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Common - Add keybind and function to unload unit's weapon/muzzle #8735

Merged
merged 7 commits into from
May 18, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions addons/common/XEH_PREP.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,7 @@ PREP(uniqueElements);
PREP(uniqueItems);
PREP(unloadPerson);
PREP(unloadPersonLocal);
PREP(unloadUnitWeapon);
PREP(unmuteUnit);
PREP(useItem);
PREP(useMagazine);
Expand Down
17 changes: 17 additions & 0 deletions addons/common/XEH_postInit.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -527,4 +527,21 @@ GVAR(deviceKeyCurrentIndex) = -1;
{false},
[0xC7, [true, false, false]], false] call CBA_fnc_addKeybind; //SHIFT + Home Key


["ACE3 Weapons", QGVAR(unloadWeapon), localize LSTRING(unloadWeapon), {
// Conditions:
if !([ACE_player, objNull, ["isNotInside"]] call FUNC(canInteractWith)) exitWith {false};

private _currentWeapon = currentWeapon ACE_player;
if !(_currentWeapon != primaryWeapon _unit && {_currentWeapon != handgunWeapon _unit} && {_currentWeapon != secondaryWeapon _unit}) exitWith {false};

private _currentMuzzle = currentMuzzle ACE_player;
private _currentAmmoCount = ACE_player ammo _currentMuzzle;
if (_currentAmmoCount < 1) exitWith {false};

// Statement:
[ACE_player, _currentWeapon, _currentMuzzle, _currentAmmoCount, false] call FUNC(unloadUnitWeapon);
true
}, {false}, [19, [false, false, true]], false] call CBA_fnc_addKeybind; //ALT + R Key

GVAR(commonPostInited) = true;
87 changes: 87 additions & 0 deletions addons/common/functions/fnc_unloadUnitWeapon.sqf
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
#include "script_component.hpp"
/*
* Author: drofseh & Commy2
* Unload the magazine from the unit's weapon and attempt to put it in a sensible place.
*
* Arguments:
* 0: Player <OBJECT>
* 1: Weapon <STRING>
* 2: Muzzle (optional, default: Weapon)<STRING>
* 3: Ammo count (optional, default: ammo currentMuzzle Player) <NUMBER>
* 4: Skip animation? (optional, default: false) <BOOL>
*
* Return Value:
* None
*
* Example:
* [ACE_player, currentWeapon ACE_player, currentMuzzle ACE_player, 23, false] call ace_common_fnc_unloadUnitWeapon
*
* Public: No
*/

params ["_unit", "_weapon", ["_muzzle", _weapon], ["_ammoCount", _unit ammo _muzzle ], ["_skipAnim", false]];
TRACE_5("params",_unit,_weapon,_muzzle,_ammoCount,_skipAnim);

// audiovisual effects
private _delay = 0;
if !(_skipAnim) then {
_delay = 1.5;
private _config = configFile >> "CfgWeapons" >> _weapon;
if (_weapon != _muzzle) then {
_config = _config >> _muzzle;
};

// get and play animation
private _unloadAction = getText (_config >> "ACE_unloadAction");

if (_unloadAction == "") then {
_unloadAction = getText (_config >> "reloadAction");
};

[_unit, _unloadAction, 1] call FUNC(doGesture);

// get and play sound
private _unloadSound = getText (_config >> "ACE_unloadSound");

if (_unloadSound == "") then {
_unloadSound = "A3\Sounds_F\arsenal\weapons\Rifles\Katiba\reload_Katiba.wss";
private _unloadSoundArray = getArray (_config >> "reloadMagazineSound");

// file extention is required for playSound3D
if (_unloadSoundArray isNotEqualTo []) then {
private _wssTest = format ["%1.wss", _unloadSoundArray select 0];
if (fileExists _wssTest) then {
_unloadSound = _wssTest;
} else {
private _wavTest = format ["%1.wav", _unloadSoundArray select 0];
if (fileExists _wavTest) then {
_unloadSound = _wavTest;
};
};
};
};

playSound3D [_unloadSound, _unit];
};

// remove magazine from weapon and add it to inventory
[{
params ["_unit", "_weapon", "_ammoCount"];

// remove weapon item
private _magazineClass = currentMagazine _unit;

switch true do {
case (_weapon == primaryWeapon _unit): {
_unit removePrimaryWeaponItem _magazineClass;
};
case (_weapon == handgunWeapon _unit): {
_unit removeHandgunItem _magazineClass;
};
case (_weapon == secondaryWeapon _unit): {
_unit removeSecondaryWeaponItem _magazineClass;
};
};

[_unit, _magazineClass, _ammoCount, true] call CBA_fnc_addMagazine;
}, [_unit, _weapon, _ammoCount], _delay] call CBA_fnc_waitAndExecute;
3 changes: 3 additions & 0 deletions addons/common/stringtable.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1590,5 +1590,8 @@
<Chinese>受所在位置影響提升醫療能力</Chinese>
<Turkish>Konumlar Tedaviyi Hızlandırır</Turkish>
</Key>
<Key ID="STR_ACE_Common_unloadWeapon">
<English>Unload Weapon</English>
</Key>
</Package>
</Project>
2 changes: 1 addition & 1 deletion addons/main/script_mod.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

// MINIMAL required version for the Mod. Components can specify others..
#define REQUIRED_VERSION 2.06
#define REQUIRED_CBA_VERSION {3,15,6}
#define REQUIRED_CBA_VERSION {3,15,7}

#ifdef COMPONENT_BEAUTIFIED
#define COMPONENT_NAME QUOTE(ACE3 - COMPONENT_BEAUTIFIED)
Expand Down
26 changes: 26 additions & 0 deletions docs/wiki/framework/common-framework.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
---
layout: wiki
title: Common Framework
description: Notes on ACE3 Common.
group: framework
order: 5
parent: wiki
mod: ace
version:
major: 3
minor: 14
patch: 2
---

## 1. Config Values

### 1.1 `CfgWeapons`

```cpp
class CfgWeapons {
class yourWeaponClass {
ACE_unloadAction = "GestureUnloadMyWeaponClass"; // Animation to play when weapon is unloaded with ace_common_fnc_unloadUnitWeapon
ACE_unloadSound = "A3\Sounds_F\arsenal\weapons\Rifles\Katiba\reload_Katiba.wss"; // Sound to play when weapon is unloaded with ace_common_fnc_unloadUnitWeapon
};
};
```