mirror of
https://github.com/InfinityLoader/IL-GSC.git
synced 2025-06-07 17:17:50 -05:00
373 lines
7.9 KiB
Plaintext
373 lines
7.9 KiB
Plaintext
/*******************************************************************
|
|
* Decompiled By: Bog
|
|
* Decompiled File: maps/mp/_explosive_gel.gsc
|
|
* Game: Call of Duty: Advanced Warfare
|
|
* Platform: PC
|
|
* Function Count: 15
|
|
* Decompile Time: 244 ms
|
|
* Timestamp: 10/27/2023 1:48:57 AM
|
|
*******************************************************************/
|
|
|
|
//Function Number: 1
|
|
watchexplosivegelusage()
|
|
{
|
|
self endon("spawned_player");
|
|
self endon("disconnect");
|
|
self endon("death");
|
|
self endon("faux_spawn");
|
|
for(;;)
|
|
{
|
|
self waittill("grenade_fire",var_00,var_01);
|
|
if(var_01 == "explosive_gel_mp")
|
|
{
|
|
if(!isalive(self))
|
|
{
|
|
var_00 delete();
|
|
return;
|
|
}
|
|
|
|
thread tryuseexplosivegel(var_00);
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 2
|
|
init()
|
|
{
|
|
precachemodel("weapon_c4");
|
|
precachemodel("weapon_c4_bombsquad");
|
|
level.explosivegelsettings = spawnstruct();
|
|
level.explosivegelsettings.stuckmesh = "weapon_c4";
|
|
level.explosivegelsettings.gelbombsquadmesh = "weapon_c4_bombsquad";
|
|
level.explosivegelsettings.gelexplosionfx = loadfx("vfx/explosion/frag_grenade_default");
|
|
level.explosivegelsettings.beacon["enemy"] = loadfx("vfx/lights/light_c4_blink");
|
|
level.explosivegelsettings.beacon["friendly"] = loadfx("vfx/lights/light_mine_blink_friendly");
|
|
}
|
|
|
|
//Function Number: 3
|
|
tryuseexplosivegel(param_00)
|
|
{
|
|
thread launchexplosivegel(param_00);
|
|
return 1;
|
|
}
|
|
|
|
//Function Number: 4
|
|
launchexplosivegel(param_00)
|
|
{
|
|
thread watchexplosivegelaltdetonate(param_00);
|
|
var_01 = stickexplosivegel(param_00);
|
|
}
|
|
|
|
//Function Number: 5
|
|
watchexplosivegelaltdetonate(param_00)
|
|
{
|
|
self endon("death");
|
|
self endon("disconnect");
|
|
level endon("game_ended");
|
|
self endon("change_owner");
|
|
param_00 endon("missile_stuck");
|
|
param_00 endon("death");
|
|
var_01 = 0;
|
|
for(;;)
|
|
{
|
|
if(self usebuttonpressed())
|
|
{
|
|
var_01 = 0;
|
|
while(self usebuttonpressed())
|
|
{
|
|
var_01 = var_01 + 0.05;
|
|
wait(0.05);
|
|
}
|
|
|
|
if(var_01 >= 0.5)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var_01 = 0;
|
|
while(!self usebuttonpressed() && var_01 < 0.5)
|
|
{
|
|
var_01 = var_01 + 0.05;
|
|
wait(0.05);
|
|
}
|
|
|
|
if(var_01 >= 0.5)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
thread earlydetonate(param_00);
|
|
}
|
|
|
|
wait(0.05);
|
|
}
|
|
}
|
|
|
|
//Function Number: 6
|
|
stickexplosivegel(param_00)
|
|
{
|
|
self endon("earlyNotify");
|
|
param_00 waittill("missile_stuck");
|
|
var_01 = bullettrace(param_00.origin,param_00.origin - (0,0,4),0,param_00);
|
|
var_02 = bullettrace(param_00.origin,param_00.origin + (0,0,4),0,param_00);
|
|
var_03 = anglestoforward(param_00.angles);
|
|
var_04 = bullettrace(param_00.origin + (0,0,4),param_00.origin + var_03 * 4,0,param_00);
|
|
var_05 = undefined;
|
|
var_06 = 0;
|
|
var_07 = 0;
|
|
if(var_04["surfacetype"] != "none")
|
|
{
|
|
var_05 = var_04;
|
|
var_07 = 1;
|
|
}
|
|
else if(var_02["surfacetype"] != "none")
|
|
{
|
|
var_05 = var_02;
|
|
var_06 = 1;
|
|
}
|
|
else if(var_01["surfacetype"] != "none")
|
|
{
|
|
var_05 = var_01;
|
|
}
|
|
else
|
|
{
|
|
var_05 = var_01;
|
|
}
|
|
|
|
var_08 = var_05["position"];
|
|
if(var_08 == var_02["position"])
|
|
{
|
|
var_08 = var_08 + (0,0,-5);
|
|
}
|
|
|
|
var_09 = spawn("script_model",var_08);
|
|
var_09.isup = var_06;
|
|
var_09.isforward = var_07;
|
|
var_0A = vectornormalize(var_05["normal"]);
|
|
var_0B = vectortoangles(var_0A);
|
|
var_0B = var_0B + (90,0,0);
|
|
var_09.angles = var_0B;
|
|
var_09 setmodel(level.explosivegelsettings.stuckmesh);
|
|
var_09.owner = self;
|
|
var_09 setotherent(self);
|
|
var_09.killcamoffset = (0,0,55);
|
|
var_09.killcament = spawn("script_model",var_09.origin + var_09.killcamoffset);
|
|
var_09.stunned = 0;
|
|
var_09.weaponname = "explosive_gel_mp";
|
|
param_00 delete();
|
|
level.mines[level.mines.size] = var_09;
|
|
var_09 thread createbombsquadmodel(level.explosivegelsettings.gelbombsquadmesh,"tag_origin",self);
|
|
var_09 thread minebeacon();
|
|
var_09 thread setexplosivegelteamheadicon(self.team);
|
|
var_09 thread minedamagemonitor();
|
|
var_09 thread explosivegelcountdowndetonation(self);
|
|
return var_09;
|
|
}
|
|
|
|
//Function Number: 7
|
|
createbombsquadmodel(param_00,param_01,param_02)
|
|
{
|
|
var_03 = spawn("script_model",(0,0,0));
|
|
var_03 hide();
|
|
wait(0.05);
|
|
var_03 thread maps\mp\gametypes\_weapons::bombsquadvisibilityupdater(param_02);
|
|
var_03 setmodel(param_00);
|
|
var_03 linkto(self,param_01,(0,0,0),(0,0,0));
|
|
var_03 setcontents(0);
|
|
self waittill("death");
|
|
if(isdefined(self.trigger))
|
|
{
|
|
self.trigger delete();
|
|
}
|
|
|
|
var_03 delete();
|
|
}
|
|
|
|
//Function Number: 8
|
|
minebeacon()
|
|
{
|
|
var_00["friendly"] = spawnfx(level.explosivegelsettings.beacon["friendly"],self gettagorigin("tag_fx"));
|
|
var_00["enemy"] = spawnfx(level.explosivegelsettings.beacon["enemy"],self gettagorigin("tag_fx"));
|
|
thread minebeaconteamupdater(var_00);
|
|
self waittill("death");
|
|
var_00["friendly"] delete();
|
|
var_00["enemy"] delete();
|
|
}
|
|
|
|
//Function Number: 9
|
|
minebeaconteamupdater(param_00,param_01)
|
|
{
|
|
self endon("death");
|
|
var_02 = self.owner.team;
|
|
wait(0.05);
|
|
triggerfx(param_00["friendly"]);
|
|
triggerfx(param_00["enemy"]);
|
|
for(;;)
|
|
{
|
|
param_00["friendly"] hide();
|
|
param_00["enemy"] hide();
|
|
foreach(var_04 in level.players)
|
|
{
|
|
if(level.teambased)
|
|
{
|
|
if(var_04.team == var_02)
|
|
{
|
|
param_00["friendly"] showtoplayer(var_04);
|
|
}
|
|
else
|
|
{
|
|
param_00["enemy"] showtoplayer(var_04);
|
|
}
|
|
|
|
continue;
|
|
}
|
|
|
|
if(var_04 == self.owner)
|
|
{
|
|
param_00["friendly"] showtoplayer(var_04);
|
|
continue;
|
|
}
|
|
|
|
param_00["enemy"] showtoplayer(var_04);
|
|
}
|
|
|
|
level common_scripts\utility::waittill_either("joined_team","player_spawned");
|
|
}
|
|
}
|
|
|
|
//Function Number: 10
|
|
setexplosivegelteamheadicon(param_00)
|
|
{
|
|
self endon("death");
|
|
wait(0.05);
|
|
if(level.teambased)
|
|
{
|
|
if(self.isup == 1 || self.isforward == 1)
|
|
{
|
|
maps\mp\_entityheadicons::setteamheadicon(param_00,(0,0,28),undefined,1);
|
|
return;
|
|
}
|
|
|
|
maps\mp\_entityheadicons::setteamheadicon(param_00,(0,0,28));
|
|
return;
|
|
}
|
|
|
|
if(isdefined(self.owner))
|
|
{
|
|
if(self.isup == 1)
|
|
{
|
|
maps\mp\_entityheadicons::setplayerheadicon(self.owner,(28,0,28));
|
|
return;
|
|
}
|
|
|
|
maps\mp\_entityheadicons::setplayerheadicon(self.owner,(0,0,28));
|
|
return;
|
|
}
|
|
}
|
|
|
|
//Function Number: 11
|
|
minedamagemonitor()
|
|
{
|
|
self endon("mine_triggered");
|
|
self endon("mine_selfdestruct");
|
|
self endon("death");
|
|
self setcandamage(1);
|
|
self.maxhealth = 100000;
|
|
self.health = self.maxhealth;
|
|
var_00 = undefined;
|
|
self waittill("damage",var_01,var_00,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09);
|
|
if(!isplayer(var_00))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(!maps\mp\gametypes\_weapons::friendlyfirecheck(self.owner,var_00))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(isdefined(var_09))
|
|
{
|
|
var_0A = maps\mp\_utility::strip_suffix(var_09,"_lefthand");
|
|
switch(var_0A)
|
|
{
|
|
case "smoke_grenade_var_mp":
|
|
case "smoke_grenade_mp":
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 12
|
|
mineexplode(param_00)
|
|
{
|
|
if(!isdefined(self) || !isdefined(self.owner))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(!isdefined(param_00))
|
|
{
|
|
param_00 = self.owner;
|
|
}
|
|
|
|
self playsound("null");
|
|
var_01 = self gettagorigin("tag_fx");
|
|
playfx(level.explosivegelsettings.gelexplosionfx,var_01);
|
|
wait(0.05);
|
|
if(!isdefined(self) || !isdefined(self.owner))
|
|
{
|
|
return;
|
|
}
|
|
|
|
self hide();
|
|
self radiusdamage(self.origin,192,100,100,param_00,"MOD_EXPLOSIVE");
|
|
if(isdefined(self.owner) && isdefined(level.leaderdialogonplayer_func))
|
|
{
|
|
self.owner thread [[ level.leaderdialogonplayer_func ]]("mine_destroyed",undefined,undefined,self.origin);
|
|
}
|
|
|
|
wait(0.2);
|
|
if(!isdefined(self) || !isdefined(self.owner))
|
|
{
|
|
return;
|
|
}
|
|
|
|
thread apm_mine_deletekillcament();
|
|
self notify("death");
|
|
if(isdefined(self.pickuptrigger))
|
|
{
|
|
self.pickuptrigger delete();
|
|
}
|
|
|
|
self hide();
|
|
}
|
|
|
|
//Function Number: 13
|
|
earlydetonate(param_00)
|
|
{
|
|
self notify("earlyNotify");
|
|
var_01 = param_00 gettagorigin("tag_fx");
|
|
playfx(level.explosivegelsettings.gelexplosionfx,var_01);
|
|
param_00 detonate();
|
|
}
|
|
|
|
//Function Number: 14
|
|
apm_mine_deletekillcament()
|
|
{
|
|
wait(3);
|
|
self.killcament delete();
|
|
self delete();
|
|
level.mines = common_scripts\utility::array_removeundefined(level.mines);
|
|
}
|
|
|
|
//Function Number: 15
|
|
explosivegelcountdowndetonation(param_00)
|
|
{
|
|
self endon("mine_destroyed");
|
|
self endon("mine_selfdestruct");
|
|
self endon("death");
|
|
wait(3);
|
|
self notify("mine_triggered");
|
|
thread mineexplode();
|
|
} |