IW4-Dump-Files/maps/_heli_ride.gsc

240 lines
7.0 KiB
Plaintext

#include maps\_utility;
#include maps\_hud_util;
#include common_scripts\utility;
#include maps\_anim;
#include maps\_vehicle_aianim;
#include maps\_vehicle;
#include maps\_loadout;
//infolines here adds the info to the keys on the entity. This is because the info box doesn't persists with the classname change.
/*DISABLED gags_heli-ride-in_blackhawk_uk (1 0 0) (-16 -16 -24) (16 16 32) USABLE SPAWNER
STEPS TO GET GAGS_HELI_RIDE_IN_BLACKHAWK IN GAME:
1) put this in your GSC before _load::main():
maps\_blackhawk::main( "vehicle_blackhawk" );
2) create a helicopter path with a targetname "heli_ride_in"
3) On the node that you wish to have the helicopter unload, add the keypair "script_unload" "1"
4) call this function when you are ready to ride. dig into that function for all the available knobs.
heli = maps\_heli_ride::ride_start();"
default:"wikilink" "http://iwdocs.infinityward.net/ow.asp?GagsHeliRideInBlackhawk"
default:"classname" "misc_prefab"
default:"model" "prefabs\script_gags\heli_ride_in_blackhawk.map"
*/
/*DISABLED gags_heli-ride-in_blackhawk_us (1 0 0) (-16 -16 -24) (16 16 32) USABLE SPAWNER
STEPS TO GET GAGS_HELI_RIDE_IN_BLACKHAWK IN GAME:
1) put this in your GSC before _load::main():
maps\_blackhawk::main( "vehicle_blackhawk" );
2) create a helicopter path with a targetname "heli_ride_in"
3) On the node that you wish to have the helicopter unload, add the keypair "script_unload" "1"
4) call this function when you are ready to ride. dig into that function for all the available knobs.
heli = maps\_heli_ride::ride_start();"
default:"wikilink" "http://iwdocs.infinityward.net/ow.asp?GagsHeliRideInBlackhawk"
default:"classname" "misc_prefab"
default:"model" "prefabs\script_gags\heli_ride_in_blackhawk_us.map"
*/
//===========================================================================
//== FRIENDLY CHOPPER RIDE-IN ==
//===========================================================================
ride_setup( startnode, players_array )
{
// can't think of any reason not to have godmode on the riding vehicle.
godon();
//spawn the rope
getout_rigspawn( getanimatemodel(), 3 );
if ( !isdefined( players_array ) )
players_array = level.players;
foreach ( player in players_array )
thread attach_player( player, 3 );
speed = 95;
if ( isdefined( startnode.speed ) )
{
speed = startnode.speed;
}
// ADD THIS to overgrown thread heli_behavior();
self setairresistance( 30 );
self Vehicle_SetSpeed( speed, 40, level.heli_default_decel );//this is overriden instantly by the _vehicle system
// makes the helicopter go to a node.
vehicle_paths( startnode );
}
// attach player(s) to helicopter ride in
attach_player( player, position, animfudgetime )
{
player thread player_in_heli( self );
if ( getdvar( "fastrope_arms" ) == "" )
setdvar( "fastrope_arms", "0" );
if ( !isdefined( animfudgetime ) )
animfudgetime = 0;
assert( isdefined( self.riders ) );
assert( self.riders.size );
guy = undefined;
for ( i = 0; i < self.riders.size; i++ )
{
if ( self.riders[ i ].vehicle_position == position )
{
guy = self.riders[ i ];
guy.drone_delete_on_unload = true;
guy.playerpiggyback = true;
break;
}
}
//level.piggyback_guy = guy;//temp debug thing -z
assertex( !isai( guy ), "guy in position of player needs to have script_drone set, use script_startingposition ans script drone in your map" );
assert( isdefined( guy ) );
animpos = maps\_vehicle_aianim::anim_pos( self, position );
// guy stopanimscripted();
// guy stopuseanimtree();
guy notify( "newanim" );
guy detachall();
// guy setmodel( "" );
guy setmodel( "fastrope_arms" );
guy useanimtree( animpos.player_animtree );
thread maps\_vehicle_aianim::guy_idle( guy, position );
wait .1;
//player playerlinktoabsolute( guy, "tag_player" );
if( isdefined( level.little_bird ) )
player playerlinkto( guy, "tag_player", 0.35, 120, 28, 30, 30, false );
else
player playerlinkto( guy, "tag_player", 0.35, 60, 28, 30, 30, false );
//player playerlinktodelta( guy, "tag_player", 0.35, 60, 28, 30, 30, false );
//guy thread maps\_debug::drawtagforever( "tag_player", (1,0,0) );
player freezecontrols( false );
guy hide();
animtime = getanimlength( animpos.getout );
animtime -= animfudgetime;
self waittill( "unloading" );
if ( getdvar( "fastrope_arms" ) != "0" )
guy show();
player disableweapons();
// guy waittill( "jumpedout" );
//guy notsolid();
wait animtime;
player unlink();
player enableweapons();
setSavedDvar( "hud_drawhud", "1" );
level notify( "stop_draw_hud_on_death" );
}
// player control during helicopter ride in
player_in_heli( heli )
{
// This could get ugly with two players doing the same thing.
setsavedDvar( "g_friendlyNameDist", 0 );
setsavedDvar( "g_friendlyfireDist", 0 );
self hide_player_model();
self allowsprint( false );
self allowprone( false );
self allowstand( false );
self EnableInvulnerability();
self.ignoreme = true;
wait .05;
self setplayerangles( ( 0, 35, 0 ) );
heli waittill( "unloading" );
self notify( "stop_quake" );
wait 6;
autosave_by_name( "on_the_ground" );
self allowprone( false );
self allowstand( true );
self allowcrouch( false );// bounce the player out of crouch
wait .05;
self allowprone( true );
self allowcrouch( true );
self DisableInvulnerability();
self.ignoreme = false;
self allowsprint( true );
wait 4;// wait 5;// < -- allows player to move for a few frames before moved
// set player models and move them apart when landed
// TODO REMOVE THIS When we get anims for each player.
self show_player_model();
if ( self == level.player )
{
for ( i = 0;i < 24;i++ )
{
self setOrigin( self.origin + ( 2, 0, 0 ) );
wait 0.05;
}
}
setsavedDvar( "g_friendlyNameDist", 15000 );
setsavedDvar( "g_friendlyfireDist", 128 );
}
#using_animtree( "vehicles" );
player_heli_ropeanimoverride_idle( guy, tag, animation )
{
self endon( "unloading" );
while ( 1 )
maps\_vehicle_aianim::animontag( guy, tag, animation );
}
ride_start( optional_players_array, optional_max_riders )
{
targetname = "heli_ride_in";
pathstart = getentarray( targetname, "targetname" );
assertEx( pathstart.size <= 1, "too many script_origins with targetname \"" + targetname + "\" " );
if ( !pathstart.size )
{
pathstart = getstructarray( "heli_ride_in", "targetname" );
assertEx( pathstart.size <= 1, "too many script_structs with targetname \"heli_ride_in\" " );
if ( !pathstart.size )
assertMSG( "no helicopter paths with \"heli_ride_in\", can't start ride" );
}
pathstart = pathstart[ 0 ];
assertex( isdefined( level.gag_heliride_spawner ), "can't find heliride spawner. sure you placed the prefab?" );
//strip away those non riders.
if ( isdefined( optional_max_riders ) )
vehicle_spawn_group_limit_riders( level.gag_heliride_spawner.script_vehicleride, optional_max_riders );
vehicle = vehicle_spawn( level.gag_heliride_spawner );
vehicle thread ride_setup( pathstart, optional_players_array );
return vehicle;
}