Jump to content
IceEagle132

[Tutorial] Fastrope Script

Recommended Posts

Author: [STELS]Zealot

1. Inside Altis_Life.Altis make a new folder called scripts. Inside that folder make a new file called zlt_fastrope.sqf:

/* 
v1g Fast Rope by [STELS]Zealot
*/

#define MAX_SPEED_WHILE_FASTROPING 10
#define MAX_SPEED_ROPES_AVAIL 20
#define STR_TOSS_ROPES "Toss Ropes"
#define STR_FAST_ROPE "Fast Rope (Press Space)"
#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"];

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"],
		[0.6,0.5,-25.9],
		[-0.8,0.5,-25.9]
	]
];

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 = (player == driver _veh) and (_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 = {
	_veh = vehicle player;
	if (player == driver _veh) then {
		(vehicle player) call zlt_fnc_cutropes;
	};
};

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



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, [], 98, 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, [], 99, 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, [], 98, 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, [], 99, false, false, '','not zlt_mutexAction and count ((vehicle player) getvariable ["zlt_ropes", []]) != 0 and player != driver vehicle player'];
}];

2. inside Altis_Life.Altis\init.sqf add:

 [] execVM “scripts\zlt_fastrope.sqf”;

All Done Enjoy.

  • Like 3

Share this post


Link to post
Share on other sites
On ‎1‎/‎1‎/‎2017 at 8:28 AM, Dark said:

AFAIK this is buggy - storing a vehicle with ropes out makes them solid objects infront of the NPC.

Then cut the ropes before storing?

Share this post


Link to post
Share on other sites



StartPr>
 0:24:06   Error Invalid number in expression
 0:24:06 File mpmissions\__cur_mp.Altis\init.sqf, line 7
 0:24:06 Error in expression <SafezoneScript\safezone.sqf";
[] execVM “scripts\zlt_fastrope.sqf”;
 
StartPr>
 0:24:06   Error position: <“scripts\zlt_fastrope.sqf”;

 

i get it in the right spot and the execute is there too

Edited by Taco Duck

Share this post


Link to post
Share on other sites
43 minutes ago, Hyper4u said:

when i jump out with rope thing, when i land i teleport back in to the heli?

try fast roping 10 meters above the ground, I believe any higher than 15 meters it tps you back up

Share this post


Link to post
Share on other sites
32 minutes ago, StonerGaming said:

try fast roping 10 meters above the ground, I believe any higher than 15 meters it tps you back up

i tried 5 meters it didnt work

Share this post


Link to post
Share on other sites
Just now, Hyper4u said:

i tried all of it 5 - 10 - 25 etc

How do I get this to work?   I added to the correct file and Noone in the server has the option to deploy ropes

Share this post


Link to post
Share on other sites
2 minutes ago, TwisT said:

How do I get this to work?   I added to the correct file and Noone in the server has the option to deploy ropes

are you using the right helis listed?

Share this post


Link to post
Share on other sites
Just now, StonerGaming said:

that was your issue usually when 2 or more people do it at once it glitches out

but i tried alone aswell and it didnt work

Share this post


Link to post
Share on other sites
3 minutes ago, TwisT said:

yes.  Nothing is happening.

Here's what you need to add

Open your stringtable.xml and add

        <Key>	   
			<Key ID="STR_Toss_Ropes">
            <Original>Toss Ropes</Original>
       </Key>
		<Key ID="STR_Cut_Ropes">
            <Original>Cut Ropes</Original>
       </Key>
		<Key ID="STR_Fast_Rope">
            <Original>Fast Rope</Original>
		</Key>

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...