mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Replace Helicopter eject configs with universal scripted action (#5384)
* Remove eject config entries * Add scripted Eject action * Fix engine stop on driver eject * Clean up * Use config instead object for CBA_fnc_getTurret * Optimize, add commander turret init * Restore role in var name * Use single qoutes instead QUOTE macro
This commit is contained in:
parent
45d9a3a1a9
commit
90647c5495
17
addons/aircraft/CfgEventHandlers.hpp
Normal file
17
addons/aircraft/CfgEventHandlers.hpp
Normal file
@ -0,0 +1,17 @@
|
||||
class Extended_PreStart_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preStart));
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_PreInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preInit));
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_PostInit_EventHandlers {
|
||||
class ADDON {
|
||||
clientInit = QUOTE(call COMPILE_FILE(XEH_postInitClient));
|
||||
};
|
||||
};
|
@ -37,11 +37,9 @@ class CfgVehicles {
|
||||
|
||||
class Heli_Light_01_base_F: Helicopter_Base_H {
|
||||
incomingMissileDetectionSystem = 16; // Vanilla: 0
|
||||
driverCanEject = 1;
|
||||
|
||||
class Turrets: Turrets {
|
||||
class CopilotTurret: CopilotTurret {
|
||||
canEject = 1;
|
||||
showHMD = 1;
|
||||
};
|
||||
};
|
||||
@ -49,22 +47,13 @@ class CfgVehicles {
|
||||
|
||||
class Heli_Light_01_armed_base_F: Heli_Light_01_base_F {
|
||||
incomingMissileDetectionSystem = 16; // Vanilla: 0
|
||||
driverCanEject = 1;
|
||||
|
||||
class Turrets: Turrets {
|
||||
class CopilotTurret: CopilotTurret {
|
||||
canEject = 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
class Heli_Light_02_base_F: Helicopter_Base_H {
|
||||
driverCanEject = 1;
|
||||
incomingMissileDetectionSystem = 16; // Vanilla: 24
|
||||
magazines[] = {"2000Rnd_762x51_Belt_T_Green", "12Rnd_PG_missiles", "168Rnd_CMFlare_Chaff_Magazine"}; // Switch gun magazine to 7.62mm from 6.5mm
|
||||
|
||||
class Turrets: Turrets {
|
||||
class CopilotTurret: CopilotTurret {
|
||||
canEject = 1;
|
||||
showHMD = 1;
|
||||
};
|
||||
};
|
||||
@ -80,44 +69,31 @@ class CfgVehicles {
|
||||
|
||||
class Heli_Attack_02_base_F: Helicopter_Base_F {
|
||||
incomingMissileDetectionSystem = 16; // Vanilla: 24
|
||||
driverCanEject = 1;
|
||||
|
||||
class Turrets: Turrets {
|
||||
class MainTurret: MainTurret {
|
||||
canEject = 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class Heli_Transport_01_base_F: Helicopter_Base_H {
|
||||
incomingMissileDetectionSystem = 16; // Vanilla: 24
|
||||
driverCanEject = 1;
|
||||
|
||||
class Turrets: Turrets {
|
||||
class CopilotTurret: CopilotTurret {
|
||||
canEject = 1;
|
||||
showHMD = 1;
|
||||
};
|
||||
|
||||
class MainTurret: MainTurret {
|
||||
magazines[] = {"2000Rnd_762x51_Belt_T_Red"}; // Switch gun magazine to 7.62mm from 6.5mm
|
||||
canEject = 1;
|
||||
};
|
||||
|
||||
class RightDoorGun: MainTurret {
|
||||
magazines[] = {"2000Rnd_762x51_Belt_T_Red"}; // Switch gun magazine to 7.62mm from 6.5mm
|
||||
canEject = 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class Heli_Transport_02_base_F: Helicopter_Base_H {
|
||||
incomingMissileDetectionSystem = 16; // Vanilla: 24
|
||||
driverCanEject = 1;
|
||||
|
||||
class Turrets: Turrets {
|
||||
class CopilotTurret: CopilotTurret {
|
||||
canEject = 1;
|
||||
showHMD = 1;
|
||||
};
|
||||
};
|
||||
@ -126,11 +102,9 @@ class CfgVehicles {
|
||||
class Heli_light_03_base_F: Helicopter_Base_F {
|
||||
lockDetectionSystem = 0; // Vanilla: 12
|
||||
incomingMissileDetectionSystem = 16; // Vanilla: 24
|
||||
driverCanEject = 1;
|
||||
|
||||
class Turrets: Turrets {
|
||||
class MainTurret: MainTurret {
|
||||
canEject = 1;
|
||||
showHMD = 1;
|
||||
weapons[] = {"Laserdesignator_mounted"}; // Add Laser Designator
|
||||
magazines[] = {"Laserbatteries"};
|
||||
@ -166,26 +140,8 @@ class CfgVehicles {
|
||||
|
||||
class Heli_Transport_03_base_F: Helicopter_Base_H {
|
||||
incomingMissileDetectionSystem = 16; // Vanilla: 24
|
||||
driverCanEject = 1;
|
||||
|
||||
class Turrets: Turrets {
|
||||
class CopilotTurret: CopilotTurret {
|
||||
canEject = 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
class Heli_Transport_04_base_F: Helicopter_Base_H {
|
||||
incomingMissileDetectionSystem = 16; // Vanilla: 24
|
||||
driverCanEject = 1;
|
||||
|
||||
class Turrets: Turrets {
|
||||
class CopilotTurret: CopilotTurret {
|
||||
canEject = 1;
|
||||
};
|
||||
|
||||
class LoadmasterTurret: MainTurret {
|
||||
canEject = 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -1,6 +1,5 @@
|
||||
class Heli_Attack_01_base_F: Helicopter_Base_F {
|
||||
incomingMissileDetectionSystem = 16; // Vanilla: 24
|
||||
driverCanEject = 1;
|
||||
|
||||
class Turrets: Turrets {
|
||||
class MainTurret: MainTurret {
|
||||
|
2
addons/aircraft/XEH_PREP.hpp
Normal file
2
addons/aircraft/XEH_PREP.hpp
Normal file
@ -0,0 +1,2 @@
|
||||
PREP(initEjectAction);
|
||||
PREP(canShowEject);
|
29
addons/aircraft/XEH_postInitClient.sqf
Normal file
29
addons/aircraft/XEH_postInitClient.sqf
Normal file
@ -0,0 +1,29 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
if (!hasInterface) exitWith {};
|
||||
|
||||
private _cfgAction = configFile >> "CfgActions" >> "Eject";
|
||||
GVAR(ejectActionParams) = [
|
||||
[
|
||||
"", // will be set with setUserActionText
|
||||
{
|
||||
params ["_vehicle", "_unit"];
|
||||
private _preserveEngineOn = (_unit == driver _vehicle) && {isEngineOn _vehicle};
|
||||
moveOut _unit;
|
||||
if (_preserveEngineOn) then {
|
||||
// vehicle is local to last driver, no need to care
|
||||
_vehicle engineOn true;
|
||||
};
|
||||
},
|
||||
nil,
|
||||
getNumber (_cfgAction >> "priority"),
|
||||
false,
|
||||
true,
|
||||
getText (_cfgAction >> "shortcut"),
|
||||
'[_this, _target] call DFUNC(canShowEject)'
|
||||
],
|
||||
getText (_cfgAction >> "text"),
|
||||
getText (_cfgAction >> "textDefault")
|
||||
];
|
||||
|
||||
["Helicopter", "initPost", LINKFUNC(initEjectAction)] call CBA_fnc_addClassEventHandler;
|
9
addons/aircraft/XEH_preInit.sqf
Normal file
9
addons/aircraft/XEH_preInit.sqf
Normal file
@ -0,0 +1,9 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
ADDON = false;
|
||||
|
||||
PREP_RECOMPILE_START;
|
||||
#include "XEH_PREP.hpp"
|
||||
PREP_RECOMPILE_END;
|
||||
|
||||
ADDON = true;
|
3
addons/aircraft/XEH_preStart.sqf
Normal file
3
addons/aircraft/XEH_preStart.sqf
Normal file
@ -0,0 +1,3 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
#include "XEH_PREP.hpp"
|
@ -18,6 +18,7 @@ class CfgPatches {
|
||||
};
|
||||
|
||||
#include "CfgAmmo.hpp"
|
||||
#include "CfgEventHandlers.hpp"
|
||||
#include "CfgMagazines.hpp"
|
||||
#include "CfgVehicles.hpp"
|
||||
#include "CfgWeapons.hpp"
|
||||
|
34
addons/aircraft/functions/fnc_canShowEject.sqf
Normal file
34
addons/aircraft/functions/fnc_canShowEject.sqf
Normal file
@ -0,0 +1,34 @@
|
||||
/*
|
||||
* Author: Dystopian
|
||||
* Check if Eject action can be shown.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Unit who calls action <OBJECT>
|
||||
* 1: Vehicle which action is attached to <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* Can show <BOOL>
|
||||
*
|
||||
* Example:
|
||||
* [player, vehicle player] call ace_aircraft_fnc_canShowEject
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
#define FULLCREW_UNIT 0
|
||||
#define FULLCREW_ROLE 1
|
||||
#define FULLCREW_TURRETPATH 3
|
||||
|
||||
params ["_unit", "_vehicle"];
|
||||
|
||||
_vehicle == vehicle _unit
|
||||
&& {
|
||||
private _ejectVarName = "";
|
||||
{
|
||||
if (_unit == _x select FULLCREW_UNIT) exitWith {
|
||||
_ejectVarName = format [QGVAR(ejectAction_%1_%2), _x select FULLCREW_ROLE, _x select FULLCREW_TURRETPATH];
|
||||
};
|
||||
} count fullCrew _vehicle;
|
||||
_vehicle getVariable [_ejectVarName, false]
|
||||
}
|
48
addons/aircraft/functions/fnc_initEjectAction.sqf
Normal file
48
addons/aircraft/functions/fnc_initEjectAction.sqf
Normal file
@ -0,0 +1,48 @@
|
||||
/*
|
||||
* Author: Dystopian
|
||||
* Add Eject action to vehicle if needed.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Vehicle <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* [cursorObject] call ace_aircraft_fnc_initEjectAction
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["_vehicle"];
|
||||
|
||||
if (unitIsUAV _vehicle) exitWith {};
|
||||
|
||||
private _config = configFile >> "CfgVehicles" >> typeOf _vehicle;
|
||||
|
||||
private _addAction = false;
|
||||
|
||||
if (0 == getNumber (_config >> "driverCanEject")) then {
|
||||
TRACE_2("eject action",typeOf _vehicle,"driver");
|
||||
_vehicle setVariable [QGVAR(ejectAction_driver_[]), true];
|
||||
_addAction = true;
|
||||
};
|
||||
|
||||
{
|
||||
{
|
||||
_x params ["", "_role", "", "_turretPath"];
|
||||
if (0 == getNumber (([_config, _turretPath] call CBA_fnc_getTurret) >> "canEject")) then {
|
||||
TRACE_2("eject action",typeOf _vehicle,_turretPath);
|
||||
_vehicle setVariable [format [QGVAR(ejectAction_%1_%2), _role, _turretPath], true];
|
||||
_addAction = true;
|
||||
};
|
||||
} forEach fullCrew [_vehicle, _x, true];
|
||||
} forEach ["gunner", "commander", "turret"];
|
||||
|
||||
if (!_addAction) exitWith {};
|
||||
|
||||
GVAR(ejectActionParams) params ["_params", "_text", "_picture"];
|
||||
private _actionID = _vehicle addAction _params;
|
||||
_vehicle setUserActionText [_actionID, _text, "", _picture];
|
||||
_vehicle setVariable [QGVAR(ejectAction), _actionID];
|
1
addons/aircraft/functions/script_component.hpp
Normal file
1
addons/aircraft/functions/script_component.hpp
Normal file
@ -0,0 +1 @@
|
||||
#include "\z\ace\addons\aircraft\script_component.hpp"
|
Loading…
Reference in New Issue
Block a user