From 438d3808500c2df474cf0d173ff3a6b846baf94d Mon Sep 17 00:00:00 2001 From: JezuzLizard Date: Sun, 24 May 2020 12:30:56 -0700 Subject: [PATCH] checked _zm_perk_divetonuke _zm_perk_divetonuke has not been tested. --- engine functions and descriptions.md | 1 + .../maps/mp/zombies/_zm_perk_divetonuke.gsc | 72 +++++++++++++------ zm_prison_patch/readme.md | 2 +- 3 files changed, 53 insertions(+), 22 deletions(-) create mode 100644 engine functions and descriptions.md diff --git a/engine functions and descriptions.md b/engine functions and descriptions.md new file mode 100644 index 0000000..896b7a9 --- /dev/null +++ b/engine functions and descriptions.md @@ -0,0 +1 @@ +- weapon_name is a STRING diff --git a/zm_prison_patch/maps/mp/zombies/_zm_perk_divetonuke.gsc b/zm_prison_patch/maps/mp/zombies/_zm_perk_divetonuke.gsc index eae26c8..1d99917 100644 --- a/zm_prison_patch/maps/mp/zombies/_zm_perk_divetonuke.gsc +++ b/zm_prison_patch/maps/mp/zombies/_zm_perk_divetonuke.gsc @@ -1,3 +1,4 @@ +//checked includes match cerberus output #include maps/mp/_visionset_mgr; #include maps/mp/zombies/_zm_perks; #include maps/mp/zombies/_zm_net; @@ -5,7 +6,7 @@ #include common_scripts/utility; #include maps/mp/_utility; -enable_divetonuke_perk_for_level() +enable_divetonuke_perk_for_level() //checked matches cerberus output { maps/mp/zombies/_zm_perks::register_perk_basic_info( "specialty_flakjacket", "divetonuke", 2000, &"ZOMBIE_PERK_DIVETONUKE", "zombie_perk_bottle_nuke" ); maps/mp/zombies/_zm_perks::register_perk_precache_func( "specialty_flakjacket", ::divetonuke_precache ); @@ -14,7 +15,7 @@ enable_divetonuke_perk_for_level() maps/mp/zombies/_zm_perks::register_perk_host_migration_func( "specialty_flakjacket", ::divetonuke_host_migration_func ); } -init_divetonuke() +init_divetonuke() //checked matches cerberus output { level.zombiemode_divetonuke_perk_func = ::divetonuke_explode; maps/mp/_visionset_mgr::vsmgr_register_info( "visionset", "zm_perk_divetonuke", 9000, 400, 5, 1 ); @@ -24,7 +25,7 @@ init_divetonuke() set_zombie_var( "zombie_perk_divetonuke_max_damage", 5000 ); } -divetonuke_precache() +divetonuke_precache() //checked matches cerberus output { if ( isDefined( level.divetonuke_precache_override_func ) ) { @@ -43,17 +44,17 @@ divetonuke_precache() level.machine_assets[ "divetonuke" ].on_model = "zombie_vending_nuke_on"; } -divetonuke_register_clientfield() +divetonuke_register_clientfield() //checked matches cerberus output { registerclientfield( "toplayer", "perk_dive_to_nuke", 9000, 1, "int" ); } -divetonuke_set_clientfield( state ) +divetonuke_set_clientfield( state ) //checked matches cerberus output { self setclientfieldtoplayer( "perk_dive_to_nuke", state ); } -divetonuke_perk_machine_setup( use_trigger, perk_machine, bump_trigger, collision ) +divetonuke_perk_machine_setup( use_trigger, perk_machine, bump_trigger, collision ) //checked matches cerberus output { use_trigger.script_sound = "mus_perks_phd_jingle"; use_trigger.script_string = "divetonuke_perk"; @@ -67,31 +68,27 @@ divetonuke_perk_machine_setup( use_trigger, perk_machine, bump_trigger, collisio } } -divetonuke_perk_machine_think() +divetonuke_perk_machine_think() //checked changed to match cerberus output { init_divetonuke(); while ( 1 ) { machine = getentarray( "vending_divetonuke", "targetname" ); machine_triggers = getentarray( "vending_divetonuke", "target" ); - i = 0; - while ( i < machine.size ) + for ( i = 0; i < machine.size; i++ ) { machine[ i ] setmodel( level.machine_assets[ "divetonuke" ].off_model ); - i++; } array_thread( machine_triggers, ::set_power_on, 0 ); level thread do_initial_power_off_callback( machine, "divetonuke" ); level waittill( "divetonuke_on" ); - i = 0; - while ( i < machine.size ) + for ( i = 0; i < machine.size; i++ ) { machine[ i ] setmodel( level.machine_assets[ "divetonuke" ].on_model ); - machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0,3, 0,4, 3 ); + machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0.3, 0.4, 3 ); machine[ i ] playsound( "zmb_perks_power_on" ); machine[ i ] thread perk_fx( "divetonuke_light" ); machine[ i ] thread play_loop_on_machine(); - i++; } level notify( "specialty_flakjacket_power_on" ); array_thread( machine_triggers, ::set_power_on, 1 ); @@ -108,20 +105,16 @@ divetonuke_perk_machine_think() } } -divetonuke_host_migration_func() +divetonuke_host_migration_func() //checked changed to match cerberus output { flop = getentarray( "vending_divetonuke", "targetname" ); - _a138 = flop; - _k138 = getFirstArrayKey( _a138 ); - while ( isDefined( _k138 ) ) + foreach ( perk in flop ) { - perk = _a138[ _k138 ]; if ( isDefined( perk.model ) && perk.model == level.machine_assets[ "divetonuke" ].on_model ) { perk perk_fx( undefined, 1 ); perk thread perk_fx( "divetonuke_light" ); } - _k138 = getNextArrayKey( _a138, _k138 ); } } @@ -130,10 +123,47 @@ divetonuke_explode( attacker, origin ) radius = level.zombie_vars[ "zombie_perk_divetonuke_radius" ]; min_damage = level.zombie_vars[ "zombie_perk_divetonuke_min_damage" ]; max_damage = level.zombie_vars[ "zombie_perk_divetonuke_max_damage" ]; - radiusdamage( origin, radius, max_damage, min_damage, attacker, "MOD_GRENADE_SPLASH" ); + if ( isdefined( level.flopper_network_optimized ) && level.flopper_network_optimized ) + { + attacker thread divetonuke_explode_network_optimized(origin, radius, max_damage, min_damage, "MOD_GRENADE_SPLASH" ); + } + else + { + radiusdamage( origin, radius, max_damage, min_damage, attacker, "MOD_GRENADE_SPLASH" ); + } playfx( level._effect[ "divetonuke_groundhit" ], origin ); attacker playsound( "zmb_phdflop_explo" ); maps/mp/_visionset_mgr::vsmgr_activate( "visionset", "zm_perk_divetonuke", attacker ); wait 1; maps/mp/_visionset_mgr::vsmgr_deactivate( "visionset", "zm_perk_divetonuke", attacker ); } + +divetonuke_explode_network_optimized(origin, radius, max_damage, min_damage, damage_mod) +{ + self endon( "disconnect" ); + a_zombies = get_array_of_closest( origin, get_round_enemy_array(), undefined, undefined, radius ); + network_stall_counter = 0; + if ( isdefined( a_zombies ) ) + { + i = 0; + while ( i < a_zombies.size ) + { + e_zombie = a_zombies[ i ]; + if ( !isdefined( e_zombie ) || !isalive( e_zombie ) ) + { + i++; + continue; + } + dist = distance( e_zombie.origin, origin ); + damage = ( min_damage + max_damage ) - min_damage * ( 1 - ( dist / radius ) ); + e_zombie dodamage(damage, e_zombie.origin, self, self, 0, damage_mod); + network_stall_counter--; + if ( network_stall_counter <= 0 ) + { + wait_network_frame(); + network_stall_counter = randomintrange( 1, 3 ); + } + i++; + } + } +} diff --git a/zm_prison_patch/readme.md b/zm_prison_patch/readme.md index 94ba6ee..f1d683b 100644 --- a/zm_prison_patch/readme.md +++ b/zm_prison_patch/readme.md @@ -16,10 +16,10 @@ zm_prison_patch/maps/mp/zm_prison.gsc ``` ### The following scripts have been checked, but they have not been tested yet ``` +zm_prison_patch/maps/mp/zombies/_zm_perk_divetonuke.gsc ``` ### The following scripts are not checked yet, uploaded to setup a baseline: ``` -zm_prison_patch/maps/mp/zombies/_zm_perk_divetonuke.gsc ```