mirror of
https://github.com/JezuzLizard/Recompilable-gscs-for-BO2-zombies-and-multiplayer.git
synced 2025-06-07 17:37:50 -05:00
_acousticsensor.gsc, _scrambler.gsc, _sensor_grenade.gsc, _globallogic_player.gsc and _weaponobjects.gsc all required fixed function pointers.
220 lines
5.6 KiB
Plaintext
220 lines
5.6 KiB
Plaintext
//checked includes match cerberus output
|
|
#include maps/mp/gametypes/_damagefeedback;
|
|
#include maps/mp/gametypes/_globallogic_player;
|
|
#include maps/mp/_challenges;
|
|
#include maps/mp/killstreaks/_emp;
|
|
#include maps/mp/gametypes/_weaponobjects;
|
|
#include common_scripts/utility;
|
|
#include maps/mp/_utility;
|
|
|
|
init() //checked matches cerberus output
|
|
{
|
|
level._effect[ "scrambler_enemy_light" ] = loadfx( "misc/fx_equip_light_red" );
|
|
level._effect[ "scrambler_friendly_light" ] = loadfx( "misc/fx_equip_light_green" );
|
|
level.scramblerweapon = "scrambler_mp";
|
|
level.scramblerlength = 30;
|
|
level.scramblerouterradiussq = 1000000;
|
|
level.scramblerinnerradiussq = 360000;
|
|
}
|
|
|
|
createscramblerwatcher() //checked matches cerberus output
|
|
{
|
|
watcher = self maps/mp/gametypes/_weaponobjects::createuseweaponobjectwatcher( "scrambler", "scrambler_mp", self.team );
|
|
watcher.onspawn = ::onspawnscrambler;
|
|
watcher.detonate = ::scramblerdetonate;
|
|
watcher.stun = maps/mp/gametypes/_weaponobjects::weaponstun;
|
|
watcher.stuntime = 5;
|
|
watcher.reconmodel = "t5_weapon_scrambler_world_detect";
|
|
watcher.hackable = 1;
|
|
watcher.ondamage = ::watchscramblerdamage;
|
|
}
|
|
|
|
onspawnscrambler( watcher, player ) //checked matches cerberus output
|
|
{
|
|
player endon( "disconnect" );
|
|
self endon( "death" );
|
|
self thread maps/mp/gametypes/_weaponobjects::onspawnuseweaponobject( watcher, player );
|
|
player.scrambler = self;
|
|
self setowner( player );
|
|
self setteam( player.team );
|
|
self.owner = player;
|
|
self setclientflag( 3 );
|
|
if ( !self maps/mp/_utility::ishacked() )
|
|
{
|
|
player addweaponstat( "scrambler_mp", "used", 1 );
|
|
}
|
|
self thread watchshutdown( player );
|
|
level notify( "scrambler_spawn" );
|
|
}
|
|
|
|
scramblerdetonate( attacker, weaponname ) //checked matches cerberus output
|
|
{
|
|
from_emp = maps/mp/killstreaks/_emp::isempweapon( weaponname );
|
|
if ( !from_emp )
|
|
{
|
|
playfx( level._equipment_explode_fx, self.origin );
|
|
}
|
|
if ( self.owner isenemyplayer( attacker ) )
|
|
{
|
|
attacker maps/mp/_challenges::destroyedequipment( weaponname );
|
|
}
|
|
playsoundatposition( "dst_equipment_destroy", self.origin );
|
|
self delete();
|
|
}
|
|
|
|
watchshutdown( player ) //checked matches cerberus output
|
|
{
|
|
self waittill_any( "death", "hacked" );
|
|
level notify( "scrambler_death" );
|
|
if ( isDefined( player ) )
|
|
{
|
|
player.scrambler = undefined;
|
|
}
|
|
}
|
|
|
|
destroyent() //checked matches cerberus output
|
|
{
|
|
self delete();
|
|
}
|
|
|
|
watchscramblerdamage( watcher ) //checked changed to match beta dump
|
|
{
|
|
self endon( "death" );
|
|
self endon( "hacked" );
|
|
self setcandamage( 1 );
|
|
damagemax = 100;
|
|
if ( !self maps/mp/_utility::ishacked() )
|
|
{
|
|
self.damagetaken = 0;
|
|
}
|
|
while ( 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 && attacker.team == self.owner.team && attacker != self.owner )
|
|
{
|
|
continue;
|
|
}
|
|
if ( isDefined( weaponname ) )
|
|
{
|
|
switch( weaponname )
|
|
{
|
|
case "concussion_grenade_mp":
|
|
case "flash_grenade_mp":
|
|
if ( watcher.stuntime > 0 )
|
|
{
|
|
self thread maps/mp/gametypes/_weaponobjects::stunstart( watcher, watcher.stuntime );
|
|
}
|
|
if ( level.teambased && self.owner.team != attacker.team )
|
|
{
|
|
if ( maps/mp/gametypes/_globallogic_player::dodamagefeedback( weaponname, attacker ) )
|
|
{
|
|
attacker maps/mp/gametypes/_damagefeedback::updatedamagefeedback();
|
|
}
|
|
}
|
|
else if ( !level.teambased && self.owner != attacker )
|
|
{
|
|
if ( maps/mp/gametypes/_globallogic_player::dodamagefeedback( weaponname, attacker ) )
|
|
{
|
|
attacker maps/mp/gametypes/_damagefeedback::updatedamagefeedback();
|
|
}
|
|
}
|
|
continue;
|
|
case "emp_grenade_mp":
|
|
damage = damagemax;
|
|
default:
|
|
if ( maps/mp/gametypes/_globallogic_player::dodamagefeedback( weaponname, attacker ) )
|
|
{
|
|
attacker maps/mp/gametypes/_damagefeedback::updatedamagefeedback();
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
weaponname = "";
|
|
}
|
|
if ( isplayer( attacker ) && level.teambased && isDefined( attacker.team ) && self.owner.team == attacker.team && attacker != self.owner )
|
|
{
|
|
continue;
|
|
}
|
|
if ( type == "MOD_MELEE" )
|
|
{
|
|
self.damagetaken = damagemax;
|
|
}
|
|
else
|
|
{
|
|
self.damagetaken += damage;
|
|
}
|
|
if ( self.damagetaken >= damagemax )
|
|
{
|
|
watcher thread maps/mp/gametypes/_weaponobjects::waitanddetonate( self, 0, attacker, weaponname );
|
|
}
|
|
}
|
|
}
|
|
|
|
ownersameteam( owner1, owner2 ) //checked matches cerberus output
|
|
{
|
|
if ( !level.teambased )
|
|
{
|
|
return 0;
|
|
}
|
|
if ( !isDefined( owner1 ) || !isDefined( owner2 ) )
|
|
{
|
|
return 0;
|
|
}
|
|
if ( !isDefined( owner1.team ) || !isDefined( owner2.team ) )
|
|
{
|
|
return 0;
|
|
}
|
|
return owner1.team == owner2.team;
|
|
}
|
|
|
|
checkscramblerstun() //checked partially changed to match cerberus output see info.md
|
|
{
|
|
scramblers = getentarray( "grenade", "classname" );
|
|
if ( isDefined( self.name ) && self.name == "scrambler_mp" )
|
|
{
|
|
return 0;
|
|
}
|
|
i = 0;
|
|
while ( i < scramblers.size )
|
|
{
|
|
scrambler = scramblers[ i ];
|
|
if ( !isalive( scrambler ) )
|
|
{
|
|
i++;
|
|
continue;
|
|
}
|
|
if ( !isDefined( scrambler.name ) )
|
|
{
|
|
i++;
|
|
continue;
|
|
}
|
|
if ( scrambler.name != "scrambler_mp" )
|
|
{
|
|
i++;
|
|
continue;
|
|
}
|
|
if ( ownersameteam( self.owner, scrambler.owner ) )
|
|
{
|
|
i++;
|
|
continue;
|
|
}
|
|
flattenedselforigin = ( self.origin[ 0 ], self.origin[ 1 ], 0 );
|
|
flattenedscramblerorigin = ( scrambler.origin[ 0 ], scrambler.origin[ 1 ], 0 );
|
|
if ( distancesquared( flattenedselforigin, flattenedscramblerorigin ) < level.scramblerouterradiussq )
|
|
{
|
|
return 1;
|
|
}
|
|
i++;
|
|
}
|
|
return 0;
|
|
}
|
|
|