diff --git a/patch_zm/maps/mp/gametypes_zm/MajorErrors/_zm_gametype.gsc b/patch_zm/maps/mp/gametypes_zm/MajorErrors/_zm_gametype.gsc index b87c304..0476fe9 100644 --- a/patch_zm/maps/mp/gametypes_zm/MajorErrors/_zm_gametype.gsc +++ b/patch_zm/maps/mp/gametypes_zm/MajorErrors/_zm_gametype.gsc @@ -38,6 +38,7 @@ main() maps/mp/gametypes_zm/_weapons::registerkillstreakdelay( level.gametype, 0, 0, 1440 ); maps/mp/gametypes_zm/_globallogic::registerfriendlyfiredelay( level.gametype, 15, 0, 1440 ); + //determines many aspects of the game non essential level.takelivesondeath = 1; level.teambased = 1; @@ -82,7 +83,9 @@ main() //all working non essential map_name = level.script; mode = getDvar( "ui_gametype" ); - if ( isDefined( mode ) && mode == "" && isDefined( level.default_game_mode ) ) + + //condition was incorrect + if ( !isDefined( mode ) || mode == "" && isDefined( level.default_game_mode ) ) { mode = level.default_game_mode; } @@ -118,7 +121,7 @@ main() onplayerconnect_callback( ::onplayerconnect_check_for_hotjoin ); } -game_objects_allowed( mode, location ) +game_objects_allowed( mode, location ) //checked not sure what to do yet { allowed[ 0 ] = mode; entities = getentarray(); @@ -171,7 +174,7 @@ game_objects_allowed( mode, location ) } } -post_init_gametype() +post_init_gametype() //checked matches cerberus output { if ( isDefined( level.gamemode_map_postinit ) ) { @@ -182,7 +185,7 @@ post_init_gametype() } } -post_gametype_main( mode ) +post_gametype_main( mode ) //checked matches cerberus output { set_game_var( "ZM_roundWinLimit", get_game_var( "ZM_roundLimit" ) * 0.5 ); level.roundlimit = get_game_var( "ZM_roundLimit" ); @@ -195,7 +198,7 @@ post_gametype_main( mode ) } } -globallogic_setupdefault_zombiecallbacks() +globallogic_setupdefault_zombiecallbacks() //checked matches cerberus output { level.spawnplayer = maps/mp/gametypes_zm/_globallogic_spawn::spawnplayer; level.spawnplayerprediction = maps/mp/gametypes_zm/_globallogic_spawn::spawnplayerprediction; @@ -250,103 +253,84 @@ globallogic_setupdefault_zombiecallbacks() level.callbackvehicledamage = ::blank; } -setup_standard_objects( location ) +setup_standard_objects( location ) //checked partially used cerberus output { - structs = getstructarray( "game_mode_object" ); - _a290 = structs; - _k290 = getFirstArrayKey( _a290 ); - while ( isDefined( _k290 ) ) + structs = getstructarray("game_mode_object"); + foreach(struct in structs) { - struct = _a290[ _k290 ]; - if ( isDefined( struct.script_noteworthy ) && struct.script_noteworthy != location ) + if(isdefined(struct.script_noteworthy) && struct.script_noteworthy != location) { + //continue; } - else + if(isdefined(struct.script_string)) { - if ( isDefined( struct.script_string ) ) + keep = 0; + tokens = strtok( struct.script_string, " " ); + _a300 = tokens; + _k300 = getFirstArrayKey( _a300 ); + while ( isDefined( _k300 ) ) { - keep = 0; - tokens = strtok( struct.script_string, " " ); - _a300 = tokens; - _k300 = getFirstArrayKey( _a300 ); - while ( isDefined( _k300 ) ) + token = _a300[ _k300 ]; + if(token == level.scr_zm_ui_gametype && token != "zstandard") { - token = _a300[ _k300 ]; - if ( token == level.scr_zm_ui_gametype && token != "zstandard" ) - { - keep = 1; - } - else - { - if ( token == "zstandard" ) - { - keep = 1; - } - } - _k300 = getNextArrayKey( _a300, _k300 ); + keep = 1; } - if ( !keep ) + if(token == "zstandard") { - break; + keep = 1; } + _k300 = getNextArrayKey( _a300, _k300 ); } - else + if ( !keep ) { - barricade = spawn( "script_model", struct.origin ); - barricade.angles = struct.angles; - barricade setmodel( struct.script_parameters ); + //break; } } - _k290 = getNextArrayKey( _a290, _k290 ); + barricade = spawn("script_model", struct.origin); + barricade.angles = struct.angles; + barricade setmodel(struct.script_parameters); } objects = getentarray(); - _a322 = objects; - _k322 = getFirstArrayKey( _a322 ); - while ( isDefined( _k322 ) ) + foreach(object in objects) { - object = _a322[ _k322 ]; - if ( !object is_survival_object() ) + if(!object is_survival_object()) { } - else + else { - if ( isDefined( object.spawnflags ) && object.spawnflags == 1 && object.classname != "trigger_multiple" ) + if(isdefined(object.spawnflags) && object.spawnflags == 1 && object.classname != "trigger_multiple") { object connectpaths(); } object delete(); } - _k322 = getNextArrayKey( _a322, _k322 ); } - if ( isDefined( level._classic_setup_func ) ) + if(isdefined(level._classic_setup_func)) { - [[ level._classic_setup_func ]](); + [[level._classic_setup_func]](); } } -is_survival_object() + +is_survival_object() //checked changed to cerberus output { - if ( !isDefined( self.script_parameters ) ) + if(!isdefined(self.script_parameters)) { return 0; } - tokens = strtok( self.script_parameters, " " ); + tokens = strtok(self.script_parameters, " "); remove = 0; - _a352 = tokens; - _k352 = getFirstArrayKey( _a352 ); - while ( isDefined( _k352 ) ) + foreach(token in tokens) { - token = _a352[ _k352 ]; - if ( token == "survival_remove" ) + if(token == "survival_remove") { remove = 1; } - _k352 = getNextArrayKey( _a352, _k352 ); } return remove; } -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 ) //checked partially changed output to cerberus output { self.last_damage_from_zombie_or_player = 0; if ( isDefined( eattacker ) ) @@ -375,14 +359,11 @@ game_module_player_damage_callback( einflictor, eattacker, idamage, idflags, sme return; } } - else + else if(!isdefined(self.riotshieldentity)) { - if ( !isDefined( self.riotshieldentity ) ) + if(!self maps/mp/zombies/_zm::player_shield_facing_attacker(vdir, -0.2) && isdefined(self.player_shield_apply_damage)) { - if ( !self maps/mp/zombies/_zm::player_shield_facing_attacker( vdir, -0.2 ) && isDefined( self.player_shield_apply_damage ) ) - { - return; - } + return; } } } @@ -406,7 +387,7 @@ game_module_player_damage_callback( einflictor, eattacker, idamage, idflags, sme } } -do_game_mode_shellshock() +do_game_mode_shellshock() //checked matched cerberus output { self endon( "disconnect" ); self._being_shellshocked = 1; @@ -415,7 +396,7 @@ do_game_mode_shellshock() self._being_shellshocked = 0; } -add_map_gamemode( mode, preinit_func, precache_func, main_func ) +add_map_gamemode( mode, preinit_func, precache_func, main_func ) //checked matches cerberus output { if ( !isDefined( level.gamemode_map_location_init ) ) { @@ -448,7 +429,7 @@ add_map_gamemode( mode, preinit_func, precache_func, main_func ) level.gamemode_map_location_main[ mode ] = []; } -add_map_location_gamemode( mode, location, precache_func, main_func ) +add_map_location_gamemode( mode, location, precache_func, main_func ) //checked matches cerberus output { if ( !isDefined( level.gamemode_map_location_precache[ mode ] ) ) { @@ -463,7 +444,7 @@ add_map_location_gamemode( mode, location, precache_func, main_func ) level.gamemode_map_location_main[ mode ][ location ] = main_func; } -rungametypeprecache( gamemode ) +rungametypeprecache( gamemode ) //checked matches cerberus output { if ( !isDefined( level.gamemode_map_location_main ) || !isDefined( level.gamemode_map_location_main[ gamemode ] ) ) { @@ -497,7 +478,7 @@ rungametypeprecache( gamemode ) } } -rungametypemain( gamemode, mode_main_func, use_round_logic ) +rungametypemain( gamemode, mode_main_func, use_round_logic ) //checked matches cerberus output { if ( !isDefined( level.gamemode_map_location_main ) || !isDefined( level.gamemode_map_location_main[ gamemode ] ) ) { @@ -541,7 +522,7 @@ rungametypemain( gamemode, mode_main_func, use_round_logic ) } -round_logic( mode_logic_func ) +round_logic( mode_logic_func ) //checked matches cerberus output { level.skit_vox_override = 1; if ( isDefined( level.flag[ "start_zombie_round_logic" ] ) ) @@ -637,7 +618,7 @@ round_logic( mode_logic_func ) level notify( "end_game" ); } -end_rounds_early( winner ) +end_rounds_early( winner ) //checked matches cerberus output { level.forcedend = 1; cur_round = get_gamemode_var( "current_round" ); @@ -653,7 +634,7 @@ end_rounds_early( winner ) } -checkzmroundswitch() +checkzmroundswitch() //checked matches cerberus output { if ( !isDefined( level.zm_roundswitch ) || !level.zm_roundswitch ) { @@ -664,7 +645,7 @@ checkzmroundswitch() return 0; } -create_hud_scoreboard( duration, fade ) +create_hud_scoreboard( duration, fade ) //checked matches cerberus output { level endon( "end_game" ); level thread module_hud_full_screen_overlay(); @@ -675,28 +656,24 @@ create_hud_scoreboard( duration, fade ) waittill_any_or_timeout( duration, "clear_hud_elems" ); } -respawn_spectators_and_freeze_players() +respawn_spectators_and_freeze_players() //checked changed to match cerberus output { players = get_players(); - _a785 = players; - _k785 = getFirstArrayKey( _a785 ); - while ( isDefined( _k785 ) ) + foreach(player in players) { - player = _a785[ _k785 ]; - if ( player.sessionstate == "spectator" ) + if(player.sessionstate == "spectator") { - if ( isDefined( player.spectate_hud ) ) + if(isdefined(player.spectate_hud)) { player.spectate_hud destroy(); } - player [[ level.spawnplayer ]](); + player [[level.spawnplayer]](); } - player freeze_player_controls( 1 ); - _k785 = getNextArrayKey( _a785, _k785 ); + player freeze_player_controls(1); } } -module_hud_team_1_score( duration, fade ) +module_hud_team_1_score( duration, fade ) //checked matches cerberus output { level._encounters_score_1 = newhudelem(); level._encounters_score_1.x = 0; @@ -720,7 +697,7 @@ module_hud_team_1_score( duration, fade ) level._encounters_score_1 destroy(); } -module_hud_team_2_score( duration, fade ) +module_hud_team_2_score( duration, fade ) //checked matches cerberus output { level._encounters_score_2 = newhudelem(); level._encounters_score_2.x = 0; @@ -744,7 +721,7 @@ module_hud_team_2_score( duration, fade ) level._encounters_score_2 destroy(); } -module_hud_round_num( duration, fade ) +module_hud_round_num( duration, fade ) //checked matches cerberus output { level._encounters_round_num = newhudelem(); level._encounters_round_num.x = 0; @@ -768,7 +745,7 @@ module_hud_round_num( duration, fade ) level._encounters_round_num destroy(); } -createtimer() +createtimer() //checked matches cerberus output { flag_waitopen( "pregame" ); elem = newhudelem(); @@ -798,27 +775,23 @@ createtimer() elem destroy(); } -revive_laststand_players() +revive_laststand_players() //checked changed to match cerberus output { if ( isDefined( level.match_is_ending ) && level.match_is_ending ) { return; } players = get_players(); - _a917 = players; - _k917 = getFirstArrayKey( _a917 ); - while ( isDefined( _k917 ) ) + foreach(player in players) { - player = _a917[ _k917 ]; - if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) + if(player maps/mp/zombies/_zm_laststand::player_is_in_laststand()) { - player thread maps/mp/zombies/_zm_laststand::auto_revive( player ); + player thread maps/mp/zombies/_zm_laststand::auto_revive(player); } - _k917 = getNextArrayKey( _a917, _k917 ); } } -team_icon_winner( elem ) +team_icon_winner( elem ) //checked matches cerberus output { og_x = elem.x; og_y = elem.y; @@ -833,18 +806,16 @@ team_icon_winner( elem ) wait 0.75; } -delete_corpses() +delete_corpses() //checked changed to match cerberus output { corpses = getcorpsearray(); - x = 0; - while ( x < corpses.size ) + for(x = 0; x < corpses.size; x++) { - corpses[ x ] delete(); - x++; + corpses[x] delete(); } } -track_encounters_win_stats( matchwonteam ) +track_encounters_win_stats( matchwonteam ) //checked did not change to match cerberus output { players = get_players(); i = 0; @@ -872,12 +843,12 @@ track_encounters_win_stats( matchwonteam ) } } -non_round_logic( mode_logic_func ) +non_round_logic( mode_logic_func ) //checked matches cerberus output { level thread [[ mode_logic_func ]](); } -game_end_func() +game_end_func() //checked matches cerberus output { if ( !isDefined( get_gamemode_var( "match_end_notify" ) ) && !isDefined( get_gamemode_var( "match_end_func" ) ) ) { @@ -887,7 +858,7 @@ game_end_func() level thread [[ get_gamemode_var( "match_end_func" ) ]]( winning_team ); } -setup_classic_gametype() +setup_classic_gametype() //checked did not change to match cerberus output { ents = getentarray(); _a1004 = ents; @@ -953,36 +924,32 @@ setup_classic_gametype() unlink_meat_traversal_nodes(); } -zclassic_main() +zclassic_main() //checked matches cerberus output { level thread setup_classic_gametype(); level thread maps/mp/zombies/_zm::round_start(); } -unlink_meat_traversal_nodes() +unlink_meat_traversal_nodes() //checked changed to match cerberus output { meat_town_nodes = getnodearray( "meat_town_barrier_traversals", "targetname" ); meat_tunnel_nodes = getnodearray( "meat_tunnel_barrier_traversals", "targetname" ); meat_farm_nodes = getnodearray( "meat_farm_barrier_traversals", "targetname" ); nodes = arraycombine( meat_town_nodes, meat_tunnel_nodes, 1, 0 ); traversal_nodes = arraycombine( nodes, meat_farm_nodes, 1, 0 ); - _a1086 = traversal_nodes; - _k1086 = getFirstArrayKey( _a1086 ); - while ( isDefined( _k1086 ) ) + foreach(node in traversal_nodes) { - node = _a1086[ _k1086 ]; - end_node = getnode( node.target, "targetname" ); - unlink_nodes( node, end_node ); - _k1086 = getNextArrayKey( _a1086, _k1086 ); + end_node = getnode(node.target, "targetname"); + unlink_nodes(node, end_node); } } -canplayersuicide() +canplayersuicide() //checked matches cerberus output { return self hasperk( "specialty_scavenger" ); } -onplayerdisconnect() +onplayerdisconnect() //checked matches cerberus output { if ( isDefined( level.game_mode_custom_onplayerdisconnect ) ) { @@ -993,12 +960,12 @@ onplayerdisconnect() level maps/mp/zombies/_zm::checkforalldead( self ); } -ondeadevent( team ) +ondeadevent( team ) //checked matches cerberus output { thread maps/mp/gametypes_zm/_globallogic::endgame( level.zombie_team, "" ); } -onspawnintermission() +onspawnintermission() //checked matches cerberus output { spawnpointname = "info_intermission"; spawnpoints = getentarray( spawnpointname, "classname" ); @@ -1018,11 +985,11 @@ onspawnintermission() } } -onspawnspectator( origin, angles ) +onspawnspectator( origin, angles ) //checked matches cerberus output { } -mayspawn() +mayspawn() //checked matches cerberus output { if ( isDefined( level.custommayspawnlogic ) ) { @@ -1037,7 +1004,7 @@ mayspawn() return 1; } -onstartgametype() +onstartgametype() //checked matches cerberus output { setclientnamemode( "auto_change" ); level.displayroundendtext = 0; @@ -1052,7 +1019,7 @@ onstartgametype() } } -module_hud_full_screen_overlay() +module_hud_full_screen_overlay() //checked matches cerberus output { fadetoblack = newhudelem(); fadetoblack.x = 0; @@ -1078,14 +1045,14 @@ module_hud_full_screen_overlay() fadetoblack destroy(); } -create_final_score() +create_final_score() //checked matches cerberus output { level endon( "end_game" ); level thread module_hud_team_winer_score(); wait 2; } -module_hud_team_winer_score() +module_hud_team_winer_score() //checked did not match cerberus output did not change { players = get_players(); i = 0; @@ -1117,7 +1084,7 @@ module_hud_team_winer_score() level thread maps/mp/zombies/_zm_audio::change_zombie_music( "match_over" ); } -create_module_hud_team_winer_score() +create_module_hud_team_winer_score() //checked changed to match cerberus output { self._team_winer_score = newclienthudelem( self ); self._team_winer_score.x = 0; @@ -1127,7 +1094,7 @@ create_module_hud_team_winer_score() self._team_winer_score.vertalign = "middle"; self._team_winer_score.font = "default"; self._team_winer_score.fontscale = 15; - self._team_winer_score.color = ( 1, 1, 1 ); + self._team_winer_score.color = ( 0, 1, 0 ); self._team_winer_score.foreground = 1; if ( self._encounters_team == "B" && get_gamemode_var( "team_2_score" ) > get_gamemode_var( "team_1_score" ) ) { @@ -1137,7 +1104,7 @@ create_module_hud_team_winer_score() { if ( self._encounters_team == "B" && get_gamemode_var( "team_2_score" ) < get_gamemode_var( "team_1_score" ) ) { - self._team_winer_score.color = ( 1, 1, 1 ); + self._team_winer_score.color = ( 1, 0, 0 ); self._team_winer_score settext( &"ZOMBIE_MATCH_LOST" ); } } @@ -1149,7 +1116,7 @@ create_module_hud_team_winer_score() { if ( self._encounters_team == "A" && get_gamemode_var( "team_1_score" ) < get_gamemode_var( "team_2_score" ) ) { - self._team_winer_score.color = ( 1, 1, 1 ); + self._team_winer_score.color = ( 1, 0, 0 ); self._team_winer_score settext( &"ZOMBIE_MATCH_LOST" ); } } @@ -1164,21 +1131,17 @@ create_module_hud_team_winer_score() self._team_winer_score destroy(); } -displayroundend( round_winner ) +displayroundend( round_winner ) //checked changed to match cerberus output { players = get_players(); - _a1336 = players; - _k1336 = getFirstArrayKey( _a1336 ); - while ( isDefined( _k1336 ) ) + foreach(player in players) { - player = _a1336[ _k1336 ]; - player thread module_hud_round_end( round_winner ); - if ( isDefined( player._team_hud ) && isDefined( player._team_hud[ "team" ] ) ) + player thread module_hud_round_end(round_winner); + if(isdefined(player._team_hud) && isdefined(player._team_hud["team"])) { - player thread team_icon_winner( player._team_hud[ "team" ] ); + player thread team_icon_winner(player._team_hud["team"]); } - player freeze_player_controls( 1 ); - _k1336 = getNextArrayKey( _a1336, _k1336 ); + player freeze_player_controls(1); } level thread maps/mp/zombies/_zm_audio::change_zombie_music( "round_end" ); level thread maps/mp/zombies/_zm_audio::zmbvoxcrowdonteam( "clap" ); @@ -1186,7 +1149,7 @@ displayroundend( round_winner ) wait 2; } -module_hud_round_end( round_winner ) +module_hud_round_end( round_winner ) //checked changed to match cerberus output { self endon( "disconnect" ); self._team_winner_round = newclienthudelem( self ); @@ -1201,12 +1164,12 @@ module_hud_round_end( round_winner ) self._team_winner_round.foreground = 1; if ( self._encounters_team == round_winner ) { - self._team_winner_round.color = ( 1, 1, 1 ); + self._team_winner_round.color = ( 0, 1, 0 ); self._team_winner_round settext( "YOU WIN" ); } else { - self._team_winner_round.color = ( 1, 1, 1 ); + self._team_winner_round.color = ( 1, 0, 0 ); self._team_winner_round settext( "YOU LOSE" ); } self._team_winner_round.alpha = 0; @@ -1220,7 +1183,7 @@ module_hud_round_end( round_winner ) self._team_winner_round destroy(); } -displayroundswitch() +displayroundswitch() //checked changed to match cerberus output { level._round_changing_sides = newhudelem(); level._round_changing_sides.x = 0; @@ -1239,7 +1202,7 @@ displayroundswitch() fadetoblack.horzalign = "fullscreen"; fadetoblack.vertalign = "fullscreen"; fadetoblack setshader( "black", 640, 480 ); - fadetoblack.color = ( 1, 1, 1 ); + fadetoblack.color = ( 0, 0, 0 ); fadetoblack.alpha = 1; level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "side_switch" ); level._round_changing_sides settext( "CHANGING SIDES" ); @@ -1255,7 +1218,7 @@ displayroundswitch() fadetoblack destroy(); } -module_hud_create_team_name() +module_hud_create_team_name() //checked matches cerberus ouput { if ( !is_encounter() ) { @@ -1295,7 +1258,7 @@ module_hud_create_team_name() self._team_hud[ "team" ] = elem; } -nextzmhud( winner ) +nextzmhud( winner ) //checked matches cerberus output { displayroundend( winner ); create_hud_scoreboard( 1, 0.25 ); @@ -1305,7 +1268,7 @@ nextzmhud( winner ) } } -startnextzmround( winner ) +startnextzmround( winner ) //checked matches cerberus output { if ( !isonezmround() ) { @@ -1332,7 +1295,7 @@ startnextzmround( winner ) return 0; } -start_round() +start_round() //checked matches cerberus output { flag_clear( "start_encounters_match_logic" ); if ( !isDefined( level._module_round_hud ) ) @@ -1382,7 +1345,7 @@ start_round() level._module_round_hud destroy(); } -isonezmround() +isonezmround() //checked matches cerberus output { if ( get_game_var( "ZM_roundLimit" ) == 1 ) { @@ -1391,20 +1354,20 @@ isonezmround() return 0; } -waslastzmround() +waslastzmround() //checked changed to match cerberus output { if ( isDefined( level.forcedend ) && level.forcedend ) { return 1; } - if ( !hitzmroundlimit() || hitzmscorelimit() && hitzmroundwinlimit() ) + if ( hitzmroundlimit() || hitzmscorelimit() || hitzmroundwinlimit() ) { return 1; } return 0; } -hitzmroundlimit() +hitzmroundlimit() //checked matches cerberus output { if ( get_game_var( "ZM_roundLimit" ) <= 0 ) { @@ -1413,7 +1376,7 @@ hitzmroundlimit() return getzmroundsplayed() >= get_game_var( "ZM_roundLimit" ); } -hitzmroundwinlimit() +hitzmroundwinlimit() //checked matches cerberus output { if ( !isDefined( get_game_var( "ZM_roundWinLimit" ) ) || get_game_var( "ZM_roundWinLimit" ) <= 0 ) { @@ -1433,7 +1396,7 @@ hitzmroundwinlimit() return 0; } -hitzmscorelimit() +hitzmscorelimit() //checked matches cerberus output { if ( get_game_var( "ZM_scoreLimit" ) <= 0 ) { @@ -1449,17 +1412,17 @@ hitzmscorelimit() return 0; } -getzmroundsplayed() +getzmroundsplayed() //checked matches cerberus output { return get_gamemode_var( "current_round" ); } -onspawnplayerunified() +onspawnplayerunified() //checked matches cerberus output { onspawnplayer( 0 ); } -onspawnplayer( predictedspawn ) +onspawnplayer( predictedspawn ) //fixed checked changed partially to match cerberus output { if ( !isDefined( predictedspawn ) ) { @@ -1475,8 +1438,6 @@ onspawnplayer( predictedspawn ) } if ( isDefined( level.customspawnlogic ) ) { - - spawnpoint = self [[ level.customspawnlogic ]]( predictedspawn ); if ( predictedspawn ) { @@ -1491,41 +1452,46 @@ onspawnplayer( predictedspawn ) if ( flag( "begin_spawning" ) ) { spawnpoint = maps/mp/zombies/_zm::check_for_valid_spawn_near_team( self, 1 ); - - } if ( !isDefined( spawnpoint ) ) { match_string = ""; 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; } - match_string = ( level.scr_zm_ui_gametype + "_" ) + location; - /* - spawnPoints = []; + match_string = level.scr_zm_ui_gametype + "_" + location; + + spawnpoints = []; structs = getstructarray("initial_spawn", "script_noteworthy"); - if(IsDefined(structs)) + if ( isDefined( structs ) ) { - foreach(struct in structs) + _a1757 = structs; + _k1757 = getFirstArrayKey( _a1757 ); + while ( isDefined( _k1757 ) ) { - if(IsDefined(struct.script_string) ) + struct = _a1757[ _k1757 ]; + if ( isDefined( struct.script_string ) ) { - - tokens = strtok(struct.script_string," "); - foreach(token in tokens) + tokens = strtok( struct.script_string, " " ); + _a1763 = tokens; + _k1763 = getFirstArrayKey( _a1763 ); + while ( isDefined( _k1763 ) ) { - if(token == match_string ) + token = _a1763[ _k1763 ]; + if ( token == match_string ) { - spawnPoints[spawnPoints.size] = struct; + spawnpoints[ spawnpoints.size ] = struct; + } + _k1763 = getNextArrayKey( _a1763, _k1763 ); } } - - } + _k1757 = getNextArrayKey( _a1757, _k1757 ); + } } - */ if ( !isDefined( spawnpoints ) || spawnpoints.size == 0 ) { spawnpoints = getstructarray( "initial_spawn_points", "targetname" ); @@ -1574,15 +1540,15 @@ onspawnplayer( predictedspawn ) } -get_player_spawns_for_gametype() +get_player_spawns_for_gametype() //fixed checked partially changed to match cerberus output { match_string = ""; 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; } - match_string = ( level.scr_zm_ui_gametype + "_" ) + location; + match_string = level.scr_zm_ui_gametype + "_" + location; player_spawns = []; structs = getstructarray( "player_respawn_point", "targetname" ); _a1869 = structs; @@ -1611,11 +1577,11 @@ get_player_spawns_for_gametype() return player_spawns; } -onendgame( winningteam ) +onendgame( winningteam ) //checked matches cerberus output { } -onroundendgame( roundwinner ) +onroundendgame( roundwinner ) //checked matches cerberus output { if ( game[ "roundswon" ][ "allies" ] == game[ "roundswon" ][ "axis" ] ) { @@ -1632,7 +1598,7 @@ onroundendgame( roundwinner ) return winner; } -menu_init() +menu_init() //checked matches cerberus output { game[ "menu_team" ] = "team_marinesopfor"; game[ "menu_changeclass_allies" ] = "changeclass"; @@ -1674,7 +1640,7 @@ menu_init() level thread menu_onplayerconnect(); } -menu_onplayerconnect() +menu_onplayerconnect() //checked matches cerberus output { for ( ;; ) { @@ -1683,7 +1649,7 @@ menu_onplayerconnect() } } -menu_onmenuresponse() +menu_onmenuresponse() //checked changed to match cerberus output { self endon( "disconnect" ); for ( ;; ) @@ -1709,7 +1675,7 @@ menu_onmenuresponse() } continue; } - else if ( response == "changeteam" && level.allow_teamchange == "1" ) + if ( response == "changeteam" && level.allow_teamchange == "1" ) { self closemenu(); self closeingamemenu(); @@ -1722,35 +1688,35 @@ menu_onmenuresponse() self openmenu( game[ "menu_changeclass_allies" ] ); continue; } - else if ( response == "changeclass_opfor" ) + if ( response == "changeclass_opfor" ) { self closemenu(); self closeingamemenu(); self openmenu( game[ "menu_changeclass_axis" ] ); continue; } - else if ( response == "changeclass_wager" ) + if ( response == "changeclass_wager" ) { self closemenu(); self closeingamemenu(); self openmenu( game[ "menu_changeclass_wager" ] ); continue; } - else if ( response == "changeclass_custom" ) + if ( response == "changeclass_custom" ) { self closemenu(); self closeingamemenu(); self openmenu( game[ "menu_changeclass_custom" ] ); continue; } - else if ( response == "changeclass_barebones" ) + if ( response == "changeclass_barebones" ) { self closemenu(); self closeingamemenu(); self openmenu( game[ "menu_changeclass_barebones" ] ); continue; } - else if ( response == "changeclass_marines_splitscreen" ) + if ( response == "changeclass_marines_splitscreen" ) { self openmenu( "changeclass_marines_splitscreen" ); } @@ -1763,7 +1729,7 @@ menu_onmenuresponse() if ( self issplitscreen() ) { level.skipvote = 1; - if ( isDefined( level.gameended ) && !level.gameended ) + if ( isDefined( level.gameended ) && level.gameended ) { self maps/mp/zombies/_zm_laststand::add_weighted_down(); self maps/mp/zombies/_zm_stats::increment_client_stat( "deaths" ); @@ -1776,7 +1742,7 @@ menu_onmenuresponse() } continue; } - else if ( response == "restart_level_zm" ) + if ( response == "restart_level_zm" ) { self maps/mp/zombies/_zm_laststand::add_weighted_down(); self maps/mp/zombies/_zm_stats::increment_client_stat( "deaths" ); @@ -1789,9 +1755,9 @@ menu_onmenuresponse() level thread maps/mp/gametypes_zm/_globallogic::killserverpc(); continue; } - else if ( response == "endround" ) + if ( response == "endround" ) { - if ( isDefined( level.gameended ) && !level.gameended ) + if ( isDefined( level.gameended ) && level.gameended ) { self maps/mp/gametypes_zm/_globallogic::gamehistoryplayerquit(); self maps/mp/zombies/_zm_laststand::add_weighted_down(); @@ -1809,7 +1775,7 @@ menu_onmenuresponse() } continue; } - else if ( menu == game[ "menu_team" ] && level.allow_teamchange == "1" ) + if ( menu == game[ "menu_team" ] && level.allow_teamchange == "1" ) { switch( response ) { @@ -1845,7 +1811,7 @@ menu_onmenuresponse() } -menuallieszombies() +menuallieszombies() //checked changed to match cerberus output { self maps/mp/gametypes_zm/_globallogic_ui::closemenus(); if ( !level.console && level.allow_teamchange == "0" && isDefined( self.hasdonecombat ) && self.hasdonecombat ) @@ -1854,7 +1820,7 @@ menuallieszombies() } if ( self.pers[ "team" ] != "allies" ) { - if ( level.ingraceperiod || !isDefined( self.hasdonecombat ) && !self.hasdonecombat ) + if ( level.ingraceperiod && !isDefined( self.hasdonecombat ) || !self.hasdonecombat ) { self.hasspawned = 0; } @@ -1865,9 +1831,12 @@ menuallieszombies() self.leaving_team = self.pers[ "team" ]; self suicide(); } - self.pers[ "team" ] = "allies"; + self.pers["team"] = "allies"; self.team = "allies"; + self.pers["class"] = undefined; self.class = undefined; + self.pers["weapon"] = undefined; + self.pers["savedmodel"] = undefined; self updateobjectivetext(); if ( level.teambased ) { @@ -1886,30 +1855,26 @@ menuallieszombies() } -custom_spawn_init_func() +custom_spawn_init_func() //checked matches cerberus output { array_thread( level.zombie_spawners, ::add_spawn_function, maps/mp/zombies/_zm_spawner::zombie_spawn_init ); array_thread( level.zombie_spawners, ::add_spawn_function, level._zombies_round_spawn_failsafe ); } -kill_all_zombies() +kill_all_zombies() //changed to match cerberus output { ai = getaiarray( level.zombie_team ); - _a2225 = ai; - _k2225 = getFirstArrayKey( _a2225 ); - while ( isDefined( _k2225 ) ) + foreach(zombie in ai) { - zombie = _a2225[ _k2225 ]; - if ( isDefined( zombie ) ) + if(isdefined(zombie)) { - zombie dodamage( zombie.maxhealth * 2, zombie.origin, zombie, zombie, "none", "MOD_SUICIDE" ); - wait 0.05; + zombie dodamage(zombie.maxhealth * 2, zombie.origin, zombie, zombie, "none", "MOD_SUICIDE"); + wait(0.05); } - _k2225 = getNextArrayKey( _a2225, _k2225 ); } } -init() +init() //checked matches cerberus output { flag_init( "pregame" ); @@ -1917,7 +1882,7 @@ init() level thread onplayerconnect(); } -onplayerconnect() +onplayerconnect() //checked matches cerberus output { for ( ;; ) { @@ -1930,7 +1895,7 @@ onplayerconnect() } } -onplayerspawned() +onplayerspawned() //checked partially changed to cerberus output { level endon( "end_game" ); self endon( "disconnect" ); @@ -1980,7 +1945,7 @@ onplayerspawned() { weapons_restored = self [[ level.onplayerspawned_restore_previous_weapons ]](); } - if ( isDefined( weapons_restored ) && !weapons_restored ) + if ( !isDefined( weapons_restored ) && weapons_restored ) { self give_start_weapon( 1 ); } @@ -1997,7 +1962,7 @@ onplayerspawned() } } -wait_for_players() +wait_for_players() //checked matches cerberus output { level endon( "end_race" ); if ( getDvarInt( "party_playerCount" ) == 1 ) @@ -2026,7 +1991,7 @@ wait_for_players() } } -onplayerconnect_check_for_hotjoin() +onplayerconnect_check_for_hotjoin() //checked matches cerberus output { /* /# @@ -2044,7 +2009,7 @@ onplayerconnect_check_for_hotjoin() } } -hide_gump_loading_for_hotjoiners() +hide_gump_loading_for_hotjoiners() //checked matches cerberus output { self endon( "disconnect" ); self.rebuild_barrier_reward = 1; @@ -2074,3 +2039,6 @@ blank() } + + + diff --git a/patch_zm/maps/mp/zombies/MajorErrors/_zm_perks.gsc b/patch_zm/maps/mp/zombies/MajorErrors/_zm_perks.gsc index 105c5cf..6e730b9 100644 --- a/patch_zm/maps/mp/zombies/MajorErrors/_zm_perks.gsc +++ b/patch_zm/maps/mp/zombies/MajorErrors/_zm_perks.gsc @@ -14,13 +14,13 @@ #include common_scripts/utility; #include maps/mp/zombies/_zm_magicbox; -init() +init() //checked { level.additionalprimaryweapon_limit = 3; level.perk_purchase_limit = 4; if ( !level.createfx_enabled ) { - perks_register_clientfield(); + perks_register_clientfield(); //fixed } if ( !level.enable_magic ) { @@ -28,7 +28,8 @@ init() } initialize_custom_perk_arrays(); perk_machine_spawn_init(); - + + //not broken vending_weapon_upgrade_trigger = []; vending_triggers = getentarray( "zombie_vending", "targetname" ); i = 0; @@ -72,7 +73,9 @@ init() set_zombie_var( "zombie_perk_juggernaut_health_upgrade", 190 ); array_thread( vending_triggers, ::vending_trigger_think ); array_thread( vending_triggers, ::electric_perks_dialog ); - + + + if ( isDefined( level.zombiemode_using_doubletap_perk ) && level.zombiemode_using_doubletap_perk ) { level thread turn_doubletap_on(); @@ -109,17 +112,15 @@ init() { level thread turn_chugabud_on(); } - while ( level._custom_perks.size > 0 ) + if(level._custom_perks.size > 0) { - a_keys = getarraykeys( level._custom_perks ); - i = 0; - while ( i < a_keys.size ) + a_keys = getarraykeys(level._custom_perks); + for(i = 0; i < a_keys.size; i++) { - if ( isDefined( level._custom_perks[ a_keys[ i ] ].perk_machine_thread ) ) + if(isdefined(level._custom_perks[ a_keys[ i ] ].perk_machine_thread)) { - level thread [[ level._custom_perks[ a_keys[ i ] ].perk_machine_thread ]](); + level thread [[level._custom_perks[ a_keys[ i ] ].perk_machine_thread]](); } - i++; } } if ( isDefined( level._custom_turn_packapunch_on ) ) @@ -138,7 +139,7 @@ init() } -default_vending_precaching() +default_vending_precaching() //checked { if ( isDefined( level.zombiemode_using_pack_a_punch ) && level.zombiemode_using_pack_a_punch ) { @@ -273,30 +274,28 @@ default_vending_precaching() level.machine_assets[ "whoswho" ].off_model = "p6_zm_vending_chugabud"; level.machine_assets[ "whoswho" ].on_model = "p6_zm_vending_chugabud_on"; } - while ( level._custom_perks.size > 0 ) + if(level._custom_perks.size > 0) //changed { - a_keys = getarraykeys( level._custom_perks ); - i = 0; - while ( i < a_keys.size ) + a_keys = getarraykeys(level._custom_perks); + for(i = 0; i < a_keys.size; i++) { - if ( isDefined( level._custom_perks[ a_keys[ i ] ].precache_func ) ) + if(isdefined(level._custom_perks[ a_keys[ i ] ].precache_func)) { - level [[ level._custom_perks[ a_keys[ i ] ].precache_func ]](); + level [[level._custom_perks[ a_keys[ i ] ].precache_func]](); } - i++; } } } -pap_weapon_move_in( trigger, origin_offset, angles_offset ) +pap_weapon_move_in( trigger, origin_offset, angles_offset ) //changed { level endon( "Pack_A_Punch_off" ); trigger endon( "pap_player_disconnected" ); - trigger.worldgun rotateto( self.angles + angles_offset + vectorScale( ( 0, -1, 0 ), 90 ), 0.35, 0, 0 ); - offsetdw = vectorScale( ( 0, -1, 0 ), 3 ); + trigger.worldgun rotateto( self.angles + angles_offset + vectorScale( ( 0, 1, 0 ), 90 ), 0.35, 0, 0 ); + offsetdw = vectorScale( ( 1, 1, 1 ), 3 ); if ( isDefined( trigger.worldgun.worldgundw ) ) { - trigger.worldgun.worldgundw rotateto( self.angles + angles_offset + vectorScale( ( 0, -1, 0 ), 90 ), 0.35, 0, 0 ); + trigger.worldgun.worldgundw rotateto( self.angles + angles_offset + vectorScale( ( 0, 1, 0 ), 90 ), 0.35, 0, 0 ); } wait 0.5; trigger.worldgun moveto( self.origin + origin_offset, 0.5, 0, 0 ); @@ -306,11 +305,11 @@ pap_weapon_move_in( trigger, origin_offset, angles_offset ) } } -pap_weapon_move_out( trigger, origin_offset, interact_offset ) +pap_weapon_move_out( trigger, origin_offset, interact_offset ) //changed { level endon( "Pack_A_Punch_off" ); trigger endon( "pap_player_disconnected" ); - offsetdw = vectorScale( ( 0, -1, 0 ), 3 ); + offsetdw = vectorScale( ( 1, 1, 1 ), 3 ); if ( !isDefined( trigger.worldgun ) ) { return; @@ -338,13 +337,13 @@ fx_ent_failsafe() self delete(); } -third_person_weapon_upgrade( current_weapon, upgrade_weapon, packa_rollers, perk_machine, trigger ) +third_person_weapon_upgrade( current_weapon, upgrade_weapon, packa_rollers, perk_machine, trigger ) //changed { level endon( "Pack_A_Punch_off" ); trigger endon( "pap_player_disconnected" ); rel_entity = trigger.perk_machine; - origin_offset = ( 0, -1, 0 ); - angles_offset = ( 0, -1, 0 ); + origin_offset = ( 0, 0, 0 ); + angles_offset = ( 0, 0, 0 ); origin_base = self.origin; angles_base = self.angles; if ( isDefined( rel_entity ) ) @@ -355,9 +354,9 @@ third_person_weapon_upgrade( current_weapon, upgrade_weapon, packa_rollers, perk } else { - origin_offset = vectorScale( ( 0, -1, 0 ), 35 ); + origin_offset = vectorScale( ( 0, 0, 1 ), 35 ); } - angles_offset = vectorScale( ( 0, -1, 0 ), 90 ); + angles_offset = vectorScale( ( 0, 1, 0 ), 90 ); origin_base = rel_entity.origin; angles_base = rel_entity.angles; } @@ -378,7 +377,7 @@ third_person_weapon_upgrade( current_weapon, upgrade_weapon, packa_rollers, perk { fx = playfxontag( level._effect[ "packapunch_fx" ], perk_machine.fx_ent, "tag_origin" ); } - offsetdw = vectorScale( ( 0, -1, 0 ), 3 ); + offsetdw = vectorScale( ( 1, 1, 1 ), 3 ); weoptions = self maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( current_weapon ); trigger.worldgun = spawn_weapon_model( current_weapon, undefined, origin_base + interact_offset, self.angles, weoptions ); worldgundw = undefined; @@ -398,7 +397,7 @@ third_person_weapon_upgrade( current_weapon, upgrade_weapon, packa_rollers, perk self playsound( "zmb_perks_packa_upgrade" ); if ( isDefined( perk_machine.wait_flag ) ) { - perk_machine.wait_flag rotateto( perk_machine.wait_flag.angles + vectorScale( ( 0, -1, 0 ), 179 ), 0.25, 0, 0 ); + perk_machine.wait_flag rotateto( perk_machine.wait_flag.angles + vectorScale( ( 1, 0, 0 ), 179 ), 0.25, 0, 0 ); } wait 0.35; trigger.worldgun delete(); @@ -418,7 +417,7 @@ third_person_weapon_upgrade( current_weapon, upgrade_weapon, packa_rollers, perk upoptions = self maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( upgrade_weapon ); trigger.current_weapon = current_weapon; trigger.upgrade_name = upgrade_weapon; - trigger.worldgun = spawn_weapon_model( upgrade_weapon, undefined, origin_base + origin_offset, angles_base + angles_offset + vectorScale( ( 0, -1, 0 ), 90 ), upoptions ); + trigger.worldgun = spawn_weapon_model( upgrade_weapon, undefined, origin_base + origin_offset, angles_base + angles_offset + vectorScale( ( 0, 1, 0 ), 90 ), upoptions ); worldgundw = undefined; if ( maps/mp/zombies/_zm_magicbox::weapon_is_dual_wield( upgrade_weapon ) ) { @@ -427,7 +426,7 @@ third_person_weapon_upgrade( current_weapon, upgrade_weapon, packa_rollers, perk trigger.worldgun.worldgundw = worldgundw; if ( isDefined( perk_machine.wait_flag ) ) { - perk_machine.wait_flag rotateto( perk_machine.wait_flag.angles - vectorScale( ( 0, -1, 0 ), 179 ), 0.25, 0, 0 ); + perk_machine.wait_flag rotateto( perk_machine.wait_flag.angles - vectorScale( ( 1, 0, 0 ), 179 ), 0.25, 0, 0 ); } if ( isDefined( level.custom_pap_move_out ) ) { @@ -440,7 +439,7 @@ third_person_weapon_upgrade( current_weapon, upgrade_weapon, packa_rollers, perk return trigger.worldgun; } -can_pack_weapon( weaponname ) +can_pack_weapon( weaponname ) //checked { if ( weaponname == "riotshield_zm" ) { @@ -462,7 +461,7 @@ can_pack_weapon( weaponname ) return 1; } -player_use_can_pack_now() +player_use_can_pack_now() //checked { if ( !self maps/mp/zombies/_zm_laststand::player_is_in_laststand() && isDefined( self.intermission ) || self.intermission && self isthrowinggrenade() ) { @@ -483,33 +482,27 @@ player_use_can_pack_now() return 1; } -vending_machine_trigger_think() +vending_machine_trigger_think() //changed 3/30/20 4:17 pm { - self endon( "death" ); - self endon( "Pack_A_Punch_off" ); - while ( 1 ) + self endon("death"); + self endon("Pack_A_Punch_off"); + while(1) { players = get_players(); - i = 0; - while ( i < players.size ) + for(i = 0; i < players.size; i++) { - if ( isDefined( self.pack_player ) || self.pack_player != players[ i ] && !players[ i ] player_use_can_pack_now() ) + if(isdefined(self.pack_player) && self.pack_player != players[i] || !players[i] player_use_can_pack_now()) { - self setinvisibletoplayer( players[ i ], 1 ); - i++; + self setinvisibletoplayer(players[i], 1); continue; } - else - { - self setinvisibletoplayer( players[ i ], 0 ); - } - i++; + self setinvisibletoplayer(players[i], 0); } - wait 0.1; + wait(0.1); } } -vending_weapon_upgrade() +vending_weapon_upgrade() //changed { level endon( "Pack_A_Punch_off" ); wait 0.01; @@ -567,10 +560,6 @@ vending_weapon_upgrade() self waittill( "trigger", player ); index = maps/mp/zombies/_zm_weapons::get_player_index( player ); current_weapon = player getcurrentweapon(); - if ( current_weapon == "microwavegun_zm" ) - { - current_weapon = "microwavegundw_zm"; - } current_weapon = player maps/mp/zombies/_zm_weapons::switch_from_alt_weapon( current_weapon ); if ( isDefined( level.custom_pap_validation ) ) { @@ -580,128 +569,121 @@ vending_weapon_upgrade() continue; } } - else if ( player maps/mp/zombies/_zm_magicbox::can_buy_weapon() && !player maps/mp/zombies/_zm_laststand::player_is_in_laststand() && isDefined( player.intermission ) && !player.intermission || player isthrowinggrenade() && !player maps/mp/zombies/_zm_weapons::can_upgrade_weapon( current_weapon ) ) + if ( player maps/mp/zombies/_zm_magicbox::can_buy_weapon() && !player maps/mp/zombies/_zm_laststand::player_is_in_laststand() && isDefined( player.intermission ) && !player.intermission || player isthrowinggrenade() && !player maps/mp/zombies/_zm_weapons::can_upgrade_weapon( current_weapon ) ) { wait 0.1; continue; } - else + if ( isDefined( level.pap_moving ) && level.pap_moving ) { - if ( isDefined( level.pap_moving ) && level.pap_moving ) + continue; + } + if ( player isswitchingweapons() ) + { + wait 0.1; + if ( player isswitchingweapons() ) { - break; + continue; + } + } + if ( !maps/mp/zombies/_zm_weapons::is_weapon_or_base_included( current_weapon ) ) + { + continue; + } + + current_cost = self.cost; + player.restore_ammo = undefined; + player.restore_clip = undefined; + player.restore_stock = undefined; + player_restore_clip_size = undefined; + player.restore_max = undefined; + upgrade_as_attachment = will_upgrade_weapon_as_attachment( current_weapon ); + if ( upgrade_as_attachment ) + { + current_cost = self.attachment_cost; + player.restore_ammo = 1; + player.restore_clip = player getweaponammoclip( current_weapon ); + player.restore_clip_size = weaponclipsize( current_weapon ); + player.restore_stock = player getweaponammostock( current_weapon ); + player.restore_max = weaponmaxammo( current_weapon ); + } + if ( player maps/mp/zombies/_zm_pers_upgrades_functions::is_pers_double_points_active() ) + { + current_cost = player maps/mp/zombies/_zm_pers_upgrades_functions::pers_upgrade_double_points_cost( current_cost ); + } + if ( player.score < current_cost ) + { + self playsound( "deny" ); + if ( isDefined( level.custom_pap_deny_vo_func ) ) + { + player [[ level.custom_pap_deny_vo_func ]](); } else { - if ( player isswitchingweapons() ) - { - wait 0.1; - if ( player isswitchingweapons() ) - { - break; - } - } - else if ( !maps/mp/zombies/_zm_weapons::is_weapon_or_base_included( current_weapon ) ) - { - break; - } - else current_cost = self.cost; - player.restore_ammo = undefined; - player.restore_clip = undefined; - player.restore_stock = undefined; - player_restore_clip_size = undefined; - player.restore_max = undefined; - upgrade_as_attachment = will_upgrade_weapon_as_attachment( current_weapon ); - if ( upgrade_as_attachment ) - { - current_cost = self.attachment_cost; - player.restore_ammo = 1; - player.restore_clip = player getweaponammoclip( current_weapon ); - player.restore_clip_size = weaponclipsize( current_weapon ); - player.restore_stock = player getweaponammostock( current_weapon ); - player.restore_max = weaponmaxammo( current_weapon ); - } - if ( player maps/mp/zombies/_zm_pers_upgrades_functions::is_pers_double_points_active() ) - { - current_cost = player maps/mp/zombies/_zm_pers_upgrades_functions::pers_upgrade_double_points_cost( current_cost ); - } - if ( player.score < current_cost ) - { - self playsound( "deny" ); - if ( isDefined( level.custom_pap_deny_vo_func ) ) - { - player [[ level.custom_pap_deny_vo_func ]](); - } - else - { - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "perk_deny", undefined, 0 ); - } - break; - } - else - { - self.pack_player = player; - flag_set( "pack_machine_in_use" ); - maps/mp/_demo::bookmark( "zm_player_use_packapunch", getTime(), player ); - player maps/mp/zombies/_zm_stats::increment_client_stat( "use_pap" ); - player maps/mp/zombies/_zm_stats::increment_player_stat( "use_pap" ); - self thread destroy_weapon_in_blackout( player ); - self thread destroy_weapon_on_disconnect( player ); - player maps/mp/zombies/_zm_score::minus_to_player_score( current_cost, 1 ); - sound = "evt_bottle_dispense"; - playsoundatposition( sound, self.origin ); - self thread maps/mp/zombies/_zm_audio::play_jingle_or_stinger( "mus_perks_packa_sting" ); - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", "upgrade_wait" ); - self disable_trigger(); - if ( isDefined( upgrade_as_attachment ) && !upgrade_as_attachment ) - { - player thread do_player_general_vox( "general", "pap_wait", 10, 100 ); - } - else - { - player thread do_player_general_vox( "general", "pap_wait2", 10, 100 ); - } - player thread do_knuckle_crack(); - self.current_weapon = current_weapon; - upgrade_name = maps/mp/zombies/_zm_weapons::get_upgrade_weapon( current_weapon, upgrade_as_attachment ); - player third_person_weapon_upgrade( current_weapon, upgrade_name, packa_rollers, perk_machine, self ); - self enable_trigger(); - self sethintstring( &"ZOMBIE_GET_UPGRADED" ); - if ( isDefined( player ) ) - { - self setinvisibletoall(); - self setvisibletoplayer( player ); - self thread wait_for_player_to_take( player, current_weapon, packa_timer, upgrade_as_attachment ); - } - self thread wait_for_timeout( current_weapon, packa_timer, player ); - self waittill_any( "pap_timeout", "pap_taken", "pap_player_disconnected" ); - self.current_weapon = ""; - if ( isDefined( self.worldgun ) && isDefined( self.worldgun.worldgundw ) ) - { - self.worldgun.worldgundw delete(); - } - if ( isDefined( self.worldgun ) ) - { - self.worldgun delete(); - } - if ( isDefined( level.zombiemode_reusing_pack_a_punch ) && level.zombiemode_reusing_pack_a_punch ) - { - self sethintstring( &"ZOMBIE_PERK_PACKAPUNCH_ATT", self.cost ); - } - else - { - self sethintstring( &"ZOMBIE_PERK_PACKAPUNCH", self.cost ); - } - self setvisibletoall(); - self.pack_player = undefined; - flag_clear( "pack_machine_in_use" ); - } + player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "perk_deny", undefined, 0 ); } + continue; } + + self.pack_player = player; + flag_set( "pack_machine_in_use" ); + maps/mp/_demo::bookmark( "zm_player_use_packapunch", getTime(), player ); + player maps/mp/zombies/_zm_stats::increment_client_stat( "use_pap" ); + player maps/mp/zombies/_zm_stats::increment_player_stat( "use_pap" ); + self thread destroy_weapon_in_blackout( player ); + self thread destroy_weapon_on_disconnect( player ); + player maps/mp/zombies/_zm_score::minus_to_player_score( current_cost, 1 ); + sound = "evt_bottle_dispense"; + playsoundatposition( sound, self.origin ); + self thread maps/mp/zombies/_zm_audio::play_jingle_or_stinger( "mus_perks_packa_sting" ); + player maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", "upgrade_wait" ); + self disable_trigger(); + if ( isDefined( upgrade_as_attachment ) && !upgrade_as_attachment ) + { + player thread do_player_general_vox( "general", "pap_wait", 10, 100 ); + } + else + { + player thread do_player_general_vox( "general", "pap_wait2", 10, 100 ); + } + player thread do_knuckle_crack(); + self.current_weapon = current_weapon; + upgrade_name = maps/mp/zombies/_zm_weapons::get_upgrade_weapon( current_weapon, upgrade_as_attachment ); + player third_person_weapon_upgrade( current_weapon, upgrade_name, packa_rollers, perk_machine, self ); + self enable_trigger(); + self sethintstring( &"ZOMBIE_GET_UPGRADED" ); + if ( isDefined( player ) ) + { + self setinvisibletoall(); + self setvisibletoplayer( player ); + self thread wait_for_player_to_take( player, current_weapon, packa_timer, upgrade_as_attachment ); + } + self thread wait_for_timeout( current_weapon, packa_timer, player ); + self waittill_any( "pap_timeout", "pap_taken", "pap_player_disconnected" ); + self.current_weapon = ""; + if ( isDefined( self.worldgun ) && isDefined( self.worldgun.worldgundw ) ) + { + self.worldgun.worldgundw delete(); + } + if ( isDefined( self.worldgun ) ) + { + self.worldgun delete(); + } + if ( isDefined( level.zombiemode_reusing_pack_a_punch ) && level.zombiemode_reusing_pack_a_punch ) + { + self sethintstring( &"ZOMBIE_PERK_PACKAPUNCH_ATT", self.cost ); + } + else + { + self sethintstring( &"ZOMBIE_PERK_PACKAPUNCH", self.cost ); + } + self setvisibletoall(); + self.pack_player = undefined; + flag_clear( "pack_machine_in_use" ); } } -shutoffpapsounds( ent1, ent2, ent3 ) +shutoffpapsounds( ent1, ent2, ent3 ) //checked 3/30/20 4:18 pm { while ( 1 ) { @@ -713,13 +695,13 @@ shutoffpapsounds( ent1, ent2, ent3 ) } } -turnonpapsounds( ent ) +turnonpapsounds( ent ) //checked 3/30/20 4:18 pm { level waittill( "Pack_A_Punch_on" ); ent playloopsound( "zmb_perks_packa_loop" ); } -vending_weapon_upgrade_cost() +vending_weapon_upgrade_cost() //checked 3/30/20 4:19 pm { level endon( "Pack_A_Punch_off" ); while ( 1 ) @@ -749,7 +731,7 @@ vending_weapon_upgrade_cost() } } -wait_for_player_to_take( player, weapon, packa_timer, upgrade_as_attachment ) +wait_for_player_to_take( player, weapon, packa_timer, upgrade_as_attachment ) //changed 3/30/20 4:22 pm { current_weapon = self.current_weapon; upgrade_name = self.upgrade_name; @@ -767,13 +749,15 @@ wait_for_player_to_take( player, weapon, packa_timer, upgrade_as_attachment ) while ( 1 ) { packa_timer playloopsound( "zmb_perks_packa_ticktock" ); - self waittill( "trigger", trigger_player ); + self waittill( "trigger", trigger_player ); //working + if ( isDefined( level.pap_grab_by_anyone ) && level.pap_grab_by_anyone ) { player = trigger_player; } + packa_timer stoploopsound( 0.05 ); - if ( trigger_player == player ) + if ( trigger_player == player ) //working { player maps/mp/zombies/_zm_stats::increment_client_stat( "pap_weapon_grabbed" ); player maps/mp/zombies/_zm_stats::increment_player_stat( "pap_weapon_grabbed" ); @@ -786,7 +770,7 @@ wait_for_player_to_take( player, weapon, packa_timer, upgrade_as_attachment ) #/ } */ - if ( is_player_valid( player ) && player.is_drinking > 0 && !is_placeable_mine( current_weapon ) && !is_equipment( current_weapon ) && level.revive_tool != current_weapon && current_weapon != "none" && !player hacker_active() ) + if ( is_player_valid( player ) && !player.is_drinking > 0 && !is_placeable_mine( current_weapon ) && !is_equipment( current_weapon ) && level.revive_tool != current_weapon && current_weapon != "none" && !player hacker_active() ) { maps/mp/_demo::bookmark( "zm_player_grabbed_packapunch", getTime(), player ); self notify( "pap_taken" ); @@ -833,7 +817,7 @@ wait_for_player_to_take( player, weapon, packa_timer, upgrade_as_attachment ) } } -wait_for_timeout( weapon, packa_timer, player ) +wait_for_timeout( weapon, packa_timer, player ) //checked { self endon( "pap_taken" ); self endon( "pap_player_disconnected" ); @@ -850,7 +834,7 @@ wait_for_timeout( weapon, packa_timer, player ) } } -wait_for_disconnect( player ) +wait_for_disconnect( player ) //checked { self endon( "pap_taken" ); self endon( "pap_timeout" ); @@ -866,7 +850,7 @@ wait_for_disconnect( player ) self notify( "pap_player_disconnected" ); } -destroy_weapon_on_disconnect( player ) +destroy_weapon_on_disconnect( player ) //checked { self endon( "pap_timeout" ); self endon( "pap_taken" ); @@ -882,7 +866,7 @@ destroy_weapon_on_disconnect( player ) } } -destroy_weapon_in_blackout( player ) +destroy_weapon_in_blackout( player ) //checked { self endon( "pap_timeout" ); self endon( "pap_taken" ); @@ -901,7 +885,7 @@ destroy_weapon_in_blackout( player ) } } -do_knuckle_crack() +do_knuckle_crack() //checked { self endon( "disconnect" ); gun = self upgrade_knuckle_crack_begin(); @@ -930,7 +914,7 @@ upgrade_knuckle_crack_begin() return gun; } -upgrade_knuckle_crack_end( gun ) +upgrade_knuckle_crack_end( gun ) //changed { /* /# @@ -958,17 +942,13 @@ upgrade_knuckle_crack_end( gun ) { self switchtoweapon( primaries[ 0 ] ); } + else if ( self hasweapon( level.laststandpistol ) ) + { + self switchtoweapon( level.laststandpistol ); + } else { - if ( self hasweapon( level.laststandpistol ) ) - { - self switchtoweapon( level.laststandpistol ); - return; - } - else - { - self maps/mp/zombies/_zm_weapons::give_fallback_weapon(); - } + self maps/mp/zombies/_zm_weapons::give_fallback_weapon(); } } @@ -1251,7 +1231,7 @@ revive_solo_fx( machine_clip, blocker_model ) { self unlink(); } - self moveto( self.origin + vectorScale( ( 0, -1, 0 ), 40 ), 3 ); + self moveto( self.origin + vectorScale( ( 0, 0, 1 ), 40 ), 3 ); if ( isDefined( level.custom_vibrate_func ) ) { [[ level.custom_vibrate_func ]]( self ); @@ -1770,7 +1750,7 @@ reset_vending_hint_string() } } -vending_trigger_think() +vending_trigger_think() //checked to a degree { self endon( "death" ); wait 0.01; @@ -1778,30 +1758,28 @@ vending_trigger_think() solo = 0; start_on = 0; level.revive_machine_is_solo = 0; - if ( isDefined( perk ) || perk == "specialty_quickrevive" && perk == "specialty_quickrevive_upgrade" ) + + //fixed + if( isdefined( perk ) && perk == "specialty_quickrevive" ) { - flag_wait( "start_zombie_round_logic" ); + flag_wait("start_zombie_round_logic"); solo = use_solo_revive(); - self endon( "stop_quickrevive_logic" ); + self endon("stop_quickrevive_logic"); level.quick_revive_trigger = self; - if ( solo ) + if( solo ) { - if ( !is_true( level.revive_machine_is_solo ) ) + if(!is_true(level.revive_machine_is_solo)) { start_on = 1; players = get_players(); - _a2045 = players; - _k2045 = getFirstArrayKey( _a2045 ); - while ( isDefined( _k2045 ) ) + foreach(player in players) { - player = _a2045[ _k2045 ]; - if ( !isDefined( player.lives ) ) + if(!isdefined(player.lives)) { player.lives = 0; } - _k2045 = getNextArrayKey( _a2045, _k2045 ); } - level maps/mp/zombies/_zm::set_default_laststand_pistol( 1 ); + level maps/mp/zombies/_zm::set_default_laststand_pistol(1); } level.revive_machine_is_solo = 1; } @@ -1933,91 +1911,89 @@ vending_trigger_think() index = maps/mp/zombies/_zm_weapons::get_player_index( player ); if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( player.intermission ) && player.intermission ) { + wait 0.1; continue; } - else + + if ( player in_revive_trigger() ) { - if ( player in_revive_trigger() ) - { - break; - } - else if ( !player maps/mp/zombies/_zm_magicbox::can_buy_weapon() ) - { - wait 0.1; - break; - } - else if ( player isthrowinggrenade() ) - { - wait 0.1; - break; - } - else if ( player isswitchingweapons() ) - { - wait 0.1; - break; - } - else if ( player.is_drinking > 0 ) - { - wait 0.1; - break; - } - else if ( player hasperk( perk ) || player has_perk_paused( perk ) ) - { - cheat = 0; - /* + wait 0.1; + continue; + } + if ( !player maps/mp/zombies/_zm_magicbox::can_buy_weapon() ) + { + wait 0.1; + continue; + } + if ( player isthrowinggrenade() ) + { + wait 0.1; + continue; + } + if ( player isswitchingweapons() ) + { + wait 0.1; + continue; + } + if ( player.is_drinking > 0 ) + { + wait 0.1; + continue; + } + if ( player hasperk( perk ) || player has_perk_paused( perk ) ) + { + cheat = 0; + /* /# - if ( getDvarInt( "zombie_cheat" ) >= 5 ) - { - cheat = 1; + if ( getDvarInt( "zombie_cheat" ) >= 5 ) + { + cheat = 1; #/ - } - */ - if ( cheat != 1 ) - { - self playsound( "deny" ); - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "perk_deny", undefined, 1 ); - break; - } } - else if ( isDefined( level.custom_perk_validation ) ) + */ + if ( cheat != 1 ) { - valid = self [[ level.custom_perk_validation ]]( player ); - if ( !valid ) - { - break; - } - } - else current_cost = cost; - if ( player maps/mp/zombies/_zm_pers_upgrades_functions::is_pers_double_points_active() ) - { - current_cost = player maps/mp/zombies/_zm_pers_upgrades_functions::pers_upgrade_double_points_cost( current_cost ); - } - if ( player.score < current_cost ) - { - self playsound( "evt_perk_deny" ); - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "perk_deny", undefined, 0 ); - break; - } - else if ( player.num_perks >= player get_player_perk_purchase_limit() ) - { - self playsound( "evt_perk_deny" ); - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "sigh" ); - break; - } - else - { - sound = "evt_bottle_dispense"; - playsoundatposition( sound, self.origin ); - player maps/mp/zombies/_zm_score::minus_to_player_score( current_cost, 1 ); - player.perk_purchased = perk; - self thread maps/mp/zombies/_zm_audio::play_jingle_or_stinger( self.script_label ); - self thread vending_trigger_post_think( player, perk ); + self playsound( "deny" ); + player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "perk_deny", undefined, 1 ); + continue; } } + if ( isDefined( level.custom_perk_validation ) ) + { + valid = self [[ level.custom_perk_validation ]]( player ); + if ( !valid ) + { + continue; + } + } + current_cost = cost; + if ( player maps/mp/zombies/_zm_pers_upgrades_functions::is_pers_double_points_active() ) + { + current_cost = player maps/mp/zombies/_zm_pers_upgrades_functions::pers_upgrade_double_points_cost( current_cost ); + } + if ( player.score < current_cost ) + { + self playsound( "evt_perk_deny" ); + player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "perk_deny", undefined, 0 ); + continue; + } + + if ( player.num_perks >= player get_player_perk_purchase_limit() ) + { + self playsound( "evt_perk_deny" ); + player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "sigh" ); + continue; + } + sound = "evt_bottle_dispense"; + playsoundatposition( sound, self.origin ); + player maps/mp/zombies/_zm_score::minus_to_player_score( current_cost, 1 ); + player.perk_purchased = perk; + self thread maps/mp/zombies/_zm_audio::play_jingle_or_stinger( self.script_label ); + self thread vending_trigger_post_think( player, perk ); } } -vending_trigger_post_think( player, perk ) +vending_trigger_post_think( player, perk ) //something is broken here { player endon( "disconnect" ); player endon( "end_game" ); @@ -2585,7 +2561,7 @@ perk_give_bottle_begin( perk ) return gun; } -perk_give_bottle_end( gun, perk ) +perk_give_bottle_end( gun, perk ) //changed { self endon( "perk_abort_drinking" ); /* @@ -2675,7 +2651,8 @@ perk_give_bottle_end( gun, perk ) self switchtoweapon( primaryweapons[ 0 ] ); } } - self waittill( "weapon_change_complete" ); + self waittill( "weapon_change_complete" ); //event doesn't occur because there is no notifier bug + self decrement_is_drinking(); if ( !self maps/mp/zombies/_zm_laststand::player_is_in_laststand() && isDefined( self.intermission ) && !self.intermission ) { self decrement_is_drinking(); @@ -3089,21 +3066,16 @@ perk_machine_removal( machine, replacement_model ) perk_machine_spawn_init() { match_string = ""; + 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; - } + } + match_string = level.scr_zm_ui_gametype + "_perks_" + location; pos = []; - if(isdefined(level.override_perk_targetname)) - { - structs = getstructarray(level.override_perk_targetname, "targetname"); - } - else - { - structs = getstructarray("zm_perk_machine", "targetname"); - } + structs = getstructarray("zm_perk_machine", "targetname"); _a3578 = structs; _k3578 = getFirstArrayKey( _a3578 ); while ( isDefined( _k3578 ) ) @@ -3124,62 +3096,62 @@ perk_machine_spawn_init() _k3583 = getNextArrayKey( _a3583, _k3583 ); } } - else pos[ pos.size ] = struct; + else + { + pos[ pos.size ] = struct; + } _k3578 = getNextArrayKey( _a3578, _k3578 ); } - if(!isdefined(pos) || pos.size == 0) + + if(!IsDefined(pos) || pos.size == 0) { return; } - precachemodel("zm_collision_perks1"); - for(i = 0; i < pos.size; i++) + if ( level.script == "zm_prison" && is_classic() ) + { + posSizeOffset = pos.size - 4; + } + PreCacheModel("zm_collision_perks1"); + //everything above the for loop works + //broken + + for ( i = 0; i < posSizeOffset; i++ ) { perk = pos[i].script_noteworthy; - if(isdefined(perk) && isdefined(pos[i].model)) + if(IsDefined(perk) && IsDefined(pos[i].model)) { - use_trigger = spawn("trigger_radius_use", pos[i].origin + VectorScale( 0, 0, 1, 30), 0, 40, 70); - use_trigger.targetname = "zombie_vending"; + use_trigger = Spawn( "trigger_radius_use", pos[i].origin + (0, 0, 30), 0, 40, 70 ); + use_trigger.targetname = "zombie_vending"; use_trigger.script_noteworthy = perk; - use_trigger triggerignoreteam(); - perk_machine = spawn("script_model", pos[i].origin); + use_trigger TriggerIgnoreTeam(); + //use_trigger thread debug_spot(); + + perk_machine = Spawn("script_model", pos[i].origin); perk_machine.angles = pos[i].angles; - perk_machine setmodel(pos[i].model); - if(isdefined(level._no_vending_machine_bump_trigs) && level._no_vending_machine_bump_trigs) + perk_machine SetModel(pos[i].model); + + bump_trigger = Spawn( "trigger_radius", pos[i].origin, 0, 35, 64); + bump_trigger.script_activated = 1; + bump_trigger.script_sound = "zmb_perks_bump_bottle"; + bump_trigger.targetname = "audio_bump_trigger"; + + if( perk != "specialty_weapupgrade" ) { - bump_trigger = undefined; + bump_trigger thread thread_bump_trigger(); } - else - { - bump_trigger = spawn("trigger_radius", pos[i].origin, 0, 35, 64); - bump_trigger.script_activated = 1; - bump_trigger.script_sound = "zmb_perks_bump_bottle"; - bump_trigger.targetname = "audio_bump_trigger"; - if(perk != "specialty_weapupgrade") - { - bump_trigger thread thread_bump_trigger(); - } - } - collision = spawn("script_model", pos[i].origin, 1); + + collision = Spawn("script_model", pos[i].origin, 1); collision.angles = pos[i].angles; - collision setmodel("zm_collision_perks1"); + collision SetModel("zm_collision_perks1"); collision.script_noteworthy = "clip"; - collision disconnectpaths(); + collision DisconnectPaths(); + + // Connect all of the pieces for easy access. use_trigger.clip = collision; use_trigger.machine = perk_machine; use_trigger.bump = bump_trigger; - if(isdefined(pos[i].blocker_model)) - { - use_trigger.blocker_model = pos[i].blocker_model; - } - if(isdefined(pos[i].script_int)) - { - perk_machine.script_int = pos[i].script_int; - } - if(isdefined(pos[i].turn_on_notify)) - { - perk_machine.turn_on_notify = pos[i].turn_on_notify; - } - switch(perk) + + switch( perk ) { case "specialty_quickrevive": case "specialty_quickrevive_upgrade": @@ -3189,7 +3161,7 @@ perk_machine_spawn_init() use_trigger.target = "vending_revive"; perk_machine.script_string = "revive_perk"; perk_machine.targetname = "vending_revive"; - if(isdefined(bump_trigger)) + if ( isDefined( bump_trigger ) ) { bump_trigger.script_string = "revive_perk"; } @@ -3202,7 +3174,7 @@ perk_machine_spawn_init() use_trigger.target = "vending_sleight"; perk_machine.script_string = "speedcola_perk"; perk_machine.targetname = "vending_sleight"; - if(isdefined(bump_trigger)) + if ( isDefined( bump_trigger ) ) { bump_trigger.script_string = "speedcola_perk"; } @@ -3215,7 +3187,7 @@ perk_machine_spawn_init() use_trigger.target = "vending_marathon"; perk_machine.script_string = "marathon_perk"; perk_machine.targetname = "vending_marathon"; - if(isdefined(bump_trigger)) + if ( isDefined( bump_trigger ) ) { bump_trigger.script_string = "marathon_perk"; } @@ -3229,7 +3201,7 @@ perk_machine_spawn_init() use_trigger.target = "vending_jugg"; perk_machine.script_string = "jugg_perk"; perk_machine.targetname = "vending_jugg"; - if(isdefined(bump_trigger)) + if ( isDefined( bump_trigger ) ) { bump_trigger.script_string = "jugg_perk"; } @@ -3242,7 +3214,7 @@ perk_machine_spawn_init() use_trigger.target = "vending_tombstone"; perk_machine.script_string = "tombstone_perk"; perk_machine.targetname = "vending_tombstone"; - if(isdefined(bump_trigger)) + if ( isDefined( bump_trigger ) ) { bump_trigger.script_string = "tombstone_perk"; } @@ -3255,7 +3227,7 @@ perk_machine_spawn_init() use_trigger.target = "vending_doubletap"; perk_machine.script_string = "tap_perk"; perk_machine.targetname = "vending_doubletap"; - if(isdefined(bump_trigger)) + if ( isDefined( bump_trigger ) ) { bump_trigger.script_string = "tap_perk"; } @@ -3268,7 +3240,7 @@ perk_machine_spawn_init() use_trigger.target = "vending_chugabud"; perk_machine.script_string = "tap_perk"; perk_machine.targetname = "vending_chugabud"; - if(isdefined(bump_trigger)) + if ( isDefined( bump_trigger ) ) { bump_trigger.script_string = "tap_perk"; } @@ -3281,7 +3253,7 @@ perk_machine_spawn_init() use_trigger.target = "vending_additionalprimaryweapon"; perk_machine.script_string = "tap_perk"; perk_machine.targetname = "vending_additionalprimaryweapon"; - if(isdefined(bump_trigger)) + if ( isDefined( bump_trigger ) ) { bump_trigger.script_string = "tap_perk"; } @@ -3292,16 +3264,16 @@ perk_machine_spawn_init() use_trigger.script_label = "mus_perks_packa_sting"; use_trigger.longjinglewait = 1; perk_machine.targetname = "vending_packapunch"; - flag_pos = getstruct(pos[i].target, "targetname"); - if(isdefined(flag_pos)) + flag_pos = getstruct( pos[ i ].target, "targetname" ); + if ( isDefined( flag_pos ) ) { - perk_machine_flag = spawn("script_model", flag_pos.origin); + perk_machine_flag = spawn( "script_model", flag_pos.origin ); perk_machine_flag.angles = flag_pos.angles; - perk_machine_flag setmodel(flag_pos.model); + perk_machine_flag setmodel( flag_pos.model ); perk_machine_flag.targetname = "pack_flag"; perk_machine.target = "pack_flag"; } - if(isdefined(bump_trigger)) + if ( isDefined( bump_trigger ) ) { bump_trigger.script_string = "perks_rattle"; } @@ -3314,7 +3286,7 @@ perk_machine_spawn_init() use_trigger.target = "vending_deadshot"; perk_machine.script_string = "deadshot_vending"; perk_machine.targetname = "vending_deadshot_model"; - if(isdefined(bump_trigger)) + if ( isDefined( bump_trigger ) ) { bump_trigger.script_string = "deadshot_vending"; } @@ -3326,19 +3298,19 @@ perk_machine_spawn_init() use_trigger.target = "vending_sleight"; perk_machine.script_string = "speedcola_perk"; perk_machine.targetname = "vending_sleight"; - if(isdefined(bump_trigger)) + if ( isDefined( bump_trigger ) ) { bump_trigger.script_string = "speedcola_perk"; } break; } - if(isdefined(level._custom_perks[perk]) && isdefined(level._custom_perks[perk].perk_machine_set_kvps)) - { - [[level._custom_perks[perk].perk_machine_set_kvps]](use_trigger, perk_machine, bump_trigger, collision); - } } - } -} + if(isdefined(level._custom_perks[perk]) && isdefined(level._custom_perks[perk].perk_machine_set_kvps)) + { + [[level._custom_perks[perk].perk_machine_set_kvps]](use_trigger, perk_machine, bump_trigger, collision); + } + } +} get_perk_machine_start_state( perk ) { @@ -3400,17 +3372,15 @@ perks_register_clientfield() { registerclientfield( "toplayer", "perk_chugabud", 1000, 1, "int" ); } - while ( isDefined( level._custom_perks ) ) + if(isdefined(level._custom_perks)) { - a_keys = getarraykeys( level._custom_perks ); - i = 0; - while ( i < a_keys.size ) + a_keys = getarraykeys(level._custom_perks); + for(i = 0; i < a_keys.size; i++) { - if ( isDefined( level._custom_perks[ a_keys[ i ] ].clientfield_register ) ) + if(isdefined(level._custom_perks[ a_keys[ i ] ].clientfield_register)) { - level [[ level._custom_perks[ a_keys[ i ] ].clientfield_register ]](); + level [[level._custom_perks[ a_keys[ i ] ].clientfield_register]](); } - i++; } } } @@ -3674,7 +3644,7 @@ disable_quickrevive( machine_clip ) } level.quick_revive_machine unlink(); } - level.quick_revive_machine moveto( move_org + vectorScale( ( 0, -1, 0 ), 40 ), 3 ); + level.quick_revive_machine moveto( move_org + vectorScale( ( 0, 0, 1 ), 40 ), 3 ); direction = level.quick_revive_machine.origin; direction = ( direction[ 1 ], direction[ 0 ], 0 ); if ( direction[ 1 ] < 0 || direction[ 0 ] > 0 && direction[ 1 ] > 0 ) @@ -3809,7 +3779,7 @@ players_are_in_perk_area( perk_machine ) return 0; } -perk_hostmigration() +perk_hostmigration() //changed level._custom_perks { level endon( "end_game" ); level notify( "perk_hostmigration" ); @@ -3934,23 +3904,21 @@ perk_hostmigration() } _k4393 = getNextArrayKey( _a4393, _k4393 ); } - while ( level._custom_perks.size > 0 ) + if(level._custom_perks.size > 0) { - a_keys = getarraykeys( level._custom_perks ); - i = 0; - while ( i < a_keys.size ) + a_keys = getarraykeys(level._custom_perks); + for(i = 0; i < a_keys.size; i++) { - if ( isDefined( level._custom_perks[ a_keys[ i ] ].host_migration_func ) ) + if(isdefined(level._custom_perks[ a_keys[ i ] ].host_migration_func)) { - level thread [[ level._custom_perks[ a_keys[ i ] ].host_migration_func ]](); + level thread [[level._custom_perks[ a_keys[ i ] ].host_migration_func]](); } - i++; } } } } -get_perk_array( ignore_chugabud ) +get_perk_array( ignore_chugabud ) //changed code relating to level._custom_perks { perk_array = []; if ( self hasperk( "specialty_armorvest" ) ) @@ -3992,17 +3960,15 @@ get_perk_array( ignore_chugabud ) perk_array[ perk_array.size ] = "specialty_finalstand"; } } - while ( level._custom_perks.size > 0 ) + if(level._custom_perks.size > 0) { - a_keys = getarraykeys( level._custom_perks ); - i = 0; - while ( i < a_keys.size ) + a_keys = getarraykeys(level._custom_perks); + for(i = 0; i < a_keys.size; i++) { - if ( self hasperk( a_keys[ i ] ) ) + if(self hasperk(a_keys[i])) { - perk_array[ perk_array.size ] = a_keys[ i ]; + perk_array[perk_array.size] = a_keys[i]; } - i++; } } return perk_array; @@ -4161,3 +4127,8 @@ _register_undefined_perk( str_perk ) } + + + + + diff --git a/patch_zm/maps/mp/zombies/MajorErrors/_zm_powerups.gsc b/patch_zm/maps/mp/zombies/MajorErrors/_zm_powerups.gsc index 0c23f2c..36e7c53 100644 --- a/patch_zm/maps/mp/zombies/MajorErrors/_zm_powerups.gsc +++ b/patch_zm/maps/mp/zombies/MajorErrors/_zm_powerups.gsc @@ -20,7 +20,7 @@ #include maps/mp/_utility; #include common_scripts/utility; -init() +init() //checked matches cerberus output { precacheshader( "specialty_doublepoints_zombies" ); precacheshader( "specialty_instakill_zombies" ); @@ -41,8 +41,8 @@ init() set_zombie_var( "zombie_powerup_insta_kill_time", 30, undefined, undefined, 1 ); set_zombie_var( "zombie_powerup_point_doubler_on", 0, undefined, undefined, 1 ); set_zombie_var( "zombie_powerup_point_doubler_time", 30, undefined, undefined, 1 ); - set_zombie_var( "zombie_powerup_drop_increment", 2000 ); - set_zombie_var( "zombie_powerup_drop_max_per_round", 4 ); + set_zombie_var( "zombie_powerup_drop_increment", 2000 ); + set_zombie_var( "zombie_powerup_drop_max_per_round", 4 ); onplayerconnect_callback( ::init_player_zombie_vars ); level._effect[ "powerup_on" ] = loadfx( "misc/fx_zombie_powerup_on" ); level._effect[ "powerup_off" ] = loadfx( "misc/fx_zombie_powerup_off" ); @@ -72,7 +72,7 @@ init() level.board_repair_distance_squared = 562500; } -init_powerups() +init_powerups() //checked matches cerberus output { flag_init( "zombie_drop_powerups" ); if ( isDefined( level.enable_magic ) && level.enable_magic ) @@ -128,7 +128,7 @@ init_powerups() registerclientfield( "scriptmover", "powerup_fx", 1000, 3, "int" ); } -init_player_zombie_vars() +init_player_zombie_vars() //checked matches cerberus output { self.zombie_vars[ "zombie_powerup_minigun_on" ] = 0; self.zombie_vars[ "zombie_powerup_minigun_time" ] = 0; @@ -138,7 +138,7 @@ init_player_zombie_vars() self.zombie_vars[ "zombie_powerup_insta_kill_ug_time" ] = 18; } -set_weapon_ignore_max_ammo( str_weapon ) +set_weapon_ignore_max_ammo( str_weapon ) //checked matches cerberus output { if ( !isDefined( level.zombie_weapons_no_max_ammo ) ) { @@ -147,7 +147,7 @@ set_weapon_ignore_max_ammo( str_weapon ) level.zombie_weapons_no_max_ammo[ str_weapon ] = 1; } -powerup_hud_monitor() +powerup_hud_monitor() //checked partially changed to match cerberus output { flag_wait( "start_zombie_round_logic" ); if ( isDefined( level.current_game_module ) && level.current_game_module == 2 ) @@ -201,116 +201,102 @@ powerup_hud_monitor() } powerup_key_index++; } - if ( getDvar( "_zm_powerupsReturnEarly" ) ) - { - return; - } client_field_keys = getarraykeys( client_fields ); - while ( 1 ) + while(1) { - wait 0.05; + wait(0.05); waittillframeend; players = get_players(); - playerindex = 0; - while ( playerindex < players.size ) + + for(playerindex = 0; playerindex < players.size; playerindex++) { - client_field_key_index = 0; - while ( client_field_key_index < client_field_keys.size ) + + for(client_field_key_index = 0; client_field_key_index < client_field_keys.size; client_field_key_index++) { - player = players[ playerindex ]; - if ( isDefined( level.powerup_player_valid ) ) + + player = players[playerindex]; + if(isdefined(level.powerup_player_valid)) { - if ( !( [[ level.powerup_player_valid ]]( player ) ) ) + if(![[level.powerup_player_valid]](player)) { - client_field_key_index++; continue; } } - client_field_name_array = client_field_keys[client_field_key_index]; - client_field_name = client_fields[client_field_name_array].client_field_name; - time_name = client_fields[client_field_name_array].time_name; - on_name = client_fields[client_field_name_array].on_name; + + client_field_name = client_fields[ client_field_keys[ client_field_key_index ] ].client_field_name; + time_name = client_fields[ client_field_keys[ client_field_key_index ] ].time_name; + on_name = client_fields[ client_field_keys[ client_field_key_index ] ].on_name; powerup_timer = undefined; powerup_on = undefined; - if ( client_fields[ client_field_keys[ client_field_key_index ] ].solo ) + if(client_fields[ client_field_keys[ client_field_key_index ] ].solo) { - if ( isDefined( player._show_solo_hud ) && player._show_solo_hud == 1 ) + if(isdefined(player._show_solo_hud) && player._show_solo_hud == 1) { - powerup_timer = player.zombie_vars[ time_name ]; - powerup_on = player.zombie_vars[ on_name ]; + powerup_timer = player.zombie_vars[time_name]; + powerup_on = player.zombie_vars[on_name]; } } - else if ( isDefined( level.zombie_vars[ player.team ][ time_name ] ) ) + + else if(isdefined(level.zombie_vars[player.team][time_name])) { - powerup_timer = level.zombie_vars[ player.team ][ time_name ]; - powerup_on = level.zombie_vars[ player.team ][ on_name ]; + powerup_timer = level.zombie_vars[player.team][time_name]; + powerup_on = level.zombie_vars[player.team][on_name]; + } + else if(isdefined(level.zombie_vars[time_name])) + { + powerup_timer = level.zombie_vars[time_name]; + powerup_on = level.zombie_vars[on_name]; + } + + if(isdefined(powerup_timer) && isdefined(powerup_on)) + { + player set_clientfield_powerups(client_field_name, powerup_timer, powerup_on, flashing_timers, flashing_values); } else { - if ( isDefined( level.zombie_vars[ time_name ] ) ) - { - powerup_timer = level.zombie_vars[ time_name ]; - powerup_on = level.zombie_vars[ on_name ]; - } + player setclientfieldtoplayer(client_field_name, 0); } - if ( isDefined( powerup_timer ) && isDefined( powerup_on ) ) - { - player set_clientfield_powerups( client_field_name, powerup_timer, powerup_on, flashing_timers, flashing_values ); - client_field_key_index++; - continue; - } - else - { - player setclientfieldtoplayer( client_field_name, 0 ); - } - client_field_key_index++; } - playerindex++; } + } } -set_clientfield_powerups( clientfield_name, powerup_timer, powerup_on, flashing_timers, flashing_values ) +set_clientfield_powerups( clientfield_name, powerup_timer, powerup_on, flashing_timers, flashing_values ) //checked changed to match cerberus output { - if ( powerup_on ) + if(powerup_on) { - if ( powerup_timer < 10 ) + if(powerup_timer < 10) { flashing_value = 3; - i = flashing_timers.size - 1; - while ( i > 0 ) + for(i = flashing_timers.size - 1; i > 0; i--) { - if ( powerup_timer < flashing_timers[ i ] ) + if(powerup_timer < flashing_timers[i]) { - flashing_value = flashing_values[ i ]; + flashing_value = flashing_values[i]; break; } - else - { - i--; - - } } - self setclientfieldtoplayer( clientfield_name, flashing_value ); + self setclientfieldtoplayer(clientfield_name, flashing_value); } else { - self setclientfieldtoplayer( clientfield_name, 1 ); + self setclientfieldtoplayer(clientfield_name, 1); } } else { - self setclientfieldtoplayer( clientfield_name, 0 ); + self setclientfieldtoplayer(clientfield_name, 0); } } -randomize_powerups() +randomize_powerups() //checked matches cerberus output { level.zombie_powerup_array = array_randomize( level.zombie_powerup_array ); } -get_next_powerup() +get_next_powerup() //checked matches cerberus output { powerup = level.zombie_powerup_array[ level.zombie_powerup_index ]; level.zombie_powerup_index++; @@ -322,7 +308,7 @@ get_next_powerup() return powerup; } -get_valid_powerup() +get_valid_powerup() //checked partially matches cerberus output did not change { if ( isDefined( level.zombie_powerup_boss ) ) { @@ -347,7 +333,7 @@ get_valid_powerup() } } -minigun_no_drop() +minigun_no_drop() //checked matches cerberus output { players = get_players(); i = 0; @@ -376,7 +362,7 @@ minigun_no_drop() return 0; } -get_num_window_destroyed() +get_num_window_destroyed() //checked partially matches cerberus output did not change { num = 0; i = 0; @@ -391,7 +377,7 @@ get_num_window_destroyed() return num; } -watch_for_drop() +watch_for_drop() //checked partially matches cerberus output did not change { flag_wait( "start_zombie_round_logic" ); flag_wait( "begin_spawning" ); @@ -422,7 +408,7 @@ watch_for_drop() } -add_zombie_powerup( powerup_name, model_name, hint, func_should_drop_with_regular_powerups, solo, caution, zombie_grabbable, fx, client_field_name, time_name, on_name, clientfield_version ) +add_zombie_powerup( powerup_name, model_name, hint, func_should_drop_with_regular_powerups, solo, caution, zombie_grabbable, fx, client_field_name, time_name, on_name, clientfield_version ) //checked matches cerberus output { if ( !isDefined( clientfield_version ) ) { @@ -466,17 +452,17 @@ add_zombie_powerup( powerup_name, model_name, hint, func_should_drop_with_regula } } -powerup_set_can_pick_up_in_last_stand( powerup_name, b_can_pick_up ) +powerup_set_can_pick_up_in_last_stand( powerup_name, b_can_pick_up ) //checked matches cerberus output { level.zombie_powerups[ powerup_name ].can_pick_up_in_last_stand = b_can_pick_up; } -add_zombie_special_drop( powerup_name ) +add_zombie_special_drop( powerup_name ) //checked matches cerberus output { level.zombie_special_drop_array[ level.zombie_special_drop_array.size ] = powerup_name; } -include_zombie_powerup( powerup_name ) +include_zombie_powerup( powerup_name ) //checked matches cerberus output { if ( !isDefined( level.zombie_include_powerups ) ) { @@ -485,12 +471,12 @@ include_zombie_powerup( powerup_name ) level.zombie_include_powerups[ powerup_name ] = 1; } -powerup_round_start() +powerup_round_start() //checked matches cerberus output { level.powerup_drop_count = 0; } -powerup_drop( drop_point ) +powerup_drop( drop_point ) //checked partially changed to match cerberus output { if ( level.powerup_drop_count >= level.zombie_vars[ "zombie_powerup_drop_max_per_round" ] ) { @@ -515,7 +501,7 @@ powerup_drop( drop_point ) } playable_area = getentarray( "player_volume", "script_noteworthy" ); level.powerup_drop_count++; - powerup = maps/mp/zombies/_zm_net::network_safe_spawn( "powerup", 1, "script_model", drop_point + vectorScale( ( 0, 0, 0 ), 40 ) ); + powerup = maps/mp/zombies/_zm_net::network_safe_spawn( "powerup", 1, "script_model", drop_point + vectorScale( ( 0, 0, 1 ), 40 ) ); valid_drop = 0; i = 0; while ( i < playable_area.size ) @@ -523,6 +509,7 @@ powerup_drop( drop_point ) if ( powerup istouching( playable_area[ i ] ) ) { valid_drop = 1; + break; } i++; } @@ -553,9 +540,9 @@ powerup_drop( drop_point ) level notify( "powerup_dropped" ); } -specific_powerup_drop( powerup_name, drop_spot, powerup_team, powerup_location ) +specific_powerup_drop( powerup_name, drop_spot, powerup_team, powerup_location ) //checked partially changed to match cerberus output { - powerup = maps/mp/zombies/_zm_net::network_safe_spawn( "powerup", 1, "script_model", drop_spot + vectorScale( ( 0, 0, 0 ), 40 ) ); + powerup = maps/mp/zombies/_zm_net::network_safe_spawn( "powerup", 1, "script_model", drop_spot + vectorScale( ( 0, 0, 1 ), 40 ) ); level notify( "powerup_dropped" ); if ( isDefined( powerup ) ) { @@ -569,7 +556,7 @@ specific_powerup_drop( powerup_name, drop_spot, powerup_team, powerup_location ) } } -quantum_bomb_random_powerup_result( position ) +quantum_bomb_random_powerup_result( position ) //unused did not check { if ( !isDefined( level.zombie_include_powerups ) || !level.zombie_include_powerups.size ) { @@ -625,7 +612,7 @@ quantum_bomb_random_powerup_result( position ) } } -quantum_bomb_random_zombie_grab_powerup_result( position ) +quantum_bomb_random_zombie_grab_powerup_result( position ) //unused did not check { if ( !isDefined( level.zombie_include_powerups ) || !level.zombie_include_powerups.size ) { @@ -650,14 +637,14 @@ quantum_bomb_random_zombie_grab_powerup_result( position ) } } -quantum_bomb_random_weapon_powerup_result( position ) +quantum_bomb_random_weapon_powerup_result( position ) //unused did not check { self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "kill", "quant_good" ); [[ level.quantum_bomb_play_player_effect_at_position_func ]]( position ); level specific_powerup_drop( "random_weapon", position ); } -quantum_bomb_random_bonus_or_lose_points_powerup_result( position ) +quantum_bomb_random_bonus_or_lose_points_powerup_result( position ) //unused did not check { rand = randomint( 10 ); powerup = "bonus_points_team"; @@ -687,27 +674,23 @@ quantum_bomb_random_bonus_or_lose_points_powerup_result( position ) level specific_powerup_drop( powerup, position ); } -special_powerup_drop( drop_point ) +special_powerup_drop( drop_point ) //checked partially changed to match cerberus output { if ( !isDefined( level.zombie_include_powerups ) || level.zombie_include_powerups.size == 0 ) { return; } - powerup = spawn( "script_model", drop_point + vectorScale( ( 0, 0, 0 ), 40 ) ); + powerup = spawn( "script_model", drop_point + vectorScale( ( 0, 0, 1 ), 40 ) ); playable_area = getentarray( "player_volume", "script_noteworthy" ); valid_drop = 0; i = 0; - while ( i < playable_area.size ) + for(i = 0; i < playable_area.size; i++) { - if ( powerup istouching( playable_area[ i ] ) ) + if(powerup istouching(playable_area[i])) { valid_drop = 1; break; } - else - { - i++; - } } if ( !valid_drop ) { @@ -717,13 +700,13 @@ special_powerup_drop( drop_point ) powerup special_drop_setup(); } -cleanup_random_weapon_list() +cleanup_random_weapon_list() //checked matches cerberus output { self waittill( "death" ); arrayremovevalue( level.random_weapon_powerups, self ); } -powerup_setup( powerup_override, powerup_team, powerup_location ) +powerup_setup( powerup_override, powerup_team, powerup_location ) //checked partially changed to match cerberus output { powerup = undefined; if ( !isDefined( powerup_override ) ) @@ -756,7 +739,7 @@ powerup_setup( powerup_override, powerup_team, powerup_location ) } self setmodel( getweaponmodel( self.weapon ) ); self useweaponhidetags( self.weapon ); - offsetdw = vectorScale( ( 0, 0, 0 ), 3 ); + offsetdw = vectorScale( ( 1, 1, 1 ), 3 ); self.worldgundw = undefined; if ( maps/mp/zombies/_zm_magicbox::weapon_is_dual_wield( self.weapon ) ) { @@ -799,7 +782,7 @@ powerup_setup( powerup_override, powerup_team, powerup_location ) level.active_powerups[ level.active_powerups.size ] = self; } -special_drop_setup() +special_drop_setup() //checked matches cerberus output { powerup = undefined; is_powerup = 1; @@ -891,18 +874,18 @@ special_drop_setup() } } -powerup_zombie_grab_trigger_cleanup( trigger ) +powerup_zombie_grab_trigger_cleanup( trigger ) //checked matches cerberus output { self waittill_any( "powerup_timedout", "powerup_grabbed", "hacked" ); trigger delete(); } -powerup_zombie_grab( powerup_team ) +powerup_zombie_grab( powerup_team ) //checked partially changed to match cerberus output { self endon( "powerup_timedout" ); self endon( "powerup_grabbed" ); self endon( "hacked" ); - zombie_grab_trigger = spawn( "trigger_radius", self.origin - vectorScale( ( 0, 0, 0 ), 40 ), 4, 32, 72 ); + zombie_grab_trigger = spawn( "trigger_radius", self.origin - vectorScale( ( 0, 0, 1 ), 40 ), 4, 32, 72 ); zombie_grab_trigger enablelinkto(); zombie_grab_trigger linkto( self ); zombie_grab_trigger setteamfortrigger( level.zombie_team ); @@ -951,9 +934,6 @@ powerup_zombie_grab( powerup_team ) { level thread [[ level._game_mode_powerup_zombie_grab ]]( self, who ); } - else - { - } break; } level thread maps/mp/zombies/_zm_audio::do_announcer_playvox( "powerup", self.powerup_name ); @@ -965,7 +945,7 @@ powerup_zombie_grab( powerup_team ) } } -powerup_grab(powerup_team) +powerup_grab(powerup_team) //checked partially changed to match cerberus output { if ( isdefined( self ) && self.zombie_grabbable ) { @@ -976,40 +956,51 @@ powerup_grab(powerup_team) self endon ("powerup_timedout"); self endon ("powerup_grabbed"); - range_squared = 64 * 64; + range_squared = 4096; while (isdefined(self)) { - players = GET_PLAYERS(); + players = get_players(); for (i = 0; i < players.size; i++) { // Don't let them grab the minigun, tesla, or random weapon if they're downed or reviving // due to weapon switching issues. - if ( self.powerup_name != "minigun" && self.powerup_name != "tesla" && self.powerup_name != "random_weapon" && self.powerup_name == "meat_stink" || players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() && players[ i ] usebuttonpressed() && players[ i ] in_revive_trigger() ) + if ( self.powerup_name != "minigun" || self.powerup_name != "tesla" || self.powerup_name != "random_weapon" || self.powerup_name == "meat_stink" && players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() || players[ i ] usebuttonpressed() && players[ i ] in_revive_trigger() ) { continue; } - - if ( DistanceSquared( players[i].origin, self.origin ) < range_squared ) + if(isdefined(self.can_pick_up_in_last_stand) && !self.can_pick_up_in_last_stand && players[i] maps/mp/zombies/_zm_laststand::player_is_in_laststand()) { - if( IsDefined( level.zombie_powerup_grab_func ) ) + continue; + } + ignore_range = 0; + if(isdefined(players[i].ignore_range_powerup) && players[i].ignore_range_powerup == self) + { + players[i].ignore_range_powerup = undefined; + ignore_range = 1; + } + if ( DistanceSquared( players[i].origin, self.origin ) < range_squared || ignore_range ) + { + if(isdefined(level._powerup_grab_check)) + { + if(!self [[level._powerup_grab_check]](players[i])) + { + continue; + } + } + if(isdefined(level.zombie_powerup_grab_func)) { level thread [[level.zombie_powerup_grab_func]](); + break; } - else + switch(self.powerup_name) { - switch (self.powerup_name) - { case "nuke": - level thread nuke_powerup( self, players[i].team ); - - //chrisp - adding powerup VO sounds + level thread nuke_powerup(self, players[i].team); players[i] thread powerup_vo("nuke"); - zombies = getaiarray( level.zombie_team ); - //players[i].zombie_nuked = get_array_of_closest( self.origin, zombies ); - players[i].zombie_nuked = ArraySort( zombies, self.origin ); + zombies = getaiarray(level.zombie_team); + players[i].zombie_nuked = arraysort(zombies, self.origin); players[i] notify("nuke_triggered"); - break; case "full_ammo": level thread full_ammo_powerup( self ,players[i] ); @@ -1024,13 +1015,17 @@ powerup_grab(powerup_team) players[i] thread powerup_vo("insta_kill"); break; case "carpenter": - if(isDefined(level.use_new_carpenter_func)) + if(is_classic()) + { + players[i] thread maps/mp/zombies/_zm_pers_upgrades::persistent_carpenter_ability_check(); + } + if(isdefined(level.use_new_carpenter_func)) { level thread [[level.use_new_carpenter_func]](self.origin); } else { - level thread start_carpenter( self.origin ); + level thread start_carpenter(self.origin); } players[i] thread powerup_vo("carpenter"); break; @@ -1052,12 +1047,11 @@ powerup_grab(powerup_team) case "free_perk": level thread free_perk_powerup( self ); - //players[i] thread powerup_vo( "insta_kill" ); break; case "tesla": level thread tesla_weapon_powerup( players[i] ); - players[i] thread powerup_vo( "tesla" ); // TODO: Audio should uncomment this once the sounds have been set up + players[i] thread powerup_vo( "tesla" ); break; case "random_weapon": @@ -1065,38 +1059,29 @@ powerup_grab(powerup_team) { continue; } - // players[i] thread powerup_vo( "random_weapon" ); // TODO: Audio should uncomment this once the sounds have been set up + break; case "bonus_points_player": level thread bonus_points_player_powerup( self, players[i] ); - players[i] thread powerup_vo( "bonus_points_solo" ); // TODO: Audio should uncomment this once the sounds have been set up + players[i] thread powerup_vo( "bonus_points_solo" ); break; case "bonus_points_team": level thread bonus_points_team_powerup( self ); - players[i] thread powerup_vo( "bonus_points_team" ); // TODO: Audio should uncomment this once the sounds have been set up + players[i] thread powerup_vo( "bonus_points_team" ); break; case "teller_withdrawl": level thread teller_withdrawl(self ,players[i]); - //TODO - play some sound/vo stuff here? break; - default: - // RAVEN BEGIN bhackbarth: callback for level specific powerups + case default: if ( IsDefined( level._zombiemode_powerup_grab ) ) { level thread [[ level._zombiemode_powerup_grab ]]( self, players[i] ); } - // RAVEN END - else - { - } - - break; - - } + break; } maps\mp\_demo::bookmark( "zm_player_powerup_grabbed", gettime(), players[i] ); @@ -1104,8 +1089,10 @@ powerup_grab(powerup_team) if( should_award_stat ( self.powerup_name )) //don't do this for things that aren't really a powerup { //track # of picked up powerups/drops for the player - players[i] maps\mp\zombies\_zm_stats::increment_client_stat( "drops" ); - players[i] maps\mp\zombies\_zm_stats::increment_client_stat( self.powerup_name + "_pickedup" ); + players[i] maps/mp/zombies/_zm_stats::increment_client_stat("drops"); + players[i] maps/mp/zombies/_zm_stats::increment_player_stat("drops"); + players[i] maps/mp/zombies/_zm_stats::increment_client_stat(self.powerup_name + "_pickedup"); + players[i] maps/mp/zombies/_zm_stats::increment_player_stat(self.powerup_name + "_pickedup"); } if ( self.solo ) @@ -1124,9 +1111,13 @@ powerup_grab(powerup_team) playfx( level._effect["powerup_grabbed_wave"], self.origin ); } - if ( is_true( self.stolen ) ) + if(isdefined(self.stolen) && self.stolen) { - level notify( "monkey_see_monkey_dont_achieved" ); + level notify("monkey_see_monkey_dont_achieved"); + } + if(isdefined(self.grabbed_level_notify)) + { + level notify(self.grabbed_level_notify); } // RAVEN BEGIN bhackbarth: since there is a wait here, flag the powerup as being taken @@ -1141,39 +1132,38 @@ powerup_grab(powerup_team) self hide(); //Preventing the line from playing AGAIN if fire sale becomes active before it runs out - if( self.powerup_name != "fire_sale" ) + if(self.powerup_name != "fire_sale") { - if( isdefined( self.power_up_grab_player ) ) + if(isdefined(self.power_up_grab_player)) { - if(isDefined(level.powerup_intro_vox)) + if(isdefined(level.powerup_intro_vox)) { level thread [[level.powerup_intro_vox]](self); + return; } - else - { - if(isDefined(level.powerup_vo_available) ) - { - can_say_vo = [[level.powerup_vo_available]](); - if(!can_say_vo) - { - self powerup_delete(); - self notify ("powerup_grabbed"); - return; - } - } - level thread maps\mp\zombies\_zm_audio_announcer::leaderDialog( self.powerup_name, self.power_up_grab_player.pers["team"] ); - self powerup_delete(); - self notify ("powerup_grabbed"); + else if(isdefined(level.powerup_vo_available)) + { + can_say_vo = [[level.powerup_vo_available]](); + if(!can_say_vo) + { + self powerup_delete(); + self notify("powerup_grabbed"); + return; + } } - } + } } + level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog(self.powerup_name, self.power_up_grab_player.pers["team"]); + self powerup_delete(); + self notify("powerup_grabbed"); } } - wait 0.1; - } + wait(0.1); + } } -start_fire_sale( item ) + +start_fire_sale( item ) //checked matches cerberus output { if ( level.zombie_vars[ "zombie_powerup_fire_sale_time" ] > 0 && is_true( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] ) ) { @@ -1195,7 +1185,7 @@ start_fire_sale( item ) level notify( "fire_sale_off" ); } -start_bonfire_sale( item ) +start_bonfire_sale( item ) //checked matches cerberus output { level notify( "powerup bonfire sale" ); level endon( "powerup bonfire sale" ); @@ -1221,7 +1211,7 @@ start_bonfire_sale( item ) temp_ent delete(); } -start_carpenter( origin ) +start_carpenter( origin ) //checked partially changed to match cerberus output { window_boards = getstructarray( "exterior_goal", "targetname" ); total = level.exterior_goals.size; @@ -1249,21 +1239,18 @@ start_carpenter( origin ) { break; } + windows thread maps/mp/zombies/_zm_blockers::replace_chunk( windows, chunk, undefined, maps/mp/zombies/_zm_powerups::is_carpenter_boards_upgraded(), 1 ); + if ( isDefined( windows.clip ) ) + { + windows.clip enable_trigger(); + windows.clip disconnectpaths(); + } else { - windows thread maps/mp/zombies/_zm_blockers::replace_chunk( windows, chunk, undefined, maps/mp/zombies/_zm_powerups::is_carpenter_boards_upgraded(), 1 ); - if ( isDefined( windows.clip ) ) - { - windows.clip enable_trigger(); - windows.clip disconnectpaths(); - } - else - { - blocker_disconnect_paths( windows.neg_start, windows.neg_end ); - } - wait_network_frame(); - wait 0.05; + blocker_disconnect_paths( windows.neg_start, windows.neg_end ); } + wait_network_frame(); + wait 0.05; } wait_network_frame(); } @@ -1277,7 +1264,7 @@ start_carpenter( origin ) carp_ent delete(); } -get_closest_window_repair( windows, origin ) +get_closest_window_repair( windows, origin ) //checked partially changed to match cerberus output { current_window = undefined; shortest_distance = undefined; @@ -1289,27 +1276,24 @@ get_closest_window_repair( windows, origin ) i++; continue; } - else if ( !isDefined( current_window ) ) + if ( !isDefined( current_window ) ) { current_window = windows[ i ]; shortest_distance = distancesquared( current_window.origin, origin ); i++; continue; } - else + if ( distancesquared( windows[ i ].origin, origin ) < shortest_distance ) { - if ( distancesquared( windows[ i ].origin, origin ) < shortest_distance ) - { - current_window = windows[ i ]; - shortest_distance = distancesquared( windows[ i ].origin, origin ); - } + current_window = windows[ i ]; + shortest_distance = distancesquared( windows[ i ].origin, origin ); } i++; } return current_window; } -powerup_vo( type ) +powerup_vo( type ) //checked matches cerberus output { self endon( "death" ); self endon( "disconnect" ); @@ -1335,7 +1319,7 @@ powerup_vo( type ) } } -powerup_wobble_fx() +powerup_wobble_fx() //checked matches cerberus output { self endon( "death" ); if ( !isDefined( self ) ) @@ -1365,7 +1349,7 @@ powerup_wobble_fx() } } -powerup_wobble() +powerup_wobble() //checked matches cerberus output { self endon( "powerup_grabbed" ); self endon( "powerup_timedout" ); @@ -1392,11 +1376,11 @@ powerup_wobble() { self.worldgundw rotateto( new_angles, waittime, waittime * 0.5, waittime * 0.5 ); } - wait randomfloat( waittime - 0,1 ); + wait randomfloat( waittime - 0.1 ); } } -powerup_timeout() +powerup_timeout() //checked partially changed to match cerberus output { if ( isDefined( level._powerup_timeout_override ) && !isDefined( self.powerup_team ) ) { @@ -1449,17 +1433,15 @@ powerup_timeout() i++; continue; } - else - { - wait 0.1; - } + wait 0.1; + i++; } self notify( "powerup_timedout" ); self powerup_delete(); } -powerup_delete() +powerup_delete() //checked matches cerberus output { arrayremovevalue( level.active_powerups, self, 0 ); if ( isDefined( self.worldgundw ) ) @@ -1469,7 +1451,7 @@ powerup_delete() self delete(); } -powerup_delete_delayed( time ) +powerup_delete_delayed( time ) //checked matches cerberus output { if ( isDefined( time ) ) { @@ -1482,7 +1464,7 @@ powerup_delete_delayed( time ) self powerup_delete(); } -nuke_powerup( drop_item, player_team ) +nuke_powerup( drop_item, player_team ) //checked changed to match cerberus output { location = drop_item.origin; playfx( drop_item.fx, location ); @@ -1491,75 +1473,53 @@ nuke_powerup( drop_item, player_team ) zombies = getaiarray( level.zombie_team ); zombies = arraysort( zombies, location ); zombies_nuked = []; - i = 0; - while ( i < zombies.size ) + for(i = 0; i < zombies.size; i++) { - if ( isDefined( zombies[ i ].ignore_nuke ) && zombies[ i ].ignore_nuke ) + if(isdefined(zombies[i].ignore_nuke) && zombies[i].ignore_nuke) { - i++; continue; } - else + if(isdefined(zombies[i].marked_for_death) && zombies[i].marked_for_death) { - if ( isDefined( zombies[ i ].marked_for_death ) && zombies[ i ].marked_for_death ) - { - i++; - continue; - } - else - { - if ( isDefined( zombies[ i ].nuke_damage_func ) ) - { - zombies[ i ] thread [[ zombies[ i ].nuke_damage_func ]](); - i++; - continue; - } - else if ( is_magic_bullet_shield_enabled( zombies[ i ] ) ) - { - i++; - continue; - } - else - { - zombies[ i ].marked_for_death = 1; - zombies[ i ].nuked = 1; - zombies_nuked[ zombies_nuked.size ] = zombies[ i ]; - } - } + continue; } - i++; + if(isdefined(zombies[i].nuke_damage_func)) + { + zombies[i] thread [[zombies[i].nuke_damage_func]](); + continue; + } + if(is_magic_bullet_shield_enabled(zombies[i])) + { + continue; + } + zombies[i].marked_for_death = 1; + zombies[i].nuked = 1; + zombies_nuked[zombies_nuked.size] = zombies[i]; } - i = 0; - while ( i < zombies_nuked.size ) + for(i = 0; i < zombies_nuked.size; i++) { - wait randomfloatrange( 0.1, 0.7 ); - if ( !isDefined( zombies_nuked[ i ] ) ) + wait(randomfloatrange(0.1, 0.7)); + if(!isdefined(zombies_nuked[i])) { - i++; continue; } - else if ( is_magic_bullet_shield_enabled( zombies_nuked[ i ] ) ) + if(is_magic_bullet_shield_enabled(zombies_nuked[i])) { - i++; continue; } - else + if(i < 5 && !zombies_nuked[i].isdog) { - if ( i < 5 && !zombies_nuked[ i ].isdog ) - { - zombies_nuked[ i ] thread maps/mp/animscripts/zm_death::flame_death_fx(); - } - if ( !zombies_nuked[ i ].isdog ) - { - if ( isDefined( zombies_nuked[ i ].no_gib ) && !zombies_nuked[ i ].no_gib ) - { - zombies_nuked[ i ] maps/mp/zombies/_zm_spawner::zombie_head_gib(); - } - zombies_nuked[ i ] playsound( "evt_nuked" ); - } - zombies_nuked[ i ] dodamage( zombies_nuked[ i ].health + 666, zombies_nuked[ i ].origin ); + zombies_nuked[i] thread maps/mp/animscripts/zm_death::flame_death_fx(); } - i++; + if(!zombies_nuked[i].isdog) + { + if(!(isdefined(zombies_nuked[i].no_gib) && zombies_nuked[i].no_gib)) + { + zombies_nuked[i] maps/mp/zombies/_zm_spawner::zombie_head_gib(); + } + zombies_nuked[i] playsound("evt_nuked"); + } + zombies_nuked[i] dodamage(zombies_nuked[i].health + 666, zombies_nuked[i].origin); } players = get_players( player_team ); i = 0; @@ -1570,7 +1530,7 @@ nuke_powerup( drop_item, player_team ) } } -nuke_flash( team ) +nuke_flash( team ) //checked matches cerberus output { if ( isDefined( team ) ) { @@ -1597,7 +1557,7 @@ nuke_flash( team ) fadetowhite destroy(); } -double_points_powerup( drop_item, player ) +double_points_powerup( drop_item, player ) //checked partially matches cerberus output did not change { level notify( "powerup points scaled_" + player.team ); level endon( "powerup points scaled_" + player.team ); @@ -1647,68 +1607,48 @@ double_points_powerup( drop_item, player ) } } -full_ammo_powerup( drop_item, player ) +full_ammo_powerup( drop_item, player ) //checked changed to match cerberus output { - players = get_players( player.team ); - if ( isDefined( level._get_game_module_players ) ) + players = get_players(player.team); + if(isdefined(level._get_game_module_players)) { - players = [[ level._get_game_module_players ]]( player ); + players = [[level._get_game_module_players]](player); } - i = 0; - while ( i < players.size ) + for(i = 0; i < players.size; i++) { - if ( players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) + if(players[i] maps/mp/zombies/_zm_laststand::player_is_in_laststand()) { - i++; continue; } - else + primary_weapons = players[i] getweaponslist(1); + players[i] notify("zmb_max_ammo"); + players[i] notify("zmb_lost_knife"); + players[i] notify("zmb_disable_claymore_prompt"); + players[i] notify("zmb_disable_spikemore_prompt"); + for(x = 0; x < primary_weapons.size; x++) { - primary_weapons = players[ i ] getweaponslist( 1 ); - players[ i ] notify( "zmb_max_ammo" ); - players[ i ] notify( "zmb_lost_knife" ); - players[ i ] notify( "zmb_disable_claymore_prompt" ); - players[ i ] notify( "zmb_disable_spikemore_prompt" ); - x = 0; - 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 ] ) ) - { - x++; - continue; - } - else - { - if ( isDefined( level.zombie_include_equipment ) && isDefined( level.zombie_include_equipment[ primary_weapons[ x ] ] ) ) - { - x++; - continue; - } - else - { - if ( isDefined( level.zombie_weapons_no_max_ammo ) && isDefined( level.zombie_weapons_no_max_ammo[ primary_weapons[ x ] ] ) ) - { - x++; - continue; - } - else - { - if ( players[ i ] hasweapon( primary_weapons[ x ] ) ) - { - players[ i ] givemaxammo( primary_weapons[ x ] ); - } - } - } - } - x++; + continue; + } + if(isdefined(level.zombie_include_equipment) && isdefined(level.zombie_include_equipment[ primary_weapons[ x ] ] ) ) + { + continue; + } + if(isdefined(level.zombie_weapons_no_max_ammo) && isdefined(level.zombie_weapons_no_max_ammo[ primary_weapons[ x ] ] ) ) + { + continue; + } + if(players[i] hasweapon(primary_weapons[x])) + { + players[i] givemaxammo(primary_weapons[x]); } } - i++; } - level thread full_ammo_on_hud( drop_item, player.team ); + level thread full_ammo_on_hud(drop_item, player.team); } -insta_kill_powerup( drop_item, player ) +insta_kill_powerup( drop_item, player ) //checked matches cerberus output { level notify( "powerup instakill_" + player.team ); level endon( "powerup instakill_" + player.team ); @@ -1738,12 +1678,12 @@ insta_kill_powerup( drop_item, player ) } } -is_insta_kill_active() +is_insta_kill_active() //checked matches cerberus output { return level.zombie_vars[ self.team ][ "zombie_insta_kill" ]; } -check_for_instakill( player, mod, hit_location ) +check_for_instakill( player, mod, hit_location ) //cerberus output { if ( isDefined( player ) && isalive( player ) && isDefined( level.check_for_instakill_override ) ) { @@ -1760,7 +1700,7 @@ check_for_instakill( player, mod, hit_location ) player.last_kill_method = "MOD_UNKNOWN"; } modname = remove_mod_from_methodofdeath( mod ); - if ( isDefined( self.no_gib ) && !self.no_gib ) + if ( isDefined( self.no_gib ) && self.no_gib ) { self maps/mp/zombies/_zm_spawner::zombie_head_gib(); } @@ -1768,7 +1708,7 @@ check_for_instakill( player, mod, hit_location ) self dodamage( self.health + 666, self.origin, player, self, hit_location, modname ); player notify( "zombie_killed" ); } - if ( isDefined( player ) && isalive( player ) || level.zombie_vars[ player.team ][ "zombie_insta_kill" ] && isDefined( player.personal_instakill ) && player.personal_instakill ) + if ( isDefined( player ) && isalive( player ) && level.zombie_vars[ player.team ][ "zombie_insta_kill" ] || isDefined( player.personal_instakill ) && player.personal_instakill ) { if ( is_magic_bullet_shield_enabled( self ) ) { @@ -1793,22 +1733,18 @@ check_for_instakill( player, mod, hit_location ) self.health = 1; self dodamage( self.health + 666, self.origin, player, self, hit_location, modname ); player notify( "zombie_killed" ); - return; } - else + else if(!(isdefined(self.no_gib) && self.no_gib)) { - if ( isDefined( self.no_gib ) && !self.no_gib ) - { - self maps/mp/zombies/_zm_spawner::zombie_head_gib(); - } - self.health = 1; - self dodamage( self.health + 666, self.origin, player, self, hit_location, modname ); - player notify( "zombie_killed" ); + self maps/mp/zombies/_zm_spawner::zombie_head_gib(); } + self.health = 1; + self dodamage(self.health + 666, self.origin, player, self, hit_location, modname); + player notify("zombie_killed"); } } -insta_kill_on_hud( drop_item, player_team ) +insta_kill_on_hud( drop_item, player_team ) //checked matches cerberus output { if ( level.zombie_vars[ player_team ][ "zombie_powerup_insta_kill_on" ] ) { @@ -1819,7 +1755,7 @@ insta_kill_on_hud( drop_item, player_team ) level thread time_remaning_on_insta_kill_powerup( player_team ); } -time_remaning_on_insta_kill_powerup( player_team ) +time_remaning_on_insta_kill_powerup( player_team ) //checked matches cerberus output { temp_enta = spawn( "script_origin", ( 0, 0, 0 ) ); temp_enta playloopsound( "zmb_insta_kill_loop" ); @@ -1835,7 +1771,7 @@ time_remaning_on_insta_kill_powerup( player_team ) temp_enta delete(); } -point_doubler_on_hud( drop_item, player_team ) +point_doubler_on_hud( drop_item, player_team ) //checked matches cerberus output { self endon( "disconnect" ); if ( level.zombie_vars[ player_team ][ "zombie_powerup_point_doubler_on" ] ) @@ -1847,7 +1783,7 @@ point_doubler_on_hud( drop_item, player_team ) level thread time_remaining_on_point_doubler_powerup( player_team ); } -time_remaining_on_point_doubler_powerup( player_team ) +time_remaining_on_point_doubler_powerup( player_team ) //checked partially matches cerberus output did not change { temp_ent = spawn( "script_origin", ( 0, 0, 0 ) ); temp_ent playloopsound( "zmb_double_point_loop" ); @@ -1869,7 +1805,7 @@ time_remaining_on_point_doubler_powerup( player_team ) temp_ent delete(); } -toggle_bonfire_sale_on() +toggle_bonfire_sale_on() //checked matches cerberus output { level endon( "powerup bonfire sale" ); if ( !isDefined( level.zombie_vars[ "zombie_powerup_bonfire_sale_on" ] ) ) @@ -1886,7 +1822,7 @@ toggle_bonfire_sale_on() } } -toggle_fire_sale_on() +toggle_fire_sale_on() //checked partially matches cerberus output did not change { level endon( "powerup fire sale" ); if ( !isDefined( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] ) ) @@ -1934,7 +1870,7 @@ toggle_fire_sale_on() } } -fire_sale_weapon_wait() +fire_sale_weapon_wait() //checked matches cerberus output { self.zombie_cost = self.old_cost; while ( isDefined( self.chest_user ) ) @@ -1944,7 +1880,7 @@ fire_sale_weapon_wait() self set_hint_string( self, "default_treasure_chest", self.zombie_cost ); } -remove_temp_chest( chest_index ) +remove_temp_chest( chest_index ) //checked partially matches cerberus output did not change { while ( isDefined( level.chests[ chest_index ].chest_user ) || isDefined( level.chests[ chest_index ]._box_open ) && level.chests[ chest_index ]._box_open == 1 ) { @@ -1969,12 +1905,12 @@ remove_temp_chest( chest_index ) level.chests[ chest_index ] maps/mp/zombies/_zm_magicbox::hide_chest(); } -devil_dialog_delay() +devil_dialog_delay() //checked matches cerberus output { wait 1; } -full_ammo_on_hud( drop_item, player_team ) +full_ammo_on_hud( drop_item, player_team ) //checked matches cerberus output { self endon( "disconnect" ); hudelem = maps/mp/gametypes_zm/_hud_util::createserverfontstring( "objective", 2, player_team ); @@ -1990,7 +1926,7 @@ full_ammo_on_hud( drop_item, player_team ) hudelem thread full_ammo_move_hud( player_team ); } -full_ammo_move_hud( player_team ) +full_ammo_move_hud( player_team ) //checked matches cerberus output { players = get_players( player_team ); players[ 0 ] playsoundtoteam( "zmb_full_ammo", player_team ); @@ -2004,7 +1940,7 @@ full_ammo_move_hud( player_team ) self destroy(); } -check_for_rare_drop_override( pos ) +check_for_rare_drop_override( pos ) //checked matches cerberus output { if ( isDefined( flag( "ape_round" ) ) && flag( "ape_round" ) ) { @@ -2013,7 +1949,7 @@ check_for_rare_drop_override( pos ) return 0; } -setup_firesale_audio() +setup_firesale_audio() //checked changed to match cerberus output { wait 2; intercom = getentarray( "intercom", "targetname" ); @@ -2023,11 +1959,9 @@ setup_firesale_audio() { wait 0.2; } - i = 0; - while ( i < intercom.size ) + for(i = 0; i < intercom.size; i++) { - intercom[ i ] thread play_firesale_audio(); - i++; + intercom[i] thread play_firesale_audio(); } while ( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] == 1 ) { @@ -2037,7 +1971,7 @@ setup_firesale_audio() } } -play_firesale_audio() +play_firesale_audio() //checked matches cerberus output { if ( isDefined( level.sndfiresalemusoff ) && level.sndfiresalemusoff ) { @@ -2055,7 +1989,7 @@ play_firesale_audio() self stoploopsound(); } -setup_bonfiresale_audio() +setup_bonfiresale_audio() //checked changed to match cerberus output { wait 2; intercom = getentarray( "intercom", "targetname" ); @@ -2066,10 +2000,9 @@ setup_bonfiresale_audio() wait 0.2; } i = 0; - while ( i < intercom.size ) + for(i = 0; i < intercom.size; i++) { - intercom[ i ] thread play_bonfiresale_audio(); - i++; + intercom[i] thread play_bonfiresale_audio(); } while ( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] == 1 ) { @@ -2079,7 +2012,7 @@ setup_bonfiresale_audio() } } -play_bonfiresale_audio() +play_bonfiresale_audio() //checked matches cerberus output { if ( isDefined( level.sndfiresalemusoff ) && level.sndfiresalemusoff ) { @@ -2097,7 +2030,7 @@ play_bonfiresale_audio() self stoploopsound(); } -free_perk_powerup( item ) +free_perk_powerup( item ) //checked partially matches cerberus output did not change { players = get_players(); i = 0; @@ -2122,7 +2055,7 @@ free_perk_powerup( item ) } } -disable_perk_before_power( perk ) +disable_perk_before_power( perk ) //checked matches cerberus output { self endon( "disconnect" ); if ( isDefined( perk ) ) @@ -2142,14 +2075,14 @@ disable_perk_before_power( perk ) } } -random_weapon_powerup_throttle() +random_weapon_powerup_throttle() //checked matches cerberus output { self.random_weapon_powerup_throttle = 1; wait 0.25; self.random_weapon_powerup_throttle = 0; } -random_weapon_powerup( item, player ) +random_weapon_powerup( item, player ) //checked partially matches cerberus output did not change { if ( player.sessionstate == "spectator" || player maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) { @@ -2189,7 +2122,7 @@ random_weapon_powerup( item, player ) return 1; } -bonus_points_player_powerup( item, player ) +bonus_points_player_powerup( item, player ) //checked matches cerberus output { points = randomintrange( 1, 25 ) * 100; if ( isDefined( level.bonus_points_powerup_override ) ) @@ -2202,7 +2135,7 @@ bonus_points_player_powerup( item, player ) } } -bonus_points_team_powerup( item ) +bonus_points_team_powerup( item ) //checked partially matches cerberus output did not change { points = randomintrange( 1, 25 ) * 100; if ( isDefined( level.bonus_points_powerup_override ) ) @@ -2221,14 +2154,14 @@ bonus_points_team_powerup( item ) } } -lose_points_team_powerup( item ) +lose_points_team_powerup( item ) //checked partially matches cerberus output { points = randomintrange( 1, 25 ) * 100; players = get_players(); i = 0; while ( i < players.size ) { - if ( !players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() && players[ i ].sessionstate != "spectator" ) + if ( !( players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) && players[ i ].sessionstate != "spectator" ) { if ( ( players[ i ].score - points ) <= 0 ) { @@ -2245,14 +2178,14 @@ lose_points_team_powerup( item ) } } -lose_perk_powerup( item ) +lose_perk_powerup( item ) //checked partially matches cerberus output { players = get_players(); i = 0; while ( i < players.size ) { player = players[ i ]; - if ( !player maps/mp/zombies/_zm_laststand::player_is_in_laststand() && player.sessionstate != "spectator" ) + if ( !( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) && player.sessionstate != "spectator" ) { player maps/mp/zombies/_zm_perks::lose_random_perk(); } @@ -2260,14 +2193,14 @@ lose_perk_powerup( item ) } } -empty_clip_powerup( item ) +empty_clip_powerup( item ) //checked partially matches cerberus output { players = get_players(); i = 0; while ( i < players.size ) { player = players[ i ]; - if ( !player maps/mp/zombies/_zm_laststand::player_is_in_laststand() && player.sessionstate != "spectator" ) + if ( !( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) && player.sessionstate != "spectator" ) { weapon = player getcurrentweapon(); player setweaponammoclip( weapon, 0 ); @@ -2276,7 +2209,7 @@ empty_clip_powerup( item ) } } -minigun_weapon_powerup( ent_player, time ) +minigun_weapon_powerup( ent_player, time ) //checked matches cerberus output { ent_player endon( "disconnect" ); ent_player endon( "death" ); @@ -2311,7 +2244,7 @@ minigun_weapon_powerup( ent_player, time ) level thread minigun_weapon_powerup_replace( ent_player, "minigun_time_over" ); } -minigun_weapon_powerup_countdown( ent_player, str_gun_return_notify, time ) +minigun_weapon_powerup_countdown( ent_player, str_gun_return_notify, time ) //checked matches cerberus output { ent_player endon( "death" ); ent_player endon( "disconnect" ); @@ -2329,7 +2262,7 @@ minigun_weapon_powerup_countdown( ent_player, str_gun_return_notify, time ) level thread minigun_weapon_powerup_remove( ent_player, str_gun_return_notify ); } -minigun_weapon_powerup_replace( ent_player, str_gun_return_notify ) +minigun_weapon_powerup_replace( ent_player, str_gun_return_notify ) //checked matches cerberus output { ent_player endon( "death" ); ent_player endon( "disconnect" ); @@ -2342,7 +2275,7 @@ minigun_weapon_powerup_replace( ent_player, str_gun_return_notify ) ent_player decrement_is_drinking(); } -minigun_weapon_powerup_remove( ent_player, str_gun_return_notify ) +minigun_weapon_powerup_remove( ent_player, str_gun_return_notify ) //checked partially matches cerberus output did not change { ent_player endon( "death" ); ent_player endon( "player_downed" ); @@ -2388,12 +2321,12 @@ minigun_weapon_powerup_remove( ent_player, str_gun_return_notify ) } } -minigun_weapon_powerup_off() +minigun_weapon_powerup_off() //checked matches cerberus output { self.zombie_vars[ "zombie_powerup_minigun_time" ] = 0; } -minigun_watch_gunner_downed() +minigun_watch_gunner_downed() //checked partially matches cerberus output did not change { if ( isDefined( self.has_minigun ) && !self.has_minigun ) { @@ -2417,7 +2350,7 @@ minigun_watch_gunner_downed() self.has_powerup_weapon = 0; } -tesla_weapon_powerup( ent_player, time ) +tesla_weapon_powerup( ent_player, time ) //unused did not check { ent_player endon( "disconnect" ); ent_player endon( "death" ); @@ -2450,7 +2383,7 @@ tesla_weapon_powerup( ent_player, time ) level thread tesla_weapon_powerup_replace( ent_player, "tesla_time_over" ); } -tesla_weapon_powerup_countdown( ent_player, str_gun_return_notify, time ) +tesla_weapon_powerup_countdown( ent_player, str_gun_return_notify, time ) //unused did not check { ent_player endon( "death" ); ent_player endon( "player_downed" ); @@ -2490,7 +2423,7 @@ tesla_weapon_powerup_countdown( ent_player, str_gun_return_notify, time ) level thread tesla_weapon_powerup_remove( ent_player, str_gun_return_notify ); } -tesla_weapon_powerup_replace( ent_player, str_gun_return_notify ) +tesla_weapon_powerup_replace( ent_player, str_gun_return_notify ) //unused did not check { ent_player endon( "death" ); ent_player endon( "disconnect" ); @@ -2503,7 +2436,7 @@ tesla_weapon_powerup_replace( ent_player, str_gun_return_notify ) ent_player decrement_is_drinking(); } -tesla_weapon_powerup_remove( ent_player, str_gun_return_notify ) +tesla_weapon_powerup_remove( ent_player, str_gun_return_notify ) //unused did not check { ent_player endon( "death" ); ent_player endon( "player_downed" ); @@ -2549,12 +2482,12 @@ tesla_weapon_powerup_remove( ent_player, str_gun_return_notify ) } } -tesla_weapon_powerup_off() +tesla_weapon_powerup_off() //unused did not check { self.zombie_vars[ "zombie_powerup_tesla_time" ] = 0; } -tesla_watch_gunner_downed() +tesla_watch_gunner_downed() //unused did not check { if ( isDefined( self.has_tesla ) && !self.has_tesla ) { @@ -2578,7 +2511,7 @@ tesla_watch_gunner_downed() self.has_powerup_weapon = 0; } -tesla_powerup_active() +tesla_powerup_active() //unused did not check { players = get_players(); i = 0; @@ -2593,11 +2526,11 @@ tesla_powerup_active() return 0; } -print_powerup_drop( powerup, type ) +print_powerup_drop( powerup, type ) //devcall only, deleted { } -register_carpenter_node( node, callback ) +register_carpenter_node( node, callback ) //checked matches cerberus output { if ( !isDefined( level._additional_carpenter_nodes ) ) { @@ -2607,7 +2540,7 @@ register_carpenter_node( node, callback ) level._additional_carpenter_nodes[ level._additional_carpenter_nodes.size ] = node; } -start_carpenter_new( origin ) +start_carpenter_new( origin ) //checked partially changed to match cerberus output { level.carpenter_powerup_active = 1; window_boards = getstructarray( "exterior_goal", "targetname" ); @@ -2619,7 +2552,9 @@ start_carpenter_new( origin ) carp_ent playloopsound( "evt_carpenter" ); boards_near_players = get_near_boards( window_boards ); boards_far_from_players = get_far_boards( window_boards ); - level repair_far_boards( boards_far_from_players, maps/mp/zombies/_zm_powerups::is_carpenter_boards_upgraded() ); + //broken non essential + //level repair_far_boards( boards_far_from_players, maps/mp/zombies/_zm_powerups::is_carpenter_boards_upgraded() ); + i = 0; while ( i < boards_near_players.size ) { @@ -2632,12 +2567,12 @@ start_carpenter_new( origin ) { break; } - else chunk = get_random_destroyed_chunk( window, window.barrier_chunks ); + chunk = get_random_destroyed_chunk( window, window.barrier_chunks ); if ( !isDefined( chunk ) ) { break; } - else window thread maps/mp/zombies/_zm_blockers::replace_chunk( window, chunk, undefined, maps/mp/zombies/_zm_powerups::is_carpenter_boards_upgraded(), 1 ); + window thread maps/mp/zombies/_zm_blockers::replace_chunk( window, chunk, undefined, maps/mp/zombies/_zm_powerups::is_carpenter_boards_upgraded(), 1 ); last_repaired_chunk = chunk; if ( isDefined( window.clip ) ) { @@ -2654,9 +2589,6 @@ start_carpenter_new( origin ) { break; } - else - { - } } if ( isDefined( window.zbarrier ) ) { @@ -2674,7 +2606,7 @@ start_carpenter_new( origin ) i++; continue; } - else while ( isDefined( last_repaired_chunk ) && last_repaired_chunk.state == "mid_repair" ) + while ( isDefined( last_repaired_chunk ) && last_repaired_chunk.state == "mid_repair" ) { wait 0.05; } @@ -2695,7 +2627,7 @@ start_carpenter_new( origin ) level.carpenter_powerup_active = undefined; } -is_carpenter_boards_upgraded() +is_carpenter_boards_upgraded() //checked matches cerberus output { if ( isDefined( level.pers_carpenter_boards_active ) && level.pers_carpenter_boards_active == 1 ) { @@ -2704,158 +2636,130 @@ is_carpenter_boards_upgraded() return 0; } -get_near_boards( windows ) +get_near_boards( windows ) //checked changed to match cerberus output { players = get_players(); boards_near_players = []; - j = 0; - while ( j < windows.size ) + for(j = 0; j < windows.size; j++) { close = 0; - i = 0; - while ( i < players.size ) + for(i = 0; i < players.size; i++) { origin = undefined; - if ( isDefined( windows[ j ].zbarrier ) ) + if(isdefined(windows[j].zbarrier)) { - origin = windows[ j ].zbarrier.origin; + origin = windows[j].zbarrier.origin; } else { - origin = windows[ j ].origin; + origin = windows[j].origin; } - if ( distancesquared( players[ i ].origin, origin ) <= level.board_repair_distance_squared ) + if(distancesquared(players[i].origin, origin) <= level.board_repair_distance_squared) { close = 1; break; } - else - { - i++; - } } - if ( close ) + if(close) { - boards_near_players[ boards_near_players.size ] = windows[ j ]; + boards_near_players[boards_near_players.size] = windows[j]; } - j++; } return boards_near_players; } -get_far_boards( windows ) +get_far_boards( windows ) //checked changed to match cerberus output { players = get_players(); boards_far_from_players = []; - j = 0; - while ( j < windows.size ) + for(j = 0; j < windows.size; j++) { close = 0; - i = 0; - while ( i < players.size ) + for(i = 0; i < players.size; i++) { origin = undefined; - if ( isDefined( windows[ j ].zbarrier ) ) + if(isdefined(windows[j].zbarrier)) { - origin = windows[ j ].zbarrier.origin; + origin = windows[j].zbarrier.origin; } else { - origin = windows[ j ].origin; + origin = windows[j].origin; } - if ( distancesquared( players[ i ].origin, origin ) >= level.board_repair_distance_squared ) + if(distancesquared(players[i].origin, origin) >= level.board_repair_distance_squared) { close = 1; break; } - else - { - i++; - } } - if ( close ) + if(close) { - boards_far_from_players[ boards_far_from_players.size ] = windows[ j ]; + boards_far_from_players[boards_far_from_players.size] = windows[j]; } - j++; } return boards_far_from_players; } -repair_far_boards( barriers, upgrade ) +repair_far_boards( barriers, upgrade ) //checked changed to match cerberus output { - i = 0; - while ( i < barriers.size ) + for(i = 0; i < barriers.size; i++) { - barrier = barriers[ i ]; - if ( all_chunks_intact( barrier, barrier.barrier_chunks ) ) + barrier = barriers[i]; + if(all_chunks_intact(barrier, barrier.barrier_chunks)) { - i++; continue; } + if(isdefined(barrier.zbarrier)) + { + a_pieces = barrier.zbarrier getzbarrierpieceindicesinstate("open"); + if(isdefined(a_pieces)) + { + for(xx = 0; xx < a_pieces.size; xx++) + { + chunk = a_pieces[xx]; + if(upgrade) + { + barrier.zbarrier zbarrierpieceuseupgradedmodel(chunk); + barrier.zbarrier.chunk_health[chunk] = barrier.zbarrier getupgradedpiecenumlives(chunk); + continue; + } + barrier.zbarrier zbarrierpieceusedefaultmodel(chunk); + barrier.zbarrier.chunk_health[chunk] = 0; + } + } + for(x = 0; x < barrier.zbarrier getnumzbarrierpieces(); x++) + { + barrier.zbarrier setzbarrierpiecestate(x, "closed"); + barrier.zbarrier showzbarrierpiece(x); + } + } + else if(isdefined(barrier.clip)) + { + barrier.clip enable_trigger(); + barrier.clip disconnectpaths(); + } else { - while ( isDefined( barrier.zbarrier ) ) - { - a_pieces = barrier.zbarrier getzbarrierpieceindicesinstate( "open" ); - while ( isDefined( a_pieces ) ) - { - xx = 0; - while ( xx < a_pieces.size ) - { - chunk = a_pieces[ xx ]; - if ( upgrade ) - { - barrier.zbarrier zbarrierpieceuseupgradedmodel( chunk ); - barrier.zbarrier.chunk_health[ chunk ] = barrier.zbarrier getupgradedpiecenumlives( chunk ); - xx++; - continue; - } - else - { - barrier.zbarrier zbarrierpieceusedefaultmodel( chunk ); - barrier.zbarrier.chunk_health[ chunk ] = 0; - } - xx++; - } - } - x = 0; - while ( x < barrier.zbarrier getnumzbarrierpieces() ) - { - barrier.zbarrier setzbarrierpiecestate( x, "closed" ); - barrier.zbarrier showzbarrierpiece( x ); - x++; - } - } - if ( isDefined( barrier.clip ) ) - { - barrier.clip enable_trigger(); - barrier.clip disconnectpaths(); - } - else - { - blocker_disconnect_paths( barrier.neg_start, barrier.neg_end ); - } - if ( ( i % 4 ) == 0 ) - { - wait_network_frame(); - } + blocker_disconnect_paths(barrier.neg_start, barrier.neg_end); + } + if(i % 4 == 0) + { + wait_network_frame(); } - i++; } } -func_should_never_drop() +func_should_never_drop() //checked matches cerberus output { return 0; } -func_should_always_drop() +func_should_always_drop() //checked matches cerberus output { return 1; } -func_should_drop_minigun() +func_should_drop_minigun() //checked matches cerberus output { if ( minigun_no_drop() ) { @@ -2864,25 +2768,25 @@ func_should_drop_minigun() return 1; } -func_should_drop_carpenter() +func_should_drop_carpenter() //checked matches cerberus output { - if ( get_num_window_destroyed() < 5 ) + if ( get_num_window_destroyed() < 5 ) { return 0; } return 1; } -func_should_drop_fire_sale() +func_should_drop_fire_sale() //checked partially changed to match cerberus output { - if ( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] != 1 || level.chest_moves < 1 && isDefined( level.disable_firesale_drop ) && level.disable_firesale_drop ) + if ( level.zombie_vars[ "zombie_powerup_fire_sale_on" ] == 1 || level.chest_moves < 1 || isDefined( level.disable_firesale_drop ) && level.disable_firesale_drop ) { return 0; } return 1; } -powerup_move() +powerup_move() //checked partially changed to match cerberus output { self endon( "powerup_timedout" ); self endon( "powerup_grabbed" ); @@ -2892,7 +2796,7 @@ powerup_move() self waittill( "move_powerup", moveto, distance ); drag_vector = moveto - self.origin; range_squared = lengthsquared( drag_vector ); - if ( range_squared > ( distance * distance ) ) + if ( range_squared > distance * distance ) { drag_vector = vectornormalize( drag_vector ); drag_vector = distance * drag_vector; @@ -2902,7 +2806,7 @@ powerup_move() } } -powerup_emp() +powerup_emp() //checked matches cerberus output { self endon( "powerup_timedout" ); self endon( "powerup_grabbed" ); @@ -2922,7 +2826,7 @@ powerup_emp() } } -get_powerups( origin, radius ) +get_powerups( origin, radius ) //checked partially matches cerberus output did not change { if ( isDefined( origin ) && isDefined( radius ) ) { @@ -2943,9 +2847,9 @@ get_powerups( origin, radius ) return level.active_powerups; } -should_award_stat( powerup_name ) +should_award_stat( powerup_name ) //checked changed to matched cerberus output { - if ( powerup_name != "teller_withdrawl" && powerup_name != "blue_monkey" || powerup_name == "free_perk" && powerup_name == "bonus_points_player" ) + if ( powerup_name == "teller_withdrawl" || powerup_name == "blue_monkey" || powerup_name == "free_perk" || powerup_name == "bonus_points_player" ) { return 0; } @@ -2956,10 +2860,12 @@ should_award_stat( powerup_name ) return 1; } -teller_withdrawl( powerup, player ) +teller_withdrawl( powerup, player ) //checked matches cerberus output { player maps/mp/zombies/_zm_score::add_to_player_score( powerup.value ); } + + diff --git a/patch_zm/maps/mp/zombies/NoKnownErrors/_zm_equipment.gsc b/patch_zm/maps/mp/zombies/NoKnownErrors/_zm_equipment.gsc deleted file mode 100644 index a405923..0000000 --- a/patch_zm/maps/mp/zombies/NoKnownErrors/_zm_equipment.gsc +++ /dev/null @@ -1,1953 +0,0 @@ -#include maps/mp/zombies/_zm_spawner; -#include maps/mp/zombies/_zm_stats; -#include maps/mp/zombies/_zm_weapons; -#include maps/mp/zombies/_zm_laststand; -#include maps/mp/zombies/_zm_unitrigger; -#include maps/mp/zombies/_zm_buildables; -#include maps/mp/zombies/_zm_audio; -#include maps/mp/zombies/_zm_utility; -#include maps/mp/_utility; -#include common_scripts/utility; - -init() -{ - init_equipment_upgrade(); - onplayerconnect_callback( ::equipment_placement_watcher ); - level._equipment_disappear_fx = loadfx( "maps/zombie/fx_zmb_tranzit_electrap_explo" ); - if ( isDefined( level.disable_fx_zmb_tranzit_shield_explo ) && !level.disable_fx_zmb_tranzit_shield_explo ) - { - level._riotshield_dissapear_fx = loadfx( "maps/zombie/fx_zmb_tranzit_shield_explo" ); - } - level.placeable_equipment_destroy_fn = []; - if ( isDefined( level._no_equipment_activated_clientfield ) && !level._no_equipment_activated_clientfield ) - { - registerclientfield( "scriptmover", "equipment_activated", 12000, 4, "int" ); - } -} - -signal_equipment_activated( val ) -{ - if ( !isDefined( val ) ) - { - val = 1; - } - if ( isDefined( level._no_equipment_activated_clientfield ) && level._no_equipment_activated_clientfield ) - { - return; - } - self endon( "death" ); - self setclientfield( "equipment_activated", val ); - i = 0; - while ( i < 2 ) - { - wait_network_frame(); - i++; - } - self setclientfield( "equipment_activated", 0 ); -} - -register_equipment( equipment_name, hint, howto_hint, hint_icon, equipmentvo, watcher_thread, transfer_fn, drop_fn, pickup_fn, place_fn ) -{ - if ( !isDefined( level.zombie_include_equipment ) || isDefined( level.zombie_include_equipment[ equipment_name ] ) && !level.zombie_include_equipment[ equipment_name ] ) - { - return; - } - precachestring( hint ); - if ( isDefined( hint_icon ) ) - { - precacheshader( hint_icon ); - } - struct = spawnstruct(); - if ( !isDefined( level.zombie_equipment ) ) - { - level.zombie_equipment = []; - } - struct.equipment_name = equipment_name; - struct.hint = hint; - struct.howto_hint = howto_hint; - struct.hint_icon = hint_icon; - struct.vox = equipmentvo; - struct.triggers = []; - struct.models = []; - struct.watcher_thread = watcher_thread; - struct.transfer_fn = transfer_fn; - struct.drop_fn = drop_fn; - struct.pickup_fn = pickup_fn; - struct.place_fn = place_fn; - level.zombie_equipment[ equipment_name ] = struct; -} - -is_equipment_included( equipment_name ) -{ - if ( !isDefined( level.zombie_include_equipment ) ) - { - return 0; - } - return isDefined( level.zombie_include_equipment[ equipment_name ] ); -} - -include_zombie_equipment( equipment_name ) -{ - if ( !isDefined( level.zombie_include_equipment ) ) - { - level.zombie_include_equipment = []; - } - level.zombie_include_equipment[ equipment_name ] = 1; - precacheitem( equipment_name ); -} - -limit_zombie_equipment( equipment_name, limited ) -{ - if ( !isDefined( level._limited_equipment ) ) - { - level._limited_equipment = []; - } - if ( limited ) - { - level._limited_equipment[ level._limited_equipment.size ] = equipment_name; - } - else - { - arrayremovevalue( level._limited_equipment, equipment_name, 0 ); - } -} - -init_equipment_upgrade() -{ - equipment_spawns = []; - equipment_spawns = getentarray( "zombie_equipment_upgrade", "targetname" ); - i = 0; - while ( i < equipment_spawns.size ) - { - hint_string = get_equipment_hint( equipment_spawns[ i ].zombie_equipment_upgrade ); - equipment_spawns[ i ] sethintstring( hint_string ); - equipment_spawns[ i ] setcursorhint( "HINT_NOICON" ); - equipment_spawns[ i ] usetriggerrequirelookat(); - equipment_spawns[ i ] add_to_equipment_trigger_list( equipment_spawns[ i ].zombie_equipment_upgrade ); - equipment_spawns[ i ] thread equipment_spawn_think(); - i++; - } -} - -get_equipment_hint( equipment_name ) -{ -/* -/# - assert( isDefined( level.zombie_equipment[ equipment_name ] ), equipment_name + " was not included or is not registered with the equipment system." ); -#/ -*/ - return level.zombie_equipment[ equipment_name ].hint; -} - -get_equipment_howto_hint( equipment_name ) -{ -/* -/# - assert( isDefined( level.zombie_equipment[ equipment_name ] ), equipment_name + " was not included or is not registered with the equipment system." ); -#/ -*/ - return level.zombie_equipment[ equipment_name ].howto_hint; -} - -get_equipment_icon( equipment_name ) -{ -/* -/# - assert( isDefined( level.zombie_equipment[ equipment_name ] ), equipment_name + " was not included or is not registered with the equipment system." ); -#/ -*/ - return level.zombie_equipment[ equipment_name ].hint_icon; -} - -add_to_equipment_trigger_list( equipment_name ) -{ -/* -/# - assert( isDefined( level.zombie_equipment[ equipment_name ] ), equipment_name + " was not included or is not registered with the equipment system." ); -#/ -*/ - level.zombie_equipment[ equipment_name ].triggers[ level.zombie_equipment[ equipment_name ].triggers.size ] = self; - level.zombie_equipment[ equipment_name ].models[ level.zombie_equipment[ equipment_name ].models.size ] = getent( self.target, "targetname" ); -} - -equipment_spawn_think() -{ - for ( ;; ) - { - self waittill( "trigger", player ); - if ( player in_revive_trigger() || player.is_drinking > 0 ) - { - wait 0.1; - continue; - } - else - { - if ( is_limited_equipment( self.zombie_equipment_upgrade ) ) - { - player setup_limited_equipment( self.zombie_equipment_upgrade ); - if ( isDefined( level.hacker_tool_positions ) ) - { - new_pos = random( level.hacker_tool_positions ); - self.origin = new_pos.trigger_org; - model = getent( self.target, "targetname" ); - model.origin = new_pos.model_org; - model.angles = new_pos.model_ang; - } - } - player equipment_give( self.zombie_equipment_upgrade ); - } - } -} - -set_equipment_invisibility_to_player( equipment, invisible ) -{ - triggers = level.zombie_equipment[ equipment ].triggers; - i = 0; - while ( i < triggers.size ) - { - if ( isDefined( triggers[ i ] ) ) - { - triggers[ i ] setinvisibletoplayer( self, invisible ); - } - i++; - } - models = level.zombie_equipment[ equipment ].models; - i = 0; - while ( i < models.size ) - { - if ( isDefined( models[ i ] ) ) - { - models[ i ] setinvisibletoplayer( self, invisible ); - } - i++; - } -} - -equipment_take( equipment ) -{ - if ( !isDefined( equipment ) ) - { - equipment = self get_player_equipment(); - } - if ( !isDefined( equipment ) ) - { - return; - } - if ( !self has_player_equipment( equipment ) ) - { - return; - } - current = 0; - current_weapon = 0; - if ( isDefined( self get_player_equipment() ) && equipment == self get_player_equipment() ) - { - current = 1; - } - if ( equipment == self getcurrentweapon() ) - { - current_weapon = 1; - } - /* -/# - println( "ZM EQUIPMENT: " + self.name + " lost " + equipment + "\n" ); -#/ - */ - if ( isDefined( self.current_equipment_active[ equipment ] ) && self.current_equipment_active[ equipment ] ) - { - self.current_equipment_active[ equipment ] = 0; - self notify( equipment + "_deactivate" ); - } - self notify( equipment + "_taken" ); - self takeweapon( equipment ); - if ( !is_limited_equipment( equipment ) || is_limited_equipment( equipment ) && !limited_equipment_in_use( equipment ) ) - { - self set_equipment_invisibility_to_player( equipment, 0 ); - } - if ( current ) - { - self set_player_equipment( undefined ); - self setactionslot( 1, "" ); - } - else - { - arrayremovevalue( self.deployed_equipment, equipment ); - } - if ( current_weapon ) - { - primaryweapons = self getweaponslistprimaries(); - if ( isDefined( primaryweapons ) && primaryweapons.size > 0 ) - { - self switchtoweapon( primaryweapons[ 0 ] ); - } - } -} - -equipment_give( equipment ) -{ - if ( !isDefined( equipment ) ) - { - return; - } - if ( !isDefined( level.zombie_equipment[ equipment ] ) ) - { - return; - } - if ( self has_player_equipment( equipment ) ) - { - return; - } - /* -/# - println( "ZM EQUIPMENT: " + self.name + " got " + equipment + "\n" ); -#/ - */ - curr_weapon = self getcurrentweapon(); - curr_weapon_was_curr_equipment = self is_player_equipment( curr_weapon ); - self equipment_take(); - self set_player_equipment( equipment ); - self giveweapon( equipment ); - self setweaponammoclip( equipment, 1 ); - self thread show_equipment_hint( equipment ); - self notify( equipment + "_given" ); - self set_equipment_invisibility_to_player( equipment, 1 ); - self setactionslot( 1, "weapon", equipment ); - if ( isDefined( level.zombie_equipment[ equipment ].watcher_thread ) ) - { - self thread [[ level.zombie_equipment[ equipment ].watcher_thread ]](); - } - self thread equipment_slot_watcher( equipment ); - self maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", level.zombie_equipment[ equipment ].vox ); -} - -equipment_slot_watcher( equipment ) -{ - self notify( "kill_equipment_slot_watcher" ); - self endon( "kill_equipment_slot_watcher" ); - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "weapon_change", curr_weapon, prev_weapon ); - self.prev_weapon_before_equipment_change = undefined; - if ( isDefined( prev_weapon ) && prev_weapon != "none" ) - { - prev_weapon_type = weaponinventorytype( prev_weapon ); - if ( prev_weapon_type == "primary" || prev_weapon_type == "altmode" ) - { - self.prev_weapon_before_equipment_change = prev_weapon; - } - } - if ( isDefined( level.zombie_equipment[ equipment ].watcher_thread ) ) - { - if ( curr_weapon == equipment ) - { - if ( self.current_equipment_active[ equipment ] == 1 ) - { - self notify( equipment + "_deactivate" ); - self.current_equipment_active[ equipment ] = 0; - } - else - { - if ( self.current_equipment_active[ equipment ] == 0 ) - { - self notify( equipment + "_activate" ); - self.current_equipment_active[ equipment ] = 1; - } - } - self waittill( "equipment_select_response_done" ); - } - continue; - } - else if ( curr_weapon == equipment && !self.current_equipment_active[ equipment ] ) - { - self notify( equipment + "_activate" ); - self.current_equipment_active[ equipment ] = 1; - continue; - } - else - { - if ( curr_weapon != equipment && self.current_equipment_active[ equipment ] ) - { - self notify( equipment + "_deactivate" ); - self.current_equipment_active[ equipment ] = 0; - } - } - } -} - -is_limited_equipment( equipment ) -{ - while ( isDefined( level._limited_equipment ) ) - { - i = 0; - while ( i < level._limited_equipment.size ) - { - if ( level._limited_equipment[ i ] == equipment ) - { - return 1; - } - i++; - } - } - return 0; -} - -limited_equipment_in_use( equipment ) -{ - players = get_players(); - i = 0; - while ( i < players.size ) - { - current_equipment = players[ i ] get_player_equipment(); - if ( isDefined( current_equipment ) && current_equipment == equipment ) - { - return 1; - } - i++; - } - if ( isDefined( level.dropped_equipment ) && isDefined( level.dropped_equipment[ equipment ] ) ) - { - return 1; - } - return 0; -} - -setup_limited_equipment( equipment ) -{ - players = get_players(); - i = 0; - while ( i < players.size ) - { - players[ i ] set_equipment_invisibility_to_player( equipment, 1 ); - i++; - } - self thread release_limited_equipment_on_disconnect( equipment ); - self thread release_limited_equipment_on_equipment_taken( equipment ); -} - -release_limited_equipment_on_equipment_taken( equipment ) -{ - self endon( "disconnect" ); - self waittill_either( equipment + "_taken", "spawned_spectator" ); - players = get_players(); - i = 0; - while ( i < players.size ) - { - players[ i ] set_equipment_invisibility_to_player( equipment, 0 ); - i++; - } -} - -release_limited_equipment_on_disconnect( equipment ) -{ - self endon( equipment + "_taken" ); - self waittill( "disconnect" ); - players = get_players(); - i = 0; - while ( i < players.size ) - { - if ( isalive( players[ i ] ) ) - { - players[ i ] set_equipment_invisibility_to_player( equipment, 0 ); - } - i++; - } -} - -is_equipment_active( equipment ) -{ - if ( !isDefined( self.current_equipment_active ) || !isDefined( self.current_equipment_active[ equipment ] ) ) - { - return 0; - } - return self.current_equipment_active[ equipment ]; -} - -init_equipment_hint_hudelem( x, y, alignx, aligny, fontscale, alpha ) -{ - self.x = x; - self.y = y; - self.alignx = alignx; - self.aligny = aligny; - self.fontscale = fontscale; - self.alpha = alpha; - self.sort = 20; -} - -setup_equipment_client_hintelem() -{ - self endon( "death" ); - self endon( "disconnect" ); - if ( !isDefined( self.hintelem ) ) - { - self.hintelem = newclienthudelem( self ); - } - if ( level.splitscreen ) - { - self.hintelem init_equipment_hint_hudelem( 160, 90, "center", "middle", 1.6, 1 ); - } - else - { - self.hintelem init_equipment_hint_hudelem( 320, 220, "center", "bottom", 1.6, 1 ); - } -} - -show_equipment_hint( equipment ) -{ - self notify( "kill_previous_show_equipment_hint_thread" ); - self endon( "kill_previous_show_equipment_hint_thread" ); - self endon( "death" ); - self endon( "disconnect" ); - if ( isDefined( self.do_not_display_equipment_pickup_hint ) && self.do_not_display_equipment_pickup_hint ) - { - return; - } - wait 0.5; - text = get_equipment_howto_hint( equipment ); - self show_equipment_hint_text( text ); -} - -show_equipment_hint_text( text ) -{ - self notify( "hide_equipment_hint_text" ); - wait 0.05; - self setup_equipment_client_hintelem(); - self.hintelem settext( text ); - self.hintelem.alpha = 1; - self.hintelem.font = "small"; - self.hintelem.fontscale = 1.25; - self.hintelem.hidewheninmenu = 1; - time = self waittill_notify_or_timeout( "hide_equipment_hint_text", 3.2 ); - if ( isDefined( time ) ) - { - self.hintelem fadeovertime( 0.25 ); - self.hintelem.alpha = 0; - self waittill_notify_or_timeout( "hide_equipment_hint_text", 0.25 ); - } - self.hintelem settext( "" ); - self.hintelem destroy(); -} - -equipment_onspawnretrievableweaponobject( watcher, player ) -{ - self.plant_parent = self; - if ( isDefined( level.placeable_equipment_type[ self.name ] ) ) - { - iswallmount = level.placeable_equipment_type[ self.name ] == "wallmount"; - } - if ( !isDefined( player.turret_placement ) || !player.turret_placement[ "result" ] ) - { - if ( iswallmount /*|| !getDvarInt( #"B3416C1D" )*/ ) - { - self waittill( "stationary" ); - waittillframeend; - if ( iswallmount ) - { - if ( isDefined( player.planted_wallmount_on_a_zombie ) && player.planted_wallmount_on_a_zombie ) - { - equip_name = self.name; - thread equipment_disappear_fx( self.origin, undefined, self.angles ); - self delete(); - if ( player hasweapon( equip_name ) ) - { - player setweaponammoclip( equip_name, 1 ); - } - player.planted_wallmount_on_a_zombie = undefined; - return; - } - } - } - else - { - self.plant_parent = player; - self.origin = player.origin; - self.angles = player.angles; - wait_network_frame(); - } - } - equipment = watcher.name + "_zm"; - /* -/# - if ( !isDefined( player.current_equipment ) || player.current_equipment != equipment ) - { - assert( player has_deployed_equipment( equipment ) ); - assert( !isDefined( player.current_equipment ) ); -#/ - } - */ - if ( isDefined( player.current_equipment ) && player.current_equipment == equipment ) - { - player equipment_to_deployed( equipment ); - } - if ( isDefined( level.zombie_equipment[ equipment ].place_fn ) ) - { - if ( isDefined( player.turret_placement ) && player.turret_placement[ "result" ] ) - { - plant_origin = player.turret_placement[ "origin" ]; - plant_angles = player.turret_placement[ "angles" ]; - } - else - { - if ( isDefined( level.placeable_equipment_type[ self.name ] ) && level.placeable_equipment_type[ self.name ] == "wallmount" ) - { - plant_origin = self.origin; - plant_angles = self.angles; - } - else - { - plant_origin = self.origin; - plant_angles = self.angles; - } - } - if ( isDefined( level.check_force_deploy_origin ) ) - { - if ( player [[ level.check_force_deploy_origin ]]( self, plant_origin, plant_angles ) ) - { - plant_origin = player.origin; - plant_angles = player.angles; - self.plant_parent = player; - } - } - else - { - if ( isDefined( level.check_force_deploy_z ) ) - { - if ( player [[ level.check_force_deploy_z ]]( self, plant_origin, plant_angles ) ) - { - plant_origin = ( plant_origin[ 0 ], plant_origin[ 1 ], player.origin[ 2 ] + 10 ); - } - } - } - if ( isDefined( iswallmount ) && iswallmount ) - { - self ghost(); - } - replacement = player [[ level.zombie_equipment[ equipment ].place_fn ]]( plant_origin, plant_angles ); - if ( isDefined( replacement ) ) - { - replacement.owner = player; - replacement.original_owner = player; - replacement.name = self.name; - player notify( "equipment_placed" ); - if ( isDefined( level.equipment_planted ) ) - { - player [[ level.equipment_planted ]]( replacement, equipment, self.plant_parent ); - } - player maps/mp/zombies/_zm_buildables::track_buildables_planted( self ); - } - if ( isDefined( self ) ) - { - self delete(); - } - } -} - -equipment_retrieve( player ) -{ - if ( isDefined( self ) ) - { - self stoploopsound(); - original_owner = self.original_owner; - weaponname = self.name; - if ( !isDefined( original_owner ) ) - { - player equipment_give( weaponname ); - self.owner = player; - } - else - { - if ( player != original_owner ) - { - equipment_transfer( weaponname, original_owner, player ); - self.owner = player; - } - player equipment_from_deployed( weaponname ); - } - if ( isDefined( self.requires_pickup ) && self.requires_pickup ) - { - if ( isDefined( level.zombie_equipment[ weaponname ].pickup_fn ) ) - { - self.owner = player; - if ( isDefined( self.damage ) ) - { - player player_set_equipment_damage( weaponname, self.damage ); - } - player [[ level.zombie_equipment[ weaponname ].pickup_fn ]]( self ); - } - } - self.playdialog = 0; - weaponname = self.name; - self delete(); - if ( !player hasweapon( weaponname ) ) - { - player giveweapon( weaponname ); - clip_ammo = player getweaponammoclip( weaponname ); - clip_max_ammo = weaponclipsize( weaponname ); - if ( clip_ammo < clip_max_ammo ) - { - clip_ammo++; - } - player setweaponammoclip( weaponname, clip_ammo ); - } - player maps/mp/zombies/_zm_buildables::track_planted_buildables_pickedup( weaponname ); - } -} - -equipment_drop_to_planted( equipment, player ) -{ -/* -/# - if ( !isDefined( player.current_equipment ) || player.current_equipment != equipment ) - { - assert( player has_deployed_equipment( equipment ) ); - assert( !isDefined( player.current_equipment ) ); -#/ - } -*/ - if ( isDefined( player.current_equipment ) && player.current_equipment == equipment ) - { - player equipment_to_deployed( equipment ); - } - if ( isDefined( level.zombie_equipment[ equipment ].place_fn ) ) - { - replacement = player [[ level.zombie_equipment[ equipment ].place_fn ]]( player.origin, player.angles ); - if ( isDefined( replacement ) ) - { - replacement.owner = player; - replacement.original_owner = player; - replacement.name = equipment; - if ( isDefined( level.equipment_planted ) ) - { - player [[ level.equipment_planted ]]( replacement, equipment, player ); - } - player notify( "equipment_placed" ); - player maps/mp/zombies/_zm_buildables::track_buildables_planted( replacement ); - } - } -} - -equipment_transfer( weaponname, fromplayer, toplayer ) -{ - if ( is_limited_equipment( weaponname ) ) - { -/* -/# - println( "ZM EQUIPMENT: " + weaponname + " transferred from " + fromplayer.name + " to " + toplayer.name + "\n" ); -#/ -*/ - toplayer equipment_orphaned( weaponname ); - wait 0.05; -/* -/# - assert( !toplayer has_player_equipment( weaponname ) ); -#/ -/# - assert( fromplayer has_player_equipment( weaponname ) ); -#/ -*/ - toplayer equipment_give( weaponname ); - toplayer equipment_to_deployed( weaponname ); - if ( isDefined( level.zombie_equipment[ weaponname ].transfer_fn ) ) - { - [[ level.zombie_equipment[ weaponname ].transfer_fn ]]( fromplayer, toplayer ); - } - fromplayer equipment_release( weaponname ); -/* -/# - assert( toplayer has_player_equipment( weaponname ) ); -#/ -/# - assert( !fromplayer has_player_equipment( weaponname ) ); -#/ -*/ - equipment_damage = 0; - toplayer player_set_equipment_damage( weaponname, fromplayer player_get_equipment_damage( weaponname ) ); - fromplayer player_set_equipment_damage( equipment_damage ); - } - else - { -/* -/# - println( "ZM EQUIPMENT: " + weaponname + " swapped from " + fromplayer.name + " to " + toplayer.name + "\n" ); -#/ -*/ - toplayer equipment_give( weaponname ); - if ( isDefined( toplayer.current_equipment ) && toplayer.current_equipment == weaponname ) - { - toplayer equipment_to_deployed( weaponname ); - } - if ( isDefined( level.zombie_equipment[ weaponname ].transfer_fn ) ) - { - [[ level.zombie_equipment[ weaponname ].transfer_fn ]]( fromplayer, toplayer ); - } - equipment_damage = toplayer player_get_equipment_damage( weaponname ); - toplayer player_set_equipment_damage( weaponname, fromplayer player_get_equipment_damage( weaponname ) ); - fromplayer player_set_equipment_damage( weaponname, equipment_damage ); - } -} - -equipment_release( equipment ) -{ -/* -/# - println( "ZM EQUIPMENT: " + self.name + " release " + equipment + "\n" ); -#/ -*/ - self equipment_take( equipment ); -} - -equipment_drop( equipment ) -{ - if ( isDefined( level.zombie_equipment[ equipment ].place_fn ) ) - { - equipment_drop_to_planted( equipment, self ); -/* -/# - println( "ZM EQUIPMENT: " + self.name + " drop to planted " + equipment + "\n" ); -#/ -*/ - } - else if ( isDefined( level.zombie_equipment[ equipment ].drop_fn ) ) - { - if ( isDefined( self.current_equipment ) && self.current_equipment == equipment ) - { - self equipment_to_deployed( equipment ); - } - item = self [[ level.zombie_equipment[ equipment ].drop_fn ]](); - if ( isDefined( item ) ) - { - if ( isDefined( level.equipment_planted ) ) - { - self [[ level.equipment_planted ]]( item, equipment, self ); - } - item.owner = undefined; - item.damage = self player_get_equipment_damage( equipment ); - } -/* -/# - println( "ZM EQUIPMENT: " + self.name + " dropped " + equipment + "\n" ); -#/ -*/ - } - else - { - self equipment_take(); - } - self notify( "equipment_dropped" ); -} - -equipment_grab( equipment, item ) -{ -/* -/# - println( "ZM EQUIPMENT: " + self.name + " picked up " + equipment + "\n" ); -#/ -*/ - self equipment_give( equipment ); - if ( isDefined( level.zombie_equipment[ equipment ].pickup_fn ) ) - { - item.owner = self; - self player_set_equipment_damage( equipment, item.damage ); - self [[ level.zombie_equipment[ equipment ].pickup_fn ]]( item ); - } -} - -equipment_orphaned( equipment ) -{ -/* -/# - println( "ZM EQUIPMENT: " + self.name + " orphaned " + equipment + "\n" ); -#/ -*/ - self equipment_take( equipment ); -} - -equipment_to_deployed( equipment ) -{ -/* -/# - println( "ZM EQUIPMENT: " + self.name + " deployed " + equipment + "\n" ); -#/ -*/ - if ( !isDefined( self.deployed_equipment ) ) - { - self.deployed_equipment = []; - } -/* -/# - assert( self.current_equipment == equipment ); -#/ -*/ - self.deployed_equipment[ self.deployed_equipment.size ] = equipment; - self.current_equipment = undefined; - if ( !isDefined( level.riotshield_name ) || equipment != level.riotshield_name ) - { - self takeweapon( equipment ); - } - self setactionslot( 1, "" ); -} - -equipment_from_deployed( equipment ) -{ - if ( !isDefined( equipment ) ) - { - equipment = "none"; - } -/* -/# - println( "ZM EQUIPMENT: " + self.name + " retrieved " + equipment + "\n" ); -#/ -*/ - if ( isDefined( self.current_equipment ) && equipment != self.current_equipment ) - { - self equipment_drop( self.current_equipment ); - } -/* -/# - assert( self has_deployed_equipment( equipment ) ); -#/ -*/ - self.current_equipment = equipment; - if ( isDefined( level.riotshield_name ) && equipment != level.riotshield_name ) - { - self giveweapon( equipment ); - } - if ( self hasweapon( equipment ) ) - { - self setweaponammoclip( equipment, 1 ); - } - self setactionslot( 1, "weapon", equipment ); - arrayremovevalue( self.deployed_equipment, equipment ); - self notify( equipment + "_pickup" ); -} - -eqstub_get_unitrigger_origin() -{ - if ( isDefined( self.origin_parent ) ) - { - return self.origin_parent.origin; - } - tup = anglesToUp( self.angles ); - eq_unitrigger_offset = 12 * tup; - return self.origin + eq_unitrigger_offset; -} - -eqstub_on_spawn_trigger( trigger ) -{ - if ( isDefined( self.link_parent ) ) - { - trigger enablelinkto(); - trigger linkto( self.link_parent ); - trigger setmovingplatformenabled( 1 ); - } -} - -equipment_buy( equipment ) -{ -/* -/# - println( "ZM EQUIPMENT: " + self.name + " bought " + equipment + "\n" ); -#/ -*/ - if ( isDefined( self.current_equipment ) && equipment != self.current_equipment ) - { - self equipment_drop( self.current_equipment ); - } - if ( equipment != "riotshield_zm" && equipment == "alcatraz_shield_zm" && isDefined( self.player_shield_reset_health ) ) - { - self [[ self.player_shield_reset_health ]](); - } - else - { - self player_set_equipment_damage( equipment, 0 ); - } - self equipment_give( equipment ); -} - -generate_equipment_unitrigger( classname, origin, angles, flags, radius, script_height, hint, icon, think, moving ) -{ - if ( !isDefined( radius ) ) - { - radius = 64; - } - if ( !isDefined( script_height ) ) - { - script_height = 64; - } - script_width = script_height; - if ( !isDefined( script_width ) ) - { - script_width = 64; - } - script_length = script_height; - if ( !isDefined( script_length ) ) - { - script_length = 64; - } - unitrigger_stub = spawnstruct(); - unitrigger_stub.origin = origin; - if ( isDefined( angles ) ) - { - unitrigger_stub.angles = angles; - } - if ( isDefined( script_length ) ) - { - unitrigger_stub.script_length = script_length; - } - else - { - unitrigger_stub.script_length = 13.5; - } - if ( isDefined( script_width ) ) - { - unitrigger_stub.script_width = script_width; - } - else - { - unitrigger_stub.script_width = 27.5; - } - if ( isDefined( script_height ) ) - { - unitrigger_stub.script_height = script_height; - } - else - { - unitrigger_stub.script_height = 24; - } - unitrigger_stub.radius = radius; - unitrigger_stub.cursor_hint = "HINT_NOICON"; - unitrigger_stub.hint_string = hint; - /* - if ( getDvarInt( #"1F0A2129" ) ) - { - unitrigger_stub.cursor_hint = "HINT_WEAPON"; - unitrigger_stub.cursor_hint_weapon = icon; - } - */ - unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; - unitrigger_stub.require_look_at = 0; - switch( classname ) - { - case "trigger_radius": - unitrigger_stub.script_unitrigger_type = "unitrigger_radius"; - break; - case "trigger_radius_use": - unitrigger_stub.script_unitrigger_type = "unitrigger_radius_use"; - break; - case "trigger_box": - unitrigger_stub.script_unitrigger_type = "unitrigger_box"; - break; - case "trigger_box_use": - unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; - break; - } - unitrigger_stub.originfunc = ::eqstub_get_unitrigger_origin; - unitrigger_stub.onspawnfunc = ::eqstub_on_spawn_trigger; - if ( isDefined( moving ) && moving ) - { - maps/mp/zombies/_zm_unitrigger::register_unitrigger( unitrigger_stub, think ); - } - else - { - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, think ); - } - return unitrigger_stub; -} - -can_pick_up_equipment( equipment_name, equipment_trigger ) -{ - if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || self in_revive_trigger() ) - { - return 0; - } - if ( self isthrowinggrenade() ) - { - return 0; - } - if ( isDefined( self.screecher_weapon ) ) - { - return 0; - } - if ( self is_jumping() ) - { - return 0; - } - if ( self is_player_equipment( equipment_name ) ) - { - return 0; - } - if ( isDefined( self.pickup_equipment ) && self.pickup_equipment ) - { - return 0; - } - if ( isDefined( level.equipment_team_pick_up ) && level.equipment_team_pick_up && !self same_team_placed_equipment( equipment_trigger ) ) - { - return 0; - } - return 1; -} - -same_team_placed_equipment( equipment_trigger ) -{ - if ( isDefined( equipment_trigger ) && isDefined( equipment_trigger.stub ) && isDefined( equipment_trigger.stub.model ) && isDefined( equipment_trigger.stub.model.owner ) ) - { - return equipment_trigger.stub.model.owner.pers[ "team" ] == self.pers[ "team" ]; - } -} - -placed_equipment_think( model, equipname, origin, angles, tradius, toffset ) -{ - pickupmodel = spawn( "script_model", origin ); - if ( isDefined( angles ) ) - { - pickupmodel.angles = angles; - } - pickupmodel setmodel( model ); - if ( isDefined( level.equipment_safe_to_drop ) ) - { - if ( !( self [[ level.equipment_safe_to_drop ]]( pickupmodel ) ) ) - { - equipment_disappear_fx( pickupmodel.origin, undefined, pickupmodel.angles ); - pickupmodel delete(); - self equipment_take( equipname ); - return undefined; - } - } - watchername = getsubstr( equipname, 0, equipname.size - 3 ); - if ( isDefined( level.retrievehints[ watchername ] ) ) - { - hint = level.retrievehints[ watchername ].hint; - } - else - { - hint = &"MP_GENERIC_PICKUP"; - } - icon = get_equipment_icon( equipname ); - if ( !isDefined( tradius ) ) - { - tradius = 32; - } - torigin = origin; - if ( isDefined( toffset ) ) - { - tforward = anglesToForward( angles ); - torigin += toffset * tforward; - } - tup = anglesToUp( angles ); - eq_unitrigger_offset = 12 * tup; - if ( isDefined( pickupmodel.canmove ) ) - { - pickupmodel.stub = generate_equipment_unitrigger( "trigger_radius_use", torigin + eq_unitrigger_offset, angles, 0, tradius, 64, hint, equipname, ::placed_equipment_unitrigger_think, pickupmodel.canmove ); - } - pickupmodel.stub.model = pickupmodel; - pickupmodel.stub.equipname = equipname; - pickupmodel.equipname = equipname; - pickupmodel thread item_attract_zombies(); - pickupmodel thread item_watch_explosions(); - if ( is_limited_equipment( equipname ) ) - { - if ( !isDefined( level.dropped_equipment ) ) - { - level.dropped_equipment = []; - } - if ( isDefined( level.dropped_equipment[ equipname ] ) && isDefined( level.dropped_equipment[ equipname ].model ) ) - { - level.dropped_equipment[ equipname ].model dropped_equipment_destroy( 1 ); - } - level.dropped_equipment[ equipname ] = pickupmodel.stub; - } - destructible_equipment_list_add( pickupmodel ); - return pickupmodel; -} - -watch_player_visibility( equipment ) -{ - self endon( "kill_trigger" ); - self setinvisibletoall(); - while ( isDefined( self ) ) - { - players = getplayers(); - _a1142 = players; - _k1142 = getFirstArrayKey( _a1142 ); - while ( isDefined( _k1142 ) ) - { - player = _a1142[ _k1142 ]; - if ( !isDefined( player ) ) - { - } - else - { - invisible = !player can_pick_up_equipment( equipment, self ); - if ( isDefined( self ) ) - { - self setinvisibletoplayer( player, invisible ); - } - wait 0.05; - } - _k1142 = getNextArrayKey( _a1142, _k1142 ); - } - wait 1; - } -} - -placed_equipment_unitrigger_think() -{ - self endon( "kill_trigger" ); - self thread watch_player_visibility( self.stub.equipname ); - while ( 1 ) - { - self waittill( "trigger", player ); - while ( !player can_pick_up_equipment( self.stub.equipname, self ) ) - { - continue; - } - self thread pickup_placed_equipment( player ); - return; - } -} - -pickup_placed_equipment( player ) -{ -/* -/# - if ( isDefined( player.pickup_equipment )assert( !player.pickup_equipment ); -#/ -*/ - player.pickup_equipment = 1; - stub = self.stub; - if ( isDefined( player.current_equipment ) && stub.equipname != player.current_equipment ) - { - player equipment_drop( player.current_equipment ); - } - if ( is_limited_equipment( stub.equipname ) ) - { - if ( isDefined( level.dropped_equipment ) && isDefined( level.dropped_equipment[ stub.equipname ] ) && level.dropped_equipment[ stub.equipname ] == stub ) - { - } - } - if ( isDefined( stub.model ) ) - { - stub.model equipment_retrieve( player ); - } - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( stub ); - wait 3; - player.pickup_equipment = 0; -} - -dropped_equipment_think( model, equipname, origin, angles, tradius, toffset ) -{ - pickupmodel = spawn( "script_model", origin ); - if ( isDefined( angles ) ) - { - pickupmodel.angles = angles; - } - pickupmodel setmodel( model ); - if ( isDefined( level.equipment_safe_to_drop ) ) - { - if ( !( self [[ level.equipment_safe_to_drop ]]( pickupmodel ) ) ) - { - equipment_disappear_fx( pickupmodel.origin, undefined, pickupmodel.angles ); - pickupmodel delete(); - self equipment_take( equipname ); - return; - } - } - watchername = getsubstr( equipname, 0, equipname.size - 3 ); - if ( isDefined( level.retrievehints[ watchername ] ) ) - { - hint = level.retrievehints[ watchername ].hint; - } - else - { - hint = &"MP_GENERIC_PICKUP"; - } - icon = get_equipment_icon( equipname ); - if ( !isDefined( tradius ) ) - { - tradius = 32; - } - torigin = origin; - if ( isDefined( toffset ) ) - { - offset = 64; - tforward = anglesToForward( angles ); - torigin = torigin + ( toffset * tforward ) + vectorScale( ( 0, 0, 0 ), 8 ); - } - if ( isDefined( pickupmodel.canmove ) ) - { - pickupmodel.stub = generate_equipment_unitrigger( "trigger_radius_use", torigin, angles, 0, tradius, 64, hint, equipname, ::dropped_equipment_unitrigger_think, pickupmodel.canmove ); - } - pickupmodel.stub.model = pickupmodel; - pickupmodel.stub.equipname = equipname; - pickupmodel.equipname = equipname; - if ( isDefined( level.equipment_planted ) ) - { - self [[ level.equipment_planted ]]( pickupmodel, equipname, self ); - } - if ( !isDefined( level.dropped_equipment ) ) - { - level.dropped_equipment = []; - } - if ( isDefined( level.dropped_equipment[ equipname ] ) ) - { - level.dropped_equipment[ equipname ].model dropped_equipment_destroy( 1 ); - } - level.dropped_equipment[ equipname ] = pickupmodel.stub; - destructible_equipment_list_add( pickupmodel ); - pickupmodel thread item_attract_zombies(); - return pickupmodel; -} - -dropped_equipment_unitrigger_think() -{ - self endon( "kill_trigger" ); - self thread watch_player_visibility( self.stub.equipname ); - while ( 1 ) - { - self waittill( "trigger", player ); - while ( !player can_pick_up_equipment( self.stub.equipname, self ) ) - { - continue; - } - self thread pickup_dropped_equipment( player ); - return; - } -} - -pickup_dropped_equipment( player ) -{ - player.pickup_equipment = 1; - stub = self.stub; - if ( isDefined( player.current_equipment ) && stub.equipname != player.current_equipment ) - { - player equipment_drop( player.current_equipment ); - } - player equipment_grab( stub.equipname, stub.model ); - stub.model dropped_equipment_destroy(); - wait 3; - player.pickup_equipment = 0; -} - -dropped_equipment_destroy( gusto ) -{ - stub = self.stub; - if ( isDefined( gusto ) && gusto ) - { - equipment_disappear_fx( self.origin, undefined, self.angles ); - } - if ( isDefined( level.dropped_equipment ) ) - { - } - if ( isDefined( stub.model ) ) - { - stub.model delete(); - } - if ( isDefined( self.original_owner ) || is_limited_equipment( stub.equipname ) && maps/mp/zombies/_zm_weapons::is_weapon_included( stub.equipname ) ) - { - self.original_owner equipment_take( stub.equipname ); - } - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( stub ); -} - -add_placeable_equipment( equipment, modelname, destroy_fn, type ) -{ - if ( !isDefined( level.placeable_equipment ) ) - { - level.placeable_equipment = []; - } - level.placeable_equipment[ equipment ] = modelname; - precachemodel( modelname ); - precacheitem( equipment + "_turret" ); - if ( !isDefined( level.placeable_equipment_destroy_fn ) ) - { - level.placeable_equipment_destroy_fn = []; - } - level.placeable_equipment_destroy_fn[ equipment ] = destroy_fn; - if ( !isDefined( level.placeable_equipment_type ) ) - { - level.placeable_equipment_type = []; - } - level.placeable_equipment_type[ equipment ] = type; -} - -is_placeable_equipment( equipment ) -{ - if ( isDefined( level.placeable_equipment ) && isDefined( level.placeable_equipment[ equipment ] ) ) - { - return 1; - } - return 0; -} - -equipment_placement_watcher() -{ - self endon( "death_or_disconnect" ); - for ( ;; ) - { - self waittill( "weapon_change", weapon ); - if ( self.sessionstate != "spectator" && is_placeable_equipment( weapon ) ) - { - self thread equipment_watch_placement( weapon ); - } - } -} - -equipment_watch_placement( equipment ) -{ - self.turret_placement = undefined; - carry_offset = vectorScale( ( 0, 0, 0 ), 22 ); - carry_angles = ( 0, 0, 0 ); - placeturret = spawnturret( "auto_turret", self.origin, equipment + "_turret" ); - placeturret.angles = self.angles; - placeturret setmodel( level.placeable_equipment[ equipment ] ); - placeturret setturretcarried( 1 ); - placeturret setturretowner( self ); - if ( isDefined( level.placeable_equipment_type[ equipment ] ) ) - { - placeturret setturrettype( level.placeable_equipment_type[ equipment ] ); - } - self carryturret( placeturret, carry_offset, carry_angles ); - if ( isDefined( level.use_swipe_protection ) ) - { - self thread watch_melee_swipes( equipment, placeturret ); - } - self notify( "create_equipment_turret" ); - ended = self waittill_any_return( "weapon_change", "grenade_fire", "death_or_disconnect" ); - if ( isDefined( level.use_legacy_equipment_placement ) && !level.use_legacy_equipment_placement ) - { - self.turret_placement = self canplayerplaceturret( /*placeturret*/ ); - } - if ( ended == "weapon_change" ) - { - self.turret_placement = undefined; - if ( self hasweapon( equipment ) ) - { - self setweaponammoclip( equipment, 1 ); - } - } - self notify( "destroy_equipment_turret" ); - self stopcarryturret( placeturret ); - placeturret setturretcarried( 0 ); - placeturret delete(); -} - -watch_melee_swipes( equipment, turret ) -{ - self endon( "weapon_change" ); - self endon( "grenade_fire" ); - self endon( "death" ); - self endon( "disconnect" ); - while ( 1 ) - { - self waittill( "melee_swipe", zombie ); - while ( distancesquared( zombie.origin, self.origin ) > ( zombie.meleeattackdist * zombie.meleeattackdist ) ) - { - continue; - } - tpos = turret.origin; - tangles = turret.angles; - self player_damage_equipment( equipment, 200, zombie.origin ); - if ( self.equipment_damage[ equipment ] >= 1500 ) - { - thread equipment_disappear_fx( tpos, undefined, tangles ); - primaryweapons = self getweaponslistprimaries(); - if ( isDefined( primaryweapons[ 0 ] ) ) - { - self switchtoweapon( primaryweapons[ 0 ] ); - } - if ( isalive( self ) ) - { - self playlocalsound( level.zmb_laugh_alias ); - } - self maps/mp/zombies/_zm_stats::increment_client_stat( "cheat_total", 0 ); - self equipment_release( equipment ); - return; - } - } -} - -player_get_equipment_damage( equipment ) -{ - if ( isDefined( self.equipment_damage ) && isDefined( self.equipment_damage[ equipment ] ) ) - { - return self.equipment_damage[ equipment ]; - } - return 0; -} - -player_set_equipment_damage( equipment, damage ) -{ - if ( !isDefined( self.equipment_damage ) ) - { - self.equipment_damage = []; - } - self.equipment_damage[ equipment ] = damage; -} - -player_damage_equipment( equipment, damage, origin ) -{ - if ( !isDefined( self.equipment_damage ) ) - { - self.equipment_damage = []; - } - if ( !isDefined( self.equipment_damage[ equipment ] ) ) - { - self.equipment_damage[ equipment ] = 0; - } - self.equipment_damage[ equipment ] += damage; - if ( self.equipment_damage[ equipment ] > 1500 ) - { - if ( isDefined( level.placeable_equipment_destroy_fn[ equipment ] ) ) - { - self [[ level.placeable_equipment_destroy_fn[ equipment ] ]](); - } - else - { - equipment_disappear_fx( origin ); - } - self equipment_release( equipment ); - } -} - -item_damage( damage ) -{ - if ( isDefined( self.isriotshield ) && self.isriotshield ) - { - if ( isDefined( level.riotshield_damage_callback ) && isDefined( self.owner ) ) - { - self.owner [[ level.riotshield_damage_callback ]]( damage, 0 ); - } - else - { - if ( isDefined( level.deployed_riotshield_damage_callback ) ) - { - self [[ level.deployed_riotshield_damage_callback ]]( damage ); - } - } - } - else - { - if ( isDefined( self.owner ) ) - { - self.owner player_damage_equipment( self.equipname, damage, self.origin ); - return; - } - else - { - if ( !isDefined( self.damage ) ) - { - self.damage = 0; - } - self.damage += damage; - if ( self.damage > 1500 ) - { - self thread dropped_equipment_destroy( 1 ); - } - } - } -} - -item_watch_damage() -{ - self endon( "death" ); - self setcandamage( 1 ); - self.health = 1500; - while ( 1 ) - { - self waittill( "damage", amount ); - self item_damage( amount ); - } -} - -item_watch_explosions() -{ - self endon( "death" ); - while ( 1 ) - { - level waittill( "grenade_exploded", position, radius, idamage, odamage ); - wait randomfloatrange( 0.05, 0.3 ); - distsqrd = distancesquared( self.origin, position ); - if ( distsqrd < ( radius * radius ) ) - { - dist = sqrt( distsqrd ); - dist /= radius; - damage = odamage + ( ( idamage - odamage ) * ( 1 - dist ) ); - self item_damage( damage * 5 ); - } - } -} - -get_item_health() -{ -/* -/# - damage = 0; - if ( isDefined( self.isriotshield ) && self.isriotshield ) - { - damagemax = level.zombie_vars[ "riotshield_hit_points" ]; - if ( isDefined( self.owner ) ) - { - damage = self.owner.shielddamagetaken; - } - else - { - if ( isDefined( level.deployed_riotshield_damage_callback ) ) - { - damage = self.shielddamagetaken; - } - } - } - else - { - if ( isDefined( self.owner ) ) - { - damagemax = 1500; - damage = self.owner player_get_equipment_damage( self.equipname ); - } - else - { - damagemax = 1500; - if ( isDefined( self.damage ) ) - { - damage = self.damage; - } - } - } - return ( damagemax - damage ) / damagemax; -#/ -*/ -} - -debughealth() -{ -/* -/# - self endon( "death" ); - self endon( "stop_attracting_zombies" ); - while ( 1 ) - { - if ( getDvarInt( #"EB512CB7" ) ) - { - health = self get_item_health(); - color = ( 1 - health, health, 0 ); - text = "" + ( health * 100 ) + ""; - print3d( self.origin, text, color, 1, 0,5, 1 ); - } - wait 0.05; -#/ - } -*/ -} - -item_choke() -{ - if ( !isDefined( level.item_choke_count ) ) - { - level.item_choke_count = 0; - } - level.item_choke_count++; - if ( level.item_choke_count >= 10 ) - { - wait 0.05; - level.item_choke_count = 0; - } -} - -is_equipment_ignored( equipname ) -{ - if ( isDefined( level.equipment_ignored_by_zombies ) && isDefined( equipname ) && isDefined( level.equipment_ignored_by_zombies[ equipname ] ) ) - { - return 1; - } - return 0; -} - -enemies_ignore_equipment( equipname ) -{ - if ( !isDefined( level.equipment_ignored_by_zombies ) ) - { - level.equipment_ignored_by_zombies = []; - } - level.equipment_ignored_by_zombies[ equipname ] = equipname; -} - -item_attract_zombies() -{ - self endon( "death" ); - self notify( "stop_attracting_zombies" ); - self endon( "stop_attracting_zombies" ); -/* -/# - self thread debughealth(); -#/ -*/ - if ( is_equipment_ignored( self.equipname ) ) - { - return; - } - while ( 1 ) - { - if ( isDefined( level.vert_equipment_attack_range ) ) - { - vdistmax = level.vert_equipment_attack_range; - } - else - { - vdistmax = 36; - } - if ( isDefined( level.max_equipment_attack_range ) ) - { - distmax = level.max_equipment_attack_range * level.max_equipment_attack_range; - } - else - { - distmax = 4096; - } - if ( isDefined( level.min_equipment_attack_range ) ) - { - distmin = level.min_equipment_attack_range * level.min_equipment_attack_range; - } - else - { - distmin = 2025; - } - ai = getaiarray( level.zombie_team ); - i = 0; - while ( i < ai.size ) - { - if ( !isDefined( ai[ i ] ) ) - { - i++; - continue; - } - else if ( isDefined( ai[ i ].ignore_equipment ) && ai[ i ].ignore_equipment ) - { - i++; - continue; - } - else - { - if ( isDefined( level.ignore_equipment ) ) - { - if ( self [[ level.ignore_equipment ]]( ai[ i ] ) ) - { - i++; - continue; - } - } - else if ( isDefined( ai[ i ].is_inert ) && ai[ i ].is_inert ) - { - i++; - continue; - } - else - { - if ( isDefined( ai[ i ].is_traversing ) && ai[ i ].is_traversing ) - { - i++; - continue; - } - else - { - vdist = abs( ai[ i ].origin[ 2 ] - self.origin[ 2 ] ); - distsqrd = distance2dsquared( ai[ i ].origin, self.origin ); - if ( isDefined( self.equipname ) || self.equipname == "riotshield_zm" && self.equipname == "alcatraz_shield_zm" ) - { - vdistmax = 108; - } - should_attack = 0; - if ( isDefined( level.should_attack_equipment ) ) - { - should_attack = self [[ level.should_attack_equipment ]]( distsqrd ); - } - if ( distsqrd < distmax && distsqrd > distmin || vdist < vdistmax && should_attack ) - { - if ( isDefined( ai[ i ].isscreecher ) && !ai[ i ].isscreecher && !ai[ i ] is_quad() && !ai[ i ] is_leaper() ) - { - ai[ i ] thread attack_item( self ); - item_choke(); - } - } - item_choke(); - } - } - } - i++; - } - wait 0.1; - } -} - -attack_item( item ) -{ - self endon( "death" ); - item endon( "death" ); - self endon( "start_inert" ); - if ( isDefined( self.doing_equipment_attack ) && self.doing_equipment_attack ) - { - return 0; - } - if ( isDefined( self.not_interruptable ) && self.not_interruptable ) - { - return 0; - } - self thread attack_item_stop( item ); - self thread attack_item_interrupt( item ); - if ( getDvar( "zombie_equipment_attack_freq" ) == "" ) - { - setdvar( "zombie_equipment_attack_freq", "15" ); - } - freq = getDvarInt( "zombie_equipment_attack_freq" ); - self.doing_equipment_attack = 1; - self maps/mp/zombies/_zm_spawner::zombie_history( "doing equipment attack 1 - " + getTime() ); - self.item = item; - if ( !isDefined( self ) || !isalive( self ) ) - { - return; - } - if ( isDefined( item.zombie_attack_callback ) ) - { - item [[ item.zombie_attack_callback ]]( self ); - } - self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "attack", self.animname ); - if ( isDefined( level.attack_item ) ) - { - self [[ level.attack_item ]](); - } - melee_anim = "zm_window_melee"; - if ( !self.has_legs ) - { - melee_anim = "zm_walk_melee_crawl"; - if ( self.a.gib_ref == "no_legs" ) - { - melee_anim = "zm_stumpy_melee"; - } - else - { - if ( self.zombie_move_speed == "run" || self.zombie_move_speed == "sprint" ) - { - melee_anim = "zm_run_melee_crawl"; - } - } - } - self orientmode( "face point", item.origin ); - self animscripted( self.origin, flat_angle( vectorToAngles( item.origin - self.origin ) ), melee_anim ); - self notify( "item_attack" ); - if ( isDefined( self.custom_item_dmg ) ) - { - item thread item_damage( self.custom_item_dmg ); - } - else - { - item thread item_damage( 100 ); - } - item playsound( "fly_riotshield_zm_impact_flesh" ); - wait ( randomint( 100 ) / 100 ); - self.doing_equipment_attack = 0; - self maps/mp/zombies/_zm_spawner::zombie_history( "doing equipment attack 0 from wait - " + getTime() ); - self orientmode( "face default" ); -} - -attack_item_interrupt( item ) -{ - if ( isDefined( self.has_legs ) && !self.has_legs ) - { - return; - } - self notify( "attack_item_interrupt" ); - self endon( "attack_item_interrupt" ); - self endon( "death" ); - while ( isDefined( self.has_legs ) && self.has_legs ) - { - self waittill( "damage" ); - } - self stopanimscripted(); - self.doing_equipment_attack = 0; - self maps/mp/zombies/_zm_spawner::zombie_history( "doing equipment attack 0 from death - " + getTime() ); - self.item = undefined; -} - -attack_item_stop( item ) -{ - self notify( "attack_item_stop" ); - self endon( "attack_item_stop" ); - self endon( "death" ); - item waittill( "death" ); - self stopanimscripted(); - self.doing_equipment_attack = 0; - self maps/mp/zombies/_zm_spawner::zombie_history( "doing equipment attack 0 from death - " + getTime() ); - self.item = undefined; - if ( isDefined( level.attack_item_stop ) ) - { - self [[ level.attack_item_stop ]](); - } -} - -window_notetracks( msg, equipment ) -{ - self endon( "death" ); - equipment endon( "death" ); - while ( self.doing_equipment_attack ) - { - self waittill( msg, notetrack ); - if ( notetrack == "end" ) - { - return; - } - if ( notetrack == "fire" ) - { - equipment item_damage( 100 ); - } - } -} - -destructible_equipment_list_check() -{ - if ( !isDefined( level.destructible_equipment ) ) - { - level.destructible_equipment = []; - } - i = 0; - while ( i < level.destructible_equipment.size ) - { - if ( !isDefined( level.destructible_equipment[ i ] ) ) - { - arrayremoveindex( level.destructible_equipment, i ); - continue; - } - else - { - i++; - } - } -} - -destructible_equipment_list_add( item ) -{ - destructible_equipment_list_check(); - level.destructible_equipment[ level.destructible_equipment.size ] = item; -} - -get_destructible_equipment_list() -{ - destructible_equipment_list_check(); - return level.destructible_equipment; -} - -equipment_disappear_fx( origin, fx, angles ) -{ - effect = level._equipment_disappear_fx; - if ( isDefined( fx ) ) - { - effect = fx; - } - if ( isDefined( angles ) ) - { - playfx( effect, origin, anglesToForward( angles ) ); - } - else - { - playfx( effect, origin ); - } - wait 1.1; -} - diff --git a/readme.md b/readme.md index f80818e..ca18b97 100644 --- a/readme.md +++ b/readme.md @@ -22,4 +22,4 @@ Scripts that cause this error will run serverside but clients cannot join due to This type of error can be caused by many different things Each script will be sorted by its location e.g. patch_zm/maps/mp/zombies and then sorted by error type so it would look like this: -patch_zm/maps/mp/zombies/MinorErrors/_zm_timer.gsc +patch_zm/maps/mp/zombies/MinorErrors/_zm_timer.gsc \ No newline at end of file diff --git a/zm_tomb_patch/maps/mp/zombies/NoKnownErrors/_zm_perk_random.gsc b/zm_tomb_patch/maps/mp/zombies/NoKnownErrors/_zm_perk_random.gsc index 7015487..c53e7b7 100644 --- a/zm_tomb_patch/maps/mp/zombies/NoKnownErrors/_zm_perk_random.gsc +++ b/zm_tomb_patch/maps/mp/zombies/NoKnownErrors/_zm_perk_random.gsc @@ -10,7 +10,6 @@ init() //checked 100% parity { - level thread onPlayerConnect(); //this is new code added to define player level._random_zombie_perk_cost = 1500; level thread precache(); level thread init_machines(); @@ -30,15 +29,6 @@ init() //checked 100% parity } -onPlayerConnect() -{ - for(;;) - { - level waittill("connected", player); - level.players_wunderfizz = player; - } -} - init_machines() { machines = getentarray("random_perk_machine", "targetname"); @@ -306,7 +296,6 @@ conditional_power_indicators() //checked 100% parity } } - wunderfizz_unitrigger_think( player ) //checked 100% parity { self endon( "kill_trigger" ); @@ -314,6 +303,7 @@ wunderfizz_unitrigger_think( player ) //checked 100% parity { self waittill( "trigger", player ); self.stub.trigger_target notify( "trigger" ); + level.players_wunderfizz = player; //better way to define player } } @@ -338,8 +328,6 @@ machine_think() //checked 80% parity { self waittill("trigger", level.players_wunderfizz); flag_clear("machine_can_reset"); - //level notify("pmmove"); - //broken player = level.players_wunderfizz; if(player.score < level._random_zombie_perk_cost) { @@ -347,7 +335,6 @@ machine_think() //checked 80% parity player maps/mp/zombies/_zm_audio::create_and_play_dialog("general", "perk_deny", undefined, 0); continue; } - //working if(self.num_time_used >= self.num_til_moved) { level notify("pmmove"); @@ -359,13 +346,11 @@ machine_think() //checked 80% parity self hidepart("j_ball"); return; } - //working self.machine_user = player; self.num_time_used++; player maps/mp/zombies/_zm_stats::increment_client_stat("use_perk_random"); player maps/mp/zombies/_zm_stats::increment_player_stat("use_perk_random"); - //broken player maps/mp/zombies/_zm_score::minus_to_player_score(level._random_zombie_perk_cost); @@ -377,10 +362,8 @@ machine_think() //checked 80% parity while(1) { - //working thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger(self.unitrigger_stub); - //broken random_perk = get_weighted_random_perk(player); self setclientfield("perk_bottle_cycle_state", 1); @@ -415,7 +398,7 @@ machine_think() //checked 80% parity } self.grab_perk_hint = 1; thread maps/mp/zombies/_zm_unitrigger::register_static_unitrigger(self.unitrigger_stub, ::wunderfizz_unitrigger_think); - //broken + self thread grab_check(player, random_perk); self thread time_out_check(); @@ -484,7 +467,6 @@ grab_check( player, random_perk ) //checked 100% parity player do_player_general_vox("wunderfizz", "perk_wonder", undefined, 100); player.has_drunk_wunderfizz = 1; } - } monitor_when_player_acquires_perk() //checked 100% parity @@ -699,3 +681,5 @@ machine_sounds() //checked 100% parity + +