checked _zm_perk_divetonuke

_zm_perk_divetonuke has not been tested.
This commit is contained in:
JezuzLizard 2020-05-24 12:30:56 -07:00
parent 40c6e911d1
commit 438d380850
3 changed files with 53 additions and 22 deletions

View File

@ -0,0 +1 @@
- weapon_name is a STRING

View File

@ -1,3 +1,4 @@
//checked includes match cerberus output
#include maps/mp/_visionset_mgr; #include maps/mp/_visionset_mgr;
#include maps/mp/zombies/_zm_perks; #include maps/mp/zombies/_zm_perks;
#include maps/mp/zombies/_zm_net; #include maps/mp/zombies/_zm_net;
@ -5,7 +6,7 @@
#include common_scripts/utility; #include common_scripts/utility;
#include maps/mp/_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_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 ); 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 ); 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; level.zombiemode_divetonuke_perk_func = ::divetonuke_explode;
maps/mp/_visionset_mgr::vsmgr_register_info( "visionset", "zm_perk_divetonuke", 9000, 400, 5, 1 ); 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 ); set_zombie_var( "zombie_perk_divetonuke_max_damage", 5000 );
} }
divetonuke_precache() divetonuke_precache() //checked matches cerberus output
{ {
if ( isDefined( level.divetonuke_precache_override_func ) ) if ( isDefined( level.divetonuke_precache_override_func ) )
{ {
@ -43,17 +44,17 @@ divetonuke_precache()
level.machine_assets[ "divetonuke" ].on_model = "zombie_vending_nuke_on"; 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" ); 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 ); 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_sound = "mus_perks_phd_jingle";
use_trigger.script_string = "divetonuke_perk"; 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(); init_divetonuke();
while ( 1 ) while ( 1 )
{ {
machine = getentarray( "vending_divetonuke", "targetname" ); machine = getentarray( "vending_divetonuke", "targetname" );
machine_triggers = getentarray( "vending_divetonuke", "target" ); machine_triggers = getentarray( "vending_divetonuke", "target" );
i = 0; for ( i = 0; i < machine.size; i++ )
while ( i < machine.size )
{ {
machine[ i ] setmodel( level.machine_assets[ "divetonuke" ].off_model ); machine[ i ] setmodel( level.machine_assets[ "divetonuke" ].off_model );
i++;
} }
array_thread( machine_triggers, ::set_power_on, 0 ); array_thread( machine_triggers, ::set_power_on, 0 );
level thread do_initial_power_off_callback( machine, "divetonuke" ); level thread do_initial_power_off_callback( machine, "divetonuke" );
level waittill( "divetonuke_on" ); level waittill( "divetonuke_on" );
i = 0; for ( i = 0; i < machine.size; i++ )
while ( i < machine.size )
{ {
machine[ i ] setmodel( level.machine_assets[ "divetonuke" ].on_model ); 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 ] playsound( "zmb_perks_power_on" );
machine[ i ] thread perk_fx( "divetonuke_light" ); machine[ i ] thread perk_fx( "divetonuke_light" );
machine[ i ] thread play_loop_on_machine(); machine[ i ] thread play_loop_on_machine();
i++;
} }
level notify( "specialty_flakjacket_power_on" ); level notify( "specialty_flakjacket_power_on" );
array_thread( machine_triggers, ::set_power_on, 1 ); 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" ); flop = getentarray( "vending_divetonuke", "targetname" );
_a138 = flop; foreach ( perk in flop )
_k138 = getFirstArrayKey( _a138 );
while ( isDefined( _k138 ) )
{ {
perk = _a138[ _k138 ];
if ( isDefined( perk.model ) && perk.model == level.machine_assets[ "divetonuke" ].on_model ) if ( isDefined( perk.model ) && perk.model == level.machine_assets[ "divetonuke" ].on_model )
{ {
perk perk_fx( undefined, 1 ); perk perk_fx( undefined, 1 );
perk thread perk_fx( "divetonuke_light" ); 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" ]; radius = level.zombie_vars[ "zombie_perk_divetonuke_radius" ];
min_damage = level.zombie_vars[ "zombie_perk_divetonuke_min_damage" ]; min_damage = level.zombie_vars[ "zombie_perk_divetonuke_min_damage" ];
max_damage = level.zombie_vars[ "zombie_perk_divetonuke_max_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 ); playfx( level._effect[ "divetonuke_groundhit" ], origin );
attacker playsound( "zmb_phdflop_explo" ); attacker playsound( "zmb_phdflop_explo" );
maps/mp/_visionset_mgr::vsmgr_activate( "visionset", "zm_perk_divetonuke", attacker ); maps/mp/_visionset_mgr::vsmgr_activate( "visionset", "zm_perk_divetonuke", attacker );
wait 1; wait 1;
maps/mp/_visionset_mgr::vsmgr_deactivate( "visionset", "zm_perk_divetonuke", attacker ); 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++;
}
}
}

View File

@ -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 ### 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: ### The following scripts are not checked yet, uploaded to setup a baseline:
``` ```
zm_prison_patch/maps/mp/zombies/_zm_perk_divetonuke.gsc
``` ```