mirror of
https://github.com/InfinityLoader/IL-GSC.git
synced 2025-06-07 17:17:50 -05:00
236 lines
5.6 KiB
Plaintext
236 lines
5.6 KiB
Plaintext
/*******************************************************************
|
|
* Decompiled By: Bog
|
|
* Decompiled File: maps\mp\_sensor_grenade.gsc
|
|
* Game: Call of Duty: Black Ops 2
|
|
* Platform: PC
|
|
* Function Count: 10
|
|
* Decompile Time: 2 ms
|
|
* Timestamp: 10/28/2023 12:11:02 AM
|
|
*******************************************************************/
|
|
|
|
#include common_scripts/utility;
|
|
#include maps/mp/_challenges;
|
|
#include maps/mp/_hacker_tool;
|
|
#include maps/mp/_scoreevents;
|
|
#include maps/mp/_utility;
|
|
#include maps/mp/gametypes/_damagefeedback;
|
|
#include maps/mp/gametypes/_globallogic_player;
|
|
#include maps/mp/gametypes/_weaponobjects;
|
|
#include maps/mp/killstreaks/_emp;
|
|
|
|
//Function Number: 1
|
|
init()
|
|
{
|
|
level.isplayertrackedfunc = ::isplayertracked;
|
|
}
|
|
|
|
//Function Number: 2
|
|
createsensorgrenadewatcher()
|
|
{
|
|
watcher = self maps/mp/gametypes/_weaponobjects::createuseweaponobjectwatcher("sensor_grenade","sensor_grenade_mp",self.team);
|
|
watcher.headicon = 0;
|
|
watcher.onspawn = ::onspawnsensorgrenade;
|
|
watcher.detonate = ::sensorgrenadedestroyed;
|
|
watcher.stun = maps/mp/gametypes/_weaponobjects::weaponstun;
|
|
watcher.stuntime = 0;
|
|
watcher.reconmodel = "t6_wpn_motion_sensor_world_detect";
|
|
watcher.ondamage = ::watchsensorgrenadedamage;
|
|
watcher.enemydestroy = 1;
|
|
}
|
|
|
|
//Function Number: 3
|
|
onspawnsensorgrenade(watcher,player)
|
|
{
|
|
self endon("death");
|
|
self thread maps/mp/gametypes/_weaponobjects::onspawnuseweaponobject(watcher,player);
|
|
self setowner(player);
|
|
self setteam(player.team);
|
|
self.owner = player;
|
|
self playloopsound("fly_sensor_nade_lp");
|
|
self maps/mp/_hacker_tool::registerwithhackertool(level.equipmenthackertoolradius,level.equipmenthackertooltimems);
|
|
player addweaponstat("sensor_grenade_mp","used",1);
|
|
self thread watchforstationary(player);
|
|
self thread watchforexplode(player);
|
|
}
|
|
|
|
//Function Number: 4
|
|
watchforstationary(owner)
|
|
{
|
|
self endon("death");
|
|
self endon("hacked");
|
|
self endon("explode");
|
|
owner endon("death");
|
|
owner endon("disconnect");
|
|
self waittill("stationary");
|
|
checkfortracking(self.origin);
|
|
}
|
|
|
|
//Function Number: 5
|
|
watchforexplode(owner)
|
|
{
|
|
self endon("hacked");
|
|
self endon("delete");
|
|
owner endon("death");
|
|
owner endon("disconnect");
|
|
self waittill("explode",origin);
|
|
checkfortracking(origin + (0,0,1));
|
|
}
|
|
|
|
//Function Number: 6
|
|
checkfortracking(origin)
|
|
{
|
|
if(IsDefined(self.owner) == 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
players = level.players;
|
|
foreach(player in level.players)
|
|
{
|
|
if(player isenemyplayer(self.owner))
|
|
{
|
|
if(!(player hasperk("specialty_nomotionsensor")))
|
|
{
|
|
if(distancesquared(player.origin,origin) < 562500)
|
|
{
|
|
trace = bullettrace(origin,12 + VectorScale((0,0,1)),player.origin,0);
|
|
if(trace["fraction"] == 1)
|
|
{
|
|
self.owner tracksensorgrenadevictim(player);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//Function Number: 7
|
|
tracksensorgrenadevictim(victim)
|
|
{
|
|
if(!(IsDefined(self.sensorgrenadedata)))
|
|
{
|
|
self.sensorgrenadedata = [];
|
|
}
|
|
|
|
if(!(IsDefined(self.sensorgrenadedata[victim.clientid])))
|
|
{
|
|
self.sensorgrenadedata[victim.clientid] = GetTime();
|
|
}
|
|
}
|
|
|
|
//Function Number: 8
|
|
isplayertracked(player,time)
|
|
{
|
|
playertracked = 0;
|
|
if(IsDefined(self.sensorgrenadedata) && IsDefined(self.sensorgrenadedata[player.clientid]))
|
|
{
|
|
if(self.sensorgrenadedata[player.clientid] + 10000 > time)
|
|
{
|
|
playertracked = 1;
|
|
}
|
|
}
|
|
|
|
return playertracked;
|
|
}
|
|
|
|
//Function Number: 9
|
|
sensorgrenadedestroyed(attacker,weaponname)
|
|
{
|
|
from_emp = maps/mp/killstreaks/_emp::isempweapon(weaponname);
|
|
if(!(from_emp))
|
|
{
|
|
playfx(level._equipment_explode_fx,self.origin);
|
|
}
|
|
|
|
if(IsDefined(attacker))
|
|
{
|
|
if(self.owner isenemyplayer(attacker))
|
|
{
|
|
attacker maps/mp/_challenges::destroyedequipment(weaponname);
|
|
maps/mp/_scoreevents::processscoreevent("destroyed_motion_sensor",attacker,self.owner,weaponname);
|
|
}
|
|
}
|
|
|
|
playsoundatposition("dst_equipment_destroy",self.origin);
|
|
self delete();
|
|
}
|
|
|
|
//Function Number: 10
|
|
watchsensorgrenadedamage(watcher)
|
|
{
|
|
self endon("death");
|
|
self endon("hacked");
|
|
self setcandamage(1);
|
|
damagemax = 1;
|
|
if(!(self maps/mp/_utility::ishacked()))
|
|
{
|
|
self.damagetaken = 0;
|
|
}
|
|
|
|
if(1)
|
|
{
|
|
self.maxhealth = 100000;
|
|
self.health = self.maxhealth;
|
|
self waittill("damage",damage,attacker,direction,point,type,tagname,modelname,partname,weaponname,idflags);
|
|
if(!IsDefined(attacker) || !isplayer(attacker))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(level.teambased && isplayer(attacker))
|
|
{
|
|
if(!level.hardcoremode && self.owner.team == attacker.pers["team"] && self.owner != attacker)
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
|
|
if(IsDefined(weaponname))
|
|
{
|
|
switch(weaponname)
|
|
{
|
|
case "concussion_grenade_mp":
|
|
case "flash_grenade_mp":
|
|
self thread maps/mp/gametypes/_weaponobjects::stunstart(watcher,watcher.stuntime);
|
|
attacker maps/mp/gametypes/_damagefeedback::updatedamagefeedback();
|
|
continue;
|
|
attacker maps/mp/gametypes/_damagefeedback::updatedamagefeedback();
|
|
continue;
|
|
maps/mp/gametypes/_globallogic_player::dodamagefeedback(weaponname,attacker)
|
|
!level.teambased && self.owner != attacker
|
|
maps/mp/gametypes/_globallogic_player::dodamagefeedback(weaponname,attacker)
|
|
level.teambased && self.owner.team != attacker.team
|
|
watcher.stuntime > 0
|
|
break;
|
|
|
|
case "emp_grenade_mp":
|
|
damage = damagemax;
|
|
break;
|
|
|
|
default:
|
|
attacker maps/mp/gametypes/_damagefeedback::updatedamagefeedback();
|
|
break;
|
|
maps/mp/gametypes/_globallogic_player::dodamagefeedback(weaponname,attacker)
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
weaponname = "";
|
|
}
|
|
|
|
if(type == "MOD_MELEE")
|
|
{
|
|
self.damagetaken = damagemax;
|
|
}
|
|
else
|
|
{
|
|
self.damagetaken = self.damagetaken + damage;
|
|
}
|
|
|
|
if(self.damagetaken >= damagemax)
|
|
{
|
|
watcher thread maps/mp/gametypes/_weaponobjects::waitanddetonate(self,0,attacker,weaponname);
|
|
}
|
|
}
|
|
} |