mirror of
https://github.com/JezuzLizard/Recompilable-gscs-for-BO2-zombies-and-multiplayer.git
synced 2025-07-07 07:57:51 -05:00
uploading 119 patch_mp scripts and 23 patch_zm scripts as a baseline
This commit is contained in:
240
patch_mp/maps/mp/_proximity_grenade.gsc
Normal file
240
patch_mp/maps/mp/_proximity_grenade.gsc
Normal file
@ -0,0 +1,240 @@
|
||||
#include maps/mp/_scoreevents;
|
||||
#include maps/mp/_challenges;
|
||||
#include maps/mp/gametypes/_weaponobjects;
|
||||
#include common_scripts/utility;
|
||||
#include maps/mp/_utility;
|
||||
|
||||
init()
|
||||
{
|
||||
precacheshader( "gfx_fxt_fx_screen_droplets_02" );
|
||||
precacherumble( "proximity_grenade" );
|
||||
precacheitem( "proximity_grenade_aoe_mp" );
|
||||
level._effect[ "prox_grenade_friendly_default" ] = loadfx( "weapon/grenade/fx_prox_grenade_scan_grn" );
|
||||
level._effect[ "prox_grenade_friendly_warning" ] = loadfx( "weapon/grenade/fx_prox_grenade_wrn_grn" );
|
||||
level._effect[ "prox_grenade_enemy_default" ] = loadfx( "weapon/grenade/fx_prox_grenade_scan_red" );
|
||||
level._effect[ "prox_grenade_enemy_warning" ] = loadfx( "weapon/grenade/fx_prox_grenade_wrn_red" );
|
||||
level._effect[ "prox_grenade_player_shock" ] = loadfx( "weapon/grenade/fx_prox_grenade_impact_player_spwner" );
|
||||
level.proximitygrenadedetectionradius = weapons_get_dvar_int( "scr_proximityGrenadeDetectionRadius", "150" );
|
||||
level.proximitygrenadegraceperiod = weapons_get_dvar( "scr_proximityGrenadeGracePeriod", 0,1 );
|
||||
level.proximitygrenadedamageradius = weapons_get_dvar_int( "scr_proximityGrenadeDamageRadius", "200" );
|
||||
level.proximitygrenadedotdamageamount = weapons_get_dvar_int( "scr_proximityGrenadeDOTDamageAmount", "1" );
|
||||
level.proximitygrenadedotdamageamounthardcore = weapons_get_dvar_int( "scr_proximityGrenadeDOTDamageAmountHardcore", "1" );
|
||||
level.proximitygrenadedotdamagetime = weapons_get_dvar( "scr_proximityGrenadeDOTDamageTime", 0,15 );
|
||||
level.proximitygrenadedotdamageinstances = weapons_get_dvar_int( "scr_proximityGrenadeDOTDamageInstances", "4" );
|
||||
level.proximitygrenademaxinstances = weapons_get_dvar_int( "scr_proximityGrenadeMaxInstances", "3" );
|
||||
level.proximitygrenadeeffectdebug = weapons_get_dvar_int( "scr_proximityGrenadeEffectDebug", "0" );
|
||||
level.proximitygrenadeactivationtime = weapons_get_dvar( "scr_proximityGrenadeActivationTime", 0,1 );
|
||||
level.poisonfxduration = 6;
|
||||
/#
|
||||
level thread updatedvars();
|
||||
#/
|
||||
}
|
||||
|
||||
register()
|
||||
{
|
||||
registerclientfield( "toplayer", "tazered", 1000, 1, "int" );
|
||||
}
|
||||
|
||||
updatedvars()
|
||||
{
|
||||
while ( 1 )
|
||||
{
|
||||
level.proximitygrenadedetectionradius = weapons_get_dvar_int( "scr_proximityGrenadeDetectionRadius", level.proximitygrenadedetectionradius );
|
||||
level.proximitygrenadegraceperiod = weapons_get_dvar( "scr_proximityGrenadeGracePeriod", level.proximitygrenadegraceperiod );
|
||||
level.proximitygrenadedamageradius = weapons_get_dvar_int( "scr_proximityGrenadeDamageRadius", level.proximitygrenadedamageradius );
|
||||
level.proximitygrenadedotdamageamount = weapons_get_dvar_int( "scr_proximityGrenadeDOTDamageAmount", level.proximitygrenadedotdamageamount );
|
||||
level.proximitygrenadedotdamageamounthardcore = weapons_get_dvar_int( "scr_proximityGrenadeDOTDamageAmountHardcore", level.proximitygrenadedotdamageamounthardcore );
|
||||
level.proximitygrenadedotdamagetime = weapons_get_dvar( "scr_proximityGrenadeDOTDamageTime", level.proximitygrenadedotdamagetime );
|
||||
level.proximitygrenadedotdamageinstances = weapons_get_dvar_int( "scr_proximityGrenadeDOTDamageInstances", level.proximitygrenadedotdamageinstances );
|
||||
level.proximitygrenademaxinstances = weapons_get_dvar_int( "scr_proximityGrenadeMaxInstances", level.proximitygrenademaxinstances );
|
||||
level.proximitygrenadeeffectdebug = weapons_get_dvar_int( "scr_proximityGrenadeEffectDebug", level.proximitygrenadeeffectdebug );
|
||||
level.proximitygrenadeactivationtime = weapons_get_dvar( "scr_proximityGrenadeActivationTime", level.proximitygrenadeactivationtime );
|
||||
wait 1;
|
||||
}
|
||||
}
|
||||
|
||||
createproximitygrenadewatcher()
|
||||
{
|
||||
watcher = self maps/mp/gametypes/_weaponobjects::createproximityweaponobjectwatcher( "proximity_grenade", "proximity_grenade_mp", self.team );
|
||||
watcher.watchforfire = 1;
|
||||
watcher.hackable = 1;
|
||||
watcher.hackertoolradius = level.equipmenthackertoolradius;
|
||||
watcher.hackertooltimems = level.equipmenthackertooltimems;
|
||||
watcher.headicon = 0;
|
||||
watcher.reconmodel = "t6_wpn_taser_mine_world_detect";
|
||||
watcher.activatefx = 1;
|
||||
watcher.ownergetsassist = 1;
|
||||
watcher.ignoredirection = 1;
|
||||
watcher.immediatedetonation = 1;
|
||||
watcher.detectiongraceperiod = level.proximitygrenadegraceperiod;
|
||||
watcher.detonateradius = level.proximitygrenadedetectionradius;
|
||||
watcher.stun = ::maps/mp/gametypes/_weaponobjects::weaponstun;
|
||||
watcher.stuntime = 1;
|
||||
watcher.detonate = ::proximitydetonate;
|
||||
watcher.activationdelay = level.proximitygrenadeactivationtime;
|
||||
watcher.onspawn = ::onspawnproximitygrenadeweaponobject;
|
||||
}
|
||||
|
||||
onspawnproximitygrenadeweaponobject( watcher, owner )
|
||||
{
|
||||
self thread setupkillcament();
|
||||
owner addweaponstat( "proximity_grenade_mp", "used", 1 );
|
||||
onspawnproximityweaponobject( watcher, owner );
|
||||
}
|
||||
|
||||
setupkillcament()
|
||||
{
|
||||
self endon( "death" );
|
||||
self waittillnotmoving();
|
||||
self.killcament = spawn( "script_model", self.origin + vectorScale( ( 0, 0, 1 ), 8 ) );
|
||||
self thread cleanupkillcamentondeath();
|
||||
}
|
||||
|
||||
cleanupkillcamentondeath()
|
||||
{
|
||||
self waittill( "death" );
|
||||
self.killcament deleteaftertime( 3 + ( level.proximitygrenadedotdamagetime * level.proximitygrenadedotdamageinstances ) );
|
||||
}
|
||||
|
||||
proximitydetonate( attacker, weaponname )
|
||||
{
|
||||
if ( isDefined( weaponname ) )
|
||||
{
|
||||
if ( isDefined( attacker ) )
|
||||
{
|
||||
if ( self.owner isenemyplayer( attacker ) )
|
||||
{
|
||||
attacker maps/mp/_challenges::destroyedexplosive( weaponname );
|
||||
maps/mp/_scoreevents::processscoreevent( "destroyed_proxy", attacker, self.owner, weaponname );
|
||||
}
|
||||
}
|
||||
}
|
||||
maps/mp/gametypes/_weaponobjects::weapondetonate( attacker, weaponname );
|
||||
}
|
||||
|
||||
proximitygrenadedamageplayer( eattacker, einflictor )
|
||||
{
|
||||
if ( !self hasperk( "specialty_proximityprotection" ) )
|
||||
{
|
||||
if ( !level.proximitygrenadeeffectdebug )
|
||||
{
|
||||
self thread damageplayerinradius( einflictor.origin, eattacker, einflictor );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
watchproximitygrenadehitplayer( owner )
|
||||
{
|
||||
self endon( "death" );
|
||||
self setowner( owner );
|
||||
self setteam( owner.team );
|
||||
while ( 1 )
|
||||
{
|
||||
self waittill( "grenade_bounce", pos, normal, ent, surface );
|
||||
if ( isDefined( ent ) && isplayer( ent ) && surface != "riotshield" )
|
||||
{
|
||||
if ( level.teambased && ent.team == self.owner.team )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
self proximitydetonate( self.owner, undefined );
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
performhudeffects( position, distancetogrenade )
|
||||
{
|
||||
forwardvec = vectornormalize( anglesToForward( self.angles ) );
|
||||
rightvec = vectornormalize( anglesToRight( self.angles ) );
|
||||
explosionvec = vectornormalize( position - self.origin );
|
||||
fdot = vectordot( explosionvec, forwardvec );
|
||||
rdot = vectordot( explosionvec, rightvec );
|
||||
fangle = acos( fdot );
|
||||
rangle = acos( rdot );
|
||||
}
|
||||
|
||||
damageplayerinradius( position, owner, einflictor )
|
||||
{
|
||||
self notify( "proximityGrenadeDamageStart" );
|
||||
self endon( "proximityGrenadeDamageStart" );
|
||||
self endon( "disconnect" );
|
||||
self endon( "death" );
|
||||
owner endon( "disconnect" );
|
||||
self thread watch_death();
|
||||
if ( !isDefined( einflictor.killcament ) )
|
||||
{
|
||||
killcament = spawn( "script_model", self.origin + vectorScale( ( 0, 0, 1 ), 8 ) );
|
||||
killcament deleteaftertime( 3 + ( level.proximitygrenadedotdamagetime * level.proximitygrenadedotdamageinstances ) );
|
||||
killcament.soundmod = "taser_spike";
|
||||
}
|
||||
else
|
||||
{
|
||||
killcament = einflictor.killcament;
|
||||
killcament.soundmod = "taser_spike";
|
||||
}
|
||||
damage = level.proximitygrenadedotdamageamount;
|
||||
playfxontag( level._effect[ "prox_grenade_player_shock" ], self, "J_SpineUpper" );
|
||||
if ( level.hardcoremode )
|
||||
{
|
||||
damage = level.proximitygrenadedotdamageamounthardcore;
|
||||
}
|
||||
if ( self mayapplyscreeneffect() )
|
||||
{
|
||||
shellshock_duration = 1,5;
|
||||
self shellshock( "proximity_grenade", shellshock_duration, 0 );
|
||||
self setclientfieldtoplayer( "tazered", 1 );
|
||||
}
|
||||
self playrumbleonentity( "proximity_grenade" );
|
||||
self playsound( "wpn_taser_mine_zap" );
|
||||
self setclientuivisibilityflag( "hud_visible", 0 );
|
||||
i = 0;
|
||||
while ( i < level.proximitygrenadedotdamageinstances )
|
||||
{
|
||||
wait level.proximitygrenadedotdamagetime;
|
||||
/#
|
||||
assert( isDefined( owner ) );
|
||||
#/
|
||||
/#
|
||||
assert( isDefined( killcament ) );
|
||||
#/
|
||||
self dodamage( damage, position, owner, killcament, "none", "MOD_GAS", 0, "proximity_grenade_aoe_mp" );
|
||||
i++;
|
||||
}
|
||||
wait 0,85;
|
||||
self shellshock( "proximity_grenade_exit", 0,6, 0 );
|
||||
self setclientuivisibilityflag( "hud_visible", 1 );
|
||||
self setclientfieldtoplayer( "tazered", 0 );
|
||||
}
|
||||
|
||||
deleteentonownerdeath( owner )
|
||||
{
|
||||
self thread deleteentontimeout();
|
||||
self thread deleteentaftertime();
|
||||
self endon( "delete" );
|
||||
owner waittill( "death" );
|
||||
self notify( "deleteSound" );
|
||||
}
|
||||
|
||||
deleteentaftertime()
|
||||
{
|
||||
self endon( "delete" );
|
||||
wait 10;
|
||||
self notify( "deleteSound" );
|
||||
}
|
||||
|
||||
deleteentontimeout()
|
||||
{
|
||||
self endon( "delete" );
|
||||
self waittill( "deleteSound" );
|
||||
self delete();
|
||||
}
|
||||
|
||||
watch_death()
|
||||
{
|
||||
self waittill( "death" );
|
||||
self stoprumble( "proximity_grenade" );
|
||||
self setblur( 0, 0 );
|
||||
self setclientuivisibilityflag( "hud_visible", 1 );
|
||||
self setclientfieldtoplayer( "tazered", 0 );
|
||||
}
|
Reference in New Issue
Block a user