mirror of
https://github.com/reaaLx/nx1-gsc-dump.git
synced 2025-04-21 16:45:45 +00:00
250 lines
8.2 KiB
Plaintext
250 lines
8.2 KiB
Plaintext
//****************************************************************************
|
|
// **
|
|
// Confidential - (C) Activision Publishing, Inc. 2010 **
|
|
// **
|
|
//****************************************************************************
|
|
// **
|
|
// Module: _OBJECTIVE UTIL **
|
|
// **
|
|
// Created: 1/27/2010 - Travis Chen **
|
|
// **
|
|
//****************************************************************************
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
// README: wait_for_objective
|
|
// maps\nx_lunar_util::wait_for_objective( objective_num, objective_text, curr_trigger, next_trigger );
|
|
// curr_trigger - the start point trigger of the objective
|
|
// next_trigger - the end point trigger of the objective
|
|
// additional_current - makes the objective the additional current
|
|
|
|
// KenM Notes:
|
|
// The trigger type used for the start and end points should be trigger_multiple.
|
|
// To create a path of waypoints, simply link each waypoint script_origin to the next in Radiant.
|
|
// Give each one a radius KVP to indicate how close the player must be to trigger the waypoint.
|
|
|
|
wait_for_objective( objective, objective_text, curr_trigger, next_trigger, additional_current )
|
|
{
|
|
// Process objective for string
|
|
objective = objective_add_to_level_var( objective );
|
|
|
|
// Get target waypoint, add objective
|
|
waypoint = get_objective_waypoint( curr_trigger );
|
|
Objective_Add( objective, "current", objective_text, waypoint.origin );
|
|
|
|
// Make objective additional current
|
|
if( IsDefined( additional_current ) && additional_current )
|
|
{
|
|
Objective_AdditionalCurrent( objective );
|
|
}
|
|
|
|
// Check if we have a path of waypoints
|
|
if( IsDefined( waypoint.target ) )
|
|
{
|
|
objective_waypoint_path( objective, waypoint );
|
|
}
|
|
|
|
// Wait for trigger
|
|
wait_for_objective_trigger( next_trigger );
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
wait_for_objective_additional( objective, objective_text, curr_trigger, next_trigger )
|
|
{
|
|
// Check objective reference against level._objective
|
|
objective = objective_string_convert( objective );
|
|
|
|
wait_for_objective( objective, objective_text, curr_trigger, next_trigger, true );
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
get_objective_waypoint( trigger_name )
|
|
{
|
|
trigger = GetEnt( trigger_name, "targetname" );
|
|
if( !IsDefined( trigger ) )
|
|
{
|
|
AssertMsg( "Objective start trigger " + trigger_name + " doesn't exist" );
|
|
}
|
|
|
|
if( IsDefined( trigger.target ) )
|
|
{
|
|
// Return the waypoint
|
|
waypoint = getEnt( trigger.target, "targetname" );
|
|
if( !IsDefined( waypoint ) )
|
|
{
|
|
AssertMsg( "Objective trigger " + trigger_name + " target doesn't exist" );
|
|
}
|
|
return waypoint;
|
|
}
|
|
else
|
|
{
|
|
AssertMsg( "Objective trigger " + trigger_name + " doesn't have target" );
|
|
}
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
objective_waypoint_path( objective, waypoint )
|
|
{
|
|
// Check objective reference against level._objective
|
|
objective = objective_string_convert( objective );
|
|
|
|
// Loop through waypoints and wait for player proximity
|
|
while( 1 )
|
|
{
|
|
// End of waypoint chain
|
|
if( !IsDefined( waypoint.target ) )
|
|
{
|
|
break;
|
|
}
|
|
|
|
// Wait for player in waypoint radius proximity
|
|
wait_for_player_near_waypoint( waypoint );
|
|
|
|
// Get next waypoint and update objective position
|
|
waypoint = getEnt( waypoint.target, "targetname" );
|
|
objective_position( objective, waypoint.origin );
|
|
}
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
wait_for_player_near_waypoint( waypoint )
|
|
{
|
|
// Wait for player in waypoint radius proximity
|
|
while( 1 )
|
|
{
|
|
player_near_waypoint = distance( level._player.origin, waypoint.origin ) < waypoint.radius;
|
|
if( player_near_waypoint )
|
|
{
|
|
break;
|
|
}
|
|
wait( 0.05 );
|
|
}
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
wait_for_objective_trigger( trigger_name )
|
|
{
|
|
trigger = GetEnt( trigger_name, "targetname" );
|
|
|
|
if( !IsDefined( trigger ) )
|
|
{
|
|
AssertMsg( "Objective end trigger " + trigger_name + " doesn't exist" );
|
|
}
|
|
|
|
trigger waittill( "trigger" );
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
// Loads all objectives into level._objective
|
|
objective_add_to_level_var( objective )
|
|
{
|
|
// Check to see if objective is string or int and add to a global objective array (level._objective[ NAME OR NUMBER ] = NUMBER)
|
|
if( IsString( objective ))
|
|
{
|
|
obj_number = undefined;
|
|
|
|
if( isdefined( level._objective ))
|
|
{
|
|
obj_number = level._objective.size;
|
|
|
|
// Look for duplicate entry
|
|
if( isdefined( level._objective[ objective ] ))
|
|
{
|
|
AssertMsg( "Objective '" + objective + "' already exists!" );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
obj_number = 1;
|
|
}
|
|
|
|
level._objective[ objective ] = obj_number;
|
|
objective = obj_number;
|
|
}
|
|
else
|
|
{
|
|
// Look for duplicate entry
|
|
if( isdefined( level._objective ))
|
|
{
|
|
if( isdefined( level._objective[ objective ] ))
|
|
{
|
|
AssertMsg( "Objective '" + objective + "' already exists!" );
|
|
}
|
|
}
|
|
|
|
level._objective[ objective ] = objective;
|
|
}
|
|
|
|
return objective;
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
// Checks to see if user is referencing string or number in level._objective, returns number
|
|
objective_string_convert( objective )
|
|
{
|
|
if( !isdefined( level._objective ))
|
|
{
|
|
AssertMsg( "Objective '" + objective + "' does not exist!" );
|
|
}
|
|
|
|
if( !isdefined( level._objective[ objective ] ))
|
|
{
|
|
AssertMsg( "Objective '" + objective + "' does not exist!" );
|
|
}
|
|
|
|
if( IsString( objective ))
|
|
{
|
|
objective = level._objective[ objective ];
|
|
}
|
|
|
|
return objective;
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|
|
// Adds an objective to level._objective and to game
|
|
objective_add_string( string, state, text )
|
|
{
|
|
Objective_Add( objective_add_to_level_var( string ), state, text );
|
|
}
|
|
|
|
//*******************************************************************
|
|
// *
|
|
// *
|
|
//*******************************************************************
|
|
|