1
0
mirror of https://github.com/JezuzLizard/BO2-Reimagined.git synced 2025-06-10 15:17:57 -05:00

Zombie Shield: switch back to correct weapon after deploying

This commit is contained in:
Jbleezy
2023-03-08 01:58:19 -08:00
parent 9f617004e9
commit e7ebf36d19
7 changed files with 453 additions and 2 deletions

View File

@ -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

View File

@ -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;
}
}
}

View File

@ -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;
}
}
}

View File

@ -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;
}
}
}

View File

@ -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);

View File

@ -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()

View File

@ -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);