PsyArcher

Helicopter Fastrope

7 posts in this topic

Hello, I am new to the Exile Mod Community, but I have had fun playing this particular mod in the past couple of weeks. On the past servers I have played on there is a feature for Helicopters, FastRope. This feature allows users in the designated seats in the Helicopter to select a scroll wheel menu item, click it, and depending on the speed of the helicopter it will lower you to the ground. This feature is good for: Hot LZ Troop drop-off, adding a new point of entry on bases, accessing lookout spots that are not normally accessible (ex: A roof overlooking a mission/base), and mostly for dropping off your buddies in a short period of time allowing you to fly off and do other things. I am not educated in the field of Scripting, or how to implement these features, but I know this exists and am asking someone of authority to look into this option, or if it will not happen please also let me know. Thank you.

  • Like 1

Share this post


Link to post
Share on other sites
Advertisement

I do not take any credit for this script, it's been shared a couple of times on the forum. 

VLG Fast Rope by [STELS]Zealot

// v1g Fast Rope by [STELS]Zealot

#define MAX_SPEED_WHILE_FASTROPING 10
#define MAX_SPEED_ROPES_AVAIL 30


#define STR_TOSS_ROPES "Toss Ropes"
#define STR_FAST_ROPE "Fast Rope"
#define STR_CUT_ROPES "Cut Ropes"


if (isdedicated) exitwith {};
waituntil {player == player};

zlt_rope_ropes = [];
zlt_mutexAction = false;

zlt_rope_helis = ["O_Heli_Light_02_unarmed_F","O_Heli_Light_02_F","B_Heli_Transport_01_F","B_Heli_Transport_01_camo_F","O_Heli_Attack_02_F","O_Heli_Attack_02_black_F","I_Heli_Transport_02_F","B_Heli_Light_01_F","I_Heli_light_03_F","I_Heli_light_03_unarmed_F","Exile_Chopper_Hummingbird_Green"];
zlt_rope_helidata = 
[
    [
        ["O_Heli_Light_02_unarmed_F", "O_Heli_Light_02_F"],
        [1.35,1.35,-24.95],
        [-1.45,1.35,-24.95]
    ],
    [
        ["B_Heli_Transport_01_F", "B_Heli_Transport_01_camo_F"],
        [-1.11,2.5,-24.7],
        [1.11,2.5,-24.7]
    ],
    [
        ["O_Heli_Attack_02_F", "O_Heli_Attack_02_black_F"],
        [1.3,1.3,-25],
        [-1.3,1.3,-25]
    ],
    [
        ["I_Heli_Transport_02_F"],
        [0,-5,-26],
        []
    ],    
    [
        ["B_Heli_Light_01_F", "Exile_Chopper_Hummingbird_Green"],
        [0.6,0.5,-25.9],
        [-0.8,0.5,-25.9]
    ],
    [
        ["I_Heli_light_03_F", "I_Heli_light_03_unarmed_F"],
        [-0.95,3.0,-25.82],
        [0.8,3.0,-25.82]
    ]
];


zlt_fnc_tossropes = {
    private ["_heli","_ropes","_oropes","_rope"];
    _heli = _this;
    _ropes = [];
    _oropes = _heli getvariable ["zlt_ropes",[]];
    if (count _oropes != 0 ) exitwith {};
    _i = 0;
    {
        if ((typeof _heli) in (_x select 0)) exitwith {
            _ropes = _ropes + [_x select 1];
            if ( count (_x select 2) !=0 ) then { 
                _ropes = _ropes + [_x select 2];
            };
        };
        _i = _i +1;
    } foreach zlt_rope_helidata;
    
    sleep random 0.3;
    if ( count (_heli getvariable ["zlt_ropes",[]]) != 0 ) exitwith { zlt_mutexAction = false; };
    _heli animateDoor ['door_R', 1];
    _heli animateDoor ['door_L', 1];
    {
        _rope = createVehicle ["land_rope_f", [0,0,0], [], 0, "CAN_COLLIDE"];
        _rope setdir (getdir _heli);
        _rope attachto [_heli, _x];
        _oropes = _oropes + [_rope];
    } foreach _ropes;
    _heli setvariable ["zlt_ropes",_oropes,true];
    
    _heli spawn {
        private ["_heli","_ropes"];
        _heli = _this;
        while {alive _heli and count (_heli getvariable ["zlt_ropes", []]) != 0 and abs (speed _heli) < MAX_SPEED_ROPES_AVAIL } do {
            sleep 0.3;
        };
        _ropes = (_heli getvariable ["zlt_ropes", []]);
        {deletevehicle _x} foreach _ropes;
        _heli setvariable ["zlt_ropes", [], true];
    };

};

zlt_fnc_ropes_cond = {
    _veh = vehicle player;
    _flag = (_veh != player) and {(not zlt_mutexAction)} and {count (_veh getvariable ["zlt_ropes", []]) == 0} and { (typeof _veh) in zlt_rope_helis } and {alive player and alive _veh and (abs (speed _veh) < MAX_SPEED_ROPES_AVAIL ) };
    _flag;

};

zlt_fnc_fastropeaiunits = {
        private ["_heli","_grunits"];
        diag_log ["zlt_fnc_fastropeaiunits", _this];
        _heli = _this select 0;
        _grunits = _this select 1;

        dostop (driver _heli );
        (driver _heli) setBehaviour "Careless"; 
        (driver _heli) setCombatMode "Blue"; 
        
        _heli spawn zlt_fnc_tossropes;

        [_heli, _grunits] spawn {
            private ["_units","_heli"];
            sleep random 0.5;
            _units = _this select 1;
            _heli = (_this select 0);
            _units = _units - [player];
            _units = _units - [driver _heli];
            {if (!alive _x or isplayer _x or vehicle _x != _heli) then {_units = _units - [_x];}; } foreach _units;
                        
            { sleep (0.5 + random 0.7); _x spawn zlt_fnc_fastropeUnit; } foreach _units;
            waituntil {sleep 0.5; { (getpos _x select 2) < 1 } count _units == count _units; };
            sleep 10;
            (driver _heli) doFollow (leader group (driver _heli ));
            (driver _heli) setBehaviour "Aware"; 
            (driver _heli) setCombatMode "White"; 
            _heli call zlt_fnc_cutropes;
            
        };
};


