100 lines
2.2 KiB
Text
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;
|
|
}
|
|
}
|