mirror of
https://github.com/JezuzLizard/Recompilable-gscs-for-BO2-zombies-and-multiplayer.git
synced 2025-06-10 10:47:58 -05:00
checked 4 more scripts started debugging _zm_spawner
The 4 following scripts have been checked but not tested: _zm_magicbox_lock, _zm_playerhealth, _zm_power, and _zm_turned. _zm_spawner has 2 known bugs: zombies cannot break barriers, and they have no glowing eyes.
This commit is contained in:
@ -5,7 +5,7 @@
|
||||
#include maps/mp/_utility;
|
||||
#include common_scripts/utility;
|
||||
|
||||
init()
|
||||
init() //checked matches cerberus output
|
||||
{
|
||||
precachemodel( "p6_anim_zm_al_magic_box_lock_red" );
|
||||
level.locked_magic_box_cost = 2000;
|
||||
@ -13,7 +13,7 @@ init()
|
||||
add_zombie_hint( "locked_magic_box_cost", &"ZOMBIE_LOCKED_COST_2000" );
|
||||
}
|
||||
|
||||
watch_for_lock()
|
||||
watch_for_lock() //checked matches cerberus output
|
||||
{
|
||||
self endon( "user_grabbed_weapon" );
|
||||
self endon( "chest_accessed" );
|
||||
@ -21,13 +21,13 @@ watch_for_lock()
|
||||
self notify( "kill_chest_think" );
|
||||
self.grab_weapon_hint = 0;
|
||||
self.chest_user = undefined;
|
||||
wait 0,1;
|
||||
wait 0.1;
|
||||
self thread maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( self.unitrigger_stub, ::magicbox_unitrigger_think );
|
||||
self.unitrigger_stub run_visibility_function_for_all_triggers();
|
||||
self thread treasure_chest_think();
|
||||
}
|
||||
|
||||
clean_up_locked_box()
|
||||
clean_up_locked_box() //checked matches cerberus output
|
||||
{
|
||||
self endon( "box_spin_done" );
|
||||
self.owner waittill( "box_locked" );
|
||||
@ -47,7 +47,7 @@ clean_up_locked_box()
|
||||
self setzbarrierpiecestate( 4, "closed" );
|
||||
}
|
||||
|
||||
magic_box_locks()
|
||||
magic_box_locks() //checked matches cerberus output
|
||||
{
|
||||
self.owner.is_locked = 1;
|
||||
self.owner notify( "box_locked" );
|
||||
@ -57,19 +57,19 @@ magic_box_locks()
|
||||
self setzbarrierpiecestate( 5, "closing" );
|
||||
while ( self getzbarrierpiecestate( 5 ) == "closing" )
|
||||
{
|
||||
wait 0,5;
|
||||
wait 0.5;
|
||||
}
|
||||
self notify( "locked" );
|
||||
}
|
||||
|
||||
magic_box_unlocks()
|
||||
magic_box_unlocks() //checked matches cerberus output
|
||||
{
|
||||
maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.owner.unitrigger_stub );
|
||||
self playsound( "zmb_hellbox_unlock" );
|
||||
self setzbarrierpiecestate( 5, "opening" );
|
||||
while ( self getzbarrierpiecestate( 5 ) == "opening" )
|
||||
{
|
||||
wait 0,5;
|
||||
wait 0.5;
|
||||
}
|
||||
self setzbarrierpiecestate( 2, "closed" );
|
||||
self showzbarrierpiece( 2 );
|
||||
@ -80,7 +80,7 @@ magic_box_unlocks()
|
||||
self setclientfield( "magicbox_amb_fx", 1 );
|
||||
}
|
||||
|
||||
set_locked_magicbox_state( state )
|
||||
set_locked_magicbox_state( state ) //checked matches cerberus output
|
||||
{
|
||||
switch( state )
|
||||
{
|
||||
@ -96,3 +96,4 @@ set_locked_magicbox_state( state )
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
#include maps/mp/_utility;
|
||||
#include common_scripts/utility;
|
||||
|
||||
init()
|
||||
init() //checked matches cerberus output
|
||||
{
|
||||
if ( !isDefined( level.script ) )
|
||||
{
|
||||
@ -20,9 +20,11 @@ init()
|
||||
level.difficultystring[ "normal" ] = &"GAMESKILL_NORMAL";
|
||||
level.difficultystring[ "hardened" ] = &"GAMESKILL_HARDENED";
|
||||
level.difficultystring[ "veteran" ] = &"GAMESKILL_VETERAN";
|
||||
/*
|
||||
/#
|
||||
thread playerhealthdebug();
|
||||
#/
|
||||
*/
|
||||
level.gameskill = 1;
|
||||
switch( level.gameskill )
|
||||
{
|
||||
@ -42,22 +44,22 @@ init()
|
||||
logstring( "difficulty: " + level.gameskill );
|
||||
level.player_deathinvulnerabletime = 1700;
|
||||
level.longregentime = 5000;
|
||||
level.healthoverlaycutoff = 0,2;
|
||||
level.invultime_preshield = 0,35;
|
||||
level.invultime_onshield = 0,5;
|
||||
level.invultime_postshield = 0,3;
|
||||
level.healthoverlaycutoff = 0.2;
|
||||
level.invultime_preshield = 0.35;
|
||||
level.invultime_onshield = 0.5;
|
||||
level.invultime_postshield = 0.3;
|
||||
level.playerhealth_regularregendelay = 2400;
|
||||
level.worthydamageratio = 0,1;
|
||||
setdvar( "player_meleeDamageMultiplier", 0,4 );
|
||||
level.worthydamageratio = 0.1;
|
||||
setdvar( "player_meleeDamageMultiplier", 0.4 );
|
||||
onplayerconnect_callback( ::onplayerconnect );
|
||||
}
|
||||
|
||||
onplayerconnect()
|
||||
onplayerconnect() //checked matches cerberus output
|
||||
{
|
||||
self thread onplayerspawned();
|
||||
}
|
||||
|
||||
onplayerspawned()
|
||||
onplayerspawned() //checked changed to match cerberus output
|
||||
{
|
||||
for ( ;; )
|
||||
{
|
||||
@ -67,15 +69,12 @@ onplayerspawned()
|
||||
{
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
self notify( "noHealthOverlay" );
|
||||
self thread playerhealthregen();
|
||||
}
|
||||
self notify( "noHealthOverlay" );
|
||||
self thread playerhealthregen();
|
||||
}
|
||||
}
|
||||
|
||||
playerhurtcheck()
|
||||
playerhurtcheck() //checked changed to match cerberus output
|
||||
{
|
||||
self endon( "noHealthOverlay" );
|
||||
self.hurtagain = 0;
|
||||
@ -86,16 +85,13 @@ playerhurtcheck()
|
||||
{
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
self.hurtagain = 1;
|
||||
self.damagepoint = point;
|
||||
self.damageattacker = attacker;
|
||||
}
|
||||
self.hurtagain = 1;
|
||||
self.damagepoint = point;
|
||||
self.damageattacker = attacker;
|
||||
}
|
||||
}
|
||||
|
||||
playerhealthregen()
|
||||
playerhealthregen() //checked changed to match cerberus output
|
||||
{
|
||||
self notify( "playerHealthRegen" );
|
||||
self endon( "playerHealthRegen" );
|
||||
@ -116,7 +112,7 @@ playerhealthregen()
|
||||
self thread healthoverlay();
|
||||
oldratio = 1;
|
||||
health_add = 0;
|
||||
regenrate = 0,1;
|
||||
regenrate = 0.1;
|
||||
veryhurt = 0;
|
||||
playerjustgotredflashing = 0;
|
||||
invultime = 0;
|
||||
@ -136,7 +132,7 @@ playerhealthregen()
|
||||
playerinvultimescale = getDvarFloat( "scr_playerInvulTimeScale" );
|
||||
for ( ;; )
|
||||
{
|
||||
wait 0,05;
|
||||
wait 0.05;
|
||||
waittillframeend;
|
||||
if ( self.health == self.maxhealth )
|
||||
{
|
||||
@ -149,11 +145,13 @@ playerhealthregen()
|
||||
veryhurt = 0;
|
||||
continue;
|
||||
}
|
||||
else if ( self.health <= 0 )
|
||||
if ( self.health <= 0 )
|
||||
{
|
||||
/*
|
||||
/#
|
||||
showhitlog();
|
||||
#/
|
||||
*/
|
||||
return;
|
||||
}
|
||||
wasveryhurt = veryhurt;
|
||||
@ -164,7 +162,7 @@ playerhealthregen()
|
||||
if ( !wasveryhurt )
|
||||
{
|
||||
hurttime = getTime();
|
||||
self startfadingblur( 3,6, 2 );
|
||||
self startfadingblur( 3.6, 2 );
|
||||
self player_flag_set( "player_has_red_flashing_overlay" );
|
||||
playerjustgotredflashing = 1;
|
||||
}
|
||||
@ -176,11 +174,11 @@ playerhealthregen()
|
||||
}
|
||||
if ( health_ratio >= oldratio )
|
||||
{
|
||||
if ( ( getTime() - hurttime ) < level.playerhealth_regularregendelay )
|
||||
if ( getTime() - hurttime < level.playerhealth_regularregendelay )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
else if ( veryhurt )
|
||||
if ( veryhurt )
|
||||
{
|
||||
self.veryhurt = 1;
|
||||
newhealth = health_ratio;
|
||||
@ -202,21 +200,24 @@ playerhealthregen()
|
||||
{
|
||||
return;
|
||||
}
|
||||
/*
|
||||
/#
|
||||
if ( newhealth > health_ratio )
|
||||
{
|
||||
logregen( newhealth );
|
||||
#/
|
||||
}
|
||||
*/
|
||||
self setnormalhealth( newhealth );
|
||||
oldratio = self.health / self.maxhealth;
|
||||
continue;
|
||||
}
|
||||
else invulworthyhealthdrop = ( lastinvulratio - health_ratio ) > level.worthydamageratio;
|
||||
invulworthyhealthdrop = lastinvulratio - health_ratio > level.worthydamageratio;
|
||||
if ( self.health <= 1 )
|
||||
{
|
||||
self setnormalhealth( 2 / self.maxhealth );
|
||||
invulworthyhealthdrop = 1;
|
||||
/*
|
||||
/#
|
||||
if ( !isDefined( level.player_deathinvulnerabletimeout ) )
|
||||
{
|
||||
@ -227,68 +228,69 @@ playerhealthregen()
|
||||
level.player_deathinvulnerabletimeout = getTime() + getDvarInt( "player_deathInvulnerableTime" );
|
||||
#/
|
||||
}
|
||||
*/
|
||||
}
|
||||
oldratio = self.health / self.maxhealth;
|
||||
level notify( "hit_again" );
|
||||
health_add = 0;
|
||||
hurttime = getTime();
|
||||
self startfadingblur( 3, 0,8 );
|
||||
self startfadingblur( 3, 0.8 );
|
||||
if ( !invulworthyhealthdrop || playerinvultimescale <= 0 )
|
||||
{
|
||||
/*
|
||||
/#
|
||||
loghit( self.health, 0 );
|
||||
#/
|
||||
*/
|
||||
continue;
|
||||
}
|
||||
if ( self player_flag( "player_is_invulnerable" ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
self player_flag_set( "player_is_invulnerable" );
|
||||
level notify( "player_becoming_invulnerable" );
|
||||
if ( playerjustgotredflashing )
|
||||
{
|
||||
invultime = level.invultime_onshield;
|
||||
playerjustgotredflashing = 0;
|
||||
}
|
||||
else if ( veryhurt )
|
||||
{
|
||||
invultime = level.invultime_postshield;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( self player_flag( "player_is_invulnerable" ) )
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
self player_flag_set( "player_is_invulnerable" );
|
||||
level notify( "player_becoming_invulnerable" );
|
||||
if ( playerjustgotredflashing )
|
||||
{
|
||||
invultime = level.invultime_onshield;
|
||||
playerjustgotredflashing = 0;
|
||||
}
|
||||
else if ( veryhurt )
|
||||
{
|
||||
invultime = level.invultime_postshield;
|
||||
}
|
||||
else
|
||||
{
|
||||
invultime = level.invultime_preshield;
|
||||
}
|
||||
invultime *= playerinvultimescale;
|
||||
/#
|
||||
loghit( self.health, invultime );
|
||||
#/
|
||||
lastinvulratio = self.health / self.maxhealth;
|
||||
self thread playerinvul( invultime );
|
||||
}
|
||||
invultime = level.invultime_preshield;
|
||||
}
|
||||
invultime *= playerinvultimescale;
|
||||
/*
|
||||
/#
|
||||
loghit( self.health, invultime );
|
||||
#/
|
||||
*/
|
||||
lastinvulratio = self.health / self.maxhealth;
|
||||
self thread playerinvul( invultime );
|
||||
}
|
||||
}
|
||||
|
||||
playerinvul( timer )
|
||||
playerinvul( timer ) //checked matches cerberus output
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "disconnect" );
|
||||
if ( timer > 0 )
|
||||
{
|
||||
/*
|
||||
/#
|
||||
level.playerinvultimeend = getTime() + ( timer * 1000 );
|
||||
#/
|
||||
#/
|
||||
*/
|
||||
wait timer;
|
||||
}
|
||||
self player_flag_clear( "player_is_invulnerable" );
|
||||
}
|
||||
|
||||
healthoverlay()
|
||||
healthoverlay() //checked changed to match cerberus output
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
self endon( "noHealthOverlay" );
|
||||
@ -307,37 +309,36 @@ healthoverlay()
|
||||
overlay = self._health_overlay;
|
||||
self thread healthoverlay_remove( overlay );
|
||||
self thread watchhideredflashingoverlay( overlay );
|
||||
pulsetime = 0,8;
|
||||
for ( ;; )
|
||||
pulsetime = 0.8;
|
||||
while ( overlay.alpha > 0 )
|
||||
{
|
||||
if ( overlay.alpha > 0 )
|
||||
{
|
||||
overlay fadeovertime( 0,5 );
|
||||
}
|
||||
overlay fadeovertime( 0.5 );
|
||||
overlay.alpha = 0;
|
||||
self player_flag_wait( "player_has_red_flashing_overlay" );
|
||||
self redflashingoverlay( overlay );
|
||||
}
|
||||
}
|
||||
|
||||
fadefunc( overlay, severity, mult, hud_scaleonly )
|
||||
fadefunc( overlay, severity, mult, hud_scaleonly ) //checkec matches cerberus output
|
||||
{
|
||||
pulsetime = 0,8;
|
||||
scalemin = 0,5;
|
||||
fadeintime = pulsetime * 0,1;
|
||||
stayfulltime = pulsetime * ( 0,1 + ( severity * 0,2 ) );
|
||||
fadeouthalftime = pulsetime * ( 0,1 + ( severity * 0,1 ) );
|
||||
fadeoutfulltime = pulsetime * 0,3;
|
||||
pulsetime = 0.8;
|
||||
scalemin = 0.5;
|
||||
fadeintime = pulsetime * 0.1;
|
||||
stayfulltime = pulsetime * ( 0.1 + severity * 0.2 );
|
||||
fadeouthalftime = pulsetime * ( 0.1 + severity * 0.1 );
|
||||
fadeoutfulltime = pulsetime * 0.3;
|
||||
remainingtime = pulsetime - fadeintime - stayfulltime - fadeouthalftime - fadeoutfulltime;
|
||||
/*
|
||||
/#
|
||||
assert( remainingtime >= -0,001 );
|
||||
assert( remainingtime >= -0.001 );
|
||||
#/
|
||||
*/
|
||||
if ( remainingtime < 0 )
|
||||
{
|
||||
remainingtime = 0;
|
||||
}
|
||||
halfalpha = 0,8 + ( severity * 0,1 );
|
||||
leastalpha = 0,5 + ( severity * 0,3 );
|
||||
halfalpha = 0.8 + severity * 0.1;
|
||||
leastalpha = 0.5 + severity * 0.3;
|
||||
overlay fadeovertime( fadeintime );
|
||||
overlay.alpha = mult * 1;
|
||||
wait ( fadeintime + stayfulltime );
|
||||
@ -350,21 +351,21 @@ fadefunc( overlay, severity, mult, hud_scaleonly )
|
||||
wait remainingtime;
|
||||
}
|
||||
|
||||
watchhideredflashingoverlay( overlay )
|
||||
watchhideredflashingoverlay( overlay ) //checked matches cerberus output
|
||||
{
|
||||
self endon( "death_or_disconnect" );
|
||||
while ( isDefined( overlay ) )
|
||||
{
|
||||
self waittill( "clear_red_flashing_overlay" );
|
||||
self player_flag_clear( "player_has_red_flashing_overlay" );
|
||||
overlay fadeovertime( 0,05 );
|
||||
overlay fadeovertime( 0.05 );
|
||||
overlay.alpha = 0;
|
||||
setclientsysstate( "levelNotify", "rfo3", self );
|
||||
self notify( "hit_again" );
|
||||
}
|
||||
}
|
||||
|
||||
redflashingoverlay( overlay )
|
||||
redflashingoverlay( overlay ) //checked matches cerberus output
|
||||
{
|
||||
self endon( "hit_again" );
|
||||
self endon( "damage" );
|
||||
@ -377,57 +378,64 @@ redflashingoverlay( overlay )
|
||||
fadefunc( overlay, 1, 1, 0 );
|
||||
while ( getTime() < self.stopflashingbadlytime && isalive( self ) && isDefined( self.is_in_process_of_zombify ) && !self.is_in_process_of_zombify && isDefined( self.is_zombie ) && !self.is_zombie )
|
||||
{
|
||||
fadefunc( overlay, 0,9, 1, 0 );
|
||||
fadefunc( overlay, 0.9, 1, 0 );
|
||||
}
|
||||
if ( isDefined( self.is_in_process_of_zombify ) && !self.is_in_process_of_zombify && isDefined( self.is_zombie ) && !self.is_zombie )
|
||||
{
|
||||
if ( isalive( self ) )
|
||||
{
|
||||
fadefunc( overlay, 0,65, 0,8, 0 );
|
||||
fadefunc( overlay, 0.65, 0.8, 0 );
|
||||
}
|
||||
fadefunc( overlay, 0, 0,6, 1 );
|
||||
fadefunc( overlay, 0, 0.6, 1 );
|
||||
}
|
||||
}
|
||||
overlay fadeovertime( 0,5 );
|
||||
overlay fadeovertime( 0.5 );
|
||||
overlay.alpha = 0;
|
||||
self player_flag_clear( "player_has_red_flashing_overlay" );
|
||||
setclientsysstate( "levelNotify", "rfo3", self );
|
||||
wait 0,5;
|
||||
wait 0.5;
|
||||
self notify( "hit_again" );
|
||||
}
|
||||
|
||||
healthoverlay_remove( overlay )
|
||||
healthoverlay_remove( overlay ) //checked matches cerberus output
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
self waittill_any( "noHealthOverlay", "death" );
|
||||
overlay fadeovertime( 3,5 );
|
||||
overlay fadeovertime( 3.5 );
|
||||
overlay.alpha = 0;
|
||||
}
|
||||
|
||||
empty_kill_func( type, loc, point, attacker, amount )
|
||||
empty_kill_func( type, loc, point, attacker, amount ) //checked matches cerberus output
|
||||
{
|
||||
}
|
||||
|
||||
loghit( newhealth, invultime )
|
||||
loghit( newhealth, invultime ) //checked matches cerberus output
|
||||
{
|
||||
/*
|
||||
/#
|
||||
#/
|
||||
*/
|
||||
}
|
||||
|
||||
logregen( newhealth )
|
||||
logregen( newhealth ) //checked matches cerberus output
|
||||
{
|
||||
/*
|
||||
/#
|
||||
#/
|
||||
*/
|
||||
}
|
||||
|
||||
showhitlog()
|
||||
showhitlog() //checked matches cerberus output
|
||||
{
|
||||
/*
|
||||
/#
|
||||
#/
|
||||
*/
|
||||
}
|
||||
|
||||
playerhealthdebug()
|
||||
playerhealthdebug() //checked changed to match cerberus output
|
||||
{
|
||||
/*
|
||||
/#
|
||||
if ( getDvar( "scr_health_debug" ) == "" )
|
||||
{
|
||||
@ -442,10 +450,7 @@ playerhealthdebug()
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
wait 0,5;
|
||||
}
|
||||
wait 0.5;
|
||||
}
|
||||
thread printhealthdebug();
|
||||
while ( 1 )
|
||||
@ -454,19 +459,18 @@ playerhealthdebug()
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
wait 0,5;
|
||||
}
|
||||
wait 0.5;
|
||||
}
|
||||
level notify( "stop_printing_grenade_timers" );
|
||||
destroyhealthdebug();
|
||||
#/
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
printhealthdebug()
|
||||
printhealthdebug() //checked changed to match cerberus output
|
||||
{
|
||||
/*
|
||||
/#
|
||||
level notify( "stop_printing_health_bars" );
|
||||
level endon( "stop_printing_health_bars" );
|
||||
@ -484,8 +488,7 @@ printhealthdebug()
|
||||
{
|
||||
level.player_deathinvulnerabletimeout = 0;
|
||||
}
|
||||
i = 0;
|
||||
while ( i < level.healthbarkeys.size )
|
||||
for ( i = 0; i < level.healthbarkeys.size; i++ )
|
||||
{
|
||||
key = level.healthbarkeys[ i ];
|
||||
textelem = newhudelem();
|
||||
@ -505,7 +508,7 @@ printhealthdebug()
|
||||
bgbar.vertalign = "fullscreen";
|
||||
bgbar.maxwidth = 3;
|
||||
bgbar setshader( "white", bgbar.maxwidth, 10 );
|
||||
bgbar.color = vectorScale( ( 1, 1, 1 ), 0,5 );
|
||||
bgbar.color = vectorScale( ( 1, 1, 1 ), 0.5 );
|
||||
bar = newhudelem();
|
||||
bar.x = x + 80;
|
||||
bar.y = y + 2;
|
||||
@ -519,15 +522,13 @@ printhealthdebug()
|
||||
textelem.key = key;
|
||||
y += 10;
|
||||
level.healthbarhudelems[ key ] = textelem;
|
||||
i++;
|
||||
}
|
||||
flag_wait( "start_zombie_round_logic" );
|
||||
while ( 1 )
|
||||
{
|
||||
wait 0,05;
|
||||
wait 0.05;
|
||||
players = get_players();
|
||||
i = 0;
|
||||
while ( i < level.healthbarkeys.size && players.size > 0 )
|
||||
for ( i = 0; i < level.healthbarkeys.size && players.size > 0; i++ )
|
||||
{
|
||||
key = level.healthbarkeys[ i ];
|
||||
player = players[ 0 ];
|
||||
@ -540,12 +541,9 @@ printhealthdebug()
|
||||
{
|
||||
width = ( ( level.playerinvultimeend - getTime() ) / 1000 ) * 40;
|
||||
}
|
||||
else
|
||||
else if ( i == 2 )
|
||||
{
|
||||
if ( i == 2 )
|
||||
{
|
||||
width = ( ( level.player_deathinvulnerabletimeout - getTime() ) / 1000 ) * 40;
|
||||
}
|
||||
width = ( ( level.player_deathinvulnerabletimeout - getTime() ) / 1000 ) * 40;
|
||||
}
|
||||
width = int( max( width, 1 ) );
|
||||
width = int( min( width, 300 ) );
|
||||
@ -556,28 +554,29 @@ printhealthdebug()
|
||||
{
|
||||
bgbar.maxwidth = width + 2;
|
||||
bgbar setshader( "white", bgbar.maxwidth, 10 );
|
||||
bgbar.color = vectorScale( ( 1, 1, 1 ), 0,5 );
|
||||
bgbar.color = vectorScale( ( 1, 1, 1 ), 0.5 );
|
||||
}
|
||||
i++;
|
||||
}
|
||||
#/
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
destroyhealthdebug()
|
||||
destroyhealthdebug() //checked changed to match cerberus output
|
||||
{
|
||||
/*
|
||||
/#
|
||||
if ( !isDefined( level.healthbarhudelems ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
i = 0;
|
||||
while ( i < level.healthbarkeys.size )
|
||||
while ( i = 0; i < level.healthbarkeys.size; i++ )
|
||||
{
|
||||
level.healthbarhudelems[ level.healthbarkeys[ i ] ].bgbar destroy();
|
||||
level.healthbarhudelems[ level.healthbarkeys[ i ] ].bar destroy();
|
||||
level.healthbarhudelems[ level.healthbarkeys[ i ] ] destroy();
|
||||
i++;
|
||||
#/
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
#include maps/mp/_utility;
|
||||
#include common_scripts/utility;
|
||||
|
||||
init()
|
||||
init() //checked matches cerberus output
|
||||
{
|
||||
if ( !isDefined( level.powered_items ) )
|
||||
{
|
||||
@ -16,36 +16,36 @@ init()
|
||||
level.local_power = [];
|
||||
}
|
||||
thread standard_powered_items();
|
||||
/*
|
||||
/#
|
||||
thread debug_powered_items();
|
||||
#/
|
||||
*/
|
||||
}
|
||||
|
||||
debug_powered_items()
|
||||
debug_powered_items() //checked changed to match cerberus output
|
||||
{
|
||||
/*
|
||||
/#
|
||||
while ( 1 )
|
||||
{
|
||||
while ( getDvarInt( #"EB512CB7" ) )
|
||||
if ( getDvarInt( #"EB512CB7" ) )
|
||||
{
|
||||
while ( isDefined( level.local_power ) )
|
||||
if ( isDefined( level.local_power ) )
|
||||
{
|
||||
_a32 = level.local_power;
|
||||
_k32 = getFirstArrayKey( _a32 );
|
||||
while ( isDefined( _k32 ) )
|
||||
foreach(localpower in level.local_power)
|
||||
{
|
||||
localpower = _a32[ _k32 ];
|
||||
circle( localpower.origin, localpower.radius, ( 0, 0, 1 ), 0, 1, 1 );
|
||||
_k32 = getNextArrayKey( _a32, _k32 );
|
||||
circle( localpower.origin, localpower.radius, ( 1, 0, 0 ), 0, 1, 1 );
|
||||
}
|
||||
}
|
||||
}
|
||||
wait 0,05;
|
||||
wait 0.05;
|
||||
#/
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
watch_global_power()
|
||||
watch_global_power() //checked matches cerberus output
|
||||
{
|
||||
while ( 1 )
|
||||
{
|
||||
@ -56,63 +56,49 @@ watch_global_power()
|
||||
}
|
||||
}
|
||||
|
||||
standard_powered_items()
|
||||
standard_powered_items() //checked partially changed to match cerberus output //did not use foreach with continue to prevent infinite loop bug
|
||||
{
|
||||
flag_wait( "start_zombie_round_logic" );
|
||||
vending_triggers = getentarray( "zombie_vending", "targetname" );
|
||||
_a67 = vending_triggers;
|
||||
_k67 = getFirstArrayKey( _a67 );
|
||||
while ( isDefined( _k67 ) )
|
||||
i = 0;
|
||||
while ( i < vending_triggers.size)
|
||||
{
|
||||
trigger = _a67[ _k67 ];
|
||||
if ( trigger.script_noteworthy == "specialty_weapupgrade" )
|
||||
if ( vending_triggers[ i ].script_noteworthy == "specialty_weapupgrade" )
|
||||
{
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
powered_on = maps/mp/zombies/_zm_perks::get_perk_machine_start_state( trigger.script_noteworthy );
|
||||
add_powered_item( ::perk_power_on, ::perk_power_off, ::perk_range, ::cost_low_if_local, 0, powered_on, trigger );
|
||||
}
|
||||
_k67 = getNextArrayKey( _a67, _k67 );
|
||||
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 ] );
|
||||
i++;
|
||||
}
|
||||
pack_a_punch = getentarray( "specialty_weapupgrade", "script_noteworthy" );
|
||||
_a77 = pack_a_punch;
|
||||
_k77 = getFirstArrayKey( _a77 );
|
||||
while ( isDefined( _k77 ) )
|
||||
foreach ( trigger in pack_a_punch )
|
||||
{
|
||||
trigger = _a77[ _k77 ];
|
||||
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 );
|
||||
_k77 = getNextArrayKey( _a77, _k77 );
|
||||
}
|
||||
zombie_doors = getentarray( "zombie_door", "targetname" );
|
||||
_a86 = zombie_doors;
|
||||
_k86 = getFirstArrayKey( _a86 );
|
||||
while ( isDefined( _k86 ) )
|
||||
foreach ( door in zombie_doors )
|
||||
{
|
||||
door = _a86[ _k86 ];
|
||||
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 );
|
||||
}
|
||||
else
|
||||
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;
|
||||
if ( isDefined( level.power_local_doors_globally ) && !level.power_local_doors_globally )
|
||||
{
|
||||
power_sources = 0;
|
||||
if ( isDefined( level.power_local_doors_globally ) && !level.power_local_doors_globally )
|
||||
{
|
||||
power_sources = 1;
|
||||
}
|
||||
add_powered_item( ::door_local_power_on, ::door_local_power_off, ::door_range, ::cost_door, power_sources, 0, door );
|
||||
power_sources = 1;
|
||||
}
|
||||
add_powered_item( ::door_local_power_on, ::door_local_power_off, ::door_range, ::cost_door, power_sources, 0, door );
|
||||
}
|
||||
_k86 = getNextArrayKey( _a86, _k86 );
|
||||
}
|
||||
thread watch_global_power();
|
||||
}
|
||||
|
||||
add_powered_item( power_on_func, power_off_func, range_func, cost_func, power_sources, self_powered, target )
|
||||
add_powered_item( power_on_func, power_off_func, range_func, cost_func, power_sources, self_powered, target ) //checked matches cerberus output
|
||||
{
|
||||
powered = spawnstruct();
|
||||
powered.power_on_func = power_on_func;
|
||||
@ -133,21 +119,18 @@ add_powered_item( power_on_func, power_off_func, range_func, cost_func, power_so
|
||||
return powered;
|
||||
}
|
||||
|
||||
remove_powered_item( powered )
|
||||
remove_powered_item( powered ) //checked matches cerberus output
|
||||
{
|
||||
arrayremovevalue( level.powered_items, powered, 0 );
|
||||
}
|
||||
|
||||
add_temp_powered_item( power_on_func, power_off_func, range_func, cost_func, power_sources, self_powered, target )
|
||||
add_temp_powered_item( power_on_func, power_off_func, range_func, cost_func, power_sources, self_powered, target ) //checked changed to match cerberus output
|
||||
{
|
||||
powered = add_powered_item( power_on_func, power_off_func, range_func, cost_func, power_sources, self_powered, target );
|
||||
while ( isDefined( level.local_power ) )
|
||||
if ( isDefined( level.local_power ) )
|
||||
{
|
||||
_a140 = level.local_power;
|
||||
_k140 = getFirstArrayKey( _a140 );
|
||||
while ( isDefined( _k140 ) )
|
||||
foreach ( localpower in level.local_power )
|
||||
{
|
||||
localpower = _a140[ _k140 ];
|
||||
if ( powered [[ powered.range_func ]]( 1, localpower.origin, localpower.radius ) )
|
||||
{
|
||||
powered change_power( 1, localpower.origin, localpower.radius );
|
||||
@ -157,24 +140,20 @@ add_temp_powered_item( power_on_func, power_off_func, range_func, cost_func, pow
|
||||
}
|
||||
localpower.added_list[ localpower.added_list.size ] = powered;
|
||||
}
|
||||
_k140 = getNextArrayKey( _a140, _k140 );
|
||||
}
|
||||
}
|
||||
thread watch_temp_powered_item( powered );
|
||||
return powered;
|
||||
}
|
||||
|
||||
watch_temp_powered_item( powered )
|
||||
watch_temp_powered_item( powered ) //checked changed to match cerberus output
|
||||
{
|
||||
powered.target waittill( "death" );
|
||||
remove_powered_item( powered );
|
||||
while ( isDefined( level.local_power ) )
|
||||
if ( isDefined( level.local_power ) )
|
||||
{
|
||||
_a161 = level.local_power;
|
||||
_k161 = getFirstArrayKey( _a161 );
|
||||
while ( isDefined( _k161 ) )
|
||||
foreach ( localpower in level.local_power )
|
||||
{
|
||||
localpower = _a161[ _k161 ];
|
||||
if ( isDefined( localpower.added_list ) )
|
||||
{
|
||||
arrayremovevalue( localpower.added_list, powered, 0 );
|
||||
@ -183,16 +162,14 @@ watch_temp_powered_item( powered )
|
||||
{
|
||||
arrayremovevalue( localpower.enabled_list, powered, 0 );
|
||||
}
|
||||
_k161 = getNextArrayKey( _a161, _k161 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
change_power_in_radius( delta, origin, radius )
|
||||
change_power_in_radius( delta, origin, radius ) //checked changed to match cerberus output
|
||||
{
|
||||
changed_list = [];
|
||||
i = 0;
|
||||
while ( i < level.powered_items.size )
|
||||
for ( i = 0; i < level.powered_items.size; i++ )
|
||||
{
|
||||
powered = level.powered_items[ i ];
|
||||
if ( powered.power_sources != 2 )
|
||||
@ -203,12 +180,11 @@ change_power_in_radius( delta, origin, radius )
|
||||
changed_list[ changed_list.size ] = powered;
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return changed_list;
|
||||
}
|
||||
|
||||
change_power( delta, origin, radius )
|
||||
change_power( delta, origin, radius ) //checked changed to match cerberus output
|
||||
{
|
||||
if ( delta > 0 )
|
||||
{
|
||||
@ -219,70 +195,66 @@ change_power( delta, origin, radius )
|
||||
}
|
||||
self.powered_count++;
|
||||
}
|
||||
else
|
||||
else if ( delta < 0 )
|
||||
{
|
||||
if ( delta < 0 )
|
||||
if ( self.power )
|
||||
{
|
||||
if ( self.power )
|
||||
{
|
||||
self.power = 0;
|
||||
self [[ self.power_off_func ]]( origin, radius );
|
||||
}
|
||||
self.depowered_count++;
|
||||
self.power = 0;
|
||||
self [[ self.power_off_func ]]( origin, radius );
|
||||
}
|
||||
self.depowered_count++;
|
||||
}
|
||||
}
|
||||
|
||||
revert_power_to_list( delta, origin, radius, powered_list )
|
||||
revert_power_to_list( delta, origin, radius, powered_list ) //checked changed to match cerberus output
|
||||
{
|
||||
i = 0;
|
||||
while ( i < powered_list.size )
|
||||
for ( i = 0; i < powered_list.size; i++ )
|
||||
{
|
||||
powered = powered_list[ i ];
|
||||
powered revert_power( delta, origin, radius );
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
revert_power( delta, origin, radius, powered_list )
|
||||
revert_power( delta, origin, radius, powered_list ) //checked changed to match cerberus output
|
||||
{
|
||||
if ( delta > 0 )
|
||||
{
|
||||
self.depowered_count--;
|
||||
|
||||
/*
|
||||
/#
|
||||
assert( self.depowered_count >= 0, "Depower underflow in power system" );
|
||||
#/
|
||||
*/
|
||||
if ( self.depowered_count == 0 && self.powered_count > 0 && !self.power )
|
||||
{
|
||||
self.power = 1;
|
||||
self [[ self.power_on_func ]]( origin, radius );
|
||||
}
|
||||
}
|
||||
else
|
||||
if ( delta < 0 )
|
||||
{
|
||||
if ( delta < 0 )
|
||||
{
|
||||
self.powered_count--;
|
||||
|
||||
self.powered_count--;
|
||||
/*
|
||||
/#
|
||||
assert( self.powered_count >= 0, "Repower underflow in power system" );
|
||||
assert( self.powered_count >= 0, "Repower underflow in power system" );
|
||||
#/
|
||||
if ( self.powered_count == 0 && self.power )
|
||||
{
|
||||
self.power = 0;
|
||||
self [[ self.power_off_func ]]( origin, radius );
|
||||
}
|
||||
*/
|
||||
if ( self.powered_count == 0 && self.power )
|
||||
{
|
||||
self.power = 0;
|
||||
self [[ self.power_off_func ]]( origin, radius );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
add_local_power( origin, radius )
|
||||
add_local_power( origin, radius ) //checked matches cerberus output
|
||||
{
|
||||
localpower = spawnstruct();
|
||||
/*
|
||||
/#
|
||||
println( "ZM POWER: local power on at " + origin + " radius " + radius + "\n" );
|
||||
#/
|
||||
*/
|
||||
localpower.origin = origin;
|
||||
localpower.radius = radius;
|
||||
localpower.enabled_list = change_power_in_radius( 1, origin, radius );
|
||||
@ -294,7 +266,7 @@ add_local_power( origin, radius )
|
||||
return localpower;
|
||||
}
|
||||
|
||||
move_local_power( localpower, origin )
|
||||
move_local_power( localpower, origin ) //checked partially changed to match cerberus output //did not change while loop to for loop to prevent infinite continue loop bug
|
||||
{
|
||||
changed_list = [];
|
||||
i = 0;
|
||||
@ -306,7 +278,7 @@ move_local_power( localpower, origin )
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
else waspowered = isinarray( localpower.enabled_list, powered );
|
||||
waspowered = isinarray( localpower.enabled_list, powered );
|
||||
ispowered = powered [[ powered.range_func ]]( 1, origin, localpower.radius );
|
||||
if ( ispowered && !waspowered )
|
||||
{
|
||||
@ -315,13 +287,10 @@ move_local_power( localpower, origin )
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
if ( !ispowered && waspowered )
|
||||
{
|
||||
if ( !ispowered && waspowered )
|
||||
{
|
||||
powered revert_power( -1, localpower.origin, localpower.radius, localpower.enabled_list );
|
||||
arrayremovevalue( localpower.enabled_list, powered, 0 );
|
||||
}
|
||||
powered revert_power( -1, localpower.origin, localpower.radius, localpower.enabled_list );
|
||||
arrayremovevalue( localpower.enabled_list, powered, 0 );
|
||||
}
|
||||
i++;
|
||||
}
|
||||
@ -329,11 +298,13 @@ move_local_power( localpower, origin )
|
||||
return localpower;
|
||||
}
|
||||
|
||||
end_local_power( localpower )
|
||||
end_local_power( localpower ) //checked matches cerberus output
|
||||
{
|
||||
/*
|
||||
/#
|
||||
println( "ZM POWER: local power off at " + localpower.origin + " radius " + localpower.radius + "\n" );
|
||||
#/
|
||||
*/
|
||||
if ( isDefined( localpower.enabled_list ) )
|
||||
{
|
||||
revert_power_to_list( -1, localpower.origin, localpower.radius, localpower.enabled_list );
|
||||
@ -347,26 +318,22 @@ end_local_power( localpower )
|
||||
arrayremovevalue( level.local_power, localpower, 0 );
|
||||
}
|
||||
|
||||
has_local_power( origin )
|
||||
has_local_power( origin ) //checked changed to match cerberus output
|
||||
{
|
||||
while ( isDefined( level.local_power ) )
|
||||
if ( isDefined( level.local_power ) )
|
||||
{
|
||||
_a309 = level.local_power;
|
||||
_k309 = getFirstArrayKey( _a309 );
|
||||
while ( isDefined( _k309 ) )
|
||||
foreach ( localpower in level.local_power )
|
||||
{
|
||||
localpower = _a309[ _k309 ];
|
||||
if ( distancesquared( localpower.origin, origin ) < ( localpower.radius * localpower.radius ) )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
_k309 = getNextArrayKey( _a309, _k309 );
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
get_powered_item_cost()
|
||||
get_powered_item_cost() //checked matches cerberus output
|
||||
{
|
||||
if ( isDefined( self.power ) && !self.power )
|
||||
{
|
||||
@ -385,40 +352,31 @@ get_powered_item_cost()
|
||||
return cost / power_sources;
|
||||
}
|
||||
|
||||
get_local_power_cost( localpower )
|
||||
get_local_power_cost( localpower ) //checked changed to match cerberus output
|
||||
{
|
||||
cost = 0;
|
||||
while ( isDefined( localpower ) && isDefined( localpower.enabled_list ) )
|
||||
if ( isDefined( localpower ) && isDefined( localpower.enabled_list ) )
|
||||
{
|
||||
_a340 = localpower.enabled_list;
|
||||
_k340 = getFirstArrayKey( _a340 );
|
||||
while ( isDefined( _k340 ) )
|
||||
foreach ( powered in localpower.enabled_list )
|
||||
{
|
||||
powered = _a340[ _k340 ];
|
||||
cost += powered get_powered_item_cost();
|
||||
_k340 = getNextArrayKey( _a340, _k340 );
|
||||
}
|
||||
}
|
||||
while ( isDefined( localpower ) && isDefined( localpower.added_list ) )
|
||||
else if ( isDefined( localpower ) && isDefined( localpower.added_list ) )
|
||||
{
|
||||
_a345 = localpower.added_list;
|
||||
_k345 = getFirstArrayKey( _a345 );
|
||||
while ( isDefined( _k345 ) )
|
||||
foreach ( powered in localpower.added_list )
|
||||
{
|
||||
powered = _a345[ _k345 ];
|
||||
cost += powered get_powered_item_cost();
|
||||
_k345 = getNextArrayKey( _a345, _k345 );
|
||||
}
|
||||
}
|
||||
return cost;
|
||||
}
|
||||
|
||||
set_global_power( on_off )
|
||||
set_global_power( on_off ) //checked changed to match cerberus output
|
||||
{
|
||||
maps/mp/_demo::bookmark( "zm_power", getTime(), undefined, undefined, 1 );
|
||||
level._power_global = on_off;
|
||||
i = 0;
|
||||
while ( i < level.powered_items.size )
|
||||
for ( i = 0; i < level.powered_items.size; i++ )
|
||||
{
|
||||
powered = level.powered_items[ i ];
|
||||
if ( isDefined( powered.target ) && powered.power_sources != 1 )
|
||||
@ -426,17 +384,18 @@ set_global_power( on_off )
|
||||
powered global_power( on_off );
|
||||
wait_network_frame();
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
global_power( on_off )
|
||||
global_power( on_off ) //checked matches cerberus output
|
||||
{
|
||||
if ( on_off )
|
||||
{
|
||||
/*
|
||||
/#
|
||||
println( "ZM POWER: global power on\n" );
|
||||
#/
|
||||
*/
|
||||
if ( !self.power )
|
||||
{
|
||||
self.power = 1;
|
||||
@ -446,14 +405,17 @@ global_power( on_off )
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
/#
|
||||
println( "ZM POWER: global power off\n" );
|
||||
#/
|
||||
*/
|
||||
self.powered_count--;
|
||||
|
||||
/*
|
||||
/#
|
||||
assert( self.powered_count >= 0, "Repower underflow in power system" );
|
||||
#/
|
||||
*/
|
||||
if ( self.powered_count == 0 && self.power )
|
||||
{
|
||||
self.power = 0;
|
||||
@ -462,15 +424,15 @@ global_power( on_off )
|
||||
}
|
||||
}
|
||||
|
||||
never_power_on( origin, radius )
|
||||
never_power_on( origin, radius ) //checked matches cerberus output
|
||||
{
|
||||
}
|
||||
|
||||
never_power_off( origin, radius )
|
||||
never_power_off( origin, radius ) //checked matches cerberus output
|
||||
{
|
||||
}
|
||||
|
||||
cost_negligible()
|
||||
cost_negligible() //checked matches cerberus output
|
||||
{
|
||||
if ( isDefined( self.one_time_cost ) )
|
||||
{
|
||||
@ -481,7 +443,7 @@ cost_negligible()
|
||||
return 0;
|
||||
}
|
||||
|
||||
cost_low_if_local()
|
||||
cost_low_if_local() //checked matches cerberus output
|
||||
{
|
||||
if ( isDefined( self.one_time_cost ) )
|
||||
{
|
||||
@ -500,7 +462,7 @@ cost_low_if_local()
|
||||
return 1;
|
||||
}
|
||||
|
||||
cost_high()
|
||||
cost_high() //checked matches cerberus output
|
||||
{
|
||||
if ( isDefined( self.one_time_cost ) )
|
||||
{
|
||||
@ -511,56 +473,64 @@ cost_high()
|
||||
return 10;
|
||||
}
|
||||
|
||||
door_range( delta, origin, radius )
|
||||
door_range( delta, origin, radius ) //checked matches cerberus output
|
||||
{
|
||||
if ( delta < 0 )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if ( distancesquared( self.target.origin, origin ) < ( radius * radius ) )
|
||||
if ( distancesquared( self.target.origin, origin ) < radius * radius )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
door_power_on( origin, radius )
|
||||
door_power_on( origin, radius ) //checked matches cerberus output
|
||||
{
|
||||
/*
|
||||
/#
|
||||
println( "^1ZM POWER: door on\n" );
|
||||
#/
|
||||
#/
|
||||
*/
|
||||
self.target.power_on = 1;
|
||||
self.target notify( "power_on" );
|
||||
}
|
||||
|
||||
door_power_off( origin, radius )
|
||||
door_power_off( origin, radius ) //checked matches cerberus output
|
||||
{
|
||||
/*
|
||||
/#
|
||||
println( "^1ZM POWER: door off\n" );
|
||||
#/
|
||||
*/
|
||||
self.target notify( "power_off" );
|
||||
self.target.power_on = 0;
|
||||
}
|
||||
|
||||
door_local_power_on( origin, radius )
|
||||
door_local_power_on( origin, radius ) //checked matches cerberus output
|
||||
{
|
||||
/*
|
||||
/#
|
||||
println( "^1ZM POWER: door on (local)\n" );
|
||||
#/
|
||||
*/
|
||||
self.target.local_power_on = 1;
|
||||
self.target notify( "local_power_on" );
|
||||
}
|
||||
|
||||
door_local_power_off( origin, radius )
|
||||
door_local_power_off( origin, radius ) //checked matches cerberus output
|
||||
{
|
||||
/*
|
||||
/#
|
||||
println( "^1ZM POWER: door off (local)\n" );
|
||||
#/
|
||||
*/
|
||||
self.target notify( "local_power_off" );
|
||||
self.target.local_power_on = 0;
|
||||
}
|
||||
|
||||
cost_door()
|
||||
cost_door() //checked matches cerberus output
|
||||
{
|
||||
if ( isDefined( self.target.power_cost ) )
|
||||
{
|
||||
@ -580,7 +550,7 @@ cost_door()
|
||||
return 0;
|
||||
}
|
||||
|
||||
zombie_range( delta, origin, radius )
|
||||
zombie_range( delta, origin, radius ) //checked matches cerberus output
|
||||
{
|
||||
if ( delta > 0 )
|
||||
{
|
||||
@ -595,30 +565,32 @@ zombie_range( delta, origin, radius )
|
||||
return 1;
|
||||
}
|
||||
|
||||
zombie_power_off( origin, radius )
|
||||
zombie_power_off( origin, radius ) //checked changed to match cerberus output
|
||||
{
|
||||
/*
|
||||
/#
|
||||
println( "^1ZM POWER: zombies off\n" );
|
||||
#/
|
||||
i = 0;
|
||||
while ( i < self.zombies.size )
|
||||
*/
|
||||
for ( i = 0; i < self.zombies.size; i++ )
|
||||
{
|
||||
self.zombies[ i ] thread stun_zombie();
|
||||
wait 0,05;
|
||||
i++;
|
||||
wait 0.05;
|
||||
}
|
||||
}
|
||||
|
||||
stun_zombie()
|
||||
stun_zombie() //checked matches cerberus output
|
||||
{
|
||||
self endon( "death" );
|
||||
self notify( "stun_zombie" );
|
||||
self endon( "stun_zombie" );
|
||||
if ( self.health <= 0 )
|
||||
{
|
||||
/*
|
||||
/#
|
||||
iprintln( "trying to stun a dead zombie" );
|
||||
#/
|
||||
*/
|
||||
return;
|
||||
}
|
||||
if ( isDefined( self.ignore_inert ) && self.ignore_inert )
|
||||
@ -633,7 +605,7 @@ stun_zombie()
|
||||
self thread maps/mp/zombies/_zm_ai_basic::start_inert();
|
||||
}
|
||||
|
||||
perk_range( delta, origin, radius )
|
||||
perk_range( delta, origin, radius ) //checked changed to match cerberus output
|
||||
{
|
||||
if ( isDefined( self.target ) )
|
||||
{
|
||||
@ -642,14 +614,11 @@ perk_range( delta, origin, radius )
|
||||
{
|
||||
perkorigin = self.target.realorigin;
|
||||
}
|
||||
else
|
||||
else if ( isDefined( self.target.disabled ) && self.target.disabled )
|
||||
{
|
||||
if ( isDefined( self.target.disabled ) && self.target.disabled )
|
||||
{
|
||||
perkorigin += vectorScale( ( 0, 0, 1 ), 10000 );
|
||||
}
|
||||
perkorigin += vectorScale( ( 0, 0, 1 ), 10000 );
|
||||
}
|
||||
if ( distancesquared( perkorigin, origin ) < ( radius * radius ) )
|
||||
if ( distancesquared( perkorigin, origin ) < radius * radius )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
@ -657,16 +626,18 @@ perk_range( delta, origin, radius )
|
||||
return 0;
|
||||
}
|
||||
|
||||
perk_power_on( origin, radius )
|
||||
perk_power_on( origin, radius ) //checked matches cerberus output
|
||||
{
|
||||
/*
|
||||
/#
|
||||
println( "^1ZM POWER: perk " + self.target maps/mp/zombies/_zm_perks::getvendingmachinenotify() + " on\n" );
|
||||
#/
|
||||
*/
|
||||
level notify( self.target maps/mp/zombies/_zm_perks::getvendingmachinenotify() + "_on" );
|
||||
maps/mp/zombies/_zm_perks::perk_unpause( self.target.script_noteworthy );
|
||||
}
|
||||
|
||||
perk_power_off( origin, radius )
|
||||
perk_power_off( origin, radius ) //checked matches cerberus output
|
||||
{
|
||||
notify_name = self.target maps/mp/zombies/_zm_perks::getvendingmachinenotify();
|
||||
if ( isDefined( notify_name ) && notify_name == "revive" )
|
||||
@ -676,9 +647,11 @@ perk_power_off( origin, radius )
|
||||
return;
|
||||
}
|
||||
}
|
||||
/*
|
||||
/#
|
||||
println( "^1ZM POWER: perk " + self.target.script_noteworthy + " off\n" );
|
||||
#/
|
||||
*/
|
||||
self.target notify( "death" );
|
||||
self.target thread maps/mp/zombies/_zm_perks::vending_trigger_think();
|
||||
if ( isDefined( self.target.perk_hum ) )
|
||||
@ -689,7 +662,7 @@ perk_power_off( origin, radius )
|
||||
level notify( self.target maps/mp/zombies/_zm_perks::getvendingmachinenotify() + "_off" );
|
||||
}
|
||||
|
||||
pap_range( delta, origin, radius )
|
||||
pap_range( delta, origin, radius ) //checked changed to match cerberus output
|
||||
{
|
||||
if ( isDefined( self.target ) )
|
||||
{
|
||||
@ -698,12 +671,9 @@ pap_range( delta, origin, radius )
|
||||
{
|
||||
paporigin = self.target.realorigin;
|
||||
}
|
||||
else
|
||||
else if ( isDefined( self.target.disabled ) && self.target.disabled )
|
||||
{
|
||||
if ( isDefined( self.target.disabled ) && self.target.disabled )
|
||||
{
|
||||
paporigin += vectorScale( ( 0, 0, 1 ), 10000 );
|
||||
}
|
||||
paporigin += vectorScale( ( 0, 0, 1 ), 10000 );
|
||||
}
|
||||
if ( distancesquared( paporigin, origin ) < ( radius * radius ) )
|
||||
{
|
||||
@ -713,25 +683,29 @@ pap_range( delta, origin, radius )
|
||||
return 0;
|
||||
}
|
||||
|
||||
pap_power_on( origin, radius )
|
||||
pap_power_on( origin, radius ) //checked matches cerberus output
|
||||
{
|
||||
/*
|
||||
/#
|
||||
println( "^1ZM POWER: PaP on\n" );
|
||||
#/
|
||||
*/
|
||||
level notify( "Pack_A_Punch_on" );
|
||||
}
|
||||
|
||||
pap_power_off( origin, radius )
|
||||
pap_power_off( origin, radius ) //checked matches cerberus output
|
||||
{
|
||||
/*
|
||||
/#
|
||||
println( "^1ZM POWER: PaP off\n" );
|
||||
#/
|
||||
*/
|
||||
level notify( "Pack_A_Punch_off" );
|
||||
self.target notify( "death" );
|
||||
self.target thread maps/mp/zombies/_zm_perks::vending_weapon_upgrade();
|
||||
}
|
||||
|
||||
pap_is_on()
|
||||
pap_is_on() //checked matches cerberus output
|
||||
{
|
||||
if ( isDefined( self.powered ) )
|
||||
{
|
||||
@ -739,3 +713,4 @@ pap_is_on()
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -214,6 +214,12 @@ zombie_spawn_init( animname_set ) //checked partially changed to match cerberus
|
||||
self.badplaceawareness = 0;
|
||||
self.chatinitialized = 0;
|
||||
self.a.disablepain = 1;
|
||||
|
||||
self.no_damage_points = 0; //wasn't defined anywhere defining here
|
||||
self.no_eye_glow = 0; //wasn't defined anywhere defining here
|
||||
self.create_eyes = 1; //wasn't defined anywhere defining here
|
||||
self.is_inert = 0; //wasn't defined anywhere defining here
|
||||
|
||||
self disable_react();
|
||||
if ( isDefined( level.zombie_health ) )
|
||||
{
|
||||
@ -382,6 +388,11 @@ zombie_think() //checked changed to match cerberus output
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( ( level.errorDisplayLevel == 0 || level.errorDisplayLevel == 3 ) && level.debugLogging_zm_spawner )
|
||||
{
|
||||
logline1 = "INFO: _zm_spawner.gsc zombie_think() calls do_zombie_spawn()" + "\n";
|
||||
logprint( logline1 );
|
||||
}
|
||||
self thread do_zombie_spawn();
|
||||
}
|
||||
self waittill( "risen", find_flesh_struct_string );
|
||||
@ -580,15 +591,24 @@ zombie_goto_entrance( node, endon_bad_path ) //checked matches cerberus output
|
||||
self.barricade_enter = 0;
|
||||
}
|
||||
|
||||
zombie_assure_node() //checked changed to match cerberus output
|
||||
zombie_assure_node() //checked changed to match cerberus output //changed for loops to while loops to prevent infinite loops with continues
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "goal" );
|
||||
level endon( "intermission" );
|
||||
start_pos = self.origin;
|
||||
if ( ( level.errorDisplayLevel == 0 || level.errorDisplayLevel == 1 ) && level.debugLogging_zm_spawner )
|
||||
{
|
||||
if ( !isDefined( self.entrance_nodes ) )
|
||||
{
|
||||
logline12 = "ERROR: _zm_spawner.gsc zombie_assure_node() self.entrance_nodes is undefined! " + "\n";
|
||||
logprint( logline12 );
|
||||
}
|
||||
}
|
||||
if ( isDefined( self.entrance_nodes ) )
|
||||
{
|
||||
for ( i = 0; i < self.entrance_nodes.size; i++ )
|
||||
i = 0;
|
||||
while ( i < self.entrance_nodes.size )
|
||||
{
|
||||
if ( self zombie_bad_path() )
|
||||
{
|
||||
@ -601,6 +621,7 @@ zombie_assure_node() //checked changed to match cerberus output
|
||||
level thread draw_line_ent_to_pos( self, self.entrance_nodes[ i ].origin, "goal" );
|
||||
self.first_node = self.entrance_nodes[ i ];
|
||||
self setgoalpos( self.entrance_nodes[ i ].origin );
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
return;
|
||||
@ -611,7 +632,8 @@ zombie_assure_node() //checked changed to match cerberus output
|
||||
if ( isDefined( nodes ) )
|
||||
{
|
||||
self.entrance_nodes = nodes;
|
||||
for ( i = 0; i < self.entrance_nodes.size; i++ )
|
||||
i = 0;
|
||||
while ( i < self.entrance_nodes.size)
|
||||
{
|
||||
if ( self zombie_bad_path() )
|
||||
{
|
||||
@ -624,8 +646,10 @@ zombie_assure_node() //checked changed to match cerberus output
|
||||
level thread draw_line_ent_to_pos( self, self.entrance_nodes[ i ].origin, "goal" );
|
||||
self.first_node = self.entrance_nodes[ i ];
|
||||
self setgoalpos( self.entrance_nodes[ i ].origin );
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
i++;
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -668,6 +692,11 @@ zombie_bad_path_timeout() //checked matches cerberus output
|
||||
|
||||
tear_into_building() //checked changed to match cerberus output
|
||||
{
|
||||
if ( ( level.errorDisplayLevel == 0 || level.errorDisplayLevel == 3 ) && level.debugLogging_zm_spawner )
|
||||
{
|
||||
logline13 = "INFO: _zm_spawner.gsc tear_into_building() is called " + "\n";
|
||||
logprint( logline13 );
|
||||
}
|
||||
self endon( "death" );
|
||||
self endon( "teleporting" );
|
||||
self zombie_history( "tear_into_building -> start" );
|
||||
@ -791,7 +820,7 @@ tear_into_building() //checked changed to match cerberus output
|
||||
self.first_node.attack_spots_taken[ i ] = 0;
|
||||
i++;
|
||||
}
|
||||
level notify( "last_board_torn" );
|
||||
level notify( "last_board_torn", self.first_node.zbarrier.origin );
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -1656,17 +1685,20 @@ derive_damage_refs( point ) //checked changed to match cerberus output
|
||||
init_gib_tags();
|
||||
}
|
||||
closesttag = undefined;
|
||||
for ( i = 0; i < level.gib_tags.size; i++ )
|
||||
i = 0;
|
||||
while ( i < level.gib_tags.size )
|
||||
{
|
||||
if ( !isDefined( closesttag ) )
|
||||
{
|
||||
closesttag = level.gib_tags[ i ];
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
if ( distancesquared( point, self gettagorigin( level.gib_tags[ i ] ) ) < distancesquared( point, self gettagorigin( closesttag ) ) )
|
||||
{
|
||||
closesttag = level.gib_tags[ i ];
|
||||
}
|
||||
i++;
|
||||
}
|
||||
refs = [];
|
||||
if ( closesttag != "J_SpineLower" || closesttag == "J_SpineUpper" || closesttag == "J_Spine4" )
|
||||
@ -1924,7 +1956,7 @@ zombie_death_animscript() //checked changed to match cerberus output
|
||||
}
|
||||
if ( self.damagemod == "MOD_GRENADE" || self.damagemod == "MOD_GRENADE_SPLASH" )
|
||||
{
|
||||
level notify( "zombie_grenade_death" );
|
||||
level notify( "zombie_grenade_death", self.origin );
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -2383,7 +2415,7 @@ zombie_death_event( zombie ) //checked changed to match cerberus output
|
||||
zombie.attacker maps/mp/zombies/_zm_audio::create_and_play_dialog( "kill", "damage" );
|
||||
}
|
||||
}
|
||||
zombie.attacker notify( "zom_kill" );
|
||||
zombie.attacker notify( "zom_kill", zombie );
|
||||
damageloc = zombie.damagelocation;
|
||||
damagemod = zombie.damagemod;
|
||||
attacker = zombie.attacker;
|
||||
@ -2606,7 +2638,8 @@ zombie_pathing_get_breadcrumb( origin, breadcrumbs, bad_crumbs, pick_random ) //
|
||||
#/
|
||||
}
|
||||
*/
|
||||
for ( i = 0; i < breadcrumbs.size; i++ )
|
||||
i = 0;
|
||||
while ( i < breadcrumbs.size )
|
||||
{
|
||||
if ( pick_random )
|
||||
{
|
||||
@ -2618,8 +2651,10 @@ zombie_pathing_get_breadcrumb( origin, breadcrumbs, bad_crumbs, pick_random ) //
|
||||
}
|
||||
if ( crumb_is_bad( crumb_index, bad_crumbs ) )
|
||||
{
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
i++;
|
||||
return breadcrumbs[ crumb_index ];
|
||||
}
|
||||
return undefined;
|
||||
@ -2805,30 +2840,54 @@ do_zombie_spawn() //checked changed to match cerberus output
|
||||
spots = [];
|
||||
if ( isDefined( self._rise_spot ) )
|
||||
{
|
||||
if ( ( level.errorDisplayLevel == 0 || level.errorDisplayLevel == 3 ) && level.debugLogging_zm_spawner )
|
||||
{
|
||||
logline2 = "INFO: _zm_spawner.gsc do_zombie_spawn() self._rise_spot is defined calling do_zombie_rise(); returning" + "\n";
|
||||
logprint( logline2 );
|
||||
}
|
||||
spot = self._rise_spot;
|
||||
self thread do_zombie_rise( spot );
|
||||
return;
|
||||
}
|
||||
if ( ( level.errorDisplayLevel == 0 || level.errorDisplayLevel == 1 ) && level.debugLogging_zm_spawner )
|
||||
{
|
||||
if ( !isDefined( level.zombie_spawn_locations ) )
|
||||
{
|
||||
logline3 = "ERROR: _zm_spawner.gsc do_zombie_spawn() level.zombie_spawn_locations is not defined!" + "\n";
|
||||
logprint( logline3 );
|
||||
return;
|
||||
}
|
||||
}
|
||||
if ( isDefined( level.zombie_spawn_locations ) )
|
||||
{
|
||||
for ( i = 0; i < level.zombie_spawn_locations.size; i++ )
|
||||
i = 0;
|
||||
while ( i < level.zombie_spawn_locations.size )
|
||||
{
|
||||
if ( isDefined( level.use_multiple_spawns ) && level.use_multiple_spawns && isDefined( self.script_int ) )
|
||||
{
|
||||
if ( isDefined( level.spawner_int ) && self.script_int == level.spawner_int && ( !isDefined( level.zombie_spawn_locations[ i ].script_int ) || !isDefined( level.zones[ level.zombie_spawn_locations[ i ].zone_name ].script_int ) ) )
|
||||
{
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
if ( isDefined( level.zombie_spawn_locations[ i ].script_int ) && level.zombie_spawn_locations[ i ].script_int != self.script_int )
|
||||
{
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
else if ( isDefined( level.zones[ level.zombie_spawn_locations[ i ].zone_name ].script_int ) && level.zones[ level.zombie_spawn_locations[ i ].zone_name ].script_int != self.script_int )
|
||||
{
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
spots[ spots.size ] = level.zombie_spawn_locations[ i ];
|
||||
}
|
||||
if ( ( level.errorDisplayLevel == 0 || level.errorDisplayLevel == 3 ) && level.debugLogging_zm_spawner )
|
||||
{
|
||||
logline11 = "INFO: _zm_spawner.gsc do_zombie_spawn() setting spot: " + spots.size + " to level.zombie_spawn_locations: " + i + "\n";
|
||||
logprint( logline11 );
|
||||
}
|
||||
spots[ spots.size ] = level.zombie_spawn_locations[ i ];
|
||||
i++;
|
||||
}
|
||||
}
|
||||
/*
|
||||
@ -2892,50 +2951,76 @@ do_zombie_spawn() //checked changed to match cerberus output
|
||||
self.script_parameters = spot.script_parameters;
|
||||
}
|
||||
tokens = strtok( spot.script_noteworthy, " " );
|
||||
foreach ( token in tokens )
|
||||
if ( ( level.errorDisplayLevel == 0 || level.errorDisplayLevel == 1 ) && level.debugLogging_zm_spawner )
|
||||
{
|
||||
if ( !isDefined( tokens ) )
|
||||
{
|
||||
logline9 = "ERROR: _zm_spawner.gsc do_zombie_spawn() tokens is not defined! " + "\n";
|
||||
logprint( logline9 );
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
logline10 = "INFO: _zm_spawner.gsc do_zombie_spawn() has this many tokens: " + tokens.size + "\n";
|
||||
logprint( logline10 );
|
||||
}
|
||||
}
|
||||
i = 0;
|
||||
while ( i < tokens.size )
|
||||
{
|
||||
if ( isdefined( self.spawn_point_override ) )
|
||||
{
|
||||
spot = self.spawn_point_override;
|
||||
token = spot.script_noteworthy;
|
||||
tokens[ i ] = spot.script_noteworthy;
|
||||
}
|
||||
if ( token == "custom_spawner_entry" )
|
||||
if ( tokens[ i ] == "custom_spawner_entry" )
|
||||
{
|
||||
next_token = index + 1;
|
||||
if ( isdefined( tokens[ next_token ] ) )
|
||||
if ( isdefined( tokens[ i ] ) )
|
||||
{
|
||||
str_spawn_entry = tokens[ next_token ];
|
||||
str_spawn_entry = tokens[ i ];
|
||||
if ( isdefined( level.custom_spawner_entry ) && isdefined( level.custom_spawner_entry[ str_spawn_entry ] ) )
|
||||
{
|
||||
self thread [[ level.custom_spawner_entry[ str_spawn_entry ] ]](spot);
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( token == "riser_location" )
|
||||
if ( tokens[ i ] == "riser_location" )
|
||||
{
|
||||
self thread do_zombie_rise( spot );
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
if ( token == "faller_location" )
|
||||
if ( tokens[ i ] == "faller_location" )
|
||||
{
|
||||
self thread maps/mp/zombies/_zm_ai_faller::do_zombie_fall( spot );
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
if ( token == "dog_location" )
|
||||
if ( tokens[ i ] == "dog_location" )
|
||||
{
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
if ( token == "screecher_location" )
|
||||
if ( tokens[ i ] == "screecher_location" )
|
||||
{
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
if ( token == "leaper_location" )
|
||||
if ( tokens[ i ] == "leaper_location" )
|
||||
{
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
if ( isdefined(self.anchor ) )
|
||||
{
|
||||
i++;
|
||||
if ( ( level.errorDisplayLevel == 0 || level.errorDisplayLevel == 3 ) && level.debugLogging_zm_spawner )
|
||||
{
|
||||
logline4 = "INFO: _zm_spawner.gsc do_zombie_spawn() self.anchor is defined; returning" + "\n";
|
||||
logprint( logline4 );
|
||||
}
|
||||
return;
|
||||
}
|
||||
self.anchor = spawn( "script_origin", self.origin );
|
||||
@ -2965,7 +3050,13 @@ do_zombie_spawn() //checked changed to match cerberus output
|
||||
self.anchor delete();
|
||||
}
|
||||
self show();
|
||||
self notify( "risen" );
|
||||
self notify( "risen", spot.script_string );
|
||||
i++;
|
||||
}
|
||||
if ( ( level.errorDisplayLevel == 0 || level.errorDisplayLevel == 3 ) && level.debugLogging_zm_spawner )
|
||||
{
|
||||
logline4 = "INFO: _zm_spawner.gsc do_zombie_spawn() has completed its operation" + "\n";
|
||||
logprint( logline4 );
|
||||
}
|
||||
}
|
||||
|
||||
@ -3025,6 +3116,11 @@ do_zombie_rise( spot ) //checked changed to match cerberus output
|
||||
spot notify( "stop_zombie_rise_fx" );
|
||||
self.in_the_ground = 0;
|
||||
self notify( "risen", spot.script_string );
|
||||
if ( ( level.errorDisplayLevel == 0 || level.errorDisplayLevel == 3 ) && level.debugLogging_zm_spawner )
|
||||
{
|
||||
logline5 = "INFO: _zm_spawner.gsc do_zombie_rise() has completed its operation" + "\n";
|
||||
logprint( logline5 );
|
||||
}
|
||||
}
|
||||
|
||||
hide_pop() //checked matches cerberus output
|
||||
@ -3269,3 +3365,4 @@ zombie_free_cam_allowed() //checked matches cerberus output
|
||||
self setfreecameralockonallowed( 1 );
|
||||
}
|
||||
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
#include maps/mp/_utility;
|
||||
#include common_scripts/utility;
|
||||
|
||||
init()
|
||||
init() //checked matches cerberus output
|
||||
{
|
||||
level.turnedmeleeweapon = "zombiemelee_zm";
|
||||
level.turnedmeleeweapon_dw = "zombiemelee_dw";
|
||||
@ -31,24 +31,24 @@ init()
|
||||
thread setup_zombie_exerts();
|
||||
}
|
||||
|
||||
setup_zombie_exerts()
|
||||
setup_zombie_exerts() //checked matches cerberus output
|
||||
{
|
||||
wait 0,05;
|
||||
wait 0.05;
|
||||
level.exert_sounds[ 1 ][ "burp" ] = "null";
|
||||
level.exert_sounds[ 1 ][ "hitmed" ] = "null";
|
||||
level.exert_sounds[ 1 ][ "hitlrg" ] = "null";
|
||||
}
|
||||
|
||||
delay_turning_on_eyes()
|
||||
delay_turning_on_eyes() //checked matches cerberus output
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "disconnect" );
|
||||
wait_network_frame();
|
||||
wait 0,1;
|
||||
wait 0.1;
|
||||
self setclientfield( "player_has_eyes", 1 );
|
||||
}
|
||||
|
||||
turn_to_zombie()
|
||||
turn_to_zombie() //checked changed to match cerberus output
|
||||
{
|
||||
if ( self.sessionstate == "playing" && isDefined( self.is_zombie ) && self.is_zombie && isDefined( self.laststand ) && !self.laststand )
|
||||
{
|
||||
@ -60,7 +60,7 @@ turn_to_zombie()
|
||||
}
|
||||
while ( isDefined( self.is_in_process_of_humanify ) && self.is_in_process_of_humanify )
|
||||
{
|
||||
wait 0,1;
|
||||
wait 0.1;
|
||||
}
|
||||
if ( !flag( "pregame" ) )
|
||||
{
|
||||
@ -150,17 +150,14 @@ turn_to_zombie()
|
||||
{
|
||||
self freezecontrols( level.player_movement_suppressed );
|
||||
}
|
||||
else
|
||||
else if ( isDefined( self.hostmigrationcontrolsfrozen ) && !self.hostmigrationcontrolsfrozen )
|
||||
{
|
||||
if ( isDefined( self.hostmigrationcontrolsfrozen ) && !self.hostmigrationcontrolsfrozen )
|
||||
{
|
||||
self freezecontrols( 0 );
|
||||
}
|
||||
self freezecontrols( 0 );
|
||||
}
|
||||
self.is_in_process_of_zombify = 0;
|
||||
}
|
||||
|
||||
turn_to_human()
|
||||
turn_to_human() //checked changed to match cerberus output
|
||||
{
|
||||
if ( self.sessionstate == "playing" && isDefined( self.is_zombie ) && !self.is_zombie && isDefined( self.laststand ) && !self.laststand )
|
||||
{
|
||||
@ -172,7 +169,7 @@ turn_to_human()
|
||||
}
|
||||
while ( isDefined( self.is_in_process_of_zombify ) && self.is_in_process_of_zombify )
|
||||
{
|
||||
wait 0,1;
|
||||
wait 0.1;
|
||||
}
|
||||
self playsoundtoplayer( "evt_spawn", self );
|
||||
playsoundatposition( "evt_disappear_3d", self.origin );
|
||||
@ -233,27 +230,21 @@ turn_to_human()
|
||||
{
|
||||
self freezecontrols( level.player_movement_suppressed );
|
||||
}
|
||||
else
|
||||
else if ( isDefined( self.hostmigrationcontrolsfrozen ) && !self.hostmigrationcontrolsfrozen )
|
||||
{
|
||||
if ( isDefined( self.hostmigrationcontrolsfrozen ) && !self.hostmigrationcontrolsfrozen )
|
||||
{
|
||||
self freezecontrols( 0 );
|
||||
}
|
||||
self freezecontrols( 0 );
|
||||
}
|
||||
self show();
|
||||
playsoundatposition( "evt_appear_3d", self.origin );
|
||||
self.is_in_process_of_humanify = 0;
|
||||
}
|
||||
|
||||
deletezombiesinradius( origin )
|
||||
deletezombiesinradius( origin ) //checked changed to match cerberus output
|
||||
{
|
||||
zombies = get_round_enemy_array();
|
||||
maxradius = 128;
|
||||
_a328 = zombies;
|
||||
_k328 = getFirstArrayKey( _a328 );
|
||||
while ( isDefined( _k328 ) )
|
||||
foreach ( zombie in zombies )
|
||||
{
|
||||
zombie = _a328[ _k328 ];
|
||||
if ( isDefined( zombie ) && isalive( zombie ) && isDefined( zombie.is_being_used_as_spawner ) && !zombie.is_being_used_as_spawner )
|
||||
{
|
||||
if ( distancesquared( zombie.origin, origin ) < ( maxradius * maxradius ) )
|
||||
@ -261,20 +252,21 @@ deletezombiesinradius( origin )
|
||||
playfx( level._effect[ "wood_chunk_destory" ], zombie.origin );
|
||||
zombie thread silentlyremovezombie();
|
||||
}
|
||||
wait 0,05;
|
||||
wait 0.05;
|
||||
}
|
||||
_k328 = getNextArrayKey( _a328, _k328 );
|
||||
}
|
||||
}
|
||||
|
||||
turned_give_melee_weapon()
|
||||
turned_give_melee_weapon() //checked matches cerberus output
|
||||
{
|
||||
/*
|
||||
/#
|
||||
assert( isDefined( self.turnedmeleeweapon ) );
|
||||
#/
|
||||
/#
|
||||
assert( self.turnedmeleeweapon != "none" );
|
||||
#/
|
||||
*/
|
||||
self.turned_had_knife = self hasweapon( "knife_zm" );
|
||||
if ( isDefined( self.turned_had_knife ) && self.turned_had_knife )
|
||||
{
|
||||
@ -288,45 +280,45 @@ turned_give_melee_weapon()
|
||||
self switchtoweapon( self.turnedmeleeweapon );
|
||||
}
|
||||
|
||||
turned_player_buttons()
|
||||
turned_player_buttons() //checked changed to match cerberus output
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
self endon( "humanify" );
|
||||
level endon( "end_game" );
|
||||
while ( isDefined( self.is_zombie ) && self.is_zombie )
|
||||
{
|
||||
while ( !self attackbuttonpressed() || self adsbuttonpressed() && self meleebuttonpressed() )
|
||||
if ( self attackbuttonpressed() || self adsbuttonpressed() || self meleebuttonpressed() )
|
||||
{
|
||||
if ( cointoss() )
|
||||
{
|
||||
self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "attack", undefined );
|
||||
}
|
||||
while ( !self attackbuttonpressed() || self adsbuttonpressed() && self meleebuttonpressed() )
|
||||
while ( self attackbuttonpressed() || self adsbuttonpressed() || self meleebuttonpressed() )
|
||||
{
|
||||
wait 0,05;
|
||||
wait 0.05;
|
||||
}
|
||||
}
|
||||
while ( self usebuttonpressed() )
|
||||
if ( self usebuttonpressed() )
|
||||
{
|
||||
self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "taunt", undefined );
|
||||
while ( self usebuttonpressed() )
|
||||
{
|
||||
wait 0,05;
|
||||
wait 0.05;
|
||||
}
|
||||
}
|
||||
while ( self issprinting() )
|
||||
if ( self issprinting() )
|
||||
{
|
||||
while ( self issprinting() )
|
||||
{
|
||||
self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "sprint", undefined );
|
||||
wait 0,05;
|
||||
wait 0.05;
|
||||
}
|
||||
}
|
||||
wait 0,05;
|
||||
wait 0.05;
|
||||
}
|
||||
}
|
||||
|
||||
turned_disable_player_weapons()
|
||||
turned_disable_player_weapons() //checked matches cerberus output
|
||||
{
|
||||
if ( isDefined( self.is_zombie ) && self.is_zombie )
|
||||
{
|
||||
@ -349,7 +341,7 @@ turned_disable_player_weapons()
|
||||
self disableweaponcycling();
|
||||
}
|
||||
|
||||
turned_enable_player_weapons()
|
||||
turned_enable_player_weapons() //checked changed to match cerberus output
|
||||
{
|
||||
self takeallweapons();
|
||||
self enableweaponcycling();
|
||||
@ -360,13 +352,10 @@ turned_enable_player_weapons()
|
||||
self thread [[ level.humanify_custom_loadout ]]();
|
||||
return;
|
||||
}
|
||||
else
|
||||
else if ( !self hasweapon( "rottweil72_zm" ) )
|
||||
{
|
||||
if ( !self hasweapon( "rottweil72_zm" ) )
|
||||
{
|
||||
self giveweapon( "rottweil72_zm" );
|
||||
self switchtoweapon( "rottweil72_zm" );
|
||||
}
|
||||
self giveweapon( "rottweil72_zm" );
|
||||
self switchtoweapon( "rottweil72_zm" );
|
||||
}
|
||||
if ( isDefined( self.is_zombie ) && !self.is_zombie && !self hasweapon( level.start_weapon ) )
|
||||
{
|
||||
@ -396,13 +385,12 @@ turned_enable_player_weapons()
|
||||
self setweaponammoclip( self get_player_lethal_grenade(), 2 );
|
||||
}
|
||||
|
||||
get_farthest_available_zombie( player )
|
||||
get_farthest_available_zombie( player ) //checked changed to match cerberus output
|
||||
{
|
||||
while ( 1 )
|
||||
{
|
||||
zombies = get_array_of_closest( player.origin, getaiarray( level.zombie_team ) );
|
||||
x = 0;
|
||||
while ( x < zombies.size )
|
||||
for ( x = 0; x < zombies.size; x++ )
|
||||
{
|
||||
zombie = zombies[ x ];
|
||||
if ( isDefined( zombie ) && isalive( zombie ) && isDefined( zombie.in_the_ground ) && !zombie.in_the_ground && isDefined( zombie.gibbed ) && !zombie.gibbed && isDefined( zombie.head_gibbed ) && !zombie.head_gibbed && isDefined( zombie.is_being_used_as_spawnpoint ) && !zombie.is_being_used_as_spawnpoint && zombie in_playable_area() )
|
||||
@ -410,29 +398,24 @@ get_farthest_available_zombie( player )
|
||||
zombie.is_being_used_as_spawnpoint = 1;
|
||||
return zombie;
|
||||
}
|
||||
x++;
|
||||
}
|
||||
wait 0,05;
|
||||
wait 0.05;
|
||||
}
|
||||
}
|
||||
|
||||
get_available_human()
|
||||
get_available_human() //checked changed to match cerberus output
|
||||
{
|
||||
players = get_players();
|
||||
_a539 = players;
|
||||
_k539 = getFirstArrayKey( _a539 );
|
||||
while ( isDefined( _k539 ) )
|
||||
foreach ( player in players )
|
||||
{
|
||||
player = _a539[ _k539 ];
|
||||
if ( isDefined( player.is_zombie ) && !player.is_zombie )
|
||||
{
|
||||
return player;
|
||||
}
|
||||
_k539 = getNextArrayKey( _a539, _k539 );
|
||||
}
|
||||
}
|
||||
|
||||
silentlyremovezombie()
|
||||
silentlyremovezombie() //checked matches cerberus output
|
||||
{
|
||||
self.skip_death_notetracks = 1;
|
||||
self.nodeathragdoll = 1;
|
||||
@ -440,8 +423,9 @@ silentlyremovezombie()
|
||||
self self_delete();
|
||||
}
|
||||
|
||||
getspawnpoint()
|
||||
getspawnpoint() //checked matches cerberus output
|
||||
{
|
||||
spawnpoint = self maps/mp/gametypes_zm/_spawnlogic::getspawnpoint_dm( level._turned_zombie_respawnpoints );
|
||||
return spawnpoint;
|
||||
}
|
||||
|
||||
|
@ -50,7 +50,11 @@ patch_zm/maps/mp/zombies/_zm_pers_upgrades_functions.gsc
|
||||
### The following scripts have been checked, but they have not been tested yet
|
||||
```
|
||||
patch_zm/maps/mp/zombies/_zm_game_module.gsc
|
||||
patch_zm/maps/mp/zombies/_zm_magicbox_lock.gsc
|
||||
patch_zm/maps/mp/zombies/_zm_playerhealth.gsc
|
||||
patch_zm/maps/mp/zombies/_zm_power.gsc
|
||||
patch_zm/maps/mp/zombies/_zm_traps.gsc
|
||||
patch_zm/maps/mp/zombies/_zm_turned.gsc
|
||||
patch_zm/maps/mp/zombies/_zm_weap_cymbal_monkey.gsc
|
||||
```
|
||||
### The following scripts are not checked yet, uploaded to setup a baseline:
|
||||
@ -59,12 +63,8 @@ patch_zm/maps/mp/zombies/_zm_blockers.gsc
|
||||
patch_zm/maps/mp/zombies/_zm_buildables.gsc
|
||||
patch_zm/maps/mp/zombies/_zm_equip_turbine.gsc
|
||||
patch_zm/maps/mp/zombies/_zm_laststand.gsc
|
||||
patch_zm/maps/mp/zombies/_zm_magicbox_lock.gsc
|
||||
patch_zm/maps/mp/zombies/_zm_playerhealth.gsc
|
||||
patch_zm/maps/mp/zombies/_zm_power.gsc
|
||||
patch_zm/maps/mp/zombies/_zm_sidequests.gsc
|
||||
patch_zm/maps/mp/zombies/_zm_stats.gsc
|
||||
patch_zm/maps/mp/zombies/_zm_turned.gsc
|
||||
patch_zm/maps/mp/zombies/_zm_unitrigger.gsc
|
||||
patch_zm/maps/mp/zombies/_zm_utility.gsc
|
||||
```
|
||||
|
Reference in New Issue
Block a user