mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Reload Launchers - Code cleanup (#9334)
* reloadlaunchers cleanup * Update fnc_canLoad.sqf
This commit is contained in:
parent
44e0fdb6fa
commit
59ee36560f
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
class Extended_PreStart_EventHandlers {
|
class Extended_PreStart_EventHandlers {
|
||||||
class ADDON {
|
class ADDON {
|
||||||
init = QUOTE(call COMPILE_SCRIPT(XEH_preStart));
|
init = QUOTE(call COMPILE_SCRIPT(XEH_preStart));
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
class CfgVehicles {
|
class CfgVehicles {
|
||||||
class Man;
|
class Man;
|
||||||
class CAManBase: Man {
|
class CAManBase: Man {
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
class CfgWeapons {
|
class CfgWeapons {
|
||||||
class Launcher_Base_F;
|
class Launcher_Base_F;
|
||||||
class launch_Titan_base: Launcher_Base_F {
|
class launch_Titan_base: Launcher_Base_F {
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
PREP(addMissileReloadActions);
|
PREP(addMissileReloadActions);
|
||||||
PREP(canLoad);
|
PREP(canLoad);
|
||||||
PREP(getLoadableMissiles);
|
PREP(getLoadableMissiles);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// by commy2
|
// by commy2
|
||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
[QGVAR(reloadLauncher), {_this call DFUNC(reloadLauncher)}] call CBA_fnc_addEventHandler;
|
[QGVAR(reloadLauncher), LINKFUNC(reloadLauncher)] call CBA_fnc_addEventHandler;
|
||||||
|
@ -15,6 +15,5 @@ class CfgPatches {
|
|||||||
};
|
};
|
||||||
|
|
||||||
#include "CfgEventHandlers.hpp"
|
#include "CfgEventHandlers.hpp"
|
||||||
|
|
||||||
#include "CfgVehicles.hpp"
|
#include "CfgVehicles.hpp"
|
||||||
#include "CfgWeapons.hpp"
|
#include "CfgWeapons.hpp"
|
||||||
|
@ -1,17 +1,17 @@
|
|||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
/*
|
/*
|
||||||
* Author: commy2
|
* Author: commy2
|
||||||
* Create one action per reloadable missile
|
* Create one action per reloadable missile.
|
||||||
*
|
*
|
||||||
* Arguments:
|
* Arguments:
|
||||||
* 1: Target <OBJECT>
|
* 0: Unit equipped with the launcher <OBJECT>
|
||||||
* 0: Player <OBJECT>
|
* 1: Unit to execute the reload <OBJECT>
|
||||||
*
|
*
|
||||||
* Return Value:
|
* Return Value:
|
||||||
* Children actions <ARRAY>
|
* Children actions <ARRAY>
|
||||||
*
|
*
|
||||||
* Example:
|
* Example:
|
||||||
* [bob, kevin] call ace_reloadlaunchers_fnc_addMissileReloadActions
|
* [cursorTarget, player] call ace_reloadlaunchers_fnc_addMissileReloadActions
|
||||||
*
|
*
|
||||||
* Public: No
|
* Public: No
|
||||||
*
|
*
|
||||||
@ -20,8 +20,9 @@
|
|||||||
params ["_target", "_unit"];
|
params ["_target", "_unit"];
|
||||||
TRACE_2("params",_target,_unit);
|
TRACE_2("params",_target,_unit);
|
||||||
|
|
||||||
//Fast exit for common case:
|
// Fast exit for common cases
|
||||||
private _weapon = secondaryWeapon _target;
|
private _weapon = secondaryWeapon _target;
|
||||||
|
|
||||||
if ((_weapon == "") || {(getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(enabled))) == 0}) exitWith {
|
if ((_weapon == "") || {(getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(enabled))) == 0}) exitWith {
|
||||||
TRACE_1("weapon not supported",_weapon);
|
TRACE_1("weapon not supported",_weapon);
|
||||||
[]
|
[]
|
||||||
@ -32,16 +33,18 @@ private _actions = [];
|
|||||||
private _loadableMissiles = [_unit, _weapon] call FUNC(getLoadableMissiles);
|
private _loadableMissiles = [_unit, _weapon] call FUNC(getLoadableMissiles);
|
||||||
TRACE_2("",_weapon,_loadableMissiles);
|
TRACE_2("",_weapon,_loadableMissiles);
|
||||||
|
|
||||||
|
private _cfgMagazines = configFile >> "CfgMagazines";
|
||||||
|
|
||||||
{
|
{
|
||||||
private _name = format [QGVAR(Missile_%1), _x];
|
private _name = format [QGVAR(Missile_%1), _x];
|
||||||
private _displayName = format [localize LSTRING(LoadMagazine), getText (configFile >> "CfgMagazines" >> _x >> "displayName")];
|
private _displayName = format [LLSTRING(LoadMagazine), getText (_cfgMagazines >> _x >> "displayName")];
|
||||||
|
|
||||||
private _statement = {
|
private _statement = {
|
||||||
(_this select 2) call DFUNC(load);
|
(_this select 2) call FUNC(load);
|
||||||
};
|
};
|
||||||
|
|
||||||
private _condition = {
|
private _condition = {
|
||||||
(_this select 2) call DFUNC(canLoad)
|
(_this select 2) call FUNC(canLoad)
|
||||||
};
|
};
|
||||||
|
|
||||||
private _action = [_name, _displayName, "", _statement, _condition, {}, [_unit, _target, _weapon, _x], "", 4] call EFUNC(interact_menu,createAction);
|
private _action = [_name, _displayName, "", _statement, _condition, {}, [_unit, _target, _weapon, _x], "", 4] call EFUNC(interact_menu,createAction);
|
||||||
|
@ -4,16 +4,16 @@
|
|||||||
* Check of the unit can reload the launcher of target unit.
|
* Check of the unit can reload the launcher of target unit.
|
||||||
*
|
*
|
||||||
* Arguments:
|
* Arguments:
|
||||||
* 0: Unit to do the reloading <OBJECT>
|
* 0: Unit to execute the reload <OBJECT>
|
||||||
* 1: Unit eqipped with launcher <OBJECT>
|
* 1: Unit equipped with the launcher <OBJECT>
|
||||||
* 2: weapon name <STRING>
|
* 2: Launcher name <STRING>
|
||||||
* 3: missile name <STRING>
|
* 3: Missile name <STRING>
|
||||||
*
|
*
|
||||||
* Return Value:
|
* Return Value:
|
||||||
* None
|
* None
|
||||||
*
|
*
|
||||||
* Example:
|
* Example:
|
||||||
* [bob, kevin, "weapon", "missile"] call ace_reloadlaunchers_fnc_canLoad
|
* [player, cursorTarget, "launch_RPG32_F", "RPG32_F"] call ace_reloadlaunchers_fnc_canLoad
|
||||||
*
|
*
|
||||||
* Public: No
|
* Public: No
|
||||||
*/
|
*/
|
||||||
@ -21,21 +21,21 @@
|
|||||||
params ["_unit", "_target", "_weapon", "_magazine"];
|
params ["_unit", "_target", "_weapon", "_magazine"];
|
||||||
TRACE_4("params",_unit,_target,_weapon,_magazine);
|
TRACE_4("params",_unit,_target,_weapon,_magazine);
|
||||||
|
|
||||||
if (!alive _target) exitWith {false};
|
// Target must be awake
|
||||||
if (vehicle _target != _target) exitWith {false};
|
if !(_target call EFUNC(common,isAwake)) exitWith {false};
|
||||||
|
|
||||||
|
// Target must not be in a vehicle
|
||||||
|
if !(isNull objectParent _target) exitWith {false};
|
||||||
if !([_unit, _target, ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)) exitWith {false};
|
if !([_unit, _target, ["isNotInside", "isNotSwimming"]] call EFUNC(common,canInteractWith)) exitWith {false};
|
||||||
|
|
||||||
// target is awake
|
// Check if the launcher is compatible
|
||||||
if (_target getVariable ["ACE_isUnconscious", false]) exitWith {false};
|
|
||||||
|
|
||||||
// has secondary weapon equipped
|
|
||||||
if !(_weapon in weapons _target) exitWith {false};
|
|
||||||
|
|
||||||
// check if the target really needs to be reloaded
|
|
||||||
if (count secondaryWeaponMagazine _target > 0) exitWith {false};
|
|
||||||
|
|
||||||
// check if the launcher is compatible
|
|
||||||
if (getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(enabled)) == 0) exitWith {false};
|
if (getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(enabled)) == 0) exitWith {false};
|
||||||
|
|
||||||
// check if the magazine compatible with targets launcher
|
// Check if target has its secondary weapon equipped
|
||||||
|
if !(_weapon in weapons _target) exitWith {false};
|
||||||
|
|
||||||
|
// Check if the target's launcher's primary muzzle really needs to be reloaded
|
||||||
|
if (_target ammo _weapon != 0) exitWith {false};
|
||||||
|
|
||||||
|
// Check if the magazine is compatible with target's launcher
|
||||||
_magazine in ([_unit, _weapon] call FUNC(getLoadableMissiles))
|
_magazine in ([_unit, _weapon] call FUNC(getLoadableMissiles))
|
||||||
|
@ -1,17 +1,17 @@
|
|||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
/*
|
/*
|
||||||
* Author: commy2
|
* Author: commy2, johnb43
|
||||||
* Return all magazine types from reloaders inventory that are compatible with given weapon.
|
* Return all magazine types from reloaders inventory that are compatible with given weapon.
|
||||||
*
|
*
|
||||||
* Arguments:
|
* Arguments:
|
||||||
* 0: Unit to to the reload <OBJECT>
|
* 0: Unit to execute the reload <OBJECT>
|
||||||
* 1: A launcher <OBJECT>
|
* 1: Launcher name <STRING>
|
||||||
*
|
*
|
||||||
* Return Value:
|
* Return Value:
|
||||||
* Reloable magazines <ARRAY>
|
* Reloable magazines <ARRAY>
|
||||||
*
|
*
|
||||||
* Example:
|
* Example:
|
||||||
* [bob, launcher] call ace_reloadlaunchers_fnc_getLoadableMissiles
|
* [player, "launch_RPG32_F"] call ace_reloadlaunchers_fnc_getLoadableMissiles
|
||||||
*
|
*
|
||||||
* Public: No
|
* Public: No
|
||||||
*/
|
*/
|
||||||
@ -19,11 +19,5 @@
|
|||||||
params ["_unit", "_weapon"];
|
params ["_unit", "_weapon"];
|
||||||
TRACE_2("params",_unit,_weapon);
|
TRACE_2("params",_unit,_weapon);
|
||||||
|
|
||||||
// get available magazines of reloader, Note: "magazines" does not include currently loaded magazines
|
// Look for primary muzzle magazines only
|
||||||
private _magazines = magazines _unit;
|
(compatibleMagazines [_weapon, "this"]) arrayIntersect (magazines _unit)
|
||||||
|
|
||||||
// case sensitvity
|
|
||||||
_magazines = _magazines apply {toLower _x};
|
|
||||||
|
|
||||||
// get reloaders magazine types compatible with targets launcher. No duplicates.
|
|
||||||
getArray (configFile >> "CfgWeapons" >> _weapon >> "magazines") select {toLower _x in _magazines} // return
|
|
||||||
|
@ -1,19 +1,19 @@
|
|||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
/*
|
/*
|
||||||
* Author: commy2
|
* Author: commy2
|
||||||
* Reload a launcher
|
* Start reloading a launcher, reload started by the unit who has the missile.
|
||||||
*
|
*
|
||||||
* Arguments:
|
* Arguments:
|
||||||
* 0: Unit with magazine <OBJECT>
|
* 0: Unit executing the reload <OBJECT>
|
||||||
* 1: Unit with launcher <OBJECT>
|
* 1: Unit equipped with the launcher <OBJECT>
|
||||||
* 2: weapon name <STRING>
|
* 2: Launcher name <STRING>
|
||||||
* 3: missile name <STRING>
|
* 3: Missile name <STRING>
|
||||||
*
|
*
|
||||||
* Return Value:
|
* Return Value:
|
||||||
* None
|
* None
|
||||||
*
|
*
|
||||||
* Example:
|
* Example:
|
||||||
* [bob, kevin, "weapon", "missile"] call ace_reloadlaunchers_fnc_load
|
* [player, cursorTarget, "launch_RPG32_F", "RPG32_F"] call ace_reloadlaunchers_fnc_load
|
||||||
*
|
*
|
||||||
* Public: No
|
* Public: No
|
||||||
*/
|
*/
|
||||||
@ -21,30 +21,37 @@
|
|||||||
params ["_unit", "_target", "_weapon", "_magazine"];
|
params ["_unit", "_target", "_weapon", "_magazine"];
|
||||||
TRACE_4("params",_unit,_target,_weapon,_magazine);
|
TRACE_4("params",_unit,_target,_weapon,_magazine);
|
||||||
|
|
||||||
private _reloadTime = if (isNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(buddyReloadTime))) then {
|
private _config = configFile >> "CfgWeapons" >> _weapon >> QGVAR(buddyReloadTime);
|
||||||
getNumber (configFile >> "CfgWeapons" >> _weapon >> QGVAR(buddyReloadTime))
|
|
||||||
|
private _reloadTime = if (isNumber _config) then {
|
||||||
|
getNumber _config
|
||||||
} else {
|
} else {
|
||||||
2.5
|
2.5
|
||||||
};
|
};
|
||||||
|
|
||||||
// do animation
|
// Play animation
|
||||||
[_unit] call EFUNC(common,goKneeling);
|
[_unit] call EFUNC(common,goKneeling);
|
||||||
|
|
||||||
// show progress bar
|
// Show progress bar
|
||||||
|
|
||||||
private _onSuccess = {
|
private _onSuccess = {
|
||||||
(_this select 0 select 0) removeMagazine (_this select 0 select 3);
|
(_this select 0) params ["_unit", "_target", "_weapon", "_magazine"];
|
||||||
[QGVAR(reloadLauncher), _this select 0, _this select 0 select 1] call CBA_fnc_targetEvent;
|
|
||||||
|
|
||||||
[localize LSTRING(LauncherLoaded)] call DEFUNC(common,displayTextStructured);
|
_unit removeMagazine _magazine;
|
||||||
|
|
||||||
|
// Reload target's launcher
|
||||||
|
[QGVAR(reloadLauncher), [_unit, _target, _weapon, _magazine], _target] call CBA_fnc_targetEvent;
|
||||||
|
|
||||||
|
[LLSTRING(LauncherLoaded)] call EFUNC(common,displayTextStructured);
|
||||||
};
|
};
|
||||||
|
|
||||||
private _onFailure = {
|
private _onFailure = {
|
||||||
[localize ELSTRING(common,ActionAborted)] call DEFUNC(common,displayTextStructured);
|
[LELSTRING(common,ActionAborted)] call EFUNC(common,displayTextStructured);
|
||||||
};
|
};
|
||||||
|
|
||||||
private _condition = {
|
private _condition = {
|
||||||
(_this select 0) call DFUNC(canLoad) && {(_this select 0 select 0) distance (_this select 0 select 1) < 4}
|
(_this select 0) params ["_unit", "_target"];
|
||||||
|
|
||||||
|
(_this select 0) call FUNC(canLoad) && {_unit distance _target < 4}
|
||||||
};
|
};
|
||||||
|
|
||||||
[_reloadTime, [_unit, _target, _weapon, _magazine], _onSuccess, _onFailure, localize LSTRING(LoadingLauncher), _condition, ["isNotInside", "isNotSwimming"]] call EFUNC(common,progressBar);
|
[_reloadTime, [_unit, _target, _weapon, _magazine], _onSuccess, _onFailure, LLSTRING(LoadingLauncher), _condition, ["isNotInside", "isNotSwimming"]] call EFUNC(common,progressBar);
|
||||||
|
@ -1,24 +1,24 @@
|
|||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
/*
|
/*
|
||||||
* Author: commy2
|
* Author: commy2
|
||||||
* Reload a launcher
|
* Reload a launcher for the unit who has the launcher.
|
||||||
*
|
*
|
||||||
* Arguments:
|
* Arguments:
|
||||||
* 0: Unit to do the reloading <OBJECT>
|
* 0: Unit executing the reload <OBJECT>
|
||||||
* 1: Target to rload <OBJECT>
|
* 1: Unit equipped with the launcher <OBJECT>
|
||||||
* 2: weapon name <STRING>
|
* 2: Launcher name <STRING>
|
||||||
* 3: missile name <STRING>
|
* 3: Missile name <STRING>
|
||||||
*
|
*
|
||||||
* Return Value:
|
* Return Value:
|
||||||
* None
|
* None
|
||||||
*
|
*
|
||||||
* Example:
|
* Example:
|
||||||
* [bob, kevin, "weapon", "missile"] call ace_reloadlaunchers_fnc_reloadLauncher
|
* [player, cursorTarget, "launch_RPG32_F", "RPG32_F"] call ace_reloadlaunchers_fnc_reloadLauncher
|
||||||
*
|
*
|
||||||
* Public: No
|
* Public: No
|
||||||
*/
|
*/
|
||||||
|
|
||||||
params ["_unit","_target","_weapon","_magazine"];
|
params ["_unit", "_target", "_weapon", "_magazine"];
|
||||||
TRACE_4("params",_unit,_target,_weapon,_magazine);
|
TRACE_4("params",_unit,_target,_weapon,_magazine);
|
||||||
|
|
||||||
_target selectWeapon _weapon;
|
_target selectWeapon _weapon;
|
||||||
|
Loading…
Reference in New Issue
Block a user