cod5-sdk/raw/maps/_documents.gsc
2008-11-20 00:00:00 +00:00

118 lines
No EOL
3.2 KiB
Text

/*
- 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
*/
#include maps\_utility;
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;
newrange = undefined;
ent = undefined;
for (i=0;i<array.size;i++)
{
if (!array[i].used)
{
// SCRIPTER_MOD
// JesseS (3/16/2007 ): Added check for closest player here
players = get_players();
for (m = 0; m < players.size; m++)
{
newrange = distance (players[m] 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");
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 maps\_utility::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();
}