1
0
mirror of https://github.com/JezuzLizard/BO2-Reimagined.git synced 2025-06-11 23:57:59 -05:00

Pad empty lines around blocks

This commit is contained in:
Jbleezy
2023-12-16 16:12:15 -08:00
parent 7d83382fd3
commit 51a53928e7
82 changed files with 1013 additions and 0 deletions

View File

@ -490,6 +490,7 @@ health_bar_hud()
x = 5; x = 5;
y = -104; y = -104;
if (level.script == "zm_buried") if (level.script == "zm_buried")
{ {
y -= 25; y -= 25;
@ -580,6 +581,7 @@ shield_bar_hud()
x = 5; x = 5;
y = -104; y = -104;
if (level.script == "zm_buried") if (level.script == "zm_buried")
{ {
y -= 25; y -= 25;
@ -655,6 +657,7 @@ shield_bar_hud()
} }
health = level.zombie_vars["riotshield_hit_points"] - self.shielddamagetaken; health = level.zombie_vars["riotshield_hit_points"] - self.shielddamagetaken;
if (health < 0) if (health < 0)
{ {
health = 0; health = 0;
@ -664,6 +667,7 @@ shield_bar_hud()
offset_x = 0; offset_x = 0;
health_str = "" + self.health; health_str = "" + self.health;
for(i = 0; i < health_str.size; i++) for(i = 0; i < health_str.size; i++)
{ {
if (health_str[i] == "1") if (health_str[i] == "1")
@ -722,6 +726,7 @@ enemy_counter_hud()
while (1) while (1)
{ {
enemies = get_round_enemy_array().size + level.zombie_total; enemies = get_round_enemy_array().size + level.zombie_total;
if (level flag_exists("spawn_ghosts") && flag("spawn_ghosts")) if (level flag_exists("spawn_ghosts") && flag("spawn_ghosts"))
{ {
enemies = get_current_ghost_count(); enemies = get_current_ghost_count();
@ -970,6 +975,7 @@ zone_hud()
x = 5; x = 5;
y = -119; y = -119;
if (level.script == "zm_buried") if (level.script == "zm_buried")
{ {
y -= 25; y -= 25;
@ -2101,6 +2107,7 @@ bleedout_bar_hud_updatebar(hud)
for(i = 0; i < vars["num_intervals"]; i++) for(i = 0; i < vars["num_intervals"]; i++)
{ {
vars["time"] = vars["bleedout_time"]; vars["time"] = vars["bleedout_time"];
if(vars["time"] > vars["interval_time"]) if(vars["time"] > vars["interval_time"])
{ {
vars["time"] = vars["interval_time"]; vars["time"] = vars["interval_time"];
@ -2109,6 +2116,7 @@ bleedout_bar_hud_updatebar(hud)
vars["frac"] = 0.99 - ((i + 1) * vars["interval_frac"]); vars["frac"] = 0.99 - ((i + 1) * vars["interval_frac"]);
barwidth = int((hud.width * vars["frac"]) + 0.5); barwidth = int((hud.width * vars["frac"]) + 0.5);
if(barwidth < 1) if(barwidth < 1)
{ {
barwidth = 1; barwidth = 1;
@ -2169,6 +2177,7 @@ last_stand_pistol_swap()
else if ( self.laststandpistol == "ray_gun_zm" || self.laststandpistol == "ray_gun_upgraded_zm" || self.laststandpistol == "raygun_mark2_zm" || self.laststandpistol == "raygun_mark2_upgraded_zm" || self.laststandpistol == level.default_solo_laststandpistol ) else if ( self.laststandpistol == "ray_gun_zm" || self.laststandpistol == "ray_gun_upgraded_zm" || self.laststandpistol == "raygun_mark2_zm" || self.laststandpistol == "raygun_mark2_upgraded_zm" || self.laststandpistol == level.default_solo_laststandpistol )
{ {
amt = ammoclip; amt = ammoclip;
if ( self.hadpistol && amt > self.stored_weapon_info[self.laststandpistol].total_amt ) if ( self.hadpistol && amt > self.stored_weapon_info[self.laststandpistol].total_amt )
{ {
amt = self.stored_weapon_info[self.laststandpistol].total_amt; amt = self.stored_weapon_info[self.laststandpistol].total_amt;
@ -2179,6 +2188,7 @@ last_stand_pistol_swap()
else else
{ {
amt = ammoclip + doubleclip; amt = ammoclip + doubleclip;
if ( self.hadpistol && amt > self.stored_weapon_info[self.laststandpistol].total_amt ) if ( self.hadpistol && amt > self.stored_weapon_info[self.laststandpistol].total_amt )
{ {
amt = self.stored_weapon_info[self.laststandpistol].total_amt; amt = self.stored_weapon_info[self.laststandpistol].total_amt;
@ -2203,6 +2213,7 @@ last_stand_pistol_swap()
} }
clip_amt_add = weaponclipsize( self.laststandpistol ) - clip_amt_init; clip_amt_add = weaponclipsize( self.laststandpistol ) - clip_amt_init;
if ( clip_amt_add > amt ) if ( clip_amt_add > amt )
{ {
clip_amt_add = amt; clip_amt_add = amt;
@ -2215,6 +2226,7 @@ last_stand_pistol_swap()
if ( dual_wield_wep != "none" ) if ( dual_wield_wep != "none" )
{ {
left_clip_amt_add = weaponclipsize( dual_wield_wep ) - left_clip_amt_init; left_clip_amt_add = weaponclipsize( dual_wield_wep ) - left_clip_amt_init;
if ( left_clip_amt_add > amt ) if ( left_clip_amt_add > amt )
{ {
left_clip_amt_add = amt; left_clip_amt_add = amt;
@ -2226,6 +2238,7 @@ last_stand_pistol_swap()
} }
stock_amt = doubleclip; stock_amt = doubleclip;
if ( stock_amt > amt ) if ( stock_amt > amt )
{ {
stock_amt = amt; stock_amt = amt;
@ -2239,6 +2252,7 @@ last_stand_pistol_swap()
last_stand_restore_pistol_ammo(only_store_info = false) last_stand_restore_pistol_ammo(only_store_info = false)
{ {
self.weapon_taken_by_losing_specialty_additionalprimaryweapon = undefined; self.weapon_taken_by_losing_specialty_additionalprimaryweapon = undefined;
if ( !isDefined( self.stored_weapon_info ) ) if ( !isDefined( self.stored_weapon_info ) )
{ {
return; return;
@ -2247,9 +2261,11 @@ last_stand_restore_pistol_ammo(only_store_info = false)
weapon_inventory = self getweaponslist( 1 ); weapon_inventory = self getweaponslist( 1 );
weapon_to_restore = getarraykeys( self.stored_weapon_info ); weapon_to_restore = getarraykeys( self.stored_weapon_info );
i = 0; i = 0;
while ( i < weapon_inventory.size ) while ( i < weapon_inventory.size )
{ {
weapon = weapon_inventory[ i ]; weapon = weapon_inventory[ i ];
if(weapon != self.laststandpistol) if(weapon != self.laststandpistol)
{ {
i++; i++;
@ -2259,6 +2275,7 @@ last_stand_restore_pistol_ammo(only_store_info = false)
for ( j = 0; j < weapon_to_restore.size; j++ ) for ( j = 0; j < weapon_to_restore.size; j++ )
{ {
check_weapon = weapon_to_restore[ j ]; check_weapon = weapon_to_restore[ j ];
if ( weapon == check_weapon ) if ( weapon == check_weapon )
{ {
if (self.stored_weapon_info[ weapon ].given_amt == 0) if (self.stored_weapon_info[ weapon ].given_amt == 0)
@ -2277,10 +2294,12 @@ last_stand_restore_pistol_ammo(only_store_info = false)
last_clip = self getweaponammoclip( weapon ); last_clip = self getweaponammoclip( weapon );
last_left_clip = 0; last_left_clip = 0;
if( "none" != dual_wield_name ) if( "none" != dual_wield_name )
{ {
last_left_clip = self getweaponammoclip( dual_wield_name ); last_left_clip = self getweaponammoclip( dual_wield_name );
} }
last_stock = self getweaponammostock( weapon ); last_stock = self getweaponammostock( weapon );
last_total = last_clip + last_left_clip + last_stock; last_total = last_clip + last_left_clip + last_stock;
@ -2348,6 +2367,7 @@ last_stand_restore_pistol_ammo(only_store_info = false)
break; break;
} }
} }
i++; i++;
} }
} }
@ -2412,6 +2432,7 @@ set_lethal_grenade_init()
swap_staminup_perk() swap_staminup_perk()
{ {
vending_triggers = getentarray("zombie_vending", "targetname"); vending_triggers = getentarray("zombie_vending", "targetname");
foreach (trigger in vending_triggers) foreach (trigger in vending_triggers)
{ {
if (trigger.script_noteworthy == "specialty_longersprint") if (trigger.script_noteworthy == "specialty_longersprint")
@ -2584,6 +2605,7 @@ disable_bank_teller()
{ {
level notify( "stop_bank_teller" ); level notify( "stop_bank_teller" );
bank_teller_dmg_trig = getent( "bank_teller_tazer_trig", "targetname" ); bank_teller_dmg_trig = getent( "bank_teller_tazer_trig", "targetname" );
if(IsDefined(bank_teller_dmg_trig)) if(IsDefined(bank_teller_dmg_trig))
{ {
bank_teller_transfer_trig = getent( bank_teller_dmg_trig.target, "targetname" ); bank_teller_transfer_trig = getent( bank_teller_dmg_trig.target, "targetname" );
@ -2651,6 +2673,7 @@ add_wallbuy( name, script_noteworthy )
spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "tazer_upgrade", "targetname" ), 1, 0 ); spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "tazer_upgrade", "targetname" ), 1, 0 );
spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "buildable_wallbuy", "targetname" ), 1, 0 ); spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "buildable_wallbuy", "targetname" ), 1, 0 );
spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "claymore_purchase", "targetname" ), 1, 0 ); spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "claymore_purchase", "targetname" ), 1, 0 );
for(i = 0; i < spawnable_weapon_spawns.size; i++) for(i = 0; i < spawnable_weapon_spawns.size; i++)
{ {
if(IsDefined(spawnable_weapon_spawns[i].zombie_weapon_upgrade) && spawnable_weapon_spawns[i].zombie_weapon_upgrade == name) if(IsDefined(spawnable_weapon_spawns[i].zombie_weapon_upgrade) && spawnable_weapon_spawns[i].zombie_weapon_upgrade == name)
@ -2661,6 +2684,7 @@ add_wallbuy( name, script_noteworthy )
} }
struct = spawnable_weapon_spawns[i]; struct = spawnable_weapon_spawns[i];
break; break;
} }
} }
@ -2777,6 +2801,7 @@ weapon_inspect_watcher()
vars["curr_wep"] = self getCurrentWeapon(); vars["curr_wep"] = self getCurrentWeapon();
vars["is_primary"] = 0; vars["is_primary"] = 0;
foreach(wep in self getWeaponsListPrimaries()) foreach(wep in self getWeaponsListPrimaries())
{ {
if(wep == vars["curr_wep"]) if(wep == vars["curr_wep"])
@ -2866,6 +2891,7 @@ buildbuildables()
buildbuildable( buildable, craft = 0, solo_pool = 0, onuse ) buildbuildable( buildable, craft = 0, solo_pool = 0, onuse )
{ {
player = get_players()[0]; player = get_players()[0];
foreach (stub in level.buildable_stubs) foreach (stub in level.buildable_stubs)
{ {
if ( !isDefined( buildable ) || stub.equipname == buildable ) if ( !isDefined( buildable ) || stub.equipname == buildable )
@ -3029,10 +3055,12 @@ removebuildable( buildable, poolname )
if ( isDefined( buildable ) || stub.persistent != 3 ) if ( isDefined( buildable ) || stub.persistent != 3 )
{ {
stub maps\mp\zombies\_zm_buildables::buildablestub_remove(); stub maps\mp\zombies\_zm_buildables::buildablestub_remove();
foreach (piece in stub.buildablezone.pieces) foreach (piece in stub.buildablezone.pieces)
{ {
piece maps\mp\zombies\_zm_buildables::piece_unspawn(); piece maps\mp\zombies\_zm_buildables::piece_unspawn();
} }
maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( stub ); maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( stub );
return; return;
} }
@ -3116,6 +3144,7 @@ buildcraftables()
takecraftableparts( buildable ) takecraftableparts( buildable )
{ {
player = get_players()[ 0 ]; player = get_players()[ 0 ];
foreach (stub in level.zombie_include_craftables) foreach (stub in level.zombie_include_craftables)
{ {
if ( stub.name == buildable ) if ( stub.name == buildable )
@ -3123,6 +3152,7 @@ takecraftableparts( buildable )
foreach (piece in stub.a_piecestubs) foreach (piece in stub.a_piecestubs)
{ {
piecespawn = piece.piecespawn; piecespawn = piece.piecespawn;
if ( isDefined( piecespawn ) ) if ( isDefined( piecespawn ) )
{ {
player player_take_piece( piecespawn ); player player_take_piece( piecespawn );
@ -3137,6 +3167,7 @@ takecraftableparts( buildable )
buildcraftable( buildable ) buildcraftable( buildable )
{ {
player = get_players()[ 0 ]; player = get_players()[ 0 ];
foreach (stub in level.a_uts_craftables) foreach (stub in level.a_uts_craftables)
{ {
if ( stub.craftablestub.name == buildable ) if ( stub.craftablestub.name == buildable )
@ -3144,6 +3175,7 @@ buildcraftable( buildable )
foreach (piece in stub.craftablespawn.a_piecespawns) foreach (piece in stub.craftablespawn.a_piecespawns)
{ {
piecespawn = get_craftable_piece( stub.craftablestub.name, piece.piecename ); piecespawn = get_craftable_piece( stub.craftablestub.name, piece.piecename );
if ( isDefined( piecespawn ) ) if ( isDefined( piecespawn ) )
{ {
player player_take_piece( piecespawn ); player player_take_piece( piecespawn );
@ -3216,11 +3248,14 @@ piece_unspawn()
{ {
self.model delete(); self.model delete();
} }
self.model = undefined; self.model = undefined;
if ( isDefined( self.unitrigger ) ) if ( isDefined( self.unitrigger ) )
{ {
thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.unitrigger ); thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.unitrigger );
} }
self.unitrigger = undefined; self.unitrigger = undefined;
} }
@ -3231,10 +3266,12 @@ remove_buildable_pieces( buildable_name )
if(IsDefined(buildable.name) && buildable.name == buildable_name) if(IsDefined(buildable.name) && buildable.name == buildable_name)
{ {
pieces = buildable.buildablepieces; pieces = buildable.buildablepieces;
for(i = 0; i < pieces.size; i++) for(i = 0; i < pieces.size; i++)
{ {
pieces[i] maps\mp\zombies\_zm_buildables::piece_unspawn(); pieces[i] maps\mp\zombies\_zm_buildables::piece_unspawn();
} }
return; return;
} }
} }
@ -3380,6 +3417,7 @@ tombstone_emp()
while ( 1 ) while ( 1 )
{ {
level waittill( "emp_detonate", origin, radius ); level waittill( "emp_detonate", origin, radius );
if ( distancesquared( origin, self.origin ) < ( radius * radius ) ) if ( distancesquared( origin, self.origin ) < ( radius * radius ) )
{ {
playfx( level._effect[ "powerup_off" ], self.origin ); playfx( level._effect[ "powerup_off" ], self.origin );
@ -3425,6 +3463,7 @@ tombstone_grab()
{ {
players = get_players(); players = get_players();
i = 0; i = 0;
while ( i < players.size ) while ( i < players.size )
{ {
if ( players[ i ].is_zombie ) if ( players[ i ].is_zombie )
@ -3437,6 +3476,7 @@ tombstone_grab()
if ( isDefined( self.player ) && players[ i ] == self.player ) if ( isDefined( self.player ) && players[ i ] == self.player )
{ {
dist = distance( players[ i ].origin, self.origin ); dist = distance( players[ i ].origin, self.origin );
if ( dist < 64 ) if ( dist < 64 )
{ {
playfx( level._effect[ "powerup_grabbed_solo" ], self.origin ); playfx( level._effect[ "powerup_grabbed_solo" ], self.origin );
@ -3454,8 +3494,10 @@ tombstone_grab()
} }
} }
} }
i++; i++;
} }
wait_network_frame(); wait_network_frame();
} }
} }
@ -3504,20 +3546,24 @@ tombstone_save()
alt_wep = weaponAltWeaponName(wep); alt_wep = weaponAltWeaponName(wep);
clip_missing = weaponClipSize(wep) - self.tombstone_savedweapon_weaponsammo_clip[i]; clip_missing = weaponClipSize(wep) - self.tombstone_savedweapon_weaponsammo_clip[i];
if (clip_missing > self.tombstone_savedweapon_weaponsammo_stock[i]) if (clip_missing > self.tombstone_savedweapon_weaponsammo_stock[i])
{ {
clip_missing = self.tombstone_savedweapon_weaponsammo_stock[i]; clip_missing = self.tombstone_savedweapon_weaponsammo_stock[i];
} }
self.tombstone_savedweapon_weaponsammo_clip[i] += clip_missing; self.tombstone_savedweapon_weaponsammo_clip[i] += clip_missing;
self.tombstone_savedweapon_weaponsammo_stock[i] -= clip_missing; self.tombstone_savedweapon_weaponsammo_stock[i] -= clip_missing;
if (dualwield_wep != "none") if (dualwield_wep != "none")
{ {
clip_dualwield_missing = weaponClipSize(dualwield_wep) - self.tombstone_savedweapon_weaponsammo_clip_dualwield[i]; clip_dualwield_missing = weaponClipSize(dualwield_wep) - self.tombstone_savedweapon_weaponsammo_clip_dualwield[i];
if (clip_dualwield_missing > self.tombstone_savedweapon_weaponsammo_stock[i]) if (clip_dualwield_missing > self.tombstone_savedweapon_weaponsammo_stock[i])
{ {
clip_dualwield_missing = self.tombstone_savedweapon_weaponsammo_stock[i]; clip_dualwield_missing = self.tombstone_savedweapon_weaponsammo_stock[i];
} }
self.tombstone_savedweapon_weaponsammo_clip_dualwield[i] += clip_dualwield_missing; self.tombstone_savedweapon_weaponsammo_clip_dualwield[i] += clip_dualwield_missing;
self.tombstone_savedweapon_weaponsammo_stock[i] -= clip_dualwield_missing; self.tombstone_savedweapon_weaponsammo_stock[i] -= clip_dualwield_missing;
} }
@ -3525,10 +3571,12 @@ tombstone_save()
if (alt_wep != "none") if (alt_wep != "none")
{ {
clip_alt_missing = weaponClipSize(alt_wep) - self.tombstone_savedweapon_weaponsammo_clip_alt[i]; clip_alt_missing = weaponClipSize(alt_wep) - self.tombstone_savedweapon_weaponsammo_clip_alt[i];
if (clip_alt_missing > self.tombstone_savedweapon_weaponsammo_stock_alt[i]) if (clip_alt_missing > self.tombstone_savedweapon_weaponsammo_stock_alt[i])
{ {
clip_alt_missing = self.tombstone_savedweapon_weaponsammo_stock_alt[i]; clip_alt_missing = self.tombstone_savedweapon_weaponsammo_stock_alt[i];
} }
self.tombstone_savedweapon_weaponsammo_clip_alt[i] += clip_alt_missing; self.tombstone_savedweapon_weaponsammo_clip_alt[i] += clip_alt_missing;
self.tombstone_savedweapon_weaponsammo_stock_alt[i] -= clip_alt_missing; self.tombstone_savedweapon_weaponsammo_stock_alt[i] -= clip_alt_missing;
} }
@ -3558,34 +3606,42 @@ tombstone_save()
tombstone_save_perks( ent ) tombstone_save_perks( ent )
{ {
perk_array = []; perk_array = [];
if ( ent hasperk( "specialty_armorvest" ) ) if ( ent hasperk( "specialty_armorvest" ) )
{ {
perk_array[ perk_array.size ] = "specialty_armorvest"; perk_array[ perk_array.size ] = "specialty_armorvest";
} }
if ( ent hasperk( "specialty_deadshot" ) ) if ( ent hasperk( "specialty_deadshot" ) )
{ {
perk_array[ perk_array.size ] = "specialty_deadshot"; perk_array[ perk_array.size ] = "specialty_deadshot";
} }
if ( ent hasperk( "specialty_fastreload" ) ) if ( ent hasperk( "specialty_fastreload" ) )
{ {
perk_array[ perk_array.size ] = "specialty_fastreload"; perk_array[ perk_array.size ] = "specialty_fastreload";
} }
if ( ent hasperk( "specialty_flakjacket" ) ) if ( ent hasperk( "specialty_flakjacket" ) )
{ {
perk_array[ perk_array.size ] = "specialty_flakjacket"; perk_array[ perk_array.size ] = "specialty_flakjacket";
} }
if ( ent hasperk( "specialty_movefaster" ) ) if ( ent hasperk( "specialty_movefaster" ) )
{ {
perk_array[ perk_array.size ] = "specialty_movefaster"; perk_array[ perk_array.size ] = "specialty_movefaster";
} }
if ( ent hasperk( "specialty_quickrevive" ) ) if ( ent hasperk( "specialty_quickrevive" ) )
{ {
perk_array[ perk_array.size ] = "specialty_quickrevive"; perk_array[ perk_array.size ] = "specialty_quickrevive";
} }
if ( ent hasperk( "specialty_rof" ) ) if ( ent hasperk( "specialty_rof" ) )
{ {
perk_array[ perk_array.size ] = "specialty_rof"; perk_array[ perk_array.size ] = "specialty_rof";
} }
return perk_array; return perk_array;
} }
@ -3597,6 +3653,7 @@ tombstone_give()
} }
primary_weapons = self getWeaponsListPrimaries(); primary_weapons = self getWeaponsListPrimaries();
foreach(weapon in primary_weapons) foreach(weapon in primary_weapons)
{ {
self takeWeapon(weapon); self takeWeapon(weapon);
@ -3609,6 +3666,7 @@ tombstone_give()
primary_weapons_returned = 0; primary_weapons_returned = 0;
i = 0; i = 0;
while ( i < self.tombstone_savedweapon_weapons.size ) while ( i < self.tombstone_savedweapon_weapons.size )
{ {
if ( isdefined( self.tombstone_savedweapon_grenades ) && self.tombstone_savedweapon_weapons[ i ] == self.tombstone_savedweapon_grenades || ( isdefined( self.tombstone_savedweapon_tactical ) && self.tombstone_savedweapon_weapons[ i ] == self.tombstone_savedweapon_tactical ) ) if ( isdefined( self.tombstone_savedweapon_grenades ) && self.tombstone_savedweapon_weapons[ i ] == self.tombstone_savedweapon_grenades || ( isdefined( self.tombstone_savedweapon_tactical ) && self.tombstone_savedweapon_weapons[ i ] == self.tombstone_savedweapon_tactical ) )
@ -3720,10 +3778,12 @@ tombstone_give()
} }
current_wep = self getCurrentWeapon(); current_wep = self getCurrentWeapon();
if(!isSubStr(current_wep, "perk_bottle") && !isSubStr(current_wep, "knuckle_crack") && !isSubStr(current_wep, "flourish") && !isSubStr(current_wep, "item_meat")) if(!isSubStr(current_wep, "perk_bottle") && !isSubStr(current_wep, "knuckle_crack") && !isSubStr(current_wep, "flourish") && !isSubStr(current_wep, "item_meat"))
{ {
switched = 0; switched = 0;
primaries = self getweaponslistprimaries(); primaries = self getweaponslistprimaries();
foreach ( weapon in primaries ) foreach ( weapon in primaries )
{ {
if ( isDefined( self.tombstone_savedweapon_currentweapon ) && self.tombstone_savedweapon_currentweapon == weapon ) if ( isDefined( self.tombstone_savedweapon_currentweapon ) && self.tombstone_savedweapon_currentweapon == weapon )
@ -3745,6 +3805,7 @@ tombstone_give()
if ( isDefined( self.tombstone_perks ) && self.tombstone_perks.size > 0 ) if ( isDefined( self.tombstone_perks ) && self.tombstone_perks.size > 0 )
{ {
i = 0; i = 0;
while ( i < self.tombstone_perks.size ) while ( i < self.tombstone_perks.size )
{ {
if ( self hasperk( self.tombstone_perks[ i ] ) ) if ( self hasperk( self.tombstone_perks[ i ] ) )
@ -3866,12 +3927,14 @@ additionalprimaryweapon_stowed_weapon_refill()
if(self hasPerk("specialty_additionalprimaryweapon")) if(self hasPerk("specialty_additionalprimaryweapon"))
{ {
vars["curr_wep"] = self getCurrentWeapon(); vars["curr_wep"] = self getCurrentWeapon();
if(vars["curr_wep"] == "none") if(vars["curr_wep"] == "none")
{ {
continue; continue;
} }
primaries = self getWeaponsListPrimaries(); primaries = self getWeaponsListPrimaries();
foreach(primary in primaries) foreach(primary in primaries)
{ {
if(primary != maps\mp\zombies\_zm_weapons::get_nonalternate_weapon(vars["curr_wep"])) if(primary != maps\mp\zombies\_zm_weapons::get_nonalternate_weapon(vars["curr_wep"]))
@ -3941,6 +4004,7 @@ refill_after_time(primary)
self setWeaponAmmoStock(primary, vars["ammo_stock"] - vars["missing_clip"]); self setWeaponAmmoStock(primary, vars["ammo_stock"] - vars["missing_clip"]);
vars["dw_primary"] = weaponDualWieldWeaponName(primary); vars["dw_primary"] = weaponDualWieldWeaponName(primary);
if(vars["dw_primary"] != "none") if(vars["dw_primary"] != "none")
{ {
vars["ammo_clip"] = self getWeaponAmmoClip(vars["dw_primary"]); vars["ammo_clip"] = self getWeaponAmmoClip(vars["dw_primary"]);
@ -3957,6 +4021,7 @@ refill_after_time(primary)
} }
vars["alt_primary"] = weaponAltWeaponName(primary); vars["alt_primary"] = weaponAltWeaponName(primary);
if(vars["alt_primary"] != "none") if(vars["alt_primary"] != "none")
{ {
vars["ammo_clip"] = self getWeaponAmmoClip(vars["alt_primary"]); vars["ammo_clip"] = self getWeaponAmmoClip(vars["alt_primary"]);
@ -4044,6 +4109,7 @@ remove_status_icons_on_intermission()
level waittill("intermission"); level waittill("intermission");
players = get_players(); players = get_players();
foreach(player in players) foreach(player in players)
{ {
player.statusicon = ""; player.statusicon = "";

View File

@ -29,6 +29,7 @@ init()
enemy_location_override( zombie, enemy ) enemy_location_override( zombie, enemy )
{ {
location = enemy.origin; location = enemy.origin;
if ( is_true( self.reroute ) ) if ( is_true( self.reroute ) )
{ {
if ( isDefined( self.reroute_origin ) ) if ( isDefined( self.reroute_origin ) )
@ -36,5 +37,6 @@ enemy_location_override( zombie, enemy )
location = self.reroute_origin; location = self.reroute_origin;
} }
} }
return location; return location;
} }

View File

@ -60,6 +60,7 @@ struct_init()
for (i = 0; i < og_perk_structs.size; i++) for (i = 0; i < og_perk_structs.size; i++)
{ {
rand = randomint(og_perk_structs.size); rand = randomint(og_perk_structs.size);
if (rand != i) if (rand != i)
{ {
temp_script_noteworthy = og_perk_structs[i].script_noteworthy; temp_script_noteworthy = og_perk_structs[i].script_noteworthy;
@ -111,6 +112,7 @@ struct_init()
else if (player_respawn_point.script_noteworthy == "zone_maze_staircase") else if (player_respawn_point.script_noteworthy == "zone_maze_staircase")
{ {
spawn_array = getstructarray( player_respawn_point.target, "targetname" ); spawn_array = getstructarray( player_respawn_point.target, "targetname" );
foreach (spawn in spawn_array) foreach (spawn in spawn_array)
{ {
if (spawn.origin[0] > 5950) if (spawn.origin[0] > 5950)
@ -237,6 +239,7 @@ init_wallbuys()
{ {
og_weapon_structs = []; og_weapon_structs = [];
structs = getstructarray( "weapon_upgrade", "targetname" ); structs = getstructarray( "weapon_upgrade", "targetname" );
foreach (struct in structs) foreach (struct in structs)
{ {
if (isDefined(struct.script_noteworthy) && isSubStr(struct.script_noteworthy, "maze")) if (isDefined(struct.script_noteworthy) && isSubStr(struct.script_noteworthy, "maze"))
@ -269,6 +272,7 @@ init_barriers()
scripts\zm\replaced\utility::barrier( "collision_geo_64x64x128_standard", (3398, 898, 372), (0, 0, 0) ); scripts\zm\replaced\utility::barrier( "collision_geo_64x64x128_standard", (3398, 898, 372), (0, 0, 0) );
structs = getstructarray( "zm_perk_machine", "targetname" ); structs = getstructarray( "zm_perk_machine", "targetname" );
foreach (struct in structs) foreach (struct in structs)
{ {
scripts\zm\replaced\utility::barrier( "collision_geo_64x64x128_standard", struct.origin + (anglesToRight(struct.angles) * -9) + (0, 0, 320), struct.angles ); scripts\zm\replaced\utility::barrier( "collision_geo_64x64x128_standard", struct.origin + (anglesToRight(struct.angles) * -9) + (0, 0, 320), struct.angles );

View File

@ -119,6 +119,7 @@ set_box_weapons()
{ {
level.zombie_weapons["thompson_zm"].is_in_box = 0; level.zombie_weapons["thompson_zm"].is_in_box = 0;
} }
if(isDefined(level.zombie_weapons["beretta93r_zm"])) if(isDefined(level.zombie_weapons["beretta93r_zm"]))
{ {
level.zombie_weapons["beretta93r_zm"].is_in_box = 1; level.zombie_weapons["beretta93r_zm"].is_in_box = 1;
@ -177,6 +178,7 @@ disable_zombie_spawn_locations()
zone = level.zones[ level.zone_keys[ z ] ]; zone = level.zones[ level.zone_keys[ z ] ];
i = 0; i = 0;
while ( i < zone.spawn_locations.size ) while ( i < zone.spawn_locations.size )
{ {
if (zone.spawn_locations[i].origin == (615.8, 7875.9, 95)) if (zone.spawn_locations[i].origin == (615.8, 7875.9, 95))
@ -196,6 +198,7 @@ disable_zombie_spawn_locations()
disable_gondola_call_triggers() disable_gondola_call_triggers()
{ {
t_call_triggers = getentarray( "gondola_call_trigger", "targetname" ); t_call_triggers = getentarray( "gondola_call_trigger", "targetname" );
foreach ( trigger in t_call_triggers ) foreach ( trigger in t_call_triggers )
{ {
trigger delete(); trigger delete();
@ -205,6 +208,7 @@ disable_gondola_call_triggers()
disable_craftable_triggers() disable_craftable_triggers()
{ {
t_crafting_table = getentarray( "open_craftable_trigger", "targetname" ); t_crafting_table = getentarray( "open_craftable_trigger", "targetname" );
foreach ( trigger in t_crafting_table ) foreach ( trigger in t_crafting_table )
{ {
trigger delete(); trigger delete();
@ -214,6 +218,7 @@ disable_craftable_triggers()
disable_afterlife_props() disable_afterlife_props()
{ {
a_afterlife_props = getentarray( "afterlife_show", "targetname" ); a_afterlife_props = getentarray( "afterlife_show", "targetname" );
foreach ( m_prop in a_afterlife_props ) foreach ( m_prop in a_afterlife_props )
{ {
m_prop delete(); m_prop delete();
@ -223,6 +228,7 @@ disable_afterlife_props()
turn_afterlife_interacts_on() turn_afterlife_interacts_on()
{ {
a_afterlife_interact = getentarray( "afterlife_interact", "targetname" ); a_afterlife_interact = getentarray( "afterlife_interact", "targetname" );
foreach ( model in a_afterlife_interact ) foreach ( model in a_afterlife_interact )
{ {
if ( model.script_string == "juggernog_on" ) if ( model.script_string == "juggernog_on" )

View File

@ -15,6 +15,7 @@ struct_init()
zone_respawnpoints = []; zone_respawnpoints = [];
respawnpoints = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype(); respawnpoints = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype();
for (i = 0; i < respawnpoints.size; i++) for (i = 0; i < respawnpoints.size; i++)
{ {
if (isDefined(respawnpoints[i].script_noteworthy) && respawnpoints[i].script_noteworthy == "zone_amb_cornfield") if (isDefined(respawnpoints[i].script_noteworthy) && respawnpoints[i].script_noteworthy == "zone_amb_cornfield")
@ -37,6 +38,7 @@ struct_init()
scripts\zm\replaced\utility::register_map_spawn_group( zone_respawnpoints[zone].origin, zone, zone_respawnpoints[zone].script_int ); scripts\zm\replaced\utility::register_map_spawn_group( zone_respawnpoints[zone].origin, zone, zone_respawnpoints[zone].script_int );
respawn_array = getstructarray(zone_respawnpoints[zone].target, "targetname"); respawn_array = getstructarray(zone_respawnpoints[zone].target, "targetname");
foreach(respawn in respawn_array) foreach(respawn in respawn_array)
{ {
scripts\zm\replaced\utility::register_map_spawn( respawn.origin + (100, 0, 0), respawn.angles, zone, respawn.script_int ); scripts\zm\replaced\utility::register_map_spawn( respawn.origin + (100, 0, 0), respawn.angles, zone, respawn.script_int );
@ -55,6 +57,7 @@ struct_init()
scripts\zm\replaced\utility::register_map_spawn( (10036, -967, -186), (0, 0, 0), zone ); scripts\zm\replaced\utility::register_map_spawn( (10036, -967, -186), (0, 0, 0), zone );
structs = getstructarray( "game_mode_object", "targetname" ); structs = getstructarray( "game_mode_object", "targetname" );
foreach ( struct in structs ) foreach ( struct in structs )
{ {
if ( isDefined( struct.script_noteworthy ) && struct.script_noteworthy == "cornfield" ) if ( isDefined( struct.script_noteworthy ) && struct.script_noteworthy == "cornfield" )
@ -240,6 +243,7 @@ disable_zombie_spawn_locations()
zone = level.zones[ level.zone_keys[ z ] ]; zone = level.zones[ level.zone_keys[ z ] ];
i = 0; i = 0;
while ( i < zone.spawn_locations.size ) while ( i < zone.spawn_locations.size )
{ {
if (zone.spawn_locations[i].origin[0] <= 9700) if (zone.spawn_locations[i].origin[0] <= 9700)

View File

@ -16,6 +16,7 @@ struct_init()
ind = 0; ind = 0;
respawnpoints = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype(); respawnpoints = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype();
for(i = 0; i < respawnpoints.size; i++) for(i = 0; i < respawnpoints.size; i++)
{ {
if(respawnpoints[i].script_noteworthy == "zone_gas") if(respawnpoints[i].script_noteworthy == "zone_gas")
@ -29,6 +30,7 @@ struct_init()
scripts\zm\replaced\utility::register_map_spawn_group( respawnpoints[ind].origin, zone, respawnpoints[ind].script_int ); scripts\zm\replaced\utility::register_map_spawn_group( respawnpoints[ind].origin, zone, respawnpoints[ind].script_int );
respawn_array = getstructarray(respawnpoints[ind].target, "targetname"); respawn_array = getstructarray(respawnpoints[ind].target, "targetname");
foreach(respawn in respawn_array) foreach(respawn in respawn_array)
{ {
if(respawn.script_int == 2) if(respawn.script_int == 2)
@ -64,6 +66,7 @@ struct_init()
scripts\zm\replaced\utility::register_map_spawn( (-5895, -6984, -30), (0, 0, 0), zone ); scripts\zm\replaced\utility::register_map_spawn( (-5895, -6984, -30), (0, 0, 0), zone );
gameObjects = getEntArray( "script_model", "classname" ); gameObjects = getEntArray( "script_model", "classname" );
foreach ( object in gameObjects ) foreach ( object in gameObjects )
{ {
if ( isDefined( object.script_noteworthy ) && object.script_noteworthy == getDvar( "ui_zm_mapstartlocation" ) ) if ( isDefined( object.script_noteworthy ) && object.script_noteworthy == getDvar( "ui_zm_mapstartlocation" ) )
@ -188,6 +191,7 @@ disable_zombie_spawn_locations()
zone = level.zones[ level.zone_keys[ z ] ]; zone = level.zones[ level.zone_keys[ z ] ];
i = 0; i = 0;
while ( i < zone.spawn_locations.size ) while ( i < zone.spawn_locations.size )
{ {
if ( zone.spawn_locations[ i ].targetname == "zone_trans_diner_spawners") if ( zone.spawn_locations[ i ].targetname == "zone_trans_diner_spawners")

View File

@ -19,6 +19,7 @@ struct_init()
ind = 0; ind = 0;
respawnpoints = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype(); respawnpoints = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype();
for(i = 0; i < respawnpoints.size; i++) for(i = 0; i < respawnpoints.size; i++)
{ {
if(respawnpoints[i].script_noteworthy == "zone_prr") if(respawnpoints[i].script_noteworthy == "zone_prr")
@ -44,9 +45,11 @@ struct_init()
scripts\zm\replaced\utility::register_map_spawn_group( respawnpoints[ind].origin, zone, respawnpoints[ind].script_int ); scripts\zm\replaced\utility::register_map_spawn_group( respawnpoints[ind].origin, zone, respawnpoints[ind].script_int );
respawn_array = getstructarray(respawnpoints[ind].target, "targetname"); respawn_array = getstructarray(respawnpoints[ind].target, "targetname");
foreach(respawn in respawn_array) foreach(respawn in respawn_array)
{ {
angles = respawn.angles; angles = respawn.angles;
if (respawn.origin[0] < 12200) if (respawn.origin[0] < 12200)
{ {
angles += (0, 90, 0); angles += (0, 90, 0);
@ -164,6 +167,7 @@ disable_zombie_spawn_locations()
disable_player_spawn_locations() disable_player_spawn_locations()
{ {
respawnpoints = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype(); respawnpoints = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype();
foreach (respawnpoint in respawnpoints) foreach (respawnpoint in respawnpoints)
{ {
if (respawnpoint.script_noteworthy == "zone_pow_warehouse") if (respawnpoint.script_noteworthy == "zone_pow_warehouse")

View File

@ -98,6 +98,7 @@ disable_zombie_spawn_locations()
zone = level.zones[ level.zone_keys[ z ] ]; zone = level.zones[ level.zone_keys[ z ] ];
i = 0; i = 0;
while ( i < zone.spawn_locations.size ) while ( i < zone.spawn_locations.size )
{ {
if ( zone.spawn_locations[ i ].origin == ( -11447, -3424, 254.2 ) ) if ( zone.spawn_locations[ i ].origin == ( -11447, -3424, 254.2 ) )

View File

@ -41,6 +41,7 @@ get_assigned_team()
teamplayers["allies"] = 0; teamplayers["allies"] = 0;
players = get_players(); players = get_players();
foreach ( player in players ) foreach ( player in players )
{ {
if ( !isDefined(player.team) || (player.team != "axis" && player.team != "allies") ) if ( !isDefined(player.team) || (player.team != "axis" && player.team != "allies") )
@ -59,6 +60,7 @@ get_assigned_team()
if ( teamplayers["axis"] <= teamplayers["allies"] ) if ( teamplayers["axis"] <= teamplayers["allies"] )
{ {
guids = strTok(getDvar("team_axis"), " "); guids = strTok(getDvar("team_axis"), " ");
foreach ( guid in guids ) foreach ( guid in guids )
{ {
if ( self getguid() == int(guid) ) if ( self getguid() == int(guid) )
@ -66,6 +68,7 @@ get_assigned_team()
arrayRemoveValue(guids, guid); arrayRemoveValue(guids, guid);
guid_text = ""; guid_text = "";
foreach (guid in guids) foreach (guid in guids)
{ {
guid_text += guid + " "; guid_text += guid + " ";
@ -81,6 +84,7 @@ get_assigned_team()
if ( teamplayers["allies"] <= teamplayers["axis"] ) if ( teamplayers["allies"] <= teamplayers["axis"] )
{ {
guids = strTok(getDvar("team_allies"), " "); guids = strTok(getDvar("team_allies"), " ");
foreach ( guid in guids ) foreach ( guid in guids )
{ {
if ( self getguid() == int(guid) ) if ( self getguid() == int(guid) )
@ -88,6 +92,7 @@ get_assigned_team()
arrayRemoveValue(guids, guid); arrayRemoveValue(guids, guid);
guid_text = ""; guid_text = "";
foreach (guid in guids) foreach (guid in guids)
{ {
guid_text += guid + " "; guid_text += guid + " ";

View File

@ -329,6 +329,7 @@ round_think( restart = 0 )
if (!is_gametype_active("zgrief")) if (!is_gametype_active("zgrief"))
{ {
level.player_starting_points = (level.round_number + 1) * 500; level.player_starting_points = (level.round_number + 1) * 500;
if (level.player_starting_points > 10000) if (level.player_starting_points > 10000)
{ {
level.player_starting_points = 10000; level.player_starting_points = 10000;
@ -459,6 +460,7 @@ spectators_respawn()
thread refresh_player_navcard_hud(); thread refresh_player_navcard_hud();
new_score = (level.round_number + 1) * 250; new_score = (level.round_number + 1) * 250;
if (new_score > 1500) if (new_score > 1500)
{ {
new_score = 1500; new_score = 1500;
@ -610,6 +612,7 @@ fade_out_intro_screen_zm( hold_black_time, fade_out_time, destroyed_afterwards )
level.passed_introscreen = 1; level.passed_introscreen = 1;
players = get_players(); players = get_players();
foreach (player in players) foreach (player in players)
{ {
player setclientuivisibilityflag( "hud_visible", 1 ); player setclientuivisibilityflag( "hud_visible", 1 );
@ -627,6 +630,7 @@ fade_out_intro_screen_zm( hold_black_time, fade_out_time, destroyed_afterwards )
} }
players = get_players(); players = get_players();
for ( i = 0; i < players.size; i++ ) for ( i = 0; i < players.size; i++ )
{ {
if ( !( isdefined( level.host_ended_game ) && level.host_ended_game ) ) if ( !( isdefined( level.host_ended_game ) && level.host_ended_game ) )
@ -667,6 +671,7 @@ wait_for_all_players_ready()
} }
num_players = get_number_of_waiting_players(); num_players = get_number_of_waiting_players();
while ( num_players < level.pregame_minplayers ) while ( num_players < level.pregame_minplayers )
{ {
if (is_gametype_active("zgrief")) if (is_gametype_active("zgrief"))
@ -675,6 +680,7 @@ wait_for_all_players_ready()
} }
players = get_players(); players = get_players();
foreach ( player in players ) foreach ( player in players )
{ {
if ( is_true( player.afterlife ) ) if ( is_true( player.afterlife ) )
@ -688,6 +694,7 @@ wait_for_all_players_ready()
num_waiting_for = level.pregame_minplayers - num_players; num_waiting_for = level.pregame_minplayers - num_players;
players_str = "PLAYERS"; players_str = "PLAYERS";
if ( num_waiting_for == 1 ) if ( num_waiting_for == 1 )
{ {
players_str = "PLAYER"; players_str = "PLAYER";
@ -813,6 +820,7 @@ wait_for_all_players_ready()
num_waiting_for = players.size - num_ready; num_waiting_for = players.size - num_ready;
players_str = "PLAYERS"; players_str = "PLAYERS";
if ( num_waiting_for == 1 ) if ( num_waiting_for == 1 )
{ {
players_str = "PLAYER"; players_str = "PLAYER";
@ -1044,6 +1052,7 @@ last_stand_best_pistol()
ammo_count = self getammocount( current_weapons[i] ); ammo_count = self getammocount( current_weapons[i] );
dual_wield_name = weapondualwieldweaponname( current_weapons[i] ); dual_wield_name = weapondualwieldweaponname( current_weapons[i] );
if ( dual_wield_name != "none" ) if ( dual_wield_name != "none" )
{ {
ammo_count += self getweaponammoclip( dual_wield_name ); ammo_count += self getweaponammoclip( dual_wield_name );
@ -1105,6 +1114,7 @@ can_track_ammo( weap )
case "alcatraz_shield_zm": case "alcatraz_shield_zm":
case "tomb_shield_zm": case "tomb_shield_zm":
return false; return false;
default: default:
if ( is_melee_weapon( weap ) || is_zombie_perk_bottle( weap ) || is_placeable_mine( weap ) || is_equipment( weap ) || issubstr( weap, "knife_ballistic_" ) || getsubstr( weap, 0, 3 ) == "gl_" || weaponfuellife( weap ) > 0 || weap == level.revive_tool ) if ( is_melee_weapon( weap ) || is_zombie_perk_bottle( weap ) || is_placeable_mine( weap ) || is_equipment( weap ) || issubstr( weap, "knife_ballistic_" ) || getsubstr( weap, 0, 3 ) == "gl_" || weaponfuellife( weap ) > 0 || weap == level.revive_tool )
return false; return false;
@ -1144,20 +1154,24 @@ take_additionalprimaryweapon()
alt_name = weaponAltWeaponName(name); alt_name = weaponAltWeaponName(name);
clip_missing = weaponClipSize(name) - self.a_saved_weapon["clip"]; clip_missing = weaponClipSize(name) - self.a_saved_weapon["clip"];
if (clip_missing > self.a_saved_weapon["stock"]) if (clip_missing > self.a_saved_weapon["stock"])
{ {
clip_missing = self.a_saved_weapon["stock"]; clip_missing = self.a_saved_weapon["stock"];
} }
self.a_saved_weapon["clip"] += clip_missing; self.a_saved_weapon["clip"] += clip_missing;
self.a_saved_weapon["stock"] -= clip_missing; self.a_saved_weapon["stock"] -= clip_missing;
if (dw_name != "none") if (dw_name != "none")
{ {
clip_dualwield_missing = weaponClipSize(dw_name) - self.a_saved_weapon["lh_clip"]; clip_dualwield_missing = weaponClipSize(dw_name) - self.a_saved_weapon["lh_clip"];
if (clip_dualwield_missing > self.a_saved_weapon["stock"]) if (clip_dualwield_missing > self.a_saved_weapon["stock"])
{ {
clip_dualwield_missing = self.a_saved_weapon["stock"]; clip_dualwield_missing = self.a_saved_weapon["stock"];
} }
self.a_saved_weapon["lh_clip"] += clip_dualwield_missing; self.a_saved_weapon["lh_clip"] += clip_dualwield_missing;
self.a_saved_weapon["stock"] -= clip_dualwield_missing; self.a_saved_weapon["stock"] -= clip_dualwield_missing;
} }
@ -1165,10 +1179,12 @@ take_additionalprimaryweapon()
if (alt_name != "none") if (alt_name != "none")
{ {
clip_alt_missing = weaponClipSize(alt_name) - self.a_saved_weapon["alt_clip"]; clip_alt_missing = weaponClipSize(alt_name) - self.a_saved_weapon["alt_clip"];
if (clip_alt_missing > self.a_saved_weapon["alt_stock"]) if (clip_alt_missing > self.a_saved_weapon["alt_stock"])
{ {
clip_alt_missing = self.a_saved_weapon["alt_stock"]; clip_alt_missing = self.a_saved_weapon["alt_stock"];
} }
self.a_saved_weapon["alt_clip"] += clip_alt_missing; self.a_saved_weapon["alt_clip"] += clip_alt_missing;
self.a_saved_weapon["alt_stock"] -= clip_alt_missing; self.a_saved_weapon["alt_stock"] -= clip_alt_missing;
} }
@ -1516,6 +1532,7 @@ callback_playerdamage( einflictor, eattacker, idamage, idflags, smeansofdeath, s
if ( isDefined( eattacker ) && isplayer( eattacker ) && eattacker.sessionteam == self.sessionteam && !eattacker hasperk( "specialty_noname" ) && isDefined( self.is_zombie ) && !self.is_zombie ) if ( isDefined( eattacker ) && isplayer( eattacker ) && eattacker.sessionteam == self.sessionteam && !eattacker hasperk( "specialty_noname" ) && isDefined( self.is_zombie ) && !self.is_zombie )
{ {
self maps\mp\zombies\_zm::process_friendly_fire_callbacks( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); self maps\mp\zombies\_zm::process_friendly_fire_callbacks( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex );
if ( self != eattacker ) if ( self != eattacker )
{ {
return; return;
@ -1525,10 +1542,12 @@ callback_playerdamage( einflictor, eattacker, idamage, idflags, smeansofdeath, s
return; return;
} }
} }
if ( is_true( level.pers_upgrade_insta_kill ) ) if ( is_true( level.pers_upgrade_insta_kill ) )
{ {
self maps\mp\zombies\_zm_pers_upgrades_functions::pers_insta_kill_melee_swipe( smeansofdeath, eattacker ); self maps\mp\zombies\_zm_pers_upgrades_functions::pers_insta_kill_melee_swipe( smeansofdeath, eattacker );
} }
if ( isDefined( self.overrideplayerdamage ) ) if ( isDefined( self.overrideplayerdamage ) )
{ {
idamage = self [[ self.overrideplayerdamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); idamage = self [[ self.overrideplayerdamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime );
@ -1537,20 +1556,24 @@ callback_playerdamage( einflictor, eattacker, idamage, idflags, smeansofdeath, s
{ {
idamage = self [[ level.overrideplayerdamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ); idamage = self [[ level.overrideplayerdamage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime );
} }
if ( is_true( self.magic_bullet_shield ) ) if ( is_true( self.magic_bullet_shield ) )
{ {
maxhealth = self.maxhealth; maxhealth = self.maxhealth;
self.health += idamage; self.health += idamage;
self.maxhealth = maxhealth; self.maxhealth = maxhealth;
} }
if ( isDefined( self.divetoprone ) && self.divetoprone == 1 ) if ( isDefined( self.divetoprone ) && self.divetoprone == 1 )
{ {
if ( smeansofdeath == "MOD_GRENADE_SPLASH" ) if ( smeansofdeath == "MOD_GRENADE_SPLASH" )
{ {
dist = distance2d( vpoint, self.origin ); dist = distance2d( vpoint, self.origin );
if ( dist > 32 ) if ( dist > 32 )
{ {
dot_product = vectordot( anglesToForward( self.angles ), vdir ); dot_product = vectordot( anglesToForward( self.angles ), vdir );
if ( dot_product > 0 ) if ( dot_product > 0 )
{ {
idamage = int( idamage * 0.5 ); idamage = int( idamage * 0.5 );
@ -1558,6 +1581,7 @@ callback_playerdamage( einflictor, eattacker, idamage, idflags, smeansofdeath, s
} }
} }
} }
if ( isDefined( level.prevent_player_damage ) ) if ( isDefined( level.prevent_player_damage ) )
{ {
if ( self [[ level.prevent_player_damage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) ) if ( self [[ level.prevent_player_damage ]]( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) )
@ -1565,7 +1589,9 @@ callback_playerdamage( einflictor, eattacker, idamage, idflags, smeansofdeath, s
return; return;
} }
} }
idflags |= level.idflags_no_knockback; idflags |= level.idflags_no_knockback;
if ( idamage > 0 && shitloc == "riotshield" ) if ( idamage > 0 && shitloc == "riotshield" )
{ {
shitloc = "torso_upper"; shitloc = "torso_upper";
@ -1587,6 +1613,7 @@ getfreespawnpoint( spawnpoints, player )
{ {
game[ "spawns_randomized" ] = 1; game[ "spawns_randomized" ] = 1;
random_chance = randomint( 100 ); random_chance = randomint( 100 );
if ( random_chance > 50 ) if ( random_chance > 50 )
{ {
set_game_var( "side_selection", 1 ); set_game_var( "side_selection", 1 );
@ -1598,6 +1625,7 @@ getfreespawnpoint( spawnpoints, player )
} }
side_selection = get_game_var( "side_selection" ); side_selection = get_game_var( "side_selection" );
if ( get_game_var( "switchedsides" ) ) if ( get_game_var( "switchedsides" ) )
{ {
if ( side_selection == 2 ) if ( side_selection == 2 )
@ -1616,6 +1644,7 @@ getfreespawnpoint( spawnpoints, player )
if ( isdefined( player ) && isdefined( player.team ) ) if ( isdefined( player ) && isdefined( player.team ) )
{ {
i = 0; i = 0;
while ( isdefined( spawnpoints ) && i < spawnpoints.size ) while ( isdefined( spawnpoints ) && i < spawnpoints.size )
{ {
if ( side_selection == 1 ) if ( side_selection == 1 )
@ -1741,6 +1770,7 @@ check_for_valid_spawn_near_team( revivee, return_struct )
if ( spawn_points[ j ].locked == 0 ) if ( spawn_points[ j ].locked == 0 )
{ {
plyr_dist = distancesquared( players[ i ].origin, spawn_points[ j ].origin ); plyr_dist = distancesquared( players[ i ].origin, spawn_points[ j ].origin );
if ( plyr_dist < ideal_distance * ideal_distance ) if ( plyr_dist < ideal_distance * ideal_distance )
{ {
if ( plyr_dist < closest_distance ) if ( plyr_dist < closest_distance )
@ -1769,6 +1799,7 @@ check_for_valid_spawn_near_team( revivee, return_struct )
if ( isdefined( closest_group ) ) if ( isdefined( closest_group ) )
{ {
spawn_location = get_valid_spawn_location( revivee, spawn_points, closest_group, return_struct ); spawn_location = get_valid_spawn_location( revivee, spawn_points, closest_group, return_struct );
if ( isdefined( spawn_location ) ) if ( isdefined( spawn_location ) )
{ {
return spawn_location; return spawn_location;
@ -1795,6 +1826,7 @@ check_for_valid_spawn_near_team( revivee, return_struct )
if ( spawn_points[ j ].locked == 0 ) if ( spawn_points[ j ].locked == 0 )
{ {
plyr_dist = distancesquared( self.origin, spawn_points[ j ].origin ); plyr_dist = distancesquared( self.origin, spawn_points[ j ].origin );
if ( plyr_dist < ideal_distance * ideal_distance ) if ( plyr_dist < ideal_distance * ideal_distance )
{ {
if ( plyr_dist < closest_distance ) if ( plyr_dist < closest_distance )
@ -1822,6 +1854,7 @@ check_for_valid_spawn_near_team( revivee, return_struct )
if ( isdefined( closest_group ) ) if ( isdefined( closest_group ) )
{ {
spawn_location = get_valid_spawn_location( revivee, spawn_points, closest_group, return_struct ); spawn_location = get_valid_spawn_location( revivee, spawn_points, closest_group, return_struct );
if ( isdefined( spawn_location ) ) if ( isdefined( spawn_location ) )
{ {
return spawn_location; return spawn_location;
@ -1878,6 +1911,7 @@ player_damage_override( einflictor, eattacker, idamage, idflags, smeansofdeath,
if ( is_true( self.use_adjusted_grenade_damage ) ) if ( is_true( self.use_adjusted_grenade_damage ) )
{ {
self.use_adjusted_grenade_damage = undefined; self.use_adjusted_grenade_damage = undefined;
if ( self.health > idamage ) if ( self.health > idamage )
{ {
return idamage; return idamage;
@ -1968,6 +2002,7 @@ player_damage_override( einflictor, eattacker, idamage, idflags, smeansofdeath,
} }
canexert = 1; canexert = 1;
if ( is_true( level.pers_upgrade_flopper ) ) if ( is_true( level.pers_upgrade_flopper ) )
{ {
if ( is_true( self.pers_upgrades_awarded[ "flopper" ] ) ) if ( is_true( self.pers_upgrades_awarded[ "flopper" ] ) )
@ -2032,6 +2067,7 @@ player_damage_override( einflictor, eattacker, idamage, idflags, smeansofdeath,
} }
vars = []; vars = [];
if (!self hasPerk("specialty_flakjacket")) if (!self hasPerk("specialty_flakjacket"))
{ {
// remove fall damage being based off max health // remove fall damage being based off max health
@ -2040,11 +2076,13 @@ player_damage_override( einflictor, eattacker, idamage, idflags, smeansofdeath,
// increase fall damage beyond 110 // increase fall damage beyond 110
vars["max_damage"] = 110; vars["max_damage"] = 110;
if (idamage >= vars["max_damage"]) if (idamage >= vars["max_damage"])
{ {
vars["velocity"] = abs(self.fall_velocity); vars["velocity"] = abs(self.fall_velocity);
vars["min_velocity"] = getDvarInt("bg_fallDamageMinHeight") * 3.25; vars["min_velocity"] = getDvarInt("bg_fallDamageMinHeight") * 3.25;
vars["max_velocity"] = getDvarInt("bg_fallDamageMaxHeight") * 2.5; vars["max_velocity"] = getDvarInt("bg_fallDamageMaxHeight") * 2.5;
if (self.divetoprone) if (self.divetoprone)
{ {
vars["min_velocity"] = getDvarInt("dtp_fall_damage_min_height") * 4.5; vars["min_velocity"] = getDvarInt("dtp_fall_damage_min_height") * 4.5;
@ -2062,6 +2100,7 @@ player_damage_override( einflictor, eattacker, idamage, idflags, smeansofdeath,
finaldamage = idamage; finaldamage = idamage;
} }
} }
if ( smeansofdeath == "MOD_PROJECTILE" || smeansofdeath == "MOD_PROJECTILE_SPLASH" || smeansofdeath == "MOD_GRENADE" || smeansofdeath == "MOD_GRENADE_SPLASH" ) if ( smeansofdeath == "MOD_PROJECTILE" || smeansofdeath == "MOD_PROJECTILE_SPLASH" || smeansofdeath == "MOD_GRENADE" || smeansofdeath == "MOD_GRENADE_SPLASH" )
{ {
if ( self hasperk( "specialty_flakjacket" ) ) if ( self hasperk( "specialty_flakjacket" ) )
@ -2113,6 +2152,7 @@ player_damage_override( einflictor, eattacker, idamage, idflags, smeansofdeath,
return finaldamage; return finaldamage;
} }
if ( isDefined( eattacker ) ) if ( isDefined( eattacker ) )
{ {
if ( isDefined( eattacker.animname ) && eattacker.animname == "zombie_dog" ) if ( isDefined( eattacker.animname ) && eattacker.animname == "zombie_dog" )
@ -2164,6 +2204,7 @@ player_damage_override( einflictor, eattacker, idamage, idflags, smeansofdeath,
players = get_players(); players = get_players();
count = 0; count = 0;
for ( i = 0; i < players.size; i++ ) for ( i = 0; i < players.size; i++ )
{ {
if ( players[ i ] == self || players[ i ].is_zombie || players[ i ] maps\mp\zombies\_zm_laststand::player_is_in_laststand() || players[ i ].sessionstate == "spectator" ) if ( players[ i ] == self || players[ i ].is_zombie || players[ i ] maps\mp\zombies\_zm_laststand::player_is_in_laststand() || players[ i ].sessionstate == "spectator" )
@ -2178,11 +2219,13 @@ player_damage_override( einflictor, eattacker, idamage, idflags, smeansofdeath,
{ {
self thread maps\mp\zombies\_zm::wait_and_revive(); self thread maps\mp\zombies\_zm::wait_and_revive();
} }
return finaldamage; return finaldamage;
} }
solo_death = self is_solo_death( players ); solo_death = self is_solo_death( players );
non_solo_death = self is_non_solo_death( players, count ); non_solo_death = self is_non_solo_death( players, count );
if ( ( solo_death || non_solo_death ) && !is_true( level.no_end_game_check ) ) if ( ( solo_death || non_solo_death ) && !is_true( level.no_end_game_check ) )
{ {
level notify( "stop_suicide_trigger" ); level notify( "stop_suicide_trigger" );
@ -2264,12 +2307,14 @@ is_solo_death( players )
} }
active_perks = 0; active_perks = 0;
if(isDefined(self.perks_active)) if(isDefined(self.perks_active))
{ {
active_perks = self.perks_active.size; active_perks = self.perks_active.size;
} }
disabled_perks = 0; disabled_perks = 0;
if(isDefined(self.disabled_perks)) if(isDefined(self.disabled_perks))
{ {
disabled_perks = self.disabled_perks.size; disabled_perks = self.disabled_perks.size;
@ -2300,31 +2345,39 @@ player_laststand( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, s
self allowjump( 0 ); self allowjump( 0 );
currweapon = self getcurrentweapon(); currweapon = self getcurrentweapon();
statweapon = currweapon; statweapon = currweapon;
if ( is_alt_weapon( statweapon ) ) if ( is_alt_weapon( statweapon ) )
{ {
statweapon = weaponaltweaponname( statweapon ); statweapon = weaponaltweaponname( statweapon );
} }
self addweaponstat( statweapon, "deathsDuringUse", 1 ); self addweaponstat( statweapon, "deathsDuringUse", 1 );
if ( is_true( self.hasperkspecialtytombstone ) ) if ( is_true( self.hasperkspecialtytombstone ) )
{ {
self.laststand_perks = scripts\zm\_zm_reimagined::tombstone_save_perks( self ); self.laststand_perks = scripts\zm\_zm_reimagined::tombstone_save_perks( self );
} }
if ( isDefined( self.pers_upgrades_awarded[ "perk_lose" ] ) && self.pers_upgrades_awarded[ "perk_lose" ] ) if ( isDefined( self.pers_upgrades_awarded[ "perk_lose" ] ) && self.pers_upgrades_awarded[ "perk_lose" ] )
{ {
self maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_perk_lose_save(); self maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_perk_lose_save();
} }
players = get_players(); players = get_players();
if ( players.size == 1 && flag( "solo_game" ) ) if ( players.size == 1 && flag( "solo_game" ) )
{ {
if ( self.solo_lives_given < 3 ) if ( self.solo_lives_given < 3 )
{ {
active_perks = 0; active_perks = 0;
if(isDefined(self.perks_active)) if(isDefined(self.perks_active))
{ {
active_perks = self.perks_active.size; active_perks = self.perks_active.size;
} }
disabled_perks = 0; disabled_perks = 0;
if(isDefined(self.disabled_perks)) if(isDefined(self.disabled_perks))
{ {
disabled_perks = self.disabled_perks.size; disabled_perks = self.disabled_perks.size;
@ -2336,10 +2389,12 @@ player_laststand( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, s
} }
} }
} }
if ( self hasperk( "specialty_additionalprimaryweapon" ) ) if ( self hasperk( "specialty_additionalprimaryweapon" ) )
{ {
self.weapon_taken_by_losing_specialty_additionalprimaryweapon = maps\mp\zombies\_zm::take_additionalprimaryweapon(); self.weapon_taken_by_losing_specialty_additionalprimaryweapon = maps\mp\zombies\_zm::take_additionalprimaryweapon();
} }
if ( is_true( self.hasperkspecialtytombstone ) ) if ( is_true( self.hasperkspecialtytombstone ) )
{ {
self [[ level.tombstone_laststand_func ]](); self [[ level.tombstone_laststand_func ]]();
@ -2351,12 +2406,14 @@ player_laststand( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, s
self notify( "specialty_scavenger_stop" ); self notify( "specialty_scavenger_stop" );
} }
} }
self clear_is_drinking(); self clear_is_drinking();
self thread maps\mp\zombies\_zm::remove_deadshot_bottle(); self thread maps\mp\zombies\_zm::remove_deadshot_bottle();
self thread maps\mp\zombies\_zm::remote_revive_watch(); self thread maps\mp\zombies\_zm::remote_revive_watch();
self maps\mp\zombies\_zm_score::player_downed_penalty(); self maps\mp\zombies\_zm_score::player_downed_penalty();
self disableoffhandweapons(); self disableoffhandweapons();
self thread maps\mp\zombies\_zm::last_stand_grenade_save_and_return(); self thread maps\mp\zombies\_zm::last_stand_grenade_save_and_return();
if ( smeansofdeath != "MOD_SUICIDE" && smeansofdeath != "MOD_FALLING" ) if ( smeansofdeath != "MOD_SUICIDE" && smeansofdeath != "MOD_FALLING" )
{ {
if ( !is_true( self.intermission ) ) if ( !is_true( self.intermission ) )
@ -2371,23 +2428,29 @@ player_laststand( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, s
} }
} }
} }
bbprint( "zombie_playerdeaths", "round %d playername %s deathtype %s x %f y %f z %f", level.round_number, self.name, "downed", self.origin ); bbprint( "zombie_playerdeaths", "round %d playername %s deathtype %s x %f y %f z %f", level.round_number, self.name, "downed", self.origin );
if ( isDefined( level._zombie_minigun_powerup_last_stand_func ) ) if ( isDefined( level._zombie_minigun_powerup_last_stand_func ) )
{ {
self thread [[ level._zombie_minigun_powerup_last_stand_func ]](); self thread [[ level._zombie_minigun_powerup_last_stand_func ]]();
} }
if ( isDefined( level._zombie_tesla_powerup_last_stand_func ) ) if ( isDefined( level._zombie_tesla_powerup_last_stand_func ) )
{ {
self thread [[ level._zombie_tesla_powerup_last_stand_func ]](); self thread [[ level._zombie_tesla_powerup_last_stand_func ]]();
} }
if ( self hasperk( "specialty_grenadepulldeath" ) ) if ( self hasperk( "specialty_grenadepulldeath" ) )
{ {
b_alt_visionset = 1; b_alt_visionset = 1;
if ( isDefined( level.custom_laststand_func ) ) if ( isDefined( level.custom_laststand_func ) )
{ {
self thread [[ level.custom_laststand_func ]](); self thread [[ level.custom_laststand_func ]]();
} }
} }
if ( is_true( self.intermission ) ) if ( is_true( self.intermission ) )
{ {
bbprint( "zombie_playerdeaths", "round %d playername %s deathtype %s x %f y %f z %f", level.round_number, self.name, "died", self.origin ); bbprint( "zombie_playerdeaths", "round %d playername %s deathtype %s x %f y %f z %f", level.round_number, self.name, "died", self.origin );
@ -2395,6 +2458,7 @@ player_laststand( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, s
self stopsounds(); self stopsounds();
level waittill( "forever" ); level waittill( "forever" );
} }
if ( !b_alt_visionset ) if ( !b_alt_visionset )
{ {
visionsetlaststand( "zombie_last_stand", 1 ); visionsetlaststand( "zombie_last_stand", 1 );
@ -2446,15 +2510,19 @@ player_spawn_protection_timeout()
wait_and_revive() wait_and_revive()
{ {
flag_set( "wait_and_revive" ); flag_set( "wait_and_revive" );
if ( isDefined( self.waiting_to_revive ) && self.waiting_to_revive == 1 ) if ( isDefined( self.waiting_to_revive ) && self.waiting_to_revive == 1 )
{ {
return; return;
} }
if ( is_true( self.pers_upgrades_awarded[ "perk_lose" ] ) ) if ( is_true( self.pers_upgrades_awarded[ "perk_lose" ] ) )
{ {
self maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_perk_lose_save(); self maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_perk_lose_save();
} }
self.waiting_to_revive = 1; self.waiting_to_revive = 1;
if ( isDefined( level.exit_level_func ) ) if ( isDefined( level.exit_level_func ) )
{ {
self thread [[ level.exit_level_func ]](); self thread [[ level.exit_level_func ]]();
@ -2463,10 +2531,12 @@ wait_and_revive()
{ {
self thread maps\mp\zombies\_zm::default_exit_level(); self thread maps\mp\zombies\_zm::default_exit_level();
} }
solo_revive_time = 10; solo_revive_time = 10;
self.revive_hud.y = -160; self.revive_hud.y = -160;
self.revive_hud settext( &"ZOMBIE_REVIVING" ); self.revive_hud settext( &"ZOMBIE_REVIVING" );
self maps\mp\zombies\_zm_laststand::revive_hud_show_n_fade( solo_revive_time ); self maps\mp\zombies\_zm_laststand::revive_hud_show_n_fade( solo_revive_time );
if ( !isDefined( self.beingrevivedprogressbar ) ) if ( !isDefined( self.beingrevivedprogressbar ) )
{ {
self.beingrevivedprogressbar = self createprimaryprogressbar(); self.beingrevivedprogressbar = self createprimaryprogressbar();
@ -2480,18 +2550,22 @@ wait_and_revive()
self.beingrevivedprogressbar.barframe.sort = 3; self.beingrevivedprogressbar.barframe.sort = 3;
self.beingrevivedprogressbar.barframe destroy(); self.beingrevivedprogressbar.barframe destroy();
} }
self.beingrevivedprogressbar updatebar( 0.01, 1 / solo_revive_time ); self.beingrevivedprogressbar updatebar( 0.01, 1 / solo_revive_time );
flag_wait_or_timeout( "instant_revive", solo_revive_time ); flag_wait_or_timeout( "instant_revive", solo_revive_time );
self.revive_hud settext( "" ); self.revive_hud settext( "" );
if ( isDefined( self.beingrevivedprogressbar ) ) if ( isDefined( self.beingrevivedprogressbar ) )
{ {
self.beingrevivedprogressbar destroyelem(); self.beingrevivedprogressbar destroyelem();
} }
flag_clear( "wait_and_revive" ); flag_clear( "wait_and_revive" );
self maps\mp\zombies\_zm_laststand::auto_revive( self ); self maps\mp\zombies\_zm_laststand::auto_revive( self );
self.solo_lives_given++; self.solo_lives_given++;
self.waiting_to_revive = 0; self.waiting_to_revive = 0;
if ( is_true( self.pers_upgrades_awarded[ "perk_lose" ] ) ) if ( is_true( self.pers_upgrades_awarded[ "perk_lose" ] ) )
{ {
self thread maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_perk_lose_restore(); self thread maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_perk_lose_restore();
@ -2503,23 +2577,29 @@ player_revive_monitor()
self endon( "disconnect" ); self endon( "disconnect" );
self notify( "stop_player_revive_monitor" ); self notify( "stop_player_revive_monitor" );
self endon( "stop_player_revive_monitor" ); self endon( "stop_player_revive_monitor" );
while ( 1 ) while ( 1 )
{ {
self waittill( "player_revived", reviver ); self waittill( "player_revived", reviver );
self playsoundtoplayer( "zmb_character_revived", self ); self playsoundtoplayer( "zmb_character_revived", self );
if ( isDefined( level.isresetting_grief ) && level.isresetting_grief ) if ( isDefined( level.isresetting_grief ) && level.isresetting_grief )
{ {
continue; continue;
} }
bbprint( "zombie_playerdeaths", "round %d playername %s deathtype %s x %f y %f z %f", level.round_number, self.name, "revived", self.origin ); bbprint( "zombie_playerdeaths", "round %d playername %s deathtype %s x %f y %f z %f", level.round_number, self.name, "revived", self.origin );
if ( isDefined( reviver ) ) if ( isDefined( reviver ) )
{ {
self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "revive_up" ); self maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "revive_up" );
if(reviver != self) if(reviver != self)
{ {
points = self.score_lost_when_downed; points = self.score_lost_when_downed;
reviver maps\mp\zombies\_zm_score::player_add_points( "reviver", points ); reviver maps\mp\zombies\_zm_score::player_add_points( "reviver", points );
} }
self.score_lost_when_downed = 0; self.score_lost_when_downed = 0;
} }
} }
@ -2654,6 +2734,7 @@ end_game()
level waittill( "end_game" ); level waittill( "end_game" );
maps\mp\zombies\_zm::check_end_game_intermission_delay(); maps\mp\zombies\_zm::check_end_game_intermission_delay();
clientnotify( "zesn" ); clientnotify( "zesn" );
if ( isDefined( level.sndgameovermusicoverride ) ) if ( isDefined( level.sndgameovermusicoverride ) )
{ {
level thread maps\mp\zombies\_zm_audio::change_zombie_music( level.sndgameovermusicoverride ); level thread maps\mp\zombies\_zm_audio::change_zombie_music( level.sndgameovermusicoverride );
@ -2662,14 +2743,18 @@ end_game()
{ {
level thread maps\mp\zombies\_zm_audio::change_zombie_music( "game_over" ); level thread maps\mp\zombies\_zm_audio::change_zombie_music( "game_over" );
} }
players = get_players(); players = get_players();
for ( i = 0; i < players.size; i++ ) for ( i = 0; i < players.size; i++ )
{ {
setclientsysstate( "lsm", "0", players[ i ] ); setclientsysstate( "lsm", "0", players[ i ] );
} }
for ( i = 0; i < players.size; i++ ) for ( i = 0; i < players.size; i++ )
{ {
players[ i ] enableInvulnerability(); players[ i ] enableInvulnerability();
if ( players[ i ] maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) if ( players[ i ] maps\mp\zombies\_zm_laststand::player_is_in_laststand() )
{ {
players[ i ] recordplayerdeathzombies(); players[ i ] recordplayerdeathzombies();
@ -2677,11 +2762,13 @@ end_game()
players[ i ] maps\mp\zombies\_zm_stats::increment_client_stat( "deaths" ); players[ i ] maps\mp\zombies\_zm_stats::increment_client_stat( "deaths" );
players[ i ] maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_jugg_player_death_stat(); players[ i ] maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_jugg_player_death_stat();
} }
if ( isdefined( players[ i ].revivetexthud) ) if ( isdefined( players[ i ].revivetexthud) )
{ {
players[ i ].revivetexthud destroy(); players[ i ].revivetexthud destroy();
} }
} }
stopallrumbles(); stopallrumbles();
level.intermission = 1; level.intermission = 1;
level.zombie_vars[ "zombie_powerup_insta_kill_time" ] = 0; level.zombie_vars[ "zombie_powerup_insta_kill_time" ] = 0;
@ -2691,6 +2778,7 @@ end_game()
game_over = []; game_over = [];
survived = []; survived = [];
players = get_players(); players = get_players();
if ( !isDefined( level._supress_survived_screen ) ) if ( !isDefined( level._supress_survived_screen ) )
{ {
for ( i = 0; i < players.size; i++ ) for ( i = 0; i < players.size; i++ )
@ -2716,6 +2804,7 @@ end_game()
game_over[ i ] fadeovertime( 1 ); game_over[ i ] fadeovertime( 1 );
game_over[ i ].alpha = 1; game_over[ i ].alpha = 1;
} }
survived[ i ] = newclienthudelem( players[ i ] ); survived[ i ] = newclienthudelem( players[ i ] );
survived[ i ].alignx = "center"; survived[ i ].alignx = "center";
survived[ i ].aligny = "middle"; survived[ i ].aligny = "middle";
@ -2753,25 +2842,30 @@ end_game()
{ {
survived[ i ] settext( &"ZOMBIE_SURVIVED_ROUNDS", level.round_number ); survived[ i ] settext( &"ZOMBIE_SURVIVED_ROUNDS", level.round_number );
} }
survived[ i ] fadeovertime( 1 ); survived[ i ] fadeovertime( 1 );
survived[ i ].alpha = 1; survived[ i ].alpha = 1;
} }
} }
if ( isDefined( level.custom_end_screen ) ) if ( isDefined( level.custom_end_screen ) )
{ {
level [[ level.custom_end_screen ]](); level [[ level.custom_end_screen ]]();
} }
for ( i = 0; i < players.size; i++ ) for ( i = 0; i < players.size; i++ )
{ {
players[ i ] setclientammocounterhide( 1 ); players[ i ] setclientammocounterhide( 1 );
players[ i ] setclientminiscoreboardhide( 1 ); players[ i ] setclientminiscoreboardhide( 1 );
} }
uploadstats(); uploadstats();
maps\mp\zombies\_zm_stats::update_players_stats_at_match_end( players ); maps\mp\zombies\_zm_stats::update_players_stats_at_match_end( players );
maps\mp\zombies\_zm_stats::update_global_counters_on_match_end(); maps\mp\zombies\_zm_stats::update_global_counters_on_match_end();
wait 1; wait 1;
wait 3.95; wait 3.95;
players = get_players(); players = get_players();
foreach ( player in players ) foreach ( player in players )
{ {
if ( isdefined( player.sessionstate ) && player.sessionstate == "spectator" ) if ( isdefined( player.sessionstate ) && player.sessionstate == "spectator" )
@ -2779,8 +2873,10 @@ end_game()
player.sessionstate = "playing"; player.sessionstate = "playing";
} }
} }
wait 0.05; wait 0.05;
players = get_players(); players = get_players();
if ( !isDefined( level._supress_survived_screen ) ) if ( !isDefined( level._supress_survived_screen ) )
{ {
for(i = 0; i < players.size; i++) for(i = 0; i < players.size; i++)
@ -2789,17 +2885,20 @@ end_game()
game_over[ i ] destroy(); game_over[ i ] destroy();
} }
} }
for ( i = 0; i < players.size; i++ ) for ( i = 0; i < players.size; i++ )
{ {
if ( isDefined( players[ i ].survived_hud ) ) if ( isDefined( players[ i ].survived_hud ) )
{ {
players[ i ].survived_hud destroy(); players[ i ].survived_hud destroy();
} }
if ( isDefined( players[ i ].game_over_hud ) ) if ( isDefined( players[ i ].game_over_hud ) )
{ {
players[ i ].game_over_hud destroy(); players[ i ].game_over_hud destroy();
} }
} }
maps\mp\zombies\_zm::intermission(); maps\mp\zombies\_zm::intermission();
wait level.zombie_vars[ "zombie_intermission_time" ]; wait level.zombie_vars[ "zombie_intermission_time" ];
level notify( "stop_intermission" ); level notify( "stop_intermission" );
@ -2807,6 +2906,7 @@ end_game()
bbprint( "zombie_epilogs", "rounds %d", level.round_number ); bbprint( "zombie_epilogs", "rounds %d", level.round_number );
wait 1.5; wait 1.5;
players = get_players(); players = get_players();
for ( i = 0; i < players.size; i++ ) for ( i = 0; i < players.size; i++ )
{ {
players[ i ] cameraactivate( 0 ); players[ i ] cameraactivate( 0 );

View File

@ -92,6 +92,7 @@ afterlife_add()
self.lives++; self.lives++;
self thread afterlife_add_fx(); self thread afterlife_add_fx();
} }
self playsoundtoplayer( "zmb_afterlife_add", self ); self playsoundtoplayer( "zmb_afterlife_add", self );
self setclientfieldtoplayer( "player_lives", self.lives ); self setclientfieldtoplayer( "player_lives", self.lives );
} }
@ -101,10 +102,12 @@ afterlife_start_zombie_logic()
flag_wait( "start_zombie_round_logic" ); flag_wait( "start_zombie_round_logic" );
wait 0.5; wait 0.5;
everyone_alive = 0; everyone_alive = 0;
while ( isDefined( everyone_alive ) && !everyone_alive ) while ( isDefined( everyone_alive ) && !everyone_alive )
{ {
everyone_alive = 1; everyone_alive = 1;
players = getplayers(); players = getplayers();
foreach (player in players) foreach (player in players)
{ {
if ( isDefined( player.afterlife ) && player.afterlife ) if ( isDefined( player.afterlife ) && player.afterlife )
@ -115,11 +118,14 @@ afterlife_start_zombie_logic()
} }
} }
} }
wait 0.5; wait 0.5;
while ( level.intermission ) while ( level.intermission )
{ {
wait 0.05; wait 0.05;
} }
flag_set( "afterlife_start_over" ); flag_set( "afterlife_start_over" );
wait 2; wait 2;
array_func( getplayers(), ::afterlife_add ); array_func( getplayers(), ::afterlife_add );
@ -296,6 +302,7 @@ afterlife_revive_do_revive( playerbeingrevived, revivergun )
playerbeingrevived_player = playerbeingrevived; playerbeingrevived_player = playerbeingrevived;
playerbeingrevived_player.revive_hud.y = -160; playerbeingrevived_player.revive_hud.y = -160;
beingrevivedprogressbar_y = level.primaryprogressbary * -1; beingrevivedprogressbar_y = level.primaryprogressbary * -1;
if ( isDefined( playerbeingrevived.e_afterlife_player ) ) if ( isDefined( playerbeingrevived.e_afterlife_player ) )
{ {
playerbeingrevived_player = playerbeingrevived.e_afterlife_player; playerbeingrevived_player = playerbeingrevived.e_afterlife_player;

View File

@ -48,6 +48,7 @@ check_range_attack()
avogadro_exit( from ) avogadro_exit( from )
{ {
powerup_origin = spawn( "script_origin", self.origin ); powerup_origin = spawn( "script_origin", self.origin );
if ( self.state == "attacking_bus" || self.state == "stay_attached" ) if ( self.state == "attacking_bus" || self.state == "stay_attached" )
{ {
powerup_origin linkto( level.the_bus ); powerup_origin linkto( level.the_bus );

View File

@ -16,9 +16,11 @@ inert_wakeup()
{ {
current_time = getTime(); current_time = getTime();
players = get_players(); players = get_players();
foreach ( player in players ) foreach ( player in players )
{ {
dist_sq = distancesquared( self.origin, player.origin ); dist_sq = distancesquared( self.origin, player.origin );
if ( dist_sq < 4096 ) if ( dist_sq < 4096 )
{ {
self maps\mp\zombies\_zm_ai_basic::stop_inert(); self maps\mp\zombies\_zm_ai_basic::stop_inert();

View File

@ -433,6 +433,7 @@ brutus_spawn( starting_health, has_helmet, helmet_hits, explosive_dmg_taken, zon
{ {
level.num_pulls_since_brutus_spawn = 0; level.num_pulls_since_brutus_spawn = 0;
self set_zombie_run_cycle( "run" ); self set_zombie_run_cycle( "run" );
if ( !isDefined( has_helmet ) ) if ( !isDefined( has_helmet ) )
{ {
self.has_helmet = 1; self.has_helmet = 1;
@ -441,6 +442,7 @@ brutus_spawn( starting_health, has_helmet, helmet_hits, explosive_dmg_taken, zon
{ {
self.has_helmet = has_helmet; self.has_helmet = has_helmet;
} }
if ( !isDefined( helmet_hits ) ) if ( !isDefined( helmet_hits ) )
{ {
self.helmet_hits = 0; self.helmet_hits = 0;
@ -449,6 +451,7 @@ brutus_spawn( starting_health, has_helmet, helmet_hits, explosive_dmg_taken, zon
{ {
self.helmet_hits = helmet_hits; self.helmet_hits = helmet_hits;
} }
if ( !isDefined( explosive_dmg_taken ) ) if ( !isDefined( explosive_dmg_taken ) )
{ {
self.explosive_dmg_taken = 0; self.explosive_dmg_taken = 0;
@ -457,6 +460,7 @@ brutus_spawn( starting_health, has_helmet, helmet_hits, explosive_dmg_taken, zon
{ {
self.explosive_dmg_taken = explosive_dmg_taken; self.explosive_dmg_taken = explosive_dmg_taken;
} }
if ( !isDefined( starting_health ) ) if ( !isDefined( starting_health ) )
{ {
self brutus_health_increases(); self brutus_health_increases();
@ -468,6 +472,7 @@ brutus_spawn( starting_health, has_helmet, helmet_hits, explosive_dmg_taken, zon
self.maxhealth = starting_health; self.maxhealth = starting_health;
self.health = starting_health; self.health = starting_health;
} }
self.explosive_dmg_req = level.brutus_expl_dmg_req; self.explosive_dmg_req = level.brutus_expl_dmg_req;
self.no_damage_points = 1; self.no_damage_points = 1;
self endon( "death" ); self endon( "death" );
@ -495,6 +500,7 @@ brutus_spawn( starting_health, has_helmet, helmet_hits, explosive_dmg_taken, zon
self setfreecameralockonallowed( 0 ); self setfreecameralockonallowed( 0 );
level thread maps\mp\zombies\_zm_spawner::zombie_death_event( self ); level thread maps\mp\zombies\_zm_spawner::zombie_death_event( self );
self thread maps\mp\zombies\_zm_spawner::enemy_death_detection(); self thread maps\mp\zombies\_zm_spawner::enemy_death_detection();
if ( isDefined( zone_name ) && zone_name == "zone_golden_gate_bridge" ) if ( isDefined( zone_name ) && zone_name == "zone_golden_gate_bridge" )
{ {
wait randomfloat( 1.5 ); wait randomfloat( 1.5 );
@ -504,23 +510,28 @@ brutus_spawn( starting_health, has_helmet, helmet_hits, explosive_dmg_taken, zon
{ {
spawn_pos = get_best_brutus_spawn_pos( zone_name ); spawn_pos = get_best_brutus_spawn_pos( zone_name );
} }
if ( !isDefined( spawn_pos ) ) if ( !isDefined( spawn_pos ) )
{ {
self delete(); self delete();
return; return;
} }
if ( !isDefined( spawn_pos.angles ) ) if ( !isDefined( spawn_pos.angles ) )
{ {
spawn_pos.angles = ( 0, 0, 0 ); spawn_pos.angles = ( 0, 0, 0 );
} }
if ( isDefined( level.brutus_do_prologue ) && level.brutus_do_prologue ) if ( isDefined( level.brutus_do_prologue ) && level.brutus_do_prologue )
{ {
self brutus_spawn_prologue( spawn_pos ); self brutus_spawn_prologue( spawn_pos );
} }
if ( !self.has_helmet ) if ( !self.has_helmet )
{ {
self detach( "c_zom_cellbreaker_helmet" ); self detach( "c_zom_cellbreaker_helmet" );
} }
level.brutus_count++; level.brutus_count++;
self maps\mp\zombies\_zm_spawner::zombie_complete_emerging_into_playable_area(); self maps\mp\zombies\_zm_spawner::zombie_complete_emerging_into_playable_area();
self thread snddelayedmusic(); self thread snddelayedmusic();
@ -560,20 +571,24 @@ brutus_damage_override( inflictor, attacker, damage, flags, meansofdeath, weapon
n_brutus_damage_percent = level.brutus_damage_percent; n_brutus_damage_percent = level.brutus_damage_percent;
n_brutus_headshot_modifier = 1; n_brutus_headshot_modifier = 1;
} }
if ( isDefined( weapon ) && is_weapon_shotgun( weapon ) ) if ( isDefined( weapon ) && is_weapon_shotgun( weapon ) )
{ {
n_brutus_damage_percent *= level.brutus_shotgun_damage_mod; n_brutus_damage_percent *= level.brutus_shotgun_damage_mod;
n_brutus_headshot_modifier *= level.brutus_shotgun_damage_mod; n_brutus_headshot_modifier *= level.brutus_shotgun_damage_mod;
} }
if ( isDefined( weapon ) && weapon == "bouncing_tomahawk_zm" && isDefined( inflictor ) ) if ( isDefined( weapon ) && weapon == "bouncing_tomahawk_zm" && isDefined( inflictor ) )
{ {
self playsound( "wpn_tomahawk_imp_zombie" ); self playsound( "wpn_tomahawk_imp_zombie" );
if ( self.has_helmet ) if ( self.has_helmet )
{ {
if ( damage == 1 ) if ( damage == 1 )
{ {
return 0; return 0;
} }
if ( isDefined( inflictor.n_cookedtime ) && inflictor.n_cookedtime >= 2000 ) if ( isDefined( inflictor.n_cookedtime ) && inflictor.n_cookedtime >= 2000 )
{ {
self.helmet_hits = level.brutus_helmet_shots; self.helmet_hits = level.brutus_helmet_shots;
@ -586,9 +601,11 @@ brutus_damage_override( inflictor, attacker, damage, flags, meansofdeath, weapon
{ {
self.helmet_hits++; self.helmet_hits++;
} }
if ( self.helmet_hits >= level.brutus_helmet_shots ) if ( self.helmet_hits >= level.brutus_helmet_shots )
{ {
self thread brutus_remove_helmet( vdir ); self thread brutus_remove_helmet( vdir );
if ( level.brutus_in_grief ) if ( level.brutus_in_grief )
{ {
player_points = level.brutus_points_for_helmet; player_points = level.brutus_points_for_helmet;
@ -598,6 +615,7 @@ brutus_damage_override( inflictor, attacker, damage, flags, meansofdeath, weapon
multiplier = maps\mp\zombies\_zm_score::get_points_multiplier( self ); multiplier = maps\mp\zombies\_zm_score::get_points_multiplier( self );
player_points = multiplier * round_up_score( level.brutus_points_for_helmet, 5 ); player_points = multiplier * round_up_score( level.brutus_points_for_helmet, 5 );
} }
if ( isDefined( attacker ) && isplayer( attacker ) ) if ( isDefined( attacker ) && isplayer( attacker ) )
{ {
attacker add_to_player_score( player_points ); attacker add_to_player_score( player_points );
@ -605,6 +623,7 @@ brutus_damage_override( inflictor, attacker, damage, flags, meansofdeath, weapon
level notify( "brutus_helmet_removed", attacker ); level notify( "brutus_helmet_removed", attacker );
} }
} }
return damage * n_brutus_damage_percent; return damage * n_brutus_damage_percent;
} }
else else
@ -612,6 +631,7 @@ brutus_damage_override( inflictor, attacker, damage, flags, meansofdeath, weapon
return damage; return damage;
} }
} }
if ( ( meansofdeath == "MOD_MELEE" || meansofdeath == "MOD_IMPACT" ) && isDefined( meansofdeath ) ) if ( ( meansofdeath == "MOD_MELEE" || meansofdeath == "MOD_IMPACT" ) && isDefined( meansofdeath ) )
{ {
if ( weapon == "alcatraz_shield_zm" ) if ( weapon == "alcatraz_shield_zm" )
@ -621,14 +641,17 @@ brutus_damage_override( inflictor, attacker, damage, flags, meansofdeath, weapon
return 0; return 0;
} }
} }
if ( isDefined( level.zombiemode_using_afterlife ) && level.zombiemode_using_afterlife && weapon == "lightning_hands_zm" ) if ( isDefined( level.zombiemode_using_afterlife ) && level.zombiemode_using_afterlife && weapon == "lightning_hands_zm" )
{ {
self thread brutus_afterlife_teleport(); self thread brutus_afterlife_teleport();
return 0; return 0;
} }
if ( is_explosive_damage( meansofdeath ) && weapon != "raygun_mark2_zm" && weapon != "raygun_mark2_upgraded_zm" ) if ( is_explosive_damage( meansofdeath ) && weapon != "raygun_mark2_zm" && weapon != "raygun_mark2_upgraded_zm" )
{ {
self.explosive_dmg_taken += damage; self.explosive_dmg_taken += damage;
if ( !self.has_helmet ) if ( !self.has_helmet )
{ {
scaler = n_brutus_headshot_modifier; scaler = n_brutus_headshot_modifier;
@ -637,9 +660,11 @@ brutus_damage_override( inflictor, attacker, damage, flags, meansofdeath, weapon
{ {
scaler = level.brutus_damage_percent; scaler = level.brutus_damage_percent;
} }
if ( self.explosive_dmg_taken >= self.explosive_dmg_req && isDefined( self.has_helmet ) && self.has_helmet ) if ( self.explosive_dmg_taken >= self.explosive_dmg_req && isDefined( self.has_helmet ) && self.has_helmet )
{ {
self thread brutus_remove_helmet( vectorScale( ( 0, 1, 0 ), 10 ) ); self thread brutus_remove_helmet( vectorScale( ( 0, 1, 0 ), 10 ) );
if ( level.brutus_in_grief ) if ( level.brutus_in_grief )
{ {
player_points = level.brutus_points_for_helmet; player_points = level.brutus_points_for_helmet;
@ -649,9 +674,11 @@ brutus_damage_override( inflictor, attacker, damage, flags, meansofdeath, weapon
multiplier = maps\mp\zombies\_zm_score::get_points_multiplier( self ); multiplier = maps\mp\zombies\_zm_score::get_points_multiplier( self );
player_points = multiplier * round_up_score( level.brutus_points_for_helmet, 5 ); player_points = multiplier * round_up_score( level.brutus_points_for_helmet, 5 );
} }
attacker add_to_player_score( player_points ); attacker add_to_player_score( player_points );
attacker.pers[ "score" ] = inflictor.score; attacker.pers[ "score" ] = inflictor.score;
} }
return damage * scaler; return damage * scaler;
} }
else if ( shitloc != "head" && shitloc != "helmet" ) else if ( shitloc != "head" && shitloc != "helmet" )
@ -675,21 +702,26 @@ brutus_health_increases()
{ {
players = getplayers(); players = getplayers();
n_player_modifier = 1; n_player_modifier = 1;
if ( players.size > 1 ) if ( players.size > 1 )
{ {
n_player_modifier = players.size * 0.75; n_player_modifier = players.size * 0.75;
} }
level.brutus_round_count++; level.brutus_round_count++;
level.brutus_health = int( level.brutus_health_increase * n_player_modifier * level.brutus_round_count ); level.brutus_health = int( level.brutus_health_increase * n_player_modifier * level.brutus_round_count );
level.brutus_expl_dmg_req = int( level.brutus_explosive_damage_increase * n_player_modifier * level.brutus_round_count ); level.brutus_expl_dmg_req = int( level.brutus_explosive_damage_increase * n_player_modifier * level.brutus_round_count );
if ( level.brutus_health >= ( 5000 * n_player_modifier ) ) if ( level.brutus_health >= ( 5000 * n_player_modifier ) )
{ {
level.brutus_health = int( 5000 * n_player_modifier ); level.brutus_health = int( 5000 * n_player_modifier );
} }
if ( level.brutus_expl_dmg_req >= ( 4500 * n_player_modifier ) ) if ( level.brutus_expl_dmg_req >= ( 4500 * n_player_modifier ) )
{ {
level.brutus_expl_dmg_req = int( 4500 * n_player_modifier ); level.brutus_expl_dmg_req = int( 4500 * n_player_modifier );
} }
level.brutus_last_spawn_round = level.round_number; level.brutus_last_spawn_round = level.round_number;
} }
} }

View File

@ -118,6 +118,7 @@ screecher_spawning_logic()
screecher_melee_damage( player ) screecher_melee_damage( player )
{ {
melee_score = 0; melee_score = 0;
if ( player hasweapon( "tazer_knuckles_zm" ) ) if ( player hasweapon( "tazer_knuckles_zm" ) )
{ {
melee_score = 30; melee_score = 30;

View File

@ -6,10 +6,12 @@
init() init()
{ {
onplayerconnect_callback( ::onplayerconnect_bank_deposit_box ); onplayerconnect_callback( ::onplayerconnect_bank_deposit_box );
if ( !isDefined( level.ta_vaultfee ) ) if ( !isDefined( level.ta_vaultfee ) )
{ {
level.ta_vaultfee = 100; level.ta_vaultfee = 100;
} }
if ( !isDefined( level.ta_tellerfee ) ) if ( !isDefined( level.ta_tellerfee ) )
{ {
level.ta_tellerfee = 100; level.ta_tellerfee = 100;
@ -31,6 +33,7 @@ gain_interest_after_rounds()
level waittill("end_of_round"); level waittill("end_of_round");
self.account_value *= 1.1; self.account_value *= 1.1;
if(self.account_value > level.bank_account_max) if(self.account_value > level.bank_account_max)
{ {
self.account_value = level.bank_account_max; self.account_value = level.bank_account_max;
@ -65,13 +68,16 @@ bank_withdraw_unitrigger()
trigger_deposit_think() trigger_deposit_think()
{ {
self endon( "kill_trigger" ); self endon( "kill_trigger" );
while ( 1 ) while ( 1 )
{ {
self waittill( "trigger", player ); self waittill( "trigger", player );
while ( !is_player_valid( player ) ) while ( !is_player_valid( player ) )
{ {
continue; continue;
} }
if ( player.account_value < level.bank_account_max ) if ( player.account_value < level.bank_account_max )
{ {
account_value = level.bank_account_increment; account_value = level.bank_account_increment;
@ -93,10 +99,12 @@ trigger_deposit_think()
player playsoundtoplayer( "zmb_vault_bank_deposit", player ); player playsoundtoplayer( "zmb_vault_bank_deposit", player );
player.score -= score; player.score -= score;
player.account_value += account_value; player.account_value += account_value;
if ( isDefined( level.custom_bank_deposit_vo ) ) if ( isDefined( level.custom_bank_deposit_vo ) )
{ {
player thread [[ level.custom_bank_deposit_vo ]](); player thread [[ level.custom_bank_deposit_vo ]]();
} }
if ( (player.score <= 0) || (player.account_value >= level.bank_account_max) ) if ( (player.score <= 0) || (player.account_value >= level.bank_account_max) )
{ {
self sethintstring( "" ); self sethintstring( "" );
@ -106,6 +114,7 @@ trigger_deposit_think()
{ {
player thread do_player_general_vox( "general", "exert_sigh", 10, 50 ); player thread do_player_general_vox( "general", "exert_sigh", 10, 50 );
} }
self thread show_balance(player); self thread show_balance(player);
} }
} }
@ -113,13 +122,16 @@ trigger_deposit_think()
trigger_withdraw_think() trigger_withdraw_think()
{ {
self endon( "kill_trigger" ); self endon( "kill_trigger" );
while ( 1 ) while ( 1 )
{ {
self waittill( "trigger", player ); self waittill( "trigger", player );
while ( !is_player_valid( player ) ) while ( !is_player_valid( player ) )
{ {
continue; continue;
} }
if ( player.account_value > 0 ) if ( player.account_value > 0 )
{ {
score = level.bank_deposit_ddl_increment_amount; score = level.bank_deposit_ddl_increment_amount;
@ -135,6 +147,7 @@ trigger_withdraw_think()
player.score += score; player.score += score;
level notify( "bank_withdrawal" ); level notify( "bank_withdrawal" );
player.account_value -= account_value; player.account_value -= account_value;
if ( isDefined( level.custom_bank_withdrawl_vo ) ) if ( isDefined( level.custom_bank_withdrawl_vo ) )
{ {
player thread [[ level.custom_bank_withdrawl_vo ]](); player thread [[ level.custom_bank_withdrawl_vo ]]();
@ -143,6 +156,7 @@ trigger_withdraw_think()
{ {
player thread do_player_general_vox( "general", "exert_laugh", 10, 50 ); player thread do_player_general_vox( "general", "exert_laugh", 10, 50 );
} }
if ( player.account_value <= 0 ) if ( player.account_value <= 0 )
{ {
self sethintstring( "" ); self sethintstring( "" );
@ -152,6 +166,7 @@ trigger_withdraw_think()
{ {
player thread do_player_general_vox( "general", "exert_sigh", 10, 50 ); player thread do_player_general_vox( "general", "exert_sigh", 10, 50 );
} }
self thread show_balance(player); self thread show_balance(player);
} }
} }
@ -159,11 +174,13 @@ trigger_withdraw_think()
trigger_deposit_update_prompt( player ) trigger_deposit_update_prompt( player )
{ {
self thread show_balance(player); self thread show_balance(player);
if ( (player.score <= 0) || (player.account_value >= level.bank_account_max) ) if ( (player.score <= 0) || (player.account_value >= level.bank_account_max) )
{ {
self sethintstring( "" ); self sethintstring( "" );
return 0; return 0;
} }
self sethintstring( &"ZOMBIE_BANK_DEPOSIT_PROMPT", level.bank_deposit_ddl_increment_amount ); self sethintstring( &"ZOMBIE_BANK_DEPOSIT_PROMPT", level.bank_deposit_ddl_increment_amount );
return 1; return 1;
} }
@ -171,11 +188,13 @@ trigger_deposit_update_prompt( player )
trigger_withdraw_update_prompt( player ) trigger_withdraw_update_prompt( player )
{ {
self thread show_balance(player); self thread show_balance(player);
if ( player.account_value <= 0 ) if ( player.account_value <= 0 )
{ {
self sethintstring( "" ); self sethintstring( "" );
return 0; return 0;
} }
self sethintstring( &"ZOMBIE_BANK_WITHDRAW_PROMPT", level.bank_deposit_ddl_increment_amount, level.ta_vaultfee ); self sethintstring( &"ZOMBIE_BANK_WITHDRAW_PROMPT", level.bank_deposit_ddl_increment_amount, level.ta_vaultfee );
return 1; return 1;
} }

View File

@ -186,10 +186,12 @@ handle_post_board_repair_rewards( cost, zbarrier )
{ {
self maps\mp\zombies\_zm_stats::increment_client_stat( "boards" ); self maps\mp\zombies\_zm_stats::increment_client_stat( "boards" );
self maps\mp\zombies\_zm_stats::increment_player_stat( "boards" ); self maps\mp\zombies\_zm_stats::increment_player_stat( "boards" );
if ( isDefined( self.pers[ "boards" ] ) && ( self.pers[ "boards" ] % 10 ) == 0 ) if ( isDefined( self.pers[ "boards" ] ) && ( self.pers[ "boards" ] % 10 ) == 0 )
{ {
self thread do_player_general_vox( "general", "reboard", 90 ); self thread do_player_general_vox( "general", "reboard", 90 );
} }
self maps\mp\zombies\_zm_pers_upgrades_functions::pers_boards_updated( zbarrier ); self maps\mp\zombies\_zm_pers_upgrades_functions::pers_boards_updated( zbarrier );
self.rebuild_barrier_reward += cost; self.rebuild_barrier_reward += cost;

View File

@ -14,6 +14,7 @@ buildable_place_think()
{ {
self endon( "kill_trigger" ); self endon( "kill_trigger" );
player_built = undefined; player_built = undefined;
while ( isDefined( self.stub.built ) && !self.stub.built ) while ( isDefined( self.stub.built ) && !self.stub.built )
{ {
self waittill( "trigger", player ); self waittill( "trigger", player );
@ -24,24 +25,29 @@ buildable_place_think()
{ {
continue; continue;
} }
if ( isDefined( player.screecher_weapon ) ) if ( isDefined( player.screecher_weapon ) )
{ {
continue; continue;
} }
if ( !is_player_valid( player ) ) if ( !is_player_valid( player ) )
{ {
player thread ignore_triggers( 0.5 ); player thread ignore_triggers( 0.5 );
} }
status = player player_can_build( self.stub.buildablezone ); status = player player_can_build( self.stub.buildablezone );
if ( !status ) if ( !status )
{ {
self.stub.hint_string = ""; self.stub.hint_string = "";
self sethintstring( self.stub.hint_string ); self sethintstring( self.stub.hint_string );
if ( isDefined( self.stub.oncantuse ) ) if ( isDefined( self.stub.oncantuse ) )
{ {
self.stub [[ self.stub.oncantuse ]]( player ); self.stub [[ self.stub.oncantuse ]]( player );
} }
continue; continue;
} }
else else
@ -50,12 +56,15 @@ buildable_place_think()
{ {
self.stub [[ self.stub.onbeginuse ]]( player ); self.stub [[ self.stub.onbeginuse ]]( player );
} }
result = self buildable_use_hold_think( player ); result = self buildable_use_hold_think( player );
team = player.pers[ "team" ]; team = player.pers[ "team" ];
if ( isDefined( self.stub.onenduse ) ) if ( isDefined( self.stub.onenduse ) )
{ {
self.stub [[ self.stub.onenduse ]]( team, player, result ); self.stub [[ self.stub.onenduse ]]( team, player, result );
} }
if ( !result ) if ( !result )
{ {
continue; continue;
@ -70,6 +79,7 @@ buildable_place_think()
{ {
self.stub [[ self.stub.onuse ]]( player ); self.stub [[ self.stub.onuse ]]( player );
} }
prompt = player maps\mp\zombies\_zm_buildables::player_build( self.stub.buildablezone ); prompt = player maps\mp\zombies\_zm_buildables::player_build( self.stub.buildablezone );
player_built = player; player_built = player;
self.stub.hint_string = prompt; self.stub.hint_string = prompt;

View File

@ -57,6 +57,7 @@ randomize_pooled_buildables( poolname )
for ( i = 0; i < count; i++ ) for ( i = 0; i < count; i++ )
{ {
rand = randomint(count); rand = randomint(count);
if ( rand != i ) if ( rand != i )
{ {
swap_buildable_fields( level.buildablepools[poolname].stubs[i], level.buildablepools[poolname].stubs[rand] ); swap_buildable_fields( level.buildablepools[poolname].stubs[i], level.buildablepools[poolname].stubs[rand] );
@ -499,9 +500,11 @@ pooled_buildable_place_think()
pooled_buildable_place_update_all() pooled_buildable_place_update_all()
{ {
players = get_players(); players = get_players();
foreach ( player in players ) foreach ( player in players )
{ {
num = player getentitynumber(); num = player getentitynumber();
if ( isDefined( self.stub.playertrigger[num] ) ) if ( isDefined( self.stub.playertrigger[num] ) )
{ {
self.stub.playertrigger[num] notify( "kill_trigger" ); self.stub.playertrigger[num] notify( "kill_trigger" );

View File

@ -236,6 +236,7 @@ chugabud_give_loadout()
} }
weapons_given = 0; weapons_given = 0;
for ( i = 0; i < loadout.weapons.size; i++ ) for ( i = 0; i < loadout.weapons.size; i++ )
{ {
if ( !isdefined( loadout.weapons[i] ) ) if ( !isdefined( loadout.weapons[i] ) )
@ -247,6 +248,7 @@ chugabud_give_loadout()
self maps\mp\zombies\_zm_weapons::weapondata_give( loadout.weapons[i] ); self maps\mp\zombies\_zm_weapons::weapondata_give( loadout.weapons[i] );
weapons_given++; weapons_given++;
if (weapons_given >= 2) if (weapons_given >= 2)
{ {
break; break;
@ -299,6 +301,7 @@ chugabud_give_perks()
maps\mp\zombies\_zm_perks::give_perk( loadout.perks[i] ); maps\mp\zombies\_zm_perks::give_perk( loadout.perks[i] );
} }
} }
self.loadout.perks = undefined; self.loadout.perks = undefined;
} }

View File

@ -23,6 +23,7 @@ init_anim_slice_times()
animlength = getanimlength( %o_zmb_chopper_slice_slow ); animlength = getanimlength( %o_zmb_chopper_slice_slow );
i = 0; i = 0;
foreach ( frac in slice_times ) foreach ( frac in slice_times )
{ {
if ( i != 6 ) if ( i != 6 )
@ -36,6 +37,7 @@ init_anim_slice_times()
} }
i = 0; i = 0;
foreach ( frac in retract_times ) foreach ( frac in retract_times )
{ {
if ( i == 0 || i == 6 ) if ( i == 0 || i == 6 )

View File

@ -8,28 +8,34 @@ startturretdeploy( weapon )
self endon( "disconnect" ); self endon( "disconnect" );
self endon( "equip_turret_zm_taken" ); self endon( "equip_turret_zm_taken" );
self thread maps\mp\zombies\_zm_equip_turret::watchforcleanup(); self thread maps\mp\zombies\_zm_equip_turret::watchforcleanup();
if ( !isDefined( self.turret_health ) ) if ( !isDefined( self.turret_health ) )
{ {
self.turret_health = 30; self.turret_health = 30;
} }
if ( isDefined( weapon ) ) if ( isDefined( weapon ) )
{ {
weapon hide(); weapon hide();
wait 0.1; wait 0.1;
if ( isDefined( weapon.power_on ) && weapon.power_on ) if ( isDefined( weapon.power_on ) && weapon.power_on )
{ {
weapon.turret notify( "stop_burst_fire_unmanned" ); weapon.turret notify( "stop_burst_fire_unmanned" );
} }
if ( !isDefined( weapon ) ) if ( !isDefined( weapon ) )
{ {
return; return;
} }
if ( isDefined( self.turret ) ) if ( isDefined( self.turret ) )
{ {
self.turret notify( "stop_burst_fire_unmanned" ); self.turret notify( "stop_burst_fire_unmanned" );
self.turret notify( "turret_deactivated" ); self.turret notify( "turret_deactivated" );
self.turret delete(); self.turret delete();
} }
turret = spawnturret( "misc_turret", weapon.origin, "zombie_bullet_crouch_zm" ); turret = spawnturret( "misc_turret", weapon.origin, "zombie_bullet_crouch_zm" );
turret.turrettype = "sentry"; turret.turrettype = "sentry";
turret setturrettype( turret.turrettype ); turret setturrettype( turret.turrettype );
@ -53,25 +59,30 @@ startturretdeploy( weapon )
weapon.turret = turret; weapon.turret = turret;
self.turret = turret; self.turret = turret;
weapon turret_power_on(); weapon turret_power_on();
if ( weapon.power_on ) if ( weapon.power_on )
{ {
turret thread maps\mp\zombies\_zm_mgturret::burst_fire_unmanned(); turret thread maps\mp\zombies\_zm_mgturret::burst_fire_unmanned();
} }
self thread turretdecay( weapon ); self thread turretdecay( weapon );
self thread maps\mp\zombies\_zm_buildables::delete_on_disconnect( weapon ); self thread maps\mp\zombies\_zm_buildables::delete_on_disconnect( weapon );
weapon waittill("death"); weapon waittill("death");
if ( isDefined( self.buildableturret.sound_ent ) ) if ( isDefined( self.buildableturret.sound_ent ) )
{ {
self.buildableturret.sound_ent playsound( "wpn_zmb_turret_stop" ); self.buildableturret.sound_ent playsound( "wpn_zmb_turret_stop" );
self.buildableturret.sound_ent delete(); self.buildableturret.sound_ent delete();
self.buildableturret.sound_ent = undefined; self.buildableturret.sound_ent = undefined;
} }
if ( isDefined( turret ) ) if ( isDefined( turret ) )
{ {
turret notify( "stop_burst_fire_unmanned" ); turret notify( "stop_burst_fire_unmanned" );
turret notify( "turret_deactivated" ); turret notify( "turret_deactivated" );
turret delete(); turret delete();
} }
self.turret = undefined; self.turret = undefined;
self notify( "turret_cleanup" ); self notify( "turret_cleanup" );
} }
@ -82,10 +93,12 @@ turret_power_on()
self.power_on = 1; self.power_on = 1;
self.turret thread maps\mp\zombies\_zm_mgturret::burst_fire_unmanned(); self.turret thread maps\mp\zombies\_zm_mgturret::burst_fire_unmanned();
player = self.turret.owner; player = self.turret.owner;
if ( !isDefined( player.buildableturret.sound_ent ) ) if ( !isDefined( player.buildableturret.sound_ent ) )
{ {
player.buildableturret.sound_ent = spawn( "script_origin", self.turret.origin ); player.buildableturret.sound_ent = spawn( "script_origin", self.turret.origin );
} }
player.buildableturret.sound_ent playsound( "wpn_zmb_turret_start" ); player.buildableturret.sound_ent playsound( "wpn_zmb_turret_start" );
player.buildableturret.sound_ent playloopsound( "wpn_zmb_turret_loop", 2 ); player.buildableturret.sound_ent playloopsound( "wpn_zmb_turret_loop", 2 );
} }
@ -95,6 +108,7 @@ turretdecay( weapon )
self endon( "death" ); self endon( "death" );
self endon( "disconnect" ); self endon( "disconnect" );
self endon( "equip_turret_zm_taken" ); self endon( "equip_turret_zm_taken" );
while ( isDefined( weapon ) ) while ( isDefined( weapon ) )
{ {
if ( weapon.power_on ) if ( weapon.power_on )
@ -109,6 +123,7 @@ turretdecay( weapon )
return; return;
} }
} }
wait 1; wait 1;
} }
} }

View File

@ -23,11 +23,14 @@ show_equipment_hint( equipment )
placed_equipment_think( model, equipname, origin, angles, tradius, toffset ) placed_equipment_think( model, equipname, origin, angles, tradius, toffset )
{ {
pickupmodel = spawn( "script_model", origin ); pickupmodel = spawn( "script_model", origin );
if ( isDefined( angles ) ) if ( isDefined( angles ) )
{ {
pickupmodel.angles = angles; pickupmodel.angles = angles;
} }
pickupmodel setmodel( model ); pickupmodel setmodel( model );
if ( isDefined( level.equipment_safe_to_drop ) ) if ( isDefined( level.equipment_safe_to_drop ) )
{ {
if ( !( self [[ level.equipment_safe_to_drop ]]( pickupmodel ) ) ) if ( !( self [[ level.equipment_safe_to_drop ]]( pickupmodel ) ) )
@ -38,7 +41,9 @@ placed_equipment_think( model, equipname, origin, angles, tradius, toffset )
return undefined; return undefined;
} }
} }
watchername = getsubstr( equipname, 0, equipname.size - 3 ); watchername = getsubstr( equipname, 0, equipname.size - 3 );
if ( isDefined( level.retrievehints[ watchername ] ) ) if ( isDefined( level.retrievehints[ watchername ] ) )
{ {
hint = level.retrievehints[ watchername ].hint; hint = level.retrievehints[ watchername ].hint;
@ -47,17 +52,22 @@ placed_equipment_think( model, equipname, origin, angles, tradius, toffset )
{ {
hint = &"MP_GENERIC_PICKUP"; hint = &"MP_GENERIC_PICKUP";
} }
icon = maps\mp\zombies\_zm_equipment::get_equipment_icon( equipname ); icon = maps\mp\zombies\_zm_equipment::get_equipment_icon( equipname );
if ( !isDefined( tradius ) ) if ( !isDefined( tradius ) )
{ {
tradius = 32; tradius = 32;
} }
torigin = origin; torigin = origin;
if ( isDefined( toffset ) ) if ( isDefined( toffset ) )
{ {
tforward = anglesToForward( angles ); tforward = anglesToForward( angles );
torigin += toffset * tforward; torigin += toffset * tforward;
} }
tup = anglesToUp( angles ); tup = anglesToUp( angles );
eq_unitrigger_offset = 12 * tup; eq_unitrigger_offset = 12 * tup;
pickupmodel.stub = maps\mp\zombies\_zm_equipment::generate_equipment_unitrigger( "trigger_radius_use", torigin + eq_unitrigger_offset, angles, 0, tradius, 64, hint, equipname, maps\mp\zombies\_zm_equipment::placed_equipment_unitrigger_think, pickupmodel.canmove ); pickupmodel.stub = maps\mp\zombies\_zm_equipment::generate_equipment_unitrigger( "trigger_radius_use", torigin + eq_unitrigger_offset, angles, 0, tradius, 64, hint, equipname, maps\mp\zombies\_zm_equipment::placed_equipment_unitrigger_think, pickupmodel.canmove );
@ -65,18 +75,22 @@ placed_equipment_think( model, equipname, origin, angles, tradius, toffset )
pickupmodel.stub.equipname = equipname; pickupmodel.stub.equipname = equipname;
pickupmodel.equipname = equipname; pickupmodel.equipname = equipname;
pickupmodel thread item_watch_damage(); pickupmodel thread item_watch_damage();
if ( maps\mp\zombies\_zm_equipment::is_limited_equipment( equipname ) ) if ( maps\mp\zombies\_zm_equipment::is_limited_equipment( equipname ) )
{ {
if ( !isDefined( level.dropped_equipment ) ) if ( !isDefined( level.dropped_equipment ) )
{ {
level.dropped_equipment = []; level.dropped_equipment = [];
} }
if ( isDefined( level.dropped_equipment[ equipname ] ) && isDefined( level.dropped_equipment[ equipname ].model ) ) if ( isDefined( level.dropped_equipment[ equipname ] ) && isDefined( level.dropped_equipment[ equipname ].model ) )
{ {
level.dropped_equipment[ equipname ].model maps\mp\zombies\_zm_equipment::dropped_equipment_destroy( 1 ); level.dropped_equipment[ equipname ].model maps\mp\zombies\_zm_equipment::dropped_equipment_destroy( 1 );
} }
level.dropped_equipment[ equipname ] = pickupmodel.stub; level.dropped_equipment[ equipname ] = pickupmodel.stub;
} }
maps\mp\zombies\_zm_equipment::destructible_equipment_list_add( pickupmodel ); maps\mp\zombies\_zm_equipment::destructible_equipment_list_add( pickupmodel );
return pickupmodel; return pickupmodel;
} }
@ -85,6 +99,7 @@ item_watch_damage()
{ {
self endon( "death" ); self endon( "death" );
self setcandamage( 1 ); self setcandamage( 1 );
while ( 1 ) while ( 1 )
{ {
self.health = 1000000; self.health = 1000000;

View File

@ -15,12 +15,14 @@ wait_for_team_death_and_round_end()
checking_for_round_end = 0; checking_for_round_end = 0;
checking_for_round_tie = 0; checking_for_round_tie = 0;
level.isresetting_grief = 0; level.isresetting_grief = 0;
while ( 1 ) while ( 1 )
{ {
cdc_alive = 0; cdc_alive = 0;
cia_alive = 0; cia_alive = 0;
players = get_players(); players = get_players();
i = 0; i = 0;
while ( i < players.size ) while ( i < players.size )
{ {
if ( !isDefined( players[ i ]._encounters_team ) ) if ( !isDefined( players[ i ]._encounters_team ) )
@ -28,19 +30,23 @@ wait_for_team_death_and_round_end()
i++; i++;
continue; continue;
} }
if ( players[ i ]._encounters_team == "A" ) if ( players[ i ]._encounters_team == "A" )
{ {
if ( is_player_valid( players[ i ] ) ) if ( is_player_valid( players[ i ] ) )
{ {
cia_alive++; cia_alive++;
} }
i++; i++;
continue; continue;
} }
if ( is_player_valid( players[ i ] ) ) if ( is_player_valid( players[ i ] ) )
{ {
cdc_alive++; cdc_alive++;
} }
i++; i++;
} }
@ -126,6 +132,7 @@ round_end(winner)
level endon("end_game"); level endon("end_game");
team = undefined; team = undefined;
if(isDefined(winner)) if(isDefined(winner))
{ {
if(winner == "A") if(winner == "A")
@ -144,6 +151,7 @@ round_end(winner)
} }
players = get_players(); players = get_players();
foreach(player in players) foreach(player in players)
{ {
// don't spawn tombstone powerup on next down // don't spawn tombstone powerup on next down
@ -213,18 +221,22 @@ game_won(winner)
level.zombie_vars[ "spectators_respawn" ] = 0; level.zombie_vars[ "spectators_respawn" ] = 0;
players = get_players(); players = get_players();
i = 0; i = 0;
while ( i < players.size ) while ( i < players.size )
{ {
players[ i ] freezecontrols( 1 ); players[ i ] freezecontrols( 1 );
if ( players[ i ]._encounters_team == winner ) if ( players[ i ]._encounters_team == winner )
{ {
players[ i ] thread maps\mp\zombies\_zm_audio_announcer::leaderdialogonplayer( "grief_won" ); players[ i ] thread maps\mp\zombies\_zm_audio_announcer::leaderdialogonplayer( "grief_won" );
i++; i++;
continue; continue;
} }
players[ i ] thread maps\mp\zombies\_zm_audio_announcer::leaderdialogonplayer( "grief_lost" ); players[ i ] thread maps\mp\zombies\_zm_audio_announcer::leaderdialogonplayer( "grief_lost" );
i++; i++;
} }
level notify( "game_module_ended", winner ); level notify( "game_module_ended", winner );
level._game_module_game_end_check = undefined; level._game_module_game_end_check = undefined;
maps\mp\gametypes_zm\_zm_gametype::track_encounters_win_stats( level.gamemodulewinningteam ); maps\mp\gametypes_zm\_zm_gametype::track_encounters_win_stats( level.gamemodulewinningteam );
@ -242,6 +254,7 @@ zombie_goto_round(target_round)
level.zombie_total = 0; level.zombie_total = 0;
zombies = get_round_enemy_array(); zombies = get_round_enemy_array();
if ( isDefined( zombies ) ) if ( isDefined( zombies ) )
{ {
for ( i = 0; i < zombies.size; i++ ) for ( i = 0; i < zombies.size; i++ )
@ -270,6 +283,7 @@ player_respawn_award()
{ {
maps\mp\zombies\_zm::award_grenades_for_survivors(); maps\mp\zombies\_zm::award_grenades_for_survivors();
players = get_players(); players = get_players();
foreach(player in players) foreach(player in players)
{ {
if(player.score < level.player_starting_points) if(player.score < level.player_starting_points)

View File

@ -8,17 +8,21 @@ onspawnplayer( predictedspawn )
{ {
predictedspawn = 0; predictedspawn = 0;
} }
pixbeginevent( "ZSURVIVAL:onSpawnPlayer" ); pixbeginevent( "ZSURVIVAL:onSpawnPlayer" );
self.usingobj = undefined; self.usingobj = undefined;
self.is_zombie = 0; self.is_zombie = 0;
if ( isDefined( level.custom_spawnplayer ) && is_true( self.player_initialized ) ) if ( isDefined( level.custom_spawnplayer ) && is_true( self.player_initialized ) )
{ {
self [[ level.custom_spawnplayer ]](); self [[ level.custom_spawnplayer ]]();
return; return;
} }
if ( isDefined( level.customspawnlogic ) ) if ( isDefined( level.customspawnlogic ) )
{ {
self [[ level.customspawnlogic ]]( predictedspawn ); self [[ level.customspawnlogic ]]( predictedspawn );
if ( predictedspawn ) if ( predictedspawn )
{ {
return; return;
@ -27,6 +31,7 @@ onspawnplayer( predictedspawn )
else else
{ {
location = level.scr_zm_map_start_location; location = level.scr_zm_map_start_location;
if ( ( location == "default" || location == "" ) && isDefined( level.default_start_location ) ) if ( ( location == "default" || location == "" ) && isDefined( level.default_start_location ) )
{ {
location = level.default_start_location; location = level.default_start_location;
@ -43,6 +48,7 @@ onspawnplayer( predictedspawn )
if ( isdefined( structs[ i ].script_string ) ) if ( isdefined( structs[ i ].script_string ) )
{ {
tokens = strtok( structs[ i ].script_string, " " ); tokens = strtok( structs[ i ].script_string, " " );
foreach ( token in tokens ) foreach ( token in tokens )
{ {
if ( token == match_string ) if ( token == match_string )
@ -96,6 +102,7 @@ onspawnplayer( predictedspawn )
if ( isDefined( level.game_mode_spawn_player_logic ) ) if ( isDefined( level.game_mode_spawn_player_logic ) )
{ {
spawn_in_spectate = [[ level.game_mode_spawn_player_logic ]](); spawn_in_spectate = [[ level.game_mode_spawn_player_logic ]]();
if ( spawn_in_spectate ) if ( spawn_in_spectate )
{ {
self delay_thread( 0.05, maps\mp\zombies\_zm::spawnspectator ); self delay_thread( 0.05, maps\mp\zombies\_zm::spawnspectator );
@ -109,26 +116,32 @@ onplayerspawned()
{ {
level endon( "end_game" ); level endon( "end_game" );
self endon( "disconnect" ); self endon( "disconnect" );
for ( ;; ) for ( ;; )
{ {
self waittill_either( "spawned_player", "fake_spawned_player" ); self waittill_either( "spawned_player", "fake_spawned_player" );
if ( isDefined( level.match_is_ending ) && level.match_is_ending ) if ( isDefined( level.match_is_ending ) && level.match_is_ending )
{ {
return; return;
} }
if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() )
{ {
self thread maps\mp\zombies\_zm_laststand::auto_revive( self ); self thread maps\mp\zombies\_zm_laststand::auto_revive( self );
} }
if ( isDefined( level.custom_player_fake_death_cleanup ) ) if ( isDefined( level.custom_player_fake_death_cleanup ) )
{ {
self [[ level.custom_player_fake_death_cleanup ]](); self [[ level.custom_player_fake_death_cleanup ]]();
} }
self setstance( "stand" ); self setstance( "stand" );
self.zmbdialogqueue = []; self.zmbdialogqueue = [];
self.zmbdialogactive = 0; self.zmbdialogactive = 0;
self.zmbdialoggroups = []; self.zmbdialoggroups = [];
self.zmbdialoggroup = ""; self.zmbdialoggroup = "";
if ( is_encounter() ) if ( is_encounter() )
{ {
if ( self.team == "axis" ) if ( self.team == "axis" )
@ -144,27 +157,35 @@ onplayerspawned()
self._team_name = &"ZOMBIE_RACE_TEAM_2"; self._team_name = &"ZOMBIE_RACE_TEAM_2";
} }
} }
self takeallweapons(); self takeallweapons();
if ( isDefined( level.givecustomcharacters ) ) if ( isDefined( level.givecustomcharacters ) )
{ {
self [[ level.givecustomcharacters ]](); self [[ level.givecustomcharacters ]]();
} }
weapons_restored = 0; weapons_restored = 0;
if ( isDefined( level.onplayerspawned_restore_previous_weapons ) ) if ( isDefined( level.onplayerspawned_restore_previous_weapons ) )
{ {
weapons_restored = self [[ level.onplayerspawned_restore_previous_weapons ]](); weapons_restored = self [[ level.onplayerspawned_restore_previous_weapons ]]();
} }
if ( !is_true( weapons_restored ) ) if ( !is_true( weapons_restored ) )
{ {
self giveweapon( "knife_zm" ); self giveweapon( "knife_zm" );
self give_start_weapon( 1 ); self give_start_weapon( 1 );
} }
weapons_restored = 0; weapons_restored = 0;
if ( isDefined( level._team_loadout ) ) if ( isDefined( level._team_loadout ) )
{ {
self giveweapon( level._team_loadout ); self giveweapon( level._team_loadout );
self switchtoweapon( level._team_loadout ); self switchtoweapon( level._team_loadout );
} }
if ( isDefined( level.gamemode_post_spawn_logic ) ) if ( isDefined( level.gamemode_post_spawn_logic ) )
{ {
self [[ level.gamemode_post_spawn_logic ]](); self [[ level.gamemode_post_spawn_logic ]]();
@ -360,12 +381,15 @@ menu_onmenuresponse()
case "allies": case "allies":
self [[ level.allies ]](); self [[ level.allies ]]();
break; break;
case "axis": case "axis":
self [[ level.teammenu ]]( response ); self [[ level.teammenu ]]( response );
break; break;
case "autoassign": case "autoassign":
self [[ level.autoassign ]]( 1 ); self [[ level.autoassign ]]( 1 );
break; break;
case "spectator": case "spectator":
self [[ level.spectator ]](); self [[ level.spectator ]]();
break; break;

View File

@ -12,6 +12,7 @@ revive_do_revive( playerbeingrevived, revivergun )
playerbeingrevived_player = playerbeingrevived; playerbeingrevived_player = playerbeingrevived;
playerbeingrevived_player.revive_hud.y = -160; playerbeingrevived_player.revive_hud.y = -160;
beingrevivedprogressbar_y = level.primaryprogressbary * -1; beingrevivedprogressbar_y = level.primaryprogressbary * -1;
if ( isDefined( playerbeingrevived.e_chugabud_player ) ) if ( isDefined( playerbeingrevived.e_chugabud_player ) )
{ {
playerbeingrevived_player = playerbeingrevived.e_chugabud_player; playerbeingrevived_player = playerbeingrevived.e_chugabud_player;
@ -258,6 +259,7 @@ laststand_clean_up_reviving_any( playerbeingrevived )
playerbeingrevived waittill_any( "disconnect", "zombified", "stop_revive_trigger", "chugabud_effects_cleanup" ); playerbeingrevived waittill_any( "disconnect", "zombified", "stop_revive_trigger", "chugabud_effects_cleanup" );
self.is_reviving_any--; self.is_reviving_any--;
if ( self.is_reviving_any < 0 ) if ( self.is_reviving_any < 0 )
{ {
self.is_reviving_any = 0; self.is_reviving_any = 0;
@ -290,6 +292,7 @@ laststand_clean_up_reviving_any( playerbeingrevived )
revive_give_back_weapons( gun ) revive_give_back_weapons( gun )
{ {
revive_tool = level.revive_tool; revive_tool = level.revive_tool;
if ( is_true( self.afterlife ) ) if ( is_true( self.afterlife ) )
{ {
revive_tool = level.afterlife_revive_tool; revive_tool = level.afterlife_revive_tool;
@ -326,6 +329,7 @@ revive_give_back_weapons( gun )
else else
{ {
primaryweapons = self getweaponslistprimaries(); primaryweapons = self getweaponslistprimaries();
if ( isDefined( primaryweapons ) && primaryweapons.size > 0 ) if ( isDefined( primaryweapons ) && primaryweapons.size > 0 )
{ {
self switchtoweapon( primaryweapons[ 0 ] ); self switchtoweapon( primaryweapons[ 0 ] );
@ -340,13 +344,16 @@ revive_hud_think()
while ( 1 ) while ( 1 )
{ {
wait 0.1; wait 0.1;
if ( !maps\mp\zombies\_zm_laststand::player_any_player_in_laststand() ) if ( !maps\mp\zombies\_zm_laststand::player_any_player_in_laststand() )
{ {
continue; continue;
} }
players = get_players(); players = get_players();
playertorevive = undefined; playertorevive = undefined;
i = 0; i = 0;
while ( i < players.size ) while ( i < players.size )
{ {
if ( !isDefined( players[ i ].revivetrigger ) || !isDefined( players[ i ].revivetrigger.createtime ) ) if ( !isDefined( players[ i ].revivetrigger ) || !isDefined( players[ i ].revivetrigger.createtime ) )
@ -354,15 +361,19 @@ revive_hud_think()
i++; i++;
continue; continue;
} }
if ( !isDefined( playertorevive ) || playertorevive.revivetrigger.createtime > players[ i ].revivetrigger.createtime ) if ( !isDefined( playertorevive ) || playertorevive.revivetrigger.createtime > players[ i ].revivetrigger.createtime )
{ {
playertorevive = players[ i ]; playertorevive = players[ i ];
} }
i++; i++;
} }
if ( isDefined( playertorevive ) ) if ( isDefined( playertorevive ) )
{ {
i = 0; i = 0;
while ( i < players.size ) while ( i < players.size )
{ {
if ( players[ i ] maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) if ( players[ i ] maps\mp\zombies\_zm_laststand::player_is_in_laststand() )
@ -370,6 +381,7 @@ revive_hud_think()
i++; i++;
continue; continue;
} }
if ( getDvar( "g_gametype" ) == "vs" ) if ( getDvar( "g_gametype" ) == "vs" )
{ {
if ( players[ i ].team != playertorevive.team ) if ( players[ i ].team != playertorevive.team )
@ -378,6 +390,7 @@ revive_hud_think()
continue; continue;
} }
} }
if ( is_encounter() ) if ( is_encounter() )
{ {
if ( players[ i ].sessionteam != playertorevive.sessionteam ) if ( players[ i ].sessionteam != playertorevive.sessionteam )
@ -385,15 +398,18 @@ revive_hud_think()
i++; i++;
continue; continue;
} }
if ( is_true( level.hide_revive_message ) ) if ( is_true( level.hide_revive_message ) )
{ {
i++; i++;
continue; continue;
} }
} }
players[ i ] thread maps\mp\zombies\_zm_laststand::faderevivemessageover( playertorevive, 3 ); players[ i ] thread maps\mp\zombies\_zm_laststand::faderevivemessageover( playertorevive, 3 );
i++; i++;
} }
playertorevive.revivetrigger.createtime = undefined; playertorevive.revivetrigger.createtime = undefined;
} }
} }
@ -440,6 +456,7 @@ auto_revive( reviver, dont_enable_weapons )
self.laststand = undefined; self.laststand = undefined;
valid_reviver = 1; valid_reviver = 1;
if ( is_gametype_active( "zgrief" ) && reviver == self ) if ( is_gametype_active( "zgrief" ) && reviver == self )
{ {
valid_reviver = 0; valid_reviver = 0;

View File

@ -19,16 +19,20 @@ treasure_chest_init( start_chest_name )
flag_init( "chest_has_been_used" ); flag_init( "chest_has_been_used" );
level.chest_moves = 0; level.chest_moves = 0;
level.chest_level = 0; level.chest_level = 0;
if ( level.chests.size == 0 ) if ( level.chests.size == 0 )
{ {
return; return;
} }
i = 0; i = 0;
while ( i < level.chests.size ) while ( i < level.chests.size )
{ {
level.chests[ i ].box_hacks = []; level.chests[ i ].box_hacks = [];
level.chests[ i ].orig_origin = level.chests[ i ].origin; level.chests[ i ].orig_origin = level.chests[ i ].origin;
level.chests[ i ] maps\mp\zombies\_zm_magicbox::get_chest_pieces(); level.chests[ i ] maps\mp\zombies\_zm_magicbox::get_chest_pieces();
if ( isDefined( level.chests[ i ].zombie_cost ) ) if ( isDefined( level.chests[ i ].zombie_cost ) )
{ {
level.chests[ i ].old_cost = level.chests[ i ].zombie_cost; level.chests[ i ].old_cost = level.chests[ i ].zombie_cost;
@ -39,17 +43,22 @@ treasure_chest_init( start_chest_name )
{ {
level.chests[ i ].old_cost = 950; level.chests[ i ].old_cost = 950;
} }
i++; i++;
} }
if ( (getDvar("g_gametype") == "zgrief" && getDvarIntDefault("ui_gametype_pro", 0)) || !level.enable_magic ) if ( (getDvar("g_gametype") == "zgrief" && getDvarIntDefault("ui_gametype_pro", 0)) || !level.enable_magic )
{ {
foreach (chest in level.chests) foreach (chest in level.chests)
{ {
chest maps\mp\zombies\_zm_magicbox::hide_chest(); chest maps\mp\zombies\_zm_magicbox::hide_chest();
} }
return; return;
} }
level.chest_accessed = 0; level.chest_accessed = 0;
if ( level.chests.size > 1 ) if ( level.chests.size > 1 )
{ {
flag_set( "moving_chest_enabled" ); flag_set( "moving_chest_enabled" );
@ -60,6 +69,7 @@ treasure_chest_init( start_chest_name )
level.chest_index = 0; level.chest_index = 0;
level.chests[ 0 ].no_fly_away = 1; level.chests[ 0 ].no_fly_away = 1;
} }
init_starting_chest_location( start_chest_name ); init_starting_chest_location( start_chest_name );
array_thread( level.chests, ::treasure_chest_think ); array_thread( level.chests, ::treasure_chest_think );
} }
@ -522,6 +532,7 @@ treasure_chest_weapon_spawn( chest, player, respin )
self.weapon_string = undefined; self.weapon_string = undefined;
joker_angles = angles - vectorscale( ( 0, 1, 0 ), 90.0 ); joker_angles = angles - vectorscale( ( 0, 1, 0 ), 90.0 );
if ( angles[2] < 0 ) if ( angles[2] < 0 )
{ {
joker_angles = angles + vectorscale( ( 0, 1, 0 ), 90.0 ); joker_angles = angles + vectorscale( ( 0, 1, 0 ), 90.0 );
@ -714,28 +725,36 @@ treasure_chest_move( player_vox )
level waittill( "weapon_fly_away_start" ); level waittill( "weapon_fly_away_start" );
players = get_players(); players = get_players();
array_thread( players, maps\mp\zombies\_zm_magicbox::play_crazi_sound ); array_thread( players, maps\mp\zombies\_zm_magicbox::play_crazi_sound );
if ( isDefined( player_vox ) ) if ( isDefined( player_vox ) )
{ {
player_vox delay_thread( randomintrange( 2, 7 ), maps\mp\zombies\_zm_audio::create_and_play_dialog, "general", "box_move" ); player_vox delay_thread( randomintrange( 2, 7 ), maps\mp\zombies\_zm_audio::create_and_play_dialog, "general", "box_move" );
} }
level waittill( "weapon_fly_away_end" ); level waittill( "weapon_fly_away_end" );
if ( isDefined( self.zbarrier ) ) if ( isDefined( self.zbarrier ) )
{ {
self maps\mp\zombies\_zm_magicbox::hide_chest( 1 ); self maps\mp\zombies\_zm_magicbox::hide_chest( 1 );
} }
wait 0.1; wait 0.1;
if ( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] == 1 && self [[ level._zombiemode_check_firesale_loc_valid_func ]]() ) if ( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] == 1 && self [[ level._zombiemode_check_firesale_loc_valid_func ]]() )
{ {
current_sale_time = level.zombie_vars[ "zombie_powerup_fire_sale_time" ]; current_sale_time = level.zombie_vars[ "zombie_powerup_fire_sale_time" ];
wait_network_frame(); wait_network_frame();
self thread maps\mp\zombies\_zm_magicbox::fire_sale_fix(); self thread maps\mp\zombies\_zm_magicbox::fire_sale_fix();
level.zombie_vars[ "zombie_powerup_fire_sale_time" ] = current_sale_time; level.zombie_vars[ "zombie_powerup_fire_sale_time" ] = current_sale_time;
while ( level.zombie_vars[ "zombie_powerup_fire_sale_time" ] > 0 ) while ( level.zombie_vars[ "zombie_powerup_fire_sale_time" ] > 0 )
{ {
wait 0.1; wait 0.1;
} }
} }
level.verify_chest = 0; level.verify_chest = 0;
if ( isDefined( level._zombiemode_custom_box_move_logic ) ) if ( isDefined( level._zombiemode_custom_box_move_logic ) )
{ {
[[ level._zombiemode_custom_box_move_logic ]](); [[ level._zombiemode_custom_box_move_logic ]]();
@ -744,10 +763,12 @@ treasure_chest_move( player_vox )
{ {
default_box_move_logic(); default_box_move_logic();
} }
if ( isDefined( level.chests[ level.chest_index ].box_hacks[ "summon_box" ] ) ) if ( isDefined( level.chests[ level.chest_index ].box_hacks[ "summon_box" ] ) )
{ {
level.chests[ level.chest_index ] [[ level.chests[ level.chest_index ].box_hacks[ "summon_box" ] ]]( 0 ); level.chests[ level.chest_index ] [[ level.chests[ level.chest_index ].box_hacks[ "summon_box" ] ]]( 0 );
} }
playfx( level._effect[ "poltergeist" ], level.chests[ level.chest_index ].zbarrier.origin ); playfx( level._effect[ "poltergeist" ], level.chests[ level.chest_index ].zbarrier.origin );
level.chests[ level.chest_index ] maps\mp\zombies\_zm_magicbox::show_chest(); level.chests[ level.chest_index ] maps\mp\zombies\_zm_magicbox::show_chest();
flag_clear( "moving_chest_now" ); flag_clear( "moving_chest_now" );
@ -799,6 +820,7 @@ timer_til_despawn( v_float )
self endon( "kill_weapon_movement" ); self endon( "kill_weapon_movement" );
self moveto( self.origin - ( v_float * 0.85 ), level.magicbox_timeout, level.magicbox_timeout * 0.5 ); self moveto( self.origin - ( v_float * 0.85 ), level.magicbox_timeout, level.magicbox_timeout * 0.5 );
wait level.magicbox_timeout; wait level.magicbox_timeout;
if ( isDefined( self ) ) if ( isDefined( self ) )
{ {
self delete(); self delete();
@ -824,6 +846,7 @@ decide_hide_show_hint( endon_notify, second_endon_notify, onlyplayer )
use_choke = 1; use_choke = 1;
is_grenade = 0; is_grenade = 0;
if ( isDefined( self.zombie_weapon_upgrade ) && weaponType( self.zombie_weapon_upgrade ) == "grenade" ) if ( isDefined( self.zombie_weapon_upgrade ) && weaponType( self.zombie_weapon_upgrade ) == "grenade" )
{ {
is_grenade = 1; is_grenade = 1;
@ -888,6 +911,7 @@ trigger_visible_to_player( player )
else else
{ {
is_chest = 0; is_chest = 0;
foreach ( chest in level.chests ) foreach ( chest in level.chests )
{ {
if ( self.stub.trigger_target == chest ) if ( self.stub.trigger_target == chest )

View File

@ -7,11 +7,13 @@
change_melee_weapon( weapon_name, current_weapon ) change_melee_weapon( weapon_name, current_weapon )
{ {
current_melee_weapon = self get_player_melee_weapon(); current_melee_weapon = self get_player_melee_weapon();
if ( isDefined( current_melee_weapon ) && current_melee_weapon != weapon_name ) if ( isDefined( current_melee_weapon ) && current_melee_weapon != weapon_name )
{ {
self takeweapon( current_melee_weapon ); self takeweapon( current_melee_weapon );
unacquire_weapon_toggle( current_melee_weapon ); unacquire_weapon_toggle( current_melee_weapon );
} }
self set_player_melee_weapon( weapon_name ); self set_player_melee_weapon( weapon_name );
had_ballistic = 0; had_ballistic = 0;
had_ballistic_upgraded = 0; had_ballistic_upgraded = 0;
@ -21,52 +23,65 @@ change_melee_weapon( weapon_name, current_weapon )
ballistic_ammo_stock = 0; ballistic_ammo_stock = 0;
primaryweapons = self getweaponslistprimaries(); primaryweapons = self getweaponslistprimaries();
i = 0; i = 0;
while ( i < primaryweapons.size ) while ( i < primaryweapons.size )
{ {
primary_weapon = primaryweapons[ i ]; primary_weapon = primaryweapons[ i ];
if ( issubstr( primary_weapon, "knife_ballistic_" ) ) if ( issubstr( primary_weapon, "knife_ballistic_" ) )
{ {
had_ballistic = 1; had_ballistic = 1;
if ( primary_weapon == current_weapon ) if ( primary_weapon == current_weapon )
{ {
ballistic_was_primary = 1; ballistic_was_primary = 1;
} }
old_ballistic = primary_weapon; old_ballistic = primary_weapon;
ballistic_ammo_clip = self getWeaponAmmoClip( primary_weapon ); ballistic_ammo_clip = self getWeaponAmmoClip( primary_weapon );
ballistic_ammo_stock = self getWeaponAmmoStock( primary_weapon ); ballistic_ammo_stock = self getWeaponAmmoStock( primary_weapon );
self notify( "zmb_lost_knife" ); self notify( "zmb_lost_knife" );
self takeweapon( primary_weapon ); self takeweapon( primary_weapon );
unacquire_weapon_toggle( primary_weapon ); unacquire_weapon_toggle( primary_weapon );
if ( issubstr( primary_weapon, "upgraded" ) ) if ( issubstr( primary_weapon, "upgraded" ) )
{ {
had_ballistic_upgraded = 1; had_ballistic_upgraded = 1;
} }
} }
i++; i++;
} }
if ( had_ballistic ) if ( had_ballistic )
{ {
if ( had_ballistic_upgraded ) if ( had_ballistic_upgraded )
{ {
new_ballistic = level.ballistic_upgraded_weapon_name[ weapon_name ]; new_ballistic = level.ballistic_upgraded_weapon_name[ weapon_name ];
if ( ballistic_was_primary ) if ( ballistic_was_primary )
{ {
current_weapon = new_ballistic; current_weapon = new_ballistic;
} }
self giveweapon( new_ballistic, 0, self maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( new_ballistic ) ); self giveweapon( new_ballistic, 0, self maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( new_ballistic ) );
} }
else else
{ {
new_ballistic = level.ballistic_weapon_name[ weapon_name ]; new_ballistic = level.ballistic_weapon_name[ weapon_name ];
if ( ballistic_was_primary ) if ( ballistic_was_primary )
{ {
current_weapon = new_ballistic; current_weapon = new_ballistic;
} }
self giveweapon( new_ballistic, 0 ); self giveweapon( new_ballistic, 0 );
} }
self giveMaxAmmo( new_ballistic ); self giveMaxAmmo( new_ballistic );
self seteverhadweaponall( 1 ); self seteverhadweaponall( 1 );
} }
return current_weapon; return current_weapon;
} }

View File

@ -26,6 +26,7 @@ machine_selector()
do do
new_machine = machines[randomint( machines.size )]; new_machine = machines[randomint( machines.size )];
while ( new_machine == level.random_perk_start_machine ); while ( new_machine == level.random_perk_start_machine );
level.random_perk_start_machine = new_machine; level.random_perk_start_machine = new_machine;

View File

@ -154,6 +154,7 @@ vending_trigger_think()
case "specialty_armorvest": case "specialty_armorvest":
cost = 2500; cost = 2500;
break; break;
case "specialty_quickrevive_upgrade": case "specialty_quickrevive_upgrade":
case "specialty_quickrevive": case "specialty_quickrevive":
if ( solo ) if ( solo )
@ -162,22 +163,27 @@ vending_trigger_think()
cost = 1500; cost = 1500;
break; break;
case "specialty_fastreload_upgrade": case "specialty_fastreload_upgrade":
case "specialty_fastreload": case "specialty_fastreload":
cost = 3000; cost = 3000;
break; break;
case "specialty_rof_upgrade": case "specialty_rof_upgrade":
case "specialty_rof": case "specialty_rof":
cost = 2000; cost = 2000;
break; break;
case "specialty_longersprint_upgrade": case "specialty_longersprint_upgrade":
case "specialty_longersprint": case "specialty_longersprint":
cost = 2000; cost = 2000;
break; break;
case "specialty_deadshot_upgrade": case "specialty_deadshot_upgrade":
case "specialty_deadshot": case "specialty_deadshot":
cost = 1500; cost = 1500;
break; break;
case "specialty_additionalprimaryweapon_upgrade": case "specialty_additionalprimaryweapon_upgrade":
case "specialty_additionalprimaryweapon": case "specialty_additionalprimaryweapon":
cost = 4000; cost = 4000;
@ -215,6 +221,7 @@ vending_trigger_think()
case "specialty_armorvest": case "specialty_armorvest":
self sethintstring( &"ZOMBIE_PERK_JUGGERNAUT", cost ); self sethintstring( &"ZOMBIE_PERK_JUGGERNAUT", cost );
break; break;
case "specialty_quickrevive_upgrade": case "specialty_quickrevive_upgrade":
case "specialty_quickrevive": case "specialty_quickrevive":
if ( solo ) if ( solo )
@ -223,34 +230,42 @@ vending_trigger_think()
self sethintstring( &"ZOMBIE_PERK_QUICKREVIVE", cost ); self sethintstring( &"ZOMBIE_PERK_QUICKREVIVE", cost );
break; break;
case "specialty_fastreload_upgrade": case "specialty_fastreload_upgrade":
case "specialty_fastreload": case "specialty_fastreload":
self sethintstring( &"ZOMBIE_PERK_FASTRELOAD", cost ); self sethintstring( &"ZOMBIE_PERK_FASTRELOAD", cost );
break; break;
case "specialty_rof_upgrade": case "specialty_rof_upgrade":
case "specialty_rof": case "specialty_rof":
self sethintstring( &"ZOMBIE_PERK_DOUBLETAP", cost ); self sethintstring( &"ZOMBIE_PERK_DOUBLETAP", cost );
break; break;
case "specialty_longersprint_upgrade": case "specialty_longersprint_upgrade":
case "specialty_longersprint": case "specialty_longersprint":
self sethintstring( &"ZOMBIE_PERK_MARATHON", cost ); self sethintstring( &"ZOMBIE_PERK_MARATHON", cost );
break; break;
case "specialty_deadshot_upgrade": case "specialty_deadshot_upgrade":
case "specialty_deadshot": case "specialty_deadshot":
self sethintstring( &"ZOMBIE_PERK_DEADSHOT", cost ); self sethintstring( &"ZOMBIE_PERK_DEADSHOT", cost );
break; break;
case "specialty_additionalprimaryweapon_upgrade": case "specialty_additionalprimaryweapon_upgrade":
case "specialty_additionalprimaryweapon": case "specialty_additionalprimaryweapon":
self sethintstring( &"ZOMBIE_PERK_ADDITIONALPRIMARYWEAPON", cost ); self sethintstring( &"ZOMBIE_PERK_ADDITIONALPRIMARYWEAPON", cost );
break; break;
case "specialty_scavenger_upgrade": case "specialty_scavenger_upgrade":
case "specialty_scavenger": case "specialty_scavenger":
self sethintstring( &"ZOMBIE_PERK_TOMBSTONE", cost ); self sethintstring( &"ZOMBIE_PERK_TOMBSTONE", cost );
break; break;
case "specialty_finalstand_upgrade": case "specialty_finalstand_upgrade":
case "specialty_finalstand": case "specialty_finalstand":
self sethintstring( &"ZOMBIE_PERK_CHUGABUD", cost ); self sethintstring( &"ZOMBIE_PERK_CHUGABUD", cost );
break; break;
default: default:
self sethintstring( perk + " Cost: " + level.zombie_vars["zombie_perk_cost"] ); self sethintstring( perk + " Cost: " + level.zombie_vars["zombie_perk_cost"] );
} }
@ -393,40 +408,49 @@ perk_give_bottle_end( gun, perk )
case "specialty_rof": case "specialty_rof":
weapon = level.machine_assets["doubletap"].weapon; weapon = level.machine_assets["doubletap"].weapon;
break; break;
case "specialty_longersprint_upgrade": case "specialty_longersprint_upgrade":
case "specialty_longersprint": case "specialty_longersprint":
weapon = level.machine_assets["marathon"].weapon; weapon = level.machine_assets["marathon"].weapon;
break; break;
case "specialty_flakjacket_upgrade": case "specialty_flakjacket_upgrade":
case "specialty_flakjacket": case "specialty_flakjacket":
weapon = level.machine_assets["divetonuke"].weapon; weapon = level.machine_assets["divetonuke"].weapon;
break; break;
case "specialty_armorvest_upgrade": case "specialty_armorvest_upgrade":
case "specialty_armorvest": case "specialty_armorvest":
weapon = level.machine_assets["juggernog"].weapon; weapon = level.machine_assets["juggernog"].weapon;
self.jugg_used = 1; self.jugg_used = 1;
break; break;
case "specialty_quickrevive_upgrade": case "specialty_quickrevive_upgrade":
case "specialty_quickrevive": case "specialty_quickrevive":
weapon = level.machine_assets["revive"].weapon; weapon = level.machine_assets["revive"].weapon;
break; break;
case "specialty_fastreload_upgrade": case "specialty_fastreload_upgrade":
case "specialty_fastreload": case "specialty_fastreload":
weapon = level.machine_assets["speedcola"].weapon; weapon = level.machine_assets["speedcola"].weapon;
self.speed_used = 1; self.speed_used = 1;
break; break;
case "specialty_deadshot_upgrade": case "specialty_deadshot_upgrade":
case "specialty_deadshot": case "specialty_deadshot":
weapon = level.machine_assets["deadshot"].weapon; weapon = level.machine_assets["deadshot"].weapon;
break; break;
case "specialty_additionalprimaryweapon_upgrade": case "specialty_additionalprimaryweapon_upgrade":
case "specialty_additionalprimaryweapon": case "specialty_additionalprimaryweapon":
weapon = level.machine_assets["additionalprimaryweapon"].weapon; weapon = level.machine_assets["additionalprimaryweapon"].weapon;
break; break;
case "specialty_scavenger_upgrade": case "specialty_scavenger_upgrade":
case "specialty_scavenger": case "specialty_scavenger":
weapon = level.machine_assets["tombstone"].weapon; weapon = level.machine_assets["tombstone"].weapon;
break; break;
case "specialty_finalstand_upgrade": case "specialty_finalstand_upgrade":
case "specialty_finalstand": case "specialty_finalstand":
weapon = level.machine_assets["whoswho"].weapon; weapon = level.machine_assets["whoswho"].weapon;
@ -676,6 +700,7 @@ destroy_weapon_in_blackout( player )
{ {
self.worldgun.worldgundw delete(); self.worldgun.worldgundw delete();
} }
self.worldgun delete(); self.worldgun delete();
} }
@ -686,9 +711,11 @@ give_perk( perk, bought )
{ {
self setperk( perk ); self setperk( perk );
self.num_perks++; self.num_perks++;
if ( isDefined( bought ) && bought ) if ( isDefined( bought ) && bought )
{ {
self maps\mp\zombies\_zm_audio::playerexert( "burp" ); self maps\mp\zombies\_zm_audio::playerexert( "burp" );
if ( isDefined( level.remove_perk_vo_delay ) && level.remove_perk_vo_delay ) if ( isDefined( level.remove_perk_vo_delay ) && level.remove_perk_vo_delay )
{ {
self maps\mp\zombies\_zm_audio::perk_vox( perk ); self maps\mp\zombies\_zm_audio::perk_vox( perk );
@ -697,9 +724,12 @@ give_perk( perk, bought )
{ {
self delay_thread( 1.5, maps\mp\zombies\_zm_audio::perk_vox, perk ); self delay_thread( 1.5, maps\mp\zombies\_zm_audio::perk_vox, perk );
} }
self notify( "perk_bought" ); self notify( "perk_bought" );
} }
self perk_set_max_health_if_jugg( perk, 1, 0 ); self perk_set_max_health_if_jugg( perk, 1, 0 );
if ( isDefined( level.disable_deadshot_clientfield ) && !level.disable_deadshot_clientfield ) if ( isDefined( level.disable_deadshot_clientfield ) && !level.disable_deadshot_clientfield )
{ {
if ( perk == "specialty_deadshot" ) if ( perk == "specialty_deadshot" )
@ -714,18 +744,23 @@ give_perk( perk, bought )
} }
} }
} }
if ( perk == "specialty_scavenger" ) if ( perk == "specialty_scavenger" )
{ {
self.hasperkspecialtytombstone = 1; self.hasperkspecialtytombstone = 1;
} }
players = get_players(); players = get_players();
if ( use_solo_revive() && perk == "specialty_quickrevive" ) if ( use_solo_revive() && perk == "specialty_quickrevive" )
{ {
self.lives = 1; self.lives = 1;
if ( !isDefined( level.solo_lives_given ) ) if ( !isDefined( level.solo_lives_given ) )
{ {
level.solo_lives_given = 0; level.solo_lives_given = 0;
} }
if ( isDefined( level.solo_game_free_player_quickrevive ) ) if ( isDefined( level.solo_game_free_player_quickrevive ) )
{ {
level.solo_game_free_player_quickrevive = undefined; level.solo_game_free_player_quickrevive = undefined;
@ -734,40 +769,50 @@ give_perk( perk, bought )
{ {
level.solo_lives_given++; level.solo_lives_given++;
} }
if ( level.solo_lives_given >= 3 ) if ( level.solo_lives_given >= 3 )
{ {
flag_set( "solo_revive" ); flag_set( "solo_revive" );
} }
self thread solo_revive_buy_trigger_move( perk ); self thread solo_revive_buy_trigger_move( perk );
} }
if ( perk == "specialty_finalstand" ) if ( perk == "specialty_finalstand" )
{ {
self.hasperkspecialtychugabud = 1; self.hasperkspecialtychugabud = 1;
self notify( "perk_chugabud_activated" ); self notify( "perk_chugabud_activated" );
} }
if ( perk == "specialty_additionalprimaryweapon" ) if ( perk == "specialty_additionalprimaryweapon" )
{ {
self scripts\zm\replaced\_zm::restore_additionalprimaryweapon(); self scripts\zm\replaced\_zm::restore_additionalprimaryweapon();
} }
if ( isDefined( level._custom_perks[ perk ] ) && isDefined( level._custom_perks[ perk ].player_thread_give ) ) if ( isDefined( level._custom_perks[ perk ] ) && isDefined( level._custom_perks[ perk ].player_thread_give ) )
{ {
self thread [[ level._custom_perks[ perk ].player_thread_give ]](); self thread [[ level._custom_perks[ perk ].player_thread_give ]]();
} }
self set_perk_clientfield( perk, 1 ); self set_perk_clientfield( perk, 1 );
maps\mp\_demo::bookmark( "zm_player_perk", getTime(), self ); maps\mp\_demo::bookmark( "zm_player_perk", getTime(), self );
self maps\mp\zombies\_zm_stats::increment_client_stat( "perks_drank" ); self maps\mp\zombies\_zm_stats::increment_client_stat( "perks_drank" );
self maps\mp\zombies\_zm_stats::increment_client_stat( perk + "_drank" ); self maps\mp\zombies\_zm_stats::increment_client_stat( perk + "_drank" );
self maps\mp\zombies\_zm_stats::increment_player_stat( perk + "_drank" ); self maps\mp\zombies\_zm_stats::increment_player_stat( perk + "_drank" );
self maps\mp\zombies\_zm_stats::increment_player_stat( "perks_drank" ); self maps\mp\zombies\_zm_stats::increment_player_stat( "perks_drank" );
if ( !isDefined( self.perk_history ) ) if ( !isDefined( self.perk_history ) )
{ {
self.perk_history = []; self.perk_history = [];
} }
self.perk_history = add_to_array( self.perk_history, perk, 0 ); self.perk_history = add_to_array( self.perk_history, perk, 0 );
if ( !isDefined( self.perks_active ) ) if ( !isDefined( self.perks_active ) )
{ {
self.perks_active = []; self.perks_active = [];
} }
self.perks_active[ self.perks_active.size ] = perk; self.perks_active[ self.perks_active.size ] = perk;
self notify( "perk_acquired" ); self notify( "perk_acquired" );
self thread perk_think( perk ); self thread perk_think( perk );
@ -780,10 +825,12 @@ perk_think( perk )
perk_str = perk + "_stop"; perk_str = perk + "_stop";
result = self waittill_any_return( "fake_death", "death", "player_downed", perk_str ); result = self waittill_any_return( "fake_death", "death", "player_downed", perk_str );
do_retain = 1; do_retain = 1;
if ( use_solo_revive() && perk == "specialty_quickrevive" ) if ( use_solo_revive() && perk == "specialty_quickrevive" )
{ {
do_retain = 0; do_retain = 0;
} }
if ( do_retain ) if ( do_retain )
{ {
if ( is_true( self._retain_perks ) ) if ( is_true( self._retain_perks ) )
@ -795,6 +842,7 @@ perk_think( perk )
return; return;
} }
} }
self unsetperk( perk ); self unsetperk( perk );
self.num_perks--; self.num_perks--;
@ -803,43 +851,55 @@ perk_think( perk )
case "specialty_armorvest": case "specialty_armorvest":
self setmaxhealth( self.premaxhealth ); self setmaxhealth( self.premaxhealth );
break; break;
case "specialty_additionalprimaryweapon": case "specialty_additionalprimaryweapon":
if ( result == perk_str ) if ( result == perk_str )
{ {
self maps\mp\zombies\_zm::take_additionalprimaryweapon(); self maps\mp\zombies\_zm::take_additionalprimaryweapon();
} }
break; break;
case "specialty_deadshot": case "specialty_deadshot":
if ( !is_true( level.disable_deadshot_clientfield ) ) if ( !is_true( level.disable_deadshot_clientfield ) )
{ {
self setclientfieldtoplayer( "deadshot_perk", 0 ); self setclientfieldtoplayer( "deadshot_perk", 0 );
} }
break; break;
case "specialty_deadshot_upgrade": case "specialty_deadshot_upgrade":
if ( !is_true( level.disable_deadshot_clientfield ) ) if ( !is_true( level.disable_deadshot_clientfield ) )
{ {
self setclientfieldtoplayer( "deadshot_perk", 0 ); self setclientfieldtoplayer( "deadshot_perk", 0 );
} }
break; break;
} }
if ( isDefined( level._custom_perks[ perk ] ) && isDefined( level._custom_perks[ perk ].player_thread_take ) ) if ( isDefined( level._custom_perks[ perk ] ) && isDefined( level._custom_perks[ perk ].player_thread_take ) )
{ {
self thread [[ level._custom_perks[ perk ].player_thread_take ]](); self thread [[ level._custom_perks[ perk ].player_thread_take ]]();
} }
self set_perk_clientfield( perk, 0 ); self set_perk_clientfield( perk, 0 );
self.perk_purchased = undefined; self.perk_purchased = undefined;
if ( isDefined( level.perk_lost_func ) ) if ( isDefined( level.perk_lost_func ) )
{ {
self [[ level.perk_lost_func ]]( perk ); self [[ level.perk_lost_func ]]( perk );
} }
if ( isDefined( self.perks_active ) && isinarray( self.perks_active, perk ) ) if ( isDefined( self.perks_active ) && isinarray( self.perks_active, perk ) )
{ {
arrayremovevalue( self.perks_active, perk, 0 ); arrayremovevalue( self.perks_active, perk, 0 );
} }
if ( isDefined( self.disabled_perks ) && isDefined( self.disabled_perks[perk] ) ) if ( isDefined( self.disabled_perks ) && isDefined( self.disabled_perks[perk] ) )
{ {
self.disabled_perks[perk] = undefined; self.disabled_perks[perk] = undefined;
} }
self notify( "perk_lost" ); self notify( "perk_lost" );
} }
@ -926,33 +986,43 @@ set_perk_clientfield( perk, state )
case "specialty_additionalprimaryweapon": case "specialty_additionalprimaryweapon":
self setclientfieldtoplayer( "perk_additional_primary_weapon", state ); self setclientfieldtoplayer( "perk_additional_primary_weapon", state );
break; break;
case "specialty_deadshot": case "specialty_deadshot":
self setclientfieldtoplayer( "perk_dead_shot", state ); self setclientfieldtoplayer( "perk_dead_shot", state );
break; break;
case "specialty_flakjacket": case "specialty_flakjacket":
self setclientfieldtoplayer( "perk_dive_to_nuke", state ); self setclientfieldtoplayer( "perk_dive_to_nuke", state );
break; break;
case "specialty_rof": case "specialty_rof":
self setclientfieldtoplayer( "perk_double_tap", state ); self setclientfieldtoplayer( "perk_double_tap", state );
break; break;
case "specialty_armorvest": case "specialty_armorvest":
self setclientfieldtoplayer( "perk_juggernaut", state ); self setclientfieldtoplayer( "perk_juggernaut", state );
break; break;
case "specialty_movefaster": case "specialty_movefaster":
self setclientfieldtoplayer( "perk_marathon", state ); self setclientfieldtoplayer( "perk_marathon", state );
break; break;
case "specialty_quickrevive": case "specialty_quickrevive":
self setclientfieldtoplayer( "perk_quick_revive", state ); self setclientfieldtoplayer( "perk_quick_revive", state );
break; break;
case "specialty_fastreload": case "specialty_fastreload":
self setclientfieldtoplayer( "perk_sleight_of_hand", state ); self setclientfieldtoplayer( "perk_sleight_of_hand", state );
break; break;
case "specialty_scavenger": case "specialty_scavenger":
self setclientfieldtoplayer( "perk_tombstone", state ); self setclientfieldtoplayer( "perk_tombstone", state );
break; break;
case "specialty_finalstand": case "specialty_finalstand":
self setclientfieldtoplayer( "perk_chugabud", state ); self setclientfieldtoplayer( "perk_chugabud", state );
break; break;
default: default:
break; break;
} }
@ -1024,6 +1094,7 @@ remove_pap_machine()
exceptions = array("specialty_armorvest", "specialty_fastreload"); exceptions = array("specialty_armorvest", "specialty_fastreload");
structs = getStructArray("zm_perk_machine", "targetname"); structs = getStructArray("zm_perk_machine", "targetname");
foreach(struct in structs) foreach(struct in structs)
{ {
if(isDefined(struct.script_noteworthy) && struct.script_noteworthy == "specialty_weapupgrade") if(isDefined(struct.script_noteworthy) && struct.script_noteworthy == "specialty_weapupgrade")
@ -1063,6 +1134,7 @@ move_perk_machine(map, location, perk, move_struct)
if(isDefined(move_struct.script_string)) if(isDefined(move_struct.script_string))
{ {
gametypes = strTok(move_struct.script_string, " "); gametypes = strTok(move_struct.script_string, " ");
foreach(gametype in gametypes) foreach(gametype in gametypes)
{ {
perk_struct.script_string += " " + gametype + "_perks_" + location; perk_struct.script_string += " " + gametype + "_perks_" + location;
@ -1104,15 +1176,18 @@ turn_movefaster_on()
machine = getentarray( "vending_marathon", "targetname" ); machine = getentarray( "vending_marathon", "targetname" );
machine_triggers = getentarray( "vending_marathon", "target" ); machine_triggers = getentarray( "vending_marathon", "target" );
i = 0; i = 0;
while ( i < machine.size ) while ( i < machine.size )
{ {
machine[ i ] setmodel( level.machine_assets[ "marathon" ].off_model ); machine[ i ] setmodel( level.machine_assets[ "marathon" ].off_model );
i++; i++;
} }
array_thread( machine_triggers, ::set_power_on, 0 ); array_thread( machine_triggers, ::set_power_on, 0 );
level thread do_initial_power_off_callback( machine, "marathon" ); level thread do_initial_power_off_callback( machine, "marathon" );
level waittill( "marathon_on" ); level waittill( "marathon_on" );
i = 0; i = 0;
while ( i < machine.size ) while ( i < machine.size )
{ {
machine[ i ] setmodel( level.machine_assets[ "marathon" ].on_model ); machine[ i ] setmodel( level.machine_assets[ "marathon" ].on_model );
@ -1122,17 +1197,22 @@ turn_movefaster_on()
machine[ i ] thread play_loop_on_machine(); machine[ i ] thread play_loop_on_machine();
i++; i++;
} }
level notify( "specialty_movefaster_power_on" ); level notify( "specialty_movefaster_power_on" );
array_thread( machine_triggers, ::set_power_on, 1 ); array_thread( machine_triggers, ::set_power_on, 1 );
if ( isDefined( level.machine_assets[ "marathon" ].power_on_callback ) ) if ( isDefined( level.machine_assets[ "marathon" ].power_on_callback ) )
{ {
array_thread( machine, level.machine_assets[ "marathon" ].power_on_callback ); array_thread( machine, level.machine_assets[ "marathon" ].power_on_callback );
} }
level waittill( "marathon_off" ); level waittill( "marathon_off" );
if ( isDefined( level.machine_assets[ "marathon" ].power_off_callback ) ) if ( isDefined( level.machine_assets[ "marathon" ].power_off_callback ) )
{ {
array_thread( machine, level.machine_assets[ "marathon" ].power_off_callback ); array_thread( machine, level.machine_assets[ "marathon" ].power_off_callback );
} }
array_thread( machine, ::turn_perk_off ); array_thread( machine, ::turn_perk_off );
} }
} }

View File

@ -38,16 +38,19 @@ playerhealthregen()
healthoverlaycutoff = 0.2; healthoverlaycutoff = 0.2;
self thread maps\mp\zombies\_zm_playerhealth::playerhurtcheck(); self thread maps\mp\zombies\_zm_playerhealth::playerhurtcheck();
if ( !isDefined( self.veryhurt ) ) if ( !isDefined( self.veryhurt ) )
{ {
self.veryhurt = 0; self.veryhurt = 0;
} }
self.bolthit = 0; self.bolthit = 0;
if ( getDvar( "scr_playerInvulTimeScale" ) == "" ) if ( getDvar( "scr_playerInvulTimeScale" ) == "" )
{ {
setdvar( "scr_playerInvulTimeScale", 1 ); setdvar( "scr_playerInvulTimeScale", 1 );
} }
playerinvultimescale = getDvarFloat( "scr_playerInvulTimeScale" ); playerinvultimescale = getDvarFloat( "scr_playerInvulTimeScale" );
for ( ;; ) for ( ;; )
@ -73,6 +76,7 @@ playerhealthregen()
{ {
player_flag_clear( "player_has_red_flashing_overlay" ); player_flag_clear( "player_has_red_flashing_overlay" );
} }
lastinvulratio = 1; lastinvulratio = 1;
playerjustgotredflashing = 0; playerjustgotredflashing = 0;
veryhurt = 0; veryhurt = 0;
@ -93,6 +97,7 @@ playerhealthregen()
if ( self.health <= 50 ) if ( self.health <= 50 )
{ {
veryhurt = 1; veryhurt = 1;
if ( !wasveryhurt ) if ( !wasveryhurt )
{ {
hurttime = getTime(); hurttime = getTime();
@ -117,6 +122,7 @@ playerhealthregen()
{ {
self.veryhurt = veryhurt; self.veryhurt = veryhurt;
newhealth = health_ratio; newhealth = health_ratio;
if ( veryhurt ) if ( veryhurt )
{ {
if ( ( getTime() - hurttime ) >= longregendelay ) if ( ( getTime() - hurttime ) >= longregendelay )
@ -173,6 +179,7 @@ playerhealthregen()
{ {
self player_flag_set( "player_is_invulnerable" ); self player_flag_set( "player_is_invulnerable" );
level notify( "player_becoming_invulnerable" ); level notify( "player_becoming_invulnerable" );
if ( playerjustgotredflashing ) if ( playerjustgotredflashing )
{ {
invultime = level.invultime_onshield; invultime = level.invultime_onshield;
@ -186,6 +193,7 @@ playerhealthregen()
{ {
invultime = level.invultime_preshield; invultime = level.invultime_preshield;
} }
invultime *= playerinvultimescale; invultime *= playerinvultimescale;
lastinvulratio = self.health / self.maxhealth; lastinvulratio = self.health / self.maxhealth;
self thread maps\mp\zombies\_zm_playerhealth::playerinvul( invultime ); self thread maps\mp\zombies\_zm_playerhealth::playerinvul( invultime );

View File

@ -8,6 +8,7 @@ standard_powered_items()
flag_wait( "start_zombie_round_logic" ); flag_wait( "start_zombie_round_logic" );
vending_triggers = getentarray( "zombie_vending", "targetname" ); vending_triggers = getentarray( "zombie_vending", "targetname" );
i = 0; i = 0;
while ( i < vending_triggers.size) while ( i < vending_triggers.size)
{ {
if ( vending_triggers[ i ].script_noteworthy == "specialty_weapupgrade" ) if ( vending_triggers[ i ].script_noteworthy == "specialty_weapupgrade" )
@ -15,33 +16,42 @@ standard_powered_items()
i++; i++;
continue; continue;
} }
powered_on = maps\mp\zombies\_zm_perks::get_perk_machine_start_state( vending_triggers[ i ].script_noteworthy ); powered_on = maps\mp\zombies\_zm_perks::get_perk_machine_start_state( vending_triggers[ i ].script_noteworthy );
add_powered_item( ::perk_power_on, ::perk_power_off, ::perk_range, ::cost_low_if_local, 0, powered_on, vending_triggers[ i ] ); add_powered_item( ::perk_power_on, ::perk_power_off, ::perk_range, ::cost_low_if_local, 0, powered_on, vending_triggers[ i ] );
i++; i++;
} }
pack_a_punch = getentarray( "specialty_weapupgrade", "script_noteworthy" ); pack_a_punch = getentarray( "specialty_weapupgrade", "script_noteworthy" );
foreach ( trigger in pack_a_punch ) foreach ( trigger in pack_a_punch )
{ {
powered_on = maps\mp\zombies\_zm_perks::get_perk_machine_start_state( trigger.script_noteworthy ); powered_on = maps\mp\zombies\_zm_perks::get_perk_machine_start_state( trigger.script_noteworthy );
trigger.powered = add_powered_item( ::pap_power_on, ::pap_power_off, ::pap_range, ::cost_low_if_local, 0, powered_on, trigger ); trigger.powered = add_powered_item( ::pap_power_on, ::pap_power_off, ::pap_range, ::cost_low_if_local, 0, powered_on, trigger );
} }
zombie_doors = getentarray( "zombie_door", "targetname" ); zombie_doors = getentarray( "zombie_door", "targetname" );
foreach ( door in zombie_doors ) foreach ( door in zombie_doors )
{ {
if ( isDefined( door.script_noteworthy ) && door.script_noteworthy == "electric_door" ) if ( isDefined( door.script_noteworthy ) && door.script_noteworthy == "electric_door" )
{ {
add_powered_item( ::door_power_on, ::door_power_off, ::door_range, ::cost_door, 0, 0, door ); add_powered_item( ::door_power_on, ::door_power_off, ::door_range, ::cost_door, 0, 0, door );
} }
if ( isDefined( door.script_noteworthy ) && door.script_noteworthy == "local_electric_door" ) if ( isDefined( door.script_noteworthy ) && door.script_noteworthy == "local_electric_door" )
{ {
power_sources = 0; power_sources = 0;
if ( !is_true( level.power_local_doors_globally ) ) if ( !is_true( level.power_local_doors_globally ) )
{ {
power_sources = 1; power_sources = 1;
} }
add_powered_item( ::door_local_power_on, ::door_local_power_off, ::door_range, ::cost_door, power_sources, 0, door ); add_powered_item( ::door_local_power_on, ::door_local_power_off, ::door_range, ::cost_door, power_sources, 0, door );
} }
} }
thread watch_global_power(); thread watch_global_power();
} }
@ -49,10 +59,12 @@ perk_power_off( origin, radius )
{ {
self.target notify( "death" ); self.target notify( "death" );
self.target thread maps\mp\zombies\_zm_perks::vending_trigger_think(); self.target thread maps\mp\zombies\_zm_perks::vending_trigger_think();
if ( isDefined( self.target.perk_hum ) ) if ( isDefined( self.target.perk_hum ) )
{ {
self.target.perk_hum delete(); self.target.perk_hum delete();
} }
maps\mp\zombies\_zm_perks::perk_pause( self.target.script_noteworthy ); maps\mp\zombies\_zm_perks::perk_pause( self.target.script_noteworthy );
level notify( self.target maps\mp\zombies\_zm_perks::getvendingmachinenotify() + "_off" ); level notify( self.target maps\mp\zombies\_zm_perks::getvendingmachinenotify() + "_off" );
} }

View File

@ -160,18 +160,22 @@ powerup_grab( powerup_team )
players[i].zombie_nuked = arraysort( zombies, self.origin ); players[i].zombie_nuked = arraysort( zombies, self.origin );
players[i] notify( "nuke_triggered" ); players[i] notify( "nuke_triggered" );
break; break;
case "full_ammo": case "full_ammo":
level thread full_ammo_powerup( self, players[i] ); level thread full_ammo_powerup( self, players[i] );
players[i] thread powerup_vo( "full_ammo" ); players[i] thread powerup_vo( "full_ammo" );
break; break;
case "double_points": case "double_points":
level thread double_points_powerup( self, players[i] ); level thread double_points_powerup( self, players[i] );
players[i] thread powerup_vo( "double_points" ); players[i] thread powerup_vo( "double_points" );
break; break;
case "insta_kill": case "insta_kill":
level thread insta_kill_powerup( self, players[i] ); level thread insta_kill_powerup( self, players[i] );
players[i] thread powerup_vo( "insta_kill" ); players[i] thread powerup_vo( "insta_kill" );
break; break;
case "carpenter": case "carpenter":
if ( is_classic() ) if ( is_classic() )
players[i] thread maps\mp\zombies\_zm_pers_upgrades::persistent_carpenter_ability_check(); players[i] thread maps\mp\zombies\_zm_pers_upgrades::persistent_carpenter_ability_check();
@ -183,43 +187,55 @@ powerup_grab( powerup_team )
players[i] thread powerup_vo( "carpenter" ); players[i] thread powerup_vo( "carpenter" );
break; break;
case "fire_sale": case "fire_sale":
level thread start_fire_sale( self ); level thread start_fire_sale( self );
players[i] thread powerup_vo( "firesale" ); players[i] thread powerup_vo( "firesale" );
break; break;
case "bonfire_sale": case "bonfire_sale":
level thread start_bonfire_sale( self ); level thread start_bonfire_sale( self );
players[i] thread powerup_vo( "firesale" ); players[i] thread powerup_vo( "firesale" );
break; break;
case "minigun": case "minigun":
level thread minigun_weapon_powerup( players[i] ); level thread minigun_weapon_powerup( players[i] );
players[i] thread powerup_vo( "minigun" ); players[i] thread powerup_vo( "minigun" );
break; break;
case "free_perk": case "free_perk":
level thread free_perk_powerup( self ); level thread free_perk_powerup( self );
break; break;
case "tesla": case "tesla":
level thread tesla_weapon_powerup( players[i] ); level thread tesla_weapon_powerup( players[i] );
players[i] thread powerup_vo( "tesla" ); players[i] thread powerup_vo( "tesla" );
break; break;
case "random_weapon": case "random_weapon":
if ( !level random_weapon_powerup( self, players[i] ) ) if ( !level random_weapon_powerup( self, players[i] ) )
continue; continue;
break; break;
case "bonus_points_player": case "bonus_points_player":
level thread bonus_points_player_powerup( self, players[i] ); level thread bonus_points_player_powerup( self, players[i] );
players[i] thread powerup_vo( "bonus_points_solo" ); players[i] thread powerup_vo( "bonus_points_solo" );
break; break;
case "bonus_points_team": case "bonus_points_team":
level thread bonus_points_team_powerup( self ); level thread bonus_points_team_powerup( self );
players[i] thread powerup_vo( "bonus_points_team" ); players[i] thread powerup_vo( "bonus_points_team" );
break; break;
case "teller_withdrawl": case "teller_withdrawl":
level thread teller_withdrawl( self, players[i] ); level thread teller_withdrawl( self, players[i] );
break; break;
default: default:
if ( isdefined( level._zombiemode_powerup_grab ) ) if ( isdefined( level._zombiemode_powerup_grab ) )
level thread [[ level._zombiemode_powerup_grab ]]( self, players[i] ); level thread [[ level._zombiemode_powerup_grab ]]( self, players[i] );
break; break;
} }
} }
@ -298,6 +314,7 @@ powerup_grab( powerup_team )
full_ammo_powerup( drop_item, player ) full_ammo_powerup( drop_item, player )
{ {
clip_only = 0; clip_only = 0;
if(level.scr_zm_ui_gametype == "zgrief") if(level.scr_zm_ui_gametype == "zgrief")
{ {
clip_only = 1; clip_only = 1;
@ -305,11 +322,14 @@ full_ammo_powerup( drop_item, player )
} }
players = get_players( player.team ); players = get_players( player.team );
if ( isdefined( level._get_game_module_players ) ) if ( isdefined( level._get_game_module_players ) )
{ {
players = [[ level._get_game_module_players ]]( player ); players = [[ level._get_game_module_players ]]( player );
} }
i = 0; i = 0;
while ( i < players.size ) while ( i < players.size )
{ {
if ( players[ i ] maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) if ( players[ i ] maps\mp\zombies\_zm_laststand::player_is_in_laststand() )
@ -317,6 +337,7 @@ full_ammo_powerup( drop_item, player )
i++; i++;
continue; continue;
} }
primary_weapons = players[ i ] getweaponslist( 1 ); primary_weapons = players[ i ] getweaponslist( 1 );
players[ i ] notify( "zmb_max_ammo" ); players[ i ] notify( "zmb_max_ammo" );
@ -325,6 +346,7 @@ full_ammo_powerup( drop_item, player )
players[ i ] notify( "zmb_disable_spikemore_prompt" ); players[ i ] notify( "zmb_disable_spikemore_prompt" );
x = 0; x = 0;
while ( x < primary_weapons.size ) while ( x < primary_weapons.size )
{ {
if ( level.headshots_only && is_lethal_grenade(primary_weapons[ x ] ) ) if ( level.headshots_only && is_lethal_grenade(primary_weapons[ x ] ) )
@ -356,6 +378,7 @@ full_ammo_powerup( drop_item, player )
} }
new_ammo = players[i] getWeaponAmmoStock(primary_weapons[x]) + weaponClipSize(primary_weapons[x]); new_ammo = players[i] getWeaponAmmoStock(primary_weapons[x]) + weaponClipSize(primary_weapons[x]);
if(weaponDualWieldWeaponName(primary_weapons[x]) != "none") if(weaponDualWieldWeaponName(primary_weapons[x]) != "none")
{ {
new_ammo += weaponClipSize(weaponDualWieldWeaponName(primary_weapons[x])); new_ammo += weaponClipSize(weaponDualWieldWeaponName(primary_weapons[x]));
@ -373,6 +396,7 @@ full_ammo_powerup( drop_item, player )
players[i] givemaxammo(primary_weapons[x]); players[i] givemaxammo(primary_weapons[x]);
} }
} }
x++; x++;
} }
@ -380,6 +404,7 @@ full_ammo_powerup( drop_item, player )
i++; i++;
} }
level thread full_ammo_on_hud( drop_item, player.team ); level thread full_ammo_on_hud( drop_item, player.team );
if(level.scr_zm_ui_gametype == "zgrief") if(level.scr_zm_ui_gametype == "zgrief")
@ -424,6 +449,7 @@ empty_clip_powerup( drop_item, player )
i = 0; i = 0;
players = get_players(team); players = get_players(team);
while(i < players.size) while(i < players.size)
{ {
if ( players[ i ] maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) if ( players[ i ] maps\mp\zombies\_zm_laststand::player_is_in_laststand() )
@ -433,6 +459,7 @@ empty_clip_powerup( drop_item, player )
} }
primaries = players[i] getweaponslistprimaries(); primaries = players[i] getweaponslistprimaries();
foreach(weapon in primaries) foreach(weapon in primaries)
{ {
dual_wield_weapon = weaponDualWieldWeaponName(weapon); dual_wield_weapon = weaponDualWieldWeaponName(weapon);
@ -539,6 +566,7 @@ nuke_powerup( drop_item, player_team )
} }
players = get_players( player_team ); players = get_players( player_team );
for ( i = 0; i < players.size; i++ ) for ( i = 0; i < players.size; i++ )
{ {
players[ i ] maps\mp\zombies\_zm_score::player_add_points( "nuke_powerup", 400 ); players[ i ] maps\mp\zombies\_zm_score::player_add_points( "nuke_powerup", 400 );
@ -547,6 +575,7 @@ nuke_powerup( drop_item, player_team )
if(level.scr_zm_ui_gametype == "zgrief") if(level.scr_zm_ui_gametype == "zgrief")
{ {
players = get_players(getOtherTeam(player_team)); players = get_players(getOtherTeam(player_team));
for(i = 0; i < players.size; i++) for(i = 0; i < players.size; i++)
{ {
if(is_player_valid(players[i])) if(is_player_valid(players[i]))
@ -599,6 +628,7 @@ insta_kill_powerup( drop_item, player )
team = player.team; team = player.team;
time = 30; time = 30;
if(level.scr_zm_ui_gametype == "zgrief") if(level.scr_zm_ui_gametype == "zgrief")
{ {
time = 15; time = 15;
@ -637,12 +667,14 @@ insta_kill_powerup( drop_item, player )
players = get_players( team ); players = get_players( team );
i = 0; i = 0;
while ( i < players.size ) while ( i < players.size )
{ {
if ( isDefined( players[ i ] ) ) if ( isDefined( players[ i ] ) )
{ {
players[ i ] notify( "insta_kill_over" ); players[ i ] notify( "insta_kill_over" );
} }
i++; i++;
} }
} }
@ -682,6 +714,7 @@ double_points_powerup( drop_item, player )
team = player.team; team = player.team;
time = 30; time = 30;
if(level.scr_zm_ui_gametype == "zgrief") if(level.scr_zm_ui_gametype == "zgrief")
{ {
time = 15; time = 15;
@ -715,6 +748,7 @@ double_points_powerup( drop_item, player )
} }
players = get_players( team ); players = get_players( team );
for ( i = 0; i < players.size; i++ ) for ( i = 0; i < players.size; i++ )
{ {
players[ i ] setclientfield( "score_cf_double_points_active", 1 ); players[ i ] setclientfield( "score_cf_double_points_active", 1 );
@ -740,6 +774,7 @@ double_points_powerup( drop_item, player )
temp_ent delete(); temp_ent delete();
players = get_players( team ); players = get_players( team );
for ( i = 0; i < players.size; i++ ) for ( i = 0; i < players.size; i++ )
{ {
players[ i ] playsound( "zmb_points_loop_off" ); players[ i ] playsound( "zmb_points_loop_off" );

View File

@ -9,17 +9,21 @@ add_to_player_score( points, add_to_total )
{ {
add_to_total = 1; add_to_total = 1;
} }
if ( !isDefined( points ) || level.intermission ) if ( !isDefined( points ) || level.intermission )
{ {
return; return;
} }
points = int(points); // points must be an int points = int(points); // points must be an int
self.score += points; self.score += points;
self.pers[ "score" ] = self.score; self.pers[ "score" ] = self.score;
if ( add_to_total ) if ( add_to_total )
{ {
self.score_total += points; self.score_total += points;
} }
self incrementplayerstat( "score", points ); self incrementplayerstat( "score", points );
} }
@ -29,6 +33,7 @@ minus_to_player_score( points )
{ {
return; return;
} }
points = int(points); // points must be an int points = int(points); // points must be an int
self.score -= points; self.score -= points;
self.pers[ "score" ] = self.score; self.pers[ "score" ] = self.score;
@ -60,6 +65,7 @@ player_add_points_kill_bonus( mod, hit_location )
self score_cf_increment_info( "death_head" ); self score_cf_increment_info( "death_head" );
score = level.zombie_vars["zombie_score_bonus_head"]; score = level.zombie_vars["zombie_score_bonus_head"];
break; break;
default: default:
self score_cf_increment_info( "death_normal" ); self score_cf_increment_info( "death_normal" );
break; break;

View File

@ -64,12 +64,14 @@ zombie_damage( mod, hit_location, hit_origin, player, amount, team )
if ( is_placeable_mine( self.damageweapon ) ) if ( is_placeable_mine( self.damageweapon ) )
{ {
damage = level.round_number * 100; damage = level.round_number * 100;
if(level.scr_zm_ui_gametype == "zgrief") if(level.scr_zm_ui_gametype == "zgrief")
{ {
damage = 2000; damage = 2000;
} }
max_damage = 9000; max_damage = 9000;
if(damage > max_damage) if(damage > max_damage)
{ {
damage = max_damage; damage = max_damage;
@ -91,12 +93,14 @@ zombie_damage( mod, hit_location, hit_origin, player, amount, team )
else if ( mod == "MOD_GRENADE" || mod == "MOD_GRENADE_SPLASH" ) else if ( mod == "MOD_GRENADE" || mod == "MOD_GRENADE_SPLASH" )
{ {
damage = level.round_number * 25; damage = level.round_number * 25;
if(level.scr_zm_ui_gametype == "zgrief") if(level.scr_zm_ui_gametype == "zgrief")
{ {
damage = 500; damage = 500;
} }
max_damage = 1500; max_damage = 1500;
if(damage > max_damage) if(damage > max_damage)
{ {
damage = max_damage; damage = max_damage;
@ -116,12 +120,14 @@ zombie_damage( mod, hit_location, hit_origin, player, amount, team )
else if ( mod == "MOD_PROJECTILE" || mod == "MOD_PROJECTILE_SPLASH" || mod == "MOD_EXPLOSIVE" ) else if ( mod == "MOD_PROJECTILE" || mod == "MOD_PROJECTILE_SPLASH" || mod == "MOD_EXPLOSIVE" )
{ {
damage = level.round_number * 50; damage = level.round_number * 50;
if(level.scr_zm_ui_gametype == "zgrief") if(level.scr_zm_ui_gametype == "zgrief")
{ {
damage = 1000; damage = 1000;
} }
max_damage = 3000; max_damage = 3000;
if(damage > max_damage) if(damage > max_damage)
{ {
damage = max_damage; damage = max_damage;
@ -142,6 +148,7 @@ zombie_damage( mod, hit_location, hit_origin, player, amount, team )
if ( isDefined( player ) ) if ( isDefined( player ) )
{ {
rand = randomintrange( 0, 100 ); rand = randomintrange( 0, 100 );
if ( rand < 10 ) if ( rand < 10 )
{ {
player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "crawl_spawn" ); player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "crawl_spawn" );
@ -157,6 +164,7 @@ zombie_damage( mod, hit_location, hit_origin, player, amount, team )
if ( isDefined( player ) ) if ( isDefined( player ) )
{ {
rand = randomintrange( 0, 100 ); rand = randomintrange( 0, 100 );
if ( rand < 7 ) if ( rand < 7 )
{ {
player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "shoot_arm" ); player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "shoot_arm" );
@ -201,16 +209,19 @@ zombie_gib_on_damage()
refs[refs.size] = "guts"; refs[refs.size] = "guts";
refs[refs.size] = "right_arm"; refs[refs.size] = "right_arm";
break; break;
case "right_hand": case "right_hand":
case "right_arm_upper": case "right_arm_upper":
case "right_arm_lower": case "right_arm_lower":
refs[refs.size] = "right_arm"; refs[refs.size] = "right_arm";
break; break;
case "left_hand": case "left_hand":
case "left_arm_upper": case "left_arm_upper":
case "left_arm_lower": case "left_arm_lower":
refs[refs.size] = "left_arm"; refs[refs.size] = "left_arm";
break; break;
case "right_leg_upper": case "right_leg_upper":
case "right_leg_lower": case "right_leg_lower":
case "right_foot": case "right_foot":
@ -223,6 +234,7 @@ zombie_gib_on_damage()
} }
break; break;
case "left_leg_upper": case "left_leg_upper":
case "left_leg_lower": case "left_leg_lower":
case "left_foot": case "left_foot":
@ -235,6 +247,7 @@ zombie_gib_on_damage()
} }
break; break;
default: default:
if ( self.damagelocation == "none" ) if ( self.damagelocation == "none" )
{ {

View File

@ -25,6 +25,7 @@ navcomputer_waitfor_navcard()
navcomputer_use_trig playsound( "zmb_sq_navcard_success" ); navcomputer_use_trig playsound( "zmb_sq_navcard_success" );
players = get_players(); players = get_players();
foreach (player in players) foreach (player in players)
{ {
player freezecontrols(1); player freezecontrols(1);
@ -53,6 +54,7 @@ sq_give_player_all_perks()
else else
{ {
machines = array_randomize( getentarray( "zombie_vending", "targetname" ) ); machines = array_randomize( getentarray( "zombie_vending", "targetname" ) );
for ( i = 0; i < machines.size; i++ ) for ( i = 0; i < machines.size; i++ )
{ {
if ( machines[i].script_noteworthy == "specialty_weapupgrade" ) if ( machines[i].script_noteworthy == "specialty_weapupgrade" )

View File

@ -85,44 +85,56 @@ create_zombie_point_of_interest_attractor_positions( num_attract_dists, diff_per
{ {
self endon( "death" ); self endon( "death" );
forward = ( 0, 1, 0 ); forward = ( 0, 1, 0 );
if ( !isDefined( self.num_poi_attracts ) || isDefined( self.script_noteworthy ) && self.script_noteworthy != "zombie_poi" ) if ( !isDefined( self.num_poi_attracts ) || isDefined( self.script_noteworthy ) && self.script_noteworthy != "zombie_poi" )
{ {
return; return;
} }
if ( !isDefined( num_attract_dists ) ) if ( !isDefined( num_attract_dists ) )
{ {
num_attract_dists = 4; num_attract_dists = 4;
} }
if ( !isDefined( diff_per_dist ) ) if ( !isDefined( diff_per_dist ) )
{ {
diff_per_dist = 45; diff_per_dist = 45;
} }
if ( !isDefined( attractor_width ) ) if ( !isDefined( attractor_width ) )
{ {
attractor_width = 45; attractor_width = 45;
} }
self.attract_to_origin = 0; self.attract_to_origin = 0;
self.num_attract_dists = num_attract_dists; self.num_attract_dists = num_attract_dists;
self.last_index = []; self.last_index = [];
for ( i = 0; i < num_attract_dists; i++ ) for ( i = 0; i < num_attract_dists; i++ )
{ {
self.last_index[ i ] = -1; self.last_index[ i ] = -1;
} }
self.attract_dists = []; self.attract_dists = [];
for ( i = 0; i < self.num_attract_dists; i++ ) for ( i = 0; i < self.num_attract_dists; i++ )
{ {
self.attract_dists[ i ] = diff_per_dist * ( i + 1 ); self.attract_dists[ i ] = diff_per_dist * ( i + 1 );
} }
max_positions = []; max_positions = [];
for ( i = 0; i < self.num_attract_dists; i++ ) for ( i = 0; i < self.num_attract_dists; i++ )
{ {
max_positions[ i ] = int( ( 6.28 * self.attract_dists[ i ] ) / attractor_width ); max_positions[ i ] = int( ( 6.28 * self.attract_dists[ i ] ) / attractor_width );
} }
num_attracts_per_dist = self.num_poi_attracts / self.num_attract_dists; num_attracts_per_dist = self.num_poi_attracts / self.num_attract_dists;
self.max_attractor_dist = self.attract_dists[ self.attract_dists.size - 1 ] * 1.1; self.max_attractor_dist = self.attract_dists[ self.attract_dists.size - 1 ] * 1.1;
diff = 0; diff = 0;
actual_num_positions = []; actual_num_positions = [];
i = 0; i = 0;
while ( i < self.num_attract_dists ) while ( i < self.num_attract_dists )
{ {
if ( num_attracts_per_dist > ( max_positions[ i ] + diff ) ) if ( num_attracts_per_dist > ( max_positions[ i ] + diff ) )
@ -132,14 +144,17 @@ create_zombie_point_of_interest_attractor_positions( num_attract_dists, diff_per
i++; i++;
continue; continue;
} }
actual_num_positions[ i ] = num_attracts_per_dist + diff; actual_num_positions[ i ] = num_attracts_per_dist + diff;
diff = 0; diff = 0;
i++; i++;
} }
self.attractor_positions = []; self.attractor_positions = [];
failed = 0; failed = 0;
angle_offset = 0; angle_offset = 0;
prev_last_index = -1; prev_last_index = -1;
for ( j = 0; j < 4; j++) for ( j = 0; j < 4; j++)
{ {
if ( ( actual_num_positions[ j ] + failed ) < max_positions[ j ] ) if ( ( actual_num_positions[ j ] + failed ) < max_positions[ j ] )
@ -152,6 +167,7 @@ create_zombie_point_of_interest_attractor_positions( num_attract_dists, diff_per
actual_num_positions[ j ] = max_positions[ j ]; actual_num_positions[ j ] = max_positions[ j ];
failed = max_positions[ j ] - actual_num_positions[ j ]; failed = max_positions[ j ] - actual_num_positions[ j ];
} }
failed += self generated_radius_attract_positions( forward, angle_offset, actual_num_positions[ j ], self.attract_dists[ j ] ); failed += self generated_radius_attract_positions( forward, angle_offset, actual_num_positions[ j ], self.attract_dists[ j ] );
angle_offset += 15; angle_offset += 15;
self.last_index[ j ] = int( ( actual_num_positions[ j ] - failed ) + prev_last_index ); self.last_index[ j ] = int( ( actual_num_positions[ j ] - failed ) + prev_last_index );

View File

@ -28,6 +28,7 @@ on_spawn( watcher, player )
retrievable_model.angles = angles; retrievable_model.angles = angles;
retrievable_model.name = watcher.weapon; retrievable_model.name = watcher.weapon;
isfriendly = 0; isfriendly = 0;
if ( isDefined( prey ) ) if ( isDefined( prey ) )
{ {
if ( isplayer( prey ) ) if ( isplayer( prey ) )
@ -38,6 +39,7 @@ on_spawn( watcher, player )
{ {
isfriendly = 1; isfriendly = 1;
} }
if ( isfriendly ) if ( isfriendly )
{ {
retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) ); retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) );
@ -49,8 +51,10 @@ on_spawn( watcher, player )
retrievable_model thread force_drop_knives_to_ground_on_death( player, prey ); retrievable_model thread force_drop_knives_to_ground_on_death( player, prey );
} }
} }
watcher.objectarray[ watcher.objectarray.size ] = retrievable_model; watcher.objectarray[ watcher.objectarray.size ] = retrievable_model;
retrievable_model thread drop_knives_to_ground( player ); retrievable_model thread drop_knives_to_ground( player );
if( isfriendly ) if( isfriendly )
{ {
player notify( "ballistic_knife_stationary", retrievable_model, normal ); player notify( "ballistic_knife_stationary", retrievable_model, normal );
@ -68,29 +72,36 @@ watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundo
self endon( "delete" ); self endon( "delete" );
level endon( "game_ended" ); level endon( "game_ended" );
autorecover = is_true( level.ballistic_knife_autorecover ); autorecover = is_true( level.ballistic_knife_autorecover );
while ( 1 ) while ( 1 )
{ {
trigger waittill( "trigger", player ); trigger waittill( "trigger", player );
if ( !isalive( player ) ) if ( !isalive( player ) )
{ {
continue; continue;
} }
if ( isDefined( trigger.triggerteam ) && player.team != trigger.triggerteam ) if ( isDefined( trigger.triggerteam ) && player.team != trigger.triggerteam )
{ {
continue; continue;
} }
if ( isDefined( trigger.claimedby ) && player != trigger.claimedby ) if ( isDefined( trigger.claimedby ) && player != trigger.claimedby )
{ {
continue; continue;
} }
if ( isDefined( trigger.owner ) && player != trigger.owner ) if ( isDefined( trigger.owner ) && player != trigger.owner )
{ {
continue; continue;
} }
if ( player getcurrentweapon() == weapon && player getweaponammostock( weapon ) >= weaponmaxammo( weapon ) ) if ( player getcurrentweapon() == weapon && player getweaponammostock( weapon ) >= weaponmaxammo( weapon ) )
{ {
continue; continue;
} }
if ( !autorecover && !is_true( trigger.force_pickup ) ) if ( !autorecover && !is_true( trigger.force_pickup ) )
{ {
if( player.throwinggrenade || player meleebuttonpressed() ) if( player.throwinggrenade || player meleebuttonpressed() )
@ -98,14 +109,17 @@ watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundo
continue; continue;
} }
} }
if ( isDefined( playersoundonuse ) ) if ( isDefined( playersoundonuse ) )
{ {
player playlocalsound( playersoundonuse ); player playlocalsound( playersoundonuse );
} }
if ( isDefined( npcsoundonuse ) ) if ( isDefined( npcsoundonuse ) )
{ {
player playsound( npcsoundonuse ); player playsound( npcsoundonuse );
} }
player thread [[ callback ]]( weapon, model, trigger ); player thread [[ callback ]]( weapon, model, trigger );
return; return;
} }

View File

@ -62,6 +62,7 @@ _titus_locate_target( is_not_upgraded = 1, count )
n_fuse_timer = randomfloatrange( 3.0, 4.0 ); n_fuse_timer = randomfloatrange( 3.0, 4.0 );
n_spread = 5; n_spread = 5;
if (isads(self)) if (isads(self))
{ {
n_spread *= 0.5; n_spread *= 0.5;

View File

@ -9,26 +9,33 @@ buy_claymores()
self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" ); self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" );
self setcursorhint( "HINT_WEAPON", "claymore_zm" ); self setcursorhint( "HINT_WEAPON", "claymore_zm" );
self endon( "kill_trigger" ); self endon( "kill_trigger" );
if ( !isDefined( self.stub ) ) if ( !isDefined( self.stub ) )
{ {
return; return;
} }
if ( isDefined( self.stub ) && !isDefined( self.stub.claymores_triggered ) ) if ( isDefined( self.stub ) && !isDefined( self.stub.claymores_triggered ) )
{ {
self.stub.claymores_triggered = 0; self.stub.claymores_triggered = 0;
} }
self.claymores_triggered = self.stub.claymores_triggered; self.claymores_triggered = self.stub.claymores_triggered;
while ( 1 ) while ( 1 )
{ {
self waittill( "trigger", who ); self waittill( "trigger", who );
while ( who in_revive_trigger() ) while ( who in_revive_trigger() )
{ {
continue; continue;
} }
while ( who has_powerup_weapon() ) while ( who has_powerup_weapon() )
{ {
wait 0.1; wait 0.1;
} }
if ( is_player_valid( who ) ) if ( is_player_valid( who ) )
{ {
if ( who.score >= self.zombie_cost ) if ( who.score >= self.zombie_cost )
@ -37,19 +44,24 @@ buy_claymores()
{ {
play_sound_at_pos( "purchase", self.origin ); play_sound_at_pos( "purchase", self.origin );
who maps\mp\zombies\_zm_score::minus_to_player_score( self.zombie_cost ); who maps\mp\zombies\_zm_score::minus_to_player_score( self.zombie_cost );
if ( !who is_player_placeable_mine( "claymore_zm" ) ) if ( !who is_player_placeable_mine( "claymore_zm" ) )
{ {
who thread show_claymore_hint( "claymore_purchased" ); who thread show_claymore_hint( "claymore_purchased" );
} }
who thread claymore_setup(); who thread claymore_setup();
who thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" ); who thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" );
if ( isDefined( self.stub ) ) if ( isDefined( self.stub ) )
{ {
self.claymores_triggered = self.stub.claymores_triggered; self.claymores_triggered = self.stub.claymores_triggered;
} }
if ( self.claymores_triggered == 0 ) if ( self.claymores_triggered == 0 )
{ {
model = getent( self.target, "targetname" ); model = getent( self.target, "targetname" );
if ( isDefined( model ) ) if ( isDefined( model ) )
{ {
model thread maps\mp\zombies\_zm_weapons::weapon_show( who ); model thread maps\mp\zombies\_zm_weapons::weapon_show( who );
@ -61,7 +73,9 @@ buy_claymores()
level setclientfield( self.clientfieldname, 1 ); level setclientfield( self.clientfieldname, 1 );
} }
} }
self.claymores_triggered = 1; self.claymores_triggered = 1;
if ( isDefined( self.stub ) ) if ( isDefined( self.stub ) )
{ {
self.stub.claymores_triggered = 1; self.stub.claymores_triggered = 1;
@ -94,40 +108,50 @@ claymore_detonation()
damagearea setexcludeteamfortrigger( self.team ); damagearea setexcludeteamfortrigger( self.team );
damagearea enablelinkto(); damagearea enablelinkto();
damagearea linkto( self ); damagearea linkto( self );
if ( is_true( self.isonbus ) ) if ( is_true( self.isonbus ) )
{ {
damagearea setmovingplatformenabled( 1 ); damagearea setmovingplatformenabled( 1 );
} }
self.damagearea = damagearea; self.damagearea = damagearea;
self thread delete_claymores_on_death( self.owner, damagearea ); self thread delete_claymores_on_death( self.owner, damagearea );
self.owner.claymores[ self.owner.claymores.size ] = self; self.owner.claymores[ self.owner.claymores.size ] = self;
while ( 1 ) while ( 1 )
{ {
damagearea waittill( "trigger", ent ); damagearea waittill( "trigger", ent );
if ( isDefined( self.owner ) && ent == self.owner ) if ( isDefined( self.owner ) && ent == self.owner )
{ {
continue; continue;
} }
if ( isDefined( ent.pers ) && isDefined( ent.pers[ "team" ] ) && ent.pers[ "team" ] == self.team ) if ( isDefined( ent.pers ) && isDefined( ent.pers[ "team" ] ) && ent.pers[ "team" ] == self.team )
{ {
continue; continue;
} }
if ( isDefined( ent.pers ) && isDefined( ent.pers[ "team" ] ) && ent.pers[ "team" ] == getOtherTeam( self.team ) ) if ( isDefined( ent.pers ) && isDefined( ent.pers[ "team" ] ) && ent.pers[ "team" ] == getOtherTeam( self.team ) )
{ {
continue; continue;
} }
if ( isDefined( ent.ignore_claymore ) && ent.ignore_claymore ) if ( isDefined( ent.ignore_claymore ) && ent.ignore_claymore )
{ {
continue; continue;
} }
if ( !ent shouldaffectweaponobject( self ) ) if ( !ent shouldaffectweaponobject( self ) )
{ {
continue; continue;
} }
if ( ent damageconetrace( self.origin, self ) > 0 ) if ( ent damageconetrace( self.origin, self ) > 0 )
{ {
self playsound( "wpn_claymore_alert" ); self playsound( "wpn_claymore_alert" );
wait 0.4; wait 0.4;
if ( isDefined( self.owner ) ) if ( isDefined( self.owner ) )
{ {
self detonate( self.owner ); self detonate( self.owner );
@ -136,6 +160,7 @@ claymore_detonation()
{ {
self detonate( undefined ); self detonate( undefined );
} }
return; return;
} }
} }

View File

@ -144,6 +144,7 @@ emp_players(origin, radius, owner)
{ {
rsquared = radius * radius; rsquared = radius * radius;
players = get_players(); players = get_players();
foreach(player in players) foreach(player in players)
{ {
if(distancesquared(origin, player.origin) < rsquared) if(distancesquared(origin, player.origin) < rsquared)
@ -167,6 +168,7 @@ player_emp_fx(time)
self endon("player_perk_pause_timeout"); self endon("player_perk_pause_timeout");
wait_time = 2.5; wait_time = 2.5;
for(i = 0; i < time; i += wait_time) for(i = 0; i < time; i += wait_time)
{ {
playfxontag( level._effect[ "elec_torso" ], self, "J_SpineLower" ); playfxontag( level._effect[ "elec_torso" ], self, "J_SpineLower" );
@ -208,6 +210,7 @@ player_perk_pause_all_perks_acquired(time)
player_perk_pause_all_perks() player_perk_pause_all_perks()
{ {
vending_triggers = getentarray( "zombie_vending", "targetname" ); vending_triggers = getentarray( "zombie_vending", "targetname" );
foreach ( trigger in vending_triggers ) foreach ( trigger in vending_triggers )
{ {
self player_perk_pause( trigger.script_noteworthy ); self player_perk_pause( trigger.script_noteworthy );
@ -219,6 +222,7 @@ player_perk_unpause_all_perks()
self notify("player_perk_pause_timeout"); self notify("player_perk_pause_timeout");
vending_triggers = getentarray( "zombie_vending", "targetname" ); vending_triggers = getentarray( "zombie_vending", "targetname" );
foreach ( trigger in vending_triggers ) foreach ( trigger in vending_triggers )
{ {
self player_perk_unpause( trigger.script_noteworthy ); self player_perk_unpause( trigger.script_noteworthy );
@ -238,30 +242,37 @@ player_perk_pause( perk )
{ {
self.disabled_perks = []; self.disabled_perks = [];
} }
if ( !is_true( self.disabled_perks[ perk ] ) && self hasperk( perk ) ) if ( !is_true( self.disabled_perks[ perk ] ) && self hasperk( perk ) )
{ {
self.disabled_perks[ perk ] = 1; self.disabled_perks[ perk ] = 1;
} }
if ( self.disabled_perks[ perk ] ) if ( self.disabled_perks[ perk ] )
{ {
self unsetperk( perk ); self unsetperk( perk );
self maps\mp\zombies\_zm_perks::set_perk_clientfield( perk, 2 ); self maps\mp\zombies\_zm_perks::set_perk_clientfield( perk, 2 );
if ( perk == "specialty_armorvest" || perk == "specialty_armorvest_upgrade" ) if ( perk == "specialty_armorvest" || perk == "specialty_armorvest_upgrade" )
{ {
self setmaxhealth( self.premaxhealth ); self setmaxhealth( self.premaxhealth );
if ( self.health > self.maxhealth ) if ( self.health > self.maxhealth )
{ {
self.health = self.maxhealth; self.health = self.maxhealth;
} }
} }
if ( perk == "specialty_additionalprimaryweapon" || perk == "specialty_additionalprimaryweapon_upgrade" ) if ( perk == "specialty_additionalprimaryweapon" || perk == "specialty_additionalprimaryweapon_upgrade" )
{ {
self maps\mp\zombies\_zm::take_additionalprimaryweapon(); self maps\mp\zombies\_zm::take_additionalprimaryweapon();
} }
if ( issubstr( perk, "specialty_scavenger" ) ) if ( issubstr( perk, "specialty_scavenger" ) )
{ {
self.hasperkspecialtytombstone = 0; self.hasperkspecialtytombstone = 0;
} }
if ( isDefined( level._custom_perks[ perk ] ) && isDefined( level._custom_perks[ perk ].player_thread_take ) ) if ( isDefined( level._custom_perks[ perk ] ) && isDefined( level._custom_perks[ perk ].player_thread_take ) )
{ {
self thread [[ level._custom_perks[ perk ].player_thread_take ]](); self thread [[ level._custom_perks[ perk ].player_thread_take ]]();
@ -288,11 +299,14 @@ player_perk_unpause( perk )
self.disabled_perks[ perk ] = undefined; self.disabled_perks[ perk ] = undefined;
self maps\mp\zombies\_zm_perks::set_perk_clientfield( perk, 1 ); self maps\mp\zombies\_zm_perks::set_perk_clientfield( perk, 1 );
self setperk( perk ); self setperk( perk );
if ( issubstr( perk, "specialty_scavenger" ) ) if ( issubstr( perk, "specialty_scavenger" ) )
{ {
self.hasperkspecialtytombstone = 1; self.hasperkspecialtytombstone = 1;
} }
self maps\mp\zombies\_zm_perks::perk_set_max_health_if_jugg( perk, 0, 0 ); self maps\mp\zombies\_zm_perks::perk_set_max_health_if_jugg( perk, 0, 0 );
if ( isDefined( level._custom_perks[ perk ] ) && isDefined( level._custom_perks[ perk ].player_thread_give ) ) if ( isDefined( level._custom_perks[ perk ] ) && isDefined( level._custom_perks[ perk ].player_thread_give ) )
{ {
self thread [[ level._custom_perks[ perk ].player_thread_give ]](); self thread [[ level._custom_perks[ perk ].player_thread_give ]]();

View File

@ -96,51 +96,64 @@ jetgun_check_enemies_in_range( zombie, view_pos, drag_range_squared, gib_range_s
{ {
return; return;
} }
if ( zombie enemy_killed_by_jetgun() ) if ( zombie enemy_killed_by_jetgun() )
{ {
return; return;
} }
if ( isDefined( zombie.is_avogadro ) && zombie.is_avogadro ) if ( isDefined( zombie.is_avogadro ) && zombie.is_avogadro )
{ {
return; return;
} }
if ( isDefined( zombie.isdog ) && zombie.isdog ) if ( isDefined( zombie.isdog ) && zombie.isdog )
{ {
return; return;
} }
if ( isDefined( zombie.isscreecher ) && zombie.isscreecher ) if ( isDefined( zombie.isscreecher ) && zombie.isscreecher )
{ {
return; return;
} }
if ( isDefined( self.animname ) && self.animname == "quad_zombie" ) if ( isDefined( self.animname ) && self.animname == "quad_zombie" )
{ {
return; return;
} }
test_origin = zombie getcentroid(); test_origin = zombie getcentroid();
test_range_squared = distancesquared( view_pos, test_origin ); test_range_squared = distancesquared( view_pos, test_origin );
if ( test_range_squared > drag_range_squared ) if ( test_range_squared > drag_range_squared )
{ {
zombie jetgun_debug_print( "range", ( 1, 0, 1 ) ); zombie jetgun_debug_print( "range", ( 1, 0, 1 ) );
return; return;
} }
normal = vectornormalize( test_origin - view_pos ); normal = vectornormalize( test_origin - view_pos );
dot = vectordot( forward_view_angles, normal ); dot = vectordot( forward_view_angles, normal );
if ( abs( dot ) < 0.7 ) if ( abs( dot ) < 0.7 )
{ {
zombie jetgun_debug_print( "dot", ( 1, 0, 1 ) ); zombie jetgun_debug_print( "dot", ( 1, 0, 1 ) );
return; return;
} }
radial_origin = pointonsegmentnearesttopoint( view_pos, end_pos, test_origin ); radial_origin = pointonsegmentnearesttopoint( view_pos, end_pos, test_origin );
if ( distancesquared( test_origin, radial_origin ) > cylinder_radius_squared ) if ( distancesquared( test_origin, radial_origin ) > cylinder_radius_squared )
{ {
zombie jetgun_debug_print( "cylinder", ( 1, 0, 1 ) ); zombie jetgun_debug_print( "cylinder", ( 1, 0, 1 ) );
return; return;
} }
if ( zombie damageconetrace( view_pos, self ) == 0 ) if ( zombie damageconetrace( view_pos, self ) == 0 )
{ {
zombie jetgun_debug_print( "cone", ( 1, 0, 1 ) ); zombie jetgun_debug_print( "cone", ( 1, 0, 1 ) );
return; return;
} }
if ( test_range_squared < grind_range_squared ) if ( test_range_squared < grind_range_squared )
{ {
level.jetgun_fling_enemies[ level.jetgun_fling_enemies.size ] = zombie; level.jetgun_fling_enemies[ level.jetgun_fling_enemies.size ] = zombie;
@ -152,6 +165,7 @@ jetgun_check_enemies_in_range( zombie, view_pos, drag_range_squared, gib_range_s
{ {
return; return;
} }
if ( isDefined( zombie.in_the_ground ) && zombie.in_the_ground ) if ( isDefined( zombie.in_the_ground ) && zombie.in_the_ground )
{ {
return; return;
@ -169,10 +183,12 @@ jetgun_grind_zombie( player )
player endon( "death" ); player endon( "death" );
player endon( "disconnect" ); player endon( "disconnect" );
self endon( "death" ); self endon( "death" );
if ( !isDefined( self.jetgun_grind ) ) if ( !isDefined( self.jetgun_grind ) )
{ {
self.jetgun_grind = 1; self.jetgun_grind = 1;
self notify( "grinding" ); self notify( "grinding" );
if ( is_mature() ) if ( is_mature() )
{ {
if ( isDefined( level._effect[ "zombie_guts_explosion" ] ) ) if ( isDefined( level._effect[ "zombie_guts_explosion" ] ) )
@ -180,6 +196,7 @@ jetgun_grind_zombie( player )
playfx( level._effect[ "zombie_guts_explosion" ], self gettagorigin( "J_SpineLower" ) ); playfx( level._effect[ "zombie_guts_explosion" ], self gettagorigin( "J_SpineLower" ) );
} }
} }
self.nodeathragdoll = 1; self.nodeathragdoll = 1;
self.handle_death_notetracks = ::jetgun_handle_death_notetracks; self.handle_death_notetracks = ::jetgun_handle_death_notetracks;
player maps\mp\zombies\_zm_score::add_to_player_score(50 * maps\mp\zombies\_zm_score::get_points_multiplier(player)); player maps\mp\zombies\_zm_score::add_to_player_score(50 * maps\mp\zombies\_zm_score::get_points_multiplier(player));
@ -190,6 +207,7 @@ jetgun_grind_zombie( player )
handle_overheated_jetgun() handle_overheated_jetgun()
{ {
self endon( "disconnect" ); self endon( "disconnect" );
while ( 1 ) while ( 1 )
{ {
self waittill( "jetgun_overheated" ); self waittill( "jetgun_overheated" );

View File

@ -109,6 +109,7 @@ explode_into_goo( player, chain_depth )
self.goo_chain_depth = chain_depth; self.goo_chain_depth = chain_depth;
chain_radius = level.zombie_vars["slipgun_chain_radius"]; chain_radius = level.zombie_vars["slipgun_chain_radius"];
if ( is_true( self.goo_upgraded ) ) if ( is_true( self.goo_upgraded ) )
{ {
chain_radius *= 1.5; chain_radius *= 1.5;

View File

@ -114,6 +114,7 @@ watch_reset_anim_rate()
{ {
self set_anim_rate( 1 ); self set_anim_rate( 1 );
self setclientfieldtoplayer( "slowgun_fx", 0 ); self setclientfieldtoplayer( "slowgun_fx", 0 );
while ( 1 ) while ( 1 )
{ {
self waittill_any( "spawned_player", "entering_last_stand", "player_revived", "player_suicide" ); self waittill_any( "spawned_player", "entering_last_stand", "player_revived", "player_suicide" );

View File

@ -57,12 +57,15 @@ get_impact_damage( damageweapon )
{ {
case "staff_fire_zm": case "staff_fire_zm":
return 2050; return 2050;
case "staff_fire_upgraded_zm": case "staff_fire_upgraded_zm":
case "staff_fire_upgraded2_zm": case "staff_fire_upgraded2_zm":
case "staff_fire_upgraded3_zm": case "staff_fire_upgraded3_zm":
return 3300; return 3300;
case "one_inch_punch_fire_zm": case "one_inch_punch_fire_zm":
return 0; return 0;
default: default:
return 0; return 0;
} }

View File

@ -57,6 +57,7 @@ tomahawk_attack_zombies( m_tomahawk, a_zombies )
} }
n_attack_limit = m_tomahawk.n_grenade_charge_power - 1; n_attack_limit = m_tomahawk.n_grenade_charge_power - 1;
if ( a_zombies.size <= n_attack_limit ) if ( a_zombies.size <= n_attack_limit )
n_attack_limit = a_zombies.size; n_attack_limit = a_zombies.size;

View File

@ -60,6 +60,7 @@ show_current_weapon(player)
num = player getentitynumber(); num = player getentitynumber();
displayname = "None"; displayname = "None";
if (player wl_has_stored_weapondata()) if (player wl_has_stored_weapondata())
{ {
weapondata = player wl_get_stored_weapondata(); weapondata = player wl_get_stored_weapondata();
@ -117,20 +118,24 @@ wl_set_stored_weapondata( weapondata )
alt_name = weaponAltWeaponName(name); alt_name = weaponAltWeaponName(name);
clip_missing = weaponClipSize(name) - weapondata["clip"]; clip_missing = weaponClipSize(name) - weapondata["clip"];
if (clip_missing > weapondata["stock"]) if (clip_missing > weapondata["stock"])
{ {
clip_missing = weapondata["stock"]; clip_missing = weapondata["stock"];
} }
weapondata["clip"] += clip_missing; weapondata["clip"] += clip_missing;
weapondata["stock"] -= clip_missing; weapondata["stock"] -= clip_missing;
if (dw_name != "none") if (dw_name != "none")
{ {
clip_dualwield_missing = weaponClipSize(dw_name) - weapondata["lh_clip"]; clip_dualwield_missing = weaponClipSize(dw_name) - weapondata["lh_clip"];
if (clip_dualwield_missing > weapondata["stock"]) if (clip_dualwield_missing > weapondata["stock"])
{ {
clip_dualwield_missing = weapondata["stock"]; clip_dualwield_missing = weapondata["stock"];
} }
weapondata["lh_clip"] += clip_dualwield_missing; weapondata["lh_clip"] += clip_dualwield_missing;
weapondata["stock"] -= clip_dualwield_missing; weapondata["stock"] -= clip_dualwield_missing;
} }
@ -138,10 +143,12 @@ wl_set_stored_weapondata( weapondata )
if (alt_name != "none") if (alt_name != "none")
{ {
clip_alt_missing = weaponClipSize(alt_name) - weapondata["alt_clip"]; clip_alt_missing = weaponClipSize(alt_name) - weapondata["alt_clip"];
if (clip_alt_missing > weapondata["alt_stock"]) if (clip_alt_missing > weapondata["alt_stock"])
{ {
clip_alt_missing = weapondata["alt_stock"]; clip_alt_missing = weapondata["alt_stock"];
} }
weapondata["alt_clip"] += clip_alt_missing; weapondata["alt_clip"] += clip_alt_missing;
weapondata["alt_stock"] -= clip_alt_missing; weapondata["alt_stock"] -= clip_alt_missing;
} }

View File

@ -316,15 +316,19 @@ weapon_give( weapon, is_upgrade, magic_box, nosound )
primaryweapons = self getweaponslistprimaries(); primaryweapons = self getweaponslistprimaries();
current_weapon = self getcurrentweapon(); current_weapon = self getcurrentweapon();
current_weapon = self maps\mp\zombies\_zm_weapons::switch_from_alt_weapon( current_weapon ); current_weapon = self maps\mp\zombies\_zm_weapons::switch_from_alt_weapon( current_weapon );
if ( !isDefined( is_upgrade ) ) if ( !isDefined( is_upgrade ) )
{ {
is_upgrade = 0; is_upgrade = 0;
} }
weapon_limit = get_player_weapon_limit( self ); weapon_limit = get_player_weapon_limit( self );
if ( is_equipment( weapon ) ) if ( is_equipment( weapon ) )
{ {
self maps\mp\zombies\_zm_equipment::equipment_give( weapon ); self maps\mp\zombies\_zm_equipment::equipment_give( weapon );
} }
if ( weapon == "riotshield_zm" ) if ( weapon == "riotshield_zm" )
{ {
if ( isDefined( self.player_shield_reset_health ) ) if ( isDefined( self.player_shield_reset_health ) )
@ -332,19 +336,24 @@ weapon_give( weapon, is_upgrade, magic_box, nosound )
self [[ self.player_shield_reset_health ]](); self [[ self.player_shield_reset_health ]]();
} }
} }
if ( self hasweapon( weapon ) ) if ( self hasweapon( weapon ) )
{ {
if ( issubstr( weapon, "knife_ballistic_" ) ) if ( issubstr( weapon, "knife_ballistic_" ) )
{ {
self notify( "zmb_lost_knife" ); self notify( "zmb_lost_knife" );
} }
self givestartammo( weapon ); self givestartammo( weapon );
if ( !is_offhand_weapon( weapon ) ) if ( !is_offhand_weapon( weapon ) )
{ {
self switchtoweapon( weapon ); self switchtoweapon( weapon );
} }
return; return;
} }
if ( is_melee_weapon( weapon ) ) if ( is_melee_weapon( weapon ) )
{ {
current_weapon = maps\mp\zombies\_zm_melee_weapon::change_melee_weapon( weapon, current_weapon ); current_weapon = maps\mp\zombies\_zm_melee_weapon::change_melee_weapon( weapon, current_weapon );
@ -352,43 +361,52 @@ weapon_give( weapon, is_upgrade, magic_box, nosound )
else if ( is_lethal_grenade( weapon ) ) else if ( is_lethal_grenade( weapon ) )
{ {
old_lethal = self get_player_lethal_grenade(); old_lethal = self get_player_lethal_grenade();
if ( isDefined( old_lethal ) && old_lethal != "" ) if ( isDefined( old_lethal ) && old_lethal != "" )
{ {
self takeweapon( old_lethal ); self takeweapon( old_lethal );
unacquire_weapon_toggle( old_lethal ); unacquire_weapon_toggle( old_lethal );
} }
self set_player_lethal_grenade( weapon ); self set_player_lethal_grenade( weapon );
} }
else if ( is_tactical_grenade( weapon ) ) else if ( is_tactical_grenade( weapon ) )
{ {
old_tactical = self get_player_tactical_grenade(); old_tactical = self get_player_tactical_grenade();
if ( isDefined( old_tactical ) && old_tactical != "" ) if ( isDefined( old_tactical ) && old_tactical != "" )
{ {
self takeweapon( old_tactical ); self takeweapon( old_tactical );
unacquire_weapon_toggle( old_tactical ); unacquire_weapon_toggle( old_tactical );
} }
self set_player_tactical_grenade( weapon ); self set_player_tactical_grenade( weapon );
} }
else if ( is_placeable_mine( weapon ) ) else if ( is_placeable_mine( weapon ) )
{ {
old_mine = self get_player_placeable_mine(); old_mine = self get_player_placeable_mine();
if ( isDefined( old_mine ) ) if ( isDefined( old_mine ) )
{ {
self takeweapon( old_mine ); self takeweapon( old_mine );
unacquire_weapon_toggle( old_mine ); unacquire_weapon_toggle( old_mine );
} }
self set_player_placeable_mine( weapon ); self set_player_placeable_mine( weapon );
} }
if ( !is_offhand_weapon( weapon ) ) if ( !is_offhand_weapon( weapon ) )
{ {
self maps\mp\zombies\_zm_weapons::take_fallback_weapon(); self maps\mp\zombies\_zm_weapons::take_fallback_weapon();
} }
if ( primaryweapons.size >= weapon_limit ) if ( primaryweapons.size >= weapon_limit )
{ {
if ( is_melee_weapon( current_weapon ) || is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) ) if ( is_melee_weapon( current_weapon ) || is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) )
{ {
current_weapon = undefined; current_weapon = undefined;
} }
if ( isDefined( current_weapon ) ) if ( isDefined( current_weapon ) )
{ {
if ( !is_offhand_weapon( weapon ) ) if ( !is_offhand_weapon( weapon ) )
@ -397,15 +415,18 @@ weapon_give( weapon, is_upgrade, magic_box, nosound )
{ {
level.player_drops_tesla_gun = 1; level.player_drops_tesla_gun = 1;
} }
if ( issubstr( current_weapon, "knife_ballistic_" ) ) if ( issubstr( current_weapon, "knife_ballistic_" ) )
{ {
self notify( "zmb_lost_knife" ); self notify( "zmb_lost_knife" );
} }
self takeweapon( current_weapon ); self takeweapon( current_weapon );
unacquire_weapon_toggle( current_weapon ); unacquire_weapon_toggle( current_weapon );
} }
} }
} }
if ( isDefined( level.zombiemode_offhand_weapon_give_override ) ) if ( isDefined( level.zombiemode_offhand_weapon_give_override ) )
{ {
if ( self [[ level.zombiemode_offhand_weapon_give_override ]]( weapon ) ) if ( self [[ level.zombiemode_offhand_weapon_give_override ]]( weapon ) )
@ -413,6 +434,7 @@ weapon_give( weapon, is_upgrade, magic_box, nosound )
return; return;
} }
} }
if ( weapon == "cymbal_monkey_zm" ) if ( weapon == "cymbal_monkey_zm" )
{ {
self maps\mp\zombies\_zm_weap_cymbal_monkey::player_give_cymbal_monkey(); self maps\mp\zombies\_zm_weap_cymbal_monkey::player_give_cymbal_monkey();
@ -429,20 +451,24 @@ weapon_give( weapon, is_upgrade, magic_box, nosound )
self play_weapon_vo( weapon, magic_box ); self play_weapon_vo( weapon, magic_box );
return; return;
} }
if ( isDefined( level.zombie_weapons_callbacks ) && isDefined( level.zombie_weapons_callbacks[ weapon ] ) ) if ( isDefined( level.zombie_weapons_callbacks ) && isDefined( level.zombie_weapons_callbacks[ weapon ] ) )
{ {
self thread [[ level.zombie_weapons_callbacks[ weapon ] ]](); self thread [[ level.zombie_weapons_callbacks[ weapon ] ]]();
play_weapon_vo( weapon, magic_box ); play_weapon_vo( weapon, magic_box );
return; return;
} }
if ( !is_true( nosound ) ) if ( !is_true( nosound ) )
{ {
self play_sound_on_ent( "purchase" ); self play_sound_on_ent( "purchase" );
} }
if ( is_true( magic_box ) && is_limited_weapon( weapon ) && level.limited_weapons[ weapon ] == 1 ) if ( is_true( magic_box ) && is_limited_weapon( weapon ) && level.limited_weapons[ weapon ] == 1 )
{ {
playsoundatposition( "mus_raygun_stinger", ( 0, 0, 0 ) ); playsoundatposition( "mus_raygun_stinger", ( 0, 0, 0 ) );
} }
if ( !is_weapon_upgraded( weapon ) ) if ( !is_weapon_upgraded( weapon ) )
{ {
self giveweapon( weapon ); self giveweapon( weapon );
@ -451,8 +477,10 @@ weapon_give( weapon, is_upgrade, magic_box, nosound )
{ {
self giveweapon( weapon, 0, self get_pack_a_punch_weapon_options( weapon ) ); self giveweapon( weapon, 0, self get_pack_a_punch_weapon_options( weapon ) );
} }
acquire_weapon_toggle( weapon, self ); acquire_weapon_toggle( weapon, self );
self givestartammo( weapon ); self givestartammo( weapon );
if ( !is_offhand_weapon( weapon ) ) if ( !is_offhand_weapon( weapon ) )
{ {
if ( !is_melee_weapon( weapon ) ) if ( !is_melee_weapon( weapon ) )
@ -464,6 +492,7 @@ weapon_give( weapon, is_upgrade, magic_box, nosound )
self switchtoweapon( current_weapon ); self switchtoweapon( current_weapon );
} }
} }
self play_weapon_vo( weapon, magic_box ); self play_weapon_vo( weapon, magic_box );
self notify("weapon_ammo_change"); self notify("weapon_ammo_change");
@ -536,6 +565,7 @@ weapon_spawn_think()
second_endon = undefined; second_endon = undefined;
is_grenade = 0; is_grenade = 0;
if(weapontype( self.zombie_weapon_upgrade ) == "grenade") if(weapontype( self.zombie_weapon_upgrade ) == "grenade")
{ {
is_grenade = 1; is_grenade = 1;
@ -565,6 +595,7 @@ weapon_spawn_think()
else if ( !isDefined( self.first_time_triggered ) ) else if ( !isDefined( self.first_time_triggered ) )
{ {
self.first_time_triggered = 0; self.first_time_triggered = 0;
if ( isDefined( self.stub ) ) if ( isDefined( self.stub ) )
{ {
self.stub.first_time_triggered = 0; self.stub.first_time_triggered = 0;
@ -599,6 +630,7 @@ weapon_spawn_think()
toplayer = player get_eye() - self.origin; toplayer = player get_eye() - self.origin;
forward = -1 * anglesToRight( self.angles ); forward = -1 * anglesToRight( self.angles );
dot = vectordot( toplayer, forward ); dot = vectordot( toplayer, forward );
if ( dot < 0 ) if ( dot < 0 )
{ {
continue; continue;
@ -612,9 +644,11 @@ weapon_spawn_think()
} }
player_has_weapon = player maps\mp\zombies\_zm_weapons::has_weapon_or_upgrade( self.zombie_weapon_upgrade ); 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 ) ) 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 ); shared_ammo_weapon = player maps\mp\zombies\_zm_weapons::get_shared_ammo_weapon( self.zombie_weapon_upgrade );
if ( isDefined( shared_ammo_weapon ) ) if ( isDefined( shared_ammo_weapon ) )
{ {
player_has_weapon = 1; player_has_weapon = 1;
@ -627,6 +661,7 @@ weapon_spawn_think()
} }
cost = maps\mp\zombies\_zm_weapons::get_weapon_cost( 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() ) if ( player maps\mp\zombies\_zm_pers_upgrades_functions::is_pers_double_points_active() )
{ {
cost = int( cost / 2 ); cost = int( cost / 2 );
@ -648,6 +683,7 @@ weapon_spawn_think()
if ( self.zombie_weapon_upgrade == "riotshield_zm" ) if ( self.zombie_weapon_upgrade == "riotshield_zm" )
{ {
player maps\mp\zombies\_zm_equipment::equipment_give( "riotshield_zm" ); player maps\mp\zombies\_zm_equipment::equipment_give( "riotshield_zm" );
if ( isDefined( player.player_shield_reset_health ) ) if ( isDefined( player.player_shield_reset_health ) )
{ {
player [[ player.player_shield_reset_health ]](); player [[ player.player_shield_reset_health ]]();

View File

@ -19,6 +19,7 @@ struct_class_init()
level.struct_class_names[ "script_noteworthy" ] = []; level.struct_class_names[ "script_noteworthy" ] = [];
level.struct_class_names[ "script_linkname" ] = []; level.struct_class_names[ "script_linkname" ] = [];
level.struct_class_names[ "script_unitrigger_type" ] = []; level.struct_class_names[ "script_unitrigger_type" ] = [];
foreach ( s_struct in level.struct ) foreach ( s_struct in level.struct )
{ {
if ( isDefined( s_struct.targetname ) ) if ( isDefined( s_struct.targetname ) )
@ -27,43 +28,53 @@ struct_class_init()
{ {
level.struct_class_names[ "targetname" ][ s_struct.targetname ] = []; level.struct_class_names[ "targetname" ][ s_struct.targetname ] = [];
} }
size = level.struct_class_names[ "targetname" ][ s_struct.targetname ].size; size = level.struct_class_names[ "targetname" ][ s_struct.targetname ].size;
level.struct_class_names[ "targetname" ][ s_struct.targetname ][ size ] = s_struct; level.struct_class_names[ "targetname" ][ s_struct.targetname ][ size ] = s_struct;
} }
if ( isDefined( s_struct.target ) ) if ( isDefined( s_struct.target ) )
{ {
if ( !isDefined( level.struct_class_names[ "target" ][ s_struct.target ] ) ) if ( !isDefined( level.struct_class_names[ "target" ][ s_struct.target ] ) )
{ {
level.struct_class_names[ "target" ][ s_struct.target ] = []; level.struct_class_names[ "target" ][ s_struct.target ] = [];
} }
size = level.struct_class_names[ "target" ][ s_struct.target ].size; size = level.struct_class_names[ "target" ][ s_struct.target ].size;
level.struct_class_names[ "target" ][ s_struct.target ][ size ] = s_struct; level.struct_class_names[ "target" ][ s_struct.target ][ size ] = s_struct;
} }
if ( isDefined( s_struct.script_noteworthy ) ) if ( isDefined( s_struct.script_noteworthy ) )
{ {
if ( !isDefined( level.struct_class_names[ "script_noteworthy" ][ s_struct.script_noteworthy ] ) ) if ( !isDefined( level.struct_class_names[ "script_noteworthy" ][ s_struct.script_noteworthy ] ) )
{ {
level.struct_class_names[ "script_noteworthy" ][ s_struct.script_noteworthy ] = []; level.struct_class_names[ "script_noteworthy" ][ s_struct.script_noteworthy ] = [];
} }
size = level.struct_class_names[ "script_noteworthy" ][ s_struct.script_noteworthy ].size; size = level.struct_class_names[ "script_noteworthy" ][ s_struct.script_noteworthy ].size;
level.struct_class_names[ "script_noteworthy" ][ s_struct.script_noteworthy ][ size ] = s_struct; level.struct_class_names[ "script_noteworthy" ][ s_struct.script_noteworthy ][ size ] = s_struct;
} }
if ( isDefined( s_struct.script_linkname ) ) if ( isDefined( s_struct.script_linkname ) )
{ {
level.struct_class_names[ "script_linkname" ][ s_struct.script_linkname ][ 0 ] = s_struct; level.struct_class_names[ "script_linkname" ][ s_struct.script_linkname ][ 0 ] = s_struct;
} }
if ( isDefined( s_struct.script_unitrigger_type ) ) if ( isDefined( s_struct.script_unitrigger_type ) )
{ {
if ( !isDefined( level.struct_class_names[ "script_unitrigger_type" ][ s_struct.script_unitrigger_type ] ) ) if ( !isDefined( level.struct_class_names[ "script_unitrigger_type" ][ s_struct.script_unitrigger_type ] ) )
{ {
level.struct_class_names[ "script_unitrigger_type" ][ s_struct.script_unitrigger_type ] = []; level.struct_class_names[ "script_unitrigger_type" ][ s_struct.script_unitrigger_type ] = [];
} }
size = level.struct_class_names[ "script_unitrigger_type" ][ s_struct.script_unitrigger_type ].size; size = level.struct_class_names[ "script_unitrigger_type" ][ s_struct.script_unitrigger_type ].size;
level.struct_class_names[ "script_unitrigger_type" ][ s_struct.script_unitrigger_type ][ size ] = s_struct; level.struct_class_names[ "script_unitrigger_type" ][ s_struct.script_unitrigger_type ][ size ] = s_struct;
} }
} }
gametype = getDvar( "g_gametype" ); gametype = getDvar( "g_gametype" );
location = getDvar( "ui_zm_mapstartlocation" ); location = getDvar( "ui_zm_mapstartlocation" );
if ( array_validate( level.add_struct_gamemode_location_funcs ) ) if ( array_validate( level.add_struct_gamemode_location_funcs ) )
{ {
if ( array_validate( level.add_struct_gamemode_location_funcs[ gametype ] ) ) if ( array_validate( level.add_struct_gamemode_location_funcs[ gametype ] ) )
@ -87,37 +98,45 @@ add_struct( s_struct )
{ {
level.struct_class_names[ "targetname" ][ s_struct.targetname ] = []; level.struct_class_names[ "targetname" ][ s_struct.targetname ] = [];
} }
size = level.struct_class_names[ "targetname" ][ s_struct.targetname ].size; size = level.struct_class_names[ "targetname" ][ s_struct.targetname ].size;
level.struct_class_names[ "targetname" ][ s_struct.targetname ][ size ] = s_struct; level.struct_class_names[ "targetname" ][ s_struct.targetname ][ size ] = s_struct;
} }
if ( isDefined( s_struct.script_noteworthy ) ) if ( isDefined( s_struct.script_noteworthy ) )
{ {
if ( !isDefined( level.struct_class_names[ "script_noteworthy" ][ s_struct.script_noteworthy ] ) ) if ( !isDefined( level.struct_class_names[ "script_noteworthy" ][ s_struct.script_noteworthy ] ) )
{ {
level.struct_class_names[ "script_noteworthy" ][ s_struct.script_noteworthy ] = []; level.struct_class_names[ "script_noteworthy" ][ s_struct.script_noteworthy ] = [];
} }
size = level.struct_class_names[ "script_noteworthy" ][ s_struct.script_noteworthy ].size; size = level.struct_class_names[ "script_noteworthy" ][ s_struct.script_noteworthy ].size;
level.struct_class_names[ "script_noteworthy" ][ s_struct.script_noteworthy ][ size ] = s_struct; level.struct_class_names[ "script_noteworthy" ][ s_struct.script_noteworthy ][ size ] = s_struct;
} }
if ( isDefined( s_struct.target ) ) if ( isDefined( s_struct.target ) )
{ {
if ( !isDefined( level.struct_class_names[ "target" ][ s_struct.target ] ) ) if ( !isDefined( level.struct_class_names[ "target" ][ s_struct.target ] ) )
{ {
level.struct_class_names[ "target" ][ s_struct.target ] = []; level.struct_class_names[ "target" ][ s_struct.target ] = [];
} }
size = level.struct_class_names[ "target" ][ s_struct.target ].size; size = level.struct_class_names[ "target" ][ s_struct.target ].size;
level.struct_class_names[ "target" ][ s_struct.target ][ size ] = s_struct; level.struct_class_names[ "target" ][ s_struct.target ][ size ] = s_struct;
} }
if ( isDefined( s_struct.script_linkname ) ) if ( isDefined( s_struct.script_linkname ) )
{ {
level.struct_class_names[ "script_linkname" ][ s_struct.script_linkname ][ 0 ] = s_struct; level.struct_class_names[ "script_linkname" ][ s_struct.script_linkname ][ 0 ] = s_struct;
} }
if ( isDefined( s_struct.script_unitrigger_type ) ) if ( isDefined( s_struct.script_unitrigger_type ) )
{ {
if ( !isDefined( level.struct_class_names[ "script_unitrigger_type" ][ s_struct.script_unitrigger_type ] ) ) if ( !isDefined( level.struct_class_names[ "script_unitrigger_type" ][ s_struct.script_unitrigger_type ] ) )
{ {
level.struct_class_names[ "script_unitrigger_type" ][ s_struct.script_unitrigger_type ] = []; level.struct_class_names[ "script_unitrigger_type" ][ s_struct.script_unitrigger_type ] = [];
} }
size = level.struct_class_names[ "script_unitrigger_type" ][ s_struct.script_unitrigger_type ].size; size = level.struct_class_names[ "script_unitrigger_type" ][ s_struct.script_unitrigger_type ].size;
level.struct_class_names[ "script_unitrigger_type" ][ s_struct.script_unitrigger_type ][ size ] = s_struct; level.struct_class_names[ "script_unitrigger_type" ][ s_struct.script_unitrigger_type ][ size ] = s_struct;
} }
@ -185,6 +204,7 @@ wallbuy( weapon_name, target, targetname, origin, angles, play_chalk_fx = 1 )
unitrigger_stub.angles = angles; unitrigger_stub.angles = angles;
model_name = undefined; model_name = undefined;
if ( weapon_name == "sticky_grenade_zm" ) if ( weapon_name == "sticky_grenade_zm" )
{ {
model_name = "semtex_bag"; model_name = "semtex_bag";
@ -217,6 +237,7 @@ wallbuy( weapon_name, target, targetname, origin, angles, play_chalk_fx = 1 )
if ( unitrigger_stub.targetname == "weapon_upgrade" ) if ( unitrigger_stub.targetname == "weapon_upgrade" )
{ {
unitrigger_stub.cost = get_weapon_cost( weapon_name ); unitrigger_stub.cost = get_weapon_cost( weapon_name );
if ( !is_true( level.monolingustic_prompt_format ) ) if ( !is_true( level.monolingustic_prompt_format ) )
{ {
unitrigger_stub.hint_string = get_weapon_hint( weapon_name ); unitrigger_stub.hint_string = get_weapon_hint( weapon_name );
@ -225,10 +246,12 @@ wallbuy( weapon_name, target, targetname, origin, angles, play_chalk_fx = 1 )
else else
{ {
unitrigger_stub.hint_parm1 = get_weapon_display_name( weapon_name ); unitrigger_stub.hint_parm1 = get_weapon_display_name( weapon_name );
if ( !isDefined( unitrigger_stub.hint_parm1 ) || unitrigger_stub.hint_parm1 == "" || unitrigger_stub.hint_parm1 == "none" ) if ( !isDefined( unitrigger_stub.hint_parm1 ) || unitrigger_stub.hint_parm1 == "" || unitrigger_stub.hint_parm1 == "none" )
{ {
unitrigger_stub.hint_parm1 = "missing weapon name " + weapon_name; unitrigger_stub.hint_parm1 = "missing weapon name " + weapon_name;
} }
unitrigger_stub.hint_parm2 = unitrigger_stub.cost; unitrigger_stub.hint_parm2 = unitrigger_stub.cost;
unitrigger_stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY"; unitrigger_stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY";
} }
@ -244,6 +267,7 @@ wallbuy( weapon_name, target, targetname, origin, angles, play_chalk_fx = 1 )
if ( is_melee_weapon( weapon_name ) ) if ( is_melee_weapon( weapon_name ) )
{ {
melee_weapon = undefined; melee_weapon = undefined;
foreach(melee_weapon in level._melee_weapons) foreach(melee_weapon in level._melee_weapons)
{ {
if(melee_weapon.weapon_name == weapon_name) if(melee_weapon.weapon_name == weapon_name)
@ -330,6 +354,7 @@ playchalkfx( effect, origin, angles )
wallbuy_grenade_model_fix() wallbuy_grenade_model_fix()
{ {
model = getent(self.target, "targetname"); model = getent(self.target, "targetname");
if(!isDefined(model)) if(!isDefined(model))
{ {
return; return;
@ -347,13 +372,16 @@ barrier( model, origin, angles, not_solid )
level.survival_barriers = []; level.survival_barriers = [];
level.survival_barriers_index = 0; level.survival_barriers_index = 0;
} }
level.survival_barriers[ level.survival_barriers_index ] = spawn( "script_model", origin ); level.survival_barriers[ level.survival_barriers_index ] = spawn( "script_model", origin );
level.survival_barriers[ level.survival_barriers_index ] setModel( model ); level.survival_barriers[ level.survival_barriers_index ] setModel( model );
level.survival_barriers[ level.survival_barriers_index ] rotateTo( angles, 0.1 ); level.survival_barriers[ level.survival_barriers_index ] rotateTo( angles, 0.1 );
if ( is_true( not_solid ) ) if ( is_true( not_solid ) )
{ {
level.survival_barriers[ level.survival_barriers_index ] notSolid(); level.survival_barriers[ level.survival_barriers_index ] notSolid();
} }
level.survival_barriers_index++; level.survival_barriers_index++;
} }
@ -363,13 +391,16 @@ add_struct_location_gamemode_func( gametype, location, func )
{ {
level.add_struct_gamemode_location_funcs = []; level.add_struct_gamemode_location_funcs = [];
} }
if ( !isDefined( level.add_struct_gamemode_location_funcs[ gametype ] ) ) if ( !isDefined( level.add_struct_gamemode_location_funcs[ gametype ] ) )
{ {
level.add_struct_gamemode_location_funcs[ gametype ] = []; level.add_struct_gamemode_location_funcs[ gametype ] = [];
} }
if ( !isDefined( level.add_struct_gamemode_location_funcs[ gametype ][ location ] ) ) if ( !isDefined( level.add_struct_gamemode_location_funcs[ gametype ][ location ] ) )
{ {
level.add_struct_gamemode_location_funcs[ gametype ][ location ] = []; level.add_struct_gamemode_location_funcs[ gametype ][ location ] = [];
} }
level.add_struct_gamemode_location_funcs[ gametype ][ location ][ level.add_struct_gamemode_location_funcs[ gametype ][ location ].size ] = func; level.add_struct_gamemode_location_funcs[ gametype ][ location ][ level.add_struct_gamemode_location_funcs[ gametype ][ location ].size ] = func;
} }

View File

@ -136,6 +136,7 @@ meat_stink( who )
if (valid_drop) if (valid_drop)
{ {
players = get_players(); players = get_players();
foreach (player in players) foreach (player in players)
{ {
player thread scripts\zm\zgrief\zgrief_reimagined::show_grief_hud_msg("Meat dropped!"); player thread scripts\zm\zgrief\zgrief_reimagined::show_grief_hud_msg("Meat dropped!");
@ -178,6 +179,7 @@ meat_stink( who )
} }
players = get_players(); players = get_players();
foreach (player in players) foreach (player in players)
{ {
player thread maps\mp\gametypes_zm\zgrief::meat_stink_player_cleanup(); player thread maps\mp\gametypes_zm\zgrief::meat_stink_player_cleanup();
@ -289,6 +291,7 @@ meat_stink_ignoreme_think()
zombies = get_round_enemy_array(); zombies = get_round_enemy_array();
players = get_players(); players = get_players();
foreach (player in players) foreach (player in players)
{ {
if (player == self) if (player == self)
@ -337,6 +340,7 @@ meat_stink_cleanup_on_downed()
} }
players = get_players(); players = get_players();
foreach (player in players) foreach (player in players)
{ {
player thread maps\mp\gametypes_zm\zgrief::meat_stink_player_cleanup(); player thread maps\mp\gametypes_zm\zgrief::meat_stink_player_cleanup();
@ -354,6 +358,7 @@ meat_stink_cleanup_on_downed()
if (valid_drop) if (valid_drop)
{ {
players = get_players(); players = get_players();
foreach (player in players) foreach (player in players)
{ {
player thread scripts\zm\zgrief\zgrief_reimagined::show_grief_hud_msg("Meat dropped!"); player thread scripts\zm\zgrief\zgrief_reimagined::show_grief_hud_msg("Meat dropped!");
@ -380,6 +385,7 @@ meat_powerup_reset_on_disconnect()
level.meat_player = undefined; level.meat_player = undefined;
players = get_players(); players = get_players();
foreach (player in players) foreach (player in players)
{ {
if (is_player_valid(player) && !is_true(player.spawn_protection) && !is_true(player.revive_protection)) if (is_player_valid(player) && !is_true(player.spawn_protection) && !is_true(player.revive_protection))
@ -424,6 +430,7 @@ meat_stink_player( who )
level.meat_player = who; level.meat_player = who;
who.ignoreme = 0; who.ignoreme = 0;
players = get_players(); players = get_players();
foreach ( player in players ) foreach ( player in players )
{ {
player thread maps\mp\gametypes_zm\zgrief::meat_stink_player_cleanup(); player thread maps\mp\gametypes_zm\zgrief::meat_stink_player_cleanup();
@ -443,6 +450,7 @@ meat_stink_player( who )
who notify( "meat_stink_player_end" ); who notify( "meat_stink_player_end" );
players = get_players(); players = get_players();
foreach ( player in players ) foreach ( player in players )
{ {
player thread maps\mp\gametypes_zm\zgrief::meat_stink_player_cleanup(); player thread maps\mp\gametypes_zm\zgrief::meat_stink_player_cleanup();
@ -452,6 +460,7 @@ meat_stink_player( who )
player.ignoreme = 0; player.ignoreme = 0;
} }
} }
level.meat_player = undefined; level.meat_player = undefined;
} }
@ -479,6 +488,7 @@ print_meat_msg(meat_player, verb)
} }
color = ""; color = "";
if (self.team == meat_player.team) if (self.team == meat_player.team)
{ {
color = "^8"; color = "^8";

View File

@ -12,6 +12,7 @@ give_afterlife()
wait 0.5; wait 0.5;
start_pos = 1; start_pos = 1;
players = getplayers(); players = getplayers();
foreach ( player in players ) foreach ( player in players )
{ {
if ( isDefined( player.afterlife ) && !player.afterlife ) if ( isDefined( player.afterlife ) && !player.afterlife )

View File

@ -52,14 +52,17 @@ give_team_characters()
{ {
self detachall(); self detachall();
self set_player_is_female( 0 ); self set_player_is_female( 0 );
if ( !isDefined( self.characterindex ) ) if ( !isDefined( self.characterindex ) )
{ {
self.characterindex = 1; self.characterindex = 1;
if ( self.team == "axis" ) if ( self.team == "axis" )
{ {
self.characterindex = 0; self.characterindex = 0;
} }
} }
switch( self.characterindex ) switch( self.characterindex )
{ {
case 0: case 0:
@ -70,6 +73,7 @@ give_team_characters()
self setviewmodel( "c_zom_oleary_shortsleeve_viewhands" ); self setviewmodel( "c_zom_oleary_shortsleeve_viewhands" );
self.characterindex = 0; self.characterindex = 0;
break; break;
case 1: case 1:
case 3: case 3:
self setmodel( "c_zom_player_grief_guard_fb" ); self setmodel( "c_zom_player_grief_guard_fb" );
@ -79,6 +83,7 @@ give_team_characters()
self.characterindex = 1; self.characterindex = 1;
break; break;
} }
self setmovespeedscale( 1 ); self setmovespeedscale( 1 );
self setsprintduration( 4 ); self setsprintduration( 4 );
self setsprintcooldown( 0 ); self setsprintcooldown( 0 );
@ -120,6 +125,7 @@ main()
a_t_door_triggers = getentarray( "zombie_door", "targetname" ); a_t_door_triggers = getentarray( "zombie_door", "targetname" );
triggers = a_t_door_triggers; triggers = a_t_door_triggers;
i = 0; i = 0;
while ( i < triggers.size ) while ( i < triggers.size )
{ {
if ( isDefined( triggers[ i ].script_flag ) ) if ( isDefined( triggers[ i ].script_flag ) )
@ -130,25 +136,32 @@ main()
i++; i++;
continue; continue;
} }
if ( triggers[ i ].script_flag == "activate_cafeteria" || triggers[ i ].script_flag == "activate_cellblock_east" || triggers[ i ].script_flag == "activate_cellblock_west" || triggers[ i ].script_flag == "activate_cellblock_barber" || triggers[ i ].script_flag == "activate_cellblock_gondola" || triggers[ i ].script_flag == "activate_cellblock_east_west" || triggers[ i ].script_flag == "activate_warden_office" ) if ( triggers[ i ].script_flag == "activate_cafeteria" || triggers[ i ].script_flag == "activate_cellblock_east" || triggers[ i ].script_flag == "activate_cellblock_west" || triggers[ i ].script_flag == "activate_cellblock_barber" || triggers[ i ].script_flag == "activate_cellblock_gondola" || triggers[ i ].script_flag == "activate_cellblock_east_west" || triggers[ i ].script_flag == "activate_warden_office" )
{ {
i++; i++;
continue; continue;
} }
if ( isDefined( triggers[ i ].target ) ) if ( isDefined( triggers[ i ].target ) )
{ {
str_target = triggers[ i ].target; str_target = triggers[ i ].target;
a_door_and_clip = getentarray( str_target, "targetname" ); a_door_and_clip = getentarray( str_target, "targetname" );
foreach ( ent in a_door_and_clip ) foreach ( ent in a_door_and_clip )
{ {
ent delete(); ent delete();
} }
} }
triggers[ i ] delete(); triggers[ i ] delete();
} }
i++; i++;
} }
a_t_doors = getentarray( "zombie_door", "targetname" ); a_t_doors = getentarray( "zombie_door", "targetname" );
foreach ( t_door in a_t_doors ) foreach ( t_door in a_t_doors )
{ {
if ( isDefined( t_door.script_flag ) ) if ( isDefined( t_door.script_flag ) )
@ -159,6 +172,7 @@ main()
} }
} }
} }
zbarriers = getzbarrierarray(); zbarriers = getzbarrierarray();
a_str_zones = []; a_str_zones = [];
a_str_zones[ 0 ] = "zone_start"; a_str_zones[ 0 ] = "zone_start";
@ -171,6 +185,7 @@ main()
a_str_zones[ 7 ] = "zone_cellblock_west_barber"; a_str_zones[ 7 ] = "zone_cellblock_west_barber";
a_str_zones[ 8 ] = "zone_cellblock_west"; a_str_zones[ 8 ] = "zone_cellblock_west";
a_str_zones[ 9 ] = "zone_cellblock_west_gondola"; a_str_zones[ 9 ] = "zone_cellblock_west_gondola";
foreach ( barrier in zbarriers ) foreach ( barrier in zbarriers )
{ {
if ( isDefined( barrier.script_noteworthy ) && barrier.script_noteworthy == "cafe_chest_zbarrier" || isDefined( barrier.script_noteworthy ) && barrier.script_noteworthy == "start_chest_zbarrier" ) if ( isDefined( barrier.script_noteworthy ) && barrier.script_noteworthy == "cafe_chest_zbarrier" || isDefined( barrier.script_noteworthy ) && barrier.script_noteworthy == "start_chest_zbarrier" )
@ -181,6 +196,7 @@ main()
{ {
str_model = barrier.model; str_model = barrier.model;
b_delete_barrier = 1; b_delete_barrier = 1;
if ( isdefined( barrier.script_string ) ) if ( isdefined( barrier.script_string ) )
{ {
for ( i = 0; i < a_str_zones.size; i++ ) for ( i = 0; i < a_str_zones.size; i++ )
@ -198,6 +214,7 @@ main()
} }
} }
} }
t_temp = getent( "tower_trap_activate_trigger", "targetname" ); t_temp = getent( "tower_trap_activate_trigger", "targetname" );
t_temp delete(); t_temp delete();
t_temp = getent( "tower_trap_range_trigger", "targetname" ); t_temp = getent( "tower_trap_range_trigger", "targetname" );
@ -207,77 +224,99 @@ main()
e_brush = getent( "tower_shockbox_door", "targetname" ); e_brush = getent( "tower_shockbox_door", "targetname" );
e_brush delete(); e_brush delete();
a_t_travel_triggers = getentarray( "travel_trigger", "script_noteworthy" ); a_t_travel_triggers = getentarray( "travel_trigger", "script_noteworthy" );
foreach ( trigger in a_t_travel_triggers ) foreach ( trigger in a_t_travel_triggers )
{ {
trigger delete(); trigger delete();
} }
a_e_gondola_lights = getentarray( "gondola_state_light", "targetname" ); a_e_gondola_lights = getentarray( "gondola_state_light", "targetname" );
foreach ( light in a_e_gondola_lights ) foreach ( light in a_e_gondola_lights )
{ {
light delete(); light delete();
} }
a_e_gondola_landing_gates = getentarray( "gondola_landing_gates", "targetname" ); a_e_gondola_landing_gates = getentarray( "gondola_landing_gates", "targetname" );
foreach ( model in a_e_gondola_landing_gates ) foreach ( model in a_e_gondola_landing_gates )
{ {
model delete(); model delete();
} }
a_e_gondola_landing_doors = getentarray( "gondola_landing_doors", "targetname" ); a_e_gondola_landing_doors = getentarray( "gondola_landing_doors", "targetname" );
foreach ( model in a_e_gondola_landing_doors ) foreach ( model in a_e_gondola_landing_doors )
{ {
model delete(); model delete();
} }
a_e_gondola_gates = getentarray( "gondola_gates", "targetname" ); a_e_gondola_gates = getentarray( "gondola_gates", "targetname" );
foreach ( model in a_e_gondola_gates ) foreach ( model in a_e_gondola_gates )
{ {
model delete(); model delete();
} }
a_e_gondola_doors = getentarray( "gondola_doors", "targetname" ); a_e_gondola_doors = getentarray( "gondola_doors", "targetname" );
foreach ( model in a_e_gondola_doors ) foreach ( model in a_e_gondola_doors )
{ {
model delete(); model delete();
} }
m_gondola = getent( "zipline_gondola", "targetname" ); m_gondola = getent( "zipline_gondola", "targetname" );
m_gondola delete(); m_gondola delete();
t_ride_trigger = getent( "gondola_ride_trigger", "targetname" ); t_ride_trigger = getent( "gondola_ride_trigger", "targetname" );
t_ride_trigger delete(); t_ride_trigger delete();
a_classic_clips = getentarray( "classic_clips", "targetname" ); a_classic_clips = getentarray( "classic_clips", "targetname" );
foreach ( clip in a_classic_clips ) foreach ( clip in a_classic_clips )
{ {
clip connectpaths(); clip connectpaths();
clip delete(); clip delete();
} }
a_afterlife_props = getentarray( "afterlife_show", "targetname" ); a_afterlife_props = getentarray( "afterlife_show", "targetname" );
foreach ( m_prop in a_afterlife_props ) foreach ( m_prop in a_afterlife_props )
{ {
m_prop delete(); m_prop delete();
} }
spork_portal = getent( "afterlife_show_spork", "targetname" ); spork_portal = getent( "afterlife_show_spork", "targetname" );
spork_portal delete(); spork_portal delete();
a_audio = getentarray( "at_headphones", "script_noteworthy" ); a_audio = getentarray( "at_headphones", "script_noteworthy" );
foreach ( model in a_audio ) foreach ( model in a_audio )
{ {
model delete(); model delete();
} }
m_spoon_pickup = getent( "pickup_spoon", "targetname" ); m_spoon_pickup = getent( "pickup_spoon", "targetname" );
m_spoon_pickup delete(); m_spoon_pickup delete();
t_sq_bg = getent( "sq_bg_reward_pickup", "targetname" ); t_sq_bg = getent( "sq_bg_reward_pickup", "targetname" );
t_sq_bg delete(); t_sq_bg delete();
t_crafting_table = getentarray( "open_craftable_trigger", "targetname" ); t_crafting_table = getentarray( "open_craftable_trigger", "targetname" );
foreach ( trigger in t_crafting_table ) foreach ( trigger in t_crafting_table )
{ {
trigger delete(); trigger delete();
} }
t_warden_fence = getent( "warden_fence_damage", "targetname" ); t_warden_fence = getent( "warden_fence_damage", "targetname" );
t_warden_fence delete(); t_warden_fence delete();
m_plane_about_to_crash = getent( "plane_about_to_crash", "targetname" ); m_plane_about_to_crash = getent( "plane_about_to_crash", "targetname" );
m_plane_about_to_crash delete(); m_plane_about_to_crash delete();
m_plane_craftable = getent( "plane_craftable", "targetname" ); m_plane_craftable = getent( "plane_craftable", "targetname" );
m_plane_craftable delete(); m_plane_craftable delete();
for ( i = 1; i <= 5; i++ ) for ( i = 1; i <= 5; i++ )
{ {
m_key_lock = getent( "masterkey_lock_" + i, "targetname" ); m_key_lock = getent( "masterkey_lock_" + i, "targetname" );
m_key_lock delete(); m_key_lock delete();
} }
m_shower_door = getent( "shower_key_door", "targetname" ); m_shower_door = getent( "shower_key_door", "targetname" );
m_shower_door delete(); m_shower_door delete();
m_nixie_door = getent( "nixie_door_left", "targetname" ); m_nixie_door = getent( "nixie_door_left", "targetname" );
@ -286,11 +325,13 @@ main()
m_nixie_door delete(); m_nixie_door delete();
m_nixie_brush = getent( "nixie_tube_weaponclip", "targetname" ); m_nixie_brush = getent( "nixie_tube_weaponclip", "targetname" );
m_nixie_brush delete(); m_nixie_brush delete();
for ( i = 1; i <= 3; i++ ) for ( i = 1; i <= 3; i++ )
{ {
m_nixie_tube = getent( "nixie_tube_" + i, "targetname" ); m_nixie_tube = getent( "nixie_tube_" + i, "targetname" );
m_nixie_tube delete(); m_nixie_tube delete();
} }
t_elevator_door = getent( "nixie_elevator_door", "targetname" ); t_elevator_door = getent( "nixie_elevator_door", "targetname" );
t_elevator_door delete(); t_elevator_door delete();
e_elevator_clip = getent( "elevator_door_playerclip", "targetname" ); e_elevator_clip = getent( "elevator_door_playerclip", "targetname" );
@ -309,18 +350,23 @@ main()
m_infirmary_case delete(); m_infirmary_case delete();
fake_plane_part = getent( "fake_veh_t6_dlc_zombie_part_control", "targetname" ); fake_plane_part = getent( "fake_veh_t6_dlc_zombie_part_control", "targetname" );
fake_plane_part delete(); fake_plane_part delete();
for ( i = 1; i <= 3; i++ ) for ( i = 1; i <= 3; i++ )
{ {
m_generator = getent( "generator_panel_" + i, "targetname" ); m_generator = getent( "generator_panel_" + i, "targetname" );
m_generator delete(); m_generator delete();
} }
a_m_generator_core = getentarray( "generator_core", "targetname" ); a_m_generator_core = getentarray( "generator_core", "targetname" );
foreach ( generator in a_m_generator_core ) foreach ( generator in a_m_generator_core )
{ {
generator delete(); generator delete();
} }
e_playerclip = getent( "electric_chair_playerclip", "targetname" ); e_playerclip = getent( "electric_chair_playerclip", "targetname" );
e_playerclip delete(); e_playerclip delete();
for ( i = 1; i <= 4; i++ ) for ( i = 1; i <= 4; i++ )
{ {
t_use = getent( "trigger_electric_chair_" + i, "targetname" ); t_use = getent( "trigger_electric_chair_" + i, "targetname" );
@ -328,12 +374,15 @@ main()
m_chair = getent( "electric_chair_" + i, "targetname" ); m_chair = getent( "electric_chair_" + i, "targetname" );
m_chair delete(); m_chair delete();
} }
a_afterlife_interact = getentarray( "afterlife_interact", "targetname" ); a_afterlife_interact = getentarray( "afterlife_interact", "targetname" );
foreach ( model in a_afterlife_interact ) foreach ( model in a_afterlife_interact )
{ {
model turn_afterlife_interact_on(); model turn_afterlife_interact_on();
wait 0.1; wait 0.1;
} }
flag_wait( "initial_blackscreen_passed" ); flag_wait( "initial_blackscreen_passed" );
maps\mp\zombies\_zm_game_module::turn_power_on_and_open_doors(); maps\mp\zombies\_zm_game_module::turn_power_on_and_open_doors();
flag_wait( "start_zombie_round_logic" ); flag_wait( "start_zombie_round_logic" );
@ -366,6 +415,7 @@ remove_zombie_hats_for_grief()
enemy_location_override( zombie, enemy ) enemy_location_override( zombie, enemy )
{ {
location = enemy.origin; location = enemy.origin;
if ( is_true( self.reroute ) ) if ( is_true( self.reroute ) )
{ {
if ( isDefined( self.reroute_origin ) ) if ( isDefined( self.reroute_origin ) )
@ -373,19 +423,23 @@ enemy_location_override( zombie, enemy )
location = self.reroute_origin; location = self.reroute_origin;
} }
} }
return location; return location;
} }
magicbox_face_spawn() magicbox_face_spawn()
{ {
self endon( "disconnect" ); self endon( "disconnect" );
if ( !is_gametype_active( "zgrief" ) ) if ( !is_gametype_active( "zgrief" ) )
{ {
return; return;
} }
while ( 1 ) while ( 1 )
{ {
self waittill( "user_grabbed_weapon" ); self waittill( "user_grabbed_weapon" );
if ( randomint( 50000 ) == 115 ) if ( randomint( 50000 ) == 115 )
{ {
self playsoundtoplayer( "zmb_easteregg_face", self ); self playsoundtoplayer( "zmb_easteregg_face", self );
@ -400,6 +454,7 @@ magicbox_face_spawn()
wait 0.25; wait 0.25;
self.wth_elem destroy(); self.wth_elem destroy();
} }
wait 0.05; wait 0.05;
} }
} }
@ -412,6 +467,7 @@ turn_afterlife_interact_on()
{ {
return; return;
} }
if ( self.script_string == "electric_cherry_on" || self.script_string == "sleight_on" || self.script_string == "wires_admin_door" ) if ( self.script_string == "electric_cherry_on" || self.script_string == "sleight_on" || self.script_string == "wires_admin_door" )
{ {
if ( !isDefined( level.shockbox_anim ) ) if ( !isDefined( level.shockbox_anim ) )
@ -419,6 +475,7 @@ turn_afterlife_interact_on()
level.shockbox_anim[ "on" ] = %fxanim_zom_al_shock_box_on_anim; level.shockbox_anim[ "on" ] = %fxanim_zom_al_shock_box_on_anim;
level.shockbox_anim[ "off" ] = %fxanim_zom_al_shock_box_off_anim; level.shockbox_anim[ "off" ] = %fxanim_zom_al_shock_box_off_anim;
} }
if ( issubstr( self.model, "p6_zm_al_shock_box" ) ) if ( issubstr( self.model, "p6_zm_al_shock_box" ) )
{ {
self useanimtree( -1 ); self useanimtree( -1 );

View File

@ -38,10 +38,12 @@ move_gondola( b_suppress_doors_close = 0 )
flag_clear( "gondola_at_" + e_gondola.location ); flag_clear( "gondola_at_" + e_gondola.location );
a_t_move = getentarray( "gondola_move_trigger", "targetname" ); a_t_move = getentarray( "gondola_move_trigger", "targetname" );
foreach ( trigger in a_t_move ) foreach ( trigger in a_t_move )
trigger sethintstring( "" ); trigger sethintstring( "" );
a_t_call = getentarray( "gondola_call_trigger", "targetname" ); a_t_call = getentarray( "gondola_call_trigger", "targetname" );
foreach ( trigger in a_t_call ) foreach ( trigger in a_t_call )
trigger sethintstring( &"ZM_PRISON_GONDOLA_ACTIVE" ); trigger sethintstring( &"ZM_PRISON_GONDOLA_ACTIVE" );

View File

@ -50,6 +50,7 @@ blundergat_upgrade_station()
} }
str_valid_weapon = player getcurrentweapon(); str_valid_weapon = player getcurrentweapon();
if ( str_valid_weapon == "blundergat_zm" || str_valid_weapon == "blundergat_upgraded_zm" ) if ( str_valid_weapon == "blundergat_zm" || str_valid_weapon == "blundergat_upgraded_zm" )
{ {
player maps\mp\zombies\_zm_score::minus_to_player_score( t_upgrade.cost ); player maps\mp\zombies\_zm_score::minus_to_player_score( t_upgrade.cost );

View File

@ -85,6 +85,7 @@ main()
enemy_location_override( zombie, enemy ) enemy_location_override( zombie, enemy )
{ {
location = enemy.origin; location = enemy.origin;
if ( isDefined( self.reroute ) && self.reroute ) if ( isDefined( self.reroute ) && self.reroute )
{ {
if ( isDefined( self.reroute_origin ) ) if ( isDefined( self.reroute_origin ) )
@ -92,6 +93,7 @@ enemy_location_override( zombie, enemy )
location = self.reroute_origin; location = self.reroute_origin;
} }
} }
return location; return location;
} }
@ -131,6 +133,7 @@ builddynamicwallbuy( location, weaponname )
if ( isDefined( wallbuy.script_location ) && wallbuy.script_location == location ) if ( isDefined( wallbuy.script_location ) && wallbuy.script_location == location )
{ {
spawned_wallbuy = undefined; spawned_wallbuy = undefined;
for ( i = 0; i < level._spawned_wallbuys.size; i++ ) for ( i = 0; i < level._spawned_wallbuys.size; i++ )
{ {
if ( level._spawned_wallbuys[ i ].target == wallbuy.targetname ) if ( level._spawned_wallbuys[ i ].target == wallbuy.targetname )
@ -157,6 +160,7 @@ builddynamicwallbuy( location, weaponname )
} }
struct = spawnStruct(); struct = spawnStruct();
struct.target = wallbuy.targetname; struct.target = wallbuy.targetname;
level._spawned_wallbuys[level._spawned_wallbuys.size] = struct; level._spawned_wallbuys[level._spawned_wallbuys.size] = struct;
@ -274,6 +278,7 @@ disable_tunnels()
// player spawns // player spawns
invalid_zones = array("zone_start", "zone_tunnels_center", "zone_tunnels_north", "zone_tunnels_south"); invalid_zones = array("zone_start", "zone_tunnels_center", "zone_tunnels_north", "zone_tunnels_south");
spawn_points = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype(); spawn_points = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype();
foreach(spawn_point in spawn_points) foreach(spawn_point in spawn_points)
{ {
if(isinarray(invalid_zones, spawn_point.script_noteworthy)) if(isinarray(invalid_zones, spawn_point.script_noteworthy))

View File

@ -26,6 +26,7 @@ ows_targets_start()
} }
players = get_players(); players = get_players();
if ( level.targets_hit < ( 20 * players.size ) ) if ( level.targets_hit < ( 20 * players.size ) )
{ {
flag_set( "sq_ows_target_missed" ); flag_set( "sq_ows_target_missed" );
@ -45,6 +46,7 @@ ows_targets_start()
ows_targets_spawn( a_spawn_spots ) ows_targets_spawn( a_spawn_spots )
{ {
i = 0; i = 0;
foreach ( s_spot in a_spawn_spots ) foreach ( s_spot in a_spawn_spots )
{ {
m_target = spawn( "script_model", s_spot.origin ); m_target = spawn( "script_model", s_spot.origin );

View File

@ -72,6 +72,7 @@ stage_logic_richtofen()
flag_clear( "sq_tpo_time_bomb_in_valid_location" ); flag_clear( "sq_tpo_time_bomb_in_valid_location" );
b_time_bomb_in_valid_location = 0; b_time_bomb_in_valid_location = 0;
while (1) while (1)
{ {
if ( isdefined( level.time_bomb_save_data ) && isdefined( level.time_bomb_save_data.time_bomb_model ) ) if ( isdefined( level.time_bomb_save_data ) && isdefined( level.time_bomb_save_data.time_bomb_model ) )
@ -136,6 +137,7 @@ special_round_end()
scripts\zm\replaced\_zm_weap_time_bomb::time_bomb_detonation(); scripts\zm\replaced\_zm_weap_time_bomb::time_bomb_detonation();
a_players = get_players(); a_players = get_players();
foreach ( player in a_players ) foreach ( player in a_players )
{ {
vsmgr_deactivate( "visionset", "cheat_bw", player ); vsmgr_deactivate( "visionset", "cheat_bw", player );

View File

@ -148,27 +148,33 @@ squashed_death_init( kill_if_falling )
insta_kill_player( perks_can_respawn_player, kill_if_falling ) insta_kill_player( perks_can_respawn_player, kill_if_falling )
{ {
self endon( "disconnect" ); self endon( "disconnect" );
if ( isDefined( perks_can_respawn_player ) && perks_can_respawn_player == 0 ) if ( isDefined( perks_can_respawn_player ) && perks_can_respawn_player == 0 )
{ {
if ( self hasperk( "specialty_quickrevive" ) ) if ( self hasperk( "specialty_quickrevive" ) )
{ {
self unsetperk( "specialty_quickrevive" ); self unsetperk( "specialty_quickrevive" );
} }
if ( self hasperk( "specialty_finalstand" ) ) if ( self hasperk( "specialty_finalstand" ) )
{ {
self unsetperk( "specialty_finalstand" ); self unsetperk( "specialty_finalstand" );
} }
} }
self maps\mp\zombies\_zm_buildables::player_return_piece_to_original_spawn(); self maps\mp\zombies\_zm_buildables::player_return_piece_to_original_spawn();
if ( isDefined( self.insta_killed ) && self.insta_killed ) if ( isDefined( self.insta_killed ) && self.insta_killed )
{ {
return; return;
} }
if ( isDefined( self.ignore_insta_kill ) ) if ( isDefined( self.ignore_insta_kill ) )
{ {
self.disable_chugabud_corpse = 1; self.disable_chugabud_corpse = 1;
return; return;
} }
if ( self hasperk( "specialty_finalstand" ) ) if ( self hasperk( "specialty_finalstand" ) )
{ {
self.ignore_insta_kill = 1; self.ignore_insta_kill = 1;
@ -176,6 +182,7 @@ insta_kill_player( perks_can_respawn_player, kill_if_falling )
self dodamage( self.health + 1000, ( 0, 0, 1 ) ); self dodamage( self.health + 1000, ( 0, 0, 1 ) );
return; return;
} }
if ( !isDefined( kill_if_falling ) || kill_if_falling == 0 ) if ( !isDefined( kill_if_falling ) || kill_if_falling == 0 )
{ {
if ( !self isonground() ) if ( !self isonground() )
@ -183,16 +190,20 @@ insta_kill_player( perks_can_respawn_player, kill_if_falling )
return; return;
} }
} }
if ( is_player_killable( self ) ) if ( is_player_killable( self ) )
{ {
self.insta_killed = 1; self.insta_killed = 1;
in_last_stand = 0; in_last_stand = 0;
self notify( "chugabud_effects_cleanup" ); self notify( "chugabud_effects_cleanup" );
if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() )
{ {
in_last_stand = 1; in_last_stand = 1;
} }
self thread blood_splat(); self thread blood_splat();
if ( getnumconnectedplayers() == 1 ) if ( getnumconnectedplayers() == 1 )
{ {
if ( isDefined( self.solo_lives_given ) && self.solo_lives_given < 3 ) if ( isDefined( self.solo_lives_given ) && self.solo_lives_given < 3 )
@ -201,15 +212,18 @@ insta_kill_player( perks_can_respawn_player, kill_if_falling )
points = getstruct( "zone_green_start", "script_noteworthy" ); points = getstruct( "zone_green_start", "script_noteworthy" );
spawn_points = getstructarray( points.target, "targetname" ); spawn_points = getstructarray( points.target, "targetname" );
point = spawn_points[ 0 ]; point = spawn_points[ 0 ];
if ( in_last_stand == 0 ) if ( in_last_stand == 0 )
{ {
self dodamage( self.health + 1000, ( 0, 0, 1 ) ); self dodamage( self.health + 1000, ( 0, 0, 1 ) );
} }
wait 0.5; wait 0.5;
self freezecontrols( 1 ); self freezecontrols( 1 );
wait 0.25; wait 0.25;
self setorigin( point.origin + vectorScale( ( 0, 0, 1 ), 20 ) ); self setorigin( point.origin + vectorScale( ( 0, 0, 1 ), 20 ) );
self.angles = point.angles; self.angles = point.angles;
if ( in_last_stand ) if ( in_last_stand )
{ {
flag_set( "instant_revive" ); flag_set( "instant_revive" );
@ -224,6 +238,7 @@ insta_kill_player( perks_can_respawn_player, kill_if_falling )
self.solo_respawn = 0; self.solo_respawn = 0;
self.lives--; self.lives--;
} }
self freezecontrols( 0 ); self freezecontrols( 0 );
self.insta_killed = 0; self.insta_killed = 0;
} }
@ -238,6 +253,7 @@ insta_kill_player( perks_can_respawn_player, kill_if_falling )
wait_network_frame(); wait_network_frame();
self.bleedout_time = 0; self.bleedout_time = 0;
} }
self.insta_killed = 0; self.insta_killed = 0;
} }
} }
@ -291,6 +307,7 @@ escape_pod()
level notify( "escape_pod_falling_begin" ); level notify( "escape_pod_falling_begin" );
players_in_escape_pod = escape_pod_trigger escape_pod_get_all_alive_players_inside(); players_in_escape_pod = escape_pod_trigger escape_pod_get_all_alive_players_inside();
foreach ( player in players_in_escape_pod ) foreach ( player in players_in_escape_pod )
{ {
player.riding_escape_pod = 1; player.riding_escape_pod = 1;

View File

@ -484,6 +484,7 @@ watch_for_elevator_during_faller_spawn()
flag_wait( "power_on" ); flag_wait( "power_on" );
elevator_bodies = []; elevator_bodies = [];
foreach ( elevator in level.elevators ) foreach ( elevator in level.elevators )
{ {
elevator_bodies[elevator_bodies.size] = elevator.body; elevator_bodies[elevator_bodies.size] = elevator.body;

View File

@ -178,6 +178,7 @@ sq_give_all_perks()
level thread scripts\zm\replaced\_zm_sq::sq_complete_time_hud(); level thread scripts\zm\replaced\_zm_sq::sq_complete_time_hud();
players = getplayers(); players = getplayers();
foreach ( player in players ) foreach ( player in players )
{ {
player thread sq_give_player_perks( perks, v_fireball_start_loc, n_fireball_exploder ); player thread sq_give_player_perks( perks, v_fireball_start_loc, n_fireball_exploder );

View File

@ -62,6 +62,7 @@ sq_atd_watch_elevator( str_flag )
} }
a_dragon_icons = getentarray( "elevator_dragon_icon", "targetname" ); a_dragon_icons = getentarray( "elevator_dragon_icon", "targetname" );
foreach ( m_icon in a_dragon_icons ) foreach ( m_icon in a_dragon_icons )
{ {
if ( issubstr( self.targetname, m_icon.script_noteworthy ) ) if ( issubstr( self.targetname, m_icon.script_noteworthy ) )

View File

@ -120,6 +120,7 @@ is_springpad_in_place( m_springpad, is_generator )
if ( is_generator ) if ( is_generator )
{ {
wait 0.1; wait 0.1;
if ( pts_should_springpad_create_trigs( s_spot ) ) if ( pts_should_springpad_create_trigs( s_spot ) )
{ {
thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.buildablespringpad.stub ); thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.buildablespringpad.stub );
@ -322,14 +323,17 @@ pts_springpad_fling( str_spot_name )
str_anim1 = "dc"; str_anim1 = "dc";
str_anim2 = "cd"; str_anim2 = "cd";
break; break;
case "lion_pair_2": case "lion_pair_2":
str_anim1 = "ab"; str_anim1 = "ab";
str_anim2 = "ba"; str_anim2 = "ba";
break; break;
case "lion_pair_3": case "lion_pair_3":
str_anim1 = "cd"; str_anim1 = "cd";
str_anim2 = "dc"; str_anim2 = "dc";
break; break;
case "lion_pair_4": case "lion_pair_4":
str_anim1 = "ba"; str_anim1 = "ba";
str_anim2 = "ab"; str_anim2 = "ab";

View File

@ -77,6 +77,7 @@ stage_two()
t_plane_fly_afterlife trigger_on(); t_plane_fly_afterlife trigger_on();
players = get_players(); players = get_players();
foreach ( player in players ) foreach ( player in players )
{ {
if ( is_player_valid( player ) ) if ( is_player_valid( player ) )

View File

@ -70,6 +70,7 @@ sndmeleewpn_isstaff( weapon )
case "staff_air_melee_zm": case "staff_air_melee_zm":
isstaff = 1; isstaff = 1;
break; break;
default: default:
isstaff = 0; isstaff = 0;
} }
@ -120,6 +121,7 @@ tomb_can_track_ammo_custom( weap )
case "alcatraz_shield_zm": case "alcatraz_shield_zm":
case "tomb_shield_zm": case "tomb_shield_zm":
return false; return false;
default: default:
if ( is_melee_weapon( weap ) || is_zombie_perk_bottle( weap ) || is_placeable_mine( weap ) || is_equipment( weap ) || issubstr( weap, "knife_ballistic_" ) || getsubstr( weap, 0, 3 ) == "gl_" || weaponfuellife( weap ) > 0 || weap == level.revive_tool ) if ( is_melee_weapon( weap ) || is_zombie_perk_bottle( weap ) || is_placeable_mine( weap ) || is_equipment( weap ) || issubstr( weap, "knife_ballistic_" ) || getsubstr( weap, 0, 3 ) == "gl_" || weaponfuellife( weap ) > 0 || weap == level.revive_tool )
return false; return false;

View File

@ -78,12 +78,14 @@ reward_random_perk( player, s_stat )
} }
perk = player.tomb_reward_perk; perk = player.tomb_reward_perk;
if (!isDefined(perk)) if (!isDefined(perk))
{ {
return 0; return 0;
} }
model = maps\mp\zombies\_zm_perk_random::get_perk_weapon_model(perk); model = maps\mp\zombies\_zm_perk_random::get_perk_weapon_model(perk);
if (!isDefined(model)) if (!isDefined(model))
{ {
return 0; return 0;
@ -95,15 +97,18 @@ reward_random_perk( player, s_stat )
m_reward playsound( "zmb_spawn_powerup" ); m_reward playsound( "zmb_spawn_powerup" );
m_reward playloopsound( "zmb_spawn_powerup_loop", 0.5 ); m_reward playloopsound( "zmb_spawn_powerup_loop", 0.5 );
wait_network_frame(); wait_network_frame();
if ( !maps\mp\zombies\_zm_challenges::reward_rise_and_grab( m_reward, 50, 2, 2, 10 ) ) if ( !maps\mp\zombies\_zm_challenges::reward_rise_and_grab( m_reward, 50, 2, 2, 10 ) )
{ {
return 0; return 0;
} }
if ( player hasperk( perk ) || player maps\mp\zombies\_zm_perks::has_perk_paused( perk ) ) if ( player hasperk( perk ) || player maps\mp\zombies\_zm_perks::has_perk_paused( perk ) )
{ {
m_reward thread maps\mp\zm_tomb_challenges::bottle_reject_sink( player ); m_reward thread maps\mp\zm_tomb_challenges::bottle_reject_sink( player );
return 0; return 0;
} }
m_reward stoploopsound( 0.1 ); m_reward stoploopsound( 0.1 );
player playsound( "zmb_powerup_grabbed" ); player playsound( "zmb_powerup_grabbed" );
m_reward thread maps\mp\zombies\_zm_perks::vending_trigger_post_think( player, perk ); m_reward thread maps\mp\zombies\_zm_perks::vending_trigger_post_think( player, perk );
@ -114,9 +119,11 @@ reward_random_perk( player, s_stat )
get_random_perk() get_random_perk()
{ {
perks = []; perks = [];
for (i = 0; i < level._random_perk_machine_perk_list.size; i++) for (i = 0; i < level._random_perk_machine_perk_list.size; i++)
{ {
perk = level._random_perk_machine_perk_list[ i ]; perk = level._random_perk_machine_perk_list[ i ];
if ( isDefined( self.perk_purchased ) && self.perk_purchased == perk ) if ( isDefined( self.perk_purchased ) && self.perk_purchased == perk )
{ {
continue; continue;
@ -129,6 +136,7 @@ get_random_perk()
} }
} }
} }
if ( perks.size > 0 ) if ( perks.size > 0 )
{ {
perks = array_randomize( perks ); perks = array_randomize( perks );

View File

@ -242,6 +242,7 @@ quadrotor_control_thread()
} }
str_vehicle = "heli_quadrotor_zm"; str_vehicle = "heli_quadrotor_zm";
if ( flag( "ee_maxis_drone_retrieved" ) ) if ( flag( "ee_maxis_drone_retrieved" ) )
{ {
str_vehicle = "heli_quadrotor_upgraded_zm"; str_vehicle = "heli_quadrotor_upgraded_zm";
@ -331,9 +332,11 @@ quadrotor_set_available()
case "zone_nml_9": case "zone_nml_9":
setclientfield( "cooldown_steam", 1 ); setclientfield( "cooldown_steam", 1 );
break; break;
case "zone_bunker_5a": case "zone_bunker_5a":
setclientfield( "cooldown_steam", 2 ); setclientfield( "cooldown_steam", 2 );
break; break;
case "zone_village_1": case "zone_village_1":
setclientfield( "cooldown_steam", 3 ); setclientfield( "cooldown_steam", 3 );
break; break;

View File

@ -40,12 +40,15 @@ create_robot_head_trigger( unitrigger_stub )
case "fire": case "fire":
m_sign showpart( "j_fire" ); m_sign showpart( "j_fire" );
break; break;
case "water": case "water":
m_sign showpart( "j_ice" ); m_sign showpart( "j_ice" );
break; break;
case "lightning": case "lightning":
m_sign showpart( "j_lightning" ); m_sign showpart( "j_lightning" );
break; break;
case "air": case "air":
m_sign showpart( "j_wind" ); m_sign showpart( "j_wind" );
break; break;

View File

@ -28,6 +28,7 @@ stage_logic()
} }
a_zombies = getaispeciesarray( level.zombie_team, "all" ); a_zombies = getaispeciesarray( level.zombie_team, "all" );
foreach ( zombie in a_zombies ) foreach ( zombie in a_zombies )
{ {
if ( is_point_in_chamber( zombie.origin ) && !is_true( zombie.is_mechz ) && is_true( zombie.has_legs ) && is_true( zombie.completed_emerging_into_playable_area ) ) if ( is_point_in_chamber( zombie.origin ) && !is_true( zombie.is_mechz ) && is_true( zombie.has_legs ) && is_true( zombie.completed_emerging_into_playable_area ) )
@ -49,6 +50,7 @@ stage_logic()
} }
players = get_players(); players = get_players();
foreach ( player in players ) foreach ( player in players )
{ {
if ( is_player_valid( player ) ) if ( is_player_valid( player ) )

View File

@ -73,6 +73,7 @@ robot_cycling()
{ {
do do
random_number = randomint( 3 ); random_number = randomint( 3 );
while ( random_number == last_robot ); while ( random_number == last_robot );
} }

View File

@ -380,6 +380,7 @@ insert_staff_hint_charger(player, enum)
self.playertrigger[num] endon("death"); self.playertrigger[num] endon("death");
element = ""; element = "";
if (enum == 1) if (enum == 1)
{ {
element = "Fire"; element = "Fire";
@ -564,6 +565,7 @@ run_gramophone_teleporter( str_vinyl_record )
} }
arrayremovevalue(level.gramophone_teleporter_triggers, t_gramophone); arrayremovevalue(level.gramophone_teleporter_triggers, t_gramophone);
foreach (trigger in level.gramophone_teleporter_triggers) foreach (trigger in level.gramophone_teleporter_triggers)
{ {
if (trigger != t_gramophone) if (trigger != t_gramophone)

View File

@ -159,6 +159,7 @@ busschedulethink()
zonestocheck[zonestocheck.size] = "zone_amb_bridge"; zonestocheck[zonestocheck.size] = "zone_amb_bridge";
zonestocheck[zonestocheck.size] = "zone_trans_2b"; zonestocheck[zonestocheck.size] = "zone_trans_2b";
break; break;
case "zone_gas": case "zone_gas":
zonestocheck[zonestocheck.size] = "zone_trans_2"; zonestocheck[zonestocheck.size] = "zone_trans_2";
zonestocheck[zonestocheck.size] = "zone_amb_tunnel"; zonestocheck[zonestocheck.size] = "zone_amb_tunnel";
@ -171,6 +172,7 @@ busschedulethink()
zonestocheck[zonestocheck.size] = "zone_roadside_east"; zonestocheck[zonestocheck.size] = "zone_roadside_east";
zonestocheck[zonestocheck.size] = "zone_trans_3"; zonestocheck[zonestocheck.size] = "zone_trans_3";
break; break;
case "zone_far": case "zone_far":
zonestocheck[zonestocheck.size] = "zone_amb_forest"; zonestocheck[zonestocheck.size] = "zone_amb_forest";
zonestocheck[zonestocheck.size] = "zone_far_ext"; zonestocheck[zonestocheck.size] = "zone_far_ext";
@ -179,6 +181,7 @@ busschedulethink()
zonestocheck[zonestocheck.size] = "zone_trans_5"; zonestocheck[zonestocheck.size] = "zone_trans_5";
zonestocheck[zonestocheck.size] = "zone_trans_6"; zonestocheck[zonestocheck.size] = "zone_trans_6";
break; break;
case "zone_pow": case "zone_pow":
zonestocheck[zonestocheck.size] = "zone_trans_6"; zonestocheck[zonestocheck.size] = "zone_trans_6";
zonestocheck[zonestocheck.size] = "zone_amb_cornfield"; zonestocheck[zonestocheck.size] = "zone_amb_cornfield";
@ -188,6 +191,7 @@ busschedulethink()
zonestocheck[zonestocheck.size] = "zone_pcr"; zonestocheck[zonestocheck.size] = "zone_pcr";
zonestocheck[zonestocheck.size] = "zone_pow_warehouse"; zonestocheck[zonestocheck.size] = "zone_pow_warehouse";
break; break;
case "zone_town_north": case "zone_town_north":
zonestocheck[zonestocheck.size] = "zone_trans_8"; zonestocheck[zonestocheck.size] = "zone_trans_8";
zonestocheck[zonestocheck.size] = "zone_amb_power2town"; zonestocheck[zonestocheck.size] = "zone_amb_power2town";
@ -309,6 +313,7 @@ busshowleavinghud( time )
while (time > 0) while (time > 0)
{ {
players = get_players(); players = get_players();
foreach (player in players) foreach (player in players)
{ {
if (!isDefined(player.busleavehud)) if (!isDefined(player.busleavehud))
@ -345,6 +350,7 @@ busshowleavinghud( time )
} }
players = get_players(); players = get_players();
foreach (player in players) foreach (player in players)
{ {
if (isDefined(player.busleavehud)) if (isDefined(player.busleavehud))
@ -360,6 +366,7 @@ busshowleavinghud_destroy_on_depart_early()
self waittill("depart_early"); self waittill("depart_early");
players = get_players(); players = get_players();
foreach (player in players) foreach (player in players)
{ {
if (isDefined(player.busleavehud)) if (isDefined(player.busleavehud))
@ -544,6 +551,7 @@ buspathblockersetup()
bus_buyable_weapon_unitrigger_setup(trig) bus_buyable_weapon_unitrigger_setup(trig)
{ {
unitrigger = undefined; unitrigger = undefined;
while (!isDefined(unitrigger)) while (!isDefined(unitrigger))
{ {
for(i = 0; i < level._unitriggers.trigger_stubs.size; i++) for(i = 0; i < level._unitriggers.trigger_stubs.size; i++)

View File

@ -39,6 +39,7 @@ main()
enemy_location_override( zombie, enemy ) enemy_location_override( zombie, enemy )
{ {
location = enemy.origin; location = enemy.origin;
if ( is_true( self.reroute ) ) if ( is_true( self.reroute ) )
{ {
if ( isDefined( self.reroute_origin ) ) if ( isDefined( self.reroute_origin ) )
@ -46,12 +47,14 @@ enemy_location_override( zombie, enemy )
location = self.reroute_origin; location = self.reroute_origin;
} }
} }
return location; return location;
} }
remove_lava_collision() remove_lava_collision()
{ {
ents = getEntArray( "script_model", "classname"); ents = getEntArray( "script_model", "classname");
foreach (ent in ents) foreach (ent in ents)
{ {
if (IsDefined(ent.model)) if (IsDefined(ent.model))
@ -97,6 +100,7 @@ open_electric_doors_on_door_opened()
level.local_doors_stay_open = 1; level.local_doors_stay_open = 1;
door = undefined; door = undefined;
zombie_doors = getentarray( "zombie_door", "targetname" ); zombie_doors = getentarray( "zombie_door", "targetname" );
foreach ( door in zombie_doors ) foreach ( door in zombie_doors )
{ {
if(door.target == "busstop_doors") if(door.target == "busstop_doors")
@ -108,6 +112,7 @@ open_electric_doors_on_door_opened()
door waittill( "door_opened" ); door waittill( "door_opened" );
zombie_doors = getentarray( "zombie_door", "targetname" ); zombie_doors = getentarray( "zombie_door", "targetname" );
foreach ( door in zombie_doors ) foreach ( door in zombie_doors )
{ {
if ( isDefined( door.script_noteworthy ) && door.script_noteworthy == "local_electric_door" ) if ( isDefined( door.script_noteworthy ) && door.script_noteworthy == "local_electric_door" )

View File

@ -125,10 +125,12 @@ maxis_sidequest_c()
flag_waitopen( "power_on" ); flag_waitopen( "power_on" );
level endon( "power_on" ); level endon( "power_on" );
level.sq_progress["maxis"]["C_screecher_dark"] = 0; level.sq_progress["maxis"]["C_screecher_dark"] = 0;
for(i = 0; i < 8; i++) for(i = 0; i < 8; i++)
{ {
level.sq_progress["maxis"]["C_screecher_" + i] = undefined; level.sq_progress["maxis"]["C_screecher_" + i] = undefined;
} }
level.sq_progress["maxis"]["C_complete"] = 0; level.sq_progress["maxis"]["C_complete"] = 0;
turbine_1_talked = 0; turbine_1_talked = 0;
turbine_2_talked = 0; turbine_2_talked = 0;
@ -151,6 +153,7 @@ maxis_sidequest_c()
player.buildableturbine thread turbine_watch_cleanup(); player.buildableturbine thread turbine_watch_cleanup();
zone_used = 0; zone_used = 0;
for(i = 0; i < 8; i++) for(i = 0; i < 8; i++)
{ {
if ( isdefined( level.sq_progress["maxis"]["C_screecher_" + i] ) && zone == level.sq_progress["maxis"]["C_screecher_" + i] ) if ( isdefined( level.sq_progress["maxis"]["C_screecher_" + i] ) && zone == level.sq_progress["maxis"]["C_screecher_" + i] )
@ -283,6 +286,7 @@ droppowerup( story )
level thread scripts\zm\replaced\_zm_sq::sq_complete_time_hud(); level thread scripts\zm\replaced\_zm_sq::sq_complete_time_hud();
players = get_players(); players = get_players();
foreach ( player in players ) foreach ( player in players )
{ {
if ( is_player_valid( player ) ) if ( is_player_valid( player ) )

View File

@ -36,6 +36,7 @@ main()
// electric doors showing hintstring // electric doors showing hintstring
zombie_doors = getentarray( "zombie_door", "targetname" ); zombie_doors = getentarray( "zombie_door", "targetname" );
foreach ( door in zombie_doors ) foreach ( door in zombie_doors )
{ {
if ( isDefined( door.script_noteworthy ) && door.script_noteworthy == "local_electric_door" ) if ( isDefined( door.script_noteworthy ) && door.script_noteworthy == "local_electric_door" )
@ -48,6 +49,7 @@ main()
enemy_location_override( zombie, enemy ) enemy_location_override( zombie, enemy )
{ {
location = enemy.origin; location = enemy.origin;
if ( is_true( self.reroute ) ) if ( is_true( self.reroute ) )
{ {
if ( isDefined( self.reroute_origin ) ) if ( isDefined( self.reroute_origin ) )
@ -55,12 +57,14 @@ enemy_location_override( zombie, enemy )
location = self.reroute_origin; location = self.reroute_origin;
} }
} }
return location; return location;
} }
remove_lava_collision() remove_lava_collision()
{ {
ents = getEntArray( "script_model", "classname"); ents = getEntArray( "script_model", "classname");
foreach (ent in ents) foreach (ent in ents)
{ {
if (IsDefined(ent.model)) if (IsDefined(ent.model))
@ -106,6 +110,7 @@ open_electric_doors_on_door_opened()
level.local_doors_stay_open = 1; level.local_doors_stay_open = 1;
door = undefined; door = undefined;
zombie_doors = getentarray( "zombie_door", "targetname" ); zombie_doors = getentarray( "zombie_door", "targetname" );
foreach ( door in zombie_doors ) foreach ( door in zombie_doors )
{ {
if(door.target == "busstop_doors") if(door.target == "busstop_doors")
@ -117,6 +122,7 @@ open_electric_doors_on_door_opened()
door waittill( "door_opened" ); door waittill( "door_opened" );
zombie_doors = getentarray( "zombie_door", "targetname" ); zombie_doors = getentarray( "zombie_door", "targetname" );
foreach ( door in zombie_doors ) foreach ( door in zombie_doors )
{ {
if ( isDefined( door.script_noteworthy ) && door.script_noteworthy == "local_electric_door" ) if ( isDefined( door.script_noteworthy ) && door.script_noteworthy == "local_electric_door" )

View File

@ -57,6 +57,7 @@ item_meat_on_spawn_retrieve_trigger( watcher, player, weaponname )
} }
players = get_players(); players = get_players();
foreach (other_player in players) foreach (other_player in players)
{ {
other_player thread maps\mp\gametypes_zm\zgrief::meat_stink_player_cleanup(); other_player thread maps\mp\gametypes_zm\zgrief::meat_stink_player_cleanup();

View File

@ -351,14 +351,17 @@ set_grief_vars()
{ {
level.zombie_weapons["knife_ballistic_zm"].is_in_box = 1; level.zombie_weapons["knife_ballistic_zm"].is_in_box = 1;
} }
if(isDefined(level.zombie_weapons["ray_gun_zm"])) if(isDefined(level.zombie_weapons["ray_gun_zm"]))
{ {
level.zombie_weapons["ray_gun_zm"].is_in_box = 1; level.zombie_weapons["ray_gun_zm"].is_in_box = 1;
} }
if(isDefined(level.zombie_weapons["raygun_mark2_zm"])) if(isDefined(level.zombie_weapons["raygun_mark2_zm"]))
{ {
level.zombie_weapons["raygun_mark2_zm"].is_in_box = 1; level.zombie_weapons["raygun_mark2_zm"].is_in_box = 1;
} }
if(isDefined(level.zombie_weapons["willy_pete_zm"])) if(isDefined(level.zombie_weapons["willy_pete_zm"]))
{ {
register_tactical_grenade_for_level( "willy_pete_zm" ); register_tactical_grenade_for_level( "willy_pete_zm" );
@ -504,6 +507,7 @@ powerup_hud_destroy_on_intermission()
powerup_hud_move() powerup_hud_move()
{ {
offset_x = 37; offset_x = 37;
if((level.active_powerup_hud_array[self.team].size % 2) == 0) if((level.active_powerup_hud_array[self.team].size % 2) == 0)
{ {
offset_x /= 2; offset_x /= 2;
@ -604,6 +608,7 @@ grief_onplayerdisconnect(disconnecting_player)
if(count <= 0) if(count <= 0)
{ {
encounters_team = "A"; encounters_team = "A";
if(getOtherTeam(disconnecting_player.team) == "allies") if(getOtherTeam(disconnecting_player.team) == "allies")
{ {
encounters_team = "B"; encounters_team = "B";
@ -815,6 +820,7 @@ add_grief_downed_score()
add_grief_bleedout_score() add_grief_bleedout_score()
{ {
players = get_players(); players = get_players();
foreach(player in players) foreach(player in players)
{ {
if(is_player_valid(player) && player.team != self.team) if(is_player_valid(player) && player.team != self.team)
@ -938,6 +944,7 @@ headstomp_watcher()
} }
players = get_players(); players = get_players();
foreach(player in players) foreach(player in players)
{ {
player_top_origin = player getCentroid(); player_top_origin = player getCentroid();
@ -1002,6 +1009,7 @@ round_start_wait(time, initial)
flag_wait( "start_zombie_round_logic" ); flag_wait( "start_zombie_round_logic" );
players = get_players(); players = get_players();
foreach(player in players) foreach(player in players)
{ {
player.hostmigrationcontrolsfrozen = 1; // fixes players being able to move after initial_blackscreen_passed player.hostmigrationcontrolsfrozen = 1; // fixes players being able to move after initial_blackscreen_passed
@ -1014,6 +1022,7 @@ round_start_wait(time, initial)
else else
{ {
players = get_players(); players = get_players();
foreach(player in players) foreach(player in players)
{ {
ground_origin = groundpos(player.origin); ground_origin = groundpos(player.origin);
@ -1042,6 +1051,7 @@ round_start_wait(time, initial)
level thread zombie_spawn_wait(zombie_spawn_time); level thread zombie_spawn_wait(zombie_spawn_time);
text = "MATCH BEGINS IN"; text = "MATCH BEGINS IN";
if(level.scr_zm_ui_gametype_obj == "zsnr") if(level.scr_zm_ui_gametype_obj == "zsnr")
{ {
text = "ROUND " + level.snr_round_number + " BEGINS IN"; text = "ROUND " + level.snr_round_number + " BEGINS IN";
@ -1054,6 +1064,7 @@ round_start_wait(time, initial)
countdown_hud scripts\zm\replaced\_zm::countdown_hud_destroy(); countdown_hud scripts\zm\replaced\_zm::countdown_hud_destroy();
players = get_players(); players = get_players();
foreach(player in players) foreach(player in players)
{ {
if(initial) if(initial)
@ -1075,6 +1086,7 @@ freeze_hotjoin_players()
while(1) while(1)
{ {
players = get_players(); players = get_players();
foreach(player in players) foreach(player in players)
{ {
if(!is_true(player.hostmigrationcontrolsfrozen)) if(!is_true(player.hostmigrationcontrolsfrozen))
@ -1340,6 +1352,7 @@ grief_intro_msg()
get_gamemode_display_name(gamemode = level.scr_zm_ui_gametype_obj) get_gamemode_display_name(gamemode = level.scr_zm_ui_gametype_obj)
{ {
name = ""; name = "";
if(gamemode == "zgrief") if(gamemode == "zgrief")
{ {
name = "Grief"; name = "Grief";
@ -1534,6 +1547,7 @@ custom_end_screen()
{ {
players = get_players(); players = get_players();
i = 0; i = 0;
while ( i < players.size ) while ( i < players.size )
{ {
players[ i ].game_over_hud = newclienthudelem( players[ i ] ); players[ i ].game_over_hud = newclienthudelem( players[ i ] );
@ -1550,11 +1564,13 @@ custom_end_screen()
players[ i ].game_over_hud settext( &"ZOMBIE_GAME_OVER" ); players[ i ].game_over_hud settext( &"ZOMBIE_GAME_OVER" );
players[ i ].game_over_hud fadeovertime( 1 ); players[ i ].game_over_hud fadeovertime( 1 );
players[ i ].game_over_hud.alpha = 1; players[ i ].game_over_hud.alpha = 1;
if ( players[ i ] issplitscreen() ) if ( players[ i ] issplitscreen() )
{ {
players[ i ].game_over_hud.fontscale = 2; players[ i ].game_over_hud.fontscale = 2;
players[ i ].game_over_hud.y += 40; players[ i ].game_over_hud.y += 40;
} }
players[ i ].survived_hud = newclienthudelem( players[ i ] ); players[ i ].survived_hud = newclienthudelem( players[ i ] );
players[ i ].survived_hud.alignx = "center"; players[ i ].survived_hud.alignx = "center";
players[ i ].survived_hud.aligny = "middle"; players[ i ].survived_hud.aligny = "middle";
@ -1566,11 +1582,13 @@ custom_end_screen()
players[ i ].survived_hud.alpha = 0; players[ i ].survived_hud.alpha = 0;
players[ i ].survived_hud.color = ( 1, 1, 1 ); players[ i ].survived_hud.color = ( 1, 1, 1 );
players[ i ].survived_hud.hidewheninmenu = 1; players[ i ].survived_hud.hidewheninmenu = 1;
if ( players[ i ] issplitscreen() ) if ( players[ i ] issplitscreen() )
{ {
players[ i ].survived_hud.fontscale = 1.5; players[ i ].survived_hud.fontscale = 1.5;
players[ i ].survived_hud.y += 40; players[ i ].survived_hud.y += 40;
} }
winner_text = "YOU WIN!"; winner_text = "YOU WIN!";
loser_text = "YOU LOSE!"; loser_text = "YOU LOSE!";
@ -1589,6 +1607,7 @@ custom_end_screen()
players[ i ].survived_hud settext( loser_text ); players[ i ].survived_hud settext( loser_text );
} }
} }
players[ i ].survived_hud fadeovertime( 1 ); players[ i ].survived_hud fadeovertime( 1 );
players[ i ].survived_hud.alpha = 1; players[ i ].survived_hud.alpha = 1;
i++; i++;
@ -1598,12 +1617,14 @@ custom_end_screen()
game_module_player_damage_callback( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime ) game_module_player_damage_callback( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime )
{ {
self.last_damage_from_zombie_or_player = 0; self.last_damage_from_zombie_or_player = 0;
if ( isDefined( eattacker ) ) if ( isDefined( eattacker ) )
{ {
if ( isplayer( eattacker ) && eattacker == self ) if ( isplayer( eattacker ) && eattacker == self )
{ {
return; return;
} }
if ( isDefined( eattacker.is_zombie ) || eattacker.is_zombie && isplayer( eattacker ) ) if ( isDefined( eattacker.is_zombie ) || eattacker.is_zombie && isplayer( eattacker ) )
{ {
self.last_damage_from_zombie_or_player = 1; self.last_damage_from_zombie_or_player = 1;
@ -1659,6 +1680,7 @@ game_module_player_damage_callback( einflictor, eattacker, idamage, idflags, sme
} }
is_melee = false; is_melee = false;
if(isDefined(eattacker) && isplayer(eattacker) && eattacker != self && eattacker.team != self.team && (smeansofdeath == "MOD_MELEE" || issubstr(sweapon, "knife_ballistic"))) if(isDefined(eattacker) && isplayer(eattacker) && eattacker != self && eattacker.team != self.team && (smeansofdeath == "MOD_MELEE" || issubstr(sweapon, "knife_ballistic")))
{ {
is_melee = true; is_melee = true;
@ -1677,6 +1699,7 @@ game_module_player_damage_callback( einflictor, eattacker, idamage, idflags, sme
{ {
amount = 297.5; // 32 units amount = 297.5; // 32 units
} }
if (self getStance() == "crouch") if (self getStance() == "crouch")
{ {
amount = 215; // 21.33 units amount = 215; // 21.33 units
@ -1696,6 +1719,7 @@ game_module_player_damage_callback( einflictor, eattacker, idamage, idflags, sme
{ {
amount = 235; // 24 units amount = 235; // 24 units
} }
if (self getStance() == "crouch") if (self getStance() == "crouch")
{ {
amount = 172.5; // 16 units amount = 172.5; // 16 units
@ -1718,6 +1742,7 @@ game_module_player_damage_callback( einflictor, eattacker, idamage, idflags, sme
{ {
amount = 540; // 64 units amount = 540; // 64 units
} }
if (self getStance() == "crouch") if (self getStance() == "crouch")
{ {
amount = 377.5; // 42.66 units amount = 377.5; // 42.66 units
@ -1737,6 +1762,7 @@ game_module_player_damage_callback( einflictor, eattacker, idamage, idflags, sme
{ {
amount = 420; // 48 units amount = 420; // 48 units
} }
if (self getStance() == "crouch") if (self getStance() == "crouch")
{ {
amount = 297.5; // 32 units amount = 297.5; // 32 units
@ -1830,6 +1856,7 @@ do_game_mode_shellshock(is_melee = 0, is_upgraded = 0)
self endon( "disconnect" ); self endon( "disconnect" );
time = 0.5; time = 0.5;
if (is_melee) if (is_melee)
{ {
time = 0.75; time = 0.75;
@ -1921,10 +1948,12 @@ grief_laststand_weapon_save( einflictor, attacker, idamage, smeansofdeath, sweap
if (isDefined(self.grief_savedweapon_weaponsammo_clip[i])) if (isDefined(self.grief_savedweapon_weaponsammo_clip[i]))
{ {
clip_missing = weaponClipSize(self.grief_savedweapon_weapons[i]) - self.grief_savedweapon_weaponsammo_clip[i]; clip_missing = weaponClipSize(self.grief_savedweapon_weapons[i]) - self.grief_savedweapon_weaponsammo_clip[i];
if (clip_missing > self.grief_savedweapon_weaponsammo_stock[i]) if (clip_missing > self.grief_savedweapon_weaponsammo_stock[i])
{ {
clip_missing = self.grief_savedweapon_weaponsammo_stock[i]; clip_missing = self.grief_savedweapon_weaponsammo_stock[i];
} }
self.grief_savedweapon_weaponsammo_clip[i] += clip_missing; self.grief_savedweapon_weaponsammo_clip[i] += clip_missing;
self.grief_savedweapon_weaponsammo_stock[i] -= clip_missing; self.grief_savedweapon_weaponsammo_stock[i] -= clip_missing;
} }
@ -1932,10 +1961,12 @@ grief_laststand_weapon_save( einflictor, attacker, idamage, smeansofdeath, sweap
if (isDefined(self.grief_savedweapon_weaponsammo_clip_dualwield[i]) && weaponDualWieldWeaponName(self.grief_savedweapon_weapons[i]) != "none") if (isDefined(self.grief_savedweapon_weaponsammo_clip_dualwield[i]) && weaponDualWieldWeaponName(self.grief_savedweapon_weapons[i]) != "none")
{ {
clip_dualwield_missing = weaponClipSize(weaponDualWieldWeaponName(self.grief_savedweapon_weapons[i])) - self.grief_savedweapon_weaponsammo_clip_dualwield[i]; clip_dualwield_missing = weaponClipSize(weaponDualWieldWeaponName(self.grief_savedweapon_weapons[i])) - self.grief_savedweapon_weaponsammo_clip_dualwield[i];
if (clip_dualwield_missing > self.grief_savedweapon_weaponsammo_stock[i]) if (clip_dualwield_missing > self.grief_savedweapon_weaponsammo_stock[i])
{ {
clip_dualwield_missing = self.grief_savedweapon_weaponsammo_stock[i]; clip_dualwield_missing = self.grief_savedweapon_weaponsammo_stock[i];
} }
self.grief_savedweapon_weaponsammo_clip_dualwield[i] += clip_dualwield_missing; self.grief_savedweapon_weaponsammo_clip_dualwield[i] += clip_dualwield_missing;
self.grief_savedweapon_weaponsammo_stock[i] -= clip_dualwield_missing; self.grief_savedweapon_weaponsammo_stock[i] -= clip_dualwield_missing;
} }
@ -1943,10 +1974,12 @@ grief_laststand_weapon_save( einflictor, attacker, idamage, smeansofdeath, sweap
if (isDefined(self.grief_savedweapon_weaponsammo_clip_alt[i]) && weaponAltWeaponName(self.grief_savedweapon_weapons[i]) != "none") if (isDefined(self.grief_savedweapon_weaponsammo_clip_alt[i]) && weaponAltWeaponName(self.grief_savedweapon_weapons[i]) != "none")
{ {
clip_alt_missing = weaponClipSize(weaponAltWeaponName(self.grief_savedweapon_weapons[i])) - self.grief_savedweapon_weaponsammo_clip_alt[i]; clip_alt_missing = weaponClipSize(weaponAltWeaponName(self.grief_savedweapon_weapons[i])) - self.grief_savedweapon_weaponsammo_clip_alt[i];
if (clip_alt_missing > self.grief_savedweapon_weaponsammo_stock_alt[i]) if (clip_alt_missing > self.grief_savedweapon_weaponsammo_stock_alt[i])
{ {
clip_alt_missing = self.grief_savedweapon_weaponsammo_stock_alt[i]; clip_alt_missing = self.grief_savedweapon_weaponsammo_stock_alt[i];
} }
self.grief_savedweapon_weaponsammo_clip_alt[i] += clip_alt_missing; self.grief_savedweapon_weaponsammo_clip_alt[i] += clip_alt_missing;
self.grief_savedweapon_weaponsammo_stock_alt[i] -= clip_alt_missing; self.grief_savedweapon_weaponsammo_stock_alt[i] -= clip_alt_missing;
} }
@ -1987,6 +2020,7 @@ grief_laststand_weapons_return()
if(isDefined(self.grief_savedperks)) if(isDefined(self.grief_savedperks))
{ {
self.perks_active = []; self.perks_active = [];
foreach(perk in self.grief_savedperks) foreach(perk in self.grief_savedperks)
{ {
self maps\mp\zombies\_zm_perks::give_perk(perk); self maps\mp\zombies\_zm_perks::give_perk(perk);
@ -1996,6 +2030,7 @@ grief_laststand_weapons_return()
primary_weapons_returned = 0; primary_weapons_returned = 0;
i = 0; i = 0;
while ( i < self.grief_savedweapon_weapons.size ) while ( i < self.grief_savedweapon_weapons.size )
{ {
if ( isdefined( self.grief_savedweapon_grenades ) && self.grief_savedweapon_weapons[ i ] == self.grief_savedweapon_grenades || ( isdefined( self.grief_savedweapon_tactical ) && self.grief_savedweapon_weapons[ i ] == self.grief_savedweapon_tactical ) ) if ( isdefined( self.grief_savedweapon_grenades ) && self.grief_savedweapon_weapons[ i ] == self.grief_savedweapon_grenades || ( isdefined( self.grief_savedweapon_tactical ) && self.grief_savedweapon_weapons[ i ] == self.grief_savedweapon_tactical ) )
@ -2037,6 +2072,7 @@ grief_laststand_weapons_return()
self.grief_savedweapon_weaponsammo_stock[i] = 0; self.grief_savedweapon_weaponsammo_stock[i] = 0;
dual_wield_name = weapondualwieldweaponname(self.grief_savedweapon_weapons[i]); dual_wield_name = weapondualwieldweaponname(self.grief_savedweapon_weapons[i]);
if( "none" != dual_wield_name ) if( "none" != dual_wield_name )
{ {
if (used_amt >= self.grief_savedweapon_weaponsammo_clip_dualwield[i]) if (used_amt >= self.grief_savedweapon_weaponsammo_clip_dualwield[i])
@ -2253,6 +2289,7 @@ sudden_death()
level.sudden_death = 1; level.sudden_death = 1;
players = get_players(); players = get_players();
foreach(player in players) foreach(player in players)
{ {
player thread show_grief_hud_msg( "Sudden Death!" ); player thread show_grief_hud_msg( "Sudden Death!" );
@ -2261,6 +2298,7 @@ sudden_death()
health = player.health; health = player.health;
player setMaxHealth(player.maxhealth - 100); player setMaxHealth(player.maxhealth - 100);
if(player.health > health) if(player.health > health)
{ {
player.health = health; player.health = health;
@ -2335,6 +2373,7 @@ func_should_drop_meat()
} }
players = get_players(); players = get_players();
foreach (player in players) foreach (player in players)
{ {
if (player hasWeapon("item_meat_zm")) if (player hasWeapon("item_meat_zm"))
@ -2373,12 +2412,14 @@ save_teams_on_intermission()
if (level.allow_teamchange) if (level.allow_teamchange)
{ {
players = get_players("axis"); players = get_players("axis");
foreach (player in players) foreach (player in players)
{ {
axis_guids += player getguid() + " "; axis_guids += player getguid() + " ";
} }
players = get_players("allies"); players = get_players("allies");
foreach (player in players) foreach (player in players)
{ {
allies_guids += player getguid() + " "; allies_guids += player getguid() + " ";
@ -2387,6 +2428,7 @@ save_teams_on_intermission()
else else
{ {
players = array_randomize(get_players()); players = array_randomize(get_players());
for (i = 0; i < players.size; i++) for (i = 0; i < players.size; i++)
{ {
if (i % 2 == 0) if (i % 2 == 0)
@ -2422,6 +2464,7 @@ race_check_for_kills()
amount = 1; amount = 1;
special_score = undefined; special_score = undefined;
if (is_true(zombie.is_brutus)) if (is_true(zombie.is_brutus))
{ {
amount = 10; amount = 10;
@ -2516,6 +2559,7 @@ containment_think()
next_zone = level.zones[next_zone_name]; next_zone = level.zones[next_zone_name];
zone_name_to_lock = zone_name; zone_name_to_lock = zone_name;
if (zone_name == "zone_street_fountain") if (zone_name == "zone_street_fountain")
{ {
zone_name_to_lock = "zone_street_lighteast"; zone_name_to_lock = "zone_street_lighteast";
@ -2526,6 +2570,7 @@ containment_think()
} }
players = get_players(); players = get_players();
foreach(player in players) foreach(player in players)
{ {
player thread show_grief_hud_msg("New containment zone!"); player thread show_grief_hud_msg("New containment zone!");
@ -2548,6 +2593,7 @@ containment_think()
if (containment_zones.size > 1) if (containment_zones.size > 1)
{ {
spawn_points = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype(); spawn_points = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype();
foreach(spawn_point in spawn_points) foreach(spawn_point in spawn_points)
{ {
if(spawn_point.script_noteworthy == zone_name_to_lock) if(spawn_point.script_noteworthy == zone_name_to_lock)
@ -2567,6 +2613,7 @@ containment_think()
foreach(player in players) foreach(player in players)
{ {
player_zone_name = player get_current_zone(); player_zone_name = player get_current_zone();
if(isDefined(player_zone_name) && player_zone_name == zone_name) if(isDefined(player_zone_name) && player_zone_name == zone_name)
{ {
if(is_player_valid(player)) if(is_player_valid(player))
@ -2596,6 +2643,7 @@ containment_think()
if (containment_zones.size > 1 && show_next_obj_waypoint) if (containment_zones.size > 1 && show_next_obj_waypoint)
{ {
player_zone_name = player get_current_zone(); player_zone_name = player get_current_zone();
if (isDefined(player_zone_name) && player_zone_name == next_zone_name) if (isDefined(player_zone_name) && player_zone_name == next_zone_name)
{ {
player containment_set_obj_waypoint_on_screen(1); player containment_set_obj_waypoint_on_screen(1);
@ -2616,6 +2664,7 @@ containment_think()
if (team_diff > 0) if (team_diff > 0)
{ {
team = "axis"; team = "axis";
if (get_players("allies").size < get_players("axis").size) if (get_players("allies").size < get_players("axis").size)
{ {
team = "allies"; team = "allies";
@ -2678,10 +2727,12 @@ containment_think()
if(held_prev != "axis") if(held_prev != "axis")
{ {
obj_time = 1000; obj_time = 1000;
if(!isDefined(held_time["axis"])) if(!isDefined(held_time["axis"]))
{ {
held_time["axis"] = getTime(); held_time["axis"] = getTime();
} }
held_time["allies"] = undefined; held_time["allies"] = undefined;
held_prev = "axis"; held_prev = "axis";
@ -2715,10 +2766,12 @@ containment_think()
if(held_prev != "allies") if(held_prev != "allies")
{ {
obj_time = 1000; obj_time = 1000;
if(!isDefined(held_time["allies"])) if(!isDefined(held_time["allies"]))
{ {
held_time["allies"] = getTime(); held_time["allies"] = getTime();
} }
held_time["axis"] = undefined; held_time["axis"] = undefined;
held_prev = "allies"; held_prev = "allies";
@ -2811,6 +2864,7 @@ containment_think()
} }
zombies = get_round_enemy_array(); zombies = get_round_enemy_array();
if (isDefined(zombies)) if (isDefined(zombies))
{ {
for (i = 0; i < zombies.size; i++) for (i = 0; i < zombies.size; i++)
@ -2823,6 +2877,7 @@ containment_think()
} }
spawn_points = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype(); spawn_points = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype();
foreach(spawn_point in spawn_points) foreach(spawn_point in spawn_points)
{ {
if(spawn_point.script_noteworthy == zone_name_to_lock) if(spawn_point.script_noteworthy == zone_name_to_lock)
@ -2912,6 +2967,7 @@ containment_get_zones()
containment_set_obj_waypoint_on_screen(next_obj = false) containment_set_obj_waypoint_on_screen(next_obj = false)
{ {
hud = self.obj_waypoint; hud = self.obj_waypoint;
if (next_obj) if (next_obj)
{ {
hud = self.next_obj_waypoint; hud = self.next_obj_waypoint;
@ -2936,6 +2992,7 @@ containment_set_obj_waypoint_on_screen(next_obj = false)
containment_set_obj_waypoint_off_screen(zone_name, zone, next_obj = false) containment_set_obj_waypoint_off_screen(zone_name, zone, next_obj = false)
{ {
hud = self.obj_waypoint; hud = self.obj_waypoint;
if (next_obj) if (next_obj)
{ {
hud = self.next_obj_waypoint; hud = self.next_obj_waypoint;
@ -3045,6 +3102,7 @@ meat_powerup_drop_think()
wait 10; wait 10;
players = get_players(); players = get_players();
foreach(player in players) foreach(player in players)
{ {
player thread show_grief_hud_msg("Kill a zombie to drop the meat!"); player thread show_grief_hud_msg("Kill a zombie to drop the meat!");
@ -3065,6 +3123,7 @@ meat_powerup_drop_think()
if (!isDefined(level.meat_player)) if (!isDefined(level.meat_player))
{ {
players = get_players(); players = get_players();
foreach (player in players) foreach (player in players)
{ {
player thread show_grief_hud_msg("Meat dropped!"); player thread show_grief_hud_msg("Meat dropped!");
@ -3076,6 +3135,7 @@ meat_powerup_drop_think()
level waittill("meat_inactive"); level waittill("meat_inactive");
players = get_players(); players = get_players();
foreach (player in players) foreach (player in players)
{ {
player thread show_grief_hud_msg("Meat reset!"); player thread show_grief_hud_msg("Meat reset!");
@ -3269,12 +3329,14 @@ increment_score(team, amount = 1, show_lead_msg = true, special_score)
level endon("end_game"); level endon("end_game");
encounters_team = "A"; encounters_team = "A";
if(team == "allies") if(team == "allies")
{ {
encounters_team = "B"; encounters_team = "B";
} }
level.grief_score[encounters_team] += amount; level.grief_score[encounters_team] += amount;
if (level.grief_score[encounters_team] > get_gamemode_winning_score()) if (level.grief_score[encounters_team] > get_gamemode_winning_score())
{ {
level.grief_score[encounters_team] = get_gamemode_winning_score(); level.grief_score[encounters_team] = get_gamemode_winning_score();
@ -3297,6 +3359,7 @@ increment_score(team, amount = 1, show_lead_msg = true, special_score)
if(level.scr_zm_ui_gametype_obj == "zgrief") if(level.scr_zm_ui_gametype_obj == "zgrief")
{ {
players = get_players(team); players = get_players(team);
foreach(player in players) foreach(player in players)
{ {
player thread show_grief_hud_msg("Enemy Bled Out! [" + score_left + " Remaining]"); player thread show_grief_hud_msg("Enemy Bled Out! [" + score_left + " Remaining]");
@ -3332,6 +3395,7 @@ increment_score(team, amount = 1, show_lead_msg = true, special_score)
} }
players = get_players(team); players = get_players(team);
foreach (player in players) foreach (player in players)
{ {
player thread show_grief_hud_msg(msg); player thread show_grief_hud_msg(msg);
@ -3346,6 +3410,7 @@ increment_score(team, amount = 1, show_lead_msg = true, special_score)
level.prev_leader = encounters_team; level.prev_leader = encounters_team;
players = get_players(); players = get_players();
foreach (player in players) foreach (player in players)
{ {
if (player.team == team) if (player.team == team)

View File

@ -93,15 +93,18 @@ buried_special_weapon_magicbox_check(weapon)
{ {
players = get_players(); players = get_players();
i = 0; i = 0;
while ( i < players.size ) while ( i < players.size )
{ {
if ( is_player_valid( players[ i ], undefined, 1 ) && players[ i ] is_player_tactical_grenade( weapon ) ) if ( is_player_valid( players[ i ], undefined, 1 ) && players[ i ] is_player_tactical_grenade( weapon ) )
{ {
return 0; return 0;
} }
i++; i++;
} }
} }
return 1; return 1;
} }
@ -117,6 +120,7 @@ player_initial_spawn_override()
// set new initial spawns to be same as respawns already on map // set new initial spawns to be same as respawns already on map
ind = 0; ind = 0;
respawn_points = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype(); respawn_points = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype();
for (i = 0; i < respawn_points.size; i++) for (i = 0; i < respawn_points.size; i++)
{ {
if (respawn_points[i].script_noteworthy == "zone_stables") if (respawn_points[i].script_noteworthy == "zone_stables")
@ -127,6 +131,7 @@ player_initial_spawn_override()
} }
respawn_array = getstructarray(respawn_points[ind].target, "targetname"); respawn_array = getstructarray(respawn_points[ind].target, "targetname");
foreach (respawn in respawn_array) foreach (respawn in respawn_array)
{ {
struct = spawnStruct(); struct = spawnStruct();
@ -204,6 +209,7 @@ sloth_barricades_buyable()
} }
sloth_trigs = getentarray( "sloth_barricade", "targetname" ); sloth_trigs = getentarray( "sloth_barricade", "targetname" );
foreach (trig in sloth_trigs) foreach (trig in sloth_trigs)
{ {
if (isDefined(trig.script_noteworthy) && trig.script_noteworthy == "courtyard_fountain") if (isDefined(trig.script_noteworthy) && trig.script_noteworthy == "courtyard_fountain")
@ -316,6 +322,7 @@ sloth_barricade_move()
num = randomintrange( 3, 5 ); num = randomintrange( 3, 5 );
og_angles = self.angles; og_angles = self.angles;
for ( i = 0; i < num; i++ ) for ( i = 0; i < num; i++ )
{ {
angles = og_angles + ( -5 + randomfloat( 10 ), -5 + randomfloat( 10 ), -5 + randomfloat( 10 ) ); angles = og_angles + ( -5 + randomfloat( 10 ), -5 + randomfloat( 10 ), -5 + randomfloat( 10 ) );

View File

@ -57,9 +57,11 @@ init()
door_changes() door_changes()
{ {
zombie_doors = getentarray( "zombie_door", "targetname" ); zombie_doors = getentarray( "zombie_door", "targetname" );
for ( i = 0; i < zombie_doors.size; i++ ) for ( i = 0; i < zombie_doors.size; i++ )
{ {
new_target = undefined; new_target = undefined;
if (zombie_doors[i].target == "pf1577_auto2497") if (zombie_doors[i].target == "pf1577_auto2497")
{ {
new_target = "pf1577_auto2496"; new_target = "pf1577_auto2496";
@ -89,16 +91,20 @@ zombie_init_done()
self.zombie_path_bad = 0; self.zombie_path_bad = 0;
self thread maps\mp\zm_highrise_distance_tracking::escaped_zombies_cleanup_init(); self thread maps\mp\zm_highrise_distance_tracking::escaped_zombies_cleanup_init();
self thread maps\mp\zm_highrise::elevator_traverse_watcher(); self thread maps\mp\zm_highrise::elevator_traverse_watcher();
if ( self.classname == "actor_zm_highrise_basic_03" ) if ( self.classname == "actor_zm_highrise_basic_03" )
{ {
health_bonus = int( self.maxhealth * 0.05 ); health_bonus = int( self.maxhealth * 0.05 );
self.maxhealth += health_bonus; self.maxhealth += health_bonus;
if ( self.headmodel == "c_zom_zombie_chinese_head3_helmet" ) if ( self.headmodel == "c_zom_zombie_chinese_head3_helmet" )
{ {
self.maxhealth += health_bonus; self.maxhealth += health_bonus;
} }
self.health = self.maxhealth; self.health = self.maxhealth;
} }
self setphysparams( 15, 0, 48 ); self setphysparams( 15, 0, 48 );
} }
@ -126,12 +132,14 @@ highrise_respawn_override( revivee, return_struct )
if ( isDefined( spawn_points[ j ].script_noteworthy ) ) if ( isDefined( spawn_points[ j ].script_noteworthy ) )
{ {
zone = level.zones[ spawn_points[ j ].script_noteworthy ]; zone = level.zones[ spawn_points[ j ].script_noteworthy ];
for ( k = 0; k < zone.volumes.size; k++ ) for ( k = 0; k < zone.volumes.size; k++ )
{ {
if ( players[ i ] istouching( zone.volumes[ k ] ) ) if ( players[ i ] istouching( zone.volumes[ k ] ) )
{ {
closest_group = j; closest_group = j;
spawn_location = maps\mp\zombies\_zm::get_valid_spawn_location( revivee, spawn_points, closest_group, return_struct ); spawn_location = maps\mp\zombies\_zm::get_valid_spawn_location( revivee, spawn_points, closest_group, return_struct );
if ( isDefined( spawn_location ) ) if ( isDefined( spawn_location ) )
{ {
return spawn_location; return spawn_location;
@ -246,6 +254,7 @@ elevator_call_think()
while ( 1 ) while ( 1 )
{ {
cost_active = 0; cost_active = 0;
if ( !self.elevator.body.is_moving && self.elevator maps\mp\zm_highrise_elevators::elevator_is_on_floor( self.floor ) && !is_true( self.elevator.body.start_location_wait ) ) if ( !self.elevator.body.is_moving && self.elevator maps\mp\zm_highrise_elevators::elevator_is_on_floor( self.floor ) && !is_true( self.elevator.body.start_location_wait ) )
{ {
if ( !is_true( self.elevator.body.elevator_stop ) ) if ( !is_true( self.elevator.body.elevator_stop ) )

View File

@ -18,10 +18,12 @@ zombie_init_done()
{ {
self.meleedamage = 50; self.meleedamage = 50;
self.allowpain = 0; self.allowpain = 0;
if ( isDefined( self.script_parameters ) && self.script_parameters == "crater" ) if ( isDefined( self.script_parameters ) && self.script_parameters == "crater" )
{ {
self thread maps\mp\zm_nuked::zombie_crater_locomotion(); self thread maps\mp\zm_nuked::zombie_crater_locomotion();
} }
self setphysparams( 15, 0, 48 ); self setphysparams( 15, 0, 48 );
} }

View File

@ -89,6 +89,7 @@ door_changes()
num = 0; num = 0;
targets = getentarray( "cellblock_start_door", "targetname" ); targets = getentarray( "cellblock_start_door", "targetname" );
zombie_doors = getentarray( "zombie_door", "targetname" ); zombie_doors = getentarray( "zombie_door", "targetname" );
for ( i = 0; i < zombie_doors.size; i++ ) for ( i = 0; i < zombie_doors.size; i++ )
{ {
if ( isdefined( zombie_doors[i].target ) && zombie_doors[i].target == "cellblock_start_door" ) if ( isdefined( zombie_doors[i].target ) && zombie_doors[i].target == "cellblock_start_door" )
@ -115,18 +116,22 @@ check_for_special_weapon_limit_exist(weapon)
{ {
return 1; return 1;
} }
players = get_players(); players = get_players();
count = 0; count = 0;
if ( weapon == "blundergat_zm" ) if ( weapon == "blundergat_zm" )
{ {
if ( self maps\mp\zombies\_zm_weapons::has_weapon_or_upgrade( "blundersplat_zm" ) ) if ( self maps\mp\zombies\_zm_weapons::has_weapon_or_upgrade( "blundersplat_zm" ) )
{ {
return 0; return 0;
} }
if ( self afterlife_weapon_limit_check( "blundergat_zm" ) ) if ( self afterlife_weapon_limit_check( "blundergat_zm" ) )
{ {
return 0; return 0;
} }
limit = level.limited_weapons[ "blundergat_zm" ]; limit = level.limited_weapons[ "blundergat_zm" ];
} }
else else
@ -135,9 +140,12 @@ check_for_special_weapon_limit_exist(weapon)
{ {
return 0; return 0;
} }
limit = level.limited_weapons[ "minigun_alcatraz_zm" ]; limit = level.limited_weapons[ "minigun_alcatraz_zm" ];
} }
i = 0; i = 0;
while ( i < players.size ) while ( i < players.size )
{ {
if ( weapon == "blundergat_zm" ) if ( weapon == "blundergat_zm" )
@ -156,12 +164,15 @@ check_for_special_weapon_limit_exist(weapon)
count++; count++;
} }
} }
i++; i++;
} }
if ( count >= limit ) if ( count >= limit )
{ {
return 0; return 0;
} }
return 1; return 1;
} }
@ -778,6 +789,7 @@ working_zone_init()
add_adjacent_zone( "zone_cellblock_west_gondola", "zone_cellblock_west_gondola_dock", "activate_cellblock_gondola" ); add_adjacent_zone( "zone_cellblock_west_gondola", "zone_cellblock_west_gondola_dock", "activate_cellblock_gondola" );
add_adjacent_zone( "zone_cellblock_west_gondola", "zone_cellblock_west_gondola_dock", "gondola_dock_to_roof" ); add_adjacent_zone( "zone_cellblock_west_gondola", "zone_cellblock_west_gondola_dock", "gondola_dock_to_roof" );
} }
// else if ( is_gametype_active( "zgrief" ) ) // else if ( is_gametype_active( "zgrief" ) )
// { // {
// playable_area = getentarray( "player_volume", "script_noteworthy" ); // playable_area = getentarray( "player_volume", "script_noteworthy" );

View File

@ -102,6 +102,7 @@ tomb_special_weapon_magicbox_check(weapon)
return 0; return 0;
} }
} }
if ( isDefined( level.zombie_weapons[ weapon ].shared_ammo_weapon ) ) if ( isDefined( level.zombie_weapons[ weapon ].shared_ammo_weapon ) )
{ {
if ( self maps\mp\zombies\_zm_weapons::has_weapon_or_upgrade( level.zombie_weapons[ weapon ].shared_ammo_weapon ) ) if ( self maps\mp\zombies\_zm_weapons::has_weapon_or_upgrade( level.zombie_weapons[ weapon ].shared_ammo_weapon ) )
@ -109,6 +110,7 @@ tomb_special_weapon_magicbox_check(weapon)
return 0; return 0;
} }
} }
return 1; return 1;
} }
@ -125,24 +127,28 @@ register_melee_weapons_for_level()
change_stargate_teleport_return_player_angles() change_stargate_teleport_return_player_angles()
{ {
struct = getstructarray( "air_teleport_return", "targetname" ); struct = getstructarray( "air_teleport_return", "targetname" );
foreach (pos in struct) foreach (pos in struct)
{ {
pos.angles = (0, -120, 0); pos.angles = (0, -120, 0);
} }
struct = getstructarray( "elec_teleport_return", "targetname" ); struct = getstructarray( "elec_teleport_return", "targetname" );
foreach (pos in struct) foreach (pos in struct)
{ {
pos.angles = (0, 0, 0); pos.angles = (0, 0, 0);
} }
struct = getstructarray( "fire_teleport_return", "targetname" ); struct = getstructarray( "fire_teleport_return", "targetname" );
foreach (pos in struct) foreach (pos in struct)
{ {
pos.angles = (0, -130, 0); pos.angles = (0, -130, 0);
} }
struct = getstructarray( "ice_teleport_return", "targetname" ); struct = getstructarray( "ice_teleport_return", "targetname" );
foreach (pos in struct) foreach (pos in struct)
{ {
pos.angles = (0, -110, 0); pos.angles = (0, -110, 0);
@ -175,6 +181,7 @@ zombie_blood_dig_changes()
for (i = 0; i < level.a_zombie_blood_entities.size; i++) for (i = 0; i < level.a_zombie_blood_entities.size; i++)
{ {
ent = level.a_zombie_blood_entities[i]; ent = level.a_zombie_blood_entities[i];
if (IsDefined(ent.e_unique_player)) if (IsDefined(ent.e_unique_player))
{ {
if (!isDefined(ent.e_unique_player.initial_zombie_blood_dig)) if (!isDefined(ent.e_unique_player.initial_zombie_blood_dig))
@ -183,6 +190,7 @@ zombie_blood_dig_changes()
} }
ent.e_unique_player.initial_zombie_blood_dig++; ent.e_unique_player.initial_zombie_blood_dig++;
if (ent.e_unique_player.initial_zombie_blood_dig <= 2) if (ent.e_unique_player.initial_zombie_blood_dig <= 2)
{ {
ent setvisibletoplayer(ent.e_unique_player); ent setvisibletoplayer(ent.e_unique_player);
@ -216,6 +224,7 @@ custom_magic_box_timer_til_despawn( magic_box )
v_float = anglesToForward( magic_box.angles - vectorScale( ( 0, 1, 0 ), 90 ) ) * 40; v_float = anglesToForward( magic_box.angles - vectorScale( ( 0, 1, 0 ), 90 ) ) * 40;
self moveto( self.origin - ( v_float * 0.25 ), level.magicbox_timeout, level.magicbox_timeout * 0.5 ); self moveto( self.origin - ( v_float * 0.25 ), level.magicbox_timeout, level.magicbox_timeout * 0.5 );
wait level.magicbox_timeout; wait level.magicbox_timeout;
if ( isDefined( self ) ) if ( isDefined( self ) )
{ {
self delete(); self delete();

View File

@ -141,6 +141,7 @@ electric_door_changes()
} }
zombie_doors = getentarray( "zombie_door", "targetname" ); zombie_doors = getentarray( "zombie_door", "targetname" );
for ( i = 0; i < zombie_doors.size; i++ ) for ( i = 0; i < zombie_doors.size; i++ )
{ {
if ( isDefined( zombie_doors[i].script_noteworthy ) && (zombie_doors[i].script_noteworthy == "local_electric_door" || zombie_doors[i].script_noteworthy == "electric_door") ) if ( isDefined( zombie_doors[i].script_noteworthy ) && (zombie_doors[i].script_noteworthy == "local_electric_door" || zombie_doors[i].script_noteworthy == "electric_door") )
@ -155,6 +156,7 @@ electric_door_changes()
// link Bus Depot and Farm electric doors together // link Bus Depot and Farm electric doors together
new_target = undefined; new_target = undefined;
if (zombie_doors[i].target == "pf1766_auto2353") if (zombie_doors[i].target == "pf1766_auto2353")
{ {
new_target = "pf1766_auto2352"; new_target = "pf1766_auto2352";
@ -192,6 +194,7 @@ power_local_electric_doors_globally()
local_power = []; local_power = [];
zombie_doors = getentarray( "zombie_door", "targetname" ); zombie_doors = getentarray( "zombie_door", "targetname" );
for ( i = 0; i < zombie_doors.size; i++ ) for ( i = 0; i < zombie_doors.size; i++ )
{ {
if ( isDefined( zombie_doors[i].script_noteworthy ) && zombie_doors[i].script_noteworthy == "local_electric_door" ) if ( isDefined( zombie_doors[i].script_noteworthy ) && zombie_doors[i].script_noteworthy == "local_electric_door" )
@ -334,6 +337,7 @@ player_respawn_override()
scripts\zm\replaced\utility::register_map_spawn_group(origin, zone, dist); scripts\zm\replaced\utility::register_map_spawn_group(origin, zone, dist);
respawn_array = []; respawn_array = [];
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
{ {
respawn_array[i] = spawnStruct(); respawn_array[i] = spawnStruct();
@ -376,6 +380,7 @@ player_respawn_override()
scripts\zm\replaced\utility::register_map_spawn_group(origin, zone, dist); scripts\zm\replaced\utility::register_map_spawn_group(origin, zone, dist);
respawn_array = []; respawn_array = [];
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
{ {
respawn_array[i] = spawnStruct(); respawn_array[i] = spawnStruct();
@ -418,6 +423,7 @@ player_respawn_override()
scripts\zm\replaced\utility::register_map_spawn_group(origin, zone, dist); scripts\zm\replaced\utility::register_map_spawn_group(origin, zone, dist);
respawn_array = []; respawn_array = [];
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
{ {
respawn_array[i] = spawnStruct(); respawn_array[i] = spawnStruct();
@ -460,6 +466,7 @@ player_respawn_override()
scripts\zm\replaced\utility::register_map_spawn_group(origin, zone, dist); scripts\zm\replaced\utility::register_map_spawn_group(origin, zone, dist);
respawn_array = []; respawn_array = [];
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
{ {
respawn_array[i] = spawnStruct(); respawn_array[i] = spawnStruct();
@ -595,6 +602,7 @@ power_station_vision_change()
while(1) while(1)
{ {
players = get_players(); players = get_players();
foreach(player in players) foreach(player in players)
{ {
if(!isDefined(player.power_station_vision_set)) if(!isDefined(player.power_station_vision_set))
@ -636,6 +644,7 @@ change_dvar_over_time(dvar, val, time, increment)
rate = (level.changed_r_exposureValue - level.default_r_exposureValue) / intervals; rate = (level.changed_r_exposureValue - level.default_r_exposureValue) / intervals;
i = 0; i = 0;
while(i < intervals) while(i < intervals)
{ {
if(increment) if(increment)
@ -730,10 +739,12 @@ manage_zones( initial_zone )
deactivate_initial_barrier_goals(); deactivate_initial_barrier_goals();
zone_choke = 0; zone_choke = 0;
spawn_points = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype(); spawn_points = maps\mp\gametypes_zm\_zm_gametype::get_player_spawns_for_gametype();
for ( i = 0; i < spawn_points.size; i++ ) for ( i = 0; i < spawn_points.size; i++ )
{ {
spawn_points[ i ].locked = 1; spawn_points[ i ].locked = 1;
} }
if ( isDefined( level.zone_manager_init_func ) ) if ( isDefined( level.zone_manager_init_func ) )
{ {
[[ level.zone_manager_init_func ]](); [[ level.zone_manager_init_func ]]();
@ -752,17 +763,21 @@ manage_zones( initial_zone )
zone_init( initial_zone ); zone_init( initial_zone );
enable_zone( initial_zone ); enable_zone( initial_zone );
} }
setup_zone_flag_waits(); setup_zone_flag_waits();
zkeys = getarraykeys( level.zones ); zkeys = getarraykeys( level.zones );
level.zone_keys = zkeys; level.zone_keys = zkeys;
level.newzones = []; level.newzones = [];
for ( z = 0; z < zkeys.size; z++ ) for ( z = 0; z < zkeys.size; z++ )
{ {
level.newzones[ zkeys[ z ] ] = spawnstruct(); level.newzones[ zkeys[ z ] ] = spawnstruct();
} }
oldzone = undefined; oldzone = undefined;
flag_set( "zones_initialized" ); flag_set( "zones_initialized" );
flag_wait( "begin_spawning" ); flag_wait( "begin_spawning" );
while ( getDvarInt( "noclip" ) == 0 || getDvarInt( "notarget" ) != 0 ) while ( getDvarInt( "noclip" ) == 0 || getDvarInt( "notarget" ) != 0 )
{ {
for( z = 0; z < zkeys.size; z++ ) for( z = 0; z < zkeys.size; z++ )
@ -770,19 +785,23 @@ manage_zones( initial_zone )
level.newzones[ zkeys[ z ] ].is_active = 0; level.newzones[ zkeys[ z ] ].is_active = 0;
level.newzones[ zkeys[ z ] ].is_occupied = 0; level.newzones[ zkeys[ z ] ].is_occupied = 0;
} }
a_zone_is_active = 0; a_zone_is_active = 0;
a_zone_is_spawning_allowed = 0; a_zone_is_spawning_allowed = 0;
level.zone_scanning_active = 1; level.zone_scanning_active = 1;
z = 0; z = 0;
while ( z < zkeys.size ) while ( z < zkeys.size )
{ {
zone = level.zones[ zkeys[ z ] ]; zone = level.zones[ zkeys[ z ] ];
newzone = level.newzones[ zkeys[ z ] ]; newzone = level.newzones[ zkeys[ z ] ];
if( !zone.is_enabled ) if( !zone.is_enabled )
{ {
z++; z++;
continue; continue;
} }
if ( isdefined(level.zone_occupied_func ) ) if ( isdefined(level.zone_occupied_func ) )
{ {
newzone.is_occupied = [[ level.zone_occupied_func ]]( zkeys[ z ] ); newzone.is_occupied = [[ level.zone_occupied_func ]]( zkeys[ z ] );
@ -791,25 +810,31 @@ manage_zones( initial_zone )
{ {
newzone.is_occupied = player_in_zone( zkeys[ z ] ); newzone.is_occupied = player_in_zone( zkeys[ z ] );
} }
if ( newzone.is_occupied ) if ( newzone.is_occupied )
{ {
newzone.is_active = 1; newzone.is_active = 1;
a_zone_is_active = 1; a_zone_is_active = 1;
if ( zone.is_spawning_allowed ) if ( zone.is_spawning_allowed )
{ {
a_zone_is_spawning_allowed = 1; a_zone_is_spawning_allowed = 1;
} }
if ( !isdefined(oldzone) || oldzone != newzone ) if ( !isdefined(oldzone) || oldzone != newzone )
{ {
level notify( "newzoneActive", zkeys[ z ] ); level notify( "newzoneActive", zkeys[ z ] );
oldzone = newzone; oldzone = newzone;
} }
azkeys = getarraykeys( zone.adjacent_zones ); azkeys = getarraykeys( zone.adjacent_zones );
for ( az = 0; az < zone.adjacent_zones.size; az++ ) for ( az = 0; az < zone.adjacent_zones.size; az++ )
{ {
if ( zone.adjacent_zones[ azkeys[ az ] ].is_connected && level.zones[ azkeys[ az ] ].is_enabled ) if ( zone.adjacent_zones[ azkeys[ az ] ].is_connected && level.zones[ azkeys[ az ] ].is_enabled )
{ {
level.newzones[ azkeys[ az ] ].is_active = 1; level.newzones[ azkeys[ az ] ].is_active = 1;
if ( level.zones[ azkeys[ az ] ].is_spawning_allowed ) if ( level.zones[ azkeys[ az ] ].is_spawning_allowed )
{ {
a_zone_is_spawning_allowed = 1; a_zone_is_spawning_allowed = 1;
@ -817,20 +842,26 @@ manage_zones( initial_zone )
} }
} }
} }
zone_choke++; zone_choke++;
if ( zone_choke >= 3 ) if ( zone_choke >= 3 )
{ {
zone_choke = 0; zone_choke = 0;
wait 0.05; wait 0.05;
} }
z++; z++;
} }
level.zone_scanning_active = 0; level.zone_scanning_active = 0;
for ( z = 0; z < zkeys.size; z++ ) for ( z = 0; z < zkeys.size; z++ )
{ {
level.zones[ zkeys[ z ] ].is_active = level.newzones[ zkeys[ z ] ].is_active; level.zones[ zkeys[ z ] ].is_active = level.newzones[ zkeys[ z ] ].is_active;
level.zones[ zkeys[ z ] ].is_occupied = level.newzones[ zkeys[ z ] ].is_occupied; level.zones[ zkeys[ z ] ].is_occupied = level.newzones[ zkeys[ z ] ].is_occupied;
} }
if ( !a_zone_is_active || !a_zone_is_spawning_allowed ) if ( !a_zone_is_active || !a_zone_is_spawning_allowed )
{ {
if ( isarray( initial_zone ) ) if ( isarray( initial_zone ) )
@ -846,6 +877,7 @@ manage_zones( initial_zone )
level.zones[ initial_zone ].is_spawning_allowed = 1; level.zones[ initial_zone ].is_spawning_allowed = 1;
} }
} }
[[ level.create_spawner_list_func ]]( zkeys ); [[ level.create_spawner_list_func ]]( zkeys );
level.active_zone_names = maps\mp\zombies\_zm_zonemgr::get_active_zone_names(); level.active_zone_names = maps\mp\zombies\_zm_zonemgr::get_active_zone_names();
wait 1; wait 1;