Somehow LG and DPICM works
This commit is contained in:
Binary file not shown.
@@ -18,3 +18,5 @@ PREP(tow);
|
|||||||
PREP(detach);
|
PREP(detach);
|
||||||
PREP(rotateLeft);
|
PREP(rotateLeft);
|
||||||
PREP(rotateRight);
|
PREP(rotateRight);
|
||||||
|
PREP(projectileHeightCheck);
|
||||||
|
PREP(handleLGShell);
|
||||||
|
|||||||
@@ -46,34 +46,15 @@ if (!isServer) exitWith {};
|
|||||||
|
|
||||||
// "Temp" fix for cluster and laser guided because BI?
|
// "Temp" fix for cluster and laser guided because BI?
|
||||||
if (_ammo in ["tbd_mortars_105mm_shell_ammo_dpicm", "tbd_mortars_105mm_shell_ammo_laser"]) then {
|
if (_ammo in ["tbd_mortars_105mm_shell_ammo_dpicm", "tbd_mortars_105mm_shell_ammo_laser"]) then {
|
||||||
private _alt = [200, 600] select (_ammo isEqualTo "tbd_mortars_105mm_shell_ammo_laser");
|
if (_ammo isEqualTo "tbd_mortars_105mm_shell_ammo_dpicm") then {
|
||||||
systemChat format ["%1", _alt];
|
|
||||||
// wait 5 seconds to let the ammo get high enough
|
|
||||||
[{
|
[{
|
||||||
params ["_projectile", "_alt"];
|
params ["_projectile"];
|
||||||
if (isNull _projectile) exitWith {};
|
|
||||||
// Check the height of the projectile
|
|
||||||
private _pos = getPosATL _projectile;
|
|
||||||
if (_pos select 2 < _alt) exitWith {};
|
|
||||||
|
|
||||||
// Start a PFH that will
|
|
||||||
[{
|
|
||||||
params ["_args", "_handle"];
|
|
||||||
_args params ["_projectile", "_alt"];
|
|
||||||
if (isNull _projectile) exitWith {
|
|
||||||
[_handle] call CBA_fnc_removePerFrameHandler;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Check the height of the projectile
|
|
||||||
private _pos = getPosATL _projectile;
|
|
||||||
systemChat format ["%1", _pos select 2];
|
|
||||||
if (_pos select 2 < _alt) exitWith {
|
|
||||||
// Trigger the ammo
|
|
||||||
triggerAmmo _projectile;
|
triggerAmmo _projectile;
|
||||||
[_handle] call CBA_fnc_removePerFrameHandler;
|
|
||||||
};
|
|
||||||
},
|
},
|
||||||
0,
|
[_projectile],
|
||||||
[_projectile, _alt]] call CBA_fnc_addPerFrameHandler;
|
_arty getVariable [QGVAR(DPICM_FUSE_TIMER), 99999]] call CBA_fnc_waitAndExecute;
|
||||||
}, [_projectile, _alt], 5] call CBA_fnc_waitAndExecute;
|
} else {
|
||||||
|
// Start projectile height check
|
||||||
|
[_projectile, _arty getVariable [QGVAR(LASER_CODE), 1111]] call FUNC(projectileHeightCheck);
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
71
addons/m119/functions/fnc_handleLGShell.sqf
Normal file
71
addons/m119/functions/fnc_handleLGShell.sqf
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
/*
|
||||||
|
FILE: fnc_handleLGShell.sqf
|
||||||
|
|
||||||
|
Name: tbd_m119_m119_fnc_handleLGShell
|
||||||
|
|
||||||
|
Author(s):
|
||||||
|
ilbinek
|
||||||
|
|
||||||
|
Description:
|
||||||
|
Handles the LG shell fired - pretty much a workaround for the fact that Arma is bad game
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
_arty - object - M119 that fired
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Nothing
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
> [_arty] call tbd_m119_m119_fnc_handleLGShell;
|
||||||
|
|
||||||
|
Public:
|
||||||
|
No
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
|
params ["_projectile", "_laserCode"];
|
||||||
|
|
||||||
|
private _laserMaxDetectionrange = 1000;
|
||||||
|
private _laserWavelength = [1550, 1550];
|
||||||
|
private _seekerCone = 20;
|
||||||
|
|
||||||
|
// Create PFH that handles all the guiding
|
||||||
|
[{
|
||||||
|
params ["_args", "_handle"];
|
||||||
|
_args params ["_projectile", "_laserCode", "_laserMaxDetectionrange", "_laserWavelength", "_seekerCone"];
|
||||||
|
|
||||||
|
if (!alive _projectile) exitWith {
|
||||||
|
[_handle] call CBA_fnc_removePerFrameHandler;
|
||||||
|
};
|
||||||
|
|
||||||
|
private _result = [
|
||||||
|
getPosASL _projectile,
|
||||||
|
vectorDir _projectile,
|
||||||
|
_seekerCone,
|
||||||
|
_laserMaxDetectionrange,
|
||||||
|
_laserWavelength,
|
||||||
|
_laserCode,
|
||||||
|
_projectile
|
||||||
|
] call ace_laser_fnc_seekerFindLaserSpot;
|
||||||
|
|
||||||
|
// Get the ASL position of the spot
|
||||||
|
private _spot = _result#0;
|
||||||
|
|
||||||
|
if (isNil "_spot") exitWith {};
|
||||||
|
|
||||||
|
private _frameTime = diag_deltaTime;
|
||||||
|
private _position = getPosASL _projectile;
|
||||||
|
(_projectile call BIS_fnc_getPitchBank) params ["_pitch", "_bank"];
|
||||||
|
private _vectToTarget = _position vectorFromTo _spot;
|
||||||
|
private _vectToTargetDiff = _vectToTarget vectorDiff (vectorNormalized (velocity _projectile));
|
||||||
|
private _vectorModelSpace = _projectile vectorWorldToModel _vectToTargetDiff;
|
||||||
|
private _angleX = asin (_vectorModelSpace # 0);
|
||||||
|
private _angleY = asin (_vectorModelSpace # 2);
|
||||||
|
|
||||||
|
private _turnRate = 24 * _frameTime; // turn rate is dependant on projectile velocity
|
||||||
|
_projectile setDir (getDir _projectile) + (_angleX min _turnRate max - _turnRate);
|
||||||
|
[_projectile, _pitch + (_angleY min _turnRate max -_turnRate), 0] call BIS_fnc_setPitchBank;
|
||||||
|
},
|
||||||
|
0,
|
||||||
|
[_projectile, _laserCode, _laserMaxDetectionrange, _laserWavelength, _seekerCone]] call CBA_fnc_addPerFrameHandler;
|
||||||
@@ -71,7 +71,17 @@ switch (_shell) do {
|
|||||||
// Delete closest
|
// Delete closest
|
||||||
private _veh = nearestObjects [player, [_shell], 3];
|
private _veh = nearestObjects [player, [_shell], 3];
|
||||||
{
|
{
|
||||||
if (typeOf _x == _shell) exitWith {deleteVehicle _x};
|
if (typeOf _x == _shell) exitWith {
|
||||||
|
if (_x isKindOf QUOTE(TBD_MORTARS_105mm_ROUND_DPICM_CHARGE_1)) then {
|
||||||
|
private _timer = _x getVariable ["tbd_mortars_105mm_dpicm_fuse_timer", 99999];
|
||||||
|
_arty setVariable [QGVAR(DPICM_FUSE_TIMER), _timer, true];
|
||||||
|
};
|
||||||
|
if (_x isKindOf QUOTE(TBD_MORTARS_105mm_ROUND_LASER_CHARGE_1)) then {
|
||||||
|
private _code = _x getVariable ["tbd_mortars_105mm_laser_code", 1111];
|
||||||
|
_arty setVariable [QGVAR(LASER_CODE), _code, true];
|
||||||
|
};
|
||||||
|
deleteVehicle _x
|
||||||
|
};
|
||||||
} forEach _veh;
|
} forEach _veh;
|
||||||
|
|
||||||
if ("laser" in _shell) exitWith {
|
if ("laser" in _shell) exitWith {
|
||||||
@@ -94,3 +104,7 @@ if ("dpicm" in _shell) exitWith {
|
|||||||
_arty animateSource ["magazine_load_source", 0, true];
|
_arty animateSource ["magazine_load_source", 0, true];
|
||||||
_arty animateSource ["magazine_hide_source", 0, true];
|
_arty animateSource ["magazine_hide_source", 0, true];
|
||||||
_arty animateSource ["magazine_load_source", 0.36, 0.2];
|
_arty animateSource ["magazine_load_source", 0.36, 0.2];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
["cba_xeh_deleted","ace_dragging_candrag","ace_common_effect_blockdamage","ace_interact_menu_atcache_ace_mainactions","cba_xeh_incomingmissile","cba_xeh_getin","ace_dragging_carryposition","ace_dragging_originalmass","ace_common_statuseffect_object","ace_dragging_carrydirection_temp","cba_xeh_local","cba_xeh_isprocessed","cba_xeh_init","cba_xeh_initpost","cba_xeh_fired","ace_dragging_dragposition","cba_xeh_engine","cba_xeh_respawn","ace_dragging_dragdirection","ace_dragging_cancarry","ace_interact_menu_atcache_ace_dragging_drop","ace_common_lockstatus","cba_xeh_killed","ace_dragging_carrydirection","ace_interact_menu_atcache_ace_dragging_drop_carry","cba_xeh_getout","cba_xeh_isinitialized","ace_dragging_ignoreweightdrag","ace_common_owner","tbd_mortars_105mm_dpicm_fuse_timer","ace_dragging_ignoreweightcarry"]
|
||||||
47
addons/m119/functions/fnc_projectileHeightCheck.sqf
Normal file
47
addons/m119/functions/fnc_projectileHeightCheck.sqf
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
/*
|
||||||
|
FILE: fnc_projectileHeightCheck.sqf.sqf
|
||||||
|
|
||||||
|
Name: tbd_m119_m119_fnc_projectileHeightCheck.sqf
|
||||||
|
|
||||||
|
Author(s):
|
||||||
|
ilbinek
|
||||||
|
|
||||||
|
Description:
|
||||||
|
Fired EH for the M119. This script is called when the M119 is fired. It animates the recoil of the M119.
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
_projectile - object - The projectile
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Nothing
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
> [_projectile] call tbd_m119_m119_fnc_projectileHeightCheck.sqf;
|
||||||
|
|
||||||
|
Public:
|
||||||
|
No
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
|
params ["_projectile", "_laserCode"];
|
||||||
|
GVAR(projectileHeightCheck) = 0;
|
||||||
|
[{
|
||||||
|
params ["_args", "_handle"];
|
||||||
|
_args params ["_projectile", "_laserCode"];
|
||||||
|
|
||||||
|
if (isNull _projectile) exitWith {
|
||||||
|
[_handle] call CBA_fnc_removePerFrameHandler;
|
||||||
|
};
|
||||||
|
|
||||||
|
private _pos = getPosASL _projectile;
|
||||||
|
private _height = _pos select 2;
|
||||||
|
if (_height < GVAR(projectileHeightCheck)) then {
|
||||||
|
[_projectile, _laserCode] call FUNC(handleLGShell);
|
||||||
|
[_handle] call CBA_fnc_removePerFrameHandler;
|
||||||
|
};
|
||||||
|
|
||||||
|
GVAR(projectileHeightCheck) = _height;
|
||||||
|
},
|
||||||
|
0,
|
||||||
|
[_projectile, _laserCode]] call CBA_fnc_addPerFrameHandler;
|
||||||
Reference in New Issue
Block a user