diff --git a/scripts/zm/replaced/_zm_ai_screecher.gsc b/scripts/zm/replaced/_zm_ai_screecher.gsc new file mode 100644 index 00000000..3647f089 --- /dev/null +++ b/scripts/zm/replaced/_zm_ai_screecher.gsc @@ -0,0 +1,148 @@ +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_ai_screecher; +#include maps\mp\_visionset_mgr; +#include maps\mp\animscripts\zm_shared; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\gametypes_zm\_hud_util; +#include maps\mp\zombies\_zm_laststand; +#include maps\mp\zombies\_zm_audio; +#include maps\mp\zombies\_zm_stats; + +screecher_detach( player ) +{ + self endon( "death" ); + self.state = "detached"; + + if ( !isdefined( self.linked_ent ) ) + return; + + if ( isdefined( player ) ) + { + player clientnotify( "scrEnd" ); + + player allowprone( 1 ); + + player takeweapon( "screecher_arms_zm" ); + + if ( !getdvarint( _hash_E7EF8EB7 ) ) + player stoppoisoning(); + + if ( !player maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( isdefined( player.intermission ) && player.intermission ) ) + player decrement_is_drinking(); + + if ( isdefined( player.screecher_weapon ) && player.screecher_weapon != "none" && is_player_valid( player ) && !is_equipment_that_blocks_purchase( player.screecher_weapon ) ) + player switchtoweapon( player.screecher_weapon ); + else if ( flag( "solo_game" ) && player hasperk( "specialty_quickrevive" ) ) + { + + } + else if ( !player maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) + { + primaryweapons = player getweaponslistprimaries(); + + if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) + player switchtoweapon( primaryweapons[0] ); + } + + player.screecher_weapon = undefined; + } + + self unlink(); + self setclientfield( "render_third_person", 0 ); + + if ( isdefined( self.linked_ent ) ) + { + self.linked_ent.screecher = undefined; + self.linked_ent setmovespeedscale( 1 ); + self.linked_ent = undefined; + } + + self.green_light = player.green_light; + self animcustom( ::screecher_jump_down ); + + self waittill( "jump_down_done" ); + + maps\mp\_visionset_mgr::vsmgr_deactivate( "overlay", "zm_ai_screecher_blur", player ); + self animmode( "normal" ); + self.ignoreall = 1; + self setplayercollision( 1 ); + + if ( isdefined( level.screecher_should_burrow ) ) + { + if ( self [[ level.screecher_should_burrow ]]() ) + { + return; + } + } + + self thread screecher_runaway(); +} + +screecher_cleanup() +{ + self waittill( "death", attacker ); + + if ( isdefined( attacker ) && isplayer( attacker ) ) + { + if ( isdefined( self.damagelocation ) && isdefined( self.damagemod ) ) + level thread maps\mp\zombies\_zm_audio::player_zombie_kill_vox( self.damagelocation, attacker, self.damagemod, self ); + } + + if ( isdefined( self.loopsoundent ) ) + { + self.loopsoundent delete(); + self.loopsoundent = undefined; + } + + player = self.linked_ent; + + if ( isdefined( player ) ) + { + player playsound( "zmb_vocals_screecher_death" ); + player setmovespeedscale( 1 ); + maps\mp\_visionset_mgr::vsmgr_deactivate( "overlay", "zm_ai_screecher_blur", player ); + + if ( isdefined( player.screecher_weapon ) ) + { + player clientnotify( "scrEnd" ); + + player allowprone( 1 ); + + player takeweapon( "screecher_arms_zm" ); + + if ( !getdvarint( _hash_E7EF8EB7 ) ) + player stoppoisoning(); + + if ( !player maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( isdefined( player.intermission ) && player.intermission ) ) + player decrement_is_drinking(); + + if ( player.screecher_weapon != "none" && is_player_valid( player ) ) + player switchtoweapon( player.screecher_weapon ); + else + { + primaryweapons = player getweaponslistprimaries(); + + if ( isdefined( primaryweapons ) && primaryweapons.size > 0 ) + player switchtoweapon( primaryweapons[0] ); + } + + player.screecher_weapon = undefined; + } + } + + if ( isdefined( self.claw_fx ) ) + self.claw_fx destroy(); + + if ( isdefined( self.anchor ) ) + self.anchor delete(); + + if ( isdefined( level.screecher_cleanup ) ) + self [[ level.screecher_cleanup ]](); + + if ( level.zombie_screecher_count > 0 ) + { + level.zombie_screecher_count--; + } +} \ No newline at end of file diff --git a/scripts/zm/zm_transit/zm_transit_reimagined.gsc b/scripts/zm/zm_transit/zm_transit_reimagined.gsc index 39f2f95d..cfaedb35 100644 --- a/scripts/zm/zm_transit/zm_transit_reimagined.gsc +++ b/scripts/zm/zm_transit/zm_transit_reimagined.gsc @@ -7,6 +7,7 @@ #include scripts\zm\replaced\zm_transit_utility; #include scripts\zm\replaced\zm_transit_bus; #include scripts\zm\replaced\_zm_riotshield; +#include scripts\zm\replaced\_zm_ai_screecher; #include scripts\zm\replaced\_zm_weap_riotshield; #include scripts\zm\replaced\_zm_weap_jetgun; #include scripts\zm\replaced\_zm_weap_emp_bomb; @@ -21,6 +22,8 @@ main() replaceFunc(maps\mp\zm_transit_gamemodes::init, scripts\zm\replaced\zm_transit_gamemodes::init); replaceFunc(maps\mp\zm_transit_utility::solo_tombstone_removal, scripts\zm\replaced\zm_transit_utility::solo_tombstone_removal); replaceFunc(maps\mp\zm_transit_bus::busupdateplayers, scripts\zm\replaced\zm_transit_bus::busupdateplayers); + replaceFunc(maps\mp\zombies\_zm_ai_screecher::screecher_detach, scripts\zm\replaced\_zm_ai_screecher::screecher_detach); + replaceFunc(maps\mp\zombies\_zm_ai_screecher::screecher_cleanup, scripts\zm\replaced\_zm_ai_screecher::screecher_cleanup); replaceFunc(maps\mp\zombies\_zm_riotshield::doriotshielddeploy, scripts\zm\replaced\_zm_riotshield::doriotshielddeploy); replaceFunc(maps\mp\zombies\_zm_riotshield::trackriotshield, scripts\zm\replaced\_zm_riotshield::trackriotshield); replaceFunc(maps\mp\zombies\_zm_weap_riotshield::init, scripts\zm\replaced\_zm_weap_riotshield::init);