From b4f1a14754cce2a7c2ae22a94e714e07da4a9cfd Mon Sep 17 00:00:00 2001 From: Jbleezy Date: Tue, 21 Dec 2021 04:23:00 -0800 Subject: [PATCH] Wallbuys: decrease upgraded ammo cost --- README.md | 1 + scripts/zm/main/_zm_reimagined.gsc | 285 +++++++++++++++++++++++++++- scripts/zm/replaced/_zm_weapons.gsc | 10 + 3 files changed, 294 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e227db47..0e140809 100644 --- a/README.md +++ b/README.md @@ -101,6 +101,7 @@ ## Wallbuys * Increased trigger radius +* Decreased upgraded ammo cost from 4500 to 2500 ## Perks * No longer deactivated if the perk machine is powered off diff --git a/scripts/zm/main/_zm_reimagined.gsc b/scripts/zm/main/_zm_reimagined.gsc index 4f9f11e7..dfdfd25d 100644 --- a/scripts/zm/main/_zm_reimagined.gsc +++ b/scripts/zm/main/_zm_reimagined.gsc @@ -19,6 +19,7 @@ main() replaceFunc(maps/mp/zombies/_zm_playerhealth::playerhealthregen, scripts/zm/replaced/_zm_playerhealth::playerhealthregen); replaceFunc(maps/mp/zombies/_zm_utility::track_players_intersection_tracker, scripts/zm/replaced/_zm_utility::track_players_intersection_tracker); replaceFunc(maps/mp/zombies/_zm_utility::is_headshot, scripts/zm/replaced/_zm_utility::is_headshot); + replaceFunc(maps/mp/zombies/_zm_weapons::get_upgraded_ammo_cost, scripts/zm/replaced/_zm_weapons::get_upgraded_ammo_cost); replaceFunc(maps/mp/zombies/_zm_weapons::makegrenadedudanddestroy, scripts/zm/replaced/_zm_weapons::makegrenadedudanddestroy); replaceFunc(maps/mp/zombies/_zm_powerups::nuke_powerup, scripts/zm/replaced/_zm_powerups::nuke_powerup); replaceFunc(maps/mp/zombies/_zm_equipment::placed_equipment_think, scripts/zm/replaced/_zm_equipment::placed_equipment_think); @@ -172,6 +173,7 @@ post_all_players_spawned() disable_bank(); wallbuy_increase_trigger_radius(); + wallbuy_decrease_upgraded_ammo_cost(); wallbuy_location_changes(); zone_changes(); @@ -215,7 +217,7 @@ post_all_players_spawned() level thread buried_enable_fountain_transport(); level thread buried_disable_ghost_free_perk_on_damage(); - level thread wallbuy_dynamic_increase_trigger_radius(); + level thread wallbuy_dynamic_update(); level thread tomb_increase_solo_door_prices(); level thread tomb_remove_shovels_from_map(); @@ -2095,7 +2097,284 @@ wallbuy_increase_trigger_radius() } } -wallbuy_dynamic_increase_trigger_radius() +wallbuy_decrease_upgraded_ammo_cost() +{ + for(i = 0; i < level._unitriggers.trigger_stubs.size; i++) + { + if(isDefined(level._unitriggers.trigger_stubs[i].trigger_func) && level._unitriggers.trigger_stubs[i].trigger_func == maps/mp/zombies/_zm_weapons::weapon_spawn_think) + { + level._unitriggers.trigger_stubs[i].trigger_func = ::weapon_spawn_think; + } + } +} + +weapon_spawn_think() +{ + cost = maps/mp/zombies/_zm_weapons::get_weapon_cost( self.zombie_weapon_upgrade ); + ammo_cost = maps/mp/zombies/_zm_weapons::get_ammo_cost( self.zombie_weapon_upgrade ); + shared_ammo_weapon = undefined; + second_endon = undefined; + + is_grenade = 0; + if(weapontype( self.zombie_weapon_upgrade ) == "grenade") + { + is_grenade = 1; + } + + if ( isDefined( self.stub ) ) + { + second_endon = "kill_trigger"; + self.first_time_triggered = self.stub.first_time_triggered; + } + + if ( isDefined( self.stub ) && is_true( self.stub.trigger_per_player ) ) + { + self thread maps/mp/zombies/_zm_magicbox::decide_hide_show_hint( "stop_hint_logic", second_endon, self.parent_player ); + } + else + { + self thread maps/mp/zombies/_zm_magicbox::decide_hide_show_hint( "stop_hint_logic", second_endon ); + } + + if ( is_grenade ) + { + self.first_time_triggered = 0; + hint = maps/mp/zombies/_zm_weapons::get_weapon_hint( self.zombie_weapon_upgrade ); + self sethintstring( hint, cost ); + } + else if ( !isDefined( self.first_time_triggered ) ) + { + self.first_time_triggered = 0; + if ( isDefined( self.stub ) ) + { + self.stub.first_time_triggered = 0; + } + } + else if ( self.first_time_triggered ) + { + if ( is_true( level.use_legacy_weapon_prompt_format ) ) + { + self maps/mp/zombies/_zm_weapons::weapon_set_first_time_hint( cost, maps/mp/zombies/_zm_weapons::get_ammo_cost( self.zombie_weapon_upgrade ) ); + } + } + + for ( ;; ) + { + self waittill( "trigger", player ); + + if ( !is_player_valid( player ) ) + { + player thread ignore_triggers( 0.5 ); + continue; + } + + if ( !player maps/mp/zombies/_zm_magicbox::can_buy_weapon() ) + { + wait 0.1; + continue; + } + + if ( isDefined( self.stub ) && is_true( self.stub.require_look_from ) ) + { + toplayer = player get_eye() - self.origin; + forward = -1 * anglesToRight( self.angles ); + dot = vectordot( toplayer, forward ); + if ( dot < 0 ) + { + continue; + } + } + + if ( player has_powerup_weapon() ) + { + wait 0.1; + continue; + } + + player_has_weapon = player maps/mp/zombies/_zm_weapons::has_weapon_or_upgrade( self.zombie_weapon_upgrade ); + if ( !player_has_weapon && is_true( level.weapons_using_ammo_sharing ) ) + { + shared_ammo_weapon = player maps/mp/zombies/_zm_weapons::get_shared_ammo_weapon( self.zombie_weapon_upgrade ); + if ( isDefined( shared_ammo_weapon ) ) + { + player_has_weapon = 1; + } + } + + if ( is_true( level.pers_upgrade_nube ) ) + { + player_has_weapon = maps/mp/zombies/_zm_pers_upgrades_functions::pers_nube_should_we_give_raygun( player_has_weapon, player, self.zombie_weapon_upgrade ); + } + + cost = maps/mp/zombies/_zm_weapons::get_weapon_cost( self.zombie_weapon_upgrade ); + if ( player maps/mp/zombies/_zm_pers_upgrades_functions::is_pers_double_points_active() ) + { + cost = int( cost / 2 ); + } + + if ( !player_has_weapon ) + { + if ( player.score >= cost ) + { + if ( self.first_time_triggered == 0 ) + { + self maps/mp/zombies/_zm_weapons::show_all_weapon_buys( player, cost, ammo_cost, is_grenade ); + } + + 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, self.zombie_weapon_upgrade, self.origin, "weapon" ); + level notify( "weapon_bought", player, self.zombie_weapon_upgrade ); + + if ( self.zombie_weapon_upgrade == "riotshield_zm" ) + { + player maps/mp/zombies/_zm_equipment::equipment_give( "riotshield_zm" ); + if ( isDefined( player.player_shield_reset_health ) ) + { + player [[ player.player_shield_reset_health ]](); + } + } + else if ( self.zombie_weapon_upgrade == "jetgun_zm" ) + { + player maps/mp/zombies/_zm_equipment::equipment_give( "jetgun_zm" ); + } + else if ( is_lethal_grenade( self.zombie_weapon_upgrade ) ) + { + player takeweapon( player get_player_lethal_grenade() ); + player set_player_lethal_grenade( self.zombie_weapon_upgrade ); + } + + str_weapon = self.zombie_weapon_upgrade; + + if ( is_true( level.pers_upgrade_nube ) ) + { + str_weapon = maps/mp/zombies/_zm_pers_upgrades_functions::pers_nube_weapon_upgrade_check( player, str_weapon ); + } + + player maps/mp/zombies/_zm_weapons::weapon_give( str_weapon ); + player maps/mp/zombies/_zm_stats::increment_client_stat( "wallbuy_weapons_purchased" ); + player maps/mp/zombies/_zm_stats::increment_player_stat( "wallbuy_weapons_purchased" ); + } + else + { + play_sound_on_ent( "no_purchase" ); + player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_weapon" ); + } + } + else + { + str_weapon = self.zombie_weapon_upgrade; + + if ( isDefined( shared_ammo_weapon ) ) + { + str_weapon = shared_ammo_weapon; + } + + if ( is_true( level.pers_upgrade_nube ) ) + { + str_weapon = maps/mp/zombies/_zm_pers_upgrades_functions::pers_nube_weapon_ammo_check( player, str_weapon ); + } + + if ( is_true( self.hacked ) ) + { + if ( !player maps/mp/zombies/_zm_weapons::has_upgrade( str_weapon ) ) + { + ammo_cost = maps/mp/zombies/_zm_weapons::get_upgraded_ammo_cost( str_weapon ); + } + else + { + ammo_cost = maps/mp/zombies/_zm_weapons::get_ammo_cost( str_weapon ); + } + } + else if ( player maps/mp/zombies/_zm_weapons::has_upgrade( str_weapon ) ) + { + ammo_cost = maps/mp/zombies/_zm_weapons::get_upgraded_ammo_cost( str_weapon ); + } + else + { + ammo_cost = maps/mp/zombies/_zm_weapons::get_ammo_cost( str_weapon ); + } + + if ( is_true( player.pers_upgrades_awarded[ "nube" ] ) ) + { + ammo_cost = maps/mp/zombies/_zm_pers_upgrades_functions::pers_nube_override_ammo_cost( player, self.zombie_weapon_upgrade, ammo_cost ); + } + + if ( player maps/mp/zombies/_zm_pers_upgrades_functions::is_pers_double_points_active() ) + { + ammo_cost = int( ammo_cost / 2 ); + } + + if ( str_weapon == "riotshield_zm" ) + { + play_sound_on_ent( "no_purchase" ); + } + else if ( player.score >= ammo_cost ) + { + if ( self.first_time_triggered == 0 ) + { + self maps/mp/zombies/_zm_weapons::show_all_weapon_buys( player, cost, ammo_cost, is_grenade ); + } + + if ( player maps/mp/zombies/_zm_weapons::has_upgrade( str_weapon ) ) + { + player maps/mp/zombies/_zm_stats::increment_client_stat( "upgraded_ammo_purchased" ); + player maps/mp/zombies/_zm_stats::increment_player_stat( "upgraded_ammo_purchased" ); + } + else + { + player maps/mp/zombies/_zm_stats::increment_client_stat( "ammo_purchased" ); + player maps/mp/zombies/_zm_stats::increment_player_stat( "ammo_purchased" ); + } + + if ( str_weapon == "riotshield_zm" ) + { + if ( isDefined( player.player_shield_reset_health ) ) + { + ammo_given = player [[ player.player_shield_reset_health ]](); + } + else + { + ammo_given = 0; + } + } + else if ( player maps/mp/zombies/_zm_weapons::has_upgrade( str_weapon ) ) + { + ammo_given = player maps/mp/zombies/_zm_weapons::ammo_give( level.zombie_weapons[ str_weapon ].upgrade_name ); + } + else + { + ammo_given = player maps/mp/zombies/_zm_weapons::ammo_give( str_weapon ); + } + + if ( ammo_given ) + { + player maps/mp/zombies/_zm_score::minus_to_player_score( ammo_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, ammo_cost, str_weapon, self.origin, "ammo" ); + } + } + else + { + play_sound_on_ent( "no_purchase" ); + + if ( isDefined( level.custom_generic_deny_vo_func ) ) + { + player [[ level.custom_generic_deny_vo_func ]](); + } + else + { + player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_weapon" ); + } + } + } + + if ( isDefined( self.stub ) && isDefined( self.stub.prompt_and_visibility_func ) ) + { + self [[ self.stub.prompt_and_visibility_func ]]( player ); + } + } +} + +wallbuy_dynamic_update() { if(!(is_classic() && level.scr_zm_map_start_location == "processing")) { @@ -2115,11 +2394,13 @@ wallbuy_dynamic_increase_trigger_radius() { prev_built_wallbuys = level.built_wallbuys; wallbuy_increase_trigger_radius(); + wallbuy_decrease_upgraded_ammo_cost(); } if (level.built_wallbuys == -100) { wallbuy_increase_trigger_radius(); + wallbuy_decrease_upgraded_ammo_cost(); return; } diff --git a/scripts/zm/replaced/_zm_weapons.gsc b/scripts/zm/replaced/_zm_weapons.gsc index 52a28a9f..023f0c88 100644 --- a/scripts/zm/replaced/_zm_weapons.gsc +++ b/scripts/zm/replaced/_zm_weapons.gsc @@ -2,6 +2,16 @@ #include common_scripts\utility; #include maps\mp\zombies\_zm_utility; +get_upgraded_ammo_cost( weapon_name ) +{ + if ( isDefined( level.zombie_weapons[ weapon_name ].upgraded_ammo_cost ) ) + { + return level.zombie_weapons[ weapon_name ].upgraded_ammo_cost; + } + + return 2500; +} + makegrenadedudanddestroy() { self endon( "death" );