240 lines
7.0 KiB
Plaintext
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;
|
|
|
|
} |