diff --git a/README.md b/README.md index 7342d53b..772e881a 100644 --- a/README.md +++ b/README.md @@ -318,6 +318,7 @@ * Can be destroyed by player damage when deployed * Destroyed sound plays when player is holding * Deployed damage sound plays on shield instead of player +* Switches back to correct weapon after deploying ### Turret * No longer needs to be powered by a Turbine diff --git a/scripts/zm/replaced/_zm_riotshield.gsc b/scripts/zm/replaced/_zm_riotshield.gsc new file mode 100644 index 00000000..101bef79 --- /dev/null +++ b/scripts/zm/replaced/_zm_riotshield.gsc @@ -0,0 +1,147 @@ +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_weap_riotshield; +#include maps\mp\zombies\_zm_buildables; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_riotshield; + +doriotshielddeploy( origin, angles ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "start_riotshield_deploy" ); + self notify( "deployed_riotshield" ); + self maps\mp\zombies\_zm_buildables::track_placed_buildables( level.riotshield_name ); + + if ( isdefined( self.current_equipment ) && self.current_equipment == level.riotshield_name ) + self maps\mp\zombies\_zm_equipment::equipment_to_deployed( level.riotshield_name ); + + zoffset = level.riotshield_placement_zoffset; + shield_ent = self spawnriotshieldcover( origin + ( 0, 0, zoffset ), angles ); + item_ent = deployriotshield( self, shield_ent ); + primaries = self getweaponslistprimaries(); + + self maps\mp\zombies\_zm_weapons::switch_back_primary_weapon(self.riotshield_prev_wep); + + if ( isdefined( level.equipment_planted ) ) + self [[ level.equipment_planted ]]( shield_ent, level.riotshield_name, self ); + + if ( isdefined( level.equipment_safe_to_drop ) ) + { + if ( !self [[ level.equipment_safe_to_drop ]]( shield_ent ) ) + { + self notify( "destroy_riotshield" ); + shield_ent delete(); + item_ent delete(); + return; + } + } + + self.riotshieldretrievetrigger = item_ent; + self.riotshieldentity = shield_ent; + self thread watchdeployedriotshieldents(); + self thread deleteshieldondamage( self.riotshieldentity ); + self thread deleteshieldmodelonweaponpickup( self.riotshieldretrievetrigger ); + self thread deleteriotshieldonplayerdeath(); + self thread watchshieldtriggervisibility( self.riotshieldretrievetrigger ); + self.riotshieldentity thread watchdeployedriotshielddamage(); + return shield_ent; +} + +trackriotshield() +{ + self endon( "death" ); + self endon( "disconnect" ); + self.hasriotshield = self hasweapon( level.riotshield_name ); + self.hasriotshieldequipped = self getcurrentweapon() == level.riotshield_name; + self.shield_placement = 0; + + if ( self.hasriotshield ) + { + if ( self.hasriotshieldequipped ) + { + self.shield_placement = 1; + self updateriotshieldmodel(); + } + else + { + self.shield_placement = 2; + self updateriotshieldmodel(); + } + } + + for (;;) + { + self waittill( "weapon_change", newweapon ); + + foreach (wep in self getWeaponsListPrimaries()) + { + if (wep == newweapon) + { + self.riotshield_prev_wep = newweapon; + break; + } + } + + if ( newweapon == level.riotshield_name ) + { + if ( self.hasriotshieldequipped ) + continue; + + if ( isdefined( self.riotshieldentity ) ) + self notify( "destroy_riotshield" ); + + self.shield_placement = 1; + self updateriotshieldmodel(); + + self.hasriotshield = 1; + self.hasriotshieldequipped = 1; + continue; + } + + if ( self ismantling() && newweapon == "none" ) + continue; + + if ( self.hasriotshieldequipped ) + { + assert( self.hasriotshield ); + self.hasriotshield = self hasweapon( level.riotshield_name ); + + if ( isdefined( self.riotshield_hidden ) && self.riotshield_hidden ) + { + + } + else if ( self.hasriotshield ) + self.shield_placement = 2; + else if ( isdefined( self.shield_ent ) ) + assert( self.shield_placement == 3 ); + else + self.shield_placement = 0; + + self updateriotshieldmodel(); + self.hasriotshieldequipped = 0; + continue; + } + + if ( self.hasriotshield ) + { + if ( !self hasweapon( level.riotshield_name ) ) + { + self.shield_placement = 0; + self updateriotshieldmodel(); + self.hasriotshield = 0; + } + + continue; + } + + if ( self hasweapon( level.riotshield_name ) ) + { + self.shield_placement = 2; + self updateriotshieldmodel(); + self.hasriotshield = 1; + } + } +} \ No newline at end of file diff --git a/scripts/zm/replaced/_zm_riotshield_prison.gsc b/scripts/zm/replaced/_zm_riotshield_prison.gsc new file mode 100644 index 00000000..cf7f4c8f --- /dev/null +++ b/scripts/zm/replaced/_zm_riotshield_prison.gsc @@ -0,0 +1,147 @@ +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_weap_riotshield_prison; +#include maps\mp\zombies\_zm_buildables; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_riotshield_prison; + +doriotshielddeploy( origin, angles ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "start_riotshield_deploy" ); + self notify( "deployed_riotshield" ); + self maps\mp\zombies\_zm_buildables::track_placed_buildables( level.riotshield_name ); + + if ( isdefined( self.current_equipment ) && self.current_equipment == level.riotshield_name ) + self maps\mp\zombies\_zm_equipment::equipment_to_deployed( level.riotshield_name ); + + zoffset = level.riotshield_placement_zoffset; + shield_ent = self spawnriotshieldcover( origin + ( 0, 0, zoffset ), angles ); + item_ent = deployriotshield( self, shield_ent ); + primaries = self getweaponslistprimaries(); + + self maps\mp\zombies\_zm_weapons::switch_back_primary_weapon(self.riotshield_prev_wep); + + if ( isdefined( level.equipment_planted ) ) + self [[ level.equipment_planted ]]( shield_ent, level.riotshield_name, self ); + + if ( isdefined( level.equipment_safe_to_drop ) ) + { + if ( !self [[ level.equipment_safe_to_drop ]]( shield_ent ) ) + { + self notify( "destroy_riotshield" ); + shield_ent delete(); + item_ent delete(); + return; + } + } + + self.riotshieldretrievetrigger = item_ent; + self.riotshieldentity = shield_ent; + self thread watchdeployedriotshieldents(); + self thread deleteshieldondamage( self.riotshieldentity ); + self thread deleteshieldmodelonweaponpickup( self.riotshieldretrievetrigger ); + self thread deleteriotshieldonplayerdeath(); + self thread watchshieldtriggervisibility( self.riotshieldretrievetrigger ); + self.riotshieldentity thread watchdeployedriotshielddamage(); + return shield_ent; +} + +trackriotshield() +{ + self endon( "death" ); + self endon( "disconnect" ); + self.hasriotshield = self hasweapon( level.riotshield_name ); + self.hasriotshieldequipped = self getcurrentweapon() == level.riotshield_name; + self.shield_placement = 0; + + if ( self.hasriotshield ) + { + if ( self.hasriotshieldequipped ) + { + self.shield_placement = 1; + self updateriotshieldmodel(); + } + else + { + self.shield_placement = 2; + self updateriotshieldmodel(); + } + } + + for (;;) + { + self waittill( "weapon_change", newweapon ); + + foreach (wep in self getWeaponsListPrimaries()) + { + if (wep == newweapon) + { + self.riotshield_prev_wep = newweapon; + break; + } + } + + if ( newweapon == level.riotshield_name ) + { + if ( self.hasriotshieldequipped ) + continue; + + if ( isdefined( self.riotshieldentity ) ) + self notify( "destroy_riotshield" ); + + self.shield_placement = 1; + self updateriotshieldmodel(); + + self.hasriotshield = 1; + self.hasriotshieldequipped = 1; + continue; + } + + if ( self ismantling() && newweapon == "none" ) + continue; + + if ( self.hasriotshieldequipped ) + { + assert( self.hasriotshield ); + self.hasriotshield = self hasweapon( level.riotshield_name ); + + if ( isdefined( self.riotshield_hidden ) && self.riotshield_hidden ) + { + + } + else if ( self.hasriotshield ) + self.shield_placement = 2; + else if ( isdefined( self.shield_ent ) ) + assert( self.shield_placement == 3 ); + else + self.shield_placement = 0; + + self updateriotshieldmodel(); + self.hasriotshieldequipped = 0; + continue; + } + + if ( self.hasriotshield ) + { + if ( !self hasweapon( level.riotshield_name ) ) + { + self.shield_placement = 0; + self updateriotshieldmodel(); + self.hasriotshield = 0; + } + + continue; + } + + if ( self hasweapon( level.riotshield_name ) ) + { + self.shield_placement = 2; + self updateriotshieldmodel(); + self.hasriotshield = 1; + } + } +} \ No newline at end of file diff --git a/scripts/zm/replaced/_zm_riotshield_tomb.gsc b/scripts/zm/replaced/_zm_riotshield_tomb.gsc new file mode 100644 index 00000000..c0cfd4b5 --- /dev/null +++ b/scripts/zm/replaced/_zm_riotshield_tomb.gsc @@ -0,0 +1,147 @@ +#include maps\mp\_utility; +#include maps\mp\zombies\_zm_utility; +#include common_scripts\utility; +#include maps\mp\zombies\_zm_weap_riotshield_tomb; +#include maps\mp\zombies\_zm_buildables; +#include maps\mp\zombies\_zm_equipment; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_riotshield_tomb; + +doriotshielddeploy( origin, angles ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "start_riotshield_deploy" ); + self notify( "deployed_riotshield" ); + self maps\mp\zombies\_zm_buildables::track_placed_buildables( level.riotshield_name ); + + if ( isdefined( self.current_equipment ) && self.current_equipment == level.riotshield_name ) + self maps\mp\zombies\_zm_equipment::equipment_to_deployed( level.riotshield_name ); + + zoffset = level.riotshield_placement_zoffset; + shield_ent = self spawnriotshieldcover( origin + ( 0, 0, zoffset ), angles ); + item_ent = deployriotshield( self, shield_ent ); + primaries = self getweaponslistprimaries(); + + self maps\mp\zombies\_zm_weapons::switch_back_primary_weapon(self.riotshield_prev_wep); + + if ( isdefined( level.equipment_planted ) ) + self [[ level.equipment_planted ]]( shield_ent, level.riotshield_name, self ); + + if ( isdefined( level.equipment_safe_to_drop ) ) + { + if ( !self [[ level.equipment_safe_to_drop ]]( shield_ent ) ) + { + self notify( "destroy_riotshield" ); + shield_ent delete(); + item_ent delete(); + return; + } + } + + self.riotshieldretrievetrigger = item_ent; + self.riotshieldentity = shield_ent; + self thread watchdeployedriotshieldents(); + self thread deleteshieldondamage( self.riotshieldentity ); + self thread deleteshieldmodelonweaponpickup( self.riotshieldretrievetrigger ); + self thread deleteriotshieldonplayerdeath(); + self thread watchshieldtriggervisibility( self.riotshieldretrievetrigger ); + self.riotshieldentity thread watchdeployedriotshielddamage(); + return shield_ent; +} + +trackriotshield() +{ + self endon( "death" ); + self endon( "disconnect" ); + self.hasriotshield = self hasweapon( level.riotshield_name ); + self.hasriotshieldequipped = self getcurrentweapon() == level.riotshield_name; + self.shield_placement = 0; + + if ( self.hasriotshield ) + { + if ( self.hasriotshieldequipped ) + { + self.shield_placement = 1; + self updateriotshieldmodel(); + } + else + { + self.shield_placement = 2; + self updateriotshieldmodel(); + } + } + + for (;;) + { + self waittill( "weapon_change", newweapon ); + + foreach (wep in self getWeaponsListPrimaries()) + { + if (wep == newweapon) + { + self.riotshield_prev_wep = newweapon; + break; + } + } + + if ( newweapon == level.riotshield_name ) + { + if ( self.hasriotshieldequipped ) + continue; + + if ( isdefined( self.riotshieldentity ) ) + self notify( "destroy_riotshield" ); + + self.shield_placement = 1; + self updateriotshieldmodel(); + + self.hasriotshield = 1; + self.hasriotshieldequipped = 1; + continue; + } + + if ( self ismantling() && newweapon == "none" ) + continue; + + if ( self.hasriotshieldequipped ) + { + assert( self.hasriotshield ); + self.hasriotshield = self hasweapon( level.riotshield_name ); + + if ( isdefined( self.riotshield_hidden ) && self.riotshield_hidden ) + { + + } + else if ( self.hasriotshield ) + self.shield_placement = 2; + else if ( isdefined( self.shield_ent ) ) + assert( self.shield_placement == 3 ); + else + self.shield_placement = 0; + + self updateriotshieldmodel(); + self.hasriotshieldequipped = 0; + continue; + } + + if ( self.hasriotshield ) + { + if ( !self hasweapon( level.riotshield_name ) ) + { + self.shield_placement = 0; + self updateriotshieldmodel(); + self.hasriotshield = 0; + } + + continue; + } + + if ( self hasweapon( level.riotshield_name ) ) + { + self.shield_placement = 2; + self updateriotshieldmodel(); + self.hasriotshield = 1; + } + } +} \ No newline at end of file diff --git a/scripts/zm/zm_prison/zm_prison_reimagined.gsc b/scripts/zm/zm_prison/zm_prison_reimagined.gsc index 881da8e3..9b9f2617 100644 --- a/scripts/zm/zm_prison/zm_prison_reimagined.gsc +++ b/scripts/zm/zm_prison/zm_prison_reimagined.gsc @@ -7,6 +7,7 @@ #include scripts\zm\replaced\zm_alcatraz_classic; #include scripts\zm\replaced\_zm_afterlife; #include scripts\zm\replaced\_zm_ai_brutus; +#include scripts\zm\replaced\_zm_riotshield_prison; #include scripts\zm\replaced\_zm_weap_riotshield_prison; #include scripts\zm\replaced\zgrief; #include scripts\zm\replaced\zmeat; @@ -20,6 +21,8 @@ main() replaceFunc(maps\mp\zombies\_zm_ai_brutus::brutus_spawn, scripts\zm\replaced\_zm_ai_brutus::brutus_spawn); replaceFunc(maps\mp\zombies\_zm_ai_brutus::brutus_health_increases, scripts\zm\replaced\_zm_ai_brutus::brutus_health_increases); replaceFunc(maps\mp\zombies\_zm_ai_brutus::brutus_cleanup_at_end_of_grief_round, scripts\zm\replaced\_zm_ai_brutus::brutus_cleanup_at_end_of_grief_round); + replaceFunc(maps\mp\zombies\_zm_riotshield_prison::doriotshielddeploy, scripts\zm\replaced\_zm_riotshield_prison::doriotshielddeploy); + replaceFunc(maps\mp\zombies\_zm_riotshield_prison::trackriotshield, scripts\zm\replaced\_zm_riotshield_prison::trackriotshield); replaceFunc(maps\mp\zombies\_zm_weap_riotshield_prison::init, scripts\zm\replaced\_zm_weap_riotshield_prison::init); replaceFunc(maps\mp\zombies\_zm_weap_riotshield_prison::player_damage_shield, scripts\zm\replaced\_zm_weap_riotshield_prison::player_damage_shield); replaceFunc(maps\mp\gametypes_zm\zgrief::meat_stink_on_ground, scripts\zm\replaced\zgrief::meat_stink_on_ground); diff --git a/scripts/zm/zm_tomb/zm_tomb_reimagined.gsc b/scripts/zm/zm_tomb/zm_tomb_reimagined.gsc index 32e02db5..a3edf042 100644 --- a/scripts/zm/zm_tomb/zm_tomb_reimagined.gsc +++ b/scripts/zm/zm_tomb/zm_tomb_reimagined.gsc @@ -3,6 +3,7 @@ #include maps\mp\zombies\_zm_utility; #include maps\mp\zombies\_zm_craftables; +#include scripts\zm\replaced\_zm_riotshield_tomb; #include scripts\zm\replaced\_zm_weap_riotshield_tomb; #include scripts\zm\replaced\zm_tomb_main_quest; #include scripts\zm\replaced\zm_tomb_quest_air; @@ -15,8 +16,6 @@ main() { - replaceFunc(maps\mp\zombies\_zm_weap_riotshield_tomb::init, scripts\zm\replaced\_zm_weap_riotshield_tomb::init); - replaceFunc(maps\mp\zombies\_zm_weap_riotshield_tomb::player_damage_shield, scripts\zm\replaced\_zm_weap_riotshield_tomb::player_damage_shield); replaceFunc(maps\mp\zm_tomb_main_quest::main_quest_init, scripts\zm\replaced\zm_tomb_main_quest::main_quest_init); replaceFunc(maps\mp\zm_tomb_main_quest::watch_for_player_pickup_staff, scripts\zm\replaced\zm_tomb_main_quest::watch_for_player_pickup_staff); replaceFunc(maps\mp\zm_tomb_main_quest::staff_upgraded_reload, scripts\zm\replaced\zm_tomb_main_quest::staff_upgraded_reload); @@ -33,6 +32,10 @@ main() replaceFunc(maps\mp\zm_tomb_dig::increment_player_perk_purchase_limit, scripts\zm\replaced\zm_tomb_dig::increment_player_perk_purchase_limit); replaceFunc(maps\mp\zm_tomb_dig::dig_disconnect_watch, scripts\zm\replaced\zm_tomb_dig::dig_disconnect_watch); replaceFunc(maps\mp\zm_tomb_tank::players_on_tank_update, scripts\zm\replaced\zm_tomb_tank::players_on_tank_update); + replaceFunc(maps\mp\zombies\_zm_riotshield_tomb::doriotshielddeploy, scripts\zm\replaced\_zm_riotshield_tomb::doriotshielddeploy); + replaceFunc(maps\mp\zombies\_zm_riotshield_tomb::trackriotshield, scripts\zm\replaced\_zm_riotshield_tomb::trackriotshield); + replaceFunc(maps\mp\zombies\_zm_weap_riotshield_tomb::init, scripts\zm\replaced\_zm_weap_riotshield_tomb::init); + replaceFunc(maps\mp\zombies\_zm_weap_riotshield_tomb::player_damage_shield, scripts\zm\replaced\_zm_weap_riotshield_tomb::player_damage_shield); } init() diff --git a/scripts/zm/zm_transit/zm_transit_reimagined.gsc b/scripts/zm/zm_transit/zm_transit_reimagined.gsc index 9664839d..3960cfbd 100644 --- a/scripts/zm/zm_transit/zm_transit_reimagined.gsc +++ b/scripts/zm/zm_transit/zm_transit_reimagined.gsc @@ -6,6 +6,7 @@ #include scripts\zm\replaced\zm_transit_gamemodes; #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_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_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); replaceFunc(maps\mp\zombies\_zm_weap_riotshield::player_damage_shield, scripts\zm\replaced\_zm_weap_riotshield::player_damage_shield); replaceFunc(maps\mp\zombies\_zm_weap_jetgun::is_jetgun_firing, scripts\zm\replaced\_zm_weap_jetgun::is_jetgun_firing);