mirror of
https://github.com/JezuzLizard/Recompilable-gscs-for-BO2-zombies-and-multiplayer.git
synced 2025-06-10 10:47:58 -05:00
296 lines
6.4 KiB
Plaintext
296 lines
6.4 KiB
Plaintext
#include maps/mp/zombies/_zm_powerups;
|
|
#include maps/mp/zombies/_zm_game_module;
|
|
#include maps/mp/zm_transit_bus;
|
|
#include maps/mp/zm_transit_utility;
|
|
#include maps/mp/zombies/_zm_utility;
|
|
#include maps/mp/_utility;
|
|
#include common_scripts/utility;
|
|
|
|
main()
|
|
{
|
|
level.numroundssincelastambushround = 0;
|
|
level.numbusstopssincelastambushround = 0;
|
|
level.numambushrounds = 0;
|
|
level.ambushpercentageperstop = 10;
|
|
level.ambushpercentageperround = 25;
|
|
flag_init( "ambush_round", 0 );
|
|
flag_init( "ambush_safe_area_active", 0 );
|
|
initambusheffects();
|
|
thread ambushroundkeeper();
|
|
/#
|
|
adddebugcommand( "devgui_cmd "Zombies:1/Bus:14/Ambush Round:6/Always:1" "zombie_devgui ambush_round always"\n" );
|
|
adddebugcommand( "devgui_cmd "Zombies:1/Bus:14/Ambush Round:6/Never:2" "zombie_devgui ambush_round never"\n" );
|
|
#/
|
|
}
|
|
|
|
initambusheffects()
|
|
{
|
|
level._effect[ "ambush_bus_fire" ] = loadfx( "env/fire/fx_fire_md" );
|
|
}
|
|
|
|
shouldstartambushround()
|
|
{
|
|
/#
|
|
if ( level.ambushpercentageperstop == 100 )
|
|
{
|
|
return 1;
|
|
}
|
|
if ( getDvarInt( "zombie_cheat" ) == 2 )
|
|
{
|
|
return 0;
|
|
#/
|
|
}
|
|
if ( level.numbusstopssincelastambushround < 2 )
|
|
{
|
|
}
|
|
randint = randomintrange( 0, 100 );
|
|
percentchance = level.numbusstopssincelastambushround * level.ambushpercentageperstop;
|
|
if ( randint < percentchance )
|
|
{
|
|
}
|
|
percentchance = level.numroundssincelastambushround * level.ambushpercentageperround;
|
|
if ( randint < percentchance )
|
|
{
|
|
}
|
|
if ( maps/mp/zm_transit_bus::busgasempty() )
|
|
{
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
isambushroundactive()
|
|
{
|
|
if ( flag_exists( "ambush_round" ) )
|
|
{
|
|
return flag( "ambush_round" );
|
|
}
|
|
}
|
|
|
|
is_ambush_round_spawning_active()
|
|
{
|
|
if ( flag_exists( "ambush_safe_area_active" ) )
|
|
{
|
|
return flag( "ambush_safe_area_active" );
|
|
}
|
|
}
|
|
|
|
ambushstartround()
|
|
{
|
|
flag_set( "ambush_round" );
|
|
ambushroundthink();
|
|
}
|
|
|
|
ambushendround()
|
|
{
|
|
level.the_bus.issafe = 1;
|
|
maps/mp/zm_transit_bus::busgasadd( 60 );
|
|
level.numbusstopssincelastambushround = 0;
|
|
level.numroundssincelastambushround = 0;
|
|
flag_clear( "ambush_round" );
|
|
}
|
|
|
|
cancelambushround()
|
|
{
|
|
flag_clear( "ambush_round" );
|
|
flag_clear( "ambush_safe_area_active" );
|
|
maps/mp/zm_transit_utility::try_resume_zombie_spawning();
|
|
bbprint( "zombie_events", "category %s type %s round %d", "DOG", "stop", level.round_number );
|
|
level.the_bus notify( "ambush_round_fail_safe" );
|
|
}
|
|
|
|
ambushroundspawning()
|
|
{
|
|
level.numambushrounds++;
|
|
wait 6;
|
|
level.the_bus.issafe = 0;
|
|
}
|
|
|
|
limitedambushspawn()
|
|
{
|
|
if ( level.numambushrounds < 3 )
|
|
{
|
|
dogcount = level.dog_targets.size * 6;
|
|
}
|
|
else
|
|
{
|
|
dogcount = level.dog_targets.size * 8;
|
|
}
|
|
setupdogspawnlocs();
|
|
level thread ambushroundspawnfailsafe( 20 );
|
|
while ( get_current_zombie_count() > 0 )
|
|
{
|
|
wait 1;
|
|
}
|
|
level notify( "end_ambushWaitFunction" );
|
|
}
|
|
|
|
ambushroundthink()
|
|
{
|
|
module = maps/mp/zombies/_zm_game_module::get_game_module( level.game_module_nml_index );
|
|
if ( isDefined( module.hub_start_func ) )
|
|
{
|
|
level thread [[ module.hub_start_func ]]( "nml" );
|
|
level notify( "game_mode_started" );
|
|
}
|
|
level thread ambushroundspawning();
|
|
ambushwaitfunction();
|
|
ambushendround();
|
|
}
|
|
|
|
ambushwaitfunction()
|
|
{
|
|
}
|
|
|
|
ambushpointfailsafe()
|
|
{
|
|
level.the_bus endon( "ambush_point" );
|
|
level.the_bus waittill( "reached_stop_point" );
|
|
cancelambushround();
|
|
}
|
|
|
|
ambushroundspawnfailsafe( timer )
|
|
{
|
|
ambushroundtimelimit = timer;
|
|
currentambushtime = 0;
|
|
while ( currentambushtime < ambushroundtimelimit )
|
|
{
|
|
if ( !flag( "ambush_round" ) )
|
|
{
|
|
return;
|
|
}
|
|
wait 1;
|
|
currentambushtime++;
|
|
}
|
|
level notify( "end_ambushWaitFunction" );
|
|
wait 5;
|
|
dogs = getaispeciesarray( "all", "zombie_dog" );
|
|
i = 0;
|
|
while ( i < dogs.size )
|
|
{
|
|
if ( isDefined( dogs[ i ].marked_for_death ) && dogs[ i ].marked_for_death )
|
|
{
|
|
i++;
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
if ( is_magic_bullet_shield_enabled( dogs[ i ] ) )
|
|
{
|
|
i++;
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
dogs[ i ] dodamage( dogs[ i ].health + 666, dogs[ i ].origin );
|
|
}
|
|
}
|
|
i++;
|
|
}
|
|
}
|
|
|
|
ambushdoghealthincrease()
|
|
{
|
|
switch( level.numambushrounds )
|
|
{
|
|
case 1:
|
|
level.dog_health = 400;
|
|
break;
|
|
case 2:
|
|
level.dog_health = 900;
|
|
break;
|
|
case 3:
|
|
level.dog_health = 1300;
|
|
break;
|
|
case 4:
|
|
level.dog_health = 1600;
|
|
break;
|
|
default:
|
|
level.dog_health = 1600;
|
|
break;
|
|
}
|
|
}
|
|
|
|
ambushroundaftermath()
|
|
{
|
|
power_up_origin = level.the_bus gettagorigin( "tag_body" );
|
|
if ( isDefined( power_up_origin ) )
|
|
{
|
|
level thread maps/mp/zombies/_zm_powerups::specific_powerup_drop( "full_ammo", power_up_origin );
|
|
}
|
|
}
|
|
|
|
ambushroundeffects()
|
|
{
|
|
wait 2;
|
|
level thread ambushlightningeffect( "tag_body" );
|
|
wait 0,5;
|
|
level thread ambushlightningeffect( "tag_wheel_back_left" );
|
|
wait 0,5;
|
|
level thread ambushlightningeffect( "tag_wheel_back_right" );
|
|
wait 0,5;
|
|
level thread ambushlightningeffect( "tag_wheel_front_left" );
|
|
wait 0,5;
|
|
level thread ambushlightningeffect( "tag_wheel_front_right" );
|
|
wait 1,5;
|
|
fxent0 = spawnandlinkfxtotag( level._effect[ "ambush_bus_fire" ], level.the_bus, "tag_body" );
|
|
fxent1 = spawnandlinkfxtotag( level._effect[ "ambush_bus_fire" ], level.the_bus, "tag_wheel_back_left" );
|
|
fxent2 = spawnandlinkfxtotag( level._effect[ "ambush_bus_fire" ], level.the_bus, "tag_wheel_back_right" );
|
|
fxent3 = spawnandlinkfxtotag( level._effect[ "ambush_bus_fire" ], level.the_bus, "tag_wheel_front_left" );
|
|
fxent4 = spawnandlinkfxtotag( level._effect[ "ambush_bus_fire" ], level.the_bus, "tag_wheel_front_right" );
|
|
level waittill( "end_ambushWaitFunction" );
|
|
fxent0 delete();
|
|
fxent1 delete();
|
|
fxent2 delete();
|
|
fxent3 delete();
|
|
fxent4 delete();
|
|
}
|
|
|
|
ambushlightningeffect( tag )
|
|
{
|
|
fxentlighting = spawnandlinkfxtotag( level._effect[ "lightning_dog_spawn" ], level.the_bus, tag );
|
|
wait 5;
|
|
fxentlighting delete();
|
|
}
|
|
|
|
setupdogspawnlocs()
|
|
{
|
|
level.enemy_dog_locations = [];
|
|
currentzone = undefined;
|
|
ambush_zones = getentarray( "ambush_volume", "script_noteworthy" );
|
|
i = 0;
|
|
while ( i < ambush_zones.size )
|
|
{
|
|
touching = 0;
|
|
b = 0;
|
|
while ( b < level.the_bus.bounds_origins.size && !touching )
|
|
{
|
|
bounds = level.the_bus.bounds_origins[ b ];
|
|
touching = bounds istouching( ambush_zones[ i ] );
|
|
b++;
|
|
}
|
|
if ( touching )
|
|
{
|
|
currentzone = ambush_zones[ i ];
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
i++;
|
|
}
|
|
}
|
|
/#
|
|
assert( isDefined( currentzone ), "Bus needs to be in an ambush zone for an ambush round: " + level.the_bus.origin );
|
|
#/
|
|
level.enemy_dog_locations = getstructarray( currentzone.target, "targetname" );
|
|
}
|
|
|
|
ambushroundkeeper()
|
|
{
|
|
while ( 1 )
|
|
{
|
|
level waittill( "between_round_over" );
|
|
level.numroundssincelastambushround++;
|
|
}
|
|
}
|