From e460e94bd867f7cb295b0dddddbc4d5007984333 Mon Sep 17 00:00:00 2001 From: Ampersand Date: Tue, 14 Mar 2023 14:27:12 -0400 Subject: [PATCH] Fix laser cycling too quickly (#712) * Fix laser cycling too quickly https://www.youtube.com/watch?v=LMWf6TOveJE * Update addons/common/functions/fnc_canFire.sqf Co-authored-by: mharis001 <34453221+mharis001@users.noreply.github.com> * nextFireTime after reload * check magazine too * Check ammo simulation and fire time for all units --------- Co-authored-by: mharis001 <34453221+mharis001@users.noreply.github.com> Co-authored-by: mharis001 --- addons/common/functions/fnc_canFire.sqf | 1 + addons/common/functions/fnc_fireWeapon.sqf | 12 +++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/addons/common/functions/fnc_canFire.sqf b/addons/common/functions/fnc_canFire.sqf index 0c1d333d6..882006716 100644 --- a/addons/common/functions/fnc_canFire.sqf +++ b/addons/common/functions/fnc_canFire.sqf @@ -24,6 +24,7 @@ private _unit = _unit call FUNC(getEffectiveGunner); alive _unit && {!isPlayer _unit} && {lifeState _unit in ["HEALTHY", "INJURED"]} +&& {CBA_missionTime >= _unit getVariable [QGVAR(nextFireTime), 0]} && { private _vehicle = vehicle _unit; diff --git a/addons/common/functions/fnc_fireWeapon.sqf b/addons/common/functions/fnc_fireWeapon.sqf index 82181c706..052d382e1 100644 --- a/addons/common/functions/fnc_fireWeapon.sqf +++ b/addons/common/functions/fnc_fireWeapon.sqf @@ -16,6 +16,8 @@ * Public: No */ +#define LASER_WEAPON_TIMEOUT 1 + params [["_unit", objNull, [objNull]], ["_infiniteAmmo", false, [false]]]; if (!local _unit) exitWith { @@ -61,12 +63,20 @@ switch (true) do { // Vehicle gunner default { private _turretPath = _vehicle unitTurret _unit; - weaponState [_vehicle, _turretPath] params ["_weapon", "_muzzle", "_fireMode"]; + weaponState [_vehicle, _turretPath] params ["_weapon", "_muzzle", "_fireMode", "_magazine"]; if (_weapon isKindOf ["CarHorn", configFile >> "CfgWeapons"]) exitWith { _unit forceWeaponFire [_muzzle, _fireMode]; }; + // Prevent laser weapons from firing too quickly to allow for reliably switching to the desired state + private _ammo = getText (configFile >> "CfgMagazines" >> _magazine >> "ammo"); + private _ammoSimulation = getText (configFile >> "CfgAmmo" >> _ammo >> "simulation"); + + if (_ammoSimulation == "laserDesignate") then { + _unit setVariable [QGVAR(nextFireTime), CBA_missionTime + LASER_WEAPON_TIMEOUT]; + }; + if (_infiniteAmmo) then { _unit setAmmo [_muzzle, 1e6]; };