zlt_fnc_fastrope = {
    diag_log ["fastrope", _this];
    zlt_mutexAction = true;
    sleep random 0.3;
    if (player == leader group player) then {
        [vehicle player, units group player] call zlt_fnc_fastropeaiunits;
    };
    player call zlt_fnc_fastropeUnit;
    zlt_mutexAction = false;
};

zlt_fnc_fastropeUnit = {
    private ["_unit","_heli","_ropes","_rope","_zmax","_zdelta","_zc"];
    _unit = _this;
    _heli = vehicle _unit;
    if (_unit == _heli) exitWith {};

    _ropes = (_heli getvariable ["zlt_ropes", []]);
    if (count _ropes == 0) exitwith {};
    
    _rope = _ropes call BIS_fnc_selectRandom;
    _zmax = 22;
    _zdelta = 7 / 10  ;
    
    _zc = _zmax;
    _unit action ["eject", _heli];
    _unit switchmove "gunner_standup01";
    
    _unit setpos [(getpos _unit select 0), (getpos _unit select 1), 0 max ((getpos _unit select 2) - 3)];
    while {alive _unit and (getpos _unit select 2) > 1 and (abs (speed _heli)) < MAX_SPEED_WHILE_FASTROPING  and _zc > -24} do {
        _unit attachTo [_rope, [0,0,_zc]];
        _zc = _zc - _zdelta;
        sleep 0.1;
    };
    _unit switchmove "";
    detach _unit;

};


zlt_fnc_cutropes = {
    _veh = _this;
    _ropes = (_veh getvariable ["zlt_ropes", []]);
    {deletevehicle _x} foreach _ropes;
    _veh setvariable ["zlt_ropes", [], true];
    _veh animateDoor ['door_R', 0];
    _veh animateDoor ['door_L', 0];

};

zlt_fnc_removeropes = {
    (vehicle player) call zlt_fnc_cutropes;
};

zlt_fnc_createropes = {
    zlt_mutexAction = true;
    (vehicle player) call zlt_fnc_tossropes;
    zlt_mutexAction = false;
};

 

player createDiarySubject [STR_SCRIPTS_NAME,STR_SCRIPTS_NAME];
player createDiaryRecord [STR_SCRIPTS_NAME,[STR_SCRIPT_NAME, STR_HELP]];

player addAction["<t color='#ffff00'>"+STR_TOSS_ROPES+"</t>", zlt_fnc_createropes, [], -1, false, false, '','[] call zlt_fnc_ropes_cond'];
player addAction["<t color='#ff0000'>"+STR_CUT_ROPES+"</t>", zlt_fnc_removeropes, [], -1, false, false, '','not zlt_mutexAction and count ((vehicle player) getvariable ["zlt_ropes", []]) != 0'];
player addAction["<t color='#00ff00'>"+STR_FAST_ROPE+"</t>", zlt_fnc_fastrope, [], 15, false, false, '','not zlt_mutexAction and count ((vehicle player) getvariable ["zlt_ropes", []]) != 0 and player != driver vehicle player'];

player addEventHandler ["Respawn", {
    player addAction["<t color='#ffff00'>"+STR_TOSS_ROPES+"</t>", zlt_fnc_createropes, [], -1, false, false, '','[] call zlt_fnc_ropes_cond'];
    player addAction["<t color='#ff0000'>"+STR_CUT_ROPES+"</t>", zlt_fnc_removeropes, [], -1, false, false, '','not zlt_mutexAction and count ((vehicle player) getvariable ["zlt_ropes", []]) != 0'];
    player addAction["<t color='#00ff00'>"+STR_FAST_ROPE+"</t>", zlt_fnc_fastrope, [], 15, false, false, '','not zlt_mutexAction and count ((vehicle player) getvariable ["zlt_ropes", []]) != 0 and player != driver vehicle player'];
}];

And add following to init.sqf

[] execVM "scripts\zlt_fastrope.sqf"; // ZLT Fastrope

  • Like 1

Share this post


Link to post
Share on other sites

I do not take any credit for this script, it's been shared a couple of times on the forum. 

VLG Fast Rope by [STELS]Zealot

Hidden Content

And add following to init.sqf

Hidden Content

@ka0s

I have already stated that I have no experience in the field of scripts. How would the script you posted be implemented? Would it require each client to use or would the Developers imbed it into the mod itself?

Share this post


Link to post
Share on other sites

Basically you need to unpack your Exile.Altis.pbo file. 

This requires a PBOmanager. 

When your mission is unpacked you'll see something like this (This is my mission file, I got a lot of stuff in there.)

ExileFolderMap.png

Open a notepad, paste the script in it, and save it as: fastrope.sqf

Once you're done, open your init.sqf with a notepad and add: [] execVM "fastrope.sqf";

I obviously have a very different folder structure, but that is only for me to easier find my stuff. 

Does it make sense?

Share this post


Link to post
Share on other sites

So when I install this, how would I be able to use it. Example: If my buddy was flying a mohawk i was sitting in the back, and i wanted to fastrope, would i be able to? Or would everyone in the helicopter need to have the script?

Share this post


Link to post
Share on other sites
Advertisement

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.