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

379 lines
9.7 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\mp\_trophy_system.gsc
* Game: Call of Duty: Black Ops 2
* Platform: PC
* Function Count: 12
* Decompile Time: 5 ms
* Timestamp: 10/28/2023 12:11:04 AM
*******************************************************************/
#include common_scripts/utility;
#include maps/mp/_challenges;
#include maps/mp/_scoreevents;
#include maps/mp/_tacticalinsertion;
#include maps/mp/_utility;
#include maps/mp/gametypes/_damagefeedback;
#include maps/mp/gametypes/_globallogic_audio;
#include maps/mp/gametypes/_globallogic_player;
#include maps/mp/gametypes/_weaponobjects;
#include maps/mp/killstreaks/_emp;
#using_animtree( "mp_trophy_system" );
//Function Number: 1
init()
{
precachemodel("t6_wpn_trophy_system_world");
level.trophylongflashfx = loadfx("weapon/trophy_system/fx_trophy_flash_lng");
level.trophydetonationfx = loadfx("weapon/trophy_system/fx_trophy_radius_detonation");
level._effect["fx_trophy_friendly_light"] = loadfx("weapon/trophy_system/fx_trophy_light_friendly");
level._effect["fx_trophy_enemy_light"] = loadfx("weapon/trophy_system/fx_trophy_light_enemy");
level._effect["fx_trophy_deploy_impact"] = loadfx("weapon/trophy_system/fx_trophy_deploy_impact");
trophydeployanim = %o_trophy_deploy;
trophyspinanim = %o_trophy_spin;
}
//Function Number: 2
register()
{
registerclientfield("missile","trophy_system_state",1,2,"int");
registerclientfield("scriptmover","trophy_system_state",1,2,"int");
}
//Function Number: 3
createtrophysystemwatcher()
{
watcher = self maps/mp/gametypes/_weaponobjects::createuseweaponobjectwatcher("trophy_system","trophy_system_mp",self.team);
watcher.detonate = ::trophysystemdetonate;
watcher.activatesound = "wpn_claymore_alert";
watcher.hackable = 1;
watcher.hackertoolradius = level.equipmenthackertoolradius;
watcher.hackertooltimems = level.equipmenthackertooltimems;
watcher.reconmodel = "t6_wpn_trophy_system_world_detect";
watcher.ownergetsassist = 1;
watcher.ignoredirection = 1;
watcher.activationdelay = 0.1;
watcher.headicon = 1;
watcher.enemydestroy = 1;
watcher.onspawn = ::ontrophysystemspawn;
watcher.ondamage = ::watchtrophysystemdamage;
watcher.ondestroyed = ::ontrophysystemsmashed;
watcher.stun = ::weaponstun;
watcher.stuntime = 1;
}
//Function Number: 4
ontrophysystemspawn(watcher,player)
{
player endon("death");
player endon("disconnect");
level endon("game_ended");
self maps/mp/gametypes/_weaponobjects::onspawnuseweaponobject(watcher,player);
player addweaponstat("trophy_system_mp","used",1);
self.ammo = 2;
self thread trophyactive(player);
self thread trophywatchhack();
self setclientfield("trophy_system_state",1);
self playloopsound("wpn_trophy_spin",0.25);
if(IsDefined(watcher.reconmodel))
{
self thread setreconmodeldeployed();
}
}
//Function Number: 5
setreconmodeldeployed()
{
self endon("death");
for(;;)
{
if(IsDefined(self.reconmodelentity))
{
self.reconmodelentity setclientfield("trophy_system_state",1);
return;
}
wait(0.05);
}
}
//Function Number: 6
trophywatchhack()
{
self endon("death");
self waittill("hacked",player);
wait(0.05);
self thread trophyactive(player);
}
//Function Number: 7
ontrophysystemsmashed(attacker)
{
playfx(level._effect["tacticalInsertionFizzle"],self.origin);
self playsound("dst_tac_insert_break");
self.owner maps/mp/gametypes/_globallogic_audio::leaderdialogonplayer("equipment_destroyed","item_destroyed");
if(IsDefined(attacker) && self.owner isenemyplayer(attacker))
{
attacker maps/mp/_challenges::destroyedequipment();
maps/mp/_scoreevents::processscoreevent("destroyed_trophy_system",attacker,self.owner);
}
self delete();
}
//Function Number: 8
trophyactive(owner)
{
owner endon("disconnect");
self endon("death");
self endon("hacked");
while(1)
{
tac_inserts = maps/mp/_tacticalinsertion::gettacticalinsertions();
if((level.missileentities.size < 1 && tac_inserts.size < 1) || IsDefined(self.disabled))
{
wait(0.05);
continue;
}
for(index = 0;index < level.missileentities.size;index++)
{
wait(0.05);
grenade = level.missileentities[index];
if(!(IsDefined(grenade)))
{
}
else if(grenade == self)
{
}
else
{
if(IsDefined(grenade.weaponname))
{
switch(grenade.weaponname)
{
case "claymore_mp":
break;
}
}
if(IsDefined(grenade.name) && grenade.name == "tactical_insertion_mp")
{
}
else
{
switch(grenade.model)
{
case "t6_wpn_grenade_supply_projectile":
break;
}
if(!(IsDefined(grenade.owner)))
{
grenade.owner = getmissileowner(grenade);
}
if(IsDefined(grenade.owner))
{
if(level.teambased)
{
if(grenade.owner.team == owner.team)
{
}
else if(grenade.owner == owner)
{
}
else
{
grenadedistancesquared = distancesquared(grenade.origin,self.origin);
if(grenadedistancesquared < 262144)
{
if(bullettracepassed(grenade.origin,29 + VectorScale((0,0,1)),self.origin,0))
{
playfx(level.trophylongflashfx,15 + VectorScale((0,0,1)),self.origin,grenade.origin - self.origin);
owner thread projectileexplode(grenade,self);
index--;
self playsound("wpn_trophy_alert");
self.ammo--;
if(self.ammo <= 0)
{
self thread trophysystemdetonate();
}
}
}
}
}
}
}
}
}
for(index = 0;index < tac_inserts.size;index++)
{
wait(0.05);
tac_insert = tac_inserts[index];
if(!(IsDefined(tac_insert)))
{
}
else if(IsDefined(tac_insert.owner))
{
if(level.teambased)
{
if(tac_insert.owner.team == owner.team)
{
}
else if(tac_insert.owner == owner)
{
}
else
{
grenadedistancesquared = distancesquared(tac_insert.origin,self.origin);
if(grenadedistancesquared < 262144)
{
if(bullettracepassed(tac_insert.origin,29 + VectorScale((0,0,1)),self.origin,0))
{
playfx(level.trophylongflashfx,15 + VectorScale((0,0,1)),self.origin,tac_insert.origin - self.origin);
owner thread trophydestroytacinsert(tac_insert,self);
index--;
self playsound("wpn_trophy_alert");
self.ammo--;
if(self.ammo <= 0)
{
self thread trophysystemdetonate();
}
}
}
}
}
}
}
}
}
//Function Number: 9
projectileexplode(projectile,trophy)
{
self endon("death");
projposition = projectile.origin;
playfx(level.trophydetonationfx,projposition);
projectile delete();
trophy radiusdamage(projposition,128,105,10,self);
maps/mp/_scoreevents::processscoreevent("trophy_defense",self);
self addplayerstat("destroy_explosive_with_trophy",1);
self addweaponstat("trophy_system_mp","CombatRecordStat",1);
}
//Function Number: 10
trophydestroytacinsert(tacinsert,trophy)
{
self endon("death");
tacpos = tacinsert.origin;
playfx(level.trophydetonationfx,tacinsert.origin);
tacinsert thread maps/mp/_tacticalinsertion::tacticalinsertiondestroyedbytrophysystem(self,trophy);
trophy radiusdamage(tacpos,128,105,10,self);
maps/mp/_scoreevents::processscoreevent("trophy_defense",self);
self addplayerstat("destroy_explosive_with_trophy",1);
self addweaponstat("trophy_system_mp","CombatRecordStat",1);
}
//Function Number: 11
trophysystemdetonate(attacker,weaponname)
{
from_emp = maps/mp/killstreaks/_emp::isempweapon(weaponname);
if(!(from_emp))
{
playfx(level._equipment_explode_fx_lg,self.origin);
}
if(IsDefined(attacker) && self.owner isenemyplayer(attacker))
{
attacker maps/mp/_challenges::destroyedequipment(weaponname);
maps/mp/_scoreevents::processscoreevent("destroyed_trophy_system",attacker,self.owner,weaponname);
}
playsoundatposition("dst_equipment_destroy",self.origin);
self delete();
}
//Function Number: 12
watchtrophysystemdamage(watcher)
{
self endon("death");
self endon("hacked");
self setcandamage(1);
damagemax = 20;
if(!(self maps/mp/_utility::ishacked()))
{
self.damagetaken = 0;
}
self.maxhealth = 10000;
self.health = self.maxhealth;
self setmaxhealth(self.maxhealth);
attacker = undefined;
if(1)
{
self waittill("damage",damage,attacker,direction_vec,point,type,modelname,tagname,partname,weaponname,idflags);
if(!(isplayer(attacker)))
{
continue;
}
if(level.teambased)
{
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.05,attacker,weaponname);
}
}
}