mirror of
https://github.com/InfinityLoader/IL-GSC.git
synced 2025-06-07 17:17:50 -05:00
379 lines
9.7 KiB
Plaintext
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);
|
|
}
|
|
}
|
|
} |