mirror of
https://github.com/InfinityLoader/IL-GSC.git
synced 2025-06-28 18:37:53 -05:00
1572 lines
40 KiB
Plaintext
1572 lines
40 KiB
Plaintext
/*******************************************************************
|
|
* Decompiled By: Bog
|
|
* Decompiled File: common_scripts\_destructible.gsc
|
|
* Game: Call of Duty: Modern Warfare Remastered
|
|
* Platform: PC
|
|
* Function Count: 56
|
|
* Decompile Time: 883 ms
|
|
* Timestamp: 10/27/2023 2:46:39 AM
|
|
*******************************************************************/
|
|
|
|
//Function Number: 1
|
|
init()
|
|
{
|
|
level.destructiblespawnedentslimit = 50;
|
|
level.destructiblespawnedents = [];
|
|
find_destructibles();
|
|
}
|
|
|
|
//Function Number: 2
|
|
destructible_create(param_00,param_01,param_02,param_03,param_04)
|
|
{
|
|
if(!isdefined(level.destructible_type))
|
|
{
|
|
level.destructible_type = [];
|
|
}
|
|
|
|
var_05 = level.destructible_type.size;
|
|
var_05 = level.destructible_type.size;
|
|
level.destructible_type[var_05] = spawnstruct();
|
|
level.destructible_type[var_05].v["type"] = param_00;
|
|
level.destructible_type[var_05].parts = [];
|
|
level.destructible_type[var_05].parts[0][0] = spawnstruct();
|
|
level.destructible_type[var_05].parts[0][0].v["modelName"] = self.model;
|
|
level.destructible_type[var_05].parts[0][0].v["health"] = param_01;
|
|
level.destructible_type[var_05].parts[0][0].v["validAttackers"] = param_02;
|
|
level.destructible_type[var_05].parts[0][0].v["validDamageZone"] = param_03;
|
|
level.destructible_type[var_05].parts[0][0].v["validDamageCause"] = param_04;
|
|
level.destructible_type[var_05].parts[0][0].v["godModeAllowed"] = 1;
|
|
}
|
|
|
|
//Function Number: 3
|
|
destructible_part(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09)
|
|
{
|
|
var_0A = level.destructible_type.size - 1;
|
|
var_0B = level.destructible_type[var_0A].parts.size;
|
|
var_0C = 0;
|
|
destructible_info(var_0B,var_0C,param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09);
|
|
}
|
|
|
|
//Function Number: 4
|
|
destructible_state(param_00,param_01,param_02,param_03,param_04,param_05,param_06)
|
|
{
|
|
var_07 = level.destructible_type.size - 1;
|
|
var_08 = level.destructible_type[var_07].parts.size - 1;
|
|
var_09 = level.destructible_type[var_07].parts[var_08].size;
|
|
destructible_info(var_08,var_09,param_00,param_01,param_02,param_03,param_04,param_05,undefined,undefined,param_06);
|
|
}
|
|
|
|
//Function Number: 5
|
|
destructible_fx(param_00,param_01,param_02)
|
|
{
|
|
param_01 = try_override_destructible_fx(param_01);
|
|
if(!isdefined(param_02))
|
|
{
|
|
param_02 = 1;
|
|
}
|
|
|
|
var_03 = level.destructible_type.size - 1;
|
|
var_04 = level.destructible_type[var_03].parts.size - 1;
|
|
var_05 = level.destructible_type[var_03].parts[var_04].size - 1;
|
|
level.destructible_type[var_03].parts[var_04][var_05].v["fx_filename"] = param_01;
|
|
level.destructible_type[var_03].parts[var_04][var_05].v["fx_tag"] = param_00;
|
|
level.destructible_type[var_03].parts[var_04][var_05].v["fx_useTagAngles"] = param_02;
|
|
}
|
|
|
|
//Function Number: 6
|
|
destructible_loopfx(param_00,param_01,param_02)
|
|
{
|
|
param_01 = try_override_destructible_fx(param_01);
|
|
var_03 = level.destructible_type.size - 1;
|
|
var_04 = level.destructible_type[var_03].parts.size - 1;
|
|
var_05 = level.destructible_type[var_03].parts[var_04].size - 1;
|
|
level.destructible_type[var_03].parts[var_04][var_05].v["loopfx_filename"] = param_01;
|
|
level.destructible_type[var_03].parts[var_04][var_05].v["loopfx_tag"] = param_00;
|
|
level.destructible_type[var_03].parts[var_04][var_05].v["loopfx_rate"] = param_02;
|
|
}
|
|
|
|
//Function Number: 7
|
|
try_override_destructible_fx(param_00)
|
|
{
|
|
if(!isdefined(level.destructible_effect_override))
|
|
{
|
|
return param_00;
|
|
}
|
|
|
|
var_01 = getarraykeys(level.destructible_effect_override);
|
|
foreach(var_03 in var_01)
|
|
{
|
|
if(var_03 == param_00)
|
|
{
|
|
return level.destructible_effect_override[var_03];
|
|
}
|
|
}
|
|
|
|
return param_00;
|
|
}
|
|
|
|
//Function Number: 8
|
|
destructible_healthdrain(param_00,param_01,param_02,param_03)
|
|
{
|
|
var_04 = level.destructible_type.size - 1;
|
|
var_05 = level.destructible_type[var_04].parts.size - 1;
|
|
var_06 = level.destructible_type[var_04].parts[var_05].size - 1;
|
|
level.destructible_type[var_04].parts[var_05][var_06].v["healthdrain_amount"] = param_00;
|
|
level.destructible_type[var_04].parts[var_05][var_06].v["healthdrain_interval"] = param_01;
|
|
level.destructible_type[var_04].parts[var_05][var_06].v["badplace_radius"] = param_02;
|
|
level.destructible_type[var_04].parts[var_05][var_06].v["badplace_team"] = param_03;
|
|
}
|
|
|
|
//Function Number: 9
|
|
destructible_sound(param_00,param_01)
|
|
{
|
|
var_02 = level.destructible_type.size - 1;
|
|
var_03 = level.destructible_type[var_02].parts.size - 1;
|
|
var_04 = level.destructible_type[var_02].parts[var_03].size - 1;
|
|
if(!isdefined(level.destructible_type[var_02].parts[var_03][var_04].v["sound"]))
|
|
{
|
|
level.destructible_type[var_02].parts[var_03][var_04].v["sound"] = [];
|
|
level.destructible_type[var_02].parts[var_03][var_04].v["soundCause"] = [];
|
|
}
|
|
|
|
var_05 = level.destructible_type[var_02].parts[var_03][var_04].v["sound"].size;
|
|
level.destructible_type[var_02].parts[var_03][var_04].v["sound"][var_05] = param_00;
|
|
level.destructible_type[var_02].parts[var_03][var_04].v["soundCause"][var_05] = param_01;
|
|
}
|
|
|
|
//Function Number: 10
|
|
destructible_loopsound(param_00,param_01)
|
|
{
|
|
var_02 = level.destructible_type.size - 1;
|
|
var_03 = level.destructible_type[var_02].parts.size - 1;
|
|
var_04 = level.destructible_type[var_02].parts[var_03].size - 1;
|
|
if(!isdefined(level.destructible_type[var_02].parts[var_03][var_04].v["loopsound"]))
|
|
{
|
|
level.destructible_type[var_02].parts[var_03][var_04].v["loopsound"] = [];
|
|
level.destructible_type[var_02].parts[var_03][var_04].v["loopsoundCause"] = [];
|
|
}
|
|
|
|
var_05 = level.destructible_type[var_02].parts[var_03][var_04].v["loopsound"].size;
|
|
level.destructible_type[var_02].parts[var_03][var_04].v["loopsound"][var_05] = param_00;
|
|
level.destructible_type[var_02].parts[var_03][var_04].v["loopsoundCause"][var_05] = param_01;
|
|
}
|
|
|
|
//Function Number: 11
|
|
destructible_anim(param_00,param_01,param_02,param_03)
|
|
{
|
|
var_04 = level.destructible_type.size - 1;
|
|
var_05 = level.destructible_type[var_04].parts.size - 1;
|
|
var_06 = level.destructible_type[var_04].parts[var_05].size - 1;
|
|
if(!isdefined(param_03))
|
|
{
|
|
level.destructible_type[var_04].parts[var_05][var_06].v["anim"] = param_00;
|
|
level.destructible_type[var_04].parts[var_05][var_06].v["animTree"] = param_01;
|
|
level.destructible_type[var_04].parts[var_05][var_06].v["animType"] = param_02;
|
|
return;
|
|
}
|
|
|
|
level.destructible_type[var_04].parts[var_05][var_06].v["partAnim"] = param_00;
|
|
level.destructible_type[var_04].parts[var_05][var_06].v["partAnimTree"] = param_01;
|
|
level.destructible_type[var_04].parts[var_05][var_06].v["partAnimType"] = param_02;
|
|
}
|
|
|
|
//Function Number: 12
|
|
destructible_physics()
|
|
{
|
|
var_00 = level.destructible_type.size - 1;
|
|
var_01 = level.destructible_type[var_00].parts.size - 1;
|
|
var_02 = level.destructible_type[var_00].parts[var_01].size - 1;
|
|
level.destructible_type[var_00].parts[var_01][var_02].v["physics"] = 1;
|
|
}
|
|
|
|
//Function Number: 13
|
|
destructible_explode(param_00,param_01,param_02,param_03,param_04)
|
|
{
|
|
var_05 = level.destructible_type.size - 1;
|
|
var_06 = level.destructible_type[var_05].parts.size - 1;
|
|
var_07 = level.destructible_type[var_05].parts[var_06].size - 1;
|
|
level.destructible_type[var_05].parts[var_06][var_07].v["explode_force_min"] = param_00;
|
|
level.destructible_type[var_05].parts[var_06][var_07].v["explode_force_max"] = param_01;
|
|
level.destructible_type[var_05].parts[var_06][var_07].v["explode_range"] = param_02;
|
|
level.destructible_type[var_05].parts[var_06][var_07].v["explode_mindamage"] = param_03;
|
|
level.destructible_type[var_05].parts[var_06][var_07].v["explode_maxdamage"] = param_04;
|
|
}
|
|
|
|
//Function Number: 14
|
|
destructible_info(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B)
|
|
{
|
|
var_0C = level.destructible_type.size - 1;
|
|
level.destructible_type[var_0C].parts[param_00][param_01] = spawnstruct();
|
|
level.destructible_type[var_0C].parts[param_00][param_01].v["modelName"] = param_03;
|
|
level.destructible_type[var_0C].parts[param_00][param_01].v["tagName"] = param_02;
|
|
level.destructible_type[var_0C].parts[param_00][param_01].v["health"] = param_04;
|
|
level.destructible_type[var_0C].parts[param_00][param_01].v["validAttackers"] = param_05;
|
|
level.destructible_type[var_0C].parts[param_00][param_01].v["validDamageZone"] = param_06;
|
|
level.destructible_type[var_0C].parts[param_00][param_01].v["validDamageCause"] = param_07;
|
|
level.destructible_type[var_0C].parts[param_00][param_01].v["alsoDamageParent"] = param_08;
|
|
level.destructible_type[var_0C].parts[param_00][param_01].v["physicsOnExplosion"] = param_09;
|
|
level.destructible_type[var_0C].parts[param_00][param_01].v["grenadeImpactDeath"] = param_0A;
|
|
level.destructible_type[var_0C].parts[param_00][param_01].v["godModeAllowed"] = 0;
|
|
if(!isdefined(param_0B))
|
|
{
|
|
level.destructible_type[var_0C].parts[param_00][param_01].v["createEntityForAnimation"] = 0;
|
|
return;
|
|
}
|
|
|
|
level.destructible_type[var_0C].parts[param_00][param_01].v["createEntityForAnimation"] = param_0B;
|
|
}
|
|
|
|
//Function Number: 15
|
|
find_destructibles()
|
|
{
|
|
common_scripts\utility::array_thread(getentarray("destructible","targetname"),::setup_destructibles);
|
|
}
|
|
|
|
//Function Number: 16
|
|
precache_destructibles()
|
|
{
|
|
if(isdefined(level.destructible_type[self.destuctableinfo].parts))
|
|
{
|
|
for(var_00 = 0;var_00 < level.destructible_type[self.destuctableinfo].parts.size;var_00++)
|
|
{
|
|
for(var_01 = 0;var_01 < level.destructible_type[self.destuctableinfo].parts[var_00].size;var_01++)
|
|
{
|
|
if(level.destructible_type[self.destuctableinfo].parts[var_00].size <= var_01)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(isdefined(level.destructible_type[self.destuctableinfo].parts[var_00][var_01].v["modelName"]))
|
|
{
|
|
precachemodel(level.destructible_type[self.destuctableinfo].parts[var_00][var_01].v["modelName"]);
|
|
}
|
|
|
|
if(isdefined(level.destructible_type[self.destuctableinfo].parts[var_00][var_01].v["fx_filename"]))
|
|
{
|
|
level.destructible_type[self.destuctableinfo].parts[var_00][var_01].v["fx"] = loadfx(level.destructible_type[self.destuctableinfo].parts[var_00][var_01].v["fx_filename"]);
|
|
}
|
|
|
|
if(isdefined(level.destructible_type[self.destuctableinfo].parts[var_00][var_01].v["loopfx_filename"]))
|
|
{
|
|
level.destructible_type[self.destuctableinfo].parts[var_00][var_01].v["loopfx"] = loadfx(level.destructible_type[self.destuctableinfo].parts[var_00][var_01].v["loopfx_filename"]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 17
|
|
setup_destructibles(param_00)
|
|
{
|
|
if(!isdefined(param_00))
|
|
{
|
|
param_00 = 0;
|
|
}
|
|
|
|
var_01 = undefined;
|
|
self.modeldummyon = 0;
|
|
add_damage_owner_recorder();
|
|
self.destuctableinfo = common_scripts\_destructible_types::maketype(self.destructible_type);
|
|
if(!param_00)
|
|
{
|
|
precache_destructibles();
|
|
}
|
|
|
|
if(isdefined(level.destructible_type[self.destuctableinfo].parts))
|
|
{
|
|
self.destructible_parts = [];
|
|
for(var_02 = 0;var_02 < level.destructible_type[self.destuctableinfo].parts.size;var_02++)
|
|
{
|
|
self.destructible_parts[var_02] = spawnstruct();
|
|
self.destructible_parts[var_02].v["currentState"] = 0;
|
|
if(isdefined(level.destructible_type[self.destuctableinfo].parts[var_02][0].v["health"]))
|
|
{
|
|
self.destructible_parts[var_02].v["health"] = level.destructible_type[self.destuctableinfo].parts[var_02][0].v["health"];
|
|
}
|
|
|
|
if(var_02 == 0)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_03 = level.destructible_type[self.destuctableinfo].parts[var_02][0].v["modelName"];
|
|
var_04 = level.destructible_type[self.destuctableinfo].parts[var_02][0].v["tagName"];
|
|
self attach(var_03,var_04);
|
|
if(self.modeldummyon)
|
|
{
|
|
self.modeldummy attach(var_03,var_04);
|
|
}
|
|
}
|
|
}
|
|
|
|
if(self.classname != "script_vehicle")
|
|
{
|
|
self setcandamage(1);
|
|
}
|
|
|
|
thread setup_destructible_entities();
|
|
thread connecttraverses();
|
|
thread destructible_think();
|
|
}
|
|
|
|
//Function Number: 18
|
|
add_damage_owner_recorder()
|
|
{
|
|
self.player_damage = 0;
|
|
self.non_player_damage = 0;
|
|
self.car_damage_owner_recorder = 1;
|
|
}
|
|
|
|
//Function Number: 19
|
|
destructible_think()
|
|
{
|
|
self endon("stop_taking_damage");
|
|
for(;;)
|
|
{
|
|
self waittill("damage",var_00,var_01,var_02,var_03,var_04,var_05,var_06);
|
|
if(!isdefined(var_00))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(var_00 <= 0)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_04 = getdamagetype(var_04);
|
|
if(var_05 == "")
|
|
{
|
|
var_05 = self.model;
|
|
}
|
|
|
|
if(isdefined(var_06) && var_06 == "")
|
|
{
|
|
var_06 = undefined;
|
|
}
|
|
|
|
if(var_04 == "splash")
|
|
{
|
|
destructible_splash_damage(int(var_00),var_03,var_02,var_01,var_04);
|
|
continue;
|
|
}
|
|
|
|
thread destructible_update_part(int(var_00),var_05,var_06,var_03,var_02,var_01,var_04);
|
|
}
|
|
}
|
|
|
|
//Function Number: 20
|
|
destructible_update_part(param_00,param_01,param_02,param_03,param_04,param_05,param_06)
|
|
{
|
|
if(!isdefined(self.destructible_parts))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(self.destructible_parts.size == 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var_07 = -1;
|
|
var_08 = -1;
|
|
if(tolower(param_01) == tolower(self.model) && !isdefined(param_02))
|
|
{
|
|
param_01 = self.model;
|
|
param_02 = undefined;
|
|
var_07 = 0;
|
|
var_08 = 0;
|
|
}
|
|
|
|
for(var_09 = 0;var_09 < level.destructible_type[self.destuctableinfo].parts.size;var_09++)
|
|
{
|
|
var_08 = self.destructible_parts[var_09].v["currentState"];
|
|
if(level.destructible_type[self.destuctableinfo].parts[var_09].size <= var_08)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(!isdefined(level.destructible_type[self.destuctableinfo].parts[var_09][var_08].v["modelName"]))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(tolower(level.destructible_type[self.destuctableinfo].parts[var_09][var_08].v["modelName"]) == tolower(param_01))
|
|
{
|
|
if(level.destructible_type[self.destuctableinfo].parts[var_09][var_08].v["tagName"] == param_02)
|
|
{
|
|
var_07 = var_09;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if(var_07 < 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var_0A = var_08;
|
|
var_0B = 0;
|
|
var_0C = 0;
|
|
for(;;)
|
|
{
|
|
var_08 = self.destructible_parts[var_07].v["currentState"];
|
|
if(!isdefined(level.destructible_type[self.destuctableinfo].parts[var_07][var_08]))
|
|
{
|
|
break;
|
|
}
|
|
|
|
if(isdefined(level.destructible_type[self.destuctableinfo].parts[var_07][0].v["alsoDamageParent"]))
|
|
{
|
|
if(getdamagetype(param_06) != "splash")
|
|
{
|
|
var_0D = level.destructible_type[self.destuctableinfo].parts[var_07][0].v["alsoDamageParent"];
|
|
var_0E = int(param_00 * var_0D);
|
|
thread notifydamageafterframe(var_0E,param_05,param_04,param_03,param_06,"","");
|
|
}
|
|
}
|
|
|
|
if(!isdefined(level.destructible_type[self.destuctableinfo].parts[var_07][var_08].v["health"]))
|
|
{
|
|
break;
|
|
}
|
|
|
|
if(!isdefined(self.destructible_parts[var_07].v["health"]))
|
|
{
|
|
break;
|
|
}
|
|
|
|
if(var_0B)
|
|
{
|
|
self.destructible_parts[var_07].v["health"] = level.destructible_type[self.destuctableinfo].parts[var_07][var_08].v["health"];
|
|
}
|
|
|
|
var_0B = 0;
|
|
if(isdefined(level.destructible_type[self.destuctableinfo].parts[var_07][var_08].v["grenadeImpactDeath"]) && param_06 == "impact")
|
|
{
|
|
param_00 = 100000000;
|
|
}
|
|
|
|
var_0F = isattackervalid(var_07,var_08,param_05);
|
|
if(var_0F)
|
|
{
|
|
var_10 = isvaliddamagecause(var_07,var_08,param_06);
|
|
if(var_10)
|
|
{
|
|
if(param_05 == level.player)
|
|
{
|
|
self.player_damage = self.player_damage + param_00;
|
|
}
|
|
else if(param_05 != self)
|
|
{
|
|
self.non_player_damage = self.non_player_damage + param_00;
|
|
}
|
|
|
|
self.destructible_parts[var_07].v["health"] = self.destructible_parts[var_07].v["health"] - param_00;
|
|
}
|
|
}
|
|
|
|
if(self.destructible_parts[var_07].v["health"] > 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
param_00 = int(abs(self.destructible_parts[var_07].v["health"]));
|
|
if(param_00 < 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
self.destructible_parts[var_07].v["currentState"]++;
|
|
var_08 = self.destructible_parts[var_07].v["currentState"];
|
|
var_11 = var_08 - 1;
|
|
if(!isdefined(level.destructible_type[self.destuctableinfo].parts[var_07][var_11]))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(isdefined(level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["explode_force_min"]))
|
|
{
|
|
self.exploding = 1;
|
|
}
|
|
|
|
if(isdefined(self.loopingsoundstopnotifies) && isdefined(self.loopingsoundstopnotifies[maps\_utility::string(var_07)]))
|
|
{
|
|
for(var_09 = 0;var_09 < self.loopingsoundstopnotifies[maps\_utility::string(var_07)].size;var_09++)
|
|
{
|
|
self notify(self.loopingsoundstopnotifies[maps\_utility::string(var_07)][var_09]);
|
|
if(self.modeldummyon)
|
|
{
|
|
self.modeldummy notify(self.loopingsoundstopnotifies[maps\_utility::string(var_07)][var_09]);
|
|
}
|
|
}
|
|
|
|
self.loopingsoundstopnotifies[maps\_utility::string(var_07)] = undefined;
|
|
}
|
|
|
|
if(isdefined(level.destructible_type[self.destuctableinfo].parts[var_07][var_08]))
|
|
{
|
|
if(var_07 == 0)
|
|
{
|
|
var_12 = level.destructible_type[self.destuctableinfo].parts[var_07][var_08].v["modelName"];
|
|
self setmodel(var_12);
|
|
if(self.modeldummyon)
|
|
{
|
|
self.modeldummy setmodel(var_12);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
self detach(param_01,param_02);
|
|
if(self.modeldummyon)
|
|
{
|
|
self.modeldummy detach(param_01,param_02);
|
|
}
|
|
|
|
param_01 = level.destructible_type[self.destuctableinfo].parts[var_07][var_08].v["modelName"];
|
|
param_02 = level.destructible_type[self.destuctableinfo].parts[var_07][var_08].v["tagName"];
|
|
if(isdefined(param_01) && isdefined(param_02))
|
|
{
|
|
if(self.modeldummyon)
|
|
{
|
|
self.modeldummy attach(param_01,param_02);
|
|
}
|
|
|
|
self attach(param_01,param_02);
|
|
}
|
|
}
|
|
}
|
|
|
|
var_13 = get_dummy();
|
|
if(isdefined(level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["fx"]))
|
|
{
|
|
var_14 = level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["fx"];
|
|
if(isdefined(level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["fx_tag"]))
|
|
{
|
|
var_15 = level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["fx_tag"];
|
|
self notify("FX_State_Change" + var_07);
|
|
if(level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["fx_useTagAngles"])
|
|
{
|
|
if(delayvfxonmultipleframes(var_13))
|
|
{
|
|
if(!isdefined(self.playingfxpartscount))
|
|
{
|
|
self.playingfxpartscount = 0;
|
|
}
|
|
|
|
if(self.playingfxpartscount < 3)
|
|
{
|
|
destructible_playfxontag_internal(var_14,var_13,var_15);
|
|
}
|
|
else
|
|
{
|
|
while(self.playingfxpartscount >= 3)
|
|
{
|
|
wait(0.05);
|
|
}
|
|
|
|
destructible_playfxontag_internal(var_14,var_13,var_15);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
playfxontag(var_14,var_13,var_15);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
var_16 = var_13 gettagorigin(var_15);
|
|
var_17 = var_16 + (0,0,100) - var_16;
|
|
playfx(var_14,var_16,var_17);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
var_16 = var_13.origin;
|
|
var_17 = var_16 + (0,0,100) - var_16;
|
|
playfx(var_14,var_16,var_17);
|
|
}
|
|
}
|
|
|
|
if(isdefined(level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["loopfx"]))
|
|
{
|
|
var_18 = level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["loopfx"];
|
|
var_19 = level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["loopfx_tag"];
|
|
var_1A = level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["loopfx_rate"];
|
|
self notify("FX_State_Change" + var_07);
|
|
thread loopfx_ontag(var_18,var_19,var_1A,var_07);
|
|
}
|
|
|
|
if(!isdefined(self.exploded))
|
|
{
|
|
if(isdefined(level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["anim"]))
|
|
{
|
|
var_1B = level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["anim"];
|
|
var_1C = level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["animTree"];
|
|
var_13 useanimtree(var_1C);
|
|
var_1D = level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["animType"];
|
|
if(!isdefined(self.animsapplied))
|
|
{
|
|
self.animsapplied = [];
|
|
}
|
|
|
|
self.animsapplied[self.animsapplied.size] = var_1B;
|
|
if(isdefined(self.exploding))
|
|
{
|
|
if(isdefined(self.animsapplied))
|
|
{
|
|
for(var_09 = 0;var_09 < self.animsapplied.size;var_09++)
|
|
{
|
|
var_13 clearanim(self.animsapplied[var_09],0);
|
|
}
|
|
}
|
|
}
|
|
|
|
if(var_1D == "setanim")
|
|
{
|
|
var_13 setanim(var_1B,1,1,1);
|
|
}
|
|
else if(var_1D == "setanimknob")
|
|
{
|
|
var_13 setanimknob(var_1B,1,1,1);
|
|
}
|
|
else
|
|
{
|
|
}
|
|
}
|
|
}
|
|
|
|
if(isdefined(level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["createEntityForAnimation"]) && level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["createEntityForAnimation"] && !isdefined(self.exploded))
|
|
{
|
|
var_1E = createentity(var_07,var_11,self.destuctableinfo);
|
|
if(isdefined(level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["partAnim"]))
|
|
{
|
|
var_1B = level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["partAnim"];
|
|
var_1C = level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["partAnimTree"];
|
|
var_1E useanimtree(var_1C);
|
|
var_1D = level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["partAnimType"];
|
|
if(!isdefined(self.animsapplied))
|
|
{
|
|
self.animsapplied = [];
|
|
}
|
|
|
|
self.animsapplied[self.animsapplied.size] = var_1B;
|
|
if(isdefined(self.exploding) && isdefined(self.animsapplied))
|
|
{
|
|
for(var_09 = 0;var_09 < self.animsapplied.size;var_09++)
|
|
{
|
|
var_1E clearanim(self.animsapplied[var_09],0);
|
|
}
|
|
}
|
|
|
|
if(var_1D == "setanim")
|
|
{
|
|
var_1E setanim(var_1B,1,1,1);
|
|
}
|
|
else if(var_1D == "setanimknob")
|
|
{
|
|
var_1E setanimknob(var_1B,1,1,1);
|
|
}
|
|
else
|
|
{
|
|
}
|
|
}
|
|
}
|
|
|
|
if(!isdefined(self.exploded))
|
|
{
|
|
if(isdefined(level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["sound"]))
|
|
{
|
|
for(var_09 = 0;var_09 < level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["sound"].size;var_09++)
|
|
{
|
|
var_1F = isvalidsoundcause("soundCause",var_07,var_11,var_09,param_06);
|
|
if(var_1F)
|
|
{
|
|
var_20 = level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["sound"][var_09];
|
|
var_21 = level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["tagName"];
|
|
var_13 thread maps\_utility::play_sound_on_tag(var_20,var_21);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if(isdefined(level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["loopsound"]))
|
|
{
|
|
for(var_09 = 0;var_09 < level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["loopsound"].size;var_09++)
|
|
{
|
|
var_1F = isvalidsoundcause("loopsoundCause",var_07,var_11,var_09,param_06);
|
|
if(var_1F)
|
|
{
|
|
var_22 = level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["loopsound"][var_09];
|
|
var_23 = level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["tagName"];
|
|
thread play_loop_sound_on_destructible(var_22,var_23);
|
|
if(!isdefined(self.loopingsoundstopnotifies))
|
|
{
|
|
self.loopingsoundstopnotifies = [];
|
|
}
|
|
|
|
if(!isdefined(self.loopingsoundstopnotifies[maps\_utility::string(var_07)]))
|
|
{
|
|
self.loopingsoundstopnotifies[maps\_utility::string(var_07)] = [];
|
|
}
|
|
|
|
var_24 = self.loopingsoundstopnotifies[maps\_utility::string(var_07)].size;
|
|
self.loopingsoundstopnotifies[maps\_utility::string(var_07)][var_24] = "stop sound" + var_22;
|
|
}
|
|
}
|
|
}
|
|
|
|
if(isdefined(level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["healthdrain_amount"]))
|
|
{
|
|
self notify("Health_Drain_State_Change" + var_07);
|
|
var_25 = level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["healthdrain_amount"];
|
|
var_26 = level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["healthdrain_interval"];
|
|
var_27 = level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["modelName"];
|
|
var_28 = level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["tagName"];
|
|
var_29 = level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["badplace_radius"];
|
|
var_2A = level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["badplace_team"];
|
|
if(var_25 > 0)
|
|
{
|
|
thread health_drain(var_25,var_26,var_07,var_27,var_28,var_29,var_2A);
|
|
}
|
|
}
|
|
|
|
if(isdefined(level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["explode_force_min"]))
|
|
{
|
|
var_0C = 1;
|
|
var_2B = level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["explode_force_min"];
|
|
var_2C = level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["explode_force_max"];
|
|
var_2D = level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["explode_range"];
|
|
var_2E = level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["explode_mindamage"];
|
|
var_2F = level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["explode_maxdamage"];
|
|
if(isdefined(param_05) && param_05 != self)
|
|
{
|
|
self.attacker = param_05;
|
|
}
|
|
|
|
thread explode(var_07,var_2B,var_2C,var_2D,var_2E,var_2F);
|
|
}
|
|
|
|
if(isdefined(level.destructible_type[self.destuctableinfo].parts[var_07][var_11].v["physics"]))
|
|
{
|
|
var_30 = param_03;
|
|
var_31 = (0,0,0);
|
|
if(isdefined(param_05))
|
|
{
|
|
var_31 = param_05.origin;
|
|
if(param_05 == level.player)
|
|
{
|
|
var_31 = level.player geteye();
|
|
}
|
|
|
|
var_30 = vectornormalize(param_03 - var_31);
|
|
var_30 = maps\_utility::vector_multiply(var_30,200);
|
|
}
|
|
|
|
thread physics_launch(var_07,var_11,param_03,var_30);
|
|
return;
|
|
}
|
|
|
|
var_0F = 1;
|
|
}
|
|
}
|
|
|
|
//Function Number: 21
|
|
delayvfxonmultipleframes(param_00)
|
|
{
|
|
return param_00.model == "vehicle_uaz_hardtop_dsr" && level.script == "icbm";
|
|
}
|
|
|
|
//Function Number: 22
|
|
reduceplayingcount(param_00)
|
|
{
|
|
wait(param_00);
|
|
self.playingfxpartscount--;
|
|
}
|
|
|
|
//Function Number: 23
|
|
destructible_playfxontag_internal(param_00,param_01,param_02)
|
|
{
|
|
self.playingfxpartscount++;
|
|
playfxontag(param_00,param_01,param_02);
|
|
thread reduceplayingcount(0.05);
|
|
}
|
|
|
|
//Function Number: 24
|
|
destructible_splash_damage(param_00,param_01,param_02,param_03,param_04)
|
|
{
|
|
if(param_00 <= 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var_05 = [];
|
|
var_06 = undefined;
|
|
if(isdefined(level.destructible_type[self.destuctableinfo].parts))
|
|
{
|
|
for(var_07 = 0;var_07 < level.destructible_type[self.destuctableinfo].parts.size;var_07++)
|
|
{
|
|
for(var_08 = 0;var_08 < level.destructible_type[self.destuctableinfo].parts[var_07].size;var_08++)
|
|
{
|
|
if(level.destructible_type[self.destuctableinfo].parts[var_07].size <= var_08)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(isdefined(level.destructible_type[self.destuctableinfo].parts[var_07][var_08].v["modelName"]))
|
|
{
|
|
var_09 = level.destructible_type[self.destuctableinfo].parts[var_07][var_08].v["modelName"];
|
|
if(var_07 == 0)
|
|
{
|
|
var_0A = distance(param_01,self.origin);
|
|
var_0B = undefined;
|
|
}
|
|
else
|
|
{
|
|
var_0B = level.destructible_type[self.destuctableinfo].parts[var_09][var_0A].v["tagName"];
|
|
var_0A = distance(param_01,self gettagorigin(var_0B));
|
|
}
|
|
|
|
if(!isdefined(var_06) || var_0A < var_06)
|
|
{
|
|
var_06 = var_0A;
|
|
}
|
|
|
|
var_0C = var_05.size;
|
|
var_05[var_0C] = spawnstruct();
|
|
var_05[var_0C].v["modelName"] = var_09;
|
|
var_05[var_0C].v["tagName"] = var_0B;
|
|
var_05[var_0C].v["distance"] = var_0A;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if(!isdefined(var_06))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(var_06 < 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(var_05.size <= 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
for(var_07 = 0;var_07 < var_05.size;var_07++)
|
|
{
|
|
var_0D = var_05[var_07].v["distance"] * 1.4;
|
|
var_0E = param_00 - var_0D - var_06;
|
|
if(var_0E <= 0)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
thread destructible_update_part(var_0E,var_05[var_07].v["modelName"],var_05[var_07].v["tagName"],param_01,param_02,param_03,param_04);
|
|
}
|
|
}
|
|
|
|
//Function Number: 25
|
|
isvalidsoundcause(param_00,param_01,param_02,param_03,param_04)
|
|
{
|
|
var_05 = level.destructible_type[self.destuctableinfo].parts[param_01][param_02].v[param_00][param_03];
|
|
if(!isdefined(var_05))
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
if(var_05 == param_04)
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 26
|
|
isattackervalid(param_00,param_01,param_02)
|
|
{
|
|
if(isdefined(self.forceexploding))
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
if(isdefined(level.destructible_type[self.destuctableinfo].parts[param_00][param_01].v["explode_force_min"]))
|
|
{
|
|
if(isdefined(self.dontallowexplode))
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
if(!isdefined(param_02))
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
if(param_02 == self)
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
var_03 = level.destructible_type[self.destuctableinfo].parts[param_00][param_01].v["validAttackers"];
|
|
if(!isdefined(var_03))
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
if(var_03 == "no_player")
|
|
{
|
|
if(param_02 != level.player)
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
else if(var_03 == "player_only")
|
|
{
|
|
if(param_02 == level.player)
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
else if(var_03 == "no_ai")
|
|
{
|
|
if(!isai(param_02))
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
else if(var_03 == "ai_only")
|
|
{
|
|
if(isai(param_02))
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Function Number: 27
|
|
isvaliddamagecause(param_00,param_01,param_02)
|
|
{
|
|
if(!isdefined(param_02))
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
var_03 = level.destructible_type[self.destuctableinfo].parts[param_00][param_01].v["godModeAllowed"];
|
|
if(var_03 && (isdefined(self.godmode) && self.godmode) || isdefined(self.script_bulletshield) && self.script_bulletshield && param_02 == "bullet")
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
var_04 = level.destructible_type[self.destuctableinfo].parts[param_00][param_01].v["validDamageCause"];
|
|
if(!isdefined(var_04))
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
if(var_04 == "no_melee" && param_02 == "melee")
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
//Function Number: 28
|
|
getdamagetype(param_00)
|
|
{
|
|
if(!isdefined(param_00))
|
|
{
|
|
return "unknown";
|
|
}
|
|
|
|
param_00 = tolower(param_00);
|
|
switch(param_00)
|
|
{
|
|
case "mod_crush":
|
|
case "mod_melee":
|
|
case "melee":
|
|
break;
|
|
|
|
case "bullet":
|
|
case "mod_rifle_bullet":
|
|
case "mod_pistol_bullet":
|
|
break;
|
|
|
|
case "splash":
|
|
case "mod_explosive":
|
|
case "mod_projectile_splash":
|
|
case "mod_projectile":
|
|
case "mod_grenade_splash":
|
|
case "mod_grenade":
|
|
break;
|
|
|
|
case "mod_impact":
|
|
break;
|
|
|
|
case "unknown":
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
//Function Number: 29
|
|
loopfx_ontag(param_00,param_01,param_02,param_03)
|
|
{
|
|
var_04 = get_dummy();
|
|
self endon("FX_State_Change" + param_03);
|
|
self endon("delete_destructible");
|
|
level endon("putout_fires");
|
|
for(;;)
|
|
{
|
|
var_04 = get_dummy();
|
|
playfxontag(param_00,var_04,param_01);
|
|
wait(param_02);
|
|
}
|
|
}
|
|
|
|
//Function Number: 30
|
|
health_drain(param_00,param_01,param_02,param_03,param_04,param_05,param_06)
|
|
{
|
|
self endon("Health_Drain_State_Change" + param_02);
|
|
level endon("putout_fires");
|
|
wait(param_01);
|
|
self.healthdrain = 1;
|
|
var_07 = undefined;
|
|
if(isdefined(param_05) && isdefined(param_06))
|
|
{
|
|
var_07 = "" + gettime();
|
|
if(!isdefined(self.disablebadplace))
|
|
{
|
|
if(param_06 == "both")
|
|
{
|
|
badplace_cylinder(var_07,0,self.origin,param_05,128,"allies","axis");
|
|
}
|
|
else
|
|
{
|
|
badplace_cylinder(var_07,0,self.origin,param_05,128,param_06);
|
|
}
|
|
}
|
|
}
|
|
|
|
while(self.destructible_parts[param_02].v["health"] > 0)
|
|
{
|
|
self notify("damage",param_00,self,(0,0,0),(0,0,0),"MOD_UNKNOWN",param_03,param_04);
|
|
wait(param_01);
|
|
}
|
|
|
|
if(isdefined(param_05) && isdefined(param_06))
|
|
{
|
|
badplace_delete(var_07);
|
|
}
|
|
}
|
|
|
|
//Function Number: 31
|
|
physics_launch(param_00,param_01,param_02,param_03)
|
|
{
|
|
var_04 = get_model_from_part(param_00,param_01);
|
|
var_05 = get_last_model_from_part(param_00);
|
|
var_06 = get_tag_from_part(param_00,param_01);
|
|
if(!ismodelattached(var_04,var_06))
|
|
{
|
|
return;
|
|
}
|
|
|
|
self detach(var_04,var_06);
|
|
if(self.modeldummyon)
|
|
{
|
|
self.modeldummy detach(var_04,var_06);
|
|
}
|
|
|
|
if(level.destructiblespawnedents.size >= level.destructiblespawnedentslimit)
|
|
{
|
|
physics_object_remove(level.destructiblespawnedents[0]);
|
|
}
|
|
|
|
var_07 = spawn("script_model",self gettagorigin(var_06));
|
|
var_07.angles = self gettagangles(var_06);
|
|
var_07 setmodel(var_05);
|
|
level.destructiblespawnedents[level.destructiblespawnedents.size] = var_07;
|
|
var_07 physicslaunchclient(param_02,param_03);
|
|
}
|
|
|
|
//Function Number: 32
|
|
physics_object_remove(param_00)
|
|
{
|
|
var_01 = [];
|
|
for(var_02 = 0;var_02 < level.destructiblespawnedents.size;var_02++)
|
|
{
|
|
if(level.destructiblespawnedents[var_02] == param_00)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_01[var_01.size] = level.destructiblespawnedents[var_02];
|
|
}
|
|
|
|
level.destructiblespawnedents = var_01;
|
|
param_00 delete();
|
|
}
|
|
|
|
//Function Number: 33
|
|
createentity(param_00,param_01,param_02)
|
|
{
|
|
var_03 = get_model_from_part(param_00,param_01);
|
|
var_04 = get_last_model_from_part(param_00);
|
|
var_05 = get_tag_from_part(param_00,param_01);
|
|
if(!ismodelattached(var_03,var_05))
|
|
{
|
|
return;
|
|
}
|
|
|
|
self detach(var_03,var_05);
|
|
if(self.modeldummyon)
|
|
{
|
|
self.modeldummy detach(var_03,var_05);
|
|
}
|
|
|
|
var_06 = spawn("script_model",self gettagorigin(var_05));
|
|
var_06.angles = self gettagangles(var_05);
|
|
var_06 setmodel(var_04);
|
|
var_06 linkto(self);
|
|
if(!isdefined(self.partsspawnedents))
|
|
{
|
|
self.partsspawnedents = [];
|
|
}
|
|
|
|
self.partsspawnedents[self.partsspawnedents.size] = var_06;
|
|
return var_06;
|
|
}
|
|
|
|
//Function Number: 34
|
|
explode(param_00,param_01,param_02,param_03,param_04,param_05)
|
|
{
|
|
if(isdefined(self.exploded))
|
|
{
|
|
return;
|
|
}
|
|
|
|
self.exploded = 1;
|
|
if(self.classname == "script_vehicle" || self.code_classname == "script_vehicle")
|
|
{
|
|
self notify("death");
|
|
}
|
|
|
|
thread disconnecttraverses();
|
|
thread destroy_destructible_entities();
|
|
wait(0.05);
|
|
var_06 = level.destructible_type[self.destuctableinfo].parts[param_00][self.destructible_parts[param_00].v["currentState"]].v["tagName"];
|
|
if(isdefined(var_06))
|
|
{
|
|
var_07 = self gettagorigin(var_06);
|
|
}
|
|
else
|
|
{
|
|
var_07 = self.origin;
|
|
}
|
|
|
|
self notify("damage",param_05,self,(0,0,0),var_07,"MOD_EXPLOSIVE","","");
|
|
waittillframeend;
|
|
if(isdefined(self.partsspawnedents))
|
|
{
|
|
foreach(var_09 in self.partsspawnedents)
|
|
{
|
|
var_09 delete();
|
|
}
|
|
}
|
|
|
|
if(isdefined(level.destructible_type[self.destuctableinfo].parts))
|
|
{
|
|
for(var_0B = level.destructible_type[self.destuctableinfo].parts.size - 1;var_0B >= 0;var_0B--)
|
|
{
|
|
if(var_0B == param_00)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_0C = self.destructible_parts[var_0B].v["currentState"];
|
|
if(var_0C >= level.destructible_type[self.destuctableinfo].parts[var_0B].size)
|
|
{
|
|
var_0C = level.destructible_type[self.destuctableinfo].parts[var_0B].size - 1;
|
|
}
|
|
|
|
var_0D = get_model_from_part(var_0B,var_0C);
|
|
var_06 = get_tag_from_part(var_0B,var_0C);
|
|
if(!isdefined(var_0D))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(!isdefined(var_06))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(!ismodelattached(var_0D,var_06))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(part_has_physics_exposion(var_0B))
|
|
{
|
|
apply_physics_explosion_to_part(var_0B,var_0C,var_06,var_07,param_01,param_02);
|
|
continue;
|
|
}
|
|
|
|
self detach(var_0D,var_06);
|
|
if(self.modeldummyon)
|
|
{
|
|
self.modeldummy detach(var_0D,var_06);
|
|
}
|
|
}
|
|
}
|
|
|
|
self notify("stop_taking_damage");
|
|
wait(0.05);
|
|
var_0E = var_07 + (0,0,80);
|
|
if(getsubstr(level.destructible_type[self.destuctableinfo].v["type"],0,7) == "vehicle")
|
|
{
|
|
anim.lastcarexplosiontime = gettime();
|
|
anim.lastcarexplosiondamagelocation = var_0E;
|
|
anim.lastcarexplosionlocation = var_07;
|
|
anim.lastcarexplosionrange = param_03;
|
|
}
|
|
|
|
self radiusdamage(var_0E,param_03,param_05,param_04,self);
|
|
if(arcademode_car_kill())
|
|
{
|
|
thread maps\_arcademode::arcademode_add_points(self.origin,1,"explosive",200);
|
|
}
|
|
|
|
self notify("destroyed");
|
|
}
|
|
|
|
//Function Number: 35
|
|
arcademode_car_kill()
|
|
{
|
|
if(!maps\_utility::arcademode())
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(level.script == "ac130")
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if(isdefined(level.allcarsdamagedbyplayer))
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
return maps\_gameskill::player_did_most_damage();
|
|
}
|
|
|
|
//Function Number: 36
|
|
get_destructible_index(param_00,param_01,param_02)
|
|
{
|
|
if(param_01 >= 0)
|
|
{
|
|
return level.destructible_type[self.destuctableinfo].parts[param_00][param_01].v[param_02];
|
|
}
|
|
|
|
if(param_01 == -1)
|
|
{
|
|
var_03 = undefined;
|
|
for(var_04 = 0;var_04 < level.destructible_type[self.destuctableinfo].parts[param_00].size;var_04++)
|
|
{
|
|
if(isdefined(level.destructible_type[self.destuctableinfo].parts[param_00][var_04].v[param_02]))
|
|
{
|
|
var_03 = level.destructible_type[self.destuctableinfo].parts[param_00][var_04].v[param_02];
|
|
}
|
|
}
|
|
|
|
return var_03;
|
|
}
|
|
}
|
|
|
|
//Function Number: 37
|
|
get_tag_from_part(param_00,param_01)
|
|
{
|
|
return get_destructible_index(param_00,param_01,"tagName");
|
|
}
|
|
|
|
//Function Number: 38
|
|
get_model_from_part(param_00,param_01)
|
|
{
|
|
return get_destructible_index(param_00,param_01,"modelName");
|
|
}
|
|
|
|
//Function Number: 39
|
|
get_last_model_from_part(param_00)
|
|
{
|
|
return get_destructible_index(param_00,-1,"modelName");
|
|
}
|
|
|
|
//Function Number: 40
|
|
apply_physics_explosion_to_part(param_00,param_01,param_02,param_03,param_04,param_05)
|
|
{
|
|
var_06 = level.destructible_type[self.destuctableinfo].parts[param_00][0].v["physicsOnExplosion"];
|
|
var_07 = self gettagorigin(param_02);
|
|
var_08 = vectornormalize(var_07 - param_03);
|
|
var_08 = maps\_utility::vector_multiply(var_08,randomfloatrange(param_04,param_05) * var_06);
|
|
thread physics_launch(param_00,param_01,var_07,var_08);
|
|
}
|
|
|
|
//Function Number: 41
|
|
part_has_physics_exposion(param_00)
|
|
{
|
|
if(!isdefined(level.destructible_type[self.destuctableinfo].parts[param_00][0].v["physicsOnExplosion"]))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
return level.destructible_type[self.destuctableinfo].parts[param_00][0].v["physicsOnExplosion"] > 0;
|
|
}
|
|
|
|
//Function Number: 42
|
|
ismodelattached(param_00,param_01)
|
|
{
|
|
var_02 = 0;
|
|
param_00 = tolower(param_00);
|
|
param_01 = tolower(param_01);
|
|
if(!isdefined(param_01))
|
|
{
|
|
return var_02;
|
|
}
|
|
|
|
var_03 = self getattachsize();
|
|
var_04 = [];
|
|
for(var_05 = 0;var_05 < var_03;var_05++)
|
|
{
|
|
var_04[var_05] = tolower(self getattachmodelname(var_05));
|
|
}
|
|
|
|
for(var_05 = 0;var_05 < var_04.size;var_05++)
|
|
{
|
|
if(var_04[var_05] != param_00)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_06 = tolower(self getattachtagname(var_05));
|
|
if(param_01 != var_06)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_02 = 1;
|
|
break;
|
|
}
|
|
|
|
return var_02;
|
|
}
|
|
|
|
//Function Number: 43
|
|
play_loop_sound_on_destructible(param_00,param_01)
|
|
{
|
|
var_02 = get_dummy();
|
|
var_03 = spawn("script_origin",(0,0,0));
|
|
if(isdefined(param_01))
|
|
{
|
|
var_03.origin = var_02 gettagorigin(param_01);
|
|
}
|
|
else
|
|
{
|
|
var_03.origin = var_02.origin;
|
|
}
|
|
|
|
if(soundexists(param_00))
|
|
{
|
|
var_03 playloopsound(param_00);
|
|
}
|
|
else
|
|
{
|
|
}
|
|
|
|
var_02 thread force_stop_sound(param_00);
|
|
var_02 waittill("stop sound" + param_00);
|
|
var_03 stoploopsound(param_00);
|
|
var_03 delete();
|
|
}
|
|
|
|
//Function Number: 44
|
|
force_stop_sound(param_00)
|
|
{
|
|
self endon("stop sound" + param_00);
|
|
level waittill("putout_fires");
|
|
self notify("stop sound" + param_00);
|
|
}
|
|
|
|
//Function Number: 45
|
|
notifydamageafterframe(param_00,param_01,param_02,param_03,param_04,param_05,param_06)
|
|
{
|
|
if(isdefined(level.notifydamageafterframe))
|
|
{
|
|
return;
|
|
}
|
|
|
|
level.notifydamageafterframe = 1;
|
|
waittillframeend;
|
|
if(isdefined(self.exploded))
|
|
{
|
|
level.notifydamageafterframe = undefined;
|
|
return;
|
|
}
|
|
|
|
self notify("damage",param_00,param_01,param_02,param_03,param_04,param_05,param_06);
|
|
level.notifydamageafterframe = undefined;
|
|
}
|
|
|
|
//Function Number: 46
|
|
get_dummy()
|
|
{
|
|
if(self.modeldummyon)
|
|
{
|
|
var_00 = self.modeldummy;
|
|
}
|
|
else
|
|
{
|
|
var_00 = self;
|
|
}
|
|
|
|
return var_00;
|
|
}
|
|
|
|
//Function Number: 47
|
|
disable_explosion()
|
|
{
|
|
self.dontallowexplode = 1;
|
|
}
|
|
|
|
//Function Number: 48
|
|
force_explosion()
|
|
{
|
|
self.dontallowexplode = undefined;
|
|
self.forceexploding = 1;
|
|
self notify("damage",1000000000,self,self.origin,self.origin,"MOD_EXPLOSIVE","","");
|
|
}
|
|
|
|
//Function Number: 49
|
|
get_traverse_disconnect_brush()
|
|
{
|
|
if(!isdefined(self.target))
|
|
{
|
|
return undefined;
|
|
}
|
|
|
|
var_00 = getent(self.target,"targetname");
|
|
if(!isdefined(var_00))
|
|
{
|
|
return undefined;
|
|
}
|
|
|
|
if(!var_00.spawnflags & 1)
|
|
{
|
|
return undefined;
|
|
}
|
|
|
|
return var_00;
|
|
}
|
|
|
|
//Function Number: 50
|
|
connecttraverses()
|
|
{
|
|
var_00 = get_traverse_disconnect_brush();
|
|
if(!isdefined(var_00))
|
|
{
|
|
return;
|
|
}
|
|
|
|
var_00 connectpaths();
|
|
var_00.origin = var_00.origin - (0,0,10000);
|
|
}
|
|
|
|
//Function Number: 51
|
|
disconnecttraverses()
|
|
{
|
|
var_00 = get_traverse_disconnect_brush();
|
|
if(!isdefined(var_00))
|
|
{
|
|
return;
|
|
}
|
|
|
|
var_00.origin = var_00.origin + (0,0,10000);
|
|
var_00 disconnectpaths();
|
|
var_00.origin = var_00.origin - (0,0,10000);
|
|
}
|
|
|
|
//Function Number: 52
|
|
setup_destructible_entities()
|
|
{
|
|
var_00 = common_scripts\utility::get_linked_ents();
|
|
var_01 = var_00;
|
|
var_03 = getfirstarraykey(var_01);
|
|
if(isdefined(var_03))
|
|
{
|
|
var_02 = var_01[var_03];
|
|
if(!isdefined(var_02.script_noteworthy))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
switch(var_02.script_noteworthy)
|
|
{
|
|
case "destroyed":
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 53
|
|
destroy_destructible_entities()
|
|
{
|
|
var_00 = common_scripts\utility::get_linked_ents();
|
|
var_01 = var_00;
|
|
var_03 = getfirstarraykey(var_01);
|
|
if(isdefined(var_03))
|
|
{
|
|
var_02 = var_01[var_03];
|
|
if(!isdefined(var_02.script_noteworthy))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
switch(var_02.script_noteworthy)
|
|
{
|
|
case "destructible":
|
|
break;
|
|
|
|
case "destroyed":
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 54
|
|
destructible_car_alarm()
|
|
{
|
|
}
|
|
|
|
//Function Number: 55
|
|
destructible_fx_spawn_immediate(param_00,param_01,param_02,param_03,param_04,param_05,param_06)
|
|
{
|
|
}
|
|
|
|
//Function Number: 56
|
|
destructible_splash_damage_scaler(param_00)
|
|
{
|
|
} |