cod4-sdk/raw/maps/mp/_destructables.gsc
2008-01-19 00:00:00 +00:00

100 lines
2.2 KiB
Text

init()
{
// level.destructableFX = loadfx("breakables/exp_wall_cinderblock_96");
ents = getentarray("destructable", "targetname");
if (getdvar("scr_destructables") == "0")
{
for (i = 0; i < ents.size; i++)
ents[i] delete();
}
else
{
for (i = 0; i < ents.size; i++)
{
ents[i] thread destructable_think();
}
}
}
destructable_think()
{
accumulate = 40;
threshold = 0;
if (isdefined(self.script_accumulate))
accumulate = self.script_accumulate;
if (isdefined(self.script_threshold))
threshold = self.script_threshold;
if (isdefined(self.script_destructable_area)) {
areas = strtok(self.script_destructable_area, " ");
for (i = 0; i < areas.size; i++)
self blockArea(areas[i]);
}
if ( isdefined( self.script_fxid ) )
self.fx = loadfx( self.script_fxid );
dmg = 0;
self setcandamage(true);
while(1)
{
self waittill("damage", amount, other);
if (amount >= threshold)
{
dmg += amount;
if (dmg >= accumulate)
{
self thread destructable_destruct();
return;
}
}
}
}
destructable_destruct()
{
ent = self;
if (isdefined(self.script_destructable_area)) {
areas = strtok(self.script_destructable_area, " ");
for (i = 0; i < areas.size; i++)
self unblockArea(areas[i]);
}
if ( isdefined( ent.fx ) )
playfx( ent.fx, ent.origin + (0,0,6) );
ent delete();
}
blockArea(area)
{
spawns = getentarray("mp_tdm_spawn", "classname");
blockEntsInArea(spawns, area);
spawns = getentarray("mp_dm_spawn", "classname");
blockEntsInArea(spawns, area);
}
blockEntsInArea(ents, area)
{
for (i = 0; i < ents.size; i++) {
if (!isdefined(ents[i].script_destructable_area) || ents[i].script_destructable_area != area)
continue;
ents[i].blockedoff = true;
}
}
unblockArea(area)
{
spawns = getentarray("mp_tdm_spawn", "classname");
unblockEntsInArea(spawns, area);
spawns = getentarray("mp_dm_spawn", "classname");
unblockEntsInArea(spawns, area);
}
unblockEntsInArea(ents, area)
{
for (i = 0; i < ents.size; i++) {
if (!isdefined(ents[i].script_destructable_area) || ents[i].script_destructable_area != area)
continue;
ents[i].blockedoff = false;
}
}