mirror of
https://github.com/JezuzLizard/BO2-Reimagined.git
synced 2025-06-07 21:59:49 -05:00
Move map specific functions into separate scripts
Perk pause removal done with replaceFunc Removes need for replacing power_off_func on every power item
This commit is contained in:
parent
137738997d
commit
fe2906a7f5
@ -404,7 +404,7 @@ move_quickrevive_machine()
|
|||||||
use_trigger thread maps/mp/zombies/_zm_perks::electric_perks_dialog();
|
use_trigger thread maps/mp/zombies/_zm_perks::electric_perks_dialog();
|
||||||
|
|
||||||
powered_on = maps/mp/zombies/_zm_perks::get_perk_machine_start_state( use_trigger.script_noteworthy );
|
powered_on = maps/mp/zombies/_zm_perks::get_perk_machine_start_state( use_trigger.script_noteworthy );
|
||||||
maps/mp/zombies/_zm_power::add_powered_item( maps/mp/zombies/_zm_power::perk_power_on, scripts/zm/_zm_reimagined::perk_power_off, maps/mp/zombies/_zm_power::perk_range, maps/mp/zombies/_zm_power::cost_low_if_local, 0, powered_on, use_trigger );
|
maps/mp/zombies/_zm_power::add_powered_item( maps/mp/zombies/_zm_power::perk_power_on, maps/mp/zombies/_zm_power::perk_power_off, maps/mp/zombies/_zm_power::perk_range, maps/mp/zombies/_zm_power::cost_low_if_local, 0, powered_on, use_trigger );
|
||||||
}
|
}
|
||||||
|
|
||||||
move_speedcola_machine()
|
move_speedcola_machine()
|
||||||
@ -495,7 +495,7 @@ move_speedcola_machine()
|
|||||||
use_trigger thread maps/mp/zombies/_zm_perks::electric_perks_dialog();
|
use_trigger thread maps/mp/zombies/_zm_perks::electric_perks_dialog();
|
||||||
|
|
||||||
powered_on = maps/mp/zombies/_zm_perks::get_perk_machine_start_state( use_trigger.script_noteworthy );
|
powered_on = maps/mp/zombies/_zm_perks::get_perk_machine_start_state( use_trigger.script_noteworthy );
|
||||||
maps/mp/zombies/_zm_power::add_powered_item( maps/mp/zombies/_zm_power::perk_power_on, scripts/zm/_zm_reimagined::perk_power_off, maps/mp/zombies/_zm_power::perk_range, maps/mp/zombies/_zm_power::cost_low_if_local, 0, powered_on, use_trigger );
|
maps/mp/zombies/_zm_power::add_powered_item( maps/mp/zombies/_zm_power::perk_power_on, maps/mp/zombies/_zm_power::perk_power_off, maps/mp/zombies/_zm_power::perk_range, maps/mp/zombies/_zm_power::cost_low_if_local, 0, powered_on, use_trigger );
|
||||||
}
|
}
|
||||||
|
|
||||||
move_staminup_machine()
|
move_staminup_machine()
|
||||||
@ -590,5 +590,5 @@ move_staminup_machine()
|
|||||||
use_trigger thread maps/mp/zombies/_zm_perks::electric_perks_dialog();
|
use_trigger thread maps/mp/zombies/_zm_perks::electric_perks_dialog();
|
||||||
|
|
||||||
powered_on = maps/mp/zombies/_zm_perks::get_perk_machine_start_state( use_trigger.script_noteworthy );
|
powered_on = maps/mp/zombies/_zm_perks::get_perk_machine_start_state( use_trigger.script_noteworthy );
|
||||||
maps/mp/zombies/_zm_power::add_powered_item( maps/mp/zombies/_zm_power::perk_power_on, scripts/zm/_zm_reimagined::perk_power_off, maps/mp/zombies/_zm_power::perk_range, maps/mp/zombies/_zm_power::cost_low_if_local, 0, powered_on, use_trigger );
|
maps/mp/zombies/_zm_power::add_powered_item( maps/mp/zombies/_zm_power::perk_power_on, maps/mp/zombies/_zm_power::perk_power_off, maps/mp/zombies/_zm_power::perk_range, maps/mp/zombies/_zm_power::cost_low_if_local, 0, powered_on, use_trigger );
|
||||||
}
|
}
|
File diff suppressed because it is too large
Load Diff
8
scripts/zm/replaced/_zm_perks.gsc
Normal file
8
scripts/zm/replaced/_zm_perks.gsc
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#include maps\mp\_utility;
|
||||||
|
#include common_scripts\utility;
|
||||||
|
#include maps\mp\zombies\_zm_utility;
|
||||||
|
|
||||||
|
perk_pause( perk )
|
||||||
|
{
|
||||||
|
// disabled
|
||||||
|
}
|
@ -13,7 +13,103 @@ main()
|
|||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
|
level._is_player_in_zombie_stink = maps/mp/zombies/_zm_perk_vulture::_is_player_in_zombie_stink;
|
||||||
|
|
||||||
|
turn_power_on();
|
||||||
|
deleteslothbarricades();
|
||||||
|
|
||||||
add_jug_collision();
|
add_jug_collision();
|
||||||
|
|
||||||
|
level thread enable_fountain_transport();
|
||||||
|
level thread disable_ghost_free_perk_on_damage();
|
||||||
|
}
|
||||||
|
|
||||||
|
turn_power_on()
|
||||||
|
{
|
||||||
|
if(!(is_classic() && level.scr_zm_map_start_location == "processing"))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
trigger = getent( "use_elec_switch", "targetname" );
|
||||||
|
if ( isDefined( trigger ) )
|
||||||
|
{
|
||||||
|
trigger delete();
|
||||||
|
}
|
||||||
|
master_switch = getent( "elec_switch", "targetname" );
|
||||||
|
if ( isDefined( master_switch ) )
|
||||||
|
{
|
||||||
|
master_switch notsolid();
|
||||||
|
master_switch rotateroll( -90, 0.3 );
|
||||||
|
clientnotify( "power_on" );
|
||||||
|
flag_set( "power_on" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
deleteslothbarricades()
|
||||||
|
{
|
||||||
|
if(!(is_classic() && level.scr_zm_map_start_location == "processing"))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
sloth_trigs = getentarray( "sloth_barricade", "targetname" );
|
||||||
|
foreach (trig in sloth_trigs)
|
||||||
|
{
|
||||||
|
if ( isDefined( trig.script_flag ) && level flag_exists( trig.script_flag ) )
|
||||||
|
{
|
||||||
|
flag_set( trig.script_flag );
|
||||||
|
}
|
||||||
|
parts = getentarray( trig.target, "targetname" );
|
||||||
|
array_thread( parts, ::self_delete );
|
||||||
|
}
|
||||||
|
|
||||||
|
array_thread( sloth_trigs, ::self_delete );
|
||||||
|
}
|
||||||
|
|
||||||
|
enable_fountain_transport()
|
||||||
|
{
|
||||||
|
if(!(is_classic() && level.scr_zm_map_start_location == "processing"))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
flag_wait( "initial_blackscreen_passed" );
|
||||||
|
|
||||||
|
wait 1;
|
||||||
|
|
||||||
|
level notify( "courtyard_fountain_open" );
|
||||||
|
}
|
||||||
|
|
||||||
|
disable_ghost_free_perk_on_damage()
|
||||||
|
{
|
||||||
|
if(!(is_classic() && level.scr_zm_map_start_location == "processing"))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
disable_ghost_free_perk();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
disable_ghost_free_perk()
|
||||||
|
{
|
||||||
|
level endon( "ghost_round_end" );
|
||||||
|
|
||||||
|
flag_wait( "spawn_ghosts" );
|
||||||
|
|
||||||
|
level waittill_any("ghost_drained_player", "ghost_damaged_player");
|
||||||
|
|
||||||
|
while (!isDefined(level.ghost_round_last_ghost_origin))
|
||||||
|
{
|
||||||
|
wait 0.05;
|
||||||
|
}
|
||||||
|
|
||||||
|
level.ghost_round_last_ghost_origin = undefined;
|
||||||
|
|
||||||
|
flag_waitopen( "spawn_ghosts" );
|
||||||
}
|
}
|
||||||
|
|
||||||
add_jug_collision()
|
add_jug_collision()
|
||||||
|
47
scripts/zm/zm_highrise/zm_highrise_reimagined.gsc
Normal file
47
scripts/zm/zm_highrise/zm_highrise_reimagined.gsc
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
#include maps\mp\_utility;
|
||||||
|
#include common_scripts\utility;
|
||||||
|
#include maps\mp\zombies\_zm_utility;
|
||||||
|
|
||||||
|
init()
|
||||||
|
{
|
||||||
|
level thread highrise_solo_revive_fix();
|
||||||
|
}
|
||||||
|
|
||||||
|
highrise_solo_revive_fix()
|
||||||
|
{
|
||||||
|
if (!(is_classic() && level.scr_zm_map_start_location == "rooftop"))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
flag_wait( "start_zombie_round_logic" );
|
||||||
|
|
||||||
|
if (!flag("solo_game"))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
flag_wait( "perks_ready" );
|
||||||
|
flag_wait( "initial_blackscreen_passed" );
|
||||||
|
wait 1;
|
||||||
|
|
||||||
|
revive_elevator = undefined;
|
||||||
|
foreach (elevator in level.elevators)
|
||||||
|
{
|
||||||
|
if (elevator.body.perk_type == "vending_revive")
|
||||||
|
{
|
||||||
|
revive_elevator = elevator;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
revive_elevator.body.elevator_stop = 1;
|
||||||
|
revive_elevator.body.lock_doors = 1;
|
||||||
|
revive_elevator.body maps/mp/zm_highrise_elevators::perkelevatordoor(0);
|
||||||
|
|
||||||
|
flag_wait( "power_on" );
|
||||||
|
|
||||||
|
revive_elevator.body.elevator_stop = 0;
|
||||||
|
revive_elevator.body.lock_doors = 0;
|
||||||
|
revive_elevator.body maps/mp/zm_highrise_elevators::perkelevatordoor(1);
|
||||||
|
}
|
@ -7,4 +7,227 @@
|
|||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
replaceFunc(maps/mp/zombies/_zm_ai_brutus::brutus_health_increases, scripts/zm/replaced/_zm_ai_brutus::brutus_health_increases);
|
replaceFunc(maps/mp/zombies/_zm_ai_brutus::brutus_health_increases, scripts/zm/replaced/_zm_ai_brutus::brutus_health_increases);
|
||||||
|
}
|
||||||
|
|
||||||
|
init()
|
||||||
|
{
|
||||||
|
remove_acid_trap_player_spawn();
|
||||||
|
|
||||||
|
tower_trap_changes();
|
||||||
|
|
||||||
|
plane_set_need_all_pieces();
|
||||||
|
plane_set_pieces_shared();
|
||||||
|
|
||||||
|
level thread plane_auto_refuel();
|
||||||
|
}
|
||||||
|
|
||||||
|
remove_acid_trap_player_spawn()
|
||||||
|
{
|
||||||
|
spawn_points = maps/mp/gametypes_zm/_zm_gametype::get_player_spawns_for_gametype();
|
||||||
|
foreach(spawn_point in spawn_points)
|
||||||
|
{
|
||||||
|
if(spawn_point.script_noteworthy == "zone_cafeteria")
|
||||||
|
{
|
||||||
|
spawn_array = getstructarray( spawn_point.target, "targetname" );
|
||||||
|
foreach(spawn in spawn_array)
|
||||||
|
{
|
||||||
|
if(spawn.origin == (2536, 9704, 1360))
|
||||||
|
{
|
||||||
|
arrayremovevalue(spawn_array, spawn);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tower_trap_changes()
|
||||||
|
{
|
||||||
|
if(!(is_classic() && level.scr_zm_map_start_location == "prison"))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// need to override the original function call
|
||||||
|
// this level var is threaded though so it doesn't work
|
||||||
|
level.custom_tower_trap_fires_func = ::tower_trap_fires_override;
|
||||||
|
|
||||||
|
trap_trigs = getentarray( "tower_trap_activate_trigger", "targetname" );
|
||||||
|
foreach (trig in trap_trigs)
|
||||||
|
{
|
||||||
|
trig thread tower_trap_trigger_think();
|
||||||
|
trig thread tower_upgrade_trigger_think();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tower_trap_fires_override( zombies )
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
tower_trap_trigger_think()
|
||||||
|
{
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
self waittill("switch_activated");
|
||||||
|
self thread activate_tower_trap();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
activate_tower_trap()
|
||||||
|
{
|
||||||
|
self endon( "tower_trap_off" );
|
||||||
|
|
||||||
|
if ( isDefined( self.upgraded ) )
|
||||||
|
{
|
||||||
|
self.weapon_name = "tower_trap_upgraded_zm";
|
||||||
|
self.tag_to_target = "J_SpineLower";
|
||||||
|
self.trap_reload_time = 1.5;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
self.weapon_name = "tower_trap_zm";
|
||||||
|
self.tag_to_target = "J_Head";
|
||||||
|
self.trap_reload_time = 0.75;
|
||||||
|
}
|
||||||
|
|
||||||
|
while ( 1 )
|
||||||
|
{
|
||||||
|
zombies = getaiarray( level.zombie_team );
|
||||||
|
zombies_sorted = [];
|
||||||
|
foreach ( zombie in zombies )
|
||||||
|
{
|
||||||
|
if ( zombie istouching( self.range_trigger ) )
|
||||||
|
{
|
||||||
|
zombies_sorted[ zombies_sorted.size ] = zombie;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( zombies_sorted.size <= 0 )
|
||||||
|
{
|
||||||
|
wait_network_frame();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
self tower_trap_fires( zombies_sorted );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tower_trap_fires( zombies )
|
||||||
|
{
|
||||||
|
self endon( "tower_trap_off" );
|
||||||
|
|
||||||
|
org = getstruct( self.range_trigger.target, "targetname" );
|
||||||
|
index = randomintrange( 0, zombies.size );
|
||||||
|
|
||||||
|
while ( isalive( zombies[ index ] ) )
|
||||||
|
{
|
||||||
|
target = zombies[ index ];
|
||||||
|
zombietarget = target gettagorigin( self.tag_to_target );
|
||||||
|
|
||||||
|
if ( sighttracepassed( org.origin, zombietarget, 1, undefined ) )
|
||||||
|
{
|
||||||
|
self thread tower_trap_magicbullet_think( org, target, zombietarget );
|
||||||
|
wait self.trap_reload_time;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
arrayremovevalue( zombies, target, 0 );
|
||||||
|
wait_network_frame();
|
||||||
|
if ( zombies.size <= 0 )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
index = randomintrange( 0, zombies.size );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tower_trap_magicbullet_think( org, target, zombietarget )
|
||||||
|
{
|
||||||
|
bullet = magicbullet( self.weapon_name, org.origin, zombietarget );
|
||||||
|
bullet waittill( "death" );
|
||||||
|
|
||||||
|
if ( self.weapon_name == "tower_trap_zm" )
|
||||||
|
{
|
||||||
|
if ( isDefined( target ) && isDefined( target.animname ) && target.health > 0 && target.animname != "brutus_zombie" )
|
||||||
|
{
|
||||||
|
if ( !isDefined( target.no_gib ) || !target.no_gib )
|
||||||
|
{
|
||||||
|
target maps/mp/zombies/_zm_spawner::zombie_head_gib();
|
||||||
|
}
|
||||||
|
target dodamage( target.health + 1000, target.origin );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( self.weapon_name == "tower_trap_upgraded_zm" )
|
||||||
|
{
|
||||||
|
radiusdamage( bullet.origin, 256, level.zombie_health * 1.5, level.zombie_health / 2, self, "MOD_GRENADE_SPLASH", "tower_trap_upgraded_zm" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tower_upgrade_trigger_think()
|
||||||
|
{
|
||||||
|
flag_wait( "initial_blackscreen_passed" );
|
||||||
|
flag_wait( "start_zombie_round_logic" );
|
||||||
|
wait 0.05;
|
||||||
|
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
level waittill( self.upgrade_trigger.script_string );
|
||||||
|
self.upgraded = 1;
|
||||||
|
level waittill( "between_round_over" );
|
||||||
|
self.upgraded = undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
plane_set_need_all_pieces()
|
||||||
|
{
|
||||||
|
if(!(is_classic() && level.scr_zm_map_start_location == "prison"))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
level.zombie_craftablestubs["plane"].need_all_pieces = 1;
|
||||||
|
level.zombie_craftablestubs["refuelable_plane"].need_all_pieces = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
plane_set_pieces_shared()
|
||||||
|
{
|
||||||
|
if(!(is_classic() && level.scr_zm_map_start_location == "prison"))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach(stub in level.zombie_include_craftables)
|
||||||
|
{
|
||||||
|
if(stub.name == "plane" || stub.name == "refuelable_plane")
|
||||||
|
{
|
||||||
|
foreach(piece in stub.a_piecestubs)
|
||||||
|
{
|
||||||
|
piece.is_shared = 1;
|
||||||
|
piece.client_field_state = undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
plane_auto_refuel()
|
||||||
|
{
|
||||||
|
if(!(is_classic() && level.scr_zm_map_start_location == "prison"))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( ;; )
|
||||||
|
{
|
||||||
|
flag_wait( "spawn_fuel_tanks" );
|
||||||
|
|
||||||
|
wait 0.05;
|
||||||
|
|
||||||
|
scripts/zm/_zm_reimagined::buildcraftable( "refuelable_plane" );
|
||||||
|
}
|
||||||
}
|
}
|
@ -11,7 +11,274 @@ main()
|
|||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
|
level.map_on_player_connect = ::on_player_connect;
|
||||||
level.custom_magic_box_timer_til_despawn = ::custom_magic_box_timer_til_despawn;
|
level.custom_magic_box_timer_til_despawn = ::custom_magic_box_timer_til_despawn;
|
||||||
|
|
||||||
|
challenges_changes();
|
||||||
|
soul_box_changes();
|
||||||
|
|
||||||
|
level thread increase_solo_door_prices();
|
||||||
|
level thread remove_shovels_from_map();
|
||||||
|
level thread zombie_blood_dig_changes();
|
||||||
|
}
|
||||||
|
|
||||||
|
on_player_connect()
|
||||||
|
{
|
||||||
|
self thread give_shovel();
|
||||||
|
}
|
||||||
|
|
||||||
|
increase_solo_door_prices()
|
||||||
|
{
|
||||||
|
if(!(is_classic() && level.scr_zm_map_start_location == "tomb"))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
flag_wait( "initial_blackscreen_passed" );
|
||||||
|
|
||||||
|
if ( isDefined( level.is_forever_solo_game ) && level.is_forever_solo_game )
|
||||||
|
{
|
||||||
|
a_door_buys = getentarray( "zombie_door", "targetname" );
|
||||||
|
array_thread( a_door_buys, ::door_price_increase_for_solo );
|
||||||
|
a_debris_buys = getentarray( "zombie_debris", "targetname" );
|
||||||
|
array_thread( a_debris_buys, ::door_price_increase_for_solo );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
door_price_increase_for_solo()
|
||||||
|
{
|
||||||
|
self.zombie_cost += 250;
|
||||||
|
|
||||||
|
if ( self.targetname == "zombie_door" )
|
||||||
|
{
|
||||||
|
self set_hint_string( self, "default_buy_door", self.zombie_cost );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
self set_hint_string( self, "default_buy_debris", self.zombie_cost );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
remove_shovels_from_map()
|
||||||
|
{
|
||||||
|
if(!(is_classic() && level.scr_zm_map_start_location == "tomb"))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
flag_wait( "initial_blackscreen_passed" );
|
||||||
|
|
||||||
|
stubs = level._unitriggers.trigger_stubs;
|
||||||
|
for(i = 0; i < stubs.size; i++)
|
||||||
|
{
|
||||||
|
stub = stubs[i];
|
||||||
|
if(IsDefined(stub.e_shovel))
|
||||||
|
{
|
||||||
|
stub.e_shovel delete();
|
||||||
|
maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( stub );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
give_shovel()
|
||||||
|
{
|
||||||
|
if(!(is_classic() && level.scr_zm_map_start_location == "tomb"))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
self waittill("spawned_player");
|
||||||
|
|
||||||
|
self.dig_vars[ "has_shovel" ] = 1;
|
||||||
|
n_player = self getentitynumber() + 1;
|
||||||
|
level setclientfield( "shovel_player" + n_player, 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
challenges_changes()
|
||||||
|
{
|
||||||
|
if(!(is_classic() && level.scr_zm_map_start_location == "tomb"))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
level._challenges.a_stats["zc_points_spent"].fp_give_reward = ::reward_random_perk;
|
||||||
|
}
|
||||||
|
|
||||||
|
reward_random_perk( player, s_stat )
|
||||||
|
{
|
||||||
|
if (!isDefined(player.tomb_reward_perk))
|
||||||
|
{
|
||||||
|
player.tomb_reward_perk = player get_random_perk();
|
||||||
|
}
|
||||||
|
else if (isDefined( self.perk_purchased ) && self.perk_purchased == player.tomb_reward_perk)
|
||||||
|
{
|
||||||
|
player.tomb_reward_perk = player get_random_perk();
|
||||||
|
}
|
||||||
|
else if (self hasperk( player.tomb_reward_perk ) || self maps/mp/zombies/_zm_perks::has_perk_paused( player.tomb_reward_perk ))
|
||||||
|
{
|
||||||
|
player.tomb_reward_perk = player get_random_perk();
|
||||||
|
}
|
||||||
|
|
||||||
|
perk = player.tomb_reward_perk;
|
||||||
|
if (!isDefined(perk))
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
model = maps/mp/zombies/_zm_perk_random::get_perk_weapon_model(perk);
|
||||||
|
if (!isDefined(model))
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_reward = spawn( "script_model", self.origin );
|
||||||
|
m_reward.angles = self.angles + vectorScale( ( 0, 1, 0 ), 180 );
|
||||||
|
m_reward setmodel( model );
|
||||||
|
m_reward playsound( "zmb_spawn_powerup" );
|
||||||
|
m_reward playloopsound( "zmb_spawn_powerup_loop", 0.5 );
|
||||||
|
wait_network_frame();
|
||||||
|
if ( !maps/mp/zombies/_zm_challenges::reward_rise_and_grab( m_reward, 50, 2, 2, 10 ) )
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if ( player hasperk( perk ) || player maps/mp/zombies/_zm_perks::has_perk_paused( perk ) )
|
||||||
|
{
|
||||||
|
m_reward thread maps/mp/zm_tomb_challenges::bottle_reject_sink( player );
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
m_reward stoploopsound( 0.1 );
|
||||||
|
player playsound( "zmb_powerup_grabbed" );
|
||||||
|
m_reward thread maps/mp/zombies/_zm_perks::vending_trigger_post_think( player, perk );
|
||||||
|
m_reward delete();
|
||||||
|
player increment_player_perk_purchase_limit();
|
||||||
|
player maps/mp/zombies/_zm_stats::increment_client_stat( "tomb_perk_extension", 0 );
|
||||||
|
player maps/mp/zombies/_zm_stats::increment_player_stat( "tomb_perk_extension" );
|
||||||
|
player thread player_perk_purchase_limit_fix();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
get_random_perk()
|
||||||
|
{
|
||||||
|
perks = [];
|
||||||
|
for (i = 0; i < level._random_perk_machine_perk_list.size; i++)
|
||||||
|
{
|
||||||
|
perk = level._random_perk_machine_perk_list[ i ];
|
||||||
|
if ( isDefined( self.perk_purchased ) && self.perk_purchased == perk )
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( !self hasperk( perk ) && !self maps/mp/zombies/_zm_perks::has_perk_paused( perk ) )
|
||||||
|
{
|
||||||
|
perks[ perks.size ] = perk;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ( perks.size > 0 )
|
||||||
|
{
|
||||||
|
perks = array_randomize( perks );
|
||||||
|
random_perk = perks[ 0 ];
|
||||||
|
return random_perk;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
increment_player_perk_purchase_limit()
|
||||||
|
{
|
||||||
|
if ( !isDefined( self.player_perk_purchase_limit ) )
|
||||||
|
{
|
||||||
|
self.player_perk_purchase_limit = level.perk_purchase_limit;
|
||||||
|
}
|
||||||
|
self.player_perk_purchase_limit++;
|
||||||
|
}
|
||||||
|
|
||||||
|
player_perk_purchase_limit_fix()
|
||||||
|
{
|
||||||
|
self endon("disconnect");
|
||||||
|
|
||||||
|
while (self.pers[ "tomb_perk_extension" ] < 5)
|
||||||
|
{
|
||||||
|
wait .5;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (self.player_perk_purchase_limit < 9)
|
||||||
|
{
|
||||||
|
self.player_perk_purchase_limit = 9;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
zombie_blood_dig_changes()
|
||||||
|
{
|
||||||
|
if(!(is_classic() && level.scr_zm_map_start_location == "tomb"))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
for (i = 0; i < level.a_zombie_blood_entities.size; i++)
|
||||||
|
{
|
||||||
|
ent = level.a_zombie_blood_entities[i];
|
||||||
|
if (IsDefined(ent.e_unique_player))
|
||||||
|
{
|
||||||
|
if (!isDefined(ent.e_unique_player.initial_zombie_blood_dig))
|
||||||
|
{
|
||||||
|
ent.e_unique_player.initial_zombie_blood_dig = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ent.e_unique_player.initial_zombie_blood_dig++;
|
||||||
|
if (ent.e_unique_player.initial_zombie_blood_dig <= 2)
|
||||||
|
{
|
||||||
|
ent setvisibletoplayer(ent.e_unique_player);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ent thread set_visible_after_rounds(ent.e_unique_player, 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
arrayremovevalue(level.a_zombie_blood_entities, ent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
wait .5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
set_visible_after_rounds(player, num)
|
||||||
|
{
|
||||||
|
for (i = 0; i < num; i++)
|
||||||
|
{
|
||||||
|
level waittill( "end_of_round" );
|
||||||
|
}
|
||||||
|
|
||||||
|
self setvisibletoplayer(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
soul_box_changes()
|
||||||
|
{
|
||||||
|
if(!(is_classic() && level.scr_zm_map_start_location == "tomb"))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
a_boxes = getentarray( "foot_box", "script_noteworthy" );
|
||||||
|
array_thread( a_boxes, ::soul_box_decrease_kill_requirement );
|
||||||
|
}
|
||||||
|
|
||||||
|
soul_box_decrease_kill_requirement()
|
||||||
|
{
|
||||||
|
self endon( "box_finished" );
|
||||||
|
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
self waittill( "soul_absorbed" );
|
||||||
|
|
||||||
|
wait 0.05;
|
||||||
|
|
||||||
|
self.n_souls_absorbed += 10;
|
||||||
|
|
||||||
|
self waittill( "robot_foot_stomp" );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
custom_magic_box_timer_til_despawn( magic_box )
|
custom_magic_box_timer_til_despawn( magic_box )
|
||||||
|
@ -19,7 +19,445 @@ init()
|
|||||||
{
|
{
|
||||||
level.grenade_safe_to_bounce = ::grenade_safe_to_bounce;
|
level.grenade_safe_to_bounce = ::grenade_safe_to_bounce;
|
||||||
|
|
||||||
|
screecher_spawner_changes();
|
||||||
|
|
||||||
|
town_move_quickrevive_machine();
|
||||||
|
town_move_staminup_machine();
|
||||||
|
town_move_tombstone_machine();
|
||||||
|
|
||||||
path_exploit_fixes();
|
path_exploit_fixes();
|
||||||
|
|
||||||
|
level thread add_tombstone_machine_solo();
|
||||||
|
level thread power_local_electric_doors_globally();
|
||||||
|
level thread b23r_hint_string_fix();
|
||||||
|
}
|
||||||
|
|
||||||
|
screecher_spawner_changes()
|
||||||
|
{
|
||||||
|
level.screecher_spawners = getentarray( "screecher_zombie_spawner", "script_noteworthy" );
|
||||||
|
array_thread( level.screecher_spawners, ::add_spawn_function, ::screecher_prespawn_decrease_health );
|
||||||
|
}
|
||||||
|
|
||||||
|
screecher_prespawn_decrease_health()
|
||||||
|
{
|
||||||
|
self.player_score = 12;
|
||||||
|
}
|
||||||
|
|
||||||
|
power_local_electric_doors_globally()
|
||||||
|
{
|
||||||
|
if( !(is_classic() && level.scr_zm_map_start_location == "transit") )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( ;; )
|
||||||
|
{
|
||||||
|
flag_wait( "power_on" );
|
||||||
|
|
||||||
|
local_power = [];
|
||||||
|
zombie_doors = getentarray( "zombie_door", "targetname" );
|
||||||
|
for ( i = 0; i < zombie_doors.size; i++ )
|
||||||
|
{
|
||||||
|
if ( isDefined( zombie_doors[i].script_noteworthy ) && zombie_doors[i].script_noteworthy == "local_electric_door" )
|
||||||
|
{
|
||||||
|
local_power[local_power.size] = maps/mp/zombies/_zm_power::add_local_power( zombie_doors[i].origin, 16 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
flag_waitopen( "power_on" );
|
||||||
|
|
||||||
|
for (i = 0; i < local_power.size; i++)
|
||||||
|
{
|
||||||
|
maps/mp/zombies/_zm_power::end_local_power( local_power[i] );
|
||||||
|
local_power[i] = undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
add_tombstone_machine_solo()
|
||||||
|
{
|
||||||
|
if (!(is_classic() && level.scr_zm_map_start_location == "transit"))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!flag("solo_game"))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
perk_struct = undefined;
|
||||||
|
structs = getstructarray("zm_perk_machine", "targetname");
|
||||||
|
foreach (struct in structs)
|
||||||
|
{
|
||||||
|
if (IsDefined(struct.script_noteworthy) && IsDefined(struct.script_string))
|
||||||
|
{
|
||||||
|
if (struct.script_noteworthy == "specialty_scavenger" && IsSubStr(struct.script_string, "zclassic"))
|
||||||
|
{
|
||||||
|
perk_struct = struct;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!IsDefined(perk_struct))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// spawn new machine
|
||||||
|
use_trigger = spawn( "trigger_radius_use", perk_struct.origin + vectorScale( ( 0, 0, 1 ), 30 ), 0, 40, 70 );
|
||||||
|
use_trigger.targetname = "zombie_vending";
|
||||||
|
use_trigger.script_noteworthy = perk_struct.script_noteworthy;
|
||||||
|
use_trigger triggerignoreteam();
|
||||||
|
perk_machine = spawn( "script_model", perk_struct.origin );
|
||||||
|
perk_machine.angles = perk_struct.angles;
|
||||||
|
perk_machine setmodel( perk_struct.model );
|
||||||
|
bump_trigger = spawn( "trigger_radius", perk_struct.origin + AnglesToRight(perk_struct.angles) * 32, 0, 35, 32 );
|
||||||
|
bump_trigger.script_activated = 1;
|
||||||
|
bump_trigger.script_sound = "zmb_perks_bump_bottle";
|
||||||
|
bump_trigger.targetname = "audio_bump_trigger";
|
||||||
|
bump_trigger thread maps/mp/zombies/_zm_perks::thread_bump_trigger();
|
||||||
|
collision = spawn( "script_model", perk_struct.origin, 1 );
|
||||||
|
collision.angles = perk_struct.angles;
|
||||||
|
collision setmodel( "zm_collision_perks1" );
|
||||||
|
collision.script_noteworthy = "clip";
|
||||||
|
collision disconnectpaths();
|
||||||
|
use_trigger.clip = collision;
|
||||||
|
use_trigger.machine = perk_machine;
|
||||||
|
use_trigger.bump = bump_trigger;
|
||||||
|
if ( isDefined( perk_struct.blocker_model ) )
|
||||||
|
{
|
||||||
|
use_trigger.blocker_model = perk_struct.blocker_model;
|
||||||
|
}
|
||||||
|
if ( isDefined( perk_struct.script_int ) )
|
||||||
|
{
|
||||||
|
perk_machine.script_int = perk_struct.script_int;
|
||||||
|
}
|
||||||
|
if ( isDefined( perk_struct.turn_on_notify ) )
|
||||||
|
{
|
||||||
|
perk_machine.turn_on_notify = perk_struct.turn_on_notify;
|
||||||
|
}
|
||||||
|
use_trigger.script_sound = "mus_perks_tombstone_jingle";
|
||||||
|
use_trigger.script_string = "tombstone_perk";
|
||||||
|
use_trigger.script_label = "mus_perks_tombstone_sting";
|
||||||
|
use_trigger.target = "vending_tombstone";
|
||||||
|
perk_machine.script_string = "tombstone_perk";
|
||||||
|
perk_machine.targetname = "vending_tombstone";
|
||||||
|
bump_trigger.script_string = "tombstone_perk";
|
||||||
|
|
||||||
|
level thread maps/mp/zombies/_zm_perks::turn_tombstone_on();
|
||||||
|
use_trigger thread maps/mp/zombies/_zm_perks::vending_trigger_think();
|
||||||
|
use_trigger thread maps/mp/zombies/_zm_perks::electric_perks_dialog();
|
||||||
|
|
||||||
|
powered_on = maps/mp/zombies/_zm_perks::get_perk_machine_start_state( use_trigger.script_noteworthy );
|
||||||
|
maps/mp/zombies/_zm_power::add_powered_item( maps/mp/zombies/_zm_power::perk_power_on, maps/mp/zombies/_zm_power::perk_power_off, maps/mp/zombies/_zm_power::perk_range, maps/mp/zombies/_zm_power::cost_low_if_local, 0, powered_on, use_trigger );
|
||||||
|
}
|
||||||
|
|
||||||
|
b23r_hint_string_fix()
|
||||||
|
{
|
||||||
|
flag_wait( "initial_blackscreen_passed" );
|
||||||
|
wait 0.05;
|
||||||
|
|
||||||
|
trigs = getentarray("weapon_upgrade", "targetname");
|
||||||
|
foreach (trig in trigs)
|
||||||
|
{
|
||||||
|
if (trig.zombie_weapon_upgrade == "beretta93r_zm")
|
||||||
|
{
|
||||||
|
hint = maps/mp/zombies/_zm_weapons::get_weapon_hint(trig.zombie_weapon_upgrade);
|
||||||
|
cost = level.zombie_weapons[trig.zombie_weapon_upgrade].cost;
|
||||||
|
trig sethintstring(hint, cost);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
town_move_quickrevive_machine()
|
||||||
|
{
|
||||||
|
if (!(!is_classic() && level.scr_zm_map_start_location == "town"))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
perk_struct = undefined;
|
||||||
|
perk_location_struct = undefined;
|
||||||
|
structs = getstructarray("zm_perk_machine", "targetname");
|
||||||
|
foreach (struct in structs)
|
||||||
|
{
|
||||||
|
if (IsDefined(struct.script_noteworthy) && IsDefined(struct.script_string))
|
||||||
|
{
|
||||||
|
if (struct.script_noteworthy == "specialty_quickrevive" && IsSubStr(struct.script_string, "zstandard"))
|
||||||
|
{
|
||||||
|
perk_struct = struct;
|
||||||
|
}
|
||||||
|
else if (struct.script_noteworthy == "specialty_longersprint" && IsSubStr(struct.script_string, "zstandard"))
|
||||||
|
{
|
||||||
|
perk_location_struct = struct;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!IsDefined(perk_struct) || !IsDefined(perk_location_struct))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// delete old machine
|
||||||
|
vending_triggers = getentarray( "zombie_vending", "targetname" );
|
||||||
|
for (i = 0; i < vending_trigger.size; i++)
|
||||||
|
{
|
||||||
|
trig = vending_triggers[i];
|
||||||
|
if (IsDefined(trig.script_noteworthy) && trig.script_noteworthy == "specialty_quickrevive")
|
||||||
|
{
|
||||||
|
trig.clip delete();
|
||||||
|
trig.machine delete();
|
||||||
|
trig.bump delete();
|
||||||
|
trig delete();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// spawn new machine
|
||||||
|
perk_location_struct.origin += anglesToRight(perk_location_struct.angles) * 4;
|
||||||
|
use_trigger = spawn( "trigger_radius_use", perk_location_struct.origin + vectorScale( ( 0, 0, 1 ), 30 ), 0, 40, 70 );
|
||||||
|
use_trigger.targetname = "zombie_vending";
|
||||||
|
use_trigger.script_noteworthy = perk_struct.script_noteworthy;
|
||||||
|
use_trigger triggerignoreteam();
|
||||||
|
perk_machine = spawn( "script_model", perk_location_struct.origin );
|
||||||
|
perk_machine.angles = perk_location_struct.angles;
|
||||||
|
perk_machine setmodel( perk_struct.model );
|
||||||
|
bump_trigger = spawn( "trigger_radius", perk_location_struct.origin + AnglesToRight(perk_location_struct.angles) * 32, 0, 35, 32 );
|
||||||
|
bump_trigger.script_activated = 1;
|
||||||
|
bump_trigger.script_sound = "zmb_perks_bump_bottle";
|
||||||
|
bump_trigger.targetname = "audio_bump_trigger";
|
||||||
|
bump_trigger thread maps/mp/zombies/_zm_perks::thread_bump_trigger();
|
||||||
|
collision = spawn( "script_model", perk_location_struct.origin, 1 );
|
||||||
|
collision.angles = perk_location_struct.angles;
|
||||||
|
collision setmodel( "zm_collision_perks1" );
|
||||||
|
collision.script_noteworthy = "clip";
|
||||||
|
collision disconnectpaths();
|
||||||
|
use_trigger.clip = collision;
|
||||||
|
use_trigger.machine = perk_machine;
|
||||||
|
use_trigger.bump = bump_trigger;
|
||||||
|
if ( isDefined( perk_struct.blocker_model ) )
|
||||||
|
{
|
||||||
|
use_trigger.blocker_model = perk_struct.blocker_model;
|
||||||
|
}
|
||||||
|
if ( isDefined( perk_struct.script_int ) )
|
||||||
|
{
|
||||||
|
perk_machine.script_int = perk_struct.script_int;
|
||||||
|
}
|
||||||
|
if ( isDefined( perk_struct.turn_on_notify ) )
|
||||||
|
{
|
||||||
|
perk_machine.turn_on_notify = perk_struct.turn_on_notify;
|
||||||
|
}
|
||||||
|
|
||||||
|
use_trigger.script_sound = "mus_perks_revive_jingle";
|
||||||
|
use_trigger.script_string = "revive_perk";
|
||||||
|
use_trigger.script_label = "mus_perks_revive_sting";
|
||||||
|
use_trigger.target = "vending_revive";
|
||||||
|
perk_machine.script_string = "revive_perk";
|
||||||
|
perk_machine.targetname = "vending_revive";
|
||||||
|
bump_trigger.script_string = "revive_perk";
|
||||||
|
|
||||||
|
level thread maps/mp/zombies/_zm_perks::turn_revive_on();
|
||||||
|
use_trigger thread maps/mp/zombies/_zm_perks::vending_trigger_think();
|
||||||
|
use_trigger thread maps/mp/zombies/_zm_perks::electric_perks_dialog();
|
||||||
|
|
||||||
|
powered_on = maps/mp/zombies/_zm_perks::get_perk_machine_start_state( use_trigger.script_noteworthy );
|
||||||
|
maps/mp/zombies/_zm_power::add_powered_item( maps/mp/zombies/_zm_power::perk_power_on, maps/mp/zombies/_zm_power::perk_power_off, maps/mp/zombies/_zm_power::perk_range, maps/mp/zombies/_zm_power::cost_low_if_local, 0, powered_on, use_trigger );
|
||||||
|
}
|
||||||
|
|
||||||
|
town_move_staminup_machine()
|
||||||
|
{
|
||||||
|
if (!(!is_classic() && level.scr_zm_map_start_location == "town"))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
perk_struct = undefined;
|
||||||
|
structs = getstructarray("zm_perk_machine", "targetname");
|
||||||
|
foreach (struct in structs)
|
||||||
|
{
|
||||||
|
if (IsDefined(struct.script_noteworthy) && IsDefined(struct.script_string))
|
||||||
|
{
|
||||||
|
if (struct.script_noteworthy == "specialty_longersprint" && IsSubStr(struct.script_string, "zclassic"))
|
||||||
|
{
|
||||||
|
perk_struct = struct;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!IsDefined(perk_struct))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// delete old machine
|
||||||
|
vending_triggers = getentarray( "zombie_vending", "targetname" );
|
||||||
|
for (i = 0; i < vending_trigger.size; i++)
|
||||||
|
{
|
||||||
|
trig = vending_triggers[i];
|
||||||
|
if (IsDefined(trig.script_noteworthy) && trig.script_noteworthy == "specialty_longersprint")
|
||||||
|
{
|
||||||
|
trig.clip delete();
|
||||||
|
trig.machine delete();
|
||||||
|
trig.bump delete();
|
||||||
|
trig delete();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// spawn new machine
|
||||||
|
use_trigger = spawn( "trigger_radius_use", perk_struct.origin + vectorScale( ( 0, 0, 1 ), 30 ), 0, 40, 70 );
|
||||||
|
use_trigger.targetname = "zombie_vending";
|
||||||
|
use_trigger.script_noteworthy = perk_struct.script_noteworthy;
|
||||||
|
use_trigger triggerignoreteam();
|
||||||
|
perk_machine = spawn( "script_model", perk_struct.origin );
|
||||||
|
perk_machine.angles = perk_struct.angles;
|
||||||
|
perk_machine setmodel( perk_struct.model );
|
||||||
|
bump_trigger = spawn( "trigger_radius", perk_struct.origin + AnglesToRight(perk_struct.angles) * 32, 0, 35, 32 );
|
||||||
|
bump_trigger.script_activated = 1;
|
||||||
|
bump_trigger.script_sound = "zmb_perks_bump_bottle";
|
||||||
|
bump_trigger.targetname = "audio_bump_trigger";
|
||||||
|
bump_trigger thread maps/mp/zombies/_zm_perks::thread_bump_trigger();
|
||||||
|
collision = spawn( "script_model", perk_struct.origin, 1 );
|
||||||
|
collision.angles = perk_struct.angles;
|
||||||
|
collision setmodel( "zm_collision_perks1" );
|
||||||
|
collision.script_noteworthy = "clip";
|
||||||
|
collision disconnectpaths();
|
||||||
|
use_trigger.clip = collision;
|
||||||
|
use_trigger.machine = perk_machine;
|
||||||
|
use_trigger.bump = bump_trigger;
|
||||||
|
if ( isDefined( perk_struct.blocker_model ) )
|
||||||
|
{
|
||||||
|
use_trigger.blocker_model = perk_struct.blocker_model;
|
||||||
|
}
|
||||||
|
if ( isDefined( perk_struct.script_int ) )
|
||||||
|
{
|
||||||
|
perk_machine.script_int = perk_struct.script_int;
|
||||||
|
}
|
||||||
|
if ( isDefined( perk_struct.turn_on_notify ) )
|
||||||
|
{
|
||||||
|
perk_machine.turn_on_notify = perk_struct.turn_on_notify;
|
||||||
|
}
|
||||||
|
use_trigger.script_sound = "mus_perks_stamin_jingle";
|
||||||
|
use_trigger.script_string = "marathon_perk";
|
||||||
|
use_trigger.script_label = "mus_perks_stamin_sting";
|
||||||
|
use_trigger.target = "vending_marathon";
|
||||||
|
perk_machine.script_string = "marathon_perk";
|
||||||
|
perk_machine.targetname = "vending_marathon";
|
||||||
|
bump_trigger.script_string = "marathon_perk";
|
||||||
|
|
||||||
|
level thread maps/mp/zombies/_zm_perks::turn_marathon_on();
|
||||||
|
use_trigger thread maps/mp/zombies/_zm_perks::vending_trigger_think();
|
||||||
|
use_trigger thread maps/mp/zombies/_zm_perks::electric_perks_dialog();
|
||||||
|
|
||||||
|
powered_on = maps/mp/zombies/_zm_perks::get_perk_machine_start_state( use_trigger.script_noteworthy );
|
||||||
|
maps/mp/zombies/_zm_power::add_powered_item( maps/mp/zombies/_zm_power::perk_power_on, maps/mp/zombies/_zm_power::perk_power_off, maps/mp/zombies/_zm_power::perk_range, maps/mp/zombies/_zm_power::cost_low_if_local, 0, powered_on, use_trigger );
|
||||||
|
}
|
||||||
|
|
||||||
|
town_move_tombstone_machine()
|
||||||
|
{
|
||||||
|
if (!(level.scr_zm_ui_gametype == "zstandard" && level.scr_zm_map_start_location == "town"))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
perk_struct = undefined;
|
||||||
|
structs = getstructarray("zm_perk_machine", "targetname");
|
||||||
|
foreach (struct in structs)
|
||||||
|
{
|
||||||
|
if (IsDefined(struct.script_noteworthy) && IsDefined(struct.script_string))
|
||||||
|
{
|
||||||
|
if (struct.script_noteworthy == "specialty_scavenger" && IsSubStr(struct.script_string, "zstandard"))
|
||||||
|
{
|
||||||
|
perk_struct = struct;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!IsDefined(perk_struct))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// delete old machine
|
||||||
|
vending_triggers = getentarray( "zombie_vending", "targetname" );
|
||||||
|
for (i = 0; i < vending_trigger.size; i++)
|
||||||
|
{
|
||||||
|
trig = vending_triggers[i];
|
||||||
|
if (IsDefined(trig.script_noteworthy) && trig.script_noteworthy == "specialty_scavenger")
|
||||||
|
{
|
||||||
|
trig.clip delete();
|
||||||
|
trig.machine delete();
|
||||||
|
trig.bump delete();
|
||||||
|
trig delete();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// spawn new machine
|
||||||
|
origin = (1852, -825, -56);
|
||||||
|
angles = (0, 180, 0);
|
||||||
|
use_trigger = spawn( "trigger_radius_use", origin + vectorScale( ( 0, 0, 1 ), 30 ), 0, 40, 70 );
|
||||||
|
use_trigger.targetname = "zombie_vending";
|
||||||
|
use_trigger triggerignoreteam();
|
||||||
|
perk_machine = spawn( "script_model", origin );
|
||||||
|
perk_machine.angles = angles;
|
||||||
|
perk_machine setmodel( perk_struct.model );
|
||||||
|
bump_trigger = spawn( "trigger_radius", origin + AnglesToRight(angles) * 32, 0, 35, 32 );
|
||||||
|
bump_trigger.script_activated = 1;
|
||||||
|
bump_trigger.script_sound = "zmb_perks_bump_bottle";
|
||||||
|
bump_trigger.targetname = "audio_bump_trigger";
|
||||||
|
bump_trigger thread maps/mp/zombies/_zm_perks::thread_bump_trigger();
|
||||||
|
collision = spawn( "script_model", origin, 1 );
|
||||||
|
collision.angles = angles;
|
||||||
|
collision setmodel( "zm_collision_perks1" );
|
||||||
|
collision.script_noteworthy = "clip";
|
||||||
|
collision disconnectpaths();
|
||||||
|
use_trigger.clip = collision;
|
||||||
|
use_trigger.machine = perk_machine;
|
||||||
|
use_trigger.bump = bump_trigger;
|
||||||
|
if ( isDefined( perk_struct.blocker_model ) )
|
||||||
|
{
|
||||||
|
use_trigger.blocker_model = perk_struct.blocker_model;
|
||||||
|
}
|
||||||
|
if ( isDefined( perk_struct.script_int ) )
|
||||||
|
{
|
||||||
|
perk_machine.script_int = perk_struct.script_int;
|
||||||
|
}
|
||||||
|
if ( isDefined( perk_struct.turn_on_notify ) )
|
||||||
|
{
|
||||||
|
perk_machine.turn_on_notify = perk_struct.turn_on_notify;
|
||||||
|
}
|
||||||
|
use_trigger.script_sound = "mus_perks_tombstone_jingle";
|
||||||
|
use_trigger.script_string = "tombstone_perk";
|
||||||
|
use_trigger.script_label = "mus_perks_tombstone_sting";
|
||||||
|
use_trigger.target = "vending_tombstone";
|
||||||
|
perk_machine.script_string = "tombstone_perk";
|
||||||
|
perk_machine.targetname = "vending_tombstone";
|
||||||
|
bump_trigger.script_string = "tombstone_perk";
|
||||||
|
|
||||||
|
level thread tombstone_machine_set_script_noteworthy_later(use_trigger);
|
||||||
|
}
|
||||||
|
|
||||||
|
tombstone_machine_set_script_noteworthy_later(use_trigger)
|
||||||
|
{
|
||||||
|
// wait until inital machine is removed
|
||||||
|
flag_wait( "initial_blackscreen_passed" );
|
||||||
|
wait 0.05;
|
||||||
|
|
||||||
|
// wait until after to set script_noteworthy so new machine isn't removed
|
||||||
|
use_trigger.script_noteworthy = perk_struct.script_noteworthy;
|
||||||
|
|
||||||
|
level thread maps/mp/zombies/_zm_perks::turn_tombstone_on();
|
||||||
|
use_trigger thread maps/mp/zombies/_zm_perks::vending_trigger_think();
|
||||||
|
use_trigger thread maps/mp/zombies/_zm_perks::electric_perks_dialog();
|
||||||
|
|
||||||
|
powered_on = maps/mp/zombies/_zm_perks::get_perk_machine_start_state( use_trigger.script_noteworthy );
|
||||||
|
maps/mp/zombies/_zm_power::add_powered_item( maps/mp/zombies/_zm_power::perk_power_on, maps/mp/zombies/_zm_power::perk_power_off, maps/mp/zombies/_zm_power::perk_range, maps/mp/zombies/_zm_power::cost_low_if_local, 0, powered_on, use_trigger );
|
||||||
}
|
}
|
||||||
|
|
||||||
grenade_safe_to_bounce( player, weapname )
|
grenade_safe_to_bounce( player, weapname )
|
||||||
|
Loading…
x
Reference in New Issue
Block a user