Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8db7cc34a3 | |||
| fde3cb4b4a | |||
| 3c59733c8a |
@@ -8,3 +8,7 @@ env*
|
||||
*.vscode*
|
||||
dist/
|
||||
.ci-cache/
|
||||
docs/superpowers/plans/2026-07-15-generic-efs-function-plan.md
|
||||
docs/superpowers/plans/2026-07-18-generic-hoist-function-plan.md
|
||||
docs/superpowers/plans/2026-07-19-caracal-mb-efs.md
|
||||
tests/test_caracal_mb_efs.ps1
|
||||
|
||||
@@ -1,5 +1,18 @@
|
||||
# Changelog
|
||||
|
||||
## 2026-07-19
|
||||
|
||||
### Aeronaves
|
||||
|
||||
- As versões navais MB do Caracal agora contam com EFS (Emergency Floating System), incluindo acionamento, desacionamento e deploy das boias de emergência para pouso na água.
|
||||
- As versões FAB do Caracal (Fast Rope, SAR e Transport) também passaram a contar com EFS para operações de pouso na água.
|
||||
- Corrigida a flutuação nativa do Caracal: a named property `autocenter=0` foi removida do Geometry LOD, permitindo que o volume de buoyancy seja reconhecido corretamente pelo Arma 3.
|
||||
- As versões SAR e Offshore do Pantera também foram integradas ao EFS, com acionamento e deploy das boias de emergência para operações de pouso na água.
|
||||
|
||||
### Resgate SAR
|
||||
|
||||
- Os scripts de EFS e do guincho SAR foram convertidos em funções registradas (`BRAF_fnc_efs` e `BRAF_fnc_hoist`), preservando as ações e transições de estado do Fennec, Pantera e Caracal.
|
||||
|
||||
## 2026-07-13
|
||||
|
||||
### Aeronaves
|
||||
|
||||
Binary file not shown.
@@ -317,13 +317,13 @@ class BRAF_Caracal_Base: Helicopter_Base_H
|
||||
{
|
||||
source="user";
|
||||
animPeriod=0;
|
||||
initPhase=1;
|
||||
initPhase=0;
|
||||
};
|
||||
class EFS_Hide
|
||||
{
|
||||
source="user";
|
||||
animPeriod=0;
|
||||
initPhase=1;
|
||||
initPhase=0;
|
||||
};
|
||||
class Hoist_Hide
|
||||
{
|
||||
@@ -1027,8 +1027,8 @@ class BRAF_Caracal_FFV: BRAF_Caracal_Base
|
||||
{
|
||||
animationList[]=
|
||||
{
|
||||
"EFS_Hide",1,
|
||||
"EFS_Cover_Hide",1,
|
||||
"EFS_Hide",0,
|
||||
"EFS_Cover_Hide",0,
|
||||
"Door_L_1",1,
|
||||
"Door_L_2",1,
|
||||
"Door_R_1",1,
|
||||
@@ -1215,8 +1215,8 @@ class BRAF_Caracal_2: BRAF_Caracal_Base
|
||||
editorPreview="\braf\braf_insignia\editorpreview\Air\BRAF_Caracal_2.jpg";
|
||||
animationList[]=
|
||||
{
|
||||
"EFS_Hide",1,
|
||||
"EFS_Cover_Hide",1,
|
||||
"EFS_Hide",0,
|
||||
"EFS_Cover_Hide",0,
|
||||
"SAR_Hide",0,
|
||||
"Pole_Hide",1,
|
||||
"Hoist_Hide",1,
|
||||
@@ -1235,43 +1235,43 @@ class BRAF_Caracal_2: BRAF_Caracal_Base
|
||||
priority=1;
|
||||
onlyForPlayer=0;
|
||||
condition="this animationphase 'Hoist_Hide' > 0.9 AND (player in crew this) AND this animationphase 'Door_R_1' > 0.9 AND !(""BRAF_Rescue_Seat"" in (this getVariable ['braf_hoist_spent_payloads', []]))";
|
||||
statement="[this, ""deploy"", ""BRAF_Rescue_Seat""] execVM ""braf\braf_sar\Braf_Scripts\hoist_controller.sqf""; this animate ['Hoist_Hide',-0.5]";
|
||||
statement="[this, ""deploy"", ""BRAF_Rescue_Seat""] call BRAF_fnc_hoist; this animate ['Hoist_Hide',-0.5]";
|
||||
};
|
||||
class Deploy_Rescue_Basket: Deploy_Rescue_Seat
|
||||
{
|
||||
displayname="<t color='#ffaa00'> Deploy Rescue Basket </t>";
|
||||
condition="this animationphase 'Hoist_Hide' > 0.9 AND (player in crew this) AND this animationphase 'Door_R_1' > 0.9 AND !(""BRAF_Rescue_Basket"" in (this getVariable ['braf_hoist_spent_payloads', []]))";
|
||||
statement="[this, ""deploy"", ""BRAF_Rescue_Basket""] execVM ""braf\braf_sar\Braf_Scripts\hoist_controller.sqf""; this animate ['Hoist_Hide',-0.5]";
|
||||
statement="[this, ""deploy"", ""BRAF_Rescue_Basket""] call BRAF_fnc_hoist; this animate ['Hoist_Hide',-0.5]";
|
||||
};
|
||||
class Deploy_Rescue_Stretcher: Deploy_Rescue_Seat
|
||||
{
|
||||
displayname="<t color='#ffaa00'> Deploy Rescue Stretcher </t>";
|
||||
condition="this animationphase 'Hoist_Hide' > 0.9 AND (player in crew this) AND this animationphase 'Door_R_1' > 0.9 AND !(""BRAF_Rescue_Stretcher"" in (this getVariable ['braf_hoist_spent_payloads', []]))";
|
||||
statement="[this, ""deploy"", ""BRAF_Rescue_Stretcher""] execVM ""braf\braf_sar\Braf_Scripts\hoist_controller.sqf""; this animate ['Hoist_Hide',-0.5]";
|
||||
statement="[this, ""deploy"", ""BRAF_Rescue_Stretcher""] call BRAF_fnc_hoist; this animate ['Hoist_Hide',-0.5]";
|
||||
};
|
||||
class Hoist_Down: Deploy_Rescue_Seat
|
||||
{
|
||||
displayname="<t color='#ffaa00'> Extend Cable Hook </t>";
|
||||
condition="this animationphase 'Hoist_Hide' < -0.4 AND this animationphase 'Hoist_Hide' > -0.6 AND (player in crew this) AND this animationphase 'Door_R_1' > 0.9";
|
||||
statement="[this, ""down""] execVM ""braf\braf_sar\Braf_Scripts\hoist_controller.sqf""; this animate ['Hoist_Hide',-1]; this say3d ""Winch""";
|
||||
statement="[this, ""down""] call BRAF_fnc_hoist; this animate ['Hoist_Hide',-1]; this say3d ""Winch""";
|
||||
};
|
||||
class Hoist_Up: Deploy_Rescue_Seat
|
||||
{
|
||||
displayname="<t color='#ffaa00'> Recover Cable Hook </t>";
|
||||
condition="this animationphase 'Hoist_Hide' < -0.9 AND (player in crew this) AND this animationphase 'Door_R_1' > 0.9";
|
||||
statement="[this, ""up""] execVM ""braf\braf_sar\Braf_Scripts\hoist_controller.sqf""; this animate ['Hoist_Hide',-0.5]; this say3d ""Winch""";
|
||||
statement="[this, ""up""] call BRAF_fnc_hoist; this animate ['Hoist_Hide',-0.5]; this say3d ""Winch""";
|
||||
};
|
||||
class Recover_Rescue_Seat: Deploy_Rescue_Seat
|
||||
{
|
||||
displayname="<t color='#ffaa00'> Retrieve Rescue Payload </t>";
|
||||
condition="(player in crew this) AND this animationphase 'Door_R_1' > 0.9 AND this animationphase 'Hoist_Hide' < -0.4 AND this animationphase 'Hoist_Hide' > -0.6";
|
||||
statement="[this, ""recover""] execVM ""braf\braf_sar\Braf_Scripts\hoist_controller.sqf""; this animate ['Hoist_Hide',1]";
|
||||
statement="[this, ""recover""] call BRAF_fnc_hoist; this animate ['Hoist_Hide',1]";
|
||||
};
|
||||
class Hoist_Cut: Deploy_Rescue_Seat
|
||||
{
|
||||
displayname="<t color='#b31d00'> Cut Hoist Hook Cable </t>";
|
||||
condition="(player in crew this) AND this animationphase 'Door_R_1' > 0.9 AND this animationphase 'Hoist_Hide' < 0";
|
||||
statement="[this, ""cut""] execVM ""braf\braf_sar\Braf_Scripts\hoist_controller.sqf""; this animate ['Hoist_Hide',1]";
|
||||
statement="[this, ""cut""] call BRAF_fnc_hoist; this animate ['Hoist_Hide',1]";
|
||||
};
|
||||
class Open_Door_Left
|
||||
{
|
||||
@@ -1613,8 +1613,8 @@ class BRAF_Caracal_3: BRAF_Caracal_Base
|
||||
};
|
||||
animationList[]=
|
||||
{
|
||||
"EFS_Hide",1,
|
||||
"EFS_Cover_Hide",1,
|
||||
"EFS_Hide",0,
|
||||
"EFS_Cover_Hide",0,
|
||||
"SAR_Hide",1,
|
||||
"Pole_Hide",1,
|
||||
"Hoist_Hide",0,
|
||||
@@ -1628,6 +1628,43 @@ class BRAF_Caracal_4: BRAF_Caracal_1
|
||||
author="BRAF TEAM";
|
||||
_generalMacro="BRAF_Caracal_4";
|
||||
displayName="UH-15 Super Cougar (Fast Rope)";
|
||||
canFloat=1;
|
||||
waterDamageEngine=0.2;
|
||||
waterEffect="HeliWater";
|
||||
waterLeakiness=50;
|
||||
waterPPInVehicle=1;
|
||||
waterResistance=1;
|
||||
waterResistanceCoef=0.5;
|
||||
class EventHandlers: EventHandlers
|
||||
{
|
||||
init="if (local (_this select 0)) then {[(_this select 0), """", [], false] call bis_fnc_initVehicle; [(_this select 0), ""Init""] call BRAF_fnc_efs;};";
|
||||
};
|
||||
class UserActions: UserActions
|
||||
{
|
||||
class Arm_EFS
|
||||
{
|
||||
displayname="<t color='#ffaa00'> Arm EFS </t>";
|
||||
position="window_pos";
|
||||
showWindow=1;
|
||||
radius=10;
|
||||
priority=1;
|
||||
onlyForPlayer=0;
|
||||
condition="getNumber (configOf this >> 'canFloat') == 1 AND this animationphase 'EFS_Cover_Hide' > 0.9 AND (player in crew this) AND ((this getVariable ['braf_efs_state','SAFE']) == 'SAFE')";
|
||||
statement="[this, ""arm""] call BRAF_fnc_efs";
|
||||
};
|
||||
class Disarm_EFS: Arm_EFS
|
||||
{
|
||||
displayname="<t color='#ffaa00'> Disarm EFS </t>";
|
||||
condition="getNumber (configOf this >> 'canFloat') == 1 AND this animationphase 'EFS_Cover_Hide' > 0.9 AND (player in crew this) AND ((this getVariable ['braf_efs_state','ARMED']) == 'ARMED')";
|
||||
statement="[this, ""disarm""] call BRAF_fnc_efs";
|
||||
};
|
||||
class Deploy_Floats: Arm_EFS
|
||||
{
|
||||
displayname="<t color='#b31d00'> Deploy Floats </t>";
|
||||
condition="getNumber (configOf this >> 'canFloat') == 1 AND this animationphase 'EFS_Cover_Hide' > 0.9 AND (player in crew this) AND ((this getVariable ['braf_efs_state','ARMED']) == 'ARMED')";
|
||||
statement="[this, ""deployfloats""] call BRAF_fnc_efs";
|
||||
};
|
||||
};
|
||||
editorPreview="\braf\braf_insignia\editorpreview\air\BRAF_Caracal_4.jpg";
|
||||
faction="BRAF_NAVY";
|
||||
crew="braf_characters_aviation_navy_pilot";
|
||||
@@ -1648,8 +1685,8 @@ class BRAF_Caracal_4: BRAF_Caracal_1
|
||||
};
|
||||
animationList[]=
|
||||
{
|
||||
"EFS_Hide",1,
|
||||
"EFS_Cover_Hide",0,
|
||||
"EFS_Hide",0,
|
||||
"EFS_Cover_Hide",1,
|
||||
"Door_L_1",1,
|
||||
"Door_L_2",1,
|
||||
"Door_R_1",1,
|
||||
@@ -1670,10 +1707,47 @@ class BRAF_Caracal_5: BRAF_Caracal_2
|
||||
editorPreview="\braf\braf_insignia\editorpreview\air\BRAF_Caracal_5.jpg";
|
||||
faction="BRAF_NAVY";
|
||||
crew="braf_characters_aviation_navy_pilot";
|
||||
canFloat=1;
|
||||
waterDamageEngine=0.2;
|
||||
waterEffect="HeliWater";
|
||||
waterLeakiness=50;
|
||||
waterPPInVehicle=1;
|
||||
waterResistance=1;
|
||||
waterResistanceCoef=0.5;
|
||||
class EventHandlers: EventHandlers
|
||||
{
|
||||
init="if (local (_this select 0)) then {[(_this select 0), """", [], false] call bis_fnc_initVehicle; [(_this select 0), ""Init""] call BRAF_fnc_efs;};";
|
||||
};
|
||||
class UserActions: UserActions
|
||||
{
|
||||
class Arm_EFS
|
||||
{
|
||||
displayname="<t color='#ffaa00'> Arm EFS </t>";
|
||||
position="window_pos";
|
||||
showWindow=1;
|
||||
radius=10;
|
||||
priority=1;
|
||||
onlyForPlayer=0;
|
||||
condition="getNumber (configOf this >> 'canFloat') == 1 AND this animationphase 'EFS_Cover_Hide' > 0.9 AND (player in crew this) AND ((this getVariable ['braf_efs_state','SAFE']) == 'SAFE')";
|
||||
statement="[this, ""arm""] call BRAF_fnc_efs";
|
||||
};
|
||||
class Disarm_EFS: Arm_EFS
|
||||
{
|
||||
displayname="<t color='#ffaa00'> Disarm EFS </t>";
|
||||
condition="getNumber (configOf this >> 'canFloat') == 1 AND this animationphase 'EFS_Cover_Hide' > 0.9 AND (player in crew this) AND ((this getVariable ['braf_efs_state','ARMED']) == 'ARMED')";
|
||||
statement="[this, ""disarm""] call BRAF_fnc_efs";
|
||||
};
|
||||
class Deploy_Floats: Arm_EFS
|
||||
{
|
||||
displayname="<t color='#b31d00'> Deploy Floats </t>";
|
||||
condition="getNumber (configOf this >> 'canFloat') == 1 AND this animationphase 'EFS_Cover_Hide' > 0.9 AND (player in crew this) AND ((this getVariable ['braf_efs_state','ARMED']) == 'ARMED')";
|
||||
statement="[this, ""deployfloats""] call BRAF_fnc_efs";
|
||||
};
|
||||
};
|
||||
animationList[]=
|
||||
{
|
||||
"EFS_Hide",1,
|
||||
"EFS_Cover_Hide",0,
|
||||
"EFS_Hide",0,
|
||||
"EFS_Cover_Hide",1,
|
||||
"SAR_Hide",0,
|
||||
"Pole_Hide",1,
|
||||
"Hoist_Hide",1,
|
||||
@@ -1705,10 +1779,47 @@ class BRAF_Caracal_6: BRAF_Caracal_3
|
||||
editorPreview="\braf\braf_insignia\editorpreview\air\BRAF_Caracal_6.jpg";
|
||||
faction="BRAF_NAVY";
|
||||
crew="braf_characters_aviation_navy_pilot";
|
||||
canFloat=1;
|
||||
waterDamageEngine=0.2;
|
||||
waterEffect="HeliWater";
|
||||
waterLeakiness=50;
|
||||
waterPPInVehicle=1;
|
||||
waterResistance=1;
|
||||
waterResistanceCoef=0.5;
|
||||
class EventHandlers: EventHandlers
|
||||
{
|
||||
init="if (local (_this select 0)) then {[(_this select 0), """", [], false] call bis_fnc_initVehicle; [(_this select 0), ""Init""] call BRAF_fnc_efs;};";
|
||||
};
|
||||
class UserActions: UserActions
|
||||
{
|
||||
class Arm_EFS
|
||||
{
|
||||
displayname="<t color='#ffaa00'> Arm EFS </t>";
|
||||
position="window_pos";
|
||||
showWindow=1;
|
||||
radius=10;
|
||||
priority=1;
|
||||
onlyForPlayer=0;
|
||||
condition="getNumber (configOf this >> 'canFloat') == 1 AND this animationphase 'EFS_Cover_Hide' > 0.9 AND (player in crew this) AND ((this getVariable ['braf_efs_state','SAFE']) == 'SAFE')";
|
||||
statement="[this, ""arm""] call BRAF_fnc_efs";
|
||||
};
|
||||
class Disarm_EFS: Arm_EFS
|
||||
{
|
||||
displayname="<t color='#ffaa00'> Disarm EFS </t>";
|
||||
condition="getNumber (configOf this >> 'canFloat') == 1 AND this animationphase 'EFS_Cover_Hide' > 0.9 AND (player in crew this) AND ((this getVariable ['braf_efs_state','ARMED']) == 'ARMED')";
|
||||
statement="[this, ""disarm""] call BRAF_fnc_efs";
|
||||
};
|
||||
class Deploy_Floats: Arm_EFS
|
||||
{
|
||||
displayname="<t color='#b31d00'> Deploy Floats </t>";
|
||||
condition="getNumber (configOf this >> 'canFloat') == 1 AND this animationphase 'EFS_Cover_Hide' > 0.9 AND (player in crew this) AND ((this getVariable ['braf_efs_state','ARMED']) == 'ARMED')";
|
||||
statement="[this, ""deployfloats""] call BRAF_fnc_efs";
|
||||
};
|
||||
};
|
||||
animationList[]=
|
||||
{
|
||||
"EFS_Hide",1,
|
||||
"EFS_Cover_Hide",0,
|
||||
"EFS_Hide",0,
|
||||
"EFS_Cover_Hide",1,
|
||||
"SAR_Hide",1,
|
||||
"Pole_Hide",1,
|
||||
"Hoist_Hide",0,
|
||||
@@ -1762,10 +1873,47 @@ class BRAF_Caracal_7: BRAF_Caracal_1
|
||||
editorPreview="\braf\braf_insignia\editorpreview\air\BRAF_Caracal_7.jpg";
|
||||
faction="BRAF_FAB";
|
||||
crew="braf_characters_aviation_air_force_pilot";
|
||||
canFloat=1;
|
||||
waterDamageEngine=0.2;
|
||||
waterEffect="HeliWater";
|
||||
waterLeakiness=50;
|
||||
waterPPInVehicle=1;
|
||||
waterResistance=1;
|
||||
waterResistanceCoef=0.5;
|
||||
class EventHandlers: EventHandlers
|
||||
{
|
||||
init="if (local (_this select 0)) then {[(_this select 0), """", [], false] call bis_fnc_initVehicle; [(_this select 0), ""Init""] call BRAF_fnc_efs;};";
|
||||
};
|
||||
class UserActions: UserActions
|
||||
{
|
||||
class Arm_EFS
|
||||
{
|
||||
displayname="<t color='#ffaa00'> Arm EFS </t>";
|
||||
position="window_pos";
|
||||
showWindow=1;
|
||||
radius=10;
|
||||
priority=1;
|
||||
onlyForPlayer=0;
|
||||
condition="getNumber (configOf this >> 'canFloat') == 1 AND this animationphase 'EFS_Cover_Hide' > 0.9 AND (player in crew this) AND ((this getVariable ['braf_efs_state','SAFE']) == 'SAFE')";
|
||||
statement="[this, ""arm""] call BRAF_fnc_efs";
|
||||
};
|
||||
class Disarm_EFS: Arm_EFS
|
||||
{
|
||||
displayname="<t color='#ffaa00'> Disarm EFS </t>";
|
||||
condition="getNumber (configOf this >> 'canFloat') == 1 AND this animationphase 'EFS_Cover_Hide' > 0.9 AND (player in crew this) AND ((this getVariable ['braf_efs_state','ARMED']) == 'ARMED')";
|
||||
statement="[this, ""disarm""] call BRAF_fnc_efs";
|
||||
};
|
||||
class Deploy_Floats: Arm_EFS
|
||||
{
|
||||
displayname="<t color='#b31d00'> Deploy Floats </t>";
|
||||
condition="getNumber (configOf this >> 'canFloat') == 1 AND this animationphase 'EFS_Cover_Hide' > 0.9 AND (player in crew this) AND ((this getVariable ['braf_efs_state','ARMED']) == 'ARMED')";
|
||||
statement="[this, ""deployfloats""] call BRAF_fnc_efs";
|
||||
};
|
||||
};
|
||||
animationList[]=
|
||||
{
|
||||
"EFS_Hide",1,
|
||||
"EFS_Cover_Hide",0,
|
||||
"EFS_Hide",0,
|
||||
"EFS_Cover_Hide",1,
|
||||
"Door_L_1",1,
|
||||
"Door_L_2",1,
|
||||
"Door_R_1",1,
|
||||
@@ -1802,6 +1950,43 @@ class BRAF_Caracal_8: BRAF_Caracal_2
|
||||
editorPreview="\braf\braf_insignia\editorpreview\air\BRAF_Caracal_8.jpg";
|
||||
faction="BRAF_FAB";
|
||||
crew="braf_characters_aviation_air_force_pilot";
|
||||
canFloat=1;
|
||||
waterDamageEngine=0.2;
|
||||
waterEffect="HeliWater";
|
||||
waterLeakiness=50;
|
||||
waterPPInVehicle=1;
|
||||
waterResistance=1;
|
||||
waterResistanceCoef=0.5;
|
||||
class EventHandlers: EventHandlers
|
||||
{
|
||||
init="if (local (_this select 0)) then {[(_this select 0), """", [], false] call bis_fnc_initVehicle; [(_this select 0), ""Init""] call BRAF_fnc_efs;};";
|
||||
};
|
||||
class UserActions: UserActions
|
||||
{
|
||||
class Arm_EFS
|
||||
{
|
||||
displayname="<t color='#ffaa00'> Arm EFS </t>";
|
||||
position="window_pos";
|
||||
showWindow=1;
|
||||
radius=10;
|
||||
priority=1;
|
||||
onlyForPlayer=0;
|
||||
condition="getNumber (configOf this >> 'canFloat') == 1 AND this animationphase 'EFS_Cover_Hide' > 0.9 AND (player in crew this) AND ((this getVariable ['braf_efs_state','SAFE']) == 'SAFE')";
|
||||
statement="[this, ""arm""] call BRAF_fnc_efs";
|
||||
};
|
||||
class Disarm_EFS: Arm_EFS
|
||||
{
|
||||
displayname="<t color='#ffaa00'> Disarm EFS </t>";
|
||||
condition="getNumber (configOf this >> 'canFloat') == 1 AND this animationphase 'EFS_Cover_Hide' > 0.9 AND (player in crew this) AND ((this getVariable ['braf_efs_state','ARMED']) == 'ARMED')";
|
||||
statement="[this, ""disarm""] call BRAF_fnc_efs";
|
||||
};
|
||||
class Deploy_Floats: Arm_EFS
|
||||
{
|
||||
displayname="<t color='#b31d00'> Deploy Floats </t>";
|
||||
condition="getNumber (configOf this >> 'canFloat') == 1 AND this animationphase 'EFS_Cover_Hide' > 0.9 AND (player in crew this) AND ((this getVariable ['braf_efs_state','ARMED']) == 'ARMED')";
|
||||
statement="[this, ""deployfloats""] call BRAF_fnc_efs";
|
||||
};
|
||||
};
|
||||
hiddenSelectionsTextures[]=
|
||||
{
|
||||
"braf\braf_air\BRAF_helicopters\BRAF_Caracal\data\FAB\Camo1_co.paa",
|
||||
@@ -1820,8 +2005,8 @@ class BRAF_Caracal_8: BRAF_Caracal_2
|
||||
};
|
||||
animationList[]=
|
||||
{
|
||||
"EFS_Hide",1,
|
||||
"EFS_Cover_Hide",0,
|
||||
"EFS_Hide",0,
|
||||
"EFS_Cover_Hide",1,
|
||||
"SAR_Hide",0,
|
||||
"Pole_Hide",1,
|
||||
"Hoist_Hide",1,
|
||||
@@ -1838,6 +2023,43 @@ class BRAF_Caracal_9: BRAF_Caracal_3
|
||||
editorPreview="\braf\braf_insignia\editorpreview\air\BRAF_Caracal_9.jpg";
|
||||
faction="BRAF_FAB";
|
||||
crew="braf_characters_aviation_air_force_pilot";
|
||||
canFloat=1;
|
||||
waterDamageEngine=0.2;
|
||||
waterEffect="HeliWater";
|
||||
waterLeakiness=50;
|
||||
waterPPInVehicle=1;
|
||||
waterResistance=1;
|
||||
waterResistanceCoef=0.5;
|
||||
class EventHandlers: EventHandlers
|
||||
{
|
||||
init="if (local (_this select 0)) then {[(_this select 0), """", [], false] call bis_fnc_initVehicle; [(_this select 0), ""Init""] call BRAF_fnc_efs;};";
|
||||
};
|
||||
class UserActions: UserActions
|
||||
{
|
||||
class Arm_EFS
|
||||
{
|
||||
displayname="<t color='#ffaa00'> Arm EFS </t>";
|
||||
position="window_pos";
|
||||
showWindow=1;
|
||||
radius=10;
|
||||
priority=1;
|
||||
onlyForPlayer=0;
|
||||
condition="getNumber (configOf this >> 'canFloat') == 1 AND this animationphase 'EFS_Cover_Hide' > 0.9 AND (player in crew this) AND ((this getVariable ['braf_efs_state','SAFE']) == 'SAFE')";
|
||||
statement="[this, ""arm""] call BRAF_fnc_efs";
|
||||
};
|
||||
class Disarm_EFS: Arm_EFS
|
||||
{
|
||||
displayname="<t color='#ffaa00'> Disarm EFS </t>";
|
||||
condition="getNumber (configOf this >> 'canFloat') == 1 AND this animationphase 'EFS_Cover_Hide' > 0.9 AND (player in crew this) AND ((this getVariable ['braf_efs_state','ARMED']) == 'ARMED')";
|
||||
statement="[this, ""disarm""] call BRAF_fnc_efs";
|
||||
};
|
||||
class Deploy_Floats: Arm_EFS
|
||||
{
|
||||
displayname="<t color='#b31d00'> Deploy Floats </t>";
|
||||
condition="getNumber (configOf this >> 'canFloat') == 1 AND this animationphase 'EFS_Cover_Hide' > 0.9 AND (player in crew this) AND ((this getVariable ['braf_efs_state','ARMED']) == 'ARMED')";
|
||||
statement="[this, ""deployfloats""] call BRAF_fnc_efs";
|
||||
};
|
||||
};
|
||||
hiddenSelectionsTextures[]=
|
||||
{
|
||||
"braf\braf_air\BRAF_helicopters\BRAF_Caracal\data\FAB\Camo1_co.paa",
|
||||
@@ -1856,8 +2078,8 @@ class BRAF_Caracal_9: BRAF_Caracal_3
|
||||
};
|
||||
animationList[]=
|
||||
{
|
||||
"EFS_Hide",1,
|
||||
"EFS_Cover_Hide",0,
|
||||
"EFS_Hide",0,
|
||||
"EFS_Cover_Hide",1,
|
||||
"SAR_Hide",1,
|
||||
"Pole_Hide",1,
|
||||
"Hoist_Hide",0,
|
||||
|
||||
@@ -78,8 +78,8 @@ class CfgSkeletons
|
||||
"wheel_r_damper","lg_back",
|
||||
"wheel_r","wheel_r_damper",
|
||||
|
||||
"EFS","damagehide",
|
||||
"EFS_cover","damagehide",
|
||||
"EFS_cover","",
|
||||
"EFS","EFS_cover",
|
||||
|
||||
"SAR","damagehide",
|
||||
"hoist_hook","SAR",
|
||||
@@ -782,7 +782,8 @@ class CfgModels
|
||||
minValue=0;
|
||||
maxValue=1;
|
||||
memory=0;
|
||||
hideValue=1;
|
||||
hideValue=0;
|
||||
unHideValue=1;
|
||||
};
|
||||
class EFS_Cover_Hide
|
||||
{
|
||||
@@ -795,7 +796,8 @@ class CfgModels
|
||||
minValue=0;
|
||||
maxValue=1;
|
||||
memory=0;
|
||||
hideValue=1;
|
||||
hideValue=0;
|
||||
unHideValue=1;
|
||||
};
|
||||
class SAR_Hide
|
||||
{
|
||||
@@ -944,4 +946,4 @@ class CfgModels
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -424,19 +424,19 @@ class BRAF_Fennec_Base: Helicopter_Base_H
|
||||
priority=1;
|
||||
onlyForPlayer=0;
|
||||
condition="getNumber (configOf this >> 'canFloat') == 1 AND this animationphase 'EFS_Cover_Hide' > 0.9 AND (player in crew this) AND ((this getVariable ['braf_efs_state','SAFE']) == 'SAFE')";
|
||||
statement="[this, ""arm""] execVM ""braf\braf_sar\Braf_Scripts\EFS_Esquilo.sqf""";
|
||||
statement="[this, ""arm""] call BRAF_fnc_efs";
|
||||
};
|
||||
class Disarm_EFS: Arm_EFS
|
||||
{
|
||||
displayname="<t color='#ffaa00'> Disarm EFS </t>";
|
||||
condition="getNumber (configOf this >> 'canFloat') == 1 AND this animationphase 'EFS_Cover_Hide' > 0.9 AND (player in crew this) AND ((this getVariable ['braf_efs_state','SAFE']) == 'ARMED')";
|
||||
statement="[this, ""disarm""] execVM ""braf\braf_sar\Braf_Scripts\EFS_Esquilo.sqf""";
|
||||
statement="[this, ""disarm""] call BRAF_fnc_efs";
|
||||
};
|
||||
class Deploy_Floats: Arm_EFS
|
||||
{
|
||||
displayname="<t color='#b31d00'> Deploy Floats </t>";
|
||||
condition="getNumber (configOf this >> 'canFloat') == 1 AND this animationphase 'EFS_Cover_Hide' > 0.9 AND (player in crew this) AND ((this getVariable ['braf_efs_state','SAFE']) == 'ARMED')";
|
||||
statement="[this, ""deployfloats""] execVM ""braf\braf_sar\Braf_Scripts\EFS_Esquilo.sqf""";
|
||||
statement="[this, ""deployfloats""] call BRAF_fnc_efs";
|
||||
};
|
||||
};
|
||||
class Armory
|
||||
@@ -823,7 +823,7 @@ class BRAF_Fennec_Base: Helicopter_Base_H
|
||||
#include "Fennec_sounds.hpp"
|
||||
class EventHandlers: EventHandlers
|
||||
{
|
||||
init="if (local (_this select 0)) then {[(_this select 0), """", [], false] call bis_fnc_initVehicle; [(_this select 0), ""Init""] execVM ""braf\braf_sar\Braf_Scripts\EFS_Esquilo.sqf"";};";
|
||||
init="if (local (_this select 0)) then {[(_this select 0), """", [], false] call bis_fnc_initVehicle; [(_this select 0), ""Init""] call BRAF_fnc_efs;};";
|
||||
};
|
||||
ace_cargo_space=2;
|
||||
class TextureSources
|
||||
@@ -1429,19 +1429,19 @@ class BRAF_Fennec_dynamicLoadout_base: BRAF_Fennec_Base
|
||||
priority=1;
|
||||
onlyForPlayer=0;
|
||||
condition="getNumber (configOf this >> 'canFloat') == 1 AND this animationphase 'EFS_Cover_Hide' > 0.9 AND (player in crew this) AND ((this getVariable ['braf_efs_state','SAFE']) == 'SAFE')";
|
||||
statement="[this, ""arm""] execVM ""braf\braf_sar\Braf_Scripts\EFS_Esquilo.sqf""";
|
||||
statement="[this, ""arm""] call BRAF_fnc_efs";
|
||||
};
|
||||
class Disarm_EFS: Arm_EFS
|
||||
{
|
||||
displayname="<t color='#ffaa00'> Disarm EFS </t>";
|
||||
condition="getNumber (configOf this >> 'canFloat') == 1 AND this animationphase 'EFS_Cover_Hide' > 0.9 AND (player in crew this) AND ((this getVariable ['braf_efs_state','SAFE']) == 'ARMED')";
|
||||
statement="[this, ""disarm""] execVM ""braf\braf_sar\Braf_Scripts\EFS_Esquilo.sqf""";
|
||||
statement="[this, ""disarm""] call BRAF_fnc_efs";
|
||||
};
|
||||
class Deploy_Floats: Arm_EFS
|
||||
{
|
||||
displayname="<t color='#b31d00'> Deploy Floats </t>";
|
||||
condition="getNumber (configOf this >> 'canFloat') == 1 AND this animationphase 'EFS_Cover_Hide' > 0.9 AND (player in crew this) AND ((this getVariable ['braf_efs_state','SAFE']) == 'ARMED')";
|
||||
statement="[this, ""deployfloats""] execVM ""braf\braf_sar\Braf_Scripts\EFS_Esquilo.sqf""";
|
||||
statement="[this, ""deployfloats""] call BRAF_fnc_efs";
|
||||
};
|
||||
};
|
||||
};
|
||||
@@ -1767,32 +1767,32 @@ class BRAF_Fennec_SAR_base: BRAF_Fennec_Base
|
||||
priority=1;
|
||||
onlyForPlayer=0;
|
||||
condition="this animationphase 'Hoist_Hide' > 0.9 AND (player in crew this) AND this animationphase 'door_L_2' > 0.9 AND !(""BRAF_Rescue_Seat"" in (this getVariable ['braf_hoist_spent_payloads', []]))";
|
||||
statement="this animate ['Winch_Rot',1]; [this, ""deploy"", ""BRAF_Rescue_Seat""] execVM ""braf\braf_sar\Braf_Scripts\hoist_controller.sqf""; this animate ['Hoist_Hide',-0.5]";
|
||||
statement="this animate ['Winch_Rot',1]; [this, ""deploy"", ""BRAF_Rescue_Seat""] call BRAF_fnc_hoist; this animate ['Hoist_Hide',-0.5]";
|
||||
|
||||
};
|
||||
class Hoist_Down: Deploy_Rescue_Seat
|
||||
{
|
||||
displayname="<t color='#ffaa00'> Extend Cable Hook </t>";
|
||||
condition="this animationphase 'Hoist_Hide' < -0.4 AND this animationphase 'Hoist_Hide' > -0.6 AND (player in crew this) AND this animationphase 'door_L_2' > 0.9";
|
||||
statement="[this, ""down""] execVM ""braf\braf_sar\Braf_Scripts\hoist_controller.sqf""; this animate ['Hoist_Hide',-1]; this say3d ""Winch""";
|
||||
statement="[this, ""down""] call BRAF_fnc_hoist; this animate ['Hoist_Hide',-1]; this say3d ""Winch""";
|
||||
};
|
||||
class Hoist_Up: Deploy_Rescue_Seat
|
||||
{
|
||||
displayname="<t color='#ffaa00'> Recover Hoist Hook </t>";
|
||||
condition="this animationphase 'Hoist_Hide' < -0.9 AND (player in crew this) AND this animationphase 'door_L_2' > 0.9";
|
||||
statement="[this, ""up""] execVM ""braf\braf_sar\Braf_Scripts\hoist_controller.sqf""; this animate ['Hoist_Hide',-0.5]; this say3d ""Winch""";
|
||||
statement="[this, ""up""] call BRAF_fnc_hoist; this animate ['Hoist_Hide',-0.5]; this say3d ""Winch""";
|
||||
};
|
||||
class Recover_Rescue_Seat: Deploy_Rescue_Seat
|
||||
{
|
||||
displayname="<t color='#ffaa00'> Retrieve Rescue Payload </t>";
|
||||
condition="(player in crew this) AND this animationphase 'door_L_2' > 0.9 AND this animationphase 'Hoist_Hide' < -0.4 AND this animationphase 'Hoist_Hide' > -0.6";
|
||||
statement="[this, ""recover""] execVM ""braf\braf_sar\Braf_Scripts\hoist_controller.sqf""; this animate ['Winch_Rot',0]; this animate ['Hoist_Hide',1]";
|
||||
statement="[this, ""recover""] call BRAF_fnc_hoist; this animate ['Winch_Rot',0]; this animate ['Hoist_Hide',1]";
|
||||
};
|
||||
class Hoist_Cut: Deploy_Rescue_Seat
|
||||
{
|
||||
displayname="<t color='#b31d00'> Cut Hoist Hook Cable </t>";
|
||||
condition="(player in crew this) AND this animationphase 'Hoist_Hide' < 0 AND this animationphase 'door_L_2' > 0.9";
|
||||
statement="[this, ""cut""] execVM ""braf\braf_sar\Braf_Scripts\hoist_controller.sqf""; this animate ['Winch_Rot',0]; this animate ['Hoist_Hide',1]";
|
||||
statement="[this, ""cut""] call BRAF_fnc_hoist; this animate ['Winch_Rot',0]; this animate ['Hoist_Hide',1]";
|
||||
};
|
||||
class NVG_ON
|
||||
{
|
||||
@@ -1820,19 +1820,19 @@ class BRAF_Fennec_SAR_base: BRAF_Fennec_Base
|
||||
priority=1;
|
||||
onlyForPlayer=0;
|
||||
condition="getNumber (configOf this >> 'canFloat') == 1 AND this animationphase 'EFS_Cover_Hide' > 0.9 AND (player in crew this) AND ((this getVariable ['braf_efs_state','SAFE']) == 'SAFE')";
|
||||
statement="[this, ""arm""] execVM ""braf\braf_sar\Braf_Scripts\EFS_Esquilo.sqf""";
|
||||
statement="[this, ""arm""] call BRAF_fnc_efs";
|
||||
};
|
||||
class Disarm_EFS: Arm_EFS
|
||||
{
|
||||
displayname="<t color='#ffaa00'> Disarm EFS </t>";
|
||||
condition="getNumber (configOf this >> 'canFloat') == 1 AND this animationphase 'EFS_Cover_Hide' > 0.9 AND (player in crew this) AND ((this getVariable ['braf_efs_state','SAFE']) == 'ARMED')";
|
||||
statement="[this, ""disarm""] execVM ""braf\braf_sar\Braf_Scripts\EFS_Esquilo.sqf""";
|
||||
statement="[this, ""disarm""] call BRAF_fnc_efs";
|
||||
};
|
||||
class Deploy_Floats: Arm_EFS
|
||||
{
|
||||
displayname="<t color='#b31d00'> Deploy Floats </t>";
|
||||
condition="getNumber (configOf this >> 'canFloat') == 1 AND this animationphase 'EFS_Cover_Hide' > 0.9 AND (player in crew this) AND ((this getVariable ['braf_efs_state','SAFE']) == 'ARMED')";
|
||||
statement="[this, ""deployfloats""] execVM ""braf\braf_sar\Braf_Scripts\EFS_Esquilo.sqf""";
|
||||
statement="[this, ""deployfloats""] call BRAF_fnc_efs";
|
||||
};
|
||||
class Open_Door_Right
|
||||
{
|
||||
@@ -1945,19 +1945,19 @@ class BRAF_Fennec_unarmed_base: BRAF_Fennec_Base
|
||||
priority=1;
|
||||
onlyForPlayer=0;
|
||||
condition="getNumber (configOf this >> 'canFloat') == 1 AND this animationphase 'EFS_Cover_Hide' > 0.9 AND (player in crew this) AND ((this getVariable ['braf_efs_state','SAFE']) == 'SAFE')";
|
||||
statement="[this, ""arm""] execVM ""braf\braf_sar\Braf_Scripts\EFS_Esquilo.sqf""";
|
||||
statement="[this, ""arm""] call BRAF_fnc_efs";
|
||||
};
|
||||
class Disarm_EFS: Arm_EFS
|
||||
{
|
||||
displayname="<t color='#ffaa00'> Disarm EFS </t>";
|
||||
condition="getNumber (configOf this >> 'canFloat') == 1 AND this animationphase 'EFS_Cover_Hide' > 0.9 AND (player in crew this) AND ((this getVariable ['braf_efs_state','SAFE']) == 'ARMED')";
|
||||
statement="[this, ""disarm""] execVM ""braf\braf_sar\Braf_Scripts\EFS_Esquilo.sqf""";
|
||||
statement="[this, ""disarm""] call BRAF_fnc_efs";
|
||||
};
|
||||
class Deploy_Floats: Arm_EFS
|
||||
{
|
||||
displayname="<t color='#b31d00'> Deploy Floats </t>";
|
||||
condition="getNumber (configOf this >> 'canFloat') == 1 AND this animationphase 'EFS_Cover_Hide' > 0.9 AND (player in crew this) AND ((this getVariable ['braf_efs_state','SAFE']) == 'ARMED')";
|
||||
statement="[this, ""deployfloats""] execVM ""braf\braf_sar\Braf_Scripts\EFS_Esquilo.sqf""";
|
||||
statement="[this, ""deployfloats""] call BRAF_fnc_efs";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
Binary file not shown.
@@ -345,37 +345,37 @@ class BRAF_Pantera_Base: Helicopter_Base_H
|
||||
priority=1;
|
||||
onlyForPlayer=0;
|
||||
condition="this animationphase 'Hoist_Hide' > 0.9 AND (player in crew this) AND this animationphase 'Door_R_1' > 0.9 AND this animationphase 'Civilian_hide' < 0.1 AND !(""BRAF_Rescue_Seat"" in (this getVariable ['braf_hoist_spent_payloads', []]))";
|
||||
statement="[this, ""deploy"", ""BRAF_Rescue_Seat""] execVM ""braf\braf_sar\Braf_Scripts\hoist_controller.sqf""; this animate ['Hoist_Hide',-0.5]";
|
||||
statement="[this, ""deploy"", ""BRAF_Rescue_Seat""] call BRAF_fnc_hoist; this animate ['Hoist_Hide',-0.5]";
|
||||
};
|
||||
class Deploy_Rescue_Stretcher: Deploy_Rescue_Seat
|
||||
{
|
||||
displayname="<t color='#ffaa00'> Deploy Rescue Stretcher </t>";
|
||||
condition="this animationphase 'Hoist_Hide' > 0.9 AND (player in crew this) AND this animationphase 'Door_R_1' > 0.9 AND this animationphase 'Civilian_hide' < 0.1 AND !(""BRAF_Rescue_Stretcher"" in (this getVariable ['braf_hoist_spent_payloads', []]))";
|
||||
statement="[this, ""deploy"", ""BRAF_Rescue_Stretcher""] execVM ""braf\braf_sar\Braf_Scripts\hoist_controller.sqf""; this animate ['Hoist_Hide',-0.5]";
|
||||
statement="[this, ""deploy"", ""BRAF_Rescue_Stretcher""] call BRAF_fnc_hoist; this animate ['Hoist_Hide',-0.5]";
|
||||
};
|
||||
class Hoist_Down: Deploy_Rescue_Seat
|
||||
{
|
||||
displayname="<t color='#ffaa00'> Extend Cable Hook </t>";
|
||||
condition="this animationphase 'Hoist_Hide' < -0.4 AND this animationphase 'Hoist_Hide' > -0.6 AND (player in crew this) AND this animationphase 'Door_R_1' > 0.9";
|
||||
statement="[this, ""down""] execVM ""braf\braf_sar\Braf_Scripts\hoist_controller.sqf""; this animate ['Hoist_Hide',-1]; this say3d ""Winch""";
|
||||
statement="[this, ""down""] call BRAF_fnc_hoist; this animate ['Hoist_Hide',-1]; this say3d ""Winch""";
|
||||
};
|
||||
class Hoist_Up: Deploy_Rescue_Seat
|
||||
{
|
||||
displayname="<t color='#ffaa00'> Recover Cable Hook </t>";
|
||||
condition="this animationphase 'Hoist_Hide' < -0.9 AND (player in crew this) AND this animationphase 'Door_R_1' > 0.9";
|
||||
statement="[this, ""up""] execVM ""braf\braf_sar\Braf_Scripts\hoist_controller.sqf""; this animate ['Hoist_Hide',-0.5]; this say3d ""Winch""";
|
||||
statement="[this, ""up""] call BRAF_fnc_hoist; this animate ['Hoist_Hide',-0.5]; this say3d ""Winch""";
|
||||
};
|
||||
class Recover_Rescue_Seat: Deploy_Rescue_Seat
|
||||
{
|
||||
displayname="<t color='#ffaa00'> Retrieve Rescue Payload </t>";
|
||||
condition="(player in crew this) AND this animationphase 'Door_R_1' > 0.9 AND this animationphase 'Hoist_Hide' < -0.4 AND this animationphase 'Hoist_Hide' > -0.6";
|
||||
statement="[this, ""recover""] execVM ""braf\braf_sar\Braf_Scripts\hoist_controller.sqf""; this animate ['Hoist_Hide',1]";
|
||||
statement="[this, ""recover""] call BRAF_fnc_hoist; this animate ['Hoist_Hide',1]";
|
||||
};
|
||||
class Hoist_Cut: Deploy_Rescue_Seat
|
||||
{
|
||||
displayname="<t color='#b31d00'> Cut Hoist Hook Cable </t>";
|
||||
condition="(player in crew this) AND this animationphase 'Door_R_1' > 0.9 AND this animationphase 'Hoist_Hide' < 0";
|
||||
statement="[this, ""cut""] execVM ""braf\braf_sar\Braf_Scripts\hoist_controller.sqf""; this animate ['Hoist_Hide',1]";
|
||||
statement="[this, ""cut""] call BRAF_fnc_hoist; this animate ['Hoist_Hide',1]";
|
||||
};
|
||||
class Open_Door_Left
|
||||
{
|
||||
@@ -1307,7 +1307,12 @@ class BRAF_Pantera_K2_SAR: BRAF_Pantera_Base
|
||||
typicalCargo[]={"C_Marshal_F"};
|
||||
crew="C_Marshal_F";
|
||||
canFloat=1;
|
||||
WaterLeakiness=50;
|
||||
waterDamageEngine=0.2;
|
||||
waterEffect="HeliWater";
|
||||
waterLeakiness=50;
|
||||
waterPPInVehicle=1;
|
||||
waterResistance=1;
|
||||
waterResistanceCoef=0.5;
|
||||
weapons[]=
|
||||
{
|
||||
};
|
||||
@@ -1398,6 +1403,12 @@ class BRAF_Pantera_K2_SAR: BRAF_Pantera_Base
|
||||
animPeriod=1;
|
||||
initPhase=0;
|
||||
};
|
||||
class EFS_Cover_Hide
|
||||
{
|
||||
source="user";
|
||||
animPeriod=0;
|
||||
initPhase=0;
|
||||
};
|
||||
class EFS_Hide
|
||||
{
|
||||
source="user";
|
||||
@@ -1405,6 +1416,10 @@ class BRAF_Pantera_K2_SAR: BRAF_Pantera_Base
|
||||
initPhase=0;
|
||||
};
|
||||
};
|
||||
class EventHandlers: EventHandlers
|
||||
{
|
||||
init="if (local (_this select 0)) then {[(_this select 0), """", [], false] call bis_fnc_initVehicle; [(_this select 0), ""Init""] call BRAF_fnc_efs;};";
|
||||
};
|
||||
class UserActions
|
||||
{
|
||||
class Deploy_Rescue_Seat
|
||||
@@ -1416,37 +1431,37 @@ class BRAF_Pantera_K2_SAR: BRAF_Pantera_Base
|
||||
priority=1;
|
||||
onlyForPlayer=0;
|
||||
condition="this animationphase 'Hoist_Hide' > 0.9 AND (player in crew this) AND this animationphase 'Door_R_1' > 0.9 AND this animationphase 'Civilian_hide' < 0.1 AND !(""BRAF_Rescue_Seat"" in (this getVariable ['braf_hoist_spent_payloads', []]))";
|
||||
statement="[this, ""deploy"", ""BRAF_Rescue_Seat""] execVM ""braf\braf_sar\Braf_Scripts\hoist_controller.sqf""; this animate ['Hoist_Hide',-0.5]";
|
||||
statement="[this, ""deploy"", ""BRAF_Rescue_Seat""] call BRAF_fnc_hoist; this animate ['Hoist_Hide',-0.5]";
|
||||
};
|
||||
class Deploy_Rescue_Stretcher: Deploy_Rescue_Seat
|
||||
{
|
||||
displayname="<t color='#ffaa00'> Deploy Rescue Stretcher </t>";
|
||||
condition="this animationphase 'Hoist_Hide' > 0.9 AND (player in crew this) AND this animationphase 'Door_R_1' > 0.9 AND this animationphase 'Civilian_hide' < 0.1 AND !(""BRAF_Rescue_Stretcher"" in (this getVariable ['braf_hoist_spent_payloads', []]))";
|
||||
statement="[this, ""deploy"", ""BRAF_Rescue_Stretcher""] execVM ""braf\braf_sar\Braf_Scripts\hoist_controller.sqf""; this animate ['Hoist_Hide',-0.5]";
|
||||
statement="[this, ""deploy"", ""BRAF_Rescue_Stretcher""] call BRAF_fnc_hoist; this animate ['Hoist_Hide',-0.5]";
|
||||
};
|
||||
class Hoist_Down: Deploy_Rescue_Seat
|
||||
{
|
||||
displayname="<t color='#ffaa00'> Extend Cable Hook </t>";
|
||||
condition="this animationphase 'Hoist_Hide' < -0.4 AND this animationphase 'Hoist_Hide' > -0.6 AND (player in crew this) AND this animationphase 'Door_R_1' > 0.9";
|
||||
statement="[this, ""down""] execVM ""braf\braf_sar\Braf_Scripts\hoist_controller.sqf""; this animate ['Hoist_Hide',-1]; this say3d ""Winch""";
|
||||
statement="[this, ""down""] call BRAF_fnc_hoist; this animate ['Hoist_Hide',-1]; this say3d ""Winch""";
|
||||
};
|
||||
class Hoist_Up: Deploy_Rescue_Seat
|
||||
{
|
||||
displayname="<t color='#ffaa00'> Recover Cable Hook </t>";
|
||||
condition="this animationphase 'Hoist_Hide' < -0.9 AND (player in crew this) AND this animationphase 'Door_R_1' > 0.9";
|
||||
statement="[this, ""up""] execVM ""braf\braf_sar\Braf_Scripts\hoist_controller.sqf""; this animate ['Hoist_Hide',-0.5]; this say3d ""Winch""";
|
||||
statement="[this, ""up""] call BRAF_fnc_hoist; this animate ['Hoist_Hide',-0.5]; this say3d ""Winch""";
|
||||
};
|
||||
class Recover_Rescue_Seat: Deploy_Rescue_Seat
|
||||
{
|
||||
displayname="<t color='#ffaa00'> Retrieve Rescue Payload </t>";
|
||||
condition="(player in crew this) AND this animationphase 'Door_R_1' > 0.9 AND this animationphase 'Hoist_Hide' < -0.4 AND this animationphase 'Hoist_Hide' > -0.6";
|
||||
statement="[this, ""recover""] execVM ""braf\braf_sar\Braf_Scripts\hoist_controller.sqf""; this animate ['Hoist_Hide',1]";
|
||||
statement="[this, ""recover""] call BRAF_fnc_hoist; this animate ['Hoist_Hide',1]";
|
||||
};
|
||||
class Hoist_Cut: Deploy_Rescue_Seat
|
||||
{
|
||||
displayname="<t color='#b31d00'> Cut Hoist Hook Cable </t>";
|
||||
condition="(player in crew this) AND this animationphase 'Door_R_1' > 0.9 AND this animationphase 'Hoist_Hide' < 0";
|
||||
statement="[this, ""cut""] execVM ""braf\braf_sar\Braf_Scripts\hoist_controller.sqf""; this animate ['Hoist_Hide',1]";
|
||||
statement="[this, ""cut""] call BRAF_fnc_hoist; this animate ['Hoist_Hide',1]";
|
||||
};
|
||||
class Open_Door_Left
|
||||
{
|
||||
@@ -1477,12 +1492,34 @@ class BRAF_Pantera_K2_SAR: BRAF_Pantera_Base
|
||||
condition="this animationphase 'Door_R_1' > 0.9 AND (player in crew this)";
|
||||
statement="this animate ['Door_R_1',0], this animate ['Door_R_2',0], this animate ['Door_R_rot',0], this say3d ""Doors""";
|
||||
};
|
||||
class Deploy_EFS: Open_Door_Left
|
||||
class Arm_EFS
|
||||
{
|
||||
displayname="<t color='#b31d00'> Deploy EFS </t>";
|
||||
condition="this animationphase 'EFS_Hide' < 0.1 AND (player in crew this)";
|
||||
statement="this animate ['EFS_Hide',1], this say3d ""EFS""";
|
||||
displayname="<t color='#ffaa00'> Arm EFS </t>";
|
||||
position="door_pos";
|
||||
showWindow=1;
|
||||
radius=10;
|
||||
priority=1;
|
||||
onlyForPlayer=0;
|
||||
condition="getNumber (configOf this >> 'canFloat') == 1 AND this animationphase 'EFS_Cover_Hide' > 0.9 AND (player in crew this) AND ((this getVariable ['braf_efs_state','SAFE']) == 'SAFE')";
|
||||
statement="[this, ""arm""] call BRAF_fnc_efs";
|
||||
};
|
||||
class Disarm_EFS: Arm_EFS
|
||||
{
|
||||
displayname="<t color='#ffaa00'> Disarm EFS </t>";
|
||||
condition="getNumber (configOf this >> 'canFloat') == 1 AND this animationphase 'EFS_Cover_Hide' > 0.9 AND (player in crew this) AND ((this getVariable ['braf_efs_state','SAFE']) == 'ARMED')";
|
||||
statement="[this, ""disarm""] call BRAF_fnc_efs";
|
||||
};
|
||||
class Deploy_Floats: Arm_EFS
|
||||
{
|
||||
displayname="<t color='#b31d00'> Deploy Floats </t>";
|
||||
condition="getNumber (configOf this >> 'canFloat') == 1 AND this animationphase 'EFS_Cover_Hide' > 0.9 AND (player in crew this) AND ((this getVariable ['braf_efs_state','SAFE']) == 'ARMED')";
|
||||
statement="[this, ""deployfloats""] call BRAF_fnc_efs";
|
||||
};
|
||||
};
|
||||
animationList[]=
|
||||
{
|
||||
"EFS_Cover_Hide",1,
|
||||
"EFS_Hide",0
|
||||
};
|
||||
};
|
||||
class BRAF_Pantera_K2_Black: BRAF_Pantera_Base
|
||||
@@ -1981,6 +2018,13 @@ class BRAF_Pantera_K2_Offshore: BRAF_Pantera_Base
|
||||
slingLoadMaxCargoMass=50;
|
||||
typicalCargo[]={"C_Marshal_F"};
|
||||
crew="C_Marshal_F";
|
||||
canFloat=1;
|
||||
waterDamageEngine=0.2;
|
||||
waterEffect="HeliWater";
|
||||
waterLeakiness=50;
|
||||
waterPPInVehicle=1;
|
||||
waterResistance=1;
|
||||
waterResistanceCoef=0.5;
|
||||
transportSoldier=9;
|
||||
cargoProxyIndexes[]={4,5,6,9,10,11,12,13,14};
|
||||
getInProxyOrder[]={4,5,6,9,10,11,12,13,14};
|
||||
@@ -2087,6 +2131,22 @@ class BRAF_Pantera_K2_Offshore: BRAF_Pantera_Base
|
||||
animPeriod=1;
|
||||
initPhase=0;
|
||||
};
|
||||
class EFS_Cover_Hide
|
||||
{
|
||||
source="user";
|
||||
animPeriod=0;
|
||||
initPhase=0;
|
||||
};
|
||||
class EFS_Hide
|
||||
{
|
||||
source="user";
|
||||
animPeriod=0;
|
||||
initPhase=0;
|
||||
};
|
||||
};
|
||||
class EventHandlers: EventHandlers
|
||||
{
|
||||
init="if (local (_this select 0)) then {[(_this select 0), """", [], false] call bis_fnc_initVehicle; [(_this select 0), ""Init""] call BRAF_fnc_efs;};";
|
||||
};
|
||||
class UserActions
|
||||
{
|
||||
@@ -2119,6 +2179,34 @@ class BRAF_Pantera_K2_Offshore: BRAF_Pantera_Base
|
||||
condition="this animationphase 'Door_R_1' > 0.9 AND (player in crew this)";
|
||||
statement="this animate ['Door_R_1',0], this animate ['Door_R_2',0], this animate ['Door_R_rot',0], this say3d ""Doors""";
|
||||
};
|
||||
class Arm_EFS
|
||||
{
|
||||
displayname="<t color='#ffaa00'> Arm EFS </t>";
|
||||
position="door_pos";
|
||||
showWindow=1;
|
||||
radius=10;
|
||||
priority=1;
|
||||
onlyForPlayer=0;
|
||||
condition="getNumber (configOf this >> 'canFloat') == 1 AND this animationphase 'EFS_Cover_Hide' > 0.9 AND (player in crew this) AND ((this getVariable ['braf_efs_state','SAFE']) == 'SAFE')";
|
||||
statement="[this, ""arm""] call BRAF_fnc_efs";
|
||||
};
|
||||
class Disarm_EFS: Arm_EFS
|
||||
{
|
||||
displayname="<t color='#ffaa00'> Disarm EFS </t>";
|
||||
condition="getNumber (configOf this >> 'canFloat') == 1 AND this animationphase 'EFS_Cover_Hide' > 0.9 AND (player in crew this) AND ((this getVariable ['braf_efs_state','SAFE']) == 'ARMED')";
|
||||
statement="[this, ""disarm""] call BRAF_fnc_efs";
|
||||
};
|
||||
class Deploy_Floats: Arm_EFS
|
||||
{
|
||||
displayname="<t color='#b31d00'> Deploy Floats </t>";
|
||||
condition="getNumber (configOf this >> 'canFloat') == 1 AND this animationphase 'EFS_Cover_Hide' > 0.9 AND (player in crew this) AND ((this getVariable ['braf_efs_state','SAFE']) == 'ARMED')";
|
||||
statement="[this, ""deployfloats""] call BRAF_fnc_efs";
|
||||
};
|
||||
};
|
||||
animationList[]=
|
||||
{
|
||||
"EFS_Cover_Hide",1,
|
||||
"EFS_Hide",0
|
||||
};
|
||||
};
|
||||
class BRAF_Pantera_K2_Silver: BRAF_Pantera_Base
|
||||
|
||||
@@ -1048,6 +1048,20 @@ class CfgModels
|
||||
angle0="rad -18";
|
||||
angle1="rad 0";
|
||||
};
|
||||
class EFS_Cover_Hide
|
||||
{
|
||||
type="hide";
|
||||
source="EFS_Cover_Hide";
|
||||
selection="EFS_Cover";
|
||||
sourceAddress="clamp";
|
||||
minPhase=0;
|
||||
maxPhase=1;
|
||||
minValue=0;
|
||||
maxValue=1;
|
||||
memory=0;
|
||||
hideValue=0;
|
||||
unHideValue=1;
|
||||
};
|
||||
class EFS_Hide
|
||||
{
|
||||
source="EFS_Hide";
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -1,14 +0,0 @@
|
||||
// Declaração de variáveis:
|
||||
params ["_heli"];
|
||||
|
||||
// Criação e posicionamento do EFS:
|
||||
sleep 1;
|
||||
_heli vehicleChat "Deploying Emergency Floating System!";
|
||||
private _efs = "BRAF_Pantera_EFS" createVehicle [0, 0, 0];
|
||||
_efs setDir (getDir _heli);
|
||||
_efs setPosASL (_heli modelToWorld [0, 0, 0]);
|
||||
_efs attachTo [_heli, [0, 0, 0], "efs_spawn"];
|
||||
|
||||
_heli setVariable ["efs", _efs];
|
||||
|
||||
_heli;
|
||||
@@ -1,129 +0,0 @@
|
||||
params ["_heli", ["_action", ""], ["_payloadClass", "BRAF_Rescue_Seat"]];
|
||||
|
||||
private _initialLength = 0.25;
|
||||
private _targetLength = 25;
|
||||
private _recoveryLength = 3.1;
|
||||
private _duration = 16;
|
||||
|
||||
switch (toLower _action) do {
|
||||
case "deploy": {
|
||||
private _spentPayloads = _heli getVariable ["braf_hoist_spent_payloads", []];
|
||||
|
||||
if (_payloadClass in _spentPayloads) exitWith {
|
||||
_heli vehicleChat "Rescue Payload Expended";
|
||||
};
|
||||
|
||||
private _oldRope = _heli getVariable ["hoistrope", objNull];
|
||||
private _oldPayload = _heli getVariable ["rescueseat", objNull];
|
||||
|
||||
if (!isNull _oldRope) then {
|
||||
ropeDestroy _oldRope;
|
||||
};
|
||||
|
||||
if (!isNull _oldPayload) then {
|
||||
deleteVehicle _oldPayload;
|
||||
};
|
||||
|
||||
sleep 1;
|
||||
|
||||
_heli vehicleChat "Deploying Rescue Payload";
|
||||
|
||||
private _payload = _payloadClass createVehicle [0, 0, 0];
|
||||
_payload setDir (getDir _heli);
|
||||
_payload setPosASL (_heli modelToWorld [0, 0, -1.5]);
|
||||
|
||||
private _rope = ropeCreate [_heli, "rope_start", _payload, "hoist_point", _initialLength];
|
||||
|
||||
_heli setVariable ["rescueseat", _payload];
|
||||
_heli setVariable ["hoistrope", _rope];
|
||||
_heli setVariable ["braf_hoist_payload_class", _payloadClass];
|
||||
};
|
||||
|
||||
case "down": {
|
||||
private _rope = _heli getVariable ["hoistrope", objNull];
|
||||
|
||||
if (isNull _rope) exitWith {};
|
||||
|
||||
private _currentLength = ropeLength _rope;
|
||||
private _speed = ((_targetLength - _currentLength) max 0.01) / _duration;
|
||||
|
||||
ropeUnwind [_rope, _speed, _targetLength, false];
|
||||
};
|
||||
|
||||
case "up": {
|
||||
private _rope = _heli getVariable ["hoistrope", objNull];
|
||||
|
||||
if (isNull _rope) exitWith {};
|
||||
|
||||
private _currentLength = ropeLength _rope;
|
||||
private _speed = ((_currentLength - _initialLength) max 0.01) / _duration;
|
||||
|
||||
ropeUnwind [_rope, _speed, _initialLength, false];
|
||||
};
|
||||
|
||||
case "recover": {
|
||||
private _payload = _heli getVariable ["rescueseat", objNull];
|
||||
private _rope = _heli getVariable ["hoistrope", objNull];
|
||||
private _currentPayloadClass = _heli getVariable ["braf_hoist_payload_class", ""];
|
||||
|
||||
if (isNull _rope) exitWith {
|
||||
_heli vehicleChat "no rope!";
|
||||
};
|
||||
|
||||
if ((ropeLength _rope) <= _recoveryLength) then {
|
||||
if (!isNull _payload) then {
|
||||
{
|
||||
if (!isNil "_x") then {
|
||||
_x leaveVehicle _payload;
|
||||
_x action ["GetOut", _payload];
|
||||
sleep 0.1;
|
||||
_payload lock 0;
|
||||
[_x, _heli] remoteExec ["moveInCargo", _x];
|
||||
_x assignAsCargo _heli;
|
||||
};
|
||||
} forEach crew _payload;
|
||||
|
||||
ropeDestroy _rope;
|
||||
deleteVehicle _payload;
|
||||
} else {
|
||||
ropeDestroy _rope;
|
||||
};
|
||||
|
||||
_heli setVariable ["rescueseat", nil];
|
||||
_heli setVariable ["hoistrope", nil];
|
||||
_heli setVariable ["braf_hoist_payload_class", nil];
|
||||
|
||||
if (_currentPayloadClass != "") then {
|
||||
private _spentPayloads = _heli getVariable ["braf_hoist_spent_payloads", []];
|
||||
_spentPayloads = _spentPayloads - [_currentPayloadClass];
|
||||
_heli setVariable ["braf_hoist_spent_payloads", _spentPayloads];
|
||||
};
|
||||
|
||||
_heli vehicleChat "Rescue Payload In Cabin";
|
||||
} else {
|
||||
_heli vehicleChat "First Raise The Rescue Payload To Cabin Door";
|
||||
};
|
||||
};
|
||||
|
||||
case "cut": {
|
||||
private _rope = _heli getVariable ["hoistrope", objNull];
|
||||
private _currentPayloadClass = _heli getVariable ["braf_hoist_payload_class", ""];
|
||||
|
||||
if (isNull _rope) exitWith {
|
||||
_heli vehicleChat "no rope!";
|
||||
};
|
||||
|
||||
ropeCut [_rope, 0];
|
||||
ropeDestroy _rope;
|
||||
_heli setVariable ["hoistrope", nil];
|
||||
|
||||
if (_currentPayloadClass != "") then {
|
||||
private _spentPayloads = _heli getVariable ["braf_hoist_spent_payloads", []];
|
||||
|
||||
if !(_currentPayloadClass in _spentPayloads) then {
|
||||
_spentPayloads pushBack _currentPayloadClass;
|
||||
_heli setVariable ["braf_hoist_spent_payloads", _spentPayloads];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
+18
-2
@@ -17,12 +17,28 @@ class CfgPatches
|
||||
{
|
||||
"BRAF_Rescue_Seat",
|
||||
"BRAF_Rescue_Basket",
|
||||
"BRAF_Rescue_Stretcher",
|
||||
"BRAF_Esquilo_EFS"
|
||||
"BRAF_Rescue_Stretcher"
|
||||
};
|
||||
weapons[] = {};
|
||||
};
|
||||
};
|
||||
class CfgFunctions
|
||||
{
|
||||
class BRAF
|
||||
{
|
||||
class functions
|
||||
{
|
||||
class efs
|
||||
{
|
||||
file = "\braf\braf_sar\functions\fn_efs.sqf";
|
||||
};
|
||||
class hoist
|
||||
{
|
||||
file = "\braf\braf_sar\functions\fn_hoist.sqf";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
class CfgVehicles
|
||||
{
|
||||
class Items_base_F;
|
||||
|
||||
@@ -27,7 +27,12 @@ private _getConfiguredLeakiness = {
|
||||
private _getEfsCenterASL = {
|
||||
params ["_vehicle"];
|
||||
|
||||
_vehicle modelToWorldWorld (_vehicle selectionPosition ["EFS_center", "Memory"])
|
||||
private _center = _vehicle selectionPosition ["EFS_center", "Memory"];
|
||||
if (_center isEqualTo [0, 0, 0]) then {
|
||||
_center = _vehicle selectionPosition ["EFS", "Memory"];
|
||||
};
|
||||
|
||||
_vehicle modelToWorldWorld _center
|
||||
};
|
||||
|
||||
private _getWaterSurfaceASL = {
|
||||
@@ -0,0 +1,133 @@
|
||||
params ["_heli", ["_action", ""], ["_payloadClass", "BRAF_Rescue_Seat"]];
|
||||
|
||||
[_heli, _action, _payloadClass] spawn {
|
||||
params ["_heli", "_action", "_payloadClass"];
|
||||
|
||||
private _initialLength = 0.25;
|
||||
private _targetLength = 25;
|
||||
private _recoveryLength = 3.1;
|
||||
private _duration = 16;
|
||||
|
||||
switch (toLower _action) do {
|
||||
case "deploy": {
|
||||
private _spentPayloads = _heli getVariable ["braf_hoist_spent_payloads", []];
|
||||
|
||||
if (_payloadClass in _spentPayloads) exitWith {
|
||||
_heli vehicleChat "Rescue Payload Expended";
|
||||
};
|
||||
|
||||
private _oldRope = _heli getVariable ["hoistrope", objNull];
|
||||
private _oldPayload = _heli getVariable ["rescueseat", objNull];
|
||||
|
||||
if (!isNull _oldRope) then {
|
||||
ropeDestroy _oldRope;
|
||||
};
|
||||
|
||||
if (!isNull _oldPayload) then {
|
||||
deleteVehicle _oldPayload;
|
||||
};
|
||||
|
||||
sleep 1;
|
||||
|
||||
_heli vehicleChat "Deploying Rescue Payload";
|
||||
|
||||
private _payload = _payloadClass createVehicle [0, 0, 0];
|
||||
_payload setDir (getDir _heli);
|
||||
_payload setPosASL (_heli modelToWorld [0, 0, -1.5]);
|
||||
|
||||
private _rope = ropeCreate [_heli, "rope_start", _payload, "hoist_point", _initialLength];
|
||||
|
||||
_heli setVariable ["rescueseat", _payload];
|
||||
_heli setVariable ["hoistrope", _rope];
|
||||
_heli setVariable ["braf_hoist_payload_class", _payloadClass];
|
||||
};
|
||||
|
||||
case "down": {
|
||||
private _rope = _heli getVariable ["hoistrope", objNull];
|
||||
|
||||
if (isNull _rope) exitWith {};
|
||||
|
||||
private _currentLength = ropeLength _rope;
|
||||
private _speed = ((_targetLength - _currentLength) max 0.01) / _duration;
|
||||
|
||||
ropeUnwind [_rope, _speed, _targetLength, false];
|
||||
};
|
||||
|
||||
case "up": {
|
||||
private _rope = _heli getVariable ["hoistrope", objNull];
|
||||
|
||||
if (isNull _rope) exitWith {};
|
||||
|
||||
private _currentLength = ropeLength _rope;
|
||||
private _speed = ((_currentLength - _initialLength) max 0.01) / _duration;
|
||||
|
||||
ropeUnwind [_rope, _speed, _initialLength, false];
|
||||
};
|
||||
|
||||
case "recover": {
|
||||
private _payload = _heli getVariable ["rescueseat", objNull];
|
||||
private _rope = _heli getVariable ["hoistrope", objNull];
|
||||
private _currentPayloadClass = _heli getVariable ["braf_hoist_payload_class", ""];
|
||||
|
||||
if (isNull _rope) exitWith {
|
||||
_heli vehicleChat "no rope!";
|
||||
};
|
||||
|
||||
if ((ropeLength _rope) <= _recoveryLength) then {
|
||||
if (!isNull _payload) then {
|
||||
{
|
||||
if (!isNil "_x") then {
|
||||
_x leaveVehicle _payload;
|
||||
_x action ["GetOut", _payload];
|
||||
sleep 0.1;
|
||||
_payload lock 0;
|
||||
[_x, _heli] remoteExec ["moveInCargo", _x];
|
||||
_x assignAsCargo _heli;
|
||||
};
|
||||
} forEach crew _payload;
|
||||
|
||||
ropeDestroy _rope;
|
||||
deleteVehicle _payload;
|
||||
} else {
|
||||
ropeDestroy _rope;
|
||||
};
|
||||
|
||||
_heli setVariable ["rescueseat", nil];
|
||||
_heli setVariable ["hoistrope", nil];
|
||||
_heli setVariable ["braf_hoist_payload_class", nil];
|
||||
|
||||
if (_currentPayloadClass != "") then {
|
||||
private _spentPayloads = _heli getVariable ["braf_hoist_spent_payloads", []];
|
||||
_spentPayloads = _spentPayloads - [_currentPayloadClass];
|
||||
_heli setVariable ["braf_hoist_spent_payloads", _spentPayloads];
|
||||
};
|
||||
|
||||
_heli vehicleChat "Rescue Payload In Cabin";
|
||||
} else {
|
||||
_heli vehicleChat "First Raise The Rescue Payload To Cabin Door";
|
||||
};
|
||||
};
|
||||
|
||||
case "cut": {
|
||||
private _rope = _heli getVariable ["hoistrope", objNull];
|
||||
private _currentPayloadClass = _heli getVariable ["braf_hoist_payload_class", ""];
|
||||
|
||||
if (isNull _rope) exitWith {
|
||||
_heli vehicleChat "no rope!";
|
||||
};
|
||||
|
||||
ropeCut [_rope, 0];
|
||||
ropeDestroy _rope;
|
||||
_heli setVariable ["hoistrope", nil];
|
||||
|
||||
if (_currentPayloadClass != "") then {
|
||||
private _spentPayloads = _heli getVariable ["braf_hoist_spent_payloads", []];
|
||||
|
||||
if !(_currentPayloadClass in _spentPayloads) then {
|
||||
_spentPayloads pushBack _currentPayloadClass;
|
||||
_heli setVariable ["braf_hoist_spent_payloads", _spentPayloads];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user