IW4-Dump-Files/maps/_documents.gsc

111 lines
3.0 KiB
Plaintext

/*
- each trigger_use has the same target name
trigger_use must have origin brush or it will be usable even if activate_notify is set
also needs that so the use icon goes away after use
- each trigger_use targets the script_model of the documents
- add script call, example script call:
thread maps\_documents::main(1, "Capture the enemy documents", "documents_triggers");
The "objective_number" parameter is the number of this objective,
the "array_targetname" parameter is the target name of the trigger_use(s)
The "activate_notify" parameter is the notify the bombs wait for before becoming usable
*/
main( objective_number, objective_text, array_targetname, activate_notify )
{
documents = getentarray( array_targetname, "targetname" );
println( array_targetname, " documents.size: ", documents.size );
for ( i = 0;i < documents.size;i++ )
{
documents[ i ].document = getent( documents[ i ].target, "targetname" );
documents[ i ].used = 0;
documents[ i ] thread document_think( activate_notify, array_targetname );
}
if ( documents.size != 0 )
{
remaining_documents = documents.size;
//obj_text = (objective_text1 + remaining_documents + objective_text2);
closest = get_closest_document( documents );
if ( isdefined( closest ) )
{
objective_add( objective_number, "active", objective_text, ( closest.document.origin ) );
objective_string( objective_number, objective_text, remaining_documents );
}
while ( 1 )
{
level waittill( array_targetname + " gotten" );
remaining_documents -- ;
objective_string( objective_number, objective_text, remaining_documents );
closest = get_closest_document( documents );
if ( isdefined( closest ) )
{
objective_position( objective_number, ( closest.document.origin ) );
objective_ring( objective_number );
}
else
{
objective_state( objective_number, "done" );
temp = ( "objective_complete" + objective_number );
println( temp );
level notify( temp );
}
}
}
}
get_closest_document( array )
{
range = 500000000;
ent = undefined;
for ( i = 0;i < array.size;i++ )
{
if ( !array[ i ].used )
{
newrange = distance( level.player getorigin(), array[ i ].document.origin );
if ( newrange < range )
{
range = newrange;
ent = i;
}
}
}
if ( isdefined( ent ) )
return array[ ent ];
else
return;
}
document_think( activate_notify, array_targetname )
{
// println ("waittill trigger");
// Press &&1 to pick up the documents.
self setHintString( &"SCRIPT_PLATFORM_HINTSTR_DOCUMENTS" );
if ( isdefined( activate_notify ) )
{
self maps\_utility::trigger_off();
self.document hide();
level waittill( activate_notify );
self.document show();
self maps\_utility::trigger_off();
}
self waittill( "trigger" );
println( "triggered" );
//self.document playsound ("paper_pickup");
level thread play_sound_in_space( "paper_pickup", self.document.origin );
self.used = 1;
self.document hide();
level notify( array_targetname + " gotten" );
// self playsound ("explo_plant_rand");
self maps\_utility::trigger_off();
}