111 lines
3.0 KiB
Plaintext
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();
|
|
} |