mirror of
https://github.com/JezuzLizard/Recompilable-gscs-for-BO2-zombies-and-multiplayer.git
synced 2025-06-08 01:47:50 -05:00
Uploaded 10 zm_nuked_patch scripts as a baseline.
This commit is contained in:
parent
dd5046dc45
commit
93f1071e7b
117
zm_nuked_patch/maps/mp/zm_nuked_ffotd.gsc
Normal file
117
zm_nuked_patch/maps/mp/zm_nuked_ffotd.gsc
Normal file
@ -0,0 +1,117 @@
|
||||
#include maps/mp/zombies/_zm_ffotd;
|
||||
#include maps/mp/zombies/_zm_utility;
|
||||
#include common_scripts/utility;
|
||||
#include maps/mp/_utility;
|
||||
|
||||
main_start()
|
||||
{
|
||||
precachemodel( "collision_wall_128x128x10_standard" );
|
||||
precachemodel( "collision_player_256x256x10" );
|
||||
precachemodel( "collision_wall_64x64x10_standard" );
|
||||
if ( isDefined( level.use_swipe_protection ) )
|
||||
{
|
||||
onplayerconnect_callback( ::claymore_watch_swipes );
|
||||
}
|
||||
}
|
||||
|
||||
main_end()
|
||||
{
|
||||
setdvar( "zombiemode_path_minz_bias", 28 );
|
||||
collision7 = spawn( "script_model", ( -490, 963, 63 ) );
|
||||
collision7 setmodel( "collision_player_256x256x10" );
|
||||
collision7.angles = ( 0, 25,2, -90 );
|
||||
collision7 ghost();
|
||||
collision9 = spawn( "script_model", ( -1349, 1016, 0 ) );
|
||||
collision9 setmodel( "collision_wall_128x128x10_standard" );
|
||||
collision9.angles = vectorScale( ( 0, 1, 0 ), 339,8 );
|
||||
collision9 ghost();
|
||||
collision11 = spawn( "script_model", ( 1074, 584, 126 ) );
|
||||
collision11 setmodel( "collision_wall_64x64x10_standard" );
|
||||
collision11.angles = vectorScale( ( 0, 1, 0 ), 15 );
|
||||
collision11 ghost();
|
||||
collision12 = spawn( "script_model", ( 380, -112, 150 ) );
|
||||
collision12 setmodel( "collision_wall_128x128x10_standard" );
|
||||
collision12.angles = vectorScale( ( 0, 1, 0 ), 275 );
|
||||
collision12 ghost();
|
||||
collision13 = spawn( "script_model", ( 501, 212, 64 ) );
|
||||
collision13 setmodel( "collision_wall_64x64x10_standard" );
|
||||
collision13.angles = ( 0, 10,8, 90 );
|
||||
collision13 ghost();
|
||||
level thread prone_under_garage_door_exploit();
|
||||
}
|
||||
|
||||
prone_under_garage_door_exploit()
|
||||
{
|
||||
zombie_trigger_origin = ( -679, 339, -40 );
|
||||
zombie_trigger_radius = 100;
|
||||
zombie_trigger_height = 128;
|
||||
player_trigger_origin = ( -750, 189, -60 );
|
||||
player_trigger_radius = 72;
|
||||
zombie_goto_point = ( -863, 320, -40 );
|
||||
level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
|
||||
zombie_trigger_origin = ( -652,6, 143,2, -58,6015 );
|
||||
zombie_trigger_radius = 85;
|
||||
zombie_trigger_height = 128;
|
||||
player_trigger_origin = ( -741, 177, -52 );
|
||||
player_trigger_radius = 35;
|
||||
zombie_goto_point = ( -729,61, 156,24, -50 );
|
||||
level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
|
||||
zombie_trigger_origin = ( -863, 320, -20 );
|
||||
zombie_trigger_radius = 150;
|
||||
zombie_trigger_height = 128;
|
||||
player_trigger_origin = ( -750, 189, -60 );
|
||||
player_trigger_radius = 72;
|
||||
zombie_goto_point = ( -804,61, 198,24, -40 );
|
||||
level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
|
||||
}
|
||||
|
||||
claymore_watch_swipes()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
self notify( "claymore_watch_swipes" );
|
||||
self endon( "claymore_watch_swipes" );
|
||||
while ( 1 )
|
||||
{
|
||||
self waittill( "weapon_change", weapon );
|
||||
if ( is_placeable_mine( weapon ) )
|
||||
{
|
||||
self.mine_damage = 0;
|
||||
self thread watch_melee_swipes( weapon );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
watch_melee_swipes( weapname )
|
||||
{
|
||||
self endon( "weapon_change" );
|
||||
self endon( "death" );
|
||||
self endon( "disconnect" );
|
||||
while ( 1 )
|
||||
{
|
||||
self waittill( "melee_swipe", zombie );
|
||||
self.mine_damage++;
|
||||
if ( self.mine_damage > 5 )
|
||||
{
|
||||
self.mine_damage = 0;
|
||||
ammo = self getweaponammoclip( weapname );
|
||||
if ( ammo >= 1 )
|
||||
{
|
||||
self setweaponammoclip( weapname, ammo - 1 );
|
||||
if ( ammo == 1 )
|
||||
{
|
||||
self setweaponammoclip( weapname, ammo - 1 );
|
||||
primaryweapons = self getweaponslistprimaries();
|
||||
if ( isDefined( primaryweapons[ 0 ] ) )
|
||||
{
|
||||
self switchtoweapon( primaryweapons[ 0 ] );
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
self takeweapon( weapname );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
137
zm_nuked_patch/maps/mp/zm_nuked_fx.gsc
Normal file
137
zm_nuked_patch/maps/mp/zm_nuked_fx.gsc
Normal file
@ -0,0 +1,137 @@
|
||||
#include maps/mp/_utility;
|
||||
|
||||
#using_animtree( "fxanim_props" );
|
||||
|
||||
precache_util_fx()
|
||||
{
|
||||
}
|
||||
|
||||
precache_scripted_fx()
|
||||
{
|
||||
level._effect[ "powerup_on" ] = loadfx( "misc/fx_zombie_powerup_on" );
|
||||
level._effect[ "powerup_on_solo" ] = loadfx( "misc/fx_zombie_powerup_solo_on" );
|
||||
level._effect[ "powerup_on_caution" ] = loadfx( "misc/fx_zombie_powerup_caution_on" );
|
||||
level._effect[ "blue_eyes" ] = loadfx( "maps/zombie/fx_zombie_eye_single_blue" );
|
||||
level._effect[ "large_ceiling_dust" ] = loadfx( "maps/zombie/fx_dust_ceiling_impact_lg_mdbrown" );
|
||||
level._effect[ "lght_marker" ] = loadfx( "maps/zombie/fx_zombie_coast_marker" );
|
||||
level._effect[ "lght_marker_flare" ] = loadfx( "maps/zombie/fx_zombie_coast_marker_fl" );
|
||||
level._effect[ "poltergeist" ] = loadfx( "misc/fx_zombie_couch_effect" );
|
||||
level._effect[ "zomb_gib" ] = loadfx( "maps/zombie/fx_zombie_dog_explosion" );
|
||||
level._effect[ "perk_meteor" ] = loadfx( "maps/zombie/fx_zmb_trail_perk_meteor" );
|
||||
level._effect[ "fire_devil_lg" ] = loadfx( "maps/zombie/fx_zmb_fire_devil_lg" );
|
||||
level._effect[ "fire_devil_sm" ] = loadfx( "maps/zombie/fx_zmb_fire_devil_sm" );
|
||||
level._effect[ "rocket_entry" ] = loadfx( "maps/zombie/fx_zmb_nuke_reentry" );
|
||||
level._effect[ "rocket_entry_light" ] = loadfx( "maps/zombie/fx_zmb_nuke_rocket_light" );
|
||||
level._effect[ "fx_mp_elec_spark_burst_xsm_thin" ] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_xsm_thin" );
|
||||
level._effect[ "wire_spark" ] = loadfx( "electrical/fx_elec_wire_spark_burst_xsm" );
|
||||
}
|
||||
|
||||
precache_createfx_fx()
|
||||
{
|
||||
level._effect[ "fx_zm_nuked_exp_perk_impact_int_shockwave" ] = loadfx( "explosions/fx_zm_nuked_exp_perk_impact_int_shockwave" );
|
||||
level._effect[ "fx_zm_nuked_exp_perk_impact_int" ] = loadfx( "explosions/fx_zm_nuked_exp_perk_impact_int" );
|
||||
level._effect[ "fx_zm_nuked_exp_perk_impact_ext" ] = loadfx( "explosions/fx_zm_nuked_exp_perk_impact_ext" );
|
||||
level._effect[ "fx_zm_nuked_perk_impact_ceiling_dust" ] = loadfx( "dirt/fx_zm_nuked_perk_impact_ceiling_dust" );
|
||||
level._effect[ "fx_lf_zmb_nuke_sun" ] = loadfx( "lens_flares/fx_lf_zmb_nuke_sun" );
|
||||
level._effect[ "fx_zm_nuked_water_stream_radioactive_thin" ] = loadfx( "water/fx_zm_nuked_water_drip_radioactive" );
|
||||
level._effect[ "fx_zm_nuked_water_stream_radioactive_spatter" ] = loadfx( "water/fx_zm_nuked_water_drip_radioactive_spatter" );
|
||||
level._effect[ "fx_zmb_nuke_nuclear_lightning_runner" ] = loadfx( "maps/zombie/fx_zmb_nuke_nuclear_lightning_runner" );
|
||||
level._effect[ "fx_zmb_nuke_radioactive_embers_crater" ] = loadfx( "maps/zombie/fx_zmb_nuke_radioactive_embers_crater" );
|
||||
level._effect[ "fx_zmb_nuke_radioactive_embers" ] = loadfx( "maps/zombie/fx_zmb_nuke_radioactive_embers" );
|
||||
level._effect[ "fx_zmb_nuke_linger_core" ] = loadfx( "maps/zombie/fx_zmb_nuke_linger_core" );
|
||||
level._effect[ "fx_zmb_nuke_sand_blowing_lg" ] = loadfx( "maps/zombie/fx_zmb_nuke_sand_blowing_lg" );
|
||||
level._effect[ "fx_zmb_nuke_debris_streamer_volume" ] = loadfx( "maps/zombie/fx_zmb_nuke_debris_streamer_volume" );
|
||||
level._effect[ "fx_zmb_nuke_burning_ash_gusty" ] = loadfx( "maps/zombie/fx_zmb_nuke_burning_ash_gusty" );
|
||||
level._effect[ "fx_zmb_nuke_radioactive_ash_gusty" ] = loadfx( "maps/zombie/fx_zmb_nuke_radioactive_ash_gusty" );
|
||||
level._effect[ "fx_zmb_nuke_sand_windy_hvy_md" ] = loadfx( "maps/zombie/fx_zmb_nuke_sand_windy_hvy_md" );
|
||||
level._effect[ "fx_zmb_nuke_sand_windy_hvy_sm" ] = loadfx( "maps/zombie/fx_zmb_nuke_sand_windy_hvy_sm" );
|
||||
level._effect[ "fx_embers_falling_md" ] = loadfx( "env/fire/fx_embers_falling_md" );
|
||||
level._effect[ "fx_embers_falling_sm" ] = loadfx( "env/fire/fx_embers_falling_sm" );
|
||||
level._effect[ "fx_ash_embers_falling_radioactive_md" ] = loadfx( "debris/fx_ash_embers_falling_radioactive_md" );
|
||||
level._effect[ "fx_ash_embers_falling_radioactive_sm" ] = loadfx( "debris/fx_ash_embers_falling_radioactive_sm" );
|
||||
level._effect[ "fx_mp_elec_spark_burst_xsm_thin_runner" ] = loadfx( "maps/mp_maps/fx_mp_elec_spark_burst_xsm_thin_runner" );
|
||||
level._effect[ "fx_elec_spark_wire_xsm_runner" ] = loadfx( "electrical/fx_elec_spark_wire_xsm_runner" );
|
||||
level._effect[ "fx_zm_elec_arc_vert" ] = loadfx( "electrical/fx_zm_elec_arc_vert" );
|
||||
level._effect[ "fx_elec_transformer_sparks_runner" ] = loadfx( "electrical/fx_elec_transformer_sparks_runner" );
|
||||
level._effect[ "fx_zmb_nuke_fire_windblown_md" ] = loadfx( "fire/fx_zmb_nuke_fire_windblown_md" );
|
||||
level._effect[ "fx_fire_xsm" ] = loadfx( "fire/fx_fire_xsm_no_flicker" );
|
||||
level._effect[ "fx_fire_line_xsm" ] = loadfx( "fire/fx_fire_line_xsm_no_flicker" );
|
||||
level._effect[ "fx_fire_sm_smolder" ] = loadfx( "fire/fx_zm_fire_sm_smolder_near" );
|
||||
level._effect[ "fx_fire_line_sm" ] = loadfx( "fire/fx_nic_fire_line_sm" );
|
||||
level._effect[ "fx_fire_wall_wood_ext_md" ] = loadfx( "fire/fx_fire_wall_wood_ext_md" );
|
||||
level._effect[ "fx_fire_ceiling_md" ] = loadfx( "fire/fx_nic_fire_ceiling_md" );
|
||||
level._effect[ "fx_fire_ceiling_edge_md" ] = loadfx( "fire/fx_nic_fire_ceiling_edge_md" );
|
||||
level._effect[ "fx_nic_fire_ceiling_edge_sm" ] = loadfx( "fire/fx_nic_fire_ceiling_edge_sm" );
|
||||
level._effect[ "fx_nic_fire_building_md_dist" ] = loadfx( "fire/fx_nic_fire_building_md_dist" );
|
||||
level._effect[ "fx_fire_fireplace_md" ] = loadfx( "fire/fx_fire_fireplace_md" );
|
||||
level._effect[ "fx_fire_wood_floor_int" ] = loadfx( "fire/fx_fire_wood_floor_int" );
|
||||
level._effect[ "fx_fire_ceiling_rafter_md" ] = loadfx( "fire/fx_nic_fire_ceiling_rafter_md" );
|
||||
level._effect[ "fx_fire_eaves_md" ] = loadfx( "fire/fx_nic_fire_eaves_md" );
|
||||
level._effect[ "fx_fire_eaves_md_left" ] = loadfx( "fire/fx_nic_fire_eaves_md_left" );
|
||||
level._effect[ "fx_fire_eaves_md_right" ] = loadfx( "fire/fx_nic_fire_eaves_md_right" );
|
||||
level._effect[ "fx_fire_line_xsm_pole" ] = loadfx( "fire/fx_nic_fire_line_xsm_pole" );
|
||||
level._effect[ "fx_fire_line_sm_pole" ] = loadfx( "fire/fx_nic_fire_line_sm_pole" );
|
||||
level._effect[ "fx_fire_pole_md_long" ] = loadfx( "fire/fx_nic_fire_pole_md_long" );
|
||||
level._effect[ "fx_fire_smolder_area_sm" ] = loadfx( "fire/fx_fire_smolder_area_sm" );
|
||||
level._effect[ "fx_smk_wood_sm_black" ] = loadfx( "smoke/fx_smk_wood_sm_black" );
|
||||
level._effect[ "fx_smk_fire_lg_black" ] = loadfx( "smoke/fx_smk_fire_lg_black" );
|
||||
level._effect[ "fx_smk_plume_md_blk_wispy_dist" ] = loadfx( "smoke/fx_smk_plume_md_blk_wispy_dist" );
|
||||
level._effect[ "fx_smk_smolder_rubble_md_int" ] = loadfx( "smoke/fx_smk_smolder_rubble_md_int_cheap" );
|
||||
level._effect[ "fx_smk_hallway_md_dark" ] = loadfx( "smoke/fx_smk_hallway_md_dark" );
|
||||
level._effect[ "fx_smk_linger_lit" ] = loadfx( "smoke/fx_smk_linger_lit" );
|
||||
level._effect[ "fx_smk_linger_lit_slow" ] = loadfx( "smoke/fx_smk_linger_lit_slow" );
|
||||
level._effect[ "fx_smk_linger_lit_slow_bright" ] = loadfx( "smoke/fx_smk_linger_lit_slow_bright" );
|
||||
level._effect[ "fx_smk_linger_lit_z" ] = loadfx( "smoke/fx_smk_linger_lit_z" );
|
||||
level._effect[ "fx_smk_smolder_gray_fast" ] = loadfx( "smoke/fx_smk_smolder_gray_fast" );
|
||||
level._effect[ "fx_smk_smolder_gray_slow" ] = loadfx( "smoke/fx_smk_smolder_gray_slow" );
|
||||
level._effect[ "fx_zmb_fog_low_radiation_140x300" ] = loadfx( "fog/fx_zmb_fog_low_radiation_140x300" );
|
||||
level._effect[ "fx_zm_nuked_light_ray_md_wide" ] = loadfx( "light/fx_zm_nuked_light_ray_md_wide" );
|
||||
level._effect[ "fx_zm_nuked_light_ray_md_wide_streak" ] = loadfx( "light/fx_zm_nuked_light_ray_md_wide_streak" );
|
||||
level._effect[ "fx_light_ray_grate_warm" ] = loadfx( "light/fx_zm_nuked_light_ray_streaks" );
|
||||
level._effect[ "fx_light_flour_glow_cool_sngl_shrt" ] = loadfx( "light/fx_light_flour_glow_cool_sngl_shrt" );
|
||||
level._effect[ "fx_zm_nuked_light_ray_streaks_1s" ] = loadfx( "light/fx_zm_nuked_light_ray_streaks_1s" );
|
||||
level._effect[ "fx_zm_nuked_light_ray_md_wide_streak_1s" ] = loadfx( "light/fx_zm_nuked_light_ray_md_wide_streak_1s" );
|
||||
level._effect[ "fx_mp_nuked_hose_spray" ] = loadfx( "maps/mp_maps/fx_mp_nuked_hose_spray" );
|
||||
level._effect[ "fx_ash_embers_up_lg" ] = loadfx( "debris/fx_ash_embers_up_lg" );
|
||||
level._effect[ "fx_ash_burning_falling_interior" ] = loadfx( "debris/fx_ash_burning_falling_interior" );
|
||||
level._effect[ "fx_zmb_nuke_fire_med" ] = loadfx( "maps/zombie/fx_zmb_nuke_fire_med" );
|
||||
level._effect[ "fx_zmb_tranzit_fire_lrg" ] = loadfx( "maps/zombie/fx_zmb_tranzit_fire_lrg" );
|
||||
level._effect[ "fx_zmb_tranzit_fire_med" ] = loadfx( "maps/zombie/fx_zmb_tranzit_fire_med" );
|
||||
level._effect[ "fx_cloud_cover_volume" ] = loadfx( "maps/zombie/fx_zmb_nuke_cloud_cover_volume" );
|
||||
level._effect[ "fx_cloud_cover_volume_sm" ] = loadfx( "maps/zombie/fx_zmb_nuke_cloud_cover_volume_sm" );
|
||||
level._effect[ "fx_cloud_cover_flat" ] = loadfx( "maps/zombie/fx_zmb_nuke_cloud_cover_flat" );
|
||||
}
|
||||
|
||||
precache_fxanim_props()
|
||||
{
|
||||
level.scr_anim[ "fxanim_props" ][ "pant01_fast" ] = %fxanim_gp_pant01_fast_anim;
|
||||
level.scr_anim[ "fxanim_props" ][ "shirt01_fast" ] = %fxanim_gp_shirt01_fast_anim;
|
||||
level.scr_anim[ "fxanim_props" ][ "sheet_med" ] = %fxanim_gp_cloth_sheet_med_fast_anim;
|
||||
level.scr_anim[ "fxanim_props" ][ "wirespark_long" ] = %fxanim_gp_wirespark_long_anim;
|
||||
level.scr_anim[ "fxanim_props" ][ "wirespark_med" ] = %fxanim_gp_wirespark_med_anim;
|
||||
level.scr_anim[ "fxanim_props" ][ "roaches" ] = %fxanim_gp_roaches_anim;
|
||||
level.scr_anim[ "fxanim_props" ][ "wht_shutters" ] = %fxanim_zom_nuketown_shutters_anim;
|
||||
level.scr_anim[ "fxanim_props" ][ "wht_shutters02" ] = %fxanim_zom_nuketown_shutters02_anim;
|
||||
level.scr_anim[ "fxanim_props" ][ "win_curtains" ] = %fxanim_zom_curtains_anim;
|
||||
level.scr_anim[ "fxanim_props" ][ "cabinets_brwn" ] = %fxanim_zom_nuketown_cabinets_brwn_anim;
|
||||
level.scr_anim[ "fxanim_props" ][ "cabinets_brwn02" ] = %fxanim_zom_nuketown_cabinets_brwn02_anim;
|
||||
level.scr_anim[ "fxanim_props" ][ "cabinets_red" ] = %fxanim_zom_nuketown_cabinets_red_anim;
|
||||
level.scr_anim[ "fxanim_props" ][ "porch" ] = %fxanim_zom_nuketown_porch_anim;
|
||||
level.scr_anim[ "fxanim_props" ][ "roofvent" ] = %fxanim_gp_roofvent_small_wobble_anim;
|
||||
level.nuked_fxanims = [];
|
||||
level.nuked_fxanims[ "fxanim_mp_dustdevil_anim" ] = %fxanim_mp_dustdevil_anim;
|
||||
}
|
||||
|
||||
main()
|
||||
{
|
||||
precache_util_fx();
|
||||
precache_createfx_fx();
|
||||
precache_scripted_fx();
|
||||
precache_fxanim_props();
|
||||
maps/mp/createfx/zm_nuked_fx::main();
|
||||
setdvar( "enable_global_wind", 1 );
|
||||
setdvar( "wind_global_vector", "1 0 0" );
|
||||
setdvar( "wind_global_low_altitude", 0 );
|
||||
setdvar( "wind_global_hi_altitude", 0 );
|
||||
setdvar( "wind_global_low_strength_percent", 0 );
|
||||
}
|
13
zm_nuked_patch/maps/mp/zm_nuked_gamemodes.gsc
Normal file
13
zm_nuked_patch/maps/mp/zm_nuked_gamemodes.gsc
Normal file
@ -0,0 +1,13 @@
|
||||
#include maps/mp/zm_nuked_standard;
|
||||
#include maps/mp/zm_nuked;
|
||||
#include maps/mp/gametypes_zm/_zm_gametype;
|
||||
#include maps/mp/zombies/_zm_game_module;
|
||||
#include maps/mp/zombies/_zm_utility;
|
||||
#include maps/mp/_utility;
|
||||
#include common_scripts/utility;
|
||||
|
||||
init()
|
||||
{
|
||||
add_map_gamemode( "zstandard", ::maps/mp/zm_nuked::zstandard_preinit, undefined, undefined );
|
||||
add_map_location_gamemode( "zstandard", "nuked", ::maps/mp/zm_nuked_standard::precache, ::maps/mp/zm_nuked_standard::main );
|
||||
}
|
407
zm_nuked_patch/maps/mp/zm_nuked_perks.gsc
Normal file
407
zm_nuked_patch/maps/mp/zm_nuked_perks.gsc
Normal file
@ -0,0 +1,407 @@
|
||||
#include maps/mp/zombies/_zm_game_module;
|
||||
#include maps/mp/animscripts/zm_death;
|
||||
#include maps/mp/zombies/_zm_perks;
|
||||
#include maps/mp/zombies/_zm_weapons;
|
||||
#include maps/mp/zombies/_zm_utility;
|
||||
#include maps/mp/_utility;
|
||||
#include common_scripts/utility;
|
||||
|
||||
init_nuked_perks()
|
||||
{
|
||||
level.perk_arrival_vehicle = getent( "perk_arrival_vehicle", "targetname" );
|
||||
level.perk_arrival_vehicle setmodel( "tag_origin" );
|
||||
flag_init( "perk_vehicle_bringing_in_perk" );
|
||||
structs = getstructarray( "zm_perk_machine", "targetname" );
|
||||
i = 0;
|
||||
while ( i < structs.size )
|
||||
{
|
||||
structs[ i ] structdelete();
|
||||
i++;
|
||||
}
|
||||
level.nuked_perks = [];
|
||||
level.nuked_perks[ 0 ] = spawnstruct();
|
||||
level.nuked_perks[ 0 ].model = "zombie_vending_revive";
|
||||
level.nuked_perks[ 0 ].script_noteworthy = "specialty_quickrevive";
|
||||
level.nuked_perks[ 0 ].turn_on_notify = "revive_on";
|
||||
level.nuked_perks[ 1 ] = spawnstruct();
|
||||
level.nuked_perks[ 1 ].model = "zombie_vending_sleight";
|
||||
level.nuked_perks[ 1 ].script_noteworthy = "specialty_fastreload";
|
||||
level.nuked_perks[ 1 ].turn_on_notify = "sleight_on";
|
||||
level.nuked_perks[ 2 ] = spawnstruct();
|
||||
level.nuked_perks[ 2 ].model = "zombie_vending_doubletap2";
|
||||
level.nuked_perks[ 2 ].script_noteworthy = "specialty_rof";
|
||||
level.nuked_perks[ 2 ].turn_on_notify = "doubletap_on";
|
||||
level.nuked_perks[ 3 ] = spawnstruct();
|
||||
level.nuked_perks[ 3 ].model = "zombie_vending_jugg";
|
||||
level.nuked_perks[ 3 ].script_noteworthy = "specialty_armorvest";
|
||||
level.nuked_perks[ 3 ].turn_on_notify = "juggernog_on";
|
||||
level.nuked_perks[ 4 ] = spawnstruct();
|
||||
level.nuked_perks[ 4 ].model = "p6_anim_zm_buildable_pap";
|
||||
level.nuked_perks[ 4 ].script_noteworthy = "specialty_weapupgrade";
|
||||
level.nuked_perks[ 4 ].turn_on_notify = "Pack_A_Punch_on";
|
||||
players = getnumexpectedplayers();
|
||||
if ( players == 1 )
|
||||
{
|
||||
level.override_perk_targetname = "zm_perk_machine_override";
|
||||
revive_perk_structs = getstructarray( "solo_revive", "targetname" );
|
||||
i = 0;
|
||||
while ( i < revive_perk_structs.size )
|
||||
{
|
||||
random_revive_structs[ i ] = getstruct( revive_perk_structs[ i ].target, "targetname" );
|
||||
random_revive_structs[ i ].script_int = revive_perk_structs[ i ].script_int;
|
||||
i++;
|
||||
}
|
||||
level.random_revive_structs = array_randomize( random_revive_structs );
|
||||
level.random_revive_structs[ 0 ].targetname = "zm_perk_machine_override";
|
||||
level.random_revive_structs[ 0 ].model = level.nuked_perks[ 0 ].model;
|
||||
level.random_revive_structs[ 0 ].blocker_model = getent( level.random_revive_structs[ 0 ].target, "targetname" );
|
||||
level.random_revive_structs[ 0 ].script_noteworthy = level.nuked_perks[ 0 ].script_noteworthy;
|
||||
level.random_revive_structs[ 0 ].turn_on_notify = level.nuked_perks[ 0 ].turn_on_notify;
|
||||
if ( !isDefined( level.struct_class_names[ "targetname" ][ "zm_perk_machine_override" ] ) )
|
||||
{
|
||||
level.struct_class_names[ "targetname" ][ "zm_perk_machine_override" ] = [];
|
||||
}
|
||||
level.struct_class_names[ "targetname" ][ "zm_perk_machine_override" ][ level.struct_class_names[ "targetname" ][ "zm_perk_machine_override" ].size ] = level.random_revive_structs[ 0 ];
|
||||
/#
|
||||
level.random_revive_structs[ 0 ] thread draw_debug_location();
|
||||
#/
|
||||
random_perk_structs = [];
|
||||
perk_structs = getstructarray( "zm_random_machine", "script_noteworthy" );
|
||||
perk_structs = array_exclude( perk_structs, revive_perk_structs );
|
||||
i = 0;
|
||||
while ( i < perk_structs.size )
|
||||
{
|
||||
random_perk_structs[ i ] = getstruct( perk_structs[ i ].target, "targetname" );
|
||||
random_perk_structs[ i ].script_int = perk_structs[ i ].script_int;
|
||||
i++;
|
||||
}
|
||||
level.random_perk_structs = array_randomize( random_perk_structs );
|
||||
i = 1;
|
||||
while ( i < 5 )
|
||||
{
|
||||
level.random_perk_structs[ i ].targetname = "zm_perk_machine_override";
|
||||
level.random_perk_structs[ i ].model = level.nuked_perks[ i ].model;
|
||||
level.random_perk_structs[ i ].blocker_model = getent( level.random_perk_structs[ i ].target, "targetname" );
|
||||
level.random_perk_structs[ i ].script_noteworthy = level.nuked_perks[ i ].script_noteworthy;
|
||||
level.random_perk_structs[ i ].turn_on_notify = level.nuked_perks[ i ].turn_on_notify;
|
||||
if ( !isDefined( level.struct_class_names[ "targetname" ][ "zm_perk_machine_override" ] ) )
|
||||
{
|
||||
level.struct_class_names[ "targetname" ][ "zm_perk_machine_override" ] = [];
|
||||
}
|
||||
level.struct_class_names[ "targetname" ][ "zm_perk_machine_override" ][ level.struct_class_names[ "targetname" ][ "zm_perk_machine_override" ].size ] = level.random_perk_structs[ i ];
|
||||
/#
|
||||
level.random_perk_structs[ i ] thread draw_debug_location();
|
||||
#/
|
||||
i++;
|
||||
}
|
||||
}
|
||||
else level.override_perk_targetname = "zm_perk_machine_override";
|
||||
random_perk_structs = [];
|
||||
perk_structs = getstructarray( "zm_random_machine", "script_noteworthy" );
|
||||
i = 0;
|
||||
while ( i < perk_structs.size )
|
||||
{
|
||||
random_perk_structs[ i ] = getstruct( perk_structs[ i ].target, "targetname" );
|
||||
random_perk_structs[ i ].script_int = perk_structs[ i ].script_int;
|
||||
i++;
|
||||
}
|
||||
level.random_perk_structs = array_randomize( random_perk_structs );
|
||||
i = 0;
|
||||
while ( i < 5 )
|
||||
{
|
||||
level.random_perk_structs[ i ].targetname = "zm_perk_machine_override";
|
||||
level.random_perk_structs[ i ].model = level.nuked_perks[ i ].model;
|
||||
level.random_perk_structs[ i ].blocker_model = getent( level.random_perk_structs[ i ].target, "targetname" );
|
||||
level.random_perk_structs[ i ].script_noteworthy = level.nuked_perks[ i ].script_noteworthy;
|
||||
level.random_perk_structs[ i ].turn_on_notify = level.nuked_perks[ i ].turn_on_notify;
|
||||
if ( !isDefined( level.struct_class_names[ "targetname" ][ "zm_perk_machine_override" ] ) )
|
||||
{
|
||||
level.struct_class_names[ "targetname" ][ "zm_perk_machine_override" ] = [];
|
||||
}
|
||||
level.struct_class_names[ "targetname" ][ "zm_perk_machine_override" ][ level.struct_class_names[ "targetname" ][ "zm_perk_machine_override" ].size ] = level.random_perk_structs[ i ];
|
||||
/#
|
||||
level.random_perk_structs[ i ] thread draw_debug_location();
|
||||
#/
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
draw_debug_location()
|
||||
{
|
||||
/#
|
||||
#/
|
||||
}
|
||||
|
||||
wait_for_round_range( start_round, end_round )
|
||||
{
|
||||
round_to_spawn = randomintrange( start_round, end_round );
|
||||
while ( level.round_number < round_to_spawn )
|
||||
{
|
||||
wait 1;
|
||||
}
|
||||
}
|
||||
|
||||
bring_random_perk( machines, machine_triggers )
|
||||
{
|
||||
count = machines.size;
|
||||
if ( count <= 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
index = randomintrange( 0, count );
|
||||
bring_perk( machines[ index ], machine_triggers[ index ] );
|
||||
arrayremoveindex( machines, index );
|
||||
arrayremoveindex( machine_triggers, index );
|
||||
}
|
||||
|
||||
bring_perk( machine, trigger )
|
||||
{
|
||||
players = get_players();
|
||||
is_doubletap = 0;
|
||||
is_sleight = 0;
|
||||
is_revive = 0;
|
||||
is_jugger = 0;
|
||||
flag_waitopen( "perk_vehicle_bringing_in_perk" );
|
||||
playsoundatposition( "zmb_perks_incoming_quad_front", ( 0, -1, 0 ) );
|
||||
playsoundatposition( "zmb_perks_incoming_alarm", ( -2198, 486, 327 ) );
|
||||
machine setclientfield( "clientfield_perk_intro_fx", 1 );
|
||||
machine.fx = spawn( "script_model", machine.origin );
|
||||
machine.fx playloopsound( "zmb_perks_incoming_loop", 6 );
|
||||
machine.fx thread perk_incoming_sound();
|
||||
machine.fx.angles = machine.angles;
|
||||
machine.fx setmodel( "tag_origin" );
|
||||
machine.fx linkto( machine );
|
||||
machine linkto( level.perk_arrival_vehicle, "tag_origin", ( 0, -1, 0 ), ( 0, -1, 0 ) );
|
||||
start_node = getvehiclenode( "perk_arrival_path_" + machine.script_int, "targetname" );
|
||||
/#
|
||||
level.perk_arrival_vehicle thread draw_debug_location();
|
||||
#/
|
||||
level.perk_arrival_vehicle perk_follow_path( start_node );
|
||||
machine unlink();
|
||||
offset = ( 0, -1, 0 );
|
||||
if ( issubstr( machine.targetname, "doubletap" ) )
|
||||
{
|
||||
forward_dir = anglesToForward( machine.original_angles + vectorScale( ( 0, -1, 0 ), 90 ) );
|
||||
offset = vectorScale( forward_dir * -1, 20 );
|
||||
is_doubletap = 1;
|
||||
}
|
||||
else if ( issubstr( machine.targetname, "sleight" ) )
|
||||
{
|
||||
forward_dir = anglesToForward( machine.original_angles + vectorScale( ( 0, -1, 0 ), 90 ) );
|
||||
offset = vectorScale( forward_dir * -1, 5 );
|
||||
is_sleight = 1;
|
||||
}
|
||||
else if ( issubstr( machine.targetname, "revive" ) )
|
||||
{
|
||||
forward_dir = anglesToForward( machine.original_angles + vectorScale( ( 0, -1, 0 ), 90 ) );
|
||||
offset = vectorScale( forward_dir * -1, 10 );
|
||||
trigger.blocker_model hide();
|
||||
is_revive = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( issubstr( machine.targetname, "jugger" ) )
|
||||
{
|
||||
forward_dir = anglesToForward( machine.original_angles + vectorScale( ( 0, -1, 0 ), 90 ) );
|
||||
offset = vectorScale( forward_dir * -1, 10 );
|
||||
is_jugger = 1;
|
||||
}
|
||||
}
|
||||
if ( !is_revive )
|
||||
{
|
||||
trigger.blocker_model delete();
|
||||
}
|
||||
machine.original_pos += ( offset[ 0 ], offset[ 1 ], 0 );
|
||||
machine.origin = machine.original_pos;
|
||||
machine.angles = machine.original_angles;
|
||||
if ( is_revive )
|
||||
{
|
||||
level.quick_revive_final_pos = machine.origin;
|
||||
level.quick_revive_final_angles = machine.angles;
|
||||
}
|
||||
machine.fx stoploopsound( 0,5 );
|
||||
machine setclientfield( "clientfield_perk_intro_fx", 0 );
|
||||
playsoundatposition( "zmb_perks_incoming_land", machine.origin );
|
||||
trigger trigger_on();
|
||||
machine thread bring_perk_landing_damage();
|
||||
machine.fx unlink();
|
||||
machine.fx delete();
|
||||
machine notify( machine.turn_on_notify );
|
||||
level notify( machine.turn_on_notify );
|
||||
machine vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0,3, 0,4, 3 );
|
||||
machine playsound( "zmb_perks_power_on" );
|
||||
machine maps/mp/zombies/_zm_perks::perk_fx( undefined, 1 );
|
||||
if ( is_revive )
|
||||
{
|
||||
level.revive_machine_spawned = 1;
|
||||
machine thread maps/mp/zombies/_zm_perks::perk_fx( "revive_light" );
|
||||
}
|
||||
else if ( is_jugger )
|
||||
{
|
||||
machine thread maps/mp/zombies/_zm_perks::perk_fx( "jugger_light" );
|
||||
}
|
||||
else if ( is_doubletap )
|
||||
{
|
||||
machine thread maps/mp/zombies/_zm_perks::perk_fx( "doubletap_light" );
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( is_sleight )
|
||||
{
|
||||
machine thread maps/mp/zombies/_zm_perks::perk_fx( "sleight_light" );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
perk_incoming_sound()
|
||||
{
|
||||
self endon( "death" );
|
||||
wait 10;
|
||||
self playsound( "zmb_perks_incoming" );
|
||||
}
|
||||
|
||||
bring_perk_landing_damage()
|
||||
{
|
||||
player_prone_damage_radius = 300;
|
||||
earthquake( 0,7, 2,5, self.origin, 1000 );
|
||||
radiusdamage( self.origin, player_prone_damage_radius, 10, 5, undefined, "MOD_EXPLOSIVE" );
|
||||
exploder( 500 + self.script_int );
|
||||
exploder( 511 );
|
||||
players = get_players();
|
||||
i = 0;
|
||||
while ( i < players.size )
|
||||
{
|
||||
if ( distancesquared( players[ i ].origin, self.origin ) <= ( player_prone_damage_radius * player_prone_damage_radius ) )
|
||||
{
|
||||
players[ i ] setstance( "prone" );
|
||||
players[ i ] shellshock( "default", 1,5 );
|
||||
radiusdamage( players[ i ].origin, player_prone_damage_radius / 2, 10, 5, undefined, "MOD_EXPLOSIVE" );
|
||||
}
|
||||
i++;
|
||||
}
|
||||
zombies = getaiarray( level.zombie_team );
|
||||
i = 0;
|
||||
while ( i < zombies.size )
|
||||
{
|
||||
zombie = zombies[ i ];
|
||||
if ( !isDefined( zombie ) || !isalive( zombie ) )
|
||||
{
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( distancesquared( zombie.origin, self.origin ) > 250000 )
|
||||
{
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
zombie thread perk_machine_knockdown_zombie( self.origin );
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
perk_machine_knockdown_zombie( origin )
|
||||
{
|
||||
self.a.gib_ref = random( array( "guts", "right_arm", "left_arm" ) );
|
||||
self thread maps/mp/animscripts/zm_death::do_gib();
|
||||
level.zombie_total++;
|
||||
level.zombie_total_subtract++;
|
||||
self dodamage( self.health + 100, origin );
|
||||
}
|
||||
|
||||
perk_follow_path( node )
|
||||
{
|
||||
flag_set( "perk_vehicle_bringing_in_perk" );
|
||||
self notify( "newpath" );
|
||||
if ( isDefined( node ) )
|
||||
{
|
||||
self.attachedpath = node;
|
||||
}
|
||||
pathstart = self.attachedpath;
|
||||
self.currentnode = self.attachedpath;
|
||||
if ( !isDefined( pathstart ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
self attachpath( pathstart );
|
||||
self startpath();
|
||||
self waittill( "reached_end_node" );
|
||||
flag_clear( "perk_vehicle_bringing_in_perk" );
|
||||
}
|
||||
|
||||
turn_perks_on()
|
||||
{
|
||||
wait 3;
|
||||
maps/mp/zombies/_zm_game_module::turn_power_on_and_open_doors();
|
||||
}
|
||||
|
||||
perks_from_the_sky()
|
||||
{
|
||||
level thread turn_perks_on();
|
||||
top_height = 8000;
|
||||
machines = [];
|
||||
machine_triggers = [];
|
||||
machines[ 0 ] = getent( "vending_revive", "targetname" );
|
||||
if ( !isDefined( machines[ 0 ] ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
machine_triggers[ 0 ] = getent( "vending_revive", "target" );
|
||||
move_perk( machines[ 0 ], top_height, 5, 0,001 );
|
||||
machine_triggers[ 0 ] trigger_off();
|
||||
machines[ 1 ] = getent( "vending_doubletap", "targetname" );
|
||||
machine_triggers[ 1 ] = getent( "vending_doubletap", "target" );
|
||||
move_perk( machines[ 1 ], top_height, 5, 0,001 );
|
||||
machine_triggers[ 1 ] trigger_off();
|
||||
machines[ 2 ] = getent( "vending_sleight", "targetname" );
|
||||
machine_triggers[ 2 ] = getent( "vending_sleight", "target" );
|
||||
move_perk( machines[ 2 ], top_height, 5, 0,001 );
|
||||
machine_triggers[ 2 ] trigger_off();
|
||||
machines[ 3 ] = getent( "vending_jugg", "targetname" );
|
||||
machine_triggers[ 3 ] = getent( "vending_jugg", "target" );
|
||||
move_perk( machines[ 3 ], top_height, 5, 0,001 );
|
||||
machine_triggers[ 3 ] trigger_off();
|
||||
machine_triggers[ 4 ] = getent( "specialty_weapupgrade", "script_noteworthy" );
|
||||
machines[ 4 ] = getent( machine_triggers[ 4 ].target, "targetname" );
|
||||
move_perk( machines[ 4 ], top_height, 5, 0,001 );
|
||||
machine_triggers[ 4 ] trigger_off();
|
||||
flag_wait( "initial_blackscreen_passed" );
|
||||
wait randomfloatrange( 5, 15 );
|
||||
players = get_players();
|
||||
if ( players.size == 1 )
|
||||
{
|
||||
wait 4;
|
||||
index = 0;
|
||||
bring_perk( machines[ index ], machine_triggers[ index ] );
|
||||
arrayremoveindex( machines, index );
|
||||
arrayremoveindex( machine_triggers, index );
|
||||
}
|
||||
wait_for_round_range( 3, 5 );
|
||||
wait randomintrange( 30, 60 );
|
||||
bring_random_perk( machines, machine_triggers );
|
||||
wait_for_round_range( 6, 9 );
|
||||
wait randomintrange( 30, 60 );
|
||||
bring_random_perk( machines, machine_triggers );
|
||||
wait_for_round_range( 10, 14 );
|
||||
wait randomintrange( 60, 120 );
|
||||
bring_random_perk( machines, machine_triggers );
|
||||
wait_for_round_range( 15, 19 );
|
||||
wait randomintrange( 60, 120 );
|
||||
bring_random_perk( machines, machine_triggers );
|
||||
wait_for_round_range( 20, 25 );
|
||||
wait randomintrange( 60, 120 );
|
||||
bring_random_perk( machines, machine_triggers );
|
||||
}
|
||||
|
||||
move_perk( ent, dist, time, accel )
|
||||
{
|
||||
ent.original_pos = ent.origin;
|
||||
ent.original_angles = ent.angles;
|
||||
pos = ( ent.origin[ 0 ], ent.origin[ 1 ], ent.origin[ 2 ] + dist );
|
||||
ent moveto( pos, time, accel, accel );
|
||||
}
|
49
zm_nuked_patch/maps/mp/zm_nuked_standard.gsc
Normal file
49
zm_nuked_patch/maps/mp/zm_nuked_standard.gsc
Normal file
@ -0,0 +1,49 @@
|
||||
#include maps/mp/zombies/_zm_magicbox;
|
||||
#include maps/mp/zombies/_zm_game_module;
|
||||
#include maps/mp/gametypes_zm/_zm_gametype;
|
||||
#include maps/mp/zombies/_zm_utility;
|
||||
#include common_scripts/utility;
|
||||
#include maps/mp/_utility;
|
||||
|
||||
precache()
|
||||
{
|
||||
}
|
||||
|
||||
main()
|
||||
{
|
||||
maps/mp/gametypes_zm/_zm_gametype::setup_standard_objects( "nuked" );
|
||||
maps/mp/zombies/_zm_game_module::set_current_game_module( level.game_module_standard_index );
|
||||
level.enemy_location_override_func = ::enemy_location_override;
|
||||
flag_wait( "initial_blackscreen_passed" );
|
||||
flag_set( "power_on" );
|
||||
nuked_treasure_chest_init();
|
||||
}
|
||||
|
||||
enemy_location_override( zombie, enemy )
|
||||
{
|
||||
location = enemy.origin;
|
||||
if ( is_true( self.reroute ) )
|
||||
{
|
||||
if ( isDefined( self.reroute_origin ) )
|
||||
{
|
||||
location = self.reroute_origin;
|
||||
}
|
||||
}
|
||||
return location;
|
||||
}
|
||||
|
||||
nuked_treasure_chest_init()
|
||||
{
|
||||
chest1 = getstruct( "start_chest1", "script_noteworthy" );
|
||||
chest2 = getstruct( "start_chest2", "script_noteworthy" );
|
||||
chest3 = getstruct( "culdesac_chest", "script_noteworthy" );
|
||||
chest4 = getstruct( "oh2_chest", "script_noteworthy" );
|
||||
chest5 = getstruct( "oh1_chest", "script_noteworthy" );
|
||||
level.chests = [];
|
||||
level.chests[ level.chests.size ] = chest1;
|
||||
level.chests[ level.chests.size ] = chest2;
|
||||
level.chests[ level.chests.size ] = chest3;
|
||||
level.chests[ level.chests.size ] = chest4;
|
||||
level.chests[ level.chests.size ] = chest5;
|
||||
maps/mp/zombies/_zm_magicbox::treasure_chest_init( "start_chest" );
|
||||
}
|
627
zm_nuked_patch/maps/mp/zombies/_zm_melee_weapon.gsc
Normal file
627
zm_nuked_patch/maps/mp/zombies/_zm_melee_weapon.gsc
Normal file
@ -0,0 +1,627 @@
|
||||
#include maps/mp/zombies/_zm_audio;
|
||||
#include maps/mp/zombies/_zm_score;
|
||||
#include maps/mp/zombies/_zm_pers_upgrades_functions;
|
||||
#include maps/mp/zombies/_zm_laststand;
|
||||
#include maps/mp/zombies/_zm_weapons;
|
||||
#include maps/mp/zombies/_zm_utility;
|
||||
#include maps/mp/_utility;
|
||||
#include common_scripts/utility;
|
||||
|
||||
init( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn )
|
||||
{
|
||||
precacheitem( weapon_name );
|
||||
precacheitem( flourish_weapon_name );
|
||||
add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn );
|
||||
melee_weapon_triggers = getentarray( wallbuy_targetname, "targetname" );
|
||||
i = 0;
|
||||
while ( i < melee_weapon_triggers.size )
|
||||
{
|
||||
knife_model = getent( melee_weapon_triggers[ i ].target, "targetname" );
|
||||
if ( isDefined( knife_model ) )
|
||||
{
|
||||
knife_model hide();
|
||||
}
|
||||
melee_weapon_triggers[ i ] thread melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name );
|
||||
if ( isDefined( level.monolingustic_prompt_format ) && !level.monolingustic_prompt_format )
|
||||
{
|
||||
melee_weapon_triggers[ i ] sethintstring( hint_string, cost );
|
||||
if ( getDvarInt( #"1F0A2129" ) && isDefined( level.disable_melee_wallbuy_icons ) && !level.disable_melee_wallbuy_icons )
|
||||
{
|
||||
cursor_hint = "HINT_WEAPON";
|
||||
cursor_hint_weapon = weapon_name;
|
||||
melee_weapon_triggers[ i ] setcursorhint( cursor_hint, cursor_hint_weapon );
|
||||
}
|
||||
else
|
||||
{
|
||||
melee_weapon_triggers[ i ] setcursorhint( "HINT_NOICON" );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
weapon_display = get_weapon_display_name( weapon_name );
|
||||
hint_string = &"ZOMBIE_WEAPONCOSTONLY";
|
||||
melee_weapon_triggers[ i ] sethintstring( hint_string, weapon_display, cost );
|
||||
if ( getDvarInt( #"1F0A2129" ) && isDefined( level.disable_melee_wallbuy_icons ) && !level.disable_melee_wallbuy_icons )
|
||||
{
|
||||
cursor_hint = "HINT_WEAPON";
|
||||
cursor_hint_weapon = weapon_name;
|
||||
melee_weapon_triggers[ i ] setcursorhint( cursor_hint, cursor_hint_weapon );
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
melee_weapon_triggers[ i ] setcursorhint( "HINT_NOICON" );
|
||||
}
|
||||
}
|
||||
melee_weapon_triggers[ i ] usetriggerrequirelookat();
|
||||
i++;
|
||||
}
|
||||
melee_weapon_structs = getstructarray( wallbuy_targetname, "targetname" );
|
||||
i = 0;
|
||||
while ( i < melee_weapon_structs.size )
|
||||
{
|
||||
prepare_stub( melee_weapon_structs[ i ].trigger_stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn );
|
||||
i++;
|
||||
}
|
||||
register_melee_weapon_for_level( weapon_name );
|
||||
if ( !isDefined( level.ballistic_weapon_name ) )
|
||||
{
|
||||
level.ballistic_weapon_name = [];
|
||||
}
|
||||
level.ballistic_weapon_name[ weapon_name ] = ballistic_weapon_name;
|
||||
if ( !isDefined( level.ballistic_upgraded_weapon_name ) )
|
||||
{
|
||||
level.ballistic_upgraded_weapon_name = [];
|
||||
}
|
||||
level.ballistic_upgraded_weapon_name[ weapon_name ] = ballistic_upgraded_weapon_name;
|
||||
/#
|
||||
if ( !isDefined( level.zombie_weapons[ weapon_name ] ) )
|
||||
{
|
||||
if ( isDefined( level.devgui_add_weapon ) )
|
||||
{
|
||||
[[ level.devgui_add_weapon ]]( weapon_name, "", weapon_name, cost );
|
||||
#/
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
prepare_stub( stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn )
|
||||
{
|
||||
if ( isDefined( stub ) )
|
||||
{
|
||||
if ( isDefined( level.monolingustic_prompt_format ) && !level.monolingustic_prompt_format )
|
||||
{
|
||||
stub.hint_string = hint_string;
|
||||
if ( getDvarInt( #"1F0A2129" ) && isDefined( level.disable_melee_wallbuy_icons ) && !level.disable_melee_wallbuy_icons )
|
||||
{
|
||||
stub.cursor_hint = "HINT_WEAPON";
|
||||
stub.cursor_hint_weapon = weapon_name;
|
||||
}
|
||||
else
|
||||
{
|
||||
stub.cursor_hint = "HINT_NOICON";
|
||||
stub.cursor_hint_weapon = undefined;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
stub.hint_parm1 = get_weapon_display_name( weapon_name );
|
||||
stub.hint_parm2 = cost;
|
||||
stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY";
|
||||
if ( getDvarInt( #"1F0A2129" ) && isDefined( level.disable_melee_wallbuy_icons ) && !level.disable_melee_wallbuy_icons )
|
||||
{
|
||||
stub.cursor_hint = "HINT_WEAPON";
|
||||
stub.cursor_hint_weapon = weapon_name;
|
||||
}
|
||||
else
|
||||
{
|
||||
stub.cursor_hint = "HINT_NOICON";
|
||||
stub.cursor_hint_weapon = undefined;
|
||||
}
|
||||
}
|
||||
stub.cost = cost;
|
||||
stub.weapon_name = weapon_name;
|
||||
stub.vo_dialog_id = vo_dialog_id;
|
||||
stub.flourish_weapon_name = flourish_weapon_name;
|
||||
stub.ballistic_weapon_name = ballistic_weapon_name;
|
||||
stub.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name;
|
||||
stub.trigger_func = ::melee_weapon_think;
|
||||
stub.flourish_fn = flourish_fn;
|
||||
}
|
||||
}
|
||||
|
||||
add_stub( stub, weapon_name )
|
||||
{
|
||||
melee_weapon = undefined;
|
||||
i = 0;
|
||||
while ( i < level._melee_weapons.size )
|
||||
{
|
||||
if ( level._melee_weapons[ i ].weapon_name == weapon_name )
|
||||
{
|
||||
melee_weapon = level._melee_weapons[ i ];
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
i++;
|
||||
}
|
||||
}
|
||||
if ( isDefined( stub ) && isDefined( melee_weapon ) )
|
||||
{
|
||||
prepare_stub( stub, melee_weapon.weapon_name, melee_weapon.flourish_weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.cost, melee_weapon.wallbuy_targetname, melee_weapon.hint_string, melee_weapon.vo_dialog_id, melee_weapon.flourish_fn );
|
||||
}
|
||||
}
|
||||
|
||||
give_melee_weapon_by_name( weapon_name )
|
||||
{
|
||||
melee_weapon = undefined;
|
||||
i = 0;
|
||||
while ( i < level._melee_weapons.size )
|
||||
{
|
||||
if ( level._melee_weapons[ i ].weapon_name == weapon_name )
|
||||
{
|
||||
melee_weapon = level._melee_weapons[ i ];
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
i++;
|
||||
}
|
||||
}
|
||||
if ( isDefined( melee_weapon ) )
|
||||
{
|
||||
self thread give_melee_weapon( melee_weapon.vo_dialog_id, melee_weapon.flourish_weapon_name, melee_weapon.weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.flourish_fn, undefined );
|
||||
}
|
||||
}
|
||||
|
||||
add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn )
|
||||
{
|
||||
melee_weapon = spawnstruct();
|
||||
melee_weapon.weapon_name = weapon_name;
|
||||
melee_weapon.flourish_weapon_name = flourish_weapon_name;
|
||||
melee_weapon.ballistic_weapon_name = ballistic_weapon_name;
|
||||
melee_weapon.ballistic_upgraded_weapon_name = ballistic_upgraded_weapon_name;
|
||||
melee_weapon.cost = cost;
|
||||
melee_weapon.wallbuy_targetname = wallbuy_targetname;
|
||||
melee_weapon.hint_string = hint_string;
|
||||
melee_weapon.vo_dialog_id = vo_dialog_id;
|
||||
melee_weapon.flourish_fn = flourish_fn;
|
||||
if ( !isDefined( level._melee_weapons ) )
|
||||
{
|
||||
level._melee_weapons = [];
|
||||
}
|
||||
level._melee_weapons[ level._melee_weapons.size ] = melee_weapon;
|
||||
}
|
||||
|
||||
player_can_see_weapon_prompt( weapon_name )
|
||||
{
|
||||
if ( is_true( level._allow_melee_weapon_switching ) )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
if ( isDefined( self get_player_melee_weapon() ) && self hasweapon( self get_player_melee_weapon() ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
spectator_respawn_all()
|
||||
{
|
||||
i = 0;
|
||||
while ( i < level._melee_weapons.size )
|
||||
{
|
||||
self spectator_respawn( level._melee_weapons[ i ].wallbuy_targetname, level._melee_weapons[ i ].weapon_name );
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
spectator_respawn( wallbuy_targetname, weapon_name )
|
||||
{
|
||||
melee_triggers = getentarray( wallbuy_targetname, "targetname" );
|
||||
players = get_players();
|
||||
i = 0;
|
||||
while ( i < melee_triggers.size )
|
||||
{
|
||||
melee_triggers[ i ] setvisibletoall();
|
||||
while ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching )
|
||||
{
|
||||
j = 0;
|
||||
while ( j < players.size )
|
||||
{
|
||||
if ( !players[ j ] player_can_see_weapon_prompt( weapon_name ) )
|
||||
{
|
||||
melee_triggers[ i ] setinvisibletoplayer( players[ j ] );
|
||||
}
|
||||
j++;
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
trigger_hide_all()
|
||||
{
|
||||
i = 0;
|
||||
while ( i < level._melee_weapons.size )
|
||||
{
|
||||
self trigger_hide( level._melee_weapons[ i ].wallbuy_targetname );
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
trigger_hide( wallbuy_targetname )
|
||||
{
|
||||
melee_triggers = getentarray( wallbuy_targetname, "targetname" );
|
||||
i = 0;
|
||||
while ( i < melee_triggers.size )
|
||||
{
|
||||
melee_triggers[ i ] setinvisibletoplayer( self );
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
has_any_ballistic_knife()
|
||||
{
|
||||
if ( self hasweapon( "knife_ballistic_zm" ) )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
if ( self hasweapon( "knife_ballistic_upgraded_zm" ) )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
i = 0;
|
||||
while ( i < level._melee_weapons.size )
|
||||
{
|
||||
if ( self hasweapon( level._melee_weapons[ i ].ballistic_weapon_name ) )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
if ( self hasweapon( level._melee_weapons[ i ].ballistic_upgraded_weapon_name ) )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
has_upgraded_ballistic_knife()
|
||||
{
|
||||
if ( self hasweapon( "knife_ballistic_upgraded_zm" ) )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
i = 0;
|
||||
while ( i < level._melee_weapons.size )
|
||||
{
|
||||
if ( self hasweapon( level._melee_weapons[ i ].ballistic_upgraded_weapon_name ) )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
give_ballistic_knife( weapon_string, upgraded )
|
||||
{
|
||||
current_melee_weapon = self get_player_melee_weapon();
|
||||
if ( isDefined( current_melee_weapon ) )
|
||||
{
|
||||
if ( upgraded && isDefined( level.ballistic_upgraded_weapon_name ) && isDefined( level.ballistic_upgraded_weapon_name[ current_melee_weapon ] ) )
|
||||
{
|
||||
weapon_string = level.ballistic_upgraded_weapon_name[ current_melee_weapon ];
|
||||
}
|
||||
if ( !upgraded && isDefined( level.ballistic_weapon_name ) && isDefined( level.ballistic_weapon_name[ current_melee_weapon ] ) )
|
||||
{
|
||||
weapon_string = level.ballistic_weapon_name[ current_melee_weapon ];
|
||||
}
|
||||
}
|
||||
return weapon_string;
|
||||
}
|
||||
|
||||
change_melee_weapon( weapon_name, current_weapon )
|
||||
{
|
||||
current_melee_weapon = self get_player_melee_weapon();
|
||||
if ( isDefined( current_melee_weapon ) && current_melee_weapon != weapon_name )
|
||||
{
|
||||
self takeweapon( current_melee_weapon );
|
||||
unacquire_weapon_toggle( current_melee_weapon );
|
||||
}
|
||||
self set_player_melee_weapon( weapon_name );
|
||||
had_ballistic = 0;
|
||||
had_ballistic_upgraded = 0;
|
||||
ballistic_was_primary = 0;
|
||||
primaryweapons = self getweaponslistprimaries();
|
||||
i = 0;
|
||||
while ( i < primaryweapons.size )
|
||||
{
|
||||
primary_weapon = primaryweapons[ i ];
|
||||
if ( issubstr( primary_weapon, "knife_ballistic_" ) )
|
||||
{
|
||||
had_ballistic = 1;
|
||||
if ( primary_weapon == current_weapon )
|
||||
{
|
||||
ballistic_was_primary = 1;
|
||||
}
|
||||
self notify( "zmb_lost_knife" );
|
||||
self takeweapon( primary_weapon );
|
||||
unacquire_weapon_toggle( primary_weapon );
|
||||
if ( issubstr( primary_weapon, "upgraded" ) )
|
||||
{
|
||||
had_ballistic_upgraded = 1;
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
if ( had_ballistic )
|
||||
{
|
||||
if ( had_ballistic_upgraded )
|
||||
{
|
||||
new_ballistic = level.ballistic_upgraded_weapon_name[ weapon_name ];
|
||||
if ( ballistic_was_primary )
|
||||
{
|
||||
current_weapon = new_ballistic;
|
||||
}
|
||||
self giveweapon( new_ballistic, 0, self maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( new_ballistic ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
new_ballistic = level.ballistic_weapon_name[ weapon_name ];
|
||||
if ( ballistic_was_primary )
|
||||
{
|
||||
current_weapon = new_ballistic;
|
||||
}
|
||||
self giveweapon( new_ballistic, 0 );
|
||||
}
|
||||
}
|
||||
return current_weapon;
|
||||
}
|
||||
|
||||
melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name )
|
||||
{
|
||||
self.first_time_triggered = 0;
|
||||
while ( isDefined( self.stub ) )
|
||||
{
|
||||
self endon( "kill_trigger" );
|
||||
if ( isDefined( self.stub.first_time_triggered ) )
|
||||
{
|
||||
self.first_time_triggered = self.stub.first_time_triggered;
|
||||
}
|
||||
weapon_name = self.stub.weapon_name;
|
||||
cost = self.stub.cost;
|
||||
flourish_fn = self.stub.flourish_fn;
|
||||
vo_dialog_id = self.stub.vo_dialog_id;
|
||||
flourish_weapon_name = self.stub.flourish_weapon_name;
|
||||
ballistic_weapon_name = self.stub.ballistic_weapon_name;
|
||||
ballistic_upgraded_weapon_name = self.stub.ballistic_upgraded_weapon_name;
|
||||
players = getplayers();
|
||||
while ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching )
|
||||
{
|
||||
i = 0;
|
||||
while ( i < players.size )
|
||||
{
|
||||
if ( !players[ i ] player_can_see_weapon_prompt( weapon_name ) )
|
||||
{
|
||||
self setinvisibletoplayer( players[ i ] );
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
for ( ;; )
|
||||
{
|
||||
self waittill( "trigger", player );
|
||||
if ( !is_player_valid( player ) )
|
||||
{
|
||||
player thread ignore_triggers( 0,5 );
|
||||
continue;
|
||||
}
|
||||
else if ( player in_revive_trigger() )
|
||||
{
|
||||
wait 0,1;
|
||||
continue;
|
||||
}
|
||||
else if ( player isthrowinggrenade() )
|
||||
{
|
||||
wait 0,1;
|
||||
continue;
|
||||
}
|
||||
else if ( player.is_drinking > 0 )
|
||||
{
|
||||
wait 0,1;
|
||||
continue;
|
||||
}
|
||||
else if ( player hasweapon( weapon_name ) || player has_powerup_weapon() )
|
||||
{
|
||||
wait 0,1;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( player isswitchingweapons() )
|
||||
{
|
||||
wait 0,1;
|
||||
break;
|
||||
}
|
||||
else current_weapon = player getcurrentweapon();
|
||||
if ( !is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) && player has_powerup_weapon() )
|
||||
{
|
||||
wait 0,1;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( player.intermission ) && player.intermission )
|
||||
{
|
||||
wait 0,1;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
player_has_weapon = player hasweapon( weapon_name );
|
||||
if ( !player_has_weapon )
|
||||
{
|
||||
cost = self.stub.cost;
|
||||
if ( player maps/mp/zombies/_zm_pers_upgrades_functions::is_pers_double_points_active() )
|
||||
{
|
||||
cost = int( cost / 2 );
|
||||
}
|
||||
if ( player.score >= cost )
|
||||
{
|
||||
if ( self.first_time_triggered == 0 )
|
||||
{
|
||||
model = getent( self.target, "targetname" );
|
||||
if ( isDefined( model ) )
|
||||
{
|
||||
model thread melee_weapon_show( player );
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( isDefined( self.clientfieldname ) )
|
||||
{
|
||||
level setclientfield( self.clientfieldname, 1 );
|
||||
}
|
||||
}
|
||||
self.first_time_triggered = 1;
|
||||
if ( isDefined( self.stub ) )
|
||||
{
|
||||
self.stub.first_time_triggered = 1;
|
||||
}
|
||||
}
|
||||
player maps/mp/zombies/_zm_score::minus_to_player_score( cost, 1 );
|
||||
bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, weapon_name, self.origin, "weapon" );
|
||||
player thread give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, self );
|
||||
}
|
||||
else
|
||||
{
|
||||
play_sound_on_ent( "no_purchase" );
|
||||
player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_weapon", undefined, 1 );
|
||||
}
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching )
|
||||
{
|
||||
self setinvisibletoplayer( player );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
melee_weapon_show( player )
|
||||
{
|
||||
player_angles = vectorToAngle( player.origin - self.origin );
|
||||
player_yaw = player_angles[ 1 ];
|
||||
weapon_yaw = self.angles[ 1 ];
|
||||
yaw_diff = angleClamp180( player_yaw - weapon_yaw );
|
||||
if ( yaw_diff > 0 )
|
||||
{
|
||||
yaw = weapon_yaw - 90;
|
||||
}
|
||||
else
|
||||
{
|
||||
yaw = weapon_yaw + 90;
|
||||
}
|
||||
self.og_origin = self.origin;
|
||||
self.origin += anglesToForward( ( 0, yaw, 0 ) ) * 8;
|
||||
wait 0,05;
|
||||
self show();
|
||||
play_sound_at_pos( "weapon_show", self.origin, self );
|
||||
time = 1;
|
||||
self moveto( self.og_origin, time );
|
||||
}
|
||||
|
||||
give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, trigger )
|
||||
{
|
||||
if ( isDefined( flourish_fn ) )
|
||||
{
|
||||
self thread [[ flourish_fn ]]();
|
||||
}
|
||||
gun = self do_melee_weapon_flourish_begin( flourish_weapon_name );
|
||||
self maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", vo_dialog_id );
|
||||
self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" );
|
||||
self do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name );
|
||||
if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( self.intermission ) && self.intermission )
|
||||
{
|
||||
return;
|
||||
}
|
||||
if ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching )
|
||||
{
|
||||
if ( isDefined( trigger ) )
|
||||
{
|
||||
trigger setinvisibletoplayer( self );
|
||||
}
|
||||
self trigger_hide_all();
|
||||
}
|
||||
}
|
||||
|
||||
do_melee_weapon_flourish_begin( flourish_weapon_name )
|
||||
{
|
||||
self increment_is_drinking();
|
||||
self disable_player_move_states( 1 );
|
||||
gun = self getcurrentweapon();
|
||||
weapon = flourish_weapon_name;
|
||||
self giveweapon( weapon );
|
||||
self switchtoweapon( weapon );
|
||||
return gun;
|
||||
}
|
||||
|
||||
do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name )
|
||||
{
|
||||
/#
|
||||
assert( !is_zombie_perk_bottle( gun ) );
|
||||
#/
|
||||
/#
|
||||
assert( gun != level.revive_tool );
|
||||
#/
|
||||
self enable_player_move_states();
|
||||
weapon = flourish_weapon_name;
|
||||
if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( self.intermission ) && self.intermission )
|
||||
{
|
||||
self takeweapon( weapon );
|
||||
self.lastactiveweapon = "none";
|
||||
return;
|
||||
}
|
||||
self takeweapon( weapon );
|
||||
self giveweapon( weapon_name );
|
||||
gun = change_melee_weapon( weapon_name, gun );
|
||||
if ( self hasweapon( "knife_zm" ) )
|
||||
{
|
||||
self takeweapon( "knife_zm" );
|
||||
}
|
||||
if ( self is_multiple_drinking() )
|
||||
{
|
||||
self decrement_is_drinking();
|
||||
return;
|
||||
}
|
||||
else if ( gun == "knife_zm" )
|
||||
{
|
||||
self switchtoweapon( weapon_name );
|
||||
self decrement_is_drinking();
|
||||
return;
|
||||
}
|
||||
else if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment( gun ) )
|
||||
{
|
||||
self switchtoweapon( gun );
|
||||
}
|
||||
else
|
||||
{
|
||||
primaryweapons = self getweaponslistprimaries();
|
||||
if ( isDefined( primaryweapons ) && primaryweapons.size > 0 )
|
||||
{
|
||||
self switchtoweapon( primaryweapons[ 0 ] );
|
||||
}
|
||||
}
|
||||
self waittill( "weapon_change_complete" );
|
||||
if ( !self maps/mp/zombies/_zm_laststand::player_is_in_laststand() && isDefined( self.intermission ) && !self.intermission )
|
||||
{
|
||||
self decrement_is_drinking();
|
||||
}
|
||||
}
|
308
zm_nuked_patch/maps/mp/zombies/_zm_weap_ballistic_knife.gsc
Normal file
308
zm_nuked_patch/maps/mp/zombies/_zm_weap_ballistic_knife.gsc
Normal file
@ -0,0 +1,308 @@
|
||||
#include maps/mp/zombies/_zm_stats;
|
||||
#include common_scripts/utility;
|
||||
#include maps/mp/_utility;
|
||||
|
||||
init()
|
||||
{
|
||||
if ( !isDefined( level.ballistic_knife_autorecover ) )
|
||||
{
|
||||
level.ballistic_knife_autorecover = 1;
|
||||
}
|
||||
if ( isDefined( level._uses_retrievable_ballisitic_knives ) && level._uses_retrievable_ballisitic_knives == 1 )
|
||||
{
|
||||
precachemodel( "t5_weapon_ballistic_knife_projectile" );
|
||||
precachemodel( "t5_weapon_ballistic_knife_blade_retrieve" );
|
||||
}
|
||||
}
|
||||
|
||||
on_spawn( watcher, player )
|
||||
{
|
||||
player endon( "death" );
|
||||
player endon( "disconnect" );
|
||||
player endon( "zmb_lost_knife" );
|
||||
level endon( "game_ended" );
|
||||
self waittill( "stationary", endpos, normal, angles, attacker, prey, bone );
|
||||
isfriendly = 0;
|
||||
if ( isDefined( endpos ) )
|
||||
{
|
||||
retrievable_model = spawn( "script_model", endpos );
|
||||
retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" );
|
||||
retrievable_model setowner( player );
|
||||
retrievable_model.owner = player;
|
||||
retrievable_model.angles = angles;
|
||||
retrievable_model.name = watcher.weapon;
|
||||
if ( isDefined( prey ) )
|
||||
{
|
||||
if ( isplayer( prey ) && player.team == prey.team )
|
||||
{
|
||||
isfriendly = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( isai( prey ) && player.team == prey.team )
|
||||
{
|
||||
isfriendly = 1;
|
||||
}
|
||||
}
|
||||
if ( !isfriendly )
|
||||
{
|
||||
retrievable_model linkto( prey, bone );
|
||||
retrievable_model thread force_drop_knives_to_ground_on_death( player, prey );
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( isfriendly )
|
||||
{
|
||||
retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) );
|
||||
normal = ( 0, 0, 1 );
|
||||
}
|
||||
}
|
||||
}
|
||||
watcher.objectarray[ watcher.objectarray.size ] = retrievable_model;
|
||||
if ( isfriendly )
|
||||
{
|
||||
retrievable_model waittill( "stationary" );
|
||||
}
|
||||
retrievable_model thread drop_knives_to_ground( player );
|
||||
if ( isfriendly )
|
||||
{
|
||||
player notify( "ballistic_knife_stationary" );
|
||||
}
|
||||
else
|
||||
{
|
||||
player notify( "ballistic_knife_stationary" );
|
||||
}
|
||||
retrievable_model thread wait_to_show_glowing_model( prey );
|
||||
}
|
||||
}
|
||||
|
||||
wait_to_show_glowing_model( prey )
|
||||
{
|
||||
level endon( "game_ended" );
|
||||
self endon( "death" );
|
||||
wait 2;
|
||||
self setmodel( "t5_weapon_ballistic_knife_blade_retrieve" );
|
||||
}
|
||||
|
||||
on_spawn_retrieve_trigger( watcher, player )
|
||||
{
|
||||
player endon( "death" );
|
||||
player endon( "disconnect" );
|
||||
player endon( "zmb_lost_knife" );
|
||||
level endon( "game_ended" );
|
||||
player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey );
|
||||
if ( !isDefined( retrievable_model ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
trigger_pos = [];
|
||||
if ( isDefined( prey ) || isplayer( prey ) && isai( prey ) )
|
||||
{
|
||||
trigger_pos[ 0 ] = prey.origin[ 0 ];
|
||||
trigger_pos[ 1 ] = prey.origin[ 1 ];
|
||||
trigger_pos[ 2 ] = prey.origin[ 2 ] + 10;
|
||||
}
|
||||
else
|
||||
{
|
||||
trigger_pos[ 0 ] = retrievable_model.origin[ 0 ] + ( 10 * normal[ 0 ] );
|
||||
trigger_pos[ 1 ] = retrievable_model.origin[ 1 ] + ( 10 * normal[ 1 ] );
|
||||
trigger_pos[ 2 ] = retrievable_model.origin[ 2 ] + ( 10 * normal[ 2 ] );
|
||||
}
|
||||
if ( is_true( level.ballistic_knife_autorecover ) )
|
||||
{
|
||||
trigger_pos[ 2 ] -= 50;
|
||||
pickup_trigger = spawn( "trigger_radius", ( trigger_pos[ 0 ], trigger_pos[ 1 ], trigger_pos[ 2 ] ), 0, 50, 100 );
|
||||
}
|
||||
else
|
||||
{
|
||||
pickup_trigger = spawn( "trigger_radius_use", ( trigger_pos[ 0 ], trigger_pos[ 1 ], trigger_pos[ 2 ] ) );
|
||||
pickup_trigger setcursorhint( "HINT_NOICON" );
|
||||
}
|
||||
pickup_trigger.owner = player;
|
||||
retrievable_model.retrievabletrigger = pickup_trigger;
|
||||
hint_string = &"WEAPON_BALLISTIC_KNIFE_PICKUP";
|
||||
if ( isDefined( hint_string ) )
|
||||
{
|
||||
pickup_trigger sethintstring( hint_string );
|
||||
}
|
||||
else
|
||||
{
|
||||
pickup_trigger sethintstring( &"GENERIC_PICKUP" );
|
||||
}
|
||||
pickup_trigger setteamfortrigger( player.team );
|
||||
player clientclaimtrigger( pickup_trigger );
|
||||
pickup_trigger enablelinkto();
|
||||
if ( isDefined( prey ) )
|
||||
{
|
||||
pickup_trigger linkto( prey );
|
||||
}
|
||||
else
|
||||
{
|
||||
pickup_trigger linkto( retrievable_model );
|
||||
}
|
||||
if ( isDefined( level.knife_planted ) )
|
||||
{
|
||||
[[ level.knife_planted ]]( retrievable_model, pickup_trigger, prey );
|
||||
}
|
||||
retrievable_model thread watch_use_trigger( pickup_trigger, retrievable_model, ::pick_up, watcher.weapon, watcher.pickupsoundplayer, watcher.pickupsound );
|
||||
player thread watch_shutdown( pickup_trigger, retrievable_model );
|
||||
}
|
||||
|
||||
debug_print( endpos )
|
||||
{
|
||||
/#
|
||||
self endon( "death" );
|
||||
while ( 1 )
|
||||
{
|
||||
print3d( endpos, "pickup_trigger" );
|
||||
wait 0,05;
|
||||
#/
|
||||
}
|
||||
}
|
||||
|
||||
watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundonuse )
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "delete" );
|
||||
level endon( "game_ended" );
|
||||
max_ammo = weaponmaxammo( weapon ) + 1;
|
||||
autorecover = is_true( level.ballistic_knife_autorecover );
|
||||
while ( 1 )
|
||||
{
|
||||
trigger waittill( "trigger", player );
|
||||
while ( !isalive( player ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if ( !player isonground() && !is_true( trigger.force_pickup ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if ( isDefined( trigger.triggerteam ) && player.team != trigger.triggerteam )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if ( isDefined( trigger.claimedby ) && player != trigger.claimedby )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
ammo_stock = player getweaponammostock( weapon );
|
||||
ammo_clip = player getweaponammoclip( weapon );
|
||||
current_weapon = player getcurrentweapon();
|
||||
total_ammo = ammo_stock + ammo_clip;
|
||||
hasreloaded = 1;
|
||||
if ( total_ammo > 0 && ammo_stock == total_ammo && current_weapon == weapon )
|
||||
{
|
||||
hasreloaded = 0;
|
||||
}
|
||||
if ( total_ammo >= max_ammo || !hasreloaded )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if ( !autorecover && player usebuttonpressed() && !player.throwinggrenade || !player meleebuttonpressed() && is_true( trigger.force_pickup ) )
|
||||
{
|
||||
if ( isDefined( playersoundonuse ) )
|
||||
{
|
||||
player playlocalsound( playersoundonuse );
|
||||
}
|
||||
if ( isDefined( npcsoundonuse ) )
|
||||
{
|
||||
player playsound( npcsoundonuse );
|
||||
}
|
||||
player thread [[ callback ]]( weapon, model, trigger );
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pick_up( weapon, model, trigger )
|
||||
{
|
||||
if ( self hasweapon( weapon ) )
|
||||
{
|
||||
current_weapon = self getcurrentweapon();
|
||||
if ( current_weapon != weapon )
|
||||
{
|
||||
clip_ammo = self getweaponammoclip( weapon );
|
||||
if ( !clip_ammo )
|
||||
{
|
||||
self setweaponammoclip( weapon, 1 );
|
||||
}
|
||||
else
|
||||
{
|
||||
new_ammo_stock = self getweaponammostock( weapon ) + 1;
|
||||
self setweaponammostock( weapon, new_ammo_stock );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
new_ammo_stock = self getweaponammostock( weapon ) + 1;
|
||||
self setweaponammostock( weapon, new_ammo_stock );
|
||||
}
|
||||
}
|
||||
self maps/mp/zombies/_zm_stats::increment_client_stat( "ballistic_knives_pickedup" );
|
||||
self maps/mp/zombies/_zm_stats::increment_player_stat( "ballistic_knives_pickedup" );
|
||||
model destroy_ent();
|
||||
trigger destroy_ent();
|
||||
}
|
||||
|
||||
destroy_ent()
|
||||
{
|
||||
if ( isDefined( self ) )
|
||||
{
|
||||
if ( isDefined( self.glowing_model ) )
|
||||
{
|
||||
self.glowing_model delete();
|
||||
}
|
||||
self delete();
|
||||
}
|
||||
}
|
||||
|
||||
watch_shutdown( trigger, model )
|
||||
{
|
||||
self waittill_any( "death_or_disconnect", "zmb_lost_knife" );
|
||||
trigger destroy_ent();
|
||||
model destroy_ent();
|
||||
}
|
||||
|
||||
drop_knives_to_ground( player )
|
||||
{
|
||||
player endon( "death" );
|
||||
player endon( "zmb_lost_knife" );
|
||||
for ( ;; )
|
||||
{
|
||||
level waittill( "drop_objects_to_ground", origin, radius );
|
||||
if ( distancesquared( origin, self.origin ) < ( radius * radius ) )
|
||||
{
|
||||
self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) );
|
||||
self thread update_retrieve_trigger( player );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
force_drop_knives_to_ground_on_death( player, prey )
|
||||
{
|
||||
self endon( "death" );
|
||||
player endon( "zmb_lost_knife" );
|
||||
prey waittill( "death" );
|
||||
self unlink();
|
||||
self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) );
|
||||
self thread update_retrieve_trigger( player );
|
||||
}
|
||||
|
||||
update_retrieve_trigger( player )
|
||||
{
|
||||
self endon( "death" );
|
||||
player endon( "zmb_lost_knife" );
|
||||
if ( isDefined( level.custom_update_retrieve_trigger ) )
|
||||
{
|
||||
self [[ level.custom_update_retrieve_trigger ]]( player );
|
||||
return;
|
||||
}
|
||||
self waittill( "stationary" );
|
||||
trigger = self.retrievabletrigger;
|
||||
trigger.origin = ( self.origin[ 0 ], self.origin[ 1 ], self.origin[ 2 ] + 10 );
|
||||
trigger linkto( self );
|
||||
}
|
19
zm_nuked_patch/maps/mp/zombies/_zm_weap_bowie.gsc
Normal file
19
zm_nuked_patch/maps/mp/zombies/_zm_weap_bowie.gsc
Normal file
@ -0,0 +1,19 @@
|
||||
#include maps/mp/zombies/_zm_weapons;
|
||||
#include maps/mp/zombies/_zm_utility;
|
||||
#include maps/mp/_utility;
|
||||
#include common_scripts/utility;
|
||||
|
||||
init()
|
||||
{
|
||||
if ( isDefined( level.bowie_cost ) )
|
||||
{
|
||||
cost = level.bowie_cost;
|
||||
}
|
||||
else
|
||||
{
|
||||
cost = 3000;
|
||||
}
|
||||
maps/mp/zombies/_zm_melee_weapon::init( "bowie_knife_zm", "zombie_bowie_flourish", "knife_ballistic_bowie_zm", "knife_ballistic_bowie_upgraded_zm", cost, "bowie_upgrade", &"ZOMBIE_WEAPON_BOWIE_BUY", "bowie", undefined );
|
||||
maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_bowie" );
|
||||
maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_bowie_upgraded" );
|
||||
}
|
482
zm_nuked_patch/maps/mp/zombies/_zm_weap_claymore.gsc
Normal file
482
zm_nuked_patch/maps/mp/zombies/_zm_weap_claymore.gsc
Normal file
@ -0,0 +1,482 @@
|
||||
#include maps/mp/gametypes_zm/_weaponobjects;
|
||||
#include maps/mp/zombies/_zm_stats;
|
||||
#include maps/mp/zombies/_zm_weapons;
|
||||
#include maps/mp/zombies/_zm_audio;
|
||||
#include maps/mp/zombies/_zm_score;
|
||||
#include maps/mp/zombies/_zm_equipment;
|
||||
#include maps/mp/zombies/_zm_utility;
|
||||
#include maps/mp/_utility;
|
||||
#include common_scripts/utility;
|
||||
|
||||
init()
|
||||
{
|
||||
if ( !isDefined( level.claymores_max_per_player ) )
|
||||
{
|
||||
level.claymores_max_per_player = 12;
|
||||
}
|
||||
trigs = getentarray( "claymore_purchase", "targetname" );
|
||||
i = 0;
|
||||
while ( i < trigs.size )
|
||||
{
|
||||
model = getent( trigs[ i ].target, "targetname" );
|
||||
if ( isDefined( model ) )
|
||||
{
|
||||
model hide();
|
||||
}
|
||||
i++;
|
||||
}
|
||||
array_thread( trigs, ::buy_claymores );
|
||||
level thread give_claymores_after_rounds();
|
||||
level.claymores_on_damage = ::satchel_damage;
|
||||
level.pickup_claymores = ::pickup_claymores;
|
||||
level.pickup_claymores_trigger_listener = ::pickup_claymores_trigger_listener;
|
||||
level.claymore_detectiondot = cos( 70 );
|
||||
level.claymore_detectionmindist = 20;
|
||||
level._effect[ "claymore_laser" ] = loadfx( "weapon/claymore/fx_claymore_laser" );
|
||||
}
|
||||
|
||||
buy_claymores()
|
||||
{
|
||||
self.zombie_cost = 1000;
|
||||
self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" );
|
||||
self setcursorhint( "HINT_WEAPON", "claymore_zm" );
|
||||
self endon( "kill_trigger" );
|
||||
if ( !isDefined( self.stub ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
if ( isDefined( self.stub ) && !isDefined( self.stub.claymores_triggered ) )
|
||||
{
|
||||
self.stub.claymores_triggered = 0;
|
||||
}
|
||||
self.claymores_triggered = self.stub.claymores_triggered;
|
||||
while ( 1 )
|
||||
{
|
||||
self waittill( "trigger", who );
|
||||
while ( who in_revive_trigger() )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
while ( who has_powerup_weapon() )
|
||||
{
|
||||
wait 0,1;
|
||||
}
|
||||
if ( is_player_valid( who ) )
|
||||
{
|
||||
if ( who.score >= self.zombie_cost )
|
||||
{
|
||||
if ( !who is_player_placeable_mine( "claymore_zm" ) )
|
||||
{
|
||||
play_sound_at_pos( "purchase", self.origin );
|
||||
who maps/mp/zombies/_zm_score::minus_to_player_score( self.zombie_cost );
|
||||
who thread claymore_setup();
|
||||
who thread show_claymore_hint( "claymore_purchased" );
|
||||
who thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" );
|
||||
if ( isDefined( self.stub ) )
|
||||
{
|
||||
self.claymores_triggered = self.stub.claymores_triggered;
|
||||
}
|
||||
if ( self.claymores_triggered == 0 )
|
||||
{
|
||||
model = getent( self.target, "targetname" );
|
||||
if ( isDefined( model ) )
|
||||
{
|
||||
model thread maps/mp/zombies/_zm_weapons::weapon_show( who );
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( isDefined( self.clientfieldname ) )
|
||||
{
|
||||
level setclientfield( self.clientfieldname, 1 );
|
||||
}
|
||||
}
|
||||
self.claymores_triggered = 1;
|
||||
if ( isDefined( self.stub ) )
|
||||
{
|
||||
self.stub.claymores_triggered = 1;
|
||||
}
|
||||
}
|
||||
trigs = getentarray( "claymore_purchase", "targetname" );
|
||||
i = 0;
|
||||
while ( i < trigs.size )
|
||||
{
|
||||
trigs[ i ] setinvisibletoplayer( who );
|
||||
i++;
|
||||
}
|
||||
}
|
||||
else who thread show_claymore_hint( "already_purchased" );
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
who play_sound_on_ent( "no_purchase" );
|
||||
who maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_weapon" );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
claymore_unitrigger_update_prompt( player )
|
||||
{
|
||||
if ( player is_player_placeable_mine( "claymore_zm" ) )
|
||||
{
|
||||
self sethintstring( "" );
|
||||
self setcursorhint( "HINT_NOICON" );
|
||||
return 0;
|
||||
}
|
||||
self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" );
|
||||
self setcursorhint( "HINT_WEAPON", "claymore_zm" );
|
||||
return 1;
|
||||
}
|
||||
|
||||
set_claymore_visible()
|
||||
{
|
||||
players = get_players();
|
||||
trigs = getentarray( "claymore_purchase", "targetname" );
|
||||
while ( 1 )
|
||||
{
|
||||
j = 0;
|
||||
while ( j < players.size )
|
||||
{
|
||||
while ( !players[ j ] is_player_placeable_mine( "claymore_zm" ) )
|
||||
{
|
||||
i = 0;
|
||||
while ( i < trigs.size )
|
||||
{
|
||||
trigs[ i ] setinvisibletoplayer( players[ j ], 0 );
|
||||
i++;
|
||||
}
|
||||
}
|
||||
j++;
|
||||
}
|
||||
wait 1;
|
||||
players = get_players();
|
||||
}
|
||||
}
|
||||
|
||||
claymore_safe_to_plant()
|
||||
{
|
||||
if ( self.owner.claymores.size >= level.claymores_max_per_player )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if ( isDefined( level.claymore_safe_to_plant ) )
|
||||
{
|
||||
return self [[ level.claymore_safe_to_plant ]]();
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
claymore_wait_and_detonate()
|
||||
{
|
||||
wait 0,1;
|
||||
self detonate( self.owner );
|
||||
}
|
||||
|
||||
claymore_watch()
|
||||
{
|
||||
self endon( "death" );
|
||||
self notify( "claymore_watch" );
|
||||
self endon( "claymore_watch" );
|
||||
while ( 1 )
|
||||
{
|
||||
self waittill( "grenade_fire", claymore, weapname );
|
||||
if ( weapname == "claymore_zm" )
|
||||
{
|
||||
claymore.owner = self;
|
||||
claymore.team = self.team;
|
||||
self notify( "zmb_enable_claymore_prompt" );
|
||||
if ( claymore claymore_safe_to_plant() )
|
||||
{
|
||||
if ( isDefined( level.claymore_planted ) )
|
||||
{
|
||||
self thread [[ level.claymore_planted ]]( claymore );
|
||||
}
|
||||
claymore thread claymore_detonation();
|
||||
claymore thread play_claymore_effects();
|
||||
self maps/mp/zombies/_zm_stats::increment_client_stat( "claymores_planted" );
|
||||
self maps/mp/zombies/_zm_stats::increment_player_stat( "claymores_planted" );
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
claymore thread claymore_wait_and_detonate();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
claymore_setup()
|
||||
{
|
||||
if ( !isDefined( self.claymores ) )
|
||||
{
|
||||
self.claymores = [];
|
||||
}
|
||||
self thread claymore_watch();
|
||||
self giveweapon( "claymore_zm" );
|
||||
self set_player_placeable_mine( "claymore_zm" );
|
||||
self setactionslot( 4, "weapon", "claymore_zm" );
|
||||
self setweaponammostock( "claymore_zm", 2 );
|
||||
}
|
||||
|
||||
adjust_trigger_origin( origin )
|
||||
{
|
||||
origin += vectorScale( ( 0, 0, 1 ), 20 );
|
||||
return origin;
|
||||
}
|
||||
|
||||
on_spawn_retrieve_trigger( watcher, player )
|
||||
{
|
||||
self maps/mp/gametypes_zm/_weaponobjects::onspawnretrievableweaponobject( watcher, player );
|
||||
if ( isDefined( self.pickuptrigger ) )
|
||||
{
|
||||
self.pickuptrigger sethintlowpriority( 0 );
|
||||
}
|
||||
}
|
||||
|
||||
pickup_claymores()
|
||||
{
|
||||
player = self.owner;
|
||||
if ( !player hasweapon( "claymore_zm" ) )
|
||||
{
|
||||
player thread claymore_watch();
|
||||
player giveweapon( "claymore_zm" );
|
||||
player set_player_placeable_mine( "claymore_zm" );
|
||||
player setactionslot( 4, "weapon", "claymore_zm" );
|
||||
player setweaponammoclip( "claymore_zm", 0 );
|
||||
player notify( "zmb_enable_claymore_prompt" );
|
||||
}
|
||||
else
|
||||
{
|
||||
clip_ammo = player getweaponammoclip( self.name );
|
||||
clip_max_ammo = weaponclipsize( self.name );
|
||||
if ( clip_ammo >= clip_max_ammo )
|
||||
{
|
||||
self destroy_ent();
|
||||
player notify( "zmb_disable_claymore_prompt" );
|
||||
return;
|
||||
}
|
||||
}
|
||||
self pick_up();
|
||||
clip_ammo = player getweaponammoclip( self.name );
|
||||
clip_max_ammo = weaponclipsize( self.name );
|
||||
if ( clip_ammo >= clip_max_ammo )
|
||||
{
|
||||
player notify( "zmb_disable_claymore_prompt" );
|
||||
}
|
||||
player maps/mp/zombies/_zm_stats::increment_client_stat( "claymores_pickedup" );
|
||||
player maps/mp/zombies/_zm_stats::increment_player_stat( "claymores_pickedup" );
|
||||
}
|
||||
|
||||
pickup_claymores_trigger_listener( trigger, player )
|
||||
{
|
||||
self thread pickup_claymores_trigger_listener_enable( trigger, player );
|
||||
self thread pickup_claymores_trigger_listener_disable( trigger, player );
|
||||
}
|
||||
|
||||
pickup_claymores_trigger_listener_enable( trigger, player )
|
||||
{
|
||||
self endon( "delete" );
|
||||
self endon( "death" );
|
||||
while ( 1 )
|
||||
{
|
||||
player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" );
|
||||
if ( !isDefined( trigger ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
trigger trigger_on();
|
||||
trigger linkto( self );
|
||||
}
|
||||
}
|
||||
|
||||
pickup_claymores_trigger_listener_disable( trigger, player )
|
||||
{
|
||||
self endon( "delete" );
|
||||
self endon( "death" );
|
||||
while ( 1 )
|
||||
{
|
||||
player waittill( "zmb_disable_claymore_prompt" );
|
||||
if ( !isDefined( trigger ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
trigger unlink();
|
||||
trigger trigger_off();
|
||||
}
|
||||
}
|
||||
|
||||
shouldaffectweaponobject( object )
|
||||
{
|
||||
pos = self.origin + vectorScale( ( 0, 0, 1 ), 32 );
|
||||
dirtopos = pos - object.origin;
|
||||
objectforward = anglesToForward( object.angles );
|
||||
dist = vectordot( dirtopos, objectforward );
|
||||
if ( dist < level.claymore_detectionmindist )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
dirtopos = vectornormalize( dirtopos );
|
||||
dot = vectordot( dirtopos, objectforward );
|
||||
return dot > level.claymore_detectiondot;
|
||||
}
|
||||
|
||||
claymore_detonation()
|
||||
{
|
||||
self endon( "death" );
|
||||
self waittill_not_moving();
|
||||
detonateradius = 96;
|
||||
damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - detonateradius ), 4, detonateradius, detonateradius * 2 );
|
||||
damagearea setexcludeteamfortrigger( self.team );
|
||||
damagearea enablelinkto();
|
||||
damagearea linkto( self );
|
||||
if ( is_true( self.isonbus ) )
|
||||
{
|
||||
damagearea setmovingplatformenabled( 1 );
|
||||
}
|
||||
self.damagearea = damagearea;
|
||||
self thread delete_claymores_on_death( self.owner, damagearea );
|
||||
self.owner.claymores[ self.owner.claymores.size ] = self;
|
||||
while ( 1 )
|
||||
{
|
||||
damagearea waittill( "trigger", ent );
|
||||
if ( isDefined( self.owner ) && ent == self.owner )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
while ( isDefined( ent.pers ) && isDefined( ent.pers[ "team" ] ) && ent.pers[ "team" ] == self.team )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if ( isDefined( ent.ignore_claymore ) && ent.ignore_claymore )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
while ( !ent shouldaffectweaponobject( self ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if ( ent damageconetrace( self.origin, self ) > 0 )
|
||||
{
|
||||
self playsound( "wpn_claymore_alert" );
|
||||
wait 0,4;
|
||||
if ( isDefined( self.owner ) )
|
||||
{
|
||||
self detonate( self.owner );
|
||||
}
|
||||
else
|
||||
{
|
||||
self detonate( undefined );
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
delete_claymores_on_death( player, ent )
|
||||
{
|
||||
self waittill( "death" );
|
||||
if ( isDefined( player ) )
|
||||
{
|
||||
arrayremovevalue( player.claymores, self );
|
||||
}
|
||||
wait 0,05;
|
||||
if ( isDefined( ent ) )
|
||||
{
|
||||
ent delete();
|
||||
}
|
||||
}
|
||||
|
||||
satchel_damage()
|
||||
{
|
||||
self endon( "death" );
|
||||
self setcandamage( 1 );
|
||||
self.health = 100000;
|
||||
self.maxhealth = self.health;
|
||||
attacker = undefined;
|
||||
while ( 1 )
|
||||
{
|
||||
self waittill( "damage", amount, attacker );
|
||||
if ( !isDefined( self ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
self.health = self.maxhealth;
|
||||
while ( !isplayer( attacker ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if ( isDefined( self.owner ) && attacker == self.owner )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
while ( isDefined( attacker.pers ) && isDefined( attacker.pers[ "team" ] ) && attacker.pers[ "team" ] != level.zombie_team )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if ( level.satchelexplodethisframe )
|
||||
{
|
||||
wait ( 0,1 + randomfloat( 0,4 ) );
|
||||
}
|
||||
else wait 0,05;
|
||||
if ( !isDefined( self ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
level.satchelexplodethisframe = 1;
|
||||
thread reset_satchel_explode_this_frame();
|
||||
self detonate( attacker );
|
||||
}
|
||||
|
||||
reset_satchel_explode_this_frame()
|
||||
{
|
||||
wait 0,05;
|
||||
level.satchelexplodethisframe = 0;
|
||||
}
|
||||
|
||||
play_claymore_effects()
|
||||
{
|
||||
self endon( "death" );
|
||||
self waittill_not_moving();
|
||||
playfxontag( level._effect[ "claymore_laser" ], self, "tag_fx" );
|
||||
}
|
||||
|
||||
give_claymores_after_rounds()
|
||||
{
|
||||
while ( 1 )
|
||||
{
|
||||
level waittill( "between_round_over" );
|
||||
while ( !level flag_exists( "teleporter_used" ) || !flag( "teleporter_used" ) )
|
||||
{
|
||||
players = get_players();
|
||||
i = 0;
|
||||
while ( i < players.size )
|
||||
{
|
||||
if ( players[ i ] is_player_placeable_mine( "claymore_zm" ) )
|
||||
{
|
||||
players[ i ] giveweapon( "claymore_zm" );
|
||||
players[ i ] set_player_placeable_mine( "claymore_zm" );
|
||||
players[ i ] setactionslot( 4, "weapon", "claymore_zm" );
|
||||
players[ i ] setweaponammoclip( "claymore_zm", 2 );
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
show_claymore_hint( string )
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "disconnect" );
|
||||
if ( string == "claymore_purchased" )
|
||||
{
|
||||
text = &"ZOMBIE_CLAYMORE_HOWTO";
|
||||
}
|
||||
else
|
||||
{
|
||||
text = &"ZOMBIE_CLAYMORE_ALREADY_PURCHASED";
|
||||
}
|
||||
show_equipment_hint_text( text );
|
||||
}
|
120
zm_nuked_patch/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc
Normal file
120
zm_nuked_patch/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc
Normal file
@ -0,0 +1,120 @@
|
||||
#include maps/mp/zombies/_zm_audio;
|
||||
#include maps/mp/zombies/_zm_spawner;
|
||||
#include maps/mp/zombies/_zm_weapons;
|
||||
#include maps/mp/zombies/_zm_net;
|
||||
#include maps/mp/zombies/_zm_utility;
|
||||
#include maps/mp/_utility;
|
||||
#include common_scripts/utility;
|
||||
|
||||
init()
|
||||
{
|
||||
registerclientfield( "toplayer", "tazer_flourish", 1, 1, "int" );
|
||||
register_melee_weapon_for_level( "tazer_knuckles_zm" );
|
||||
if ( isDefined( level.tazer_cost ) )
|
||||
{
|
||||
cost = level.tazer_cost;
|
||||
}
|
||||
else
|
||||
{
|
||||
cost = 6000;
|
||||
}
|
||||
level.use_tazer_impact_fx = 0;
|
||||
maps/mp/zombies/_zm_melee_weapon::init( "tazer_knuckles_zm", "zombie_tazer_flourish", "knife_ballistic_no_melee_zm", "knife_ballistic_no_melee_upgraded_zm", cost, "tazer_upgrade", &"ZOMBIE_WEAPON_TAZER_BUY", "tazerknuckles", ::tazer_flourish_fx );
|
||||
maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_no_melee" );
|
||||
maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_no_melee_upgraded" );
|
||||
maps/mp/zombies/_zm_spawner::add_cusom_zombie_spawn_logic( ::watch_bodily_functions );
|
||||
level._effect[ "fx_zmb_taser_vomit" ] = loadfx( "maps/zombie/fx_zmb_taser_vomit" );
|
||||
level._effect[ "fx_zmb_taser_flourish" ] = loadfx( "weapon/taser/fx_taser_knuckles_anim_zmb" );
|
||||
if ( level.script != "zm_transit" )
|
||||
{
|
||||
level._effect[ "fx_zmb_tazer_impact" ] = loadfx( "weapon/taser/fx_taser_knuckles_impact_zmb" );
|
||||
level.use_tazer_impact_fx = 1;
|
||||
}
|
||||
level.tazer_flourish_delay = 0,5;
|
||||
}
|
||||
|
||||
watch_bodily_functions()
|
||||
{
|
||||
if ( isDefined( self.isscreecher ) || self.isscreecher && isDefined( self.is_avogadro ) && self.is_avogadro )
|
||||
{
|
||||
return;
|
||||
}
|
||||
while ( isDefined( self ) && isalive( self ) )
|
||||
{
|
||||
self waittill( "damage", amount, attacker, direction_vec, point, type );
|
||||
if ( !isDefined( self ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
if ( !isDefined( attacker ) || !isplayer( attacker ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
while ( type != "MOD_MELEE" )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if ( !attacker hasweapon( "tazer_knuckles_zm" ) || isDefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
ch = randomint( 100 );
|
||||
if ( ch < 4 )
|
||||
{
|
||||
playfxontag( level._effect[ "fx_zmb_taser_vomit" ], self, "j_neck" );
|
||||
}
|
||||
if ( level.use_tazer_impact_fx )
|
||||
{
|
||||
tags = [];
|
||||
tags[ 0 ] = "J_Head";
|
||||
tags[ 1 ] = "J_Neck";
|
||||
playfxontag( level._effect[ "fx_zmb_tazer_impact" ], self, random( tags ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onplayerconnect()
|
||||
{
|
||||
self thread onplayerspawned();
|
||||
}
|
||||
|
||||
onplayerspawned()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
for ( ;; )
|
||||
{
|
||||
self waittill( "spawned_player" );
|
||||
self thread watchtazerknucklemelee();
|
||||
}
|
||||
}
|
||||
|
||||
watchtazerknucklemelee()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
for ( ;; )
|
||||
{
|
||||
self waittill( "weapon_melee", weapon );
|
||||
if ( weapon == "tazer_knuckles_zm" )
|
||||
{
|
||||
self tazerknuckle_melee();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tazerknuckle_melee()
|
||||
{
|
||||
}
|
||||
|
||||
tazer_flourish_fx()
|
||||
{
|
||||
self waittill( "weapon_change", newweapon );
|
||||
if ( newweapon == "zombie_tazer_flourish" )
|
||||
{
|
||||
self endon( "weapon_change" );
|
||||
wait level.tazer_flourish_delay;
|
||||
self thread maps/mp/zombies/_zm_audio::playerexert( "hitmed" );
|
||||
self setclientfieldtoplayer( "tazer_flourish", 1 );
|
||||
wait_network_frame();
|
||||
self setclientfieldtoplayer( "tazer_flourish", 0 );
|
||||
}
|
||||
}
|
@ -11,4 +11,19 @@ zm_nuked_patch/maps/mp/zm_nuked.gsc
|
||||
|
||||
### The following scripts compile but cause a minidump or other severe error:
|
||||
|
||||
### The following scripts are not checked yet, uploaded to setup a baseline:
|
||||
```
|
||||
zm_nuked_patch/maps/mp/zombies/_zm_melee_weapon.gsc
|
||||
zm_nuked_patch/maps/mp/zombies/_zm_weap_ballistic_knife.gsc
|
||||
zm_nuked_patch/maps/mp/zombies/_zm_weap_bowie.gsc
|
||||
zm_nuked_patch/maps/mp/zombies/_zm_weap_claymore.gsc
|
||||
zm_nuked_patch/maps/mp/zombies/_zm_weap_tazer_knuckles.gsc
|
||||
|
||||
zm_nuked_patch/maps/mp/zm_nuked_ffotd.gsc
|
||||
zm_nuked_patch/maps/mp/zm_nuked_fx.gsc
|
||||
zm_nuked_patch/maps/mp/zm_nuked_gamemodes.gsc
|
||||
zm_nuked_patch/maps/mp/zm_nuked_perks.gsc
|
||||
zm_nuked_patch/maps/mp/zm_nuked_standard.gsc
|
||||
```
|
||||
|
||||
### notes:
|
||||
|
Loading…
x
Reference in New Issue
Block a user