made it work

This commit is contained in:
Sotirios Pupakis
2024-04-24 17:34:14 +02:00
parent 153f9ab60d
commit 5ef667852a
14 changed files with 332 additions and 2 deletions

View File

@@ -9,3 +9,7 @@ PREP(fold);
PREP(unfold);
PREP(fired);
PREP(eject);
PREP(canLoad);
PREP(canUnload);
PREP(load);
PREP(unload);

View File

@@ -6,3 +6,18 @@
[QUOTE(TBD_M119), "fired", {_this call FUNC(fired)}] call CBA_fnc_addClassEventHandler;
ADDON = true;
[
QGVAR(loadShell),
{
params ["_arty", "_shell", "_turret"];
// Remove all mags in given turret
private _mags = _arty magazinesTurret [_turret];
{
_arty removeMagazineTurret [_x, [_turret]];
} forEach _mags;
_arty addMagazineTurret [_shell, [_turret], 1];
}
] call CBA_fnc_addEventHandler;

View File

@@ -0,0 +1,44 @@
/*
FILE: fnc_canLoad.sqf
Name: tbd_m119_m119_fnc_canLoad
Author(s):
ilbinek
Description:
Check if the M119 can be loaded with this type of round
Parameters:
_arty - object - M119 to be loaded
_shell - string - type of round to be loaded
Returns:
bool - true if the M119 can be loaded, false otherwise
Examples:
> [_arty, tbd_mortars_105mm_he_round_1] call tbd_m119_m119_fnc_canLoad;
Public:
No
*/
#include "..\script_component.hpp"
params ["_arty", "_shell"];
if !(_arty getVariable[QGVAR(breech), false]) exitWith {false};
// Check of the mortar is empty
private _mags = _arty magazinesTurret [0];
if (count _mags != 0) exitWith {false};
// Check if this shell is nearby
private _veh = nearestObjects [player, [_shell], 3];
private _ret = false;
{
if (typeOf _x == _shell) exitWith {_ret = true;};
} forEach _veh;
_ret

View File

@@ -0,0 +1,34 @@
/*
FILE: fnc_canUnload.sqf
Name: tbd_m119_m119_fnc_canUnload
Author(s):
ilbinek
Description:
Check if the M119 can be unloaded
Parameters:
_arty - object - M119 to be checked
Returns:
bool - true if the M119 can be unloaded, false otherwise
Examples:
> [_arty] call tbd_m119_m119_fnc_canUnload;
Public:
No
*/
#include "..\script_component.hpp"
params ["_arty"];
if !(_arty getVariable[QGVAR(breech), false]) exitWith {false};
// Check of the mortar is empty
private _mags = _arty magazinesTurret [0];
if (count _mags == 0) exitWith {false};
true

View File

@@ -26,3 +26,18 @@
params ["_arty"];
// tbd_mortars_105mm_casing_spent
private _spawnPoint = _arty modelToWorldVisual (_arty selectionPosition ["casing_spawn", "Memory"]);
private _dirAndUp = _arty selectionVectorDirAndUp ["casing_spawn", "Memory"];
_dirAndUp set [0, _arty vectorModelToWorld _dirAndUp#0];
_dirAndUp set [1, _arty vectorModelToWorld _dirAndUp#1];
// Spawn a new magazine at this position
private _casing = createVehicle ["tbd_mortars_105mm_casing_spent", _spawnPoint, [], 0, "CAN_COLLIDE"];
_casing setVectorDirAndUp _dirAndUp;
_casing allowDamage false;
// Add vertical force to the magazine
[{params ["_casing"]; _casing addForce [_casing vectorModelToWorld [0, -100, 0], [0, 0, 0]];}, [_casing]] call CBA_fnc_execNextFrame;

View File

@@ -32,3 +32,11 @@ _arty animateSource ["recoil_barrel_source", 2, 20];
[{params ["_arty"]; _arty animateSource ["recoil_rest_source", 0, 0.2];}, [_arty], 0.1] call CBA_fnc_waitAndExecute;
_arty setVariable [QGVAR(fired), true, true];
private _mags = _arty magazinesTurret [0];
{
_arty removeMagazinesTurret [_x, [0]];
} forEach _mags;
_arty animateSource ["magazine_hide_source", 1, true];
_arty animateSource ["magazine_load_source", 0, true];

View File

@@ -34,3 +34,14 @@ _arty setVariable [QGVAR(towed), false, true];
_arty setVariable [QGVAR(fired), false, true];
_arty enableRopeAttach true;
_arty addAction [
"",
{},
nil,
-1e10,
false,
false,
"defaultAction",
'_target getVariable [(QGVAR(breech)),false]'
];

View File

@@ -0,0 +1,55 @@
/*
FILE: fnc_load.sqf
Name: tbd_m119_m119_fnc_load
Author(s):
ilbinek
Description:
Load the round into the M119
Parameters:
_arty - object - M119 to be loaded
_shell - string - type of round to be loaded
_turret - number - path to turret
Returns:
Nothing
Examples:
> [_arty, tbd_mortars_105mm_he_round_1, 0] call tbd_m119_m119_fnc_load;
Public:
No
*/
#include "..\script_component.hpp"
params ["_arty", "_shell", "_turret"];
if !([_arty, _shell] call FUNC(canLoad)) exitWith {};
private _mag = "";
switch (_shell) do {
case QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_1): {_mag = QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_MAG_1)};
case QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_2): {_mag = QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_MAG_2)};
case QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_3): {_mag = QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_MAG_3)};
case QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_4): {_mag = QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_MAG_4)};
case QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_5): {_mag = QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_MAG_5)};
case QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_6): {_mag = QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_MAG_6)};
case QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_7): {_mag = QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_MAG_7)};
};
[QGVAR(loadShell), [_arty, _mag, _turret], _arty, [-1]] call CBA_fnc_turretEvent;
// Delete closest
private _veh = nearestObjects [player, [_shell], 3];
{
if (typeOf _x == _shell) exitWith {deleteVehicle _x};
} forEach _veh;
_arty animateSource ["magazine_load_source", 0, true];
_arty animateSource ["magazine_hide_source", 0, true];
_arty animateSource ["magazine_load_source", 0.36, 0.2];

