1798 lines
51 KiB
Plaintext
1798 lines
51 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
main()
|
|
{
|
|
maps\mp\mp_dig_precache::main();
|
|
maps\createart\mp_dig_art::main();
|
|
maps\mp\mp_dig_fx::main();
|
|
level.mapcustomcratefunc = ::digcustomcratefunc;
|
|
level.mapcustomkillstreakfunc = ::digcustomkillstreakfunc;
|
|
level.mapcustombotkillstreakfunc = ::digcustombotkillstreakfunc;
|
|
level.allow_level_killstreak = 1;
|
|
level.custom_death_sound = ::playcustomdeathsound;
|
|
level.nukedeathvisionfunc = ::nukedeathvision;
|
|
maps\mp\_load::main();
|
|
maps\mp\_compass::setupminimap( "compass_map_mp_dig" );
|
|
maps\mp\_utility::setdvar_cg_ng( "r_specularColorScale", 2.5, 5 );
|
|
setdvar( "r_lightGridEnableTweaks", 1 );
|
|
setdvar( "r_lightGridIntensity", 1.33 );
|
|
game["attackers"] = "allies";
|
|
game["defenders"] = "axis";
|
|
game["allies_outfit"] = "urban";
|
|
game["axis_outfit"] = "woodland";
|
|
var_0 = [];
|
|
var_1 = 1;
|
|
|
|
if ( level.gametype == "horde" || level.gametype == "infect" )
|
|
var_1 = 0;
|
|
|
|
if ( level.gametype == "gun" || level.gametype == "sotf" || level.gametype == "sotf_ffa" || maps\mp\_utility::isanymlgmatch() )
|
|
var_0[var_0.size] = "treasure_event";
|
|
|
|
setupevents( var_1, var_0 );
|
|
setupshrineperks();
|
|
thread maps\mp\_dlcalienegg::setupeggformap( "alienEasterEgg" );
|
|
thread nuke_custom_visionset();
|
|
}
|
|
|
|
precacheitems()
|
|
{
|
|
level.breakables_fx["scarabpot"]["break"] = loadfx( "vfx/moments/mp_dig/vfx_kstr_urnbreak_01" );
|
|
level.breakables_fx["scarabpot"]["break_top"] = loadfx( "vfx/moments/mp_dig/vfx_pot_smk_wispy_damage" );
|
|
level.breakables_fx["scarabpot"]["break_scarabs"] = loadfx( "vfx/moments/mp_dig/vfx_scarab_pot_explosion_r" );
|
|
level.breakables_fx["scarab"]["player"] = loadfx( "vfx/moments/mp_dig/vfx_scarab_on_player_r" );
|
|
level.breakables_fx["scarab"]["ground"] = loadfx( "vfx/moments/mp_dig/vfx_scarab_walk_up_r" );
|
|
level.breakables_fx["scarab"]["screen"] = loadfx( "vfx/moments/mp_dig/vfx_scarab_screen_r" );
|
|
level.breakables_fx["scarab"]["flyers"] = loadfx( "vfx/moments/mp_dig/vfx_scarab_groupwflyers" );
|
|
level.dig_fx["torch"]["fire"] = loadfx( "vfx/moments/mp_dig/vfx_torch_fire_03" );
|
|
level.dig_fx["torch"]["sand"] = loadfx( "vfx/moments/mp_dig/vfx_falling_sand_torch" );
|
|
level.dig_fx["shrine"]["player"] = loadfx( "vfx/moments/mp_dig/vfx_kstr_loadedguy" );
|
|
level.dig_fx["shrine"]["screen"] = loadfx( "vfx/moments/mp_dig/vfx_kstr_loadedguy_scr" );
|
|
level.dig_fx["scarab"]["deathAnim"] = loadfx( "vfx/moments/mp_dig/vfx_scarab_death_r" );
|
|
level.dig_fx["flametrap"]["player"] = loadfx( "vfx/moments/mp_dig/vfx_kstr_manflame" );
|
|
level.dig_fx["flametrap"]["screen"] = loadfx( "vfx/moments/mp_dig/vfx_kstr_fireroom_scr" );
|
|
level.dig_fx["flametrap"]["room"] = loadfx( "vfx/moments/mp_dig/vfx_kstr_flameroom_flame" );
|
|
}
|
|
|
|
setupevents( var_0, var_1 )
|
|
{
|
|
precacheitems();
|
|
|
|
if ( var_0 )
|
|
{
|
|
var_2 = 1;
|
|
var_3 = 1;
|
|
var_4 = 1;
|
|
var_5 = 1;
|
|
var_6 = 1;
|
|
|
|
if ( isdefined( var_1 ) && var_1.size > 0 )
|
|
{
|
|
foreach ( var_8 in var_1 )
|
|
{
|
|
switch ( var_8 )
|
|
{
|
|
case "obelisk_event":
|
|
var_2 = 0;
|
|
break;
|
|
case "scarabs_event":
|
|
var_3 = 0;
|
|
break;
|
|
case "treasure_event":
|
|
var_4 = 0;
|
|
break;
|
|
case "snakes_event":
|
|
var_5 = 0;
|
|
break;
|
|
case "shrine_event":
|
|
var_6 = 0;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( var_2 )
|
|
level thread setupobelisk();
|
|
|
|
if ( var_3 )
|
|
{
|
|
level.digscarabpots = [];
|
|
level.digscarabpots = common_scripts\utility::getstructarray( "scarab_pot", "targetname" );
|
|
|
|
foreach ( var_11 in level.digscarabpots )
|
|
level thread setupscarabpot( var_11.origin );
|
|
}
|
|
|
|
if ( var_4 )
|
|
{
|
|
level thread setupradio();
|
|
setuptreasureroom();
|
|
}
|
|
|
|
if ( var_5 )
|
|
{
|
|
var_13 = ( -362, 1982, 733 );
|
|
level thread setupsnakes( var_13 );
|
|
}
|
|
|
|
if ( !var_6 )
|
|
{
|
|
level.allow_level_killstreak = 0;
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
level thread setupobelisk( 1 );
|
|
}
|
|
|
|
getdomflagb()
|
|
{
|
|
var_0 = getentarray( "flag_primary", "targetname" );
|
|
var_1 = undefined;
|
|
|
|
foreach ( var_3 in var_0 )
|
|
{
|
|
if ( var_3.script_label == "_b" )
|
|
{
|
|
var_1 = var_3;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return var_1;
|
|
}
|
|
|
|
updatebflagpos( var_0 )
|
|
{
|
|
level endon( "game_ended" );
|
|
var_1 = getdomflagb();
|
|
|
|
if ( !isdefined( level.dig_old_bflagpos ) )
|
|
level.dig_old_bflagpos = var_1.origin;
|
|
|
|
var_2 = common_scripts\utility::getstruct( "flag_b_after", "targetname" );
|
|
var_3 = vectortoangles( ( 0, 0, 1 ) );
|
|
var_4 = var_2.origin;
|
|
|
|
if ( isdefined( var_0 ) && var_0 )
|
|
{
|
|
var_4 = level.dig_old_bflagpos;
|
|
var_5 = var_4 + ( 0, 0, 32 );
|
|
var_6 = var_4 + ( 0, 0, -32 );
|
|
var_7 = bullettrace( var_5, var_6, 0, undefined );
|
|
var_3 = vectortoangles( var_7["normal"] );
|
|
}
|
|
|
|
var_1.origin = var_4;
|
|
var_1.useobj.curorigin = var_4;
|
|
var_1.useobj.visuals[0].origin = var_4;
|
|
var_1.useobj.baseeffectpos = var_4;
|
|
var_1.useobj.baseeffectforward = anglestoforward( var_3 );
|
|
|
|
if ( isdefined( var_1.useobj.neutralflagfx ) )
|
|
var_1.useobj maps\mp\gametypes\dom::playflagneutralfx();
|
|
|
|
foreach ( var_9 in level.players )
|
|
{
|
|
if ( isdefined( var_9._domflageffect ) && isdefined( var_9._domflageffect["_b"] ) )
|
|
var_1.useobj maps\mp\gametypes\dom::showcapturedbaseeffecttoplayer( var_1.useobj.ownerteam, var_9 );
|
|
}
|
|
}
|
|
|
|
updatebflagobjicon()
|
|
{
|
|
var_0 = getdomflagb();
|
|
var_1 = common_scripts\utility::spawn_tag_origin();
|
|
var_1 show();
|
|
var_1.origin = var_0.origin + ( 0, 0, 100 );
|
|
var_1 linkto( var_0 );
|
|
var_0.useobj.objiconent = var_1;
|
|
var_0.useobj maps\mp\gametypes\_gameobjects::updateworldicons();
|
|
}
|
|
|
|
setupobelisk( var_0 )
|
|
{
|
|
level endon( "game_ended" );
|
|
level.obeliskbefore = getent( "obelisk_before", "targetname" );
|
|
level.obeliskanimated = getent( "obelisk_anim", "targetname" );
|
|
level.obeliskanimated2 = getent( "obelisk_anim_2", "targetname" );
|
|
level.obeliskafter = getent( "obelisk_after", "targetname" );
|
|
level.obeliskfloor = getent( "obelisk_floor", "targetname" );
|
|
level.obeliskbeforeclip = getent( "obelisk_before_clip", "targetname" );
|
|
level.obeliskafterclip = getent( "obelisk_after_clip", "targetname" );
|
|
level.obeliskpathblocker = getent( "obelisk_path_blocker", "targetname" );
|
|
level.obeliskpathholder = getent( "obelisk_path_holder", "targetname" );
|
|
level.obeliskdamage = getent( "obelisk_damage_trigger", "targetname" );
|
|
level.obeliskkilltrigger_ground = getent( "obelisk_kill_trigger", "targetname" );
|
|
level.obeliskkilltrigger_air = getent( "obelisk_kill_trigger_2", "targetname" );
|
|
|
|
if ( isdefined( level.obeliskanimated ) )
|
|
hideent( level.obeliskanimated );
|
|
|
|
if ( isdefined( level.obeliskanimated2 ) )
|
|
hideent( level.obeliskanimated2 );
|
|
|
|
if ( isdefined( level.obeliskfloor ) )
|
|
hideent( level.obeliskfloor );
|
|
|
|
if ( isdefined( level.obeliskafter ) )
|
|
hideent( level.obeliskafter );
|
|
|
|
if ( isdefined( level.obeliskafterclip ) )
|
|
{
|
|
if ( !isdefined( level.obeliskafterclip.killcament ) )
|
|
{
|
|
level.obeliskafterclip.killcament = spawn( "script_model", level.obeliskafterclip.origin + ( 400, -800, 400 ) );
|
|
level.obeliskafterclip.killcament setmodel( "tag_origin" );
|
|
}
|
|
|
|
hideent( level.obeliskafterclip );
|
|
}
|
|
|
|
if ( isdefined( level.obeliskpathholder ) )
|
|
hideent( level.obeliskpathholder );
|
|
|
|
if ( isdefined( level.obeliskpathblocker ) )
|
|
{
|
|
showent( level.obeliskpathblocker );
|
|
level.obeliskpathblocker disconnectpaths();
|
|
level thread delayhide( level.obeliskpathblocker, 0.05 );
|
|
}
|
|
|
|
if ( isdefined( level.obeliskkilltrigger_ground ) )
|
|
{
|
|
level.obeliskkilltrigger_ground.dmg = 0;
|
|
level.obeliskkilltrigger_ground thread killall( "obelisk_impact", 5000, "MOD_CRUSH" );
|
|
level.obeliskkilltrigger_ground common_scripts\utility::trigger_off();
|
|
}
|
|
|
|
if ( isdefined( level.obeliskkilltrigger_air ) )
|
|
{
|
|
level.obeliskkilltrigger_air.dmg = 0;
|
|
level.obeliskkilltrigger_air common_scripts\utility::trigger_off();
|
|
}
|
|
|
|
if ( isdefined( level.obeliskbefore ) )
|
|
showent( level.obeliskbefore );
|
|
|
|
if ( isdefined( level.obeliskbeforeclip ) )
|
|
showent( level.obeliskbeforeclip );
|
|
|
|
level.obeliskfallen = 0;
|
|
|
|
if ( !isdefined( var_0 ) || !var_0 )
|
|
{
|
|
level childthread watchobeliskactivation();
|
|
|
|
if ( isdefined( level.obeliskdamage ) )
|
|
{
|
|
level.obeliskdamage waittill( "trigger", var_1 );
|
|
level.obeliskowner = var_1;
|
|
level notify( "obelisk_activated" );
|
|
}
|
|
}
|
|
}
|
|
|
|
watchobeliskactivation()
|
|
{
|
|
level waittill( "obelisk_activated" );
|
|
hideent( level.obeliskbefore );
|
|
hideent( level.obeliskbeforeclip );
|
|
level thread delayexploder( 0.24, 10 );
|
|
level thread delayexploder( 0.9, 11 );
|
|
level thread delayexploder( 1.5, 12 );
|
|
level thread delayexploder( 1.7, 13 );
|
|
level thread delayexploder( 1.8, 14 );
|
|
level thread delayexploder( 2.1, 15 );
|
|
level thread delayexploder( 2.25, 16 );
|
|
level thread delayexploder( 2.9, 20 );
|
|
level thread delayexploder( 2.95, 21 );
|
|
level thread delayexploder( 3, 22 );
|
|
showent( level.obeliskanimated );
|
|
showent( level.obeliskanimated2 );
|
|
level.obeliskanimated scriptmodelplayanimdeltamotion( "mp_dig_obelisk_dest_anim_01" );
|
|
level.obeliskanimated2 scriptmodelplayanimdeltamotion( "mp_dig_obelisk_dest_anim_02" );
|
|
level.obeliskkilltrigger_air thread delaytrigger( 1, "on" );
|
|
level.obeliskkilltrigger_air thread delaytrigger( 2, "off" );
|
|
level thread obeliskimpact();
|
|
level thread obelisksounds();
|
|
wait 7;
|
|
hideent( level.obeliskanimated );
|
|
hideent( level.obeliskanimated2 );
|
|
showent( level.obeliskafter );
|
|
level.obeliskfallen = 1;
|
|
}
|
|
|
|
resetobelisk()
|
|
{
|
|
for (;;)
|
|
{
|
|
level waittill( "obelisk_reset" );
|
|
|
|
if ( level.obeliskfallen )
|
|
{
|
|
level.obeliskafterclip connectpaths();
|
|
|
|
if ( level.gametype == "dom" || level.gametype == "siege" )
|
|
{
|
|
updatebflagpos( 1 );
|
|
updatebflagobjicon();
|
|
}
|
|
|
|
level thread setupobelisk();
|
|
}
|
|
}
|
|
}
|
|
|
|
obelisksounds()
|
|
{
|
|
level endon( "game_ended" );
|
|
var_0 = ( 0, 0, -300 );
|
|
var_1 = ( 0, 0, 0 );
|
|
var_2 = ( 0, 0, 400 );
|
|
level.obelisksoundbaseobj = spawn( "script_model", level.obeliskanimated.origin + var_0 );
|
|
level.obelisksoundmidobj = spawn( "script_model", level.obeliskanimated.origin + var_1 );
|
|
level.obelisksoundtopobj = spawn( "script_model", level.obeliskanimated.origin + var_2 );
|
|
level.obelisksoundbaseobj setmodel( "tag_origin" );
|
|
level.obelisksoundmidobj setmodel( "tag_origin" );
|
|
level.obelisksoundtopobj setmodel( "tag_origin" );
|
|
level.obelisksoundmidobj linkto( level.obeliskanimated, "tag_mp_dig_obelisk_dyn_08" );
|
|
level.obelisksoundtopobj linkto( level.obeliskanimated, "tag_mp_dig_obelisk_dyn_04" );
|
|
common_scripts\utility::waitframe();
|
|
level.obelisksoundbaseobj playsound( "mp_dig_obelisk_fall_base" );
|
|
level.obelisksoundmidobj playsoundonmovingent( "mp_dig_obelisk_fall_mid" );
|
|
level.obelisksoundtopobj playsoundonmovingent( "mp_dig_obelisk_fall_top" );
|
|
}
|
|
|
|
obeliskimpact()
|
|
{
|
|
level endon( "game_ended" );
|
|
var_0 = ( -1140, -108, 712 );
|
|
wait 3.1;
|
|
earthquake( 0.4, 3, var_0, 2000 );
|
|
showent( level.obeliskafterclip );
|
|
level.obeliskafterclip disconnectpaths();
|
|
showent( level.obeliskpathblocker );
|
|
level.obeliskpathblocker connectpaths();
|
|
level thread delayhide( level.obeliskpathblocker, 0.05 );
|
|
|
|
if ( level.gametype == "dom" || level.gametype == "siege" )
|
|
{
|
|
updatebflagpos();
|
|
updatebflagobjicon();
|
|
}
|
|
|
|
level notify( "obelisk_impact" );
|
|
}
|
|
|
|
setupscarabpot( var_0 )
|
|
{
|
|
level endon( "game_ended" );
|
|
var_1 = spawn( "script_model", var_0 );
|
|
var_1 setmodel( "dig_pottery_06" );
|
|
var_1.origin = var_0;
|
|
var_1.health = 300;
|
|
var_1.damagetaken = 0;
|
|
var_1.idlesound = "mp_dig_scarab_pot_rattle";
|
|
var_1.lidsound = "mp_dig_scarab_pot_hit_lid";
|
|
var_1.smokesound = "mp_dig_scarab_pot_smoke_lp";
|
|
var_1.breaksound = "mp_dig_scarab_pot_explode";
|
|
var_1.hasscarabs = 1;
|
|
var_1.broken = 0;
|
|
var_1 setcandamage( 1 );
|
|
var_1 solid( 1 );
|
|
var_1 thread playpotrattle();
|
|
var_2 = spawn( "script_model", var_0 + ( 0, 0, 33 ) );
|
|
var_2 setmodel( "dig_pottery_06_lid" );
|
|
|
|
for (;;)
|
|
{
|
|
var_1 waittill( "damage", var_3, var_4, var_5, var_6, var_7 );
|
|
var_1.damagetype = var_7;
|
|
var_1.damageowner = var_4;
|
|
var_1.damagetaken = var_1.damagetaken + var_3;
|
|
|
|
if ( var_1.damagetaken == var_3 )
|
|
var_1 thread startpotbreaking( var_2 );
|
|
}
|
|
}
|
|
|
|
resetscarabpot( var_0, var_1 )
|
|
{
|
|
for (;;)
|
|
{
|
|
level waittill( "scarab_pot_reset" );
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
setupscarabpot( var_1 );
|
|
}
|
|
}
|
|
|
|
playpotrattle()
|
|
{
|
|
self endon( "pot_lid_broken" );
|
|
level endon( "game_ended" );
|
|
|
|
for (;;)
|
|
{
|
|
if ( isdefined( self ) )
|
|
self playsound( self.idlesound );
|
|
|
|
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause( randomintrange( 8, 15 ) );
|
|
}
|
|
}
|
|
|
|
startpotbreaking( var_0 )
|
|
{
|
|
var_1 = 0;
|
|
var_2 = 0;
|
|
var_3 = anglestoup( self.angles );
|
|
var_4 = anglestoup( ( 0, 90, 0 ) );
|
|
var_5 = vectordot( var_3, var_4 );
|
|
var_6 = ( 0, 0, 0 );
|
|
var_7 = ( 0, 0, 32 );
|
|
|
|
if ( var_5 < 0.5 )
|
|
{
|
|
var_6 = var_3 * 22 - ( 0, 0, 30 );
|
|
var_7 = var_3 * 22 + ( 0, 0, 14 );
|
|
}
|
|
|
|
if ( self.damagetype != "MOD_GRENADE_SPLASH" && self.damagetype != "MOD_GRENADE" )
|
|
{
|
|
while ( self.damagetaken < self.health )
|
|
{
|
|
if ( !var_2 )
|
|
{
|
|
var_0 hide();
|
|
self playsound( self.lidsound );
|
|
self notify( "pot_lid_broken" );
|
|
thread playpotfx( var_7 );
|
|
self playloopsound( self.smokesound );
|
|
var_2 = 1;
|
|
}
|
|
|
|
if ( var_1 > 20 )
|
|
var_1 = 0;
|
|
|
|
if ( var_1 == 0 )
|
|
self.damagetaken = self.damagetaken + ( 10 + randomfloat( 10 ) );
|
|
|
|
var_1++;
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
breakpot( var_0 );
|
|
}
|
|
|
|
playpotfx( var_0 )
|
|
{
|
|
level endon( "game_ended" );
|
|
|
|
while ( isdefined( self ) && !self.broken )
|
|
{
|
|
playfx( level.breakables_fx["scarabpot"]["break_top"], self.origin + var_0 );
|
|
wait 0.1;
|
|
}
|
|
}
|
|
|
|
breakpot( var_0 )
|
|
{
|
|
var_0 hide();
|
|
self playsound( self.lidsound );
|
|
self notify( "pot_lid_broken" );
|
|
self stoploopsound( self.smokesound );
|
|
self.broken = 1;
|
|
self solid( 0 );
|
|
self setcandamage( 0 );
|
|
var_1 = anglestoup( self.angles );
|
|
var_2 = anglestoup( ( 0, 90, 0 ) );
|
|
var_3 = vectordot( var_1, var_2 );
|
|
var_4 = ( 0, 0, 0 );
|
|
|
|
if ( var_3 < 0.5 )
|
|
{
|
|
var_5 = self.origin + var_1 * 22;
|
|
var_6 = physicstrace( var_5, var_5 + ( 0, 0, -64 ) );
|
|
var_4 = var_6 - self.origin;
|
|
}
|
|
|
|
var_4 = var_4 + ( 0, 0, 4 );
|
|
self playsound( self.breaksound );
|
|
playfx( level.breakables_fx["scarabpot"]["break"], self.origin + var_4 + ( 0, 0, 20 ) );
|
|
playfx( level.breakables_fx["scarabpot"]["break_scarabs"], self.origin + var_4 + ( 0, 0, 30 ) );
|
|
self hide();
|
|
|
|
if ( self.hasscarabs )
|
|
setupdeathzone();
|
|
}
|
|
|
|
setupdeathzone()
|
|
{
|
|
var_0 = 65;
|
|
var_1 = 10;
|
|
var_2 = spawn( "trigger_radius", self.origin, 0, var_0, var_1 );
|
|
var_2 thread setupscarab( self.damageowner );
|
|
self delete();
|
|
}
|
|
|
|
setupscarab( var_0 )
|
|
{
|
|
level endon( "game_ended" );
|
|
var_1 = 15;
|
|
var_2 = spawn( "script_model", self.origin );
|
|
var_2 setmodel( "tag_origin" );
|
|
var_2.sound = "mp_dig_scarab_swarm";
|
|
var_2.owner = var_0;
|
|
var_2.killcament = spawn( "script_model", var_2.origin + ( 0, 0, 100 ) );
|
|
var_2.killcament setmodel( "tag_origin" );
|
|
|
|
if ( !isdefined( level.traps ) )
|
|
level.traps = [];
|
|
|
|
level.traps[level.traps.size] = var_2;
|
|
var_2 thread watchlifetime( "scarabs_death", "scarabs_attacked_player", var_1 );
|
|
var_2 thread cleanupscarab( self );
|
|
var_2 thread playscarabfx();
|
|
var_2 playsound( var_2.sound );
|
|
wait 2;
|
|
var_2 thread watchscarabtrigger( self );
|
|
}
|
|
|
|
cleanupscarab( var_0 )
|
|
{
|
|
common_scripts\utility::waittill_any( "scarabs_killed_player", "scarabs_death" );
|
|
level.traps = common_scripts\utility::array_remove( level.traps, self );
|
|
self delete();
|
|
var_0 delete();
|
|
}
|
|
|
|
playscarabfx()
|
|
{
|
|
level endon( "game_ended" );
|
|
common_scripts\utility::waitframe();
|
|
playfxontag( level.breakables_fx["scarab"]["ground"], self, "tag_origin" );
|
|
playfxontag( level.breakables_fx["scarab"]["flyers"], self, "tag_origin" );
|
|
}
|
|
|
|
delaystopsound( var_0 )
|
|
{
|
|
level endon( "game_ended" );
|
|
wait( var_0 );
|
|
self stopsounds();
|
|
}
|
|
|
|
watchscarabtrigger( var_0 )
|
|
{
|
|
self endon( "scarabs_death" );
|
|
|
|
for (;;)
|
|
{
|
|
var_0 waittill( "trigger", var_1 );
|
|
|
|
if ( level.teambased )
|
|
{
|
|
if ( isdefined( var_1 ) && isplayer( var_1 ) && ( var_1.team != self.owner.team || var_1 == self.owner ) )
|
|
{
|
|
thread delaystopsound( 0.5 );
|
|
thread killnearbyvictim( var_1 );
|
|
self notify( "scarabs_attacked_player" );
|
|
break;
|
|
}
|
|
}
|
|
else if ( isdefined( var_1 ) && isplayer( var_1 ) )
|
|
{
|
|
thread delaystopsound( 0.5 );
|
|
thread killnearbyvictim( var_1 );
|
|
self notify( "scarabs_attacked_player" );
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
killnearbyvictim( var_0 )
|
|
{
|
|
self endon( "scarabs_killed_player" );
|
|
self endon( "scarabs_death" );
|
|
thread watchscarabkill( var_0 );
|
|
|
|
if ( isdefined( var_0 ) && isalive( var_0 ) )
|
|
{
|
|
stopfxontag( level.breakables_fx["scarab"]["flyers"], self, "tag_origin" );
|
|
self moveto( var_0.origin, 0.8 );
|
|
}
|
|
}
|
|
|
|
watchscarabkill( var_0, var_1 )
|
|
{
|
|
var_0 endon( "death" );
|
|
self endon( "scarabs_killed_player" );
|
|
self endon( "scarabs_death" );
|
|
|
|
if ( !isdefined( var_1 ) || var_1 == 0 )
|
|
{
|
|
while ( distancesquared( var_0.origin, self.origin ) > 4000 )
|
|
wait 0.05;
|
|
|
|
stopfxontag( level.breakables_fx["scarab"]["ground"], self, "tag_origin" );
|
|
}
|
|
|
|
var_2 = undefined;
|
|
|
|
if ( !var_0 maps\mp\_utility::isusingremote() )
|
|
{
|
|
var_2 = spawnfxforclient( level.breakables_fx["scarab"]["screen"], var_0 geteye(), var_0 );
|
|
triggerfx( var_2 );
|
|
var_2 setfxkilldefondelete();
|
|
var_0 playlocalsound( "mp_dig_scarab_plr_overtaken" );
|
|
}
|
|
|
|
var_0 playsoundonmovingent( "mp_dig_scarab_npc_overtaken" );
|
|
var_0 thread killfxonplayerdeath( var_2 );
|
|
var_0 thread doperiodicdamage( var_2, 20, 0.5, "MOD_SCARAB", self, "scarabs_killed_player", self.owner, self );
|
|
}
|
|
|
|
playcustomdeathsound( var_0, var_1, var_2 )
|
|
{
|
|
if ( var_1 == "MOD_SCARAB" )
|
|
return;
|
|
|
|
var_0 maps\mp\_utility::playdeathsound();
|
|
return;
|
|
}
|
|
|
|
#using_animtree("multiplayer");
|
|
|
|
playdeathanimscarabs()
|
|
{
|
|
level endon( "game_ended" );
|
|
self waittill( "death_delay_start" );
|
|
var_0 = self.body getcorpseanim();
|
|
var_1 = spawn( "script_model", self.body.origin );
|
|
var_1 setmodel( "scarab_fullbody_bone_fx" );
|
|
var_1.origin = self.body.origin;
|
|
var_1.angles = self.body.angles;
|
|
var_1 linkto( self.body, "tag_origin", ( 0, 50, 0 ), var_1.angles );
|
|
|
|
if ( var_0 == %mp_scarab_death_stand_1 )
|
|
var_1 scriptmodelplayanim( "scarab_fullbody_bone_fx_stand_anim" );
|
|
else if ( var_0 == %mp_scarab_death_crouch_1 )
|
|
var_1 scriptmodelplayanim( "scarab_fullbody_bone_fx_crouch_anim" );
|
|
else
|
|
var_1 scriptmodelplayanim( "scarab_fullbody_bone_fx_prone_anim" );
|
|
|
|
for ( var_2 = 0; var_2 < 32; var_2++ )
|
|
{
|
|
if ( var_2 < 2 )
|
|
continue;
|
|
else if ( var_2 < 10 )
|
|
playfxontag( level.dig_fx["scarab"]["deathAnim"], var_1, "Point00" + var_2 );
|
|
else
|
|
playfxontag( level.dig_fx["scarab"]["deathAnim"], var_1, "Point0" + var_2 );
|
|
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
|
|
thread stopfxonplayerspawn( var_1 );
|
|
}
|
|
|
|
stopfxonplayerspawn( var_0 )
|
|
{
|
|
level endon( "game_ended" );
|
|
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause( 10 );
|
|
|
|
for ( var_1 = 0; var_1 < 32; var_1++ )
|
|
{
|
|
if ( var_1 < 2 )
|
|
continue;
|
|
else if ( var_1 < 10 )
|
|
stopfxontag( level.dig_fx["scarab"]["deathAnim"], var_0, "Point00" + var_1 );
|
|
else
|
|
stopfxontag( level.dig_fx["scarab"]["deathAnim"], var_0, "Point0" + var_1 );
|
|
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
|
|
var_0 delete();
|
|
}
|
|
|
|
setupradio()
|
|
{
|
|
level endon( "game_ended" );
|
|
level.treasure_room_jackpot = 0;
|
|
level.radioarray = getentarray( "secret_room_radio", "targetname" );
|
|
var_0 = randomintrange( 2, 5 );
|
|
var_1 = randomintrange( 30, 60 );
|
|
level thread jackpotwatcher( var_0, var_1 );
|
|
}
|
|
|
|
jackpotwatcher( var_0, var_1 )
|
|
{
|
|
level endon( "game_ended" );
|
|
|
|
for (;;)
|
|
{
|
|
if ( maps\mp\_utility::getminutespassed() > var_0 && ( isdefined( level.treasure_room_jackpot ) && !level.treasure_room_jackpot ) )
|
|
{
|
|
foreach ( var_3 in level.radioarray )
|
|
{
|
|
if ( isdefined( var_3 ) )
|
|
var_3 playsound( "mp_dig_uk_tomb_special" );
|
|
}
|
|
|
|
level thread jackpottimeout( 30 );
|
|
level.treasure_room_jackpot = 1;
|
|
}
|
|
else
|
|
{
|
|
foreach ( var_3 in level.radioarray )
|
|
{
|
|
if ( isdefined( var_3 ) )
|
|
var_3 playsound( "mp_dig_uk_tomb1" );
|
|
}
|
|
}
|
|
|
|
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause( var_1 );
|
|
}
|
|
}
|
|
|
|
jackpottimeout( var_0 )
|
|
{
|
|
level endon( "game_ended" );
|
|
level endon( "chest_raided" );
|
|
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause( var_0 );
|
|
level.treasure_room_jackpot = undefined;
|
|
}
|
|
|
|
setuptreasureroom()
|
|
{
|
|
level.treasure_room_open = 0;
|
|
level.treasuredoor = getent( "secret_room_door_model", "targetname" );
|
|
level.treasuredoorclip = getent( "secret_room_door", "targetname" );
|
|
|
|
if ( isdefined( level.treasuredoor ) && isdefined( level.treasuredoorclip ) )
|
|
level.treasuredoorclip linkto( level.treasuredoor );
|
|
|
|
level.flamedeathzone = getent( "secret_room_kill", "targetname" );
|
|
|
|
if ( isdefined( level.flamedeathzone ) )
|
|
{
|
|
level.flamedeathzone.dmg = 0;
|
|
level.flamedeathzone thread killall( "flame_ended", 5000, "MOD_CRUSH" );
|
|
level.flamedeathzone common_scripts\utility::trigger_off();
|
|
}
|
|
|
|
level thread watchtorchesused();
|
|
level.key_torches = getentarray( "torch_trigs", "targetname" );
|
|
|
|
foreach ( var_1 in level.key_torches )
|
|
{
|
|
var_1 sethintstring( &"MP_DIG_ACTIVATE_TORCH" );
|
|
var_1 thread watchtorchuse();
|
|
var_1.used = 0;
|
|
}
|
|
}
|
|
|
|
watchtorchuse()
|
|
{
|
|
level endon( "game_ended" );
|
|
self waittill( "trigger", var_0 );
|
|
activatetorch( var_0 );
|
|
}
|
|
|
|
activatetorch( var_0 )
|
|
{
|
|
self makeunusable();
|
|
var_1 = getent( self.target, "targetname" );
|
|
var_1 rotatepitch( -45, 4 );
|
|
var_1 playsound( "mp_dig_torch_rotate" );
|
|
var_2 = spawnfx( level.dig_fx["torch"]["sand"], var_1.origin );
|
|
triggerfx( var_2 );
|
|
self.used = 1;
|
|
level notify( "torch_used", var_0 );
|
|
}
|
|
|
|
watchtorchesused()
|
|
{
|
|
level endon( "game_ended" );
|
|
var_0 = 0;
|
|
|
|
for (;;)
|
|
{
|
|
level waittill( "torch_used", var_1 );
|
|
var_0 = var_0 + 1;
|
|
|
|
if ( var_0 == 3 )
|
|
{
|
|
level.dig_hidden_door_owner = var_1;
|
|
level thread opentreasureroom();
|
|
var_0 = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
opentreasureroom()
|
|
{
|
|
level endon( "game_ended" );
|
|
var_0 = ( -5, -105, 0 );
|
|
|
|
if ( !isdefined( level.doorsoundobj ) )
|
|
{
|
|
level.doorsoundobj = spawn( "script_model", level.treasuredoor.origin + var_0 );
|
|
level.doorsoundobj setmodel( "tag_origin" );
|
|
level.doorsoundobj linkto( level.treasuredoor );
|
|
}
|
|
|
|
level thread doorsounds();
|
|
level.treasuredoor rotateyaw( 75, 15 );
|
|
earthquake( 0.1, 15, level.treasuredoor.origin, 500 );
|
|
common_scripts\utility::exploder( 59 );
|
|
wait 15;
|
|
level.treasuredoorclip connectpaths();
|
|
level.treasure_room_open = 1;
|
|
spawnkillstreakchest();
|
|
}
|
|
|
|
doorsounds()
|
|
{
|
|
level endon( "game_ended" );
|
|
common_scripts\utility::waitframe();
|
|
level.doorsoundobj playsoundonmovingent( "mp_dig_treasure_door_open" );
|
|
}
|
|
|
|
spawnkillstreakchest()
|
|
{
|
|
level.chest_rewardtype = common_scripts\utility::random( [ "uplink_support", "deployable_vest", "deployable_ammo", "ball_drone_radar", "aa_launcher", "jammer", "ims" ] );
|
|
|
|
if ( isdefined( level.treasure_room_jackpot ) && level.treasure_room_jackpot )
|
|
level.chest_rewardtype = "odin_assault";
|
|
|
|
level.chest_rewardhint = game["strings"][level.chest_rewardtype + "_hint"];
|
|
|
|
if ( !isdefined( level.chest_trigger ) )
|
|
level.chest_trigger = getent( "secret_room_chest", "targetname" );
|
|
|
|
if ( isdefined( level.chest_trigger ) )
|
|
{
|
|
if ( !isdefined( level.chest_useobj ) )
|
|
{
|
|
level.chest_useobj = maps\mp\gametypes\_gameobjects::createuseobject( "neutral", level.chest_trigger, [ level.chest_trigger ], ( 0, 0, 0 ) );
|
|
level.chest_useobj.id = "care_package";
|
|
}
|
|
else
|
|
level.chest_useobj maps\mp\gametypes\_gameobjects::enableobject();
|
|
|
|
level.chest_useobj maps\mp\gametypes\_gameobjects::setusetime( 4 );
|
|
level.chest_useobj maps\mp\gametypes\_gameobjects::setusehinttext( level.chest_rewardhint );
|
|
level.chest_useobj maps\mp\gametypes\_gameobjects::setvisibleteam( "any" );
|
|
level.chest_useobj maps\mp\gametypes\_gameobjects::allowuse( "any" );
|
|
level.chest_useobj.onuse = ::chestonuse;
|
|
level.chest_useobj.onbeginuse = ::chestonbeginuse;
|
|
level.chest_useobj.onenduse = ::chestonenduse;
|
|
|
|
if ( !isdefined( level.chest_display ) )
|
|
level.chest_display = common_scripts\utility::getstruct( level.chest_trigger.target, "targetname" );
|
|
|
|
level.chest_display maps\mp\_entityheadicons::setheadicon( level.dig_hidden_door_owner, maps\mp\_utility::getkillstreakoverheadicon( level.chest_rewardtype ), ( 0, 0, 0 ), 14, 14, 0, undefined, undefined, undefined, undefined, 0 );
|
|
}
|
|
}
|
|
|
|
chestonuse( var_0 )
|
|
{
|
|
var_0 chestupdate();
|
|
maps\mp\gametypes\_gameobjects::disableobject();
|
|
}
|
|
|
|
chestonbeginuse( var_0 )
|
|
{
|
|
|
|
}
|
|
|
|
chestonenduse( var_0, var_1, var_2 )
|
|
{
|
|
if ( isplayer( var_1 ) )
|
|
var_1 maps\mp\gametypes\_gameobjects::updateuiprogress( self, 0 );
|
|
}
|
|
|
|
chestupdate()
|
|
{
|
|
level.chest_display maps\mp\_entityheadicons::setheadicon( level.dig_hidden_door_owner, "", ( 0, 0, 10 ), 14, 14, 0, undefined, undefined, undefined, undefined, 0 );
|
|
common_scripts\utility::exploder( 56 );
|
|
level.chest_trigger playsound( "mp_dig_treasure_smoke" );
|
|
var_0 = ( 120, 70, -50 );
|
|
var_1 = spawn( "script_origin", level.chest_trigger.origin + var_0 );
|
|
var_1 hide();
|
|
earthquake( 0.2, 16, var_1.origin, 400 );
|
|
var_1 playsound( "mp_dig_door_rumble" );
|
|
thread maps\mp\killstreaks\_killstreaks::givekillstreak( level.chest_rewardtype, 0, 0, self );
|
|
|
|
if ( isdefined( level.treasure_room_jackpot ) && level.treasure_room_jackpot )
|
|
{
|
|
level.treasure_room_jackpot = undefined;
|
|
level notify( "chest_raided" );
|
|
}
|
|
|
|
level thread notifydeadplayers();
|
|
level thread closetreasureroom();
|
|
}
|
|
|
|
resettreasureroom()
|
|
{
|
|
level endon( "game_ended" );
|
|
level waittill( "treasure_room_reset" );
|
|
|
|
if ( level.treasure_room_open )
|
|
level thread closetreasureroom();
|
|
|
|
level.chest_display maps\mp\_entityheadicons::setheadicon( level.dig_hidden_door_owner, "", ( 0, 0, 10 ), 14, 14, 0, undefined, undefined, undefined, undefined, 0 );
|
|
|
|
if ( isdefined( level.chest_useobj ) )
|
|
level.chest_useobj maps\mp\gametypes\_gameobjects::disableobject();
|
|
|
|
foreach ( var_1 in level.key_torches )
|
|
{
|
|
if ( var_1.used )
|
|
{
|
|
var_2 = getent( var_1.target, "targetname" );
|
|
var_2 rotatepitch( 45, 0.1 );
|
|
var_1 makeusable();
|
|
var_1 sethintstring( &"MP_DIG_ACTIVATE_TORCH" );
|
|
var_1 thread watchtorchuse();
|
|
var_1.used = 0;
|
|
}
|
|
}
|
|
|
|
level.treasure_room_jackpot = 0;
|
|
}
|
|
|
|
notifydeadplayers()
|
|
{
|
|
level endon( "game_ended" );
|
|
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause( 11 );
|
|
level.flamedeathzone common_scripts\utility::trigger_on();
|
|
|
|
foreach ( var_1 in level.players )
|
|
{
|
|
if ( var_1 istouching( level.flamedeathzone ) )
|
|
var_1 playlocalsound( "mp_dig_tomb_die1" );
|
|
}
|
|
}
|
|
|
|
closetreasureroom()
|
|
{
|
|
level endon( "game_ended" );
|
|
|
|
if ( isdefined( level.doorsoundobj ) )
|
|
level.doorsoundobj playsoundonmovingent( "mp_dig_treasure_door_close" );
|
|
|
|
level.treasuredoor rotateyaw( -75, 15 );
|
|
earthquake( 0.1, 15, level.treasuredoor.origin, 500 );
|
|
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause( 15 );
|
|
level.treasuredoorclip disconnectpaths();
|
|
level.treasure_room_open = 0;
|
|
level thread triggerflametrap();
|
|
}
|
|
|
|
triggerflametrap()
|
|
{
|
|
common_scripts\utility::exploder( 57 );
|
|
var_0 = common_scripts\utility::getstructarray( "secret_room_fire_mid", "targetname" );
|
|
|
|
foreach ( var_4, var_2 in var_0 )
|
|
{
|
|
var_3 = spawn( "script_origin", var_2.origin );
|
|
var_3 hide();
|
|
var_3 playsound( "mp_dig_fire_wall" + ( var_4 + 1 ) );
|
|
}
|
|
|
|
foreach ( var_6 in level.participants )
|
|
{
|
|
if ( isplayer( var_6 ) && maps\mp\_utility::isreallyalive( var_6 ) && var_6 istouching( level.flamedeathzone ) )
|
|
{
|
|
playfxontag( level.dig_fx["flametrap"]["player"], var_6, "j_spineupper" );
|
|
var_7 = spawnfxforclient( level.dig_fx["flametrap"]["screen"], var_6 geteye(), var_6 );
|
|
triggerfx( var_7 );
|
|
var_7 setfxkilldefondelete();
|
|
var_6 thread killfxonplayerdeath( var_7 );
|
|
var_6 thread stopfxonspawn( level.dig_fx["flametrap"]["player"], "j_spineupper" );
|
|
var_6 thread doperiodicdamage( var_7, 20, 0.5, "MOD_SCARAB" );
|
|
}
|
|
}
|
|
|
|
level thread delaynotify( "flame_ended", 4 );
|
|
}
|
|
|
|
setupsnakes( var_0 )
|
|
{
|
|
level endon( "game_ended" );
|
|
|
|
if ( !isdefined( level.dig_snake ) )
|
|
{
|
|
level.dig_snake = spawn( "script_model", var_0 );
|
|
level.dig_snake setmodel( "snake_many_mp_dig_secretroom" );
|
|
level.dig_snake.origin = var_0;
|
|
}
|
|
|
|
for (;;)
|
|
{
|
|
level.dig_snake scriptmodelplayanim( "snake_many_mp_dig_secretroom_anim" );
|
|
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause( 66.7 );
|
|
}
|
|
}
|
|
|
|
setupshrineperks()
|
|
{
|
|
level.shrineperks = [];
|
|
level.abilitycategories = maps\mp\gametypes\_class::getnumabilitycategories();
|
|
level.abilitypercategory = maps\mp\gametypes\_class::getnumsubability();
|
|
|
|
for ( var_0 = 0; var_0 < level.abilitycategories; var_0++ )
|
|
{
|
|
for ( var_1 = 0; var_1 < level.abilitypercategory; var_1++ )
|
|
{
|
|
var_2 = tablelookup( "mp/cacAbilityTable.csv", 0, var_0 + 1, 4 + var_1 );
|
|
|
|
if ( validshrineperk( var_2 ) )
|
|
level.shrineperks[level.shrineperks.size] = var_2;
|
|
}
|
|
}
|
|
}
|
|
|
|
validshrineperk( var_0 )
|
|
{
|
|
var_1 = 1;
|
|
|
|
switch ( var_0 )
|
|
{
|
|
case "specialty_twoprimaries":
|
|
case "specialty_hardline":
|
|
case "specialty_gambler":
|
|
case "specialty_extra_attachment":
|
|
case "specialty_extraammo":
|
|
case "specialty_extra_deadly":
|
|
case "specialty_extra_equipment":
|
|
var_1 = 0;
|
|
break;
|
|
}
|
|
|
|
return var_1;
|
|
}
|
|
|
|
digcustomcratefunc()
|
|
{
|
|
if ( !isdefined( game["player_holding_level_killstrek"] ) )
|
|
game["player_holding_level_killstrek"] = 0;
|
|
|
|
if ( !maps\mp\_utility::allowlevelkillstreaks() || game["player_holding_level_killstrek"] || !level.allow_level_killstreak )
|
|
return;
|
|
|
|
maps\mp\killstreaks\_airdrop::addcratetype( "airdrop_assault", "dig_level_killstreak", 85, ::digcratethink, maps\mp\killstreaks\_airdrop::get_friendly_crate_model(), maps\mp\killstreaks\_airdrop::get_enemy_crate_model(), &"MP_DIG_ACTIVATE_SHRINE" );
|
|
maps\mp\killstreaks\_airdrop::generatemaxweightedcratevalue();
|
|
level thread watch_for_dig_killstreak();
|
|
}
|
|
|
|
digcratethink( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
self endon( "restarting_physics" );
|
|
level endon( "game_ended" );
|
|
|
|
if ( isdefined( game["strings"][self.cratetype + "_hint"] ) )
|
|
var_1 = game["strings"][self.cratetype + "_hint"];
|
|
else
|
|
var_1 = &"PLATFORM_GET_KILLSTREAK";
|
|
|
|
maps\mp\killstreaks\_airdrop::cratesetupforuse( var_1, maps\mp\_utility::getkillstreakoverheadicon( self.cratetype ) );
|
|
thread crateothercapturethink();
|
|
thread crateownercapturethink();
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "captured", var_2 );
|
|
level.dig_killstreak_user = var_2;
|
|
|
|
if ( isplayer( var_2 ) )
|
|
{
|
|
var_2 setclientomnvar( "ui_securing", 0 );
|
|
var_2.ui_securing = undefined;
|
|
}
|
|
|
|
tryusedigkillstreak();
|
|
maps\mp\killstreaks\_airdrop::deletecrate();
|
|
}
|
|
}
|
|
|
|
crateothercapturethink( var_0 )
|
|
{
|
|
self endon( "restarting_physics" );
|
|
|
|
while ( isdefined( self ) )
|
|
{
|
|
self waittill( "trigger", var_1 );
|
|
|
|
if ( isdefined( self.owner ) && var_1 == self.owner )
|
|
continue;
|
|
|
|
if ( !maps\mp\killstreaks\_airdrop::validateopenconditions( var_1 ) )
|
|
continue;
|
|
|
|
if ( var_1 maps\mp\_utility::isjuggernaut() )
|
|
{
|
|
var_1 iprintlnbold( &"MP_DIG_LEVEL_KILLSTREAK_REJECT" );
|
|
continue;
|
|
}
|
|
|
|
if ( isdefined( level.overridecrateusetime ) )
|
|
var_2 = level.overridecrateusetime;
|
|
else
|
|
var_2 = undefined;
|
|
|
|
var_1.iscapturingcrate = 1;
|
|
var_3 = maps\mp\killstreaks\_airdrop::createuseent();
|
|
var_4 = var_3 maps\mp\killstreaks\_airdrop::useholdthink( var_1, var_2, var_0 );
|
|
|
|
if ( isdefined( var_3 ) )
|
|
var_3 delete();
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
return;
|
|
|
|
if ( !var_4 )
|
|
{
|
|
var_1.iscapturingcrate = 0;
|
|
continue;
|
|
}
|
|
|
|
var_1.iscapturingcrate = 0;
|
|
self notify( "captured", var_1 );
|
|
}
|
|
}
|
|
|
|
crateownercapturethink( var_0 )
|
|
{
|
|
self endon( "restarting_physics" );
|
|
|
|
while ( isdefined( self ) )
|
|
{
|
|
self waittill( "trigger", var_1 );
|
|
|
|
if ( isdefined( self.owner ) && var_1 != self.owner )
|
|
continue;
|
|
|
|
if ( !maps\mp\killstreaks\_airdrop::validateopenconditions( var_1 ) )
|
|
continue;
|
|
|
|
if ( var_1 maps\mp\_utility::isjuggernaut() )
|
|
{
|
|
var_1 iprintlnbold( &"MP_DIG_LEVEL_KILLSTREAK_REJECT" );
|
|
continue;
|
|
}
|
|
|
|
var_1.iscapturingcrate = 1;
|
|
|
|
if ( !maps\mp\killstreaks\_airdrop::useholdthink( var_1, 500, var_0 ) )
|
|
{
|
|
var_1.iscapturingcrate = 0;
|
|
continue;
|
|
}
|
|
|
|
var_1.iscapturingcrate = 0;
|
|
self notify( "captured", var_1 );
|
|
}
|
|
}
|
|
|
|
watch_for_dig_killstreak()
|
|
{
|
|
for (;;)
|
|
{
|
|
level waittill( "createAirDropCrate", var_0 );
|
|
|
|
if ( isdefined( var_0 ) && isdefined( var_0.cratetype ) && var_0.cratetype == "dig_level_killstreak" )
|
|
{
|
|
disable_level_killstreak();
|
|
var_1 = wait_for_capture( var_0 );
|
|
|
|
if ( !var_1 )
|
|
{
|
|
enable_level_killstreak();
|
|
continue;
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
wait_for_capture( var_0 )
|
|
{
|
|
var_1 = watch_for_air_drop_death( var_0 );
|
|
return !isdefined( var_1 );
|
|
}
|
|
|
|
watch_for_air_drop_death( var_0 )
|
|
{
|
|
var_0 endon( "captured" );
|
|
var_0 waittill( "death" );
|
|
waittillframeend;
|
|
return 1;
|
|
}
|
|
|
|
enable_level_killstreak()
|
|
{
|
|
maps\mp\killstreaks\_airdrop::changecrateweight( "airdrop_assault", "dig_level_killstreak", 85 );
|
|
level.intelrewardoverride = "dig_level_killstreak";
|
|
}
|
|
|
|
disable_level_killstreak()
|
|
{
|
|
maps\mp\killstreaks\_airdrop::changecrateweight( "airdrop_assault", "dig_level_killstreak", 0 );
|
|
level.intelrewardoverride = undefined;
|
|
}
|
|
|
|
digcustomkillstreakfunc()
|
|
{
|
|
level.killstreakfuncs["dig_level_killstreak"] = ::tryusedigkillstreak;
|
|
}
|
|
|
|
digcustombotkillstreakfunc()
|
|
{
|
|
maps\mp\bots\_bots_ks::bot_register_killstreak_func( "dig_level_killstreak", maps\mp\bots\_bots_ks::bot_killstreak_simple_use );
|
|
}
|
|
|
|
tryusedigkillstreak( var_0, var_1 )
|
|
{
|
|
level.dig_killstreak_user giveperkbonus();
|
|
level.dig_killstreak_user thread watchperkblessing();
|
|
level.dig_killstreak_user thread watchjugguse();
|
|
level.dig_killstreak_user thread watchremoteuse( "using_remote" );
|
|
level.dig_killstreak_user thread watchremoteuse( "stopped_using_remote" );
|
|
|
|
if ( level.gametype == "blitz" )
|
|
level.dig_killstreak_user thread watchblitzteleport();
|
|
|
|
level thread watchplayersconnect( level.dig_killstreak_user );
|
|
level thread watchblessingend( level.dig_killstreak_user );
|
|
level thread maps\mp\_utility::teamplayercardsplash( "used_dig_level_killstreak", level.dig_killstreak_user );
|
|
}
|
|
|
|
giveperkbonus()
|
|
{
|
|
if ( !isdefined( level.player_life_counter ) )
|
|
level.player_life_counter = 0;
|
|
|
|
foreach ( var_1 in level.shrineperks )
|
|
{
|
|
if ( !maps\mp\_utility::_hasperk( var_1 ) )
|
|
maps\mp\_utility::giveperk( var_1, 0 );
|
|
}
|
|
|
|
thread maps\mp\gametypes\_hud_message::splashnotify( "mp_dig_all_perks" );
|
|
level thread showblessingfx( self );
|
|
thread stopfxonspawn( level.dig_fx["shrine"]["player"], "tag_origin" );
|
|
|
|
if ( !isdefined( self.shrine_effect_ent ) )
|
|
{
|
|
self.shrine_effect_ent = spawnfxforclient( level.dig_fx["shrine"]["screen"], self geteye(), self );
|
|
triggerfx( self.shrine_effect_ent );
|
|
self.shrine_effect_ent setfxkilldefondelete();
|
|
thread killfxonplayerdeath( self.shrine_effect_ent, "reset_perk_bonus", "user_juggernaut", "user_remotekillstreak" );
|
|
}
|
|
|
|
self playlocalsound( "mp_dig_plr_spawn_with_powers" );
|
|
self playloopsound( "mp_dig_magic_powers_flame_lp" );
|
|
level notify( "update_bombsquad" );
|
|
level.player_life_counter = level.player_life_counter + 1;
|
|
}
|
|
|
|
resetperkbonus()
|
|
{
|
|
level.player_life_counter = 0;
|
|
self setclientomnvar( "ui_dig_killstreak_show", -1 );
|
|
stopfxontag( level.dig_fx["shrine"]["player"], self, "tag_origin" );
|
|
|
|
if ( isdefined( self.shrine_effect_ent ) )
|
|
self.shrine_effect_ent delete();
|
|
|
|
level notify( "reset_perk_bonus" );
|
|
}
|
|
|
|
watchperkblessing()
|
|
{
|
|
self endon( "disconnect" );
|
|
self endon( "blessing_ended" );
|
|
self endon( "joined_team" );
|
|
level endon( "game_ended" );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "spawned_player" );
|
|
self setclientomnvar( "ui_dig_killstreak_show", -1 );
|
|
common_scripts\utility::waitframe();
|
|
|
|
if ( level.player_life_counter < 4 && !maps\mp\_utility::isjuggernaut() )
|
|
{
|
|
giveperkbonus();
|
|
|
|
if ( !hasperkinloadout( "specialty_blindeye" ) || !hasperkinloadout( "specialty_gpsjammer" ) )
|
|
childthread regivespawnperks();
|
|
|
|
continue;
|
|
}
|
|
|
|
if ( level.player_life_counter == 4 )
|
|
self notify( "blessing_ended" );
|
|
}
|
|
}
|
|
|
|
hasperkinloadout( var_0 )
|
|
{
|
|
var_1 = 0;
|
|
|
|
if ( isdefined( self.pers["loadoutPerks"] ) && self.pers["loadoutPerks"].size > 0 )
|
|
{
|
|
foreach ( var_3 in self.pers["loadoutPerks"] )
|
|
{
|
|
if ( var_0 == var_3 )
|
|
{
|
|
var_1 = 1;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
return var_1;
|
|
}
|
|
|
|
regivespawnperks()
|
|
{
|
|
self waittill( "starting_perks_unset" );
|
|
|
|
if ( !maps\mp\_utility::_hasperk( "specialty_blindeye" ) )
|
|
maps\mp\_utility::giveperk( "specialty_blindeye", 0 );
|
|
|
|
if ( !maps\mp\_utility::_hasperk( "specialty_gpsjammer" ) )
|
|
maps\mp\_utility::giveperk( "specialty_gpsjammer", 0 );
|
|
}
|
|
|
|
watchjugguse()
|
|
{
|
|
self endon( "disconnect" );
|
|
self endon( "blessing_ended" );
|
|
self endon( "joined_team" );
|
|
level endon( "game_ended" );
|
|
|
|
for (;;)
|
|
{
|
|
level waittill( "juggernaut_equipped", var_0 );
|
|
|
|
if ( self == var_0 )
|
|
{
|
|
self.shrine_effect_ent delete();
|
|
stopfxontag( level.dig_fx["shrine"]["player"], self, "tag_origin" );
|
|
level notify( "user_juggernaut" );
|
|
}
|
|
}
|
|
}
|
|
|
|
watchremoteuse( var_0 )
|
|
{
|
|
self endon( "disconnect" );
|
|
self endon( "blessing_ended" );
|
|
self endon( "joined_team" );
|
|
level endon( "game_ended" );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( var_0 );
|
|
|
|
if ( var_0 == "using_remote" )
|
|
{
|
|
if ( isdefined( self.shrine_effect_ent ) )
|
|
{
|
|
self.shrine_effect_ent delete();
|
|
level notify( "user_remotekillstreak" );
|
|
}
|
|
|
|
continue;
|
|
}
|
|
|
|
if ( var_0 == "stopped_using_remote" )
|
|
{
|
|
if ( !isdefined( self.shrine_effect_ent ) )
|
|
{
|
|
self.shrine_effect_ent = spawnfxforclient( level.dig_fx["shrine"]["screen"], self geteye(), self );
|
|
triggerfx( self.shrine_effect_ent );
|
|
self.shrine_effect_ent setfxkilldefondelete();
|
|
thread killfxonplayerdeath( self.shrine_effect_ent, "reset_perk_bonus", "user_juggernaut", "user_remotekillstreak" );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
watchblitzteleport()
|
|
{
|
|
self endon( "disconnect" );
|
|
self endon( "blessing_ended" );
|
|
self endon( "joined_team" );
|
|
level endon( "game_ended" );
|
|
|
|
for (;;)
|
|
{
|
|
level waittill( "portal_used", var_0 );
|
|
common_scripts\utility::waitframe();
|
|
|
|
if ( var_0 != self.team && ( isdefined( self.teleporting ) && self.teleporting ) )
|
|
level thread showblessingfx( self );
|
|
}
|
|
}
|
|
|
|
watchplayersconnect( var_0 )
|
|
{
|
|
var_0 endon( "disconnect" );
|
|
var_0 endon( "blessing_ended" );
|
|
var_0 endon( "joined_team" );
|
|
level endon( "game_ended" );
|
|
|
|
for (;;)
|
|
{
|
|
level waittill( "connected", var_1 );
|
|
var_1 thread playfxonplayerspawn( var_0 );
|
|
}
|
|
}
|
|
|
|
watchblessingend( var_0 )
|
|
{
|
|
level endon( "game_ended" );
|
|
var_0 common_scripts\utility::waittill_any( "disconnect", "joined_team", "blessing_ended" );
|
|
level.player_life_counter = 0;
|
|
}
|
|
|
|
showblessingfx( var_0 )
|
|
{
|
|
var_0 endon( "disconnect" );
|
|
var_0 endon( "blessing_ended" );
|
|
var_0 endon( "joined_team" );
|
|
level endon( "game_ended" );
|
|
|
|
foreach ( var_2 in level.players )
|
|
{
|
|
if ( isdefined( var_2 ) && isdefined( var_0 ) && maps\mp\_utility::isreallyalive( var_0 ) )
|
|
playfxontagforclients( level.dig_fx["shrine"]["player"], var_0, "tag_origin", var_2 );
|
|
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
}
|
|
|
|
playfxonplayerspawn( var_0 )
|
|
{
|
|
var_0 endon( "disconnect" );
|
|
var_0 endon( "blessing_ended" );
|
|
var_0 endon( "joined_team" );
|
|
level endon( "game_ended" );
|
|
self waittill( "spawned_player" );
|
|
|
|
if ( isdefined( self ) && isdefined( var_0 ) && maps\mp\_utility::isreallyalive( var_0 ) )
|
|
playfxontagforclients( level.dig_fx["shrine"]["player"], var_0, "tag_origin", self );
|
|
}
|
|
|
|
watchlifetime( var_0, var_1, var_2 )
|
|
{
|
|
self endon( var_1 );
|
|
|
|
while ( var_2 > 0 )
|
|
{
|
|
var_2 = var_2 - 1;
|
|
wait 1;
|
|
}
|
|
|
|
self notify( var_0 );
|
|
}
|
|
|
|
doperiodicdamage( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7 )
|
|
{
|
|
level endon( "game_ended" );
|
|
|
|
if ( !isdefined( var_3 ) )
|
|
var_3 = "MOD_CRUSH";
|
|
|
|
var_8 = 0;
|
|
var_9 = undefined;
|
|
var_10 = undefined;
|
|
|
|
if ( isdefined( var_6 ) && isdefined( var_7 ) )
|
|
{
|
|
var_9 = var_6;
|
|
var_10 = var_7;
|
|
}
|
|
|
|
while ( maps\mp\_utility::isreallyalive( self ) )
|
|
{
|
|
self dodamage( var_1, self.origin, var_9, var_10, var_3 );
|
|
|
|
if ( var_3 == "MOD_SCARAB" )
|
|
{
|
|
if ( self.health <= 30 && !var_8 )
|
|
{
|
|
var_11 = randomintrange( 1, 8 );
|
|
var_12 = "male";
|
|
|
|
if ( self hasfemalecustomizationmodel() )
|
|
var_12 = "female";
|
|
|
|
if ( self.team == "axis" )
|
|
self playsound( var_12 + "_scarab_death_russian" + var_11 );
|
|
else
|
|
self playsound( var_12 + "_scarab_death_american" + var_11 );
|
|
|
|
var_8 = 1;
|
|
}
|
|
}
|
|
|
|
wait( var_2 );
|
|
}
|
|
|
|
if ( isdefined( var_4 ) && isdefined( var_5 ) )
|
|
var_4 notify( var_5 );
|
|
}
|
|
|
|
killfxonplayerdeath( var_0, var_1, var_2, var_3 )
|
|
{
|
|
level endon( "game_ended" );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
level endon( var_1 );
|
|
|
|
if ( isdefined( var_2 ) )
|
|
level endon( var_2 );
|
|
|
|
if ( isdefined( var_3 ) )
|
|
level endon( var_3 );
|
|
|
|
common_scripts\utility::waittill_any( "killed_player", "disconnect" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
if ( isarray( var_0 ) )
|
|
{
|
|
foreach ( var_5 in var_0 )
|
|
var_5 delete();
|
|
}
|
|
else
|
|
var_0 delete();
|
|
}
|
|
}
|
|
|
|
stopfxonspawn( var_0, var_1 )
|
|
{
|
|
level endon( "game_ended" );
|
|
self waittill( "spawned_player" );
|
|
stopfxontag( var_0, self, var_1 );
|
|
}
|
|
|
|
drawlinkedsphere( var_0, var_1, var_2 )
|
|
{
|
|
level endon( "game_ended" );
|
|
var_3 = ( 0, 0, 0 );
|
|
|
|
for (;;)
|
|
{
|
|
if ( var_3 != self.origin )
|
|
{
|
|
var_3 = self.origin;
|
|
|
|
if ( isdefined( var_2 ) && var_2 )
|
|
break;
|
|
}
|
|
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
}
|
|
|
|
getfirstaliveplayer()
|
|
{
|
|
foreach ( var_1 in level.participants )
|
|
{
|
|
if ( isdefined( var_1 ) && maps\mp\_utility::isreallyalive( var_1 ) )
|
|
return var_1;
|
|
}
|
|
}
|
|
|
|
delayhide( var_0, var_1 )
|
|
{
|
|
level endon( "game_ended" );
|
|
wait( var_1 );
|
|
var_0 hide();
|
|
var_0 notsolid();
|
|
}
|
|
|
|
killall( var_0, var_1, var_2 )
|
|
{
|
|
level endon( "game_ended" );
|
|
level waittill( var_0 );
|
|
|
|
if ( isdefined( self.trigger_off ) )
|
|
common_scripts\utility::trigger_on();
|
|
|
|
common_scripts\utility::waitframe();
|
|
var_3 = getattacker( var_0 );
|
|
var_4 = getinflictor( var_0 );
|
|
killalltouchingtrigger( level.characters, "CHARACTERS", var_1, var_2, var_3, var_4 );
|
|
killalltouchingtrigger( level.turrets, "KILLSTREAKS", var_1, var_2, var_3, var_4 );
|
|
killalltouchingtrigger( level.placedims, "KILLSTREAKS", var_1, var_2, var_3, var_4 );
|
|
killalltouchingtrigger( level.balldrones, "KILLSTREAKS", var_1, var_2, var_3, var_4 );
|
|
killalltouchingtrigger( level.uplinks, "KILLSTREAKS", var_1, var_2, var_3, var_4 );
|
|
killalltouchingtrigger( level.remote_uav, "KILLSTREAKS", var_1, var_2, var_3, var_4 );
|
|
var_5 = [];
|
|
var_6 = getentarray( "script_model", "classname" );
|
|
|
|
foreach ( var_8 in var_6 )
|
|
{
|
|
if ( isdefined( var_8.boxtype ) )
|
|
var_5[var_5.size] = var_8;
|
|
}
|
|
|
|
killalltouchingtrigger( var_5, "KILLSTREAKS", var_1, var_2, var_3, var_4 );
|
|
killalltouchingtrigger( level.mines, "EQUIPMENT", var_1, var_2, var_3, var_4 );
|
|
|
|
if ( level.gametype == "sd" || level.gametype == "sr" )
|
|
{
|
|
if ( isdefined( level.sdbomb ) && level.sdbomb.visuals[0] istouching( self ) )
|
|
{
|
|
level.sdbomb notify( "stop_pickup_timeout" );
|
|
level.sdbomb maps\mp\gametypes\_gameobjects::returnhome();
|
|
}
|
|
}
|
|
|
|
foreach ( var_11 in level.carepackages )
|
|
{
|
|
if ( var_11.friendlymodel istouching( self ) || var_11.enemymodel istouching( self ) )
|
|
var_11 maps\mp\killstreaks\_airdrop::deletecrate();
|
|
}
|
|
|
|
if ( isdefined( level.intelent ) )
|
|
{
|
|
if ( level.intelent["visuals"] istouching( self ) )
|
|
level.intelent["dropped_time"] = -60000;
|
|
}
|
|
|
|
level thread activatekilltrigger( self, var_1 );
|
|
}
|
|
|
|
killalltouchingtrigger( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
foreach ( var_7 in var_0 )
|
|
{
|
|
if ( isdefined( var_7 ) && var_7 istouching( self ) )
|
|
{
|
|
switch ( var_1 )
|
|
{
|
|
case "CHARACTERS":
|
|
if ( isagent( var_7 ) && isdefined( var_7.team ) && var_7.team == var_4.team )
|
|
var_7 dodamage( var_2, var_7.origin, undefined, var_5, var_3 );
|
|
else
|
|
var_7 dodamage( var_2, var_7.origin, var_4, var_5, var_3 );
|
|
|
|
break;
|
|
case "EQUIPMENT":
|
|
case "KILLSTREAKS":
|
|
var_7 destroykillstreak( var_2, var_3, var_4 );
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
destroykillstreak( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = ( 0, 0, 0 );
|
|
var_4 = ( 0, 0, 0 );
|
|
var_5 = "";
|
|
var_6 = "";
|
|
var_7 = "";
|
|
var_8 = undefined;
|
|
var_9 = "killstreak_emp_mp";
|
|
self notify( "damage", var_0, var_2, var_3, var_4, var_1, var_5, var_6, var_7, var_8, var_9 );
|
|
}
|
|
|
|
activatekilltrigger( var_0, var_1 )
|
|
{
|
|
level endon( "game_ended" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
var_0.dmg = var_1;
|
|
common_scripts\utility::waitframe();
|
|
var_0.dmg = 0;
|
|
var_0 common_scripts\utility::trigger_off();
|
|
}
|
|
}
|
|
|
|
delaynotify( var_0, var_1 )
|
|
{
|
|
level endon( "game_ended" );
|
|
wait( var_1 );
|
|
level notify( var_0 );
|
|
}
|
|
|
|
showent( var_0 )
|
|
{
|
|
var_0 show();
|
|
var_0 solid();
|
|
}
|
|
|
|
hideent( var_0 )
|
|
{
|
|
var_0 hide();
|
|
var_0 notsolid();
|
|
}
|
|
|
|
getattacker( var_0 )
|
|
{
|
|
var_1 = undefined;
|
|
|
|
switch ( var_0 )
|
|
{
|
|
case "obelisk_impact":
|
|
var_1 = level.obeliskowner;
|
|
break;
|
|
case "flame_ended":
|
|
var_1 = level.dig_hidden_door_owner;
|
|
break;
|
|
}
|
|
|
|
return var_1;
|
|
}
|
|
|
|
getinflictor( var_0 )
|
|
{
|
|
var_1 = undefined;
|
|
|
|
switch ( var_0 )
|
|
{
|
|
case "obelisk_impact":
|
|
var_1 = level.obeliskafterclip;
|
|
break;
|
|
case "flame_ended":
|
|
var_1 = level.treasuredoorclip;
|
|
break;
|
|
}
|
|
|
|
return var_1;
|
|
}
|
|
|
|
nuke_custom_visionset()
|
|
{
|
|
level waittill( "nuke_death" );
|
|
wait 1.3;
|
|
level notify( "nuke_death" );
|
|
thread nuke_custom_visionset();
|
|
}
|
|
|
|
nukedeathvision()
|
|
{
|
|
level.nukevisionset = "aftermath_mp_dig";
|
|
setexpfog( 512, 2048, 0.578828, 0.802656, 1, 0.5, 0.75, 5, 0.382813, 0.350569, 0.293091, 0.5, ( 1, -0.109979, 0.267867 ), 0, 80, 1, 0.179688, 26, 180 );
|
|
visionsetnaked( level.nukevisionset, 5 );
|
|
visionsetpain( level.nukevisionset );
|
|
}
|
|
|
|
delayexploder( var_0, var_1 )
|
|
{
|
|
level endon( "game_ended" );
|
|
wait( var_0 );
|
|
common_scripts\utility::exploder( var_1 );
|
|
}
|
|
|
|
delaytrigger( var_0, var_1 )
|
|
{
|
|
level endon( "game_ended" );
|
|
wait( var_0 );
|
|
|
|
if ( var_1 == "on" )
|
|
common_scripts\utility::trigger_on();
|
|
else
|
|
common_scripts\utility::trigger_off();
|
|
}
|