IL-GSC/BO2/PC/MP/maps/mp/_bouncingbetty.gsc
2023-10-28 00:17:17 -04:00

204 lines
5.3 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\_bouncingbetty.gsc
* Game: Call of Duty: Black Ops 2
* Platform: PC
* Function Count: 10
* Decompile Time: 1 ms
* Timestamp: 10/28/2023 12:10:51 AM
*******************************************************************/
#include common_scripts/utility;
#include maps/mp/_challenges;
#include maps/mp/_scoreevents;
#include maps/mp/_utility;
#include maps/mp/gametypes/_weaponobjects;
//Function Number: 1
init()
{
precachemodel("t6_wpn_bouncing_betty_world");
level.bettyexplosionfx = loadfx("weapon/bouncing_betty/fx_betty_explosion");
level.bettydestroyedfx = loadfx("weapon/bouncing_betty/fx_betty_destroyed");
level.bettylaunchfx = loadfx("weapon/bouncing_betty/fx_betty_launch_dust");
level._effect["fx_betty_friendly_light"] = loadfx("weapon/bouncing_betty/fx_betty_light_green");
level._effect["fx_betty_enemy_light"] = loadfx("weapon/bouncing_betty/fx_betty_light_red");
level.bettymindist = 20;
level.bettygraceperiod = 0.6;
level.bettyradius = 192;
level.bettystuntime = 1;
level.bettydamageradius = 256;
level.bettydamagemax = 210;
level.bettydamagemin = 70;
level.bettyjumpheight = 65;
level.bettyjumptime = 0.65;
level.bettyrotatevelocity = (0,750,32);
level.bettyactivationdelay = 0.1;
}
//Function Number: 2
createbouncingbettywatcher()
{
watcher = self createproximityweaponobjectwatcher("bouncingbetty","bouncingbetty_mp",self.team);
watcher.onspawn = ::onspawnbouncingbetty;
watcher.watchforfire = 1;
watcher.detonate = ::bouncingbettydetonate;
watcher.activatesound = "wpn_claymore_alert";
watcher.hackable = 1;
watcher.hackertoolradius = level.equipmenthackertoolradius;
watcher.hackertooltimems = level.equipmenthackertooltimems;
watcher.reconmodel = "t6_wpn_bouncing_betty_world_detect";
watcher.ownergetsassist = 1;
watcher.ignoredirection = 1;
watcher.detectionmindist = level.bettymindist;
watcher.detectiongraceperiod = level.bettygraceperiod;
watcher.detonateradius = level.bettyradius;
watcher.stun = ::weaponstun;
watcher.stuntime = level.bettystuntime;
watcher.activationdelay = level.bettyactivationdelay;
}
//Function Number: 3
onspawnbouncingbetty(watcher,owner)
{
onspawnproximityweaponobject(watcher,owner);
self thread spawnminemover();
}
//Function Number: 4
spawnminemover()
{
self waittillnotmoving();
minemover = spawn("script_model",self.origin);
minemover.angles = self.angles;
minemover setmodel("tag_origin");
minemover.owner = self.owner;
minemover.killcamoffset = (0,0,getdvarfloatdefault("scr_bouncing_betty_killcam_offset",8));
killcament = spawn("script_model",minemover.origin + minemover.killcamoffset);
killcament.angles = (0,0,0);
killcament setmodel("tag_origin");
killcament setweapon("bouncingbetty_mp");
minemover.killcament = killcament;
self.minemover = minemover;
self thread killminemoveronpickup();
}
//Function Number: 5
killminemoveronpickup()
{
self.minemover endon("death");
self waittill_any("picked_up","hacked");
self killminemover();
}
//Function Number: 6
killminemover()
{
if(IsDefined(self.minemover))
{
if(IsDefined(self.minemover.killcament))
{
self.minemover.killcament delete();
}
self.minemover delete();
}
}
//Function Number: 7
bouncingbettydetonate(attacker,weaponname)
{
if(IsDefined(weaponname))
{
if(IsDefined(attacker))
{
if(self.owner isenemyplayer(attacker))
{
attacker maps/mp/_challenges::destroyedexplosive(weaponname);
maps/mp/_scoreevents::processscoreevent("destroyed_bouncingbetty",attacker,self.owner,weaponname);
}
}
self bouncingbettydestroyed();
}
else if(IsDefined(self.minemover))
{
self.minemover setmodel(self.model);
self.minemover thread bouncingbettyjumpandexplode();
self delete();
}
else
{
self bouncingbettydestroyed();
}
}
//Function Number: 8
bouncingbettydestroyed()
{
playfx(level.bettydestroyedfx,self.origin);
playsoundatposition("dst_equipment_destroy",self.origin);
if(IsDefined(self.trigger))
{
self.trigger delete();
}
if(IsDefined(self.minemover))
{
if(IsDefined(self.minemover.killcament))
{
self.minemover.killcament delete();
}
self.minemover delete();
}
self radiusdamage(self.origin,128,110,10,self.owner,"MOD_EXPLOSIVE","bouncingbetty_mp");
self delete();
}
//Function Number: 9
bouncingbettyjumpandexplode()
{
explodepos = self.origin + (0,0,level.bettyjumpheight);
self moveto(explodepos,level.bettyjumptime,level.bettyjumptime,0);
self.killcament moveto(explodepos + self.killcamoffset,level.bettyjumptime,0,level.bettyjumptime);
playfx(level.bettylaunchfx,self.origin);
self rotatevelocity(level.bettyrotatevelocity,level.bettyjumptime,0,level.bettyjumptime);
self playsound("fly_betty_jump");
wait(level.bettyjumptime);
self thread mineexplode();
}
//Function Number: 10
mineexplode()
{
if(!IsDefined(self) || !IsDefined(self.owner))
{
return;
}
self playsound("fly_betty_explo");
wait(0.05);
if(!IsDefined(self) || !IsDefined(self.owner))
{
return;
}
self hide();
self radiusdamage(self.origin,level.bettydamageradius,level.bettydamagemax,level.bettydamagemin,self.owner,"MOD_EXPLOSIVE","bouncingbetty_mp");
playfx(level.bettyexplosionfx,self.origin);
wait(0.2);
if(!IsDefined(self) || !IsDefined(self.owner))
{
return;
}
if(IsDefined(self.trigger))
{
self.trigger delete();
}
self.killcament delete();
self delete();
}