View File

@@ -0,0 +1,52 @@
/*
FILE: fnc_unload.sqf
Name: tbd_m119_m119_fnc_unload
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:
_arty - object - M119 that fired
Returns:
Nothing
Examples:
> [_arty] call tbd_m119_m119_fnc_unload;
Public:
No
*/
#include "..\script_component.hpp"
params ["_arty", "_turret"];
if !([_arty] call FUNC(canUnload)) exitWith {};
private _mags = _arty magazinesTurret [_turret];
{
_arty removeMagazinesTurret [_x, [_turret]];
} forEach _mags;
private _veh = "";
switch (_mags#0) do {
case QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_MAG_1): {_veh = QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_1)};
case QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_MAG_2): {_veh = QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_2)};
case QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_MAG_3): {_veh = QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_3)};
case QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_MAG_4): {_veh = QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_4)};
case QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_MAG_5): {_veh = QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_5)};
case QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_MAG_6): {_veh = QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_6)};
case QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_MAG_7): {_veh = QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_7)};
};
_arty animateSource ["magazine_hide_source", 1];
_arty animateSource ["magazine_load_source", 0];
private _s = _veh createVehicle (getPos player);
[player, _s] call ace_dragging_fnc_startCarry;

View File

@@ -23,6 +23,14 @@
#define TBD_M119_SHOT_SOUNDSET tbd_m119_shot_soundset
#define TBD_M119_SHOT_SOUNDSHADER tbd_M119_shot_soundshader
#define TBD_MORTARS_105mm_ROUND_HE_CHARGE_1 tbd_mortars_105mm_round_he_charge_1
#define TBD_MORTARS_105mm_ROUND_HE_CHARGE_2 tbd_mortars_105mm_round_he_charge_2
#define TBD_MORTARS_105mm_ROUND_HE_CHARGE_3 tbd_mortars_105mm_round_he_charge_3
#define TBD_MORTARS_105mm_ROUND_HE_CHARGE_4 tbd_mortars_105mm_round_he_charge_4
#define TBD_MORTARS_105mm_ROUND_HE_CHARGE_5 tbd_mortars_105mm_round_he_charge_5
#define TBD_MORTARS_105mm_ROUND_HE_CHARGE_6 tbd_mortars_105mm_round_he_charge_6
#define TBD_MORTARS_105mm_ROUND_HE_CHARGE_7 tbd_mortars_105mm_round_he_charge_7
#define TBD_MORTARS_105mm_ROUND_HE_CHARGE_MAG_1 tbd_mortars_105mm_round_he_charge_mag_1
#define TBD_MORTARS_105mm_ROUND_HE_CHARGE_MAG_2 tbd_mortars_105mm_round_he_charge_mag_2
#define TBD_MORTARS_105mm_ROUND_HE_CHARGE_MAG_3 tbd_mortars_105mm_round_he_charge_mag_3

View File

