mirror of
https://github.com/JezuzLizard/t6-fastfile-mods.git
synced 2025-04-21 22:15:45 +00:00
Refine mixed wave preset.
This commit is contained in:
parent
71b6671cd4
commit
619282e252
@ -233,19 +233,6 @@ init()
|
||||
setup_interaction_matrix()
|
||||
{
|
||||
level.interaction_types = [];
|
||||
level.interaction_types["magic_box"] = sys::spawnstruct();
|
||||
level.interaction_types["magic_box"].priority = 0;
|
||||
level.interaction_types["magic_box"].animstate = "zm_lock_magicbox";
|
||||
level.interaction_types["magic_box"].notify_name = "box_lock_anim";
|
||||
level.interaction_types["magic_box"].action_notetrack = "locked";
|
||||
level.interaction_types["magic_box"].end_notetrack = "lock_done";
|
||||
level.interaction_types["magic_box"].validity_func = ::is_magic_box_valid;
|
||||
level.interaction_types["magic_box"].get_func = ::get_magic_boxes;
|
||||
level.interaction_types["magic_box"].value_func = ::get_dist_score;
|
||||
level.interaction_types["magic_box"].interact_func = ::magic_box_lock;
|
||||
level.interaction_types["magic_box"].spawn_bias = 1000;
|
||||
level.interaction_types["magic_box"].num_times_to_scale = 1;
|
||||
level.interaction_types["magic_box"].unlock_cost = 2000;
|
||||
level.interaction_types["perk_machine"] = sys::spawnstruct();
|
||||
level.interaction_types["perk_machine"].priority = 1;
|
||||
level.interaction_types["perk_machine"].animstate = "zm_lock_perk_machine";
|
||||
@ -260,6 +247,19 @@ setup_interaction_matrix()
|
||||
level.interaction_types["perk_machine"].unlock_cost = 2000;
|
||||
if ( getDvar( "mapname" ) == "zm_prison" )
|
||||
{
|
||||
level.interaction_types["magic_box"] = sys::spawnstruct();
|
||||
level.interaction_types["magic_box"].priority = 0;
|
||||
level.interaction_types["magic_box"].animstate = "zm_lock_magicbox";
|
||||
level.interaction_types["magic_box"].notify_name = "box_lock_anim";
|
||||
level.interaction_types["magic_box"].action_notetrack = "locked";
|
||||
level.interaction_types["magic_box"].end_notetrack = "lock_done";
|
||||
level.interaction_types["magic_box"].validity_func = ::is_magic_box_valid;
|
||||
level.interaction_types["magic_box"].get_func = ::get_magic_boxes;
|
||||
level.interaction_types["magic_box"].value_func = ::get_dist_score;
|
||||
level.interaction_types["magic_box"].interact_func = ::magic_box_lock;
|
||||
level.interaction_types["magic_box"].spawn_bias = 1000;
|
||||
level.interaction_types["magic_box"].num_times_to_scale = 1;
|
||||
level.interaction_types["magic_box"].unlock_cost = 2000;
|
||||
level.interaction_types["craftable_table"] = sys::spawnstruct();
|
||||
level.interaction_types["craftable_table"].priority = 2;
|
||||
level.interaction_types["craftable_table"].animstate = "zm_smash_craftable_table";
|
||||
@ -877,6 +877,7 @@ brutus_round_tracker()
|
||||
old_spawn_func = level.round_spawn_func;
|
||||
old_wait_func = level.round_wait_func;
|
||||
|
||||
is_team_on_golden_gate_bridge_func = pluto_sys::getfunction( "maps/mp/zm_alcatraz_utility", "is_team_on_golden_gate_bridge" );
|
||||
while ( true )
|
||||
{
|
||||
level waittill( "between_round_over" );
|
||||
@ -886,13 +887,11 @@ brutus_round_tracker()
|
||||
continue;
|
||||
else if ( level.next_brutus_round <= level.round_number )
|
||||
{
|
||||
/*
|
||||
if ( maps\mp\zm_alcatraz_utility::is_team_on_golden_gate_bridge() )
|
||||
if ( isdefined( is_team_on_golden_gate_bridge_func ) && [[ is_team_on_golden_gate_bridge_func ]]() )
|
||||
{
|
||||
level.next_brutus_round = level.round_number + 1;
|
||||
continue;
|
||||
}
|
||||
*/
|
||||
|
||||
wait( randomfloatrange( level.brutus_min_spawn_delay, level.brutus_max_spawn_delay ) );
|
||||
|
||||
@ -2220,17 +2219,19 @@ brutus_damage_override( inflictor, attacker, damage, flags, meansofdeath, weapon
|
||||
return damage;
|
||||
}
|
||||
|
||||
/*
|
||||
player_damage_shield_func = pluto_sys::getfunction( "maps/mp/zombies/_zm_weap_riotshield_prison", "player_damage_shield" );
|
||||
if ( isdefined( meansofdeath ) && ( meansofdeath == "MOD_MELEE" || meansofdeath == "MOD_IMPACT" ) )
|
||||
{
|
||||
if ( weapon == "alcatraz_shield_zm" )
|
||||
{
|
||||
shield_damage = level.zombie_vars["riotshield_fling_damage_shield"];
|
||||
inflictor maps\mp\zombies\_zm_weap_riotshield_prison::player_damage_shield( shield_damage, 0 );
|
||||
if ( isdefined( player_damage_shield_func ) )
|
||||
{
|
||||
inflictor [[ player_damage_shield_func ]]( shield_damage, 0 );
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
if ( isdefined( level.zombiemode_using_afterlife ) && level.zombiemode_using_afterlife && weapon == "lightning_hands_zm" )
|
||||
{
|
||||
@ -2751,7 +2752,8 @@ check_craftable_table_valid( player )
|
||||
self.stub.is_locked = 0;
|
||||
self.stub.locked_cost = undefined;
|
||||
self.stub.lock_fx delete();
|
||||
//self.stub thread maps\mp\zombies\_zm_craftables::craftablestub_update_prompt( player );
|
||||
craftablestub_update_prompt_func = pluto_sys::getfunction( "maps/mp/zombies/_zm_craftables", "craftablestub_update_prompt" );
|
||||
self.stub thread [[ craftablestub_update_prompt_func ]]( player );
|
||||
self sethintstring( self.stub.hint_string );
|
||||
}
|
||||
|
||||
@ -2777,7 +2779,10 @@ check_plane_valid( player )
|
||||
plane_struct.locked_cost = undefined;
|
||||
plane_struct.lock_fx delete();
|
||||
func = pluto_sys::getfunction( "maps/mp/zm_alcatraz_sq", "reset_plane_hint_string" );
|
||||
plane_struct [[ func ]]( player );
|
||||
if ( isdefined( func ) )
|
||||
{
|
||||
plane_struct [[ func ]]( player );
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
|
@ -13,15 +13,19 @@ main()
|
||||
set_dvar_if_unset( "rm_special_round_chance", 33 );
|
||||
set_dvar_if_unset( "rm_allow_same_round_as_last_round", 1 );
|
||||
|
||||
set_dvar_if_unset( "rm_allowed_special_rounds", "normal zombie_dog mechz mixed" );
|
||||
set_dvar_if_unset( "rm_allowed_special_rounds", "normal zombie_dog mechz" );
|
||||
set_dvar_if_unset( "rm_allowed_special_round_variants", "default" );
|
||||
set_dvar_if_unset( "rm_forced_special_round", "" );
|
||||
set_dvar_if_unset( "rm_forced_special_variant", "" );
|
||||
|
||||
set_dvar_if_unset( "rm_allowed_mixed_rounds_presets", "default" );
|
||||
set_dvar_if_unset( "rm_allowed_mixed_round_variants", "random" );
|
||||
set_dvar_if_unset( "rm_allowed_mixed_rounds_presets", "default wave" );
|
||||
set_dvar_if_unset( "rm_allowed_mixed_round_variants_for_default_preset", "random" );
|
||||
set_dvar_if_unset( "rm_allowed_mixed_round_variants_for_wave_preset", "normal_wave dog_wave mechz_wave" );
|
||||
set_dvar_if_unset( "rm_forced_mixed_rounds_preset", "" );
|
||||
set_dvar_if_unset( "rm_forced_mixed_rounds_variant", "" );
|
||||
set_dvar_if_unset( "rm_mixed_round_chance_base", 20 );
|
||||
set_dvar_if_unset( "rm_mixed_round_chance_round_scalar", 5 );
|
||||
set_dvar_if_unset( "rm_mixed_round_min_start_round", 18 );
|
||||
|
||||
level.special_round = sys::spawnstruct();
|
||||
level.special_round.current_data = sys::spawnstruct();
|
||||
@ -109,14 +113,37 @@ main()
|
||||
scripts\zm\zm_ai_pack\mixed_variants\_random::spawning_cooldown,
|
||||
scripts\zm\zm_ai_pack\mixed_variants\_random::spawning_round_start );
|
||||
|
||||
register_mixed_round_preset_variant( "default", "dog_wave",
|
||||
scripts\zm\zm_ai_pack\mixed_variants\_dog_wave::spawning_dog_wave,
|
||||
register_mixed_round_preset( "wave",
|
||||
scripts\zm\zm_ai_pack\mixed_presets\_default::preset_chance,
|
||||
scripts\zm\zm_ai_pack\mixed_presets\_default::round_start );
|
||||
|
||||
register_mixed_round_preset_variant( "wave", "normal_wave",
|
||||
scripts\zm\zm_ai_pack\mixed_variants\_normal_wave::spawning_wave,
|
||||
scripts\zm\zm_ai_pack\mixed_variants\_normal_wave::spawning_chance,
|
||||
scripts\zm\zm_ai_pack\mixed_variants\_normal_wave::spawning_limit,
|
||||
scripts\zm\zm_ai_pack\mixed_variants\_normal_wave::spawning_cooldown,
|
||||
scripts\zm\zm_ai_pack\mixed_variants\_normal_wave::spawning_round_start );
|
||||
|
||||
register_mixed_round_preset_variant( "wave", "dog_wave",
|
||||
scripts\zm\zm_ai_pack\mixed_variants\_dog_wave::spawning_wave,
|
||||
scripts\zm\zm_ai_pack\mixed_variants\_dog_wave::spawning_chance,
|
||||
scripts\zm\zm_ai_pack\mixed_variants\_dog_wave::spawning_limit,
|
||||
scripts\zm\zm_ai_pack\mixed_variants\_dog_wave::spawning_cooldown,
|
||||
scripts\zm\zm_ai_pack\mixed_variants\_dog_wave::spawning_round_start);
|
||||
|
||||
register_mixed_round_preset_variant( "wave", "mechz_wave",
|
||||
scripts\zm\zm_ai_pack\mixed_variants\_mechz_wave::spawning_wave,
|
||||
scripts\zm\zm_ai_pack\mixed_variants\_mechz_wave::spawning_chance,
|
||||
scripts\zm\zm_ai_pack\mixed_variants\_mechz_wave::spawning_limit,
|
||||
scripts\zm\zm_ai_pack\mixed_variants\_mechz_wave::spawning_cooldown,
|
||||
scripts\zm\zm_ai_pack\mixed_variants\_mechz_wave::spawning_round_start);
|
||||
|
||||
scripts\zm\zm_ai_pack\mixed_variants\_random::main();
|
||||
scripts\zm\zm_ai_pack\mixed_presets\_default::main();
|
||||
|
||||
scripts\zm\zm_ai_pack\mixed_variants\_random::main();
|
||||
scripts\zm\zm_ai_pack\mixed_variants\_dog_wave::main();
|
||||
scripts\zm\zm_ai_pack\mixed_variants\_mechz_wave::main();
|
||||
scripts\zm\zm_ai_pack\mixed_variants\_normal_wave::main();
|
||||
//Future variants
|
||||
// random - random ais, true_random - random ais + random behavior and stats
|
||||
// elemental?
|
||||
@ -127,7 +154,8 @@ main()
|
||||
|
||||
should_do_special_round()
|
||||
{
|
||||
if ( getDvar( "rm_forced_special_round" ) != "" && getdvar( "rm_forced_special_variant" ) )
|
||||
forced_special_round_string = getDvar( "rm_forced_special_round" );
|
||||
if ( forced_special_round_string != "" && forced_special_round_string != "mixed" && getdvar( "rm_forced_special_variant" ) )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
@ -174,6 +202,24 @@ should_do_special_round()
|
||||
return false;
|
||||
}
|
||||
|
||||
should_do_mixed_round()
|
||||
{
|
||||
if ( getdvar( "rm_allowed_mixed_rounds_presets" ) == "" )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
min_round = getDvarInt( "rm_mixed_round_min_start_round" );
|
||||
|
||||
chance_base = getdvarint( "rm_mixed_round_chance_base" );
|
||||
|
||||
if ( level.round_number >= min_round )
|
||||
{
|
||||
return randomInt( 100 ) <= ( chance_base + int( level.round_number * getdvarint( "rm_mixed_round_chance_round_scalar" ) ) );
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
determine_current_round_type()
|
||||
{
|
||||
return_value = sys::spawnstruct();
|
||||
@ -200,7 +246,9 @@ determine_current_round_type()
|
||||
|
||||
should_do_special_round = should_do_special_round();
|
||||
|
||||
if ( !should_do_special_round || !isDefined( level.round_manager_special_rounds ) || level.round_manager_special_rounds.size <= 0 )
|
||||
should_do_mixed_round = should_do_mixed_round();
|
||||
|
||||
if ( ( !should_do_special_round && !should_do_mixed_round ) || !isDefined( level.round_manager_special_rounds ) || level.round_manager_special_rounds.size <= 0 )
|
||||
{
|
||||
return_value.round_type = "normal";
|
||||
return_value.variant = "default";
|
||||
@ -208,6 +256,14 @@ determine_current_round_type()
|
||||
return level.normal_round.current_data;
|
||||
}
|
||||
|
||||
if ( !should_do_special_round && should_do_mixed_round )
|
||||
{
|
||||
return_value.round_type = "mixed";
|
||||
return_value.variant = "default";
|
||||
level.normal_round.current_data = return_value;
|
||||
return level.normal_round.current_data;
|
||||
}
|
||||
|
||||
allowed_round_string = getDvar( "rm_allowed_special_rounds" );
|
||||
|
||||
variant_string = getdvar( "rm_allowed_special_round_variants" );
|
||||
@ -501,7 +557,7 @@ pick_mixed_round_preset_variant( variants )
|
||||
}
|
||||
}
|
||||
|
||||
allowed_variants_string = getdvar( "rm_allowed_mixed_round_variants" );
|
||||
allowed_variants_string = getdvar( "rm_allowed_mixed_round_variants_for_" + level.round_manager_spawning_preset.preset_type + "_preset" );
|
||||
|
||||
pick_from_allowed_variants_pool = allowed_variants_string != "";
|
||||
|
||||
@ -525,7 +581,7 @@ pick_mixed_round_preset_variant( variants )
|
||||
possible_variants = array_randomize( allowed_variants_keys );
|
||||
for ( i = 0; i < possible_variants.size; i++ )
|
||||
{
|
||||
if ( [[ variants[ possible_variants[ i ] ].chance_func ]]() && possible_variants[ i ] [[ variants[ possible_variants[ i ] ].cooldown_func ]]() )
|
||||
if ( [[ variants[ possible_variants[ i ] ].chance_func ]]() && variants[ possible_variants[ i ] ] [[ variants[ possible_variants[ i ] ].cooldown_func ]]() )
|
||||
{
|
||||
variants[ possible_variants[ i ] ].last_time = gettime();
|
||||
return variants[ possible_variants[ i ] ];
|
||||
@ -540,17 +596,4 @@ pick_mixed_round_preset_variant( variants )
|
||||
return variants[ possible_variants[ 0 ] ];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
set_starting_properties_for_ai( starting_properties_struct )
|
||||
{
|
||||
if ( !isdefined( starting_properties_struct ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if ( isdefined( starting_properties_struct.health ) )
|
||||
{
|
||||
self.custom_starting_health = starting_properties_struct.health;
|
||||
}
|
||||
}
|
@ -41,6 +41,7 @@ register_mixed_round_preset( preset_type, preset_chance_func, preset_round_start
|
||||
|
||||
level.round_manager_mixed_round_presets[ preset_type ].chance_func = preset_chance_func;
|
||||
level.round_manager_mixed_round_presets[ preset_type ].start_func = preset_round_start_func;
|
||||
level.round_manager_mixed_round_presets[ preset_type ].preset_type = preset_type;
|
||||
}
|
||||
|
||||
register_mixed_round_preset_variant( preset_type, variant_type, spawning_func, spawning_chance_func, spawning_limit, spawning_cooldown_func, spawning_round_start_func )
|
||||
@ -120,3 +121,16 @@ wait_for_free_ai_slot( func )
|
||||
wait 0.1;
|
||||
}
|
||||
}
|
||||
|
||||
set_starting_properties_for_ai( starting_properties_struct )
|
||||
{
|
||||
if ( !isdefined( starting_properties_struct ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if ( isdefined( starting_properties_struct.health ) )
|
||||
{
|
||||
self.custom_starting_health = starting_properties_struct.health;
|
||||
}
|
||||
}
|
45
zm_ai_pack/scripts/zm/zm_ai_pack/mixed_presets/_wave.gsc
Normal file
45
zm_ai_pack/scripts/zm/zm_ai_pack/mixed_presets/_wave.gsc
Normal file
@ -0,0 +1,45 @@
|
||||
#include maps\mp\zombies\_zm_utility;
|
||||
#include common_scripts\utility;
|
||||
#include maps\mp\_utility;
|
||||
|
||||
#include scripts\zm\zm_ai_pack\_utility;
|
||||
|
||||
main()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
preset_chance()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
round_start()
|
||||
{
|
||||
level.round_manager_spawn_count = 0;
|
||||
}
|
||||
|
||||
spawn_wave( type )
|
||||
{
|
||||
max_in_wave = [[ level.round_manager_spawning_preset_current_variant.limit ]]();
|
||||
|
||||
while ( get_all_ai_count() > ( level.zombie_ai_limit - max_in_wave ) && level.zombie_total > 0 )
|
||||
{
|
||||
wait 0.5;
|
||||
}
|
||||
|
||||
count = 0;
|
||||
max_in_wave = min( level.zombie_total, max_in_wave );
|
||||
while ( ( count < max_in_wave ) && level.zombie_total > 0 )
|
||||
{
|
||||
wait_for_free_ai_slot( ::get_all_ai_count );
|
||||
ai = level [[ level.round_manager_aitype_spawning_funcs[ type ] ]]();
|
||||
if ( isdefined( ai ) )
|
||||
{
|
||||
count++;
|
||||
level.round_manager_spawn_count++;
|
||||
}
|
||||
wait( level.zombie_vars["zombie_spawn_delay"] );
|
||||
}
|
||||
wait( level.zombie_vars["zombie_spawn_delay"] );
|
||||
}
|
@ -6,60 +6,54 @@
|
||||
|
||||
main()
|
||||
{
|
||||
set_dvar_if_unset( "rm_mixed_preset_default_dog_wave_variant_spawn_limit_min", 6 );
|
||||
set_dvar_if_unset( "rm_mixed_preset_default_dog_wave_variant_spawn_limit_max", 12 );
|
||||
set_dvar_if_unset( "rm_mixed_preset_wave_dog_wave_variant_spawn_limit_min", 6 );
|
||||
set_dvar_if_unset( "rm_mixed_preset_wave_dog_wave_variant_spawn_limit_max", 12 );
|
||||
set_dvar_if_unset( "rm_mixed_preset_wave_dog_wave_variant_min_round", 15 );
|
||||
set_dvar_if_unset( "rm_mixed_preset_wave_dog_wave_variant_min_cooldown", 80.0 );
|
||||
set_dvar_if_unset( "rm_mixed_preset_wave_dog_wave_variant_max_cooldown", 240.0 );
|
||||
set_dvar_if_unset( "rm_mixed_preset_wave_dog_wave_variant_chance_threshold", 1000 );
|
||||
set_dvar_if_unset( "rm_mixed_preset_wave_dog_wave_variant_chance_per_spawn_min", 5 );
|
||||
set_dvar_if_unset( "rm_mixed_preset_wave_dog_wave_variant_chance_per_spawn_max", 10 );
|
||||
}
|
||||
|
||||
spawning_dog_wave()
|
||||
spawning_wave()
|
||||
{
|
||||
level.round_manager_dog_wave_count++;
|
||||
players = sys::getplayers();
|
||||
|
||||
max_dogs_in_wave = 12;
|
||||
if ( players.size == 1 )
|
||||
{
|
||||
max_dogs_in_wave = 6;
|
||||
}
|
||||
|
||||
while ( get_all_ai_count() > ( level.zombie_ai_limit - max_dogs_in_wave ) && level.zombie_total > 0 )
|
||||
{
|
||||
wait 0.5;
|
||||
}
|
||||
|
||||
spawned_dog_count = 0;
|
||||
max_dogs_in_wave = min( level.zombie_total, max_dogs_in_wave );
|
||||
while ( ( spawned_dog_count < max_dogs_in_wave ) && level.zombie_total > 0 )
|
||||
{
|
||||
wait_for_free_ai_slot( ::get_all_ai_count );
|
||||
ai = level [[ level.round_manager_aitype_spawning_funcs[ "zombie_dog" ] ]]();
|
||||
if ( ai )
|
||||
{
|
||||
spawned_dog_count++;
|
||||
level.round_manager_spawn_count++;
|
||||
}
|
||||
wait( level.zombie_vars["zombie_spawn_delay"] );
|
||||
}
|
||||
level.round_manager_dog_wave_count++;
|
||||
level.round_manager_guaranteed_dog_wave_time = getTime() + ( 80000 * level.round_manager_dog_wave_count );
|
||||
wait( level.zombie_vars["zombie_spawn_delay"] );
|
||||
scripts\zm\zm_ai_pack\mixed_presets\_wave::spawn_wave( "zombie_dog" );
|
||||
time = randomfloatrange( getdvarfloat( "rm_mixed_preset_wave_dog_wave_variant_min_cooldown" ), getdvarfloat( "rm_mixed_preset_wave_dog_wave_variant_max_cooldown" ) );
|
||||
level.round_manager_guaranteed_dog_wave_time = gettime() + ( time * level.round_manager_dog_wave_count );
|
||||
}
|
||||
|
||||
spawning_chance()
|
||||
{
|
||||
if ( level.round_number < getdvarint( "rm_mixed_preset_wave_dog_wave_variant_min_round" ) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
chance_of_dog_wave = 0;
|
||||
chance_of_dog_wave -= ( level.round_manager_dog_wave_count * 1000 );
|
||||
chance_of_dog_wave -= ( level.round_manager_dog_wave_count * getdvarint( "rm_mixed_preset_wave_dog_wave_variant_chance_threshold" ) );
|
||||
|
||||
chance_of_dog_wave += ( level.round_manager_spawn_count * randomintrange( 5, 10 ) );
|
||||
min = getdvarint( "rm_mixed_preset_wave_dog_wave_variant_chance_per_spawn_min" );
|
||||
max = getdvarint( "rm_mixed_preset_wave_dog_wave_variant_chance_per_spawn_max" );
|
||||
chance_of_dog_wave += ( level.round_manager_spawn_count * randomintrange( min, max ) );
|
||||
|
||||
should_spawn_dog_wave_random = chance_of_dog_wave >= 1000;
|
||||
should_spawn_guaranteed_dog_wave = ( ( level.round_manager_guaranteed_dog_wave_time + 80000 ) <= getTime() );
|
||||
should_spawn_dog_wave_random = chance_of_dog_wave >= getdvarint( "rm_mixed_preset_wave_dog_wave_variant_chance_threshold" );
|
||||
time = randomfloatrange( getdvarfloat( "rm_mixed_preset_wave_dog_wave_variant_min_cooldown" ), getdvarfloat( "rm_mixed_preset_wave_dog_wave_variant_max_cooldown" ) );
|
||||
should_spawn_guaranteed_dog_wave = ( ( level.round_manager_guaranteed_dog_wave_time + ( time * 1000 ) ) <= getTime() );
|
||||
|
||||
return should_spawn_dog_wave_random || should_spawn_guaranteed_dog_wave;
|
||||
}
|
||||
|
||||
spawning_limit()
|
||||
{
|
||||
return level.players.size <= 1 ? getdvarint( "rm_mixed_preset_default_dog_wave_variant_spawn_limit_min" ) : getdvarint( "rm_mixed_preset_default_dog_wave_variant_spawn_limit_max" );
|
||||
if ( level.players.size <= 1 )
|
||||
{
|
||||
return getdvarint( "rm_mixed_preset_wave_dog_wave_variant_spawn_limit_min" );
|
||||
}
|
||||
else
|
||||
{
|
||||
return getdvarint( "rm_mixed_preset_wave_dog_wave_variant_spawn_limit_max" );
|
||||
}
|
||||
}
|
||||
|
||||
spawning_cooldown()
|
||||
@ -71,5 +65,4 @@ spawning_round_start()
|
||||
{
|
||||
level.round_manager_guaranteed_dog_wave_time = level.round_start_time;
|
||||
level.round_manager_dog_wave_count = 0;
|
||||
level.round_manager_chance_of_dog_wave = 0;
|
||||
}
|
@ -0,0 +1,72 @@
|
||||
#include maps\mp\zombies\_zm_utility;
|
||||
#include common_scripts\utility;
|
||||
#include maps\mp\_utility;
|
||||
|
||||
#include scripts\zm\zm_ai_pack\_utility;
|
||||
|
||||
main()
|
||||
{
|
||||
set_dvar_if_unset( "rm_mixed_preset_wave_mechz_wave_variant_spawn_limit_min", 1 );
|
||||
set_dvar_if_unset( "rm_mixed_preset_wave_mechz_wave_variant_spawn_limit_max", 8 );
|
||||
set_dvar_if_unset( "rm_mixed_preset_wave_mechz_wave_variant_min_round", 25 );
|
||||
set_dvar_if_unset( "rm_mixed_preset_wave_mechz_wave_variant_min_cooldown", 120.0 );
|
||||
set_dvar_if_unset( "rm_mixed_preset_wave_mechz_wave_variant_max_cooldown", 240.0 );
|
||||
set_dvar_if_unset( "rm_mixed_preset_wave_mechz_wave_variant_chance_threshold", 2000 );
|
||||
set_dvar_if_unset( "rm_mixed_preset_wave_mechz_wave_variant_chance_per_spawn_min", 5 );
|
||||
set_dvar_if_unset( "rm_mixed_preset_wave_mechz_wave_variant_chance_per_spawn_max", 10 );
|
||||
}
|
||||
|
||||
spawning_wave()
|
||||
{
|
||||
level.round_manager_mechz_wave_count++;
|
||||
scripts\zm\zm_ai_pack\mixed_presets\_wave::spawn_wave( "mechz" );
|
||||
time = randomfloatrange( getdvarfloat( "rm_mixed_preset_wave_mechz_wave_variant_min_cooldown" ), getdvarfloat( "rm_mixed_preset_wave_mechz_wave_variant_max_cooldown" ) );
|
||||
level.round_manager_guaranteed_mechz_wave_time = gettime() + ( time * level.round_manager_mechz_wave_count );
|
||||
}
|
||||
|
||||
spawning_chance()
|
||||
{
|
||||
if ( level.round_number < getdvarint( "rm_mixed_preset_wave_mechz_wave_variant_min_round" ) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
chance_of_wave = 0;
|
||||
chance_of_wave -= ( level.round_manager_mechz_wave_count * getdvarint( "rm_mixed_preset_wave_mechz_wave_variant_chance_threshold" ) );
|
||||
|
||||
min = getdvarint( "rm_mixed_preset_wave_mechz_wave_variant_chance_per_spawn_min" );
|
||||
max = getdvarint( "rm_mixed_preset_wave_mechz_wave_variant_chance_per_spawn_max" );
|
||||
chance_of_wave += ( level.round_manager_spawn_count * randomintrange( min , max ) );
|
||||
|
||||
should_spawn_wave_random = chance_of_wave >= getdvarint( "rm_mixed_preset_wave_mechz_wave_variant_chance_threshold" );
|
||||
time = randomfloatrange( getdvarfloat( "rm_mixed_preset_wave_mechz_wave_variant_min_cooldown" ), getdvarfloat( "rm_mixed_preset_wave_mechz_wave_variant_max_cooldown" ) );
|
||||
should_spawn_guaranteed_wave = ( ( level.round_manager_guaranteed_mechz_wave_time + ( time * 1000 ) ) <= getTime() );
|
||||
|
||||
return should_spawn_wave_random || should_spawn_guaranteed_wave;
|
||||
}
|
||||
|
||||
spawning_limit()
|
||||
{
|
||||
if ( level.players.size <= 1 )
|
||||
{
|
||||
return getdvarint( "rm_mixed_preset_wave_mechz_wave_variant_spawn_limit_min" );
|
||||
}
|
||||
|
||||
spawn_amount = int( level.players.size * 0.5 ) + 1;
|
||||
max = getdvarint( "rm_mixed_preset_wave_mechz_wave_variant_spawn_limit_max" );
|
||||
if ( spawn_amount > max )
|
||||
{
|
||||
spawn_amount = max;
|
||||
}
|
||||
return spawn_amount;
|
||||
}
|
||||
|
||||
spawning_cooldown()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
spawning_round_start()
|
||||
{
|
||||
level.round_manager_guaranteed_mechz_wave_time = level.round_start_time;
|
||||
level.round_manager_mechz_wave_count = 0;
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
#include maps\mp\zombies\_zm_utility;
|
||||
#include common_scripts\utility;
|
||||
#include maps\mp\_utility;
|
||||
|
||||
#include scripts\zm\zm_ai_pack\_utility;
|
||||
|
||||
main()
|
||||
{
|
||||
}
|
||||
|
||||
spawning_wave()
|
||||
{
|
||||
scripts\zm\zm_ai_pack\mixed_presets\_wave::spawn_wave( "normal" );
|
||||
}
|
||||
|
||||
spawning_chance()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
spawning_limit()
|
||||
{
|
||||
return int( level.zombie_total * 0.1 ) + 6;
|
||||
}
|
||||
|
||||
spawning_cooldown()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
spawning_round_start()
|
||||
{
|
||||
}
|
@ -10,18 +10,12 @@ main()
|
||||
set_dvar_if_unset( "rm_mixed_preset_default_random_variant_wave_spawn_limit", 24 );
|
||||
set_dvar_if_unset( "rm_mixed_preset_default_random_variant_wave_spawn_cooldown", 1 );
|
||||
|
||||
set_dvar_if_unset( "rm_mixed_preset_default_random_variant_mechz_spawn_chance_1000", 5 );
|
||||
set_dvar_if_unset( "rm_mixed_preset_default_random_variant_mechz_spawn_chance_1000", 10 );
|
||||
set_dvar_if_unset( "rm_mixed_preset_default_random_variant_zombie_dog_spawn_chance_1000", 200 );
|
||||
}
|
||||
|
||||
spawning_random()
|
||||
{
|
||||
level endon( "intermission" );
|
||||
level endon( "end_of_round" );
|
||||
level endon( "restart_round" );
|
||||
/#
|
||||
level endon( "kill_round" );
|
||||
#/
|
||||
mechz_spawn_chance = getdvarint( "rm_mixed_preset_default_random_variant_mechz_spawn_chance_1000" );
|
||||
zombie_dog_chance = getdvarint( "rm_mixed_preset_default_random_variant_zombie_dog_spawn_chance_1000" );
|
||||
|
||||
|
@ -25,7 +25,6 @@ main()
|
||||
|
||||
round_spawning_common()
|
||||
{
|
||||
|
||||
while ( !isdefined( level.zombie_mechz_locations ) )
|
||||
wait 0.05;
|
||||
|
||||
@ -236,13 +235,13 @@ spawn_single_mechz( starting_properties )
|
||||
{
|
||||
ai = spawn_zombie( level.mechz_spawners[0] );
|
||||
|
||||
ai scripts\zm\zm_ai_pack\_round_manager::set_starting_properties_for_ai( starting_properties );
|
||||
|
||||
ai thread maps\mp\zombies\_zm_ai_mechz::mechz_spawn();
|
||||
if ( isdefined( ai ) )
|
||||
{
|
||||
level.mechz_left_to_spawn--;
|
||||
level.zombie_total--;
|
||||
ai set_starting_properties_for_ai( starting_properties );
|
||||
|
||||
ai thread maps\mp\zombies\_zm_ai_mechz::mechz_spawn();
|
||||
}
|
||||
|
||||
return ai;
|
||||
|
@ -14,27 +14,17 @@ round_spawning()
|
||||
/#
|
||||
level endon( "kill_round" );
|
||||
#/
|
||||
|
||||
if ( level.intermission )
|
||||
return;
|
||||
|
||||
if ( level.zombie_spawn_locations.size < 1 )
|
||||
{
|
||||
/#
|
||||
assertmsg( "No active spawners in the map. Check to see if the zone is active and if it's pointing to spawners." );
|
||||
#/
|
||||
return;
|
||||
}
|
||||
|
||||
ai_calculate_health( level.round_number );
|
||||
|
||||
if ( level.round_number < 10 || level.speed_change_max > 0 )
|
||||
level thread zombie_speed_up();
|
||||
|
||||
while ( true )
|
||||
{
|
||||
while ( level.intermission )
|
||||
{
|
||||
wait 1;
|
||||
}
|
||||
wait_for_free_ai_slot( ::get_all_ai_count );
|
||||
spawning_variant = scripts\zm\zm_ai_pack\_round_manager::pick_mixed_round_preset_variant( level.round_manager_spawning_preset.variants );
|
||||
|
||||
level.round_manager_spawning_preset_current_variant = spawning_variant;
|
||||
if ( isdefined( spawning_variant ) )
|
||||
{
|
||||
if ( getdvarint( "zm_ai_pack_debug" ) > 0 )
|
||||
@ -115,6 +105,11 @@ round_max()
|
||||
|
||||
round_start()
|
||||
{
|
||||
ai_calculate_health( level.round_number );
|
||||
|
||||
if ( level.round_number < 10 || level.speed_change_max > 0 )
|
||||
level thread zombie_speed_up();
|
||||
|
||||
level.round_manager_spawning_preset = scripts\zm\zm_ai_pack\_round_manager::determine_mixed_round_preset();
|
||||
|
||||
level [[ level.round_manager_spawning_preset.start_func ]]();
|
||||
|
@ -15,22 +15,6 @@ round_spawning()
|
||||
level endon( "kill_round" );
|
||||
#/
|
||||
|
||||
if ( level.zombie_spawn_locations.size < 1 )
|
||||
{
|
||||
/#
|
||||
assertmsg( "No active spawn locations in the zone. Check to see if the zone is active and if it's pointing to spawners." );
|
||||
#/
|
||||
return;
|
||||
}
|
||||
|
||||
ai_calculate_health( level.round_number );
|
||||
|
||||
if ( level.round_number < 10 || level.speed_change_max > 0 )
|
||||
level thread zombie_speed_up();
|
||||
|
||||
mixed_spawns = 0;
|
||||
old_spawn = undefined;
|
||||
|
||||
while ( true )
|
||||
{
|
||||
while ( get_current_zombie_count() >= level.zombie_ai_limit || level.zombie_total <= 0 || level.intermission )
|
||||
@ -123,7 +107,10 @@ round_max()
|
||||
|
||||
round_start()
|
||||
{
|
||||
|
||||
ai_calculate_health( level.round_number );
|
||||
|
||||
if ( level.round_number < 10 || level.speed_change_max > 0 )
|
||||
level thread zombie_speed_up();
|
||||
}
|
||||
|
||||
round_over()
|
||||
@ -211,9 +198,8 @@ spawn_single_normal_zombie( starting_properties_struct )
|
||||
{
|
||||
level.zombie_total--;
|
||||
ai thread round_spawn_failsafe();
|
||||
ai set_starting_properties_for_ai( starting_properties_struct );
|
||||
}
|
||||
|
||||
ai scripts\zm\zm_ai_pack\_round_manager::set_starting_properties_for_ai( starting_properties_struct );
|
||||
|
||||
return ai;
|
||||
}
|
@ -165,7 +165,7 @@ round_max_rush()
|
||||
|
||||
dog_max += players.size * getdvarint( "rm_dog_rush_max_dogs_round_per_player" );
|
||||
|
||||
//dog_max *= int( level.round_number * getdvarfloat( "rm_dog_rush_max_dogs_round_number_multiplier" ) );
|
||||
dog_max *= int( level.round_number * getdvarfloat( "rm_dog_rush_max_dogs_round_number_multiplier" ) );
|
||||
|
||||
max = getdvarint( "rm_dog_rush_max_dogs_round" );
|
||||
if ( dog_max > max )
|
||||
@ -279,7 +279,10 @@ spawn_single_zombie_dog( starting_properties_struct )
|
||||
}
|
||||
}
|
||||
|
||||
ai scripts\zm\zm_ai_pack\_round_manager::set_starting_properties_for_ai( starting_properties_struct );
|
||||
if ( isdefined( ai ) )
|
||||
{
|
||||
ai set_starting_properties_for_ai( starting_properties_struct );
|
||||
}
|
||||
|
||||
return ai;
|
||||
}
|
||||
|
@ -81,11 +81,17 @@ script,scripts/zm/zm_ai_pack/rounds/_timed.gsc
|
||||
script,scripts/zm/zm_ai_pack/rounds/_zombie_dog.gsc
|
||||
|
||||
script,scripts/zm/zm_ai_pack/mixed_presets/_default.gsc
|
||||
script,scripts/zm/zm_ai_pack/mixed_presets/_wave.gsc
|
||||
script,scripts/zm/zm_ai_pack/mixed_variants/_dog_wave.gsc
|
||||
script,scripts/zm/zm_ai_pack/mixed_variants/_mechz_wave.gsc
|
||||
script,scripts/zm/zm_ai_pack/mixed_variants/_normal_wave.gsc
|
||||
script,scripts/zm/zm_ai_pack/mixed_variants/_random.gsc
|
||||
|
||||
script,sys.gsc
|
||||
script,pluto_sys.gsc
|
||||
|
||||
// Map specific scripts
|
||||
script,scripts/zm/zm_prison/zm_ai_pack_mod_zm_prison_main.gsc
|
||||
script,scripts/zm/zm_prison/zm_ai_pack_mod_zm_prison_main.gsc
|
||||
script,scripts/zm/zm_buried/zm_ai_pack_mod_zm_buried_main.gsc
|
||||
script,scripts/zm/zm_highrise/zm_ai_pack_mod_zm_highrise_main.gsc
|
||||
script,scripts/zm/zm_transit/zm_ai_pack_mod_zm_transit_main.gsc
|
Loading…
x
Reference in New Issue
Block a user