From 40c6e911d1f996b247073e9f72c6fe020ce78c67 Mon Sep 17 00:00:00 2001 From: JezuzLizard Date: Sun, 24 May 2020 11:46:10 -0700 Subject: [PATCH] uploaded _zm_perk_divetonuke as a baseline --- .../maps/mp/zombies/_zm_perk_divetonuke.gsc | 139 ++++++++++++++++++ zm_prison_patch/readme.md | 1 + 2 files changed, 140 insertions(+) create mode 100644 zm_prison_patch/maps/mp/zombies/_zm_perk_divetonuke.gsc diff --git a/zm_prison_patch/maps/mp/zombies/_zm_perk_divetonuke.gsc b/zm_prison_patch/maps/mp/zombies/_zm_perk_divetonuke.gsc new file mode 100644 index 0000000..eae26c8 --- /dev/null +++ b/zm_prison_patch/maps/mp/zombies/_zm_perk_divetonuke.gsc @@ -0,0 +1,139 @@ +#include maps/mp/_visionset_mgr; +#include maps/mp/zombies/_zm_perks; +#include maps/mp/zombies/_zm_net; +#include maps/mp/zombies/_zm_utility; +#include common_scripts/utility; +#include maps/mp/_utility; + +enable_divetonuke_perk_for_level() +{ + 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_clientfields( "specialty_flakjacket", ::divetonuke_register_clientfield, ::divetonuke_set_clientfield ); + maps/mp/zombies/_zm_perks::register_perk_machine( "specialty_flakjacket", ::divetonuke_perk_machine_setup, ::divetonuke_perk_machine_think ); + maps/mp/zombies/_zm_perks::register_perk_host_migration_func( "specialty_flakjacket", ::divetonuke_host_migration_func ); +} + +init_divetonuke() +{ + level.zombiemode_divetonuke_perk_func = ::divetonuke_explode; + maps/mp/_visionset_mgr::vsmgr_register_info( "visionset", "zm_perk_divetonuke", 9000, 400, 5, 1 ); + level._effect[ "divetonuke_groundhit" ] = loadfx( "maps/zombie/fx_zmb_phdflopper_exp" ); + set_zombie_var( "zombie_perk_divetonuke_radius", 300 ); + set_zombie_var( "zombie_perk_divetonuke_min_damage", 1000 ); + set_zombie_var( "zombie_perk_divetonuke_max_damage", 5000 ); +} + +divetonuke_precache() +{ + if ( isDefined( level.divetonuke_precache_override_func ) ) + { + [[ level.divetonuke_precache_override_func ]](); + return; + } + precacheitem( "zombie_perk_bottle_nuke" ); + precacheshader( "specialty_divetonuke_zombies" ); + precachemodel( "zombie_vending_nuke" ); + precachemodel( "zombie_vending_nuke_on" ); + precachestring( &"ZOMBIE_PERK_DIVETONUKE" ); + level._effect[ "divetonuke_light" ] = loadfx( "misc/fx_zombie_cola_dtap_on" ); + level.machine_assets[ "divetonuke" ] = spawnstruct(); + level.machine_assets[ "divetonuke" ].weapon = "zombie_perk_bottle_nuke"; + level.machine_assets[ "divetonuke" ].off_model = "zombie_vending_nuke"; + level.machine_assets[ "divetonuke" ].on_model = "zombie_vending_nuke_on"; +} + +divetonuke_register_clientfield() +{ + registerclientfield( "toplayer", "perk_dive_to_nuke", 9000, 1, "int" ); +} + +divetonuke_set_clientfield( state ) +{ + self setclientfieldtoplayer( "perk_dive_to_nuke", state ); +} + +divetonuke_perk_machine_setup( use_trigger, perk_machine, bump_trigger, collision ) +{ + use_trigger.script_sound = "mus_perks_phd_jingle"; + use_trigger.script_string = "divetonuke_perk"; + use_trigger.script_label = "mus_perks_phd_sting"; + use_trigger.target = "vending_divetonuke"; + perk_machine.script_string = "divetonuke_perk"; + perk_machine.targetname = "vending_divetonuke"; + if ( isDefined( bump_trigger ) ) + { + bump_trigger.script_string = "divetonuke_perk"; + } +} + +divetonuke_perk_machine_think() +{ + init_divetonuke(); + while ( 1 ) + { + machine = getentarray( "vending_divetonuke", "targetname" ); + machine_triggers = getentarray( "vending_divetonuke", "target" ); + i = 0; + while ( i < machine.size ) + { + 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 ) + { + machine[ i ] setmodel( level.machine_assets[ "divetonuke" ].on_model ); + 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 ); + if ( isDefined( level.machine_assets[ "divetonuke" ].power_on_callback ) ) + { + array_thread( machine, level.machine_assets[ "divetonuke" ].power_on_callback ); + } + level waittill( "divetonuke_off" ); + if ( isDefined( level.machine_assets[ "divetonuke" ].power_off_callback ) ) + { + array_thread( machine, level.machine_assets[ "divetonuke" ].power_off_callback ); + } + array_thread( machine, ::turn_perk_off ); + } +} + +divetonuke_host_migration_func() +{ + flop = getentarray( "vending_divetonuke", "targetname" ); + _a138 = flop; + _k138 = getFirstArrayKey( _a138 ); + while ( isDefined( _k138 ) ) + { + 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 ); + } +} + +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" ); + 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 ); +} diff --git a/zm_prison_patch/readme.md b/zm_prison_patch/readme.md index 1b27503..94ba6ee 100644 --- a/zm_prison_patch/readme.md +++ b/zm_prison_patch/readme.md @@ -19,6 +19,7 @@ zm_prison_patch/maps/mp/zm_prison.gsc ``` ### The following scripts are not checked yet, uploaded to setup a baseline: ``` +zm_prison_patch/maps/mp/zombies/_zm_perk_divetonuke.gsc ```