@@ -21,5 +21,13 @@
<English>Unfold</English>
<Czech>Rozložit</Czech>
</Key>
<Key ID="STR_TBD_M119_M119_LOAD">
<English>Load</English>
<Czech>Nabít</Czech>
</Key>
<Key ID="STR_TBD_M119_M119_UNLOAD">
<English>Unload</English>
<Czech>Vybít</Czech>
</Key>
</Package>
</Project>

View File

@@ -94,7 +94,7 @@ class CfgVehicles {
memoryPointsGetInGunnerDir = "pos_gunner_dir";
proxyType = "CPGunner";
proxyIndex = 1;
magazines[] = {QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_MAG_4),QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_MAG_4),QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_MAG_4),QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_MAG_4),QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_MAG_4),QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_MAG_4),QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_MAG_4)};
magazines[] = {};
};
};
htMin = 1;
@@ -261,6 +261,82 @@ class CfgVehicles {
displayName = CSTRING(close_breech);
statement = QUOTE([ARR_1(_target)] call FUNC(closeBreech));
};
class TBD_Load {
isplayName = CSTRING(load);
distance = 1.5;
showDisabled=0;
exceptions[]={};
priority=5;
selection = "casing_spawn";
icon = "x\tbd_mortars\addons\main\data\load.paa";
class TBD_LoadHECh1 {
displayName = "$STR_TBD_MORTARS_105mm_HE_CHARGE_1";
condition = QUOTE([ARR_2(_target,QUOTE(QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_1)))] call FUNC(canLoad));
statement = QUOTE([ARR_3(_target,QUOTE(QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_1)),0)] call FUNC(load));
showDisabled = 0;
exceptions[] = {};
};
class TBD_LoadHECh2 {
displayName = "$STR_TBD_MORTARS_105mm_HE_CHARGE_2";
condition = QUOTE([ARR_2(_target,QUOTE(QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_2)))] call FUNC(canLoad));
statement = QUOTE([ARR_3(_target,QUOTE(QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_2)),0)] call FUNC(load));
showDisabled = 0;
exceptions[] = {};
};
class TBD_LoadHECh3 {
displayName = "$STR_TBD_MORTARS_105mm_HE_CHARGE_3";
condition = QUOTE([ARR_2(_target,QUOTE(QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_3)))] call FUNC(canLoad));
statement = QUOTE([ARR_3(_target,QUOTE(QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_3)),0)] call FUNC(load));
showDisabled = 0;
exceptions[] = {};
};
class TBD_LoadHECh4 {
displayName = "$STR_TBD_MORTARS_105mm_HE_CHARGE_4";
condition = QUOTE([ARR_2(_target,QUOTE(QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_4)))] call FUNC(canLoad));
statement = QUOTE([ARR_3(_target,QUOTE(QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_4)),0)] call FUNC(load));
showDisabled = 0;
exceptions[] = {};
};
class TBD_LoadHECh5 {
displayName = "$STR_TBD_MORTARS_105mm_HE_CHARGE_5";
condition = QUOTE([ARR_2(_target,QUOTE(QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_5)))] call FUNC(canLoad));
statement = QUOTE([ARR_3(_target,QUOTE(QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_5)),0)] call FUNC(load));
showDisabled = 0;
exceptions[] = {};
};
class TBD_LoadHECh6 {
displayName = "$STR_TBD_MORTARS_105mm_HE_CHARGE_6";
condition = QUOTE([ARR_2(_target,QUOTE(QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_6)))] call FUNC(canLoad));
statement = QUOTE([ARR_3(_target,QUOTE(QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_6)),0)] call FUNC(load));
showDisabled = 0;
exceptions[] = {};
};
class TBD_LoadHECh7 {
displayName = "$STR_TBD_MORTARS_105mm_HE_CHARGE_7";
condition = QUOTE([ARR_2(_target,QUOTE(QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_7)))] call FUNC(canLoad));
statement = QUOTE([ARR_3(_target,QUOTE(QUOTE(TBD_MORTARS_105mm_ROUND_HE_CHARGE_7)),0)] call FUNC(load));
showDisabled = 0;
exceptions[] = {};
};
};
class TBD_Unload {
selection = "casing_spawn";
distance = 1.5;
showDisabled = 0;
displayName = CSTRING(unload);
condition = QUOTE([ARR_1(_target)] call FUNC(canUnload));
statement = QUOTE([ARR_2(_target,0)] call FUNC(unload));
icon = "x\tbd_mortars\addons\main\data\unload.paa";
};
};
};
};

Binary file not shown.