mirror of
https://github.com/reaaLx/nx1-gsc-dump.git
synced 2025-04-19 15:52:54 +00:00
306 lines
8.8 KiB
Plaintext
306 lines
8.8 KiB
Plaintext
//****************************************************************************
|
|
// **
|
|
// Confidential - (C) Activision Publishing, Inc. 2010 **
|
|
// **
|
|
//****************************************************************************
|
|
// **
|
|
// Module: Mission Utils **
|
|
// **
|
|
// Created: 11/11/11 - Travis Chen (trchen x 4143) **
|
|
// **
|
|
//****************************************************************************
|
|
|
|
#include maps\_utility;
|
|
#include maps\_nx_utility;
|
|
#include common_scripts\utility;
|
|
#include maps\_vehicle;
|
|
#include maps\_anim;
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
player_start( player_start_struct_name )
|
|
{
|
|
// Move player to start
|
|
player_start_struct = GetStruct( player_start_struct_name, "targetname" );
|
|
level._player setOrigin( player_start_struct.origin );
|
|
level._player setPlayerAngles( player_start_struct.angles );
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
// Removes all ai NOW (except bulletshielded)
|
|
delete_all_ai_immediately()
|
|
{
|
|
aAI = getaiarray();
|
|
array_thread( aAI, ::delete_ai_not_bullet_shielded );
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
actor_detection_movement_control( dist, angle )
|
|
{
|
|
self endon ( "terminate_actor_detection" );
|
|
|
|
self thread stop_when_actor_in_front( dist, angle );
|
|
|
|
while ( 1 )
|
|
{
|
|
level waittill ( "ally_convoy_stop_actor_in_front" );
|
|
self Vehicle_SetSpeed( 0, 10 );
|
|
level waittill ( "ally_convoy_go_no_actor_in_front" );
|
|
self ResumeSpeed( 3 );
|
|
wait ( 0.05 );
|
|
}
|
|
}
|
|
|
|
stop_when_actor_in_front( dist, angle )
|
|
{
|
|
self endon ( "terminate_actor_detection" );
|
|
self.stop_due_to_actors_in_front = false;
|
|
|
|
while ( 1 )
|
|
{
|
|
if ( self vehicle_actors_in_front( dist, angle ))
|
|
{
|
|
if ( isDefined ( self.stop_due_to_actors_in_front ) && self.stop_due_to_actors_in_front == false )
|
|
{
|
|
level notify ( "ally_convoy_stop_actor_in_front" );
|
|
self.stop_due_to_actors_in_front = true;
|
|
//iPrintlnBold ( "##### Vehicle stopping due to actors in front" );
|
|
}
|
|
}
|
|
else if (!( self vehicle_actors_in_front( dist, angle )))
|
|
{
|
|
if ( isDefined ( self.stop_due_to_actors_in_front ) && self.stop_due_to_actors_in_front == true )
|
|
{
|
|
level notify ( "ally_convoy_go_no_actor_in_front" );
|
|
self.stop_due_to_actors_in_front = false;
|
|
//iPrintlnBold ( "##### Vehicle moving. Actors clear." );
|
|
}
|
|
}
|
|
wait ( 0.5 );
|
|
}
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
// Returns true if any actors (player, squad-mate or enemy) is standing in the way of the vehicle (within a specified angle and distance)
|
|
vehicle_actors_in_front( dist, angle )
|
|
{
|
|
actors_in_front = false;
|
|
|
|
if( vehicle_entity_in_front( level._player, dist, angle ) )
|
|
{
|
|
actors_in_front = true;
|
|
}
|
|
else
|
|
{
|
|
ai_array = GetAISpeciesArray( "all", "all" );
|
|
foreach( ai in ai_array )
|
|
{
|
|
if( vehicle_entity_in_front( ai, dist, angle ))
|
|
{
|
|
actors_in_front = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return actors_in_front;
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
// Setting up badplace. This thread runs on the vehicle trigger
|
|
vehicle_path_disconnector()
|
|
{
|
|
zone = getent( self.target, "targetname" );
|
|
assert( isdefined( zone ) );
|
|
zone notsolid();
|
|
zone.origin -= ( 0, 0, 1024 );
|
|
badplaceName = "vehicle_bad_place_brush_" + zone getEntityNumber();
|
|
|
|
for ( ;; )
|
|
{
|
|
self waittill( "trigger", vehicle );
|
|
|
|
//println ( "##### Vehicle trigger activated" );
|
|
|
|
if ( !isalive( level.vehicle_convoy[ "vehicle_convoy_1" ] ) || !isalive( level.vehicle_convoy[ "vehicle_convoy_2" ] ))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if ( !isdefined( vehicle ) )
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if ( ( vehicle != level.vehicle_convoy[ "vehicle_convoy_1" ] ) && ( vehicle != level.vehicle_convoy[ "vehicle_convoy_2" ] ))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if ( vehicle vehicle_getspeed() == 0 )
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if ( !isdefined( zone.pathsDisconnected ) )
|
|
{
|
|
zone solid();
|
|
|
|
badplace_brush( badplaceName, 0, zone, "allies", "axis" );
|
|
|
|
zone notsolid();
|
|
zone.pathsDisconnected = true;
|
|
println ( "##### Bad place brush created" );
|
|
}
|
|
|
|
self thread vehicle_reconnects_paths( zone, badplaceName );
|
|
}
|
|
}
|
|
|
|
vehicle_reconnects_paths( zone, badplaceName )
|
|
{
|
|
assert( isdefined( zone ) );
|
|
assert( isdefined( badplaceName ) );
|
|
zone notify( "waiting_for_path_reconnection" );
|
|
zone endon( "waiting_for_path_reconnection" );
|
|
|
|
level waittill ( "delete_bad_place_brush" );
|
|
|
|
zone solid();
|
|
badplace_delete( badplaceName );
|
|
zone notsolid();
|
|
zone.pathsDisconnected = undefined;
|
|
}
|
|
|
|
waitForVehicleToPass()
|
|
{
|
|
self waittillmatch( "trigger", level.vehicle_convoy[ "vehicle_convoy_2" ] );
|
|
|
|
level notify ( "delete_bad_place_brush" );
|
|
|
|
println ( "##### After delete the bad place brush" );
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
// Sets up leader spawner
|
|
leader_spawner_setup()
|
|
{
|
|
ally_spawners = GetEntArray( "actor_squad", "script_noteworthy" );
|
|
Assert( IsDefined( ally_spawners ));
|
|
|
|
found = false;
|
|
|
|
foreach( guy in ally_spawners )
|
|
{
|
|
if( IsDefined( guy.script_friendname ))
|
|
{
|
|
if( guy.script_friendname == "Baker" )
|
|
{
|
|
guy add_spawn_function( ::spawnfunc_leader );
|
|
found = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if( !found )
|
|
AssertMsg( "Could not find the squad leader spawner!" );
|
|
}
|
|
|
|
// Leader spawnfunc
|
|
spawnfunc_leader()
|
|
{
|
|
self.animname = "passengerfront";
|
|
level.leader = self;
|
|
self thread magic_bullet_shield();
|
|
level.leader set_battlechatter_id( "bak" );
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
// Spawns allies based on initial spawners
|
|
spawn_allies( location_objects )
|
|
{
|
|
spawners = GetEntArray( "actor_squad", "script_noteworthy" );
|
|
Assert( IsDefined( spawners ));
|
|
|
|
// Expected ally number is two less than the spawners because of the drivers
|
|
ally_num = spawners.size - 2;
|
|
|
|
if( location_objects.size != ally_num )
|
|
AssertMsg( "Ally # is not equal to position #: (" + ally_num + " / " + location_objects.size );
|
|
|
|
level.allies = [];
|
|
position_counter = 0;
|
|
|
|
for( i = 0; i < spawners.size; i++ )
|
|
{
|
|
if( IsDefined( spawners[ i ].script_startingposition ))
|
|
{
|
|
if( spawners[ i ].script_startingposition > 0 )
|
|
{
|
|
guy = spawners[ i ] spawn_ai();
|
|
Assert( IsDefined( guy ));
|
|
|
|
guy ForceTeleport( location_objects[ position_counter ].origin, location_objects[ position_counter ].angles );
|
|
level.allies = array_add( level.allies, guy );
|
|
position_counter++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
ally_spawner_setup()
|
|
{
|
|
level.allies = [];
|
|
|
|
array_spawn_function_noteworthy( "actor_squad", ::spawnfunc_allies );
|
|
|
|
// Keep ally variable up to date with allies (as they die off)
|
|
thread ally_global_watcher();
|
|
|
|
}
|
|
|
|
// Keep ally level variable up to date
|
|
ally_global_watcher()
|
|
{
|
|
while( 1 )
|
|
{
|
|
level.allies = GetAIArray( "allies" );
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
spawnfunc_allies()
|
|
{
|
|
self thread replace_on_death();
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|