From c06a6c4b002313ffc709c7d9c8abf77b75a6cb75 Mon Sep 17 00:00:00 2001 From: JezuzLizard Date: Sun, 19 Apr 2020 16:11:24 -0700 Subject: [PATCH] checked 4 scripts against cerberus output _zm_gametype.gsc still has errors with sub gamemodes and sub maps, but its logic has been improved as well as made more readable. _zm_perk_electric_cherry.gsc has been compared with the cerberus output so the code is much cleaner now. _zm_perks.gsc has undergone a full comparison against the cerberus output, and while it is in a better state maps using custom perk scripts don't work properly. _zm_weapons is in a working state now but has errors with wall weapon hint strings and attachments not being applied to packapunch weapons. --- .../maps/mp/gametypes_zm/_zm_gametype.gsc | 190 +-- .../mp/zombies/_zm_perk_electric_cherry.gsc | 103 +- patch_zm/maps/mp/zombies/_zm_perks.gsc | 1096 ++++++++------- patch_zm/maps/mp/zombies/_zm_weapons.gsc | 1206 +++++++---------- 4 files changed, 1158 insertions(+), 1437 deletions(-) diff --git a/patch_zm/maps/mp/gametypes_zm/_zm_gametype.gsc b/patch_zm/maps/mp/gametypes_zm/_zm_gametype.gsc index 0476fe9..ce237f9 100644 --- a/patch_zm/maps/mp/gametypes_zm/_zm_gametype.gsc +++ b/patch_zm/maps/mp/gametypes_zm/_zm_gametype.gsc @@ -27,6 +27,7 @@ main() maps/mp/gametypes_zm/_callbacksetup::setupcallbacks(); globallogic_setupdefault_zombiecallbacks(); menu_init(); + //controls several gamemode specific variables non essential registerroundlimit( 1, 1 ); registertimelimit( 0, 0 ); @@ -67,11 +68,8 @@ main() setdvar( "scr_disable_weapondrop", 1 ); setdvar( "scr_xpscale", 0 ); - //all working except onspawnplayerunified level.onstartgametype = ::onstartgametype; level.onspawnplayer = ::blank; - - //causes the server to crash when someone joins level.onspawnplayerunified = ::onspawnplayerunified; level.onroundendgame = ::onroundendgame; level.mayspawn = ::mayspawn; @@ -85,7 +83,7 @@ main() mode = getDvar( "ui_gametype" ); //condition was incorrect - if ( !isDefined( mode ) || mode == "" && isDefined( level.default_game_mode ) ) + if ( !isDefined( mode ) && isDefined( level.default_game_mode ) || mode == "" && isDefined( level.default_game_mode ) ) { mode = level.default_game_mode; } @@ -121,56 +119,50 @@ main() onplayerconnect_callback( ::onplayerconnect_check_for_hotjoin ); } -game_objects_allowed( mode, location ) //checked not sure what to do yet +game_objects_allowed( mode, location ) //checked partially changed to match cerberus output changed at own discretion { allowed[ 0 ] = mode; entities = getentarray(); - _a153 = entities; - _k153 = getFirstArrayKey( _a153 ); - while ( isDefined( _k153 ) ) + i = 0; + while ( i < entities.size ) { - entity = _a153[ _k153 ]; - if ( isDefined( entity.script_gameobjectname ) ) + if ( isDefined( entities[ i ].script_gameobjectname ) ) { - isallowed = maps/mp/gametypes_zm/_gameobjects::entity_is_allowed( entity, allowed ); - isvalidlocation = maps/mp/gametypes_zm/_gameobjects::location_is_allowed( entity, location ); + isallowed = maps/mp/gametypes_zm/_gameobjects::entity_is_allowed( entities[ i ], allowed ); + isvalidlocation = maps/mp/gametypes_zm/_gameobjects::location_is_allowed( entities[ i ], location ); if ( !isallowed || !isvalidlocation && !is_classic() ) { - if ( isDefined( entity.spawnflags ) && entity.spawnflags == 1 ) + if ( isDefined( entities[ i ].spawnflags ) && entities[ i ].spawnflags == 1 ) { - if ( isDefined( entity.classname ) && entity.classname != "trigger_multiple" ) + if ( isDefined( entities[ i ].classname ) && entities[ i ].classname != "trigger_multiple" ) { - entity connectpaths(); + entities[ i ] connectpaths(); } } - entity delete(); - break; + entities[ i ] delete(); + i++; + continue; } - else + if ( isDefined( entities[ i ].script_vector ) ) { - if ( isDefined( entity.script_vector ) ) + entities[ i ] moveto( entities[ i ].origin + entities[ i ].script_vector, 0.05 ); + entities[ i ] waittill( "movedone" ); + if ( isDefined( entities[ i ].spawnflags ) && entities[ i ].spawnflags == 1 ) { - entity moveto( entity.origin + entity.script_vector, 0,05 ); - entity waittill( "movedone" ); - if ( isDefined( entity.spawnflags ) && entity.spawnflags == 1 ) - { - entity disconnectpaths(); - } - break; + entities[ i ] disconnectpaths(); } - else + i++; + continue; + } + if ( isDefined( entities[ i ].spawnflags ) && entities[ i ].spawnflags == 1 ) + { + if ( isDefined( entities[ i ].classname ) && entities[ i ].classname != "trigger_multiple" ) { - if ( isDefined( entity.spawnflags ) && entity.spawnflags == 1 ) - { - if ( isDefined( entity.classname ) && entity.classname != "trigger_multiple" ) - { - entity connectpaths(); - } - } + entities[ i ] connectpaths(); } } } - _k153 = getNextArrayKey( _a153, _k153 ); + i++; } } @@ -255,14 +247,14 @@ globallogic_setupdefault_zombiecallbacks() //checked matches cerberus output setup_standard_objects( location ) //checked partially used cerberus output { - structs = getstructarray("game_mode_object"); - foreach(struct in structs) + structs = getstructarray( "game_mode_object" ); + foreach ( struct in structs ) { - if(isdefined(struct.script_noteworthy) && struct.script_noteworthy != location) + if ( isdefined( struct.script_noteworthy ) && struct.script_noteworthy != location ) { //continue; } - if(isdefined(struct.script_string)) + if ( isdefined( struct.script_string ) ) { keep = 0; tokens = strtok( struct.script_string, " " ); @@ -291,30 +283,30 @@ setup_standard_objects( location ) //checked partially used cerberus output barricade setmodel(struct.script_parameters); } objects = getentarray(); - foreach(object in objects) + foreach ( object in objects ) { - if(!object is_survival_object()) + if ( !object is_survival_object() ) { } 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(); } } - if(isdefined(level._classic_setup_func)) + if ( isdefined( level._classic_setup_func ) ) { - [[level._classic_setup_func]](); + [[ level._classic_setup_func ]](); } } is_survival_object() //checked changed to cerberus output { - if(!isdefined(self.script_parameters)) + if ( !isdefined( self.script_parameters ) ) { return 0; } @@ -861,65 +853,53 @@ game_end_func() //checked matches cerberus output setup_classic_gametype() //checked did not change to match cerberus output { ents = getentarray(); - _a1004 = ents; - _k1004 = getFirstArrayKey( _a1004 ); - while ( isDefined( _k1004 ) ) + i = 0; + while ( i < ents.size ) { - ent = _a1004[ _k1004 ]; - if ( isDefined( ent.script_parameters ) ) + if ( isDefined( ents[ i ].script_parameters ) ) { - parameters = strtok( ent.script_parameters, " " ); + parameters = strtok( ents[ i ].script_parameters, " " ); should_remove = 0; - _a1010 = parameters; - _k1010 = getFirstArrayKey( _a1010 ); - while ( isDefined( _k1010 ) ) + foreach ( parm in parameters ) { - parm = _a1010[ _k1010 ]; if ( parm == "survival_remove" ) { should_remove = 1; } - _k1010 = getNextArrayKey( _a1010, _k1010 ); } if ( should_remove ) { ent delete(); } } - _k1004 = getNextArrayKey( _a1004, _k1004 ); + i++; } structs = getstructarray( "game_mode_object" ); - _a1040 = structs; - _k1040 = getFirstArrayKey( _a1040 ); - while ( isDefined( _k1040 ) ) + while ( i < structs.size ) { - struct = _a1040[ _k1040 ]; - if ( !isDefined( struct.script_string ) ) + if ( !isdefined( structs[ i ].script_string ) ) { + i++; + continue; } - else tokens = strtok( struct.script_string, " " ); + tokens = strtok( structs[ i ].script_string, " " ); spawn_object = 0; - _a1048 = tokens; - _k1048 = getFirstArrayKey( _a1048 ); - while ( isDefined( _k1048 ) ) + foreach ( parm in tokens ) { - parm = _a1048[ _k1048 ]; if ( parm == "survival" ) { spawn_object = 1; } - _k1048 = getNextArrayKey( _a1048, _k1048 ); } if ( !spawn_object ) { + i++; + continue; } - else - { - barricade = spawn( "script_model", struct.origin ); - barricade.angles = struct.angles; - barricade setmodel( struct.script_parameters ); - } - _k1040 = getNextArrayKey( _a1040, _k1040 ); + barricade = spawn( "script_model", struct.origin ); + barricade.angles = struct.angles; + barricade setmodel( struct.script_parameters ); + i++; } unlink_meat_traversal_nodes(); } @@ -1052,11 +1032,10 @@ create_final_score() //checked matches cerberus output wait 2; } -module_hud_team_winer_score() //checked did not match cerberus output did not change +module_hud_team_winer_score() //checked changed to match cerberus output { players = get_players(); - i = 0; - while ( i < players.size ) + for ( i = 0; i < players.size; i++ ) { players[ i ] thread create_module_hud_team_winer_score(); if ( isDefined( players[ i ]._team_hud ) && isDefined( players[ i ]._team_hud[ "team" ] ) ) @@ -1079,7 +1058,6 @@ module_hud_team_winer_score() //checked did not match cerberus output did not ch players[ i ].afk = 0; players[ i ] detachall(); } - i++; } level thread maps/mp/zombies/_zm_audio::change_zombie_music( "match_over" ); } @@ -1466,6 +1444,7 @@ onspawnplayer( predictedspawn ) //fixed checked changed partially to match cerbe spawnpoints = []; structs = getstructarray("initial_spawn", "script_noteworthy"); + /* if ( isDefined( structs ) ) { _a1757 = structs; @@ -1492,6 +1471,26 @@ onspawnplayer( predictedspawn ) //fixed checked changed partially to match cerbe _k1757 = getNextArrayKey( _a1757, _k1757 ); } } + */ + if ( isdefined( structs ) ) + { + i = 0; + while ( i < structs.size ) + { + if ( isdefined( structs[ i ].script_string ) ) + { + tokens = strtok( structs[ i ].script_string, " " ); + foreach ( token in tokens ) + { + if ( token == match_string ) + { + spawnpoints[ spawnpoints.size ] = structs[ i ]; + } + } + } + i++; + } + } if ( !isDefined( spawnpoints ) || spawnpoints.size == 0 ) { spawnpoints = getstructarray( "initial_spawn_points", "targetname" ); @@ -1550,29 +1549,26 @@ get_player_spawns_for_gametype() //fixed checked partially changed to match cerb } match_string = level.scr_zm_ui_gametype + "_" + location; player_spawns = []; - structs = getstructarray( "player_respawn_point", "targetname" ); - _a1869 = structs; - _k1869 = getFirstArrayKey( _a1869 ); - while ( isDefined( _k1869 ) ) + structs = getstructarray("player_respawn_point", "targetname"); + i = 0; + while ( i < structs.size ) { - struct = _a1869[ _k1869 ]; - if ( isDefined( struct.script_string ) ) + if ( isdefined( structs[ i ].script_string ) ) { - tokens = strtok( struct.script_string, " " ); - _a1874 = tokens; - _k1874 = getFirstArrayKey( _a1874 ); - while ( isDefined( _k1874 ) ) + tokens = strtok( structs[ i ].script_string, " " ); + foreach ( token in tokens ) { - token = _a1874[ _k1874 ]; if ( token == match_string ) { - player_spawns[ player_spawns.size ] = struct; + player_spawns[ player_spawns.size ] = structs[ i ]; } - _k1874 = getNextArrayKey( _a1874, _k1874 ); } } - else player_spawns[ player_spawns.size ] = struct; - _k1869 = getNextArrayKey( _a1869, _k1869 ); + else + { + player_spawns[ player_spawns.size ] = structs[ i ]; + } + i++; } return player_spawns; } @@ -1945,7 +1941,7 @@ onplayerspawned() //checked partially changed to cerberus output { weapons_restored = self [[ level.onplayerspawned_restore_previous_weapons ]](); } - if ( !isDefined( weapons_restored ) && weapons_restored ) + if ( isDefined( weapons_restored ) && !weapons_restored || !isDefined( weapons_restored ) ) { self give_start_weapon( 1 ); } @@ -2042,3 +2038,7 @@ blank() + + + + diff --git a/patch_zm/maps/mp/zombies/_zm_perk_electric_cherry.gsc b/patch_zm/maps/mp/zombies/_zm_perk_electric_cherry.gsc index 802beb4..83817d3 100644 --- a/patch_zm/maps/mp/zombies/_zm_perk_electric_cherry.gsc +++ b/patch_zm/maps/mp/zombies/_zm_perk_electric_cherry.gsc @@ -7,8 +7,16 @@ #include common_scripts/utility; #include maps/mp/_utility; -enable_electric_cherry_perk_for_level() +enable_electric_cherry_perk_for_level() //checked matches cerberus output { + //begin debug code + level.custom_zm_perk_electric_cherry_loaded = 1; + maps/mp/zombies/_zm_bot::init(); + if ( !isDefined( level.debugLogging_zm_perk_electric_cherry ) ) + { + level.debugLogging_zm_perk_electric_cherry = 0; + } + //end debug code register_perk_basic_info( "specialty_grenadepulldeath", "electric_cherry", 2000, &"ZM_PRISON_PERK_CHERRY", "zombie_perk_bottle_cherry" ); register_perk_precache_func( "specialty_grenadepulldeath", ::electic_cherry_precache ); register_perk_clientfields( "specialty_grenadepulldeath", ::electric_cherry_register_clientfield, ::electric_cherry_set_clientfield ); @@ -21,14 +29,14 @@ enable_electric_cherry_perk_for_level() } } -init_electric_cherry() +init_electric_cherry() //checked matches cerberus output { level.custom_laststand_func = ::electric_cherry_laststand; set_zombie_var( "tesla_head_gib_chance", 50 ); registerclientfield( "allplayers", "electric_cherry_reload_fx", 9000, 2, "int" ); } -electic_cherry_precache() +electic_cherry_precache() //checked matches cerberus output { precacheitem( "zombie_perk_bottle_cherry" ); precacheshader( "specialty_fastreload_zombies" ); @@ -44,17 +52,17 @@ electic_cherry_precache() level._effect[ "tesla_shock_secondary" ] = loadfx( "maps/zombie/fx_zombie_tesla_shock_secondary" ); } -electric_cherry_register_clientfield() +electric_cherry_register_clientfield() //checked matches cerberus output { registerclientfield( "toplayer", "perk_electric_cherry", 9000, 1, "int" ); } -electric_cherry_set_clientfield( state ) +electric_cherry_set_clientfield( state ) //checked matches cerberus output { self setclientfieldtoplayer( "perk_electric_cherry", state ); } -electric_cherry_perk_machine_setup( use_trigger, perk_machine, bump_trigger, collision ) +electric_cherry_perk_machine_setup( use_trigger, perk_machine, bump_trigger, collision ) //checked matches cerberus output { use_trigger.script_sound = "mus_perks_cherry_jingle"; use_trigger.script_string = "electric_cherry_perk"; @@ -68,31 +76,27 @@ electric_cherry_perk_machine_setup( use_trigger, perk_machine, bump_trigger, col } } -electric_cherry_perk_machine_think() +electric_cherry_perk_machine_think() //checked changed to match cerberus output { init_electric_cherry(); while ( 1 ) { machine = getentarray( "vendingelectric_cherry", "targetname" ); machine_triggers = getentarray( "vending_electriccherry", "target" ); - i = 0; - while ( i < machine.size ) + for ( i = 0; i < machine.size; i++ ) { machine[ i ] setmodel( "p6_zm_vending_electric_cherry_off" ); - i++; } level thread do_initial_power_off_callback( machine, "electriccherry" ); array_thread( machine_triggers, ::set_power_on, 0 ); level waittill( "electric_cherry_on" ); - i = 0; - while ( i < machine.size ) + for ( i = 0; i < machine.size; i++ ) { machine[ i ] setmodel( "p6_zm_vending_electric_cherry_on" ); machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0.3, 0.4, 3 ); machine[ i ] playsound( "zmb_perks_power_on" ); machine[ i ] thread perk_fx( "electriccherry" ); machine[ i ] thread play_loop_on_machine(); - i++; } level notify( "specialty_grenadepulldeath_power_on" ); array_thread( machine_triggers, ::set_power_on, 1 ); @@ -101,24 +105,20 @@ electric_cherry_perk_machine_think() } } -electric_cherry_host_migration_func() +electric_cherry_host_migration_func() //checked changed to match cerberus output { a_electric_cherry_perk_machines = getentarray( "vending_electriccherry", "targetname" ); - _a130 = a_electric_cherry_perk_machines; - _k130 = getFirstArrayKey( _a130 ); - while ( isDefined( _k130 ) ) + foreach ( perk_machine in a_electric_cherry_perk_machines ) { - perk_machine = _a130[ _k130 ]; if ( isDefined( perk_machine.model ) && perk_machine.model == "p6_zm_vending_electric_cherry_on" ) { perk_machine perk_fx( undefined, 1 ); perk_machine thread perk_fx( "electriccherry" ); } - _k130 = getNextArrayKey( _a130, _k130 ); } } -electric_cherry_laststand() +electric_cherry_laststand() //checked changed to match cerberus output { visionsetlaststand( "zombie_last_stand", 1 ); if ( isDefined( self ) ) @@ -129,36 +129,33 @@ electric_cherry_laststand() wait 0.05; a_zombies = get_round_enemy_array(); a_zombies = get_array_of_closest( self.origin, a_zombies, undefined, undefined, 500 ); - i = 0; - while ( i < a_zombies.size ) + for ( i = 0; i < a_zombies.size; i++) { if ( isalive( self ) ) { - if ( a_zombies[ i ].health <= 1000 ) { a_zombies[ i ] thread electric_cherry_death_fx(); - if ( isDefined( self.cherry_kills ) ) + if ( isdefined( self.cherry_kills ) ) { self.cherry_kills++; } - self maps/mp/zombies/_zm_score::add_to_player_score( 40 ); + self maps/mp/zombies/_zm_score::add_to_player_score( 40 ); } else { a_zombies[ i ] thread electric_cherry_stun(); a_zombies[ i ] thread electric_cherry_shock_fx(); - } - wait 0.1; + } + wait 0.1 ; a_zombies[ i ] dodamage( 1000, self.origin, self, self, "none" ); } - i++; } self notify( "electric_cherry_end" ); } } -electric_cherry_death_fx() +electric_cherry_death_fx() //checked matches cerberus output { self endon( "death" ); tag = "J_SpineUpper"; @@ -175,7 +172,7 @@ electric_cherry_death_fx() } } -electric_cherry_shock_fx() +electric_cherry_shock_fx() //checked matches cerberus output { self endon( "death" ); tag = "J_SpineUpper"; @@ -188,16 +185,18 @@ electric_cherry_shock_fx() network_safe_play_fx_on_tag( "tesla_shock_fx", 2, level._effect[ fx ], self, tag ); } -electric_cherry_stun() +electric_cherry_stun() //checked changed to match cerberus output { self endon( "death" ); self notify( "stun_zombie" ); self endon( "stun_zombie" ); if ( self.health <= 0 ) { + /* /# iprintln( "trying to stun a dead zombie" ); #/ + */ return; } if ( self.ai_state != "find_flesh" ) @@ -206,12 +205,10 @@ electric_cherry_stun() } self.forcemovementscriptstate = 1; self.ignoreall = 1; - i = 0; - while ( i < 2 ) + for ( i = 0; i < 2; i++ ) { self animscripted( self.origin, self.angles, "zm_afterlife_stun" ); self maps/mp/animscripts/shared::donotetracks( "stunned" ); - i++; } self.forcemovementscriptstate = 0; self.ignoreall = 0; @@ -219,7 +216,7 @@ electric_cherry_stun() self thread maps/mp/zombies/_zm_ai_basic::find_flesh(); } -electric_cherry_reload_attack() +electric_cherry_reload_attack() //checked changed to match cerberus output { self endon( "death" ); self endon( "disconnect" ); @@ -273,8 +270,7 @@ electric_cherry_reload_attack() a_zombies = get_round_enemy_array(); a_zombies = get_array_of_closest( self.origin, a_zombies, undefined, undefined, perk_radius ); n_zombies_hit = 0; - i = 0; - while ( i < a_zombies.size ) + for ( i = 0; i < a_zombies.size; i++ ) { if ( isalive( self ) ) { @@ -298,25 +294,21 @@ electric_cherry_reload_attack() } self maps/mp/zombies/_zm_score::add_to_player_score( 40 ); } - else + else if ( !isDefined( a_zombies[ i ].is_brutus ) ) { - if ( !isDefined( a_zombies[ i ].is_brutus ) ) - { - a_zombies[ i ] thread electric_cherry_stun(); - } - a_zombies[ i ] thread electric_cherry_shock_fx(); + a_zombies[ i ] thread electric_cherry_stun(); } + a_zombies[ i ] thread electric_cherry_shock_fx(); wait 0.1; a_zombies[ i ] dodamage( perk_dmg, self.origin, self, self, "none" ); } - i++; } self notify( "electric_cherry_end" ); } } } -electric_cherry_cooldown_timer( str_current_weapon ) +electric_cherry_cooldown_timer( str_current_weapon ) //checked matches cerberus output { self notify( "electric_cherry_cooldown_started" ); self endon( "electric_cherry_cooldown_started" ); @@ -332,7 +324,7 @@ electric_cherry_cooldown_timer( str_current_weapon ) self.consecutive_electric_cherry_attacks = 0; } -check_for_reload_complete( weapon ) +check_for_reload_complete( weapon ) //checked changed to match cerberus output { self endon( "death" ); self endon( "disconnect" ); @@ -346,15 +338,12 @@ check_for_reload_complete( weapon ) { arrayremovevalue( self.wait_on_reload, weapon ); self notify( "weapon_reload_complete_" + weapon ); - return; - } - else - { + break; } } } -weapon_replaced_monitor( weapon ) +weapon_replaced_monitor( weapon ) //checked changed to match cerberus output { self endon( "death" ); self endon( "disconnect" ); @@ -367,15 +356,12 @@ weapon_replaced_monitor( weapon ) { self notify( "player_lost_weapon_" + weapon ); arrayremovevalue( self.wait_on_reload, weapon ); - return; - } - else - { + break; } } } -electric_cherry_reload_fx( n_fraction ) +electric_cherry_reload_fx( n_fraction ) //checked matches cerberus output { if ( n_fraction >= 0.67 ) { @@ -393,8 +379,11 @@ electric_cherry_reload_fx( n_fraction ) self setclientfield( "electric_cherry_reload_fx", 0 ); } -electric_cherry_perk_lost() +electric_cherry_perk_lost() //checked matches cerberus output { self notify( "stop_electric_cherry_reload_attack" ); } + + + diff --git a/patch_zm/maps/mp/zombies/_zm_perks.gsc b/patch_zm/maps/mp/zombies/_zm_perks.gsc index 6e730b9..775d95c 100644 --- a/patch_zm/maps/mp/zombies/_zm_perks.gsc +++ b/patch_zm/maps/mp/zombies/_zm_perks.gsc @@ -14,8 +14,17 @@ #include common_scripts/utility; #include maps/mp/zombies/_zm_magicbox; -init() //checked +init() //checked partially changed to match cerberus output { + //begin debug code + level.custom_zm_perks_loaded = 1; + maps/mp/zombies/_zm_bot::init(); + if ( !isDefined( level.debugLogging_zm_perks ) ) + { + level.debugLogging_zm_perks = 0; + } + + //end debug code level.additionalprimaryweapon_limit = 3; level.perk_purchase_limit = 4; if ( !level.createfx_enabled ) @@ -28,26 +37,22 @@ init() //checked } initialize_custom_perk_arrays(); perk_machine_spawn_init(); - //not broken vending_weapon_upgrade_trigger = []; vending_triggers = getentarray( "zombie_vending", "targetname" ); - i = 0; - while ( i < vending_triggers.size ) + for ( i = 0; i < vending_triggers.size; i++ ) { if ( isDefined( vending_triggers[ i ].script_noteworthy ) && vending_triggers[ i ].script_noteworthy == "specialty_weapupgrade" ) { vending_weapon_upgrade_trigger[ vending_weapon_upgrade_trigger.size ] = vending_triggers[ i ]; arrayremovevalue( vending_triggers, vending_triggers[ i ] ); } - i++; } old_packs = getentarray( "zombie_vending_upgrade", "targetname" ); i = 0; - while ( i < old_packs.size ) + for ( i = 0; i < old_packs.size; i++ ) { vending_weapon_upgrade_trigger[ vending_weapon_upgrade_trigger.size ] = old_packs[ i ]; - i++; } flag_init( "pack_machine_in_use" ); if ( vending_triggers.size < 1 ) @@ -73,9 +78,7 @@ init() //checked 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(); @@ -112,14 +115,14 @@ init() //checked { level thread turn_chugabud_on(); } - if(level._custom_perks.size > 0) + if ( level._custom_perks.size > 0 ) { - a_keys = getarraykeys(level._custom_perks); - for(i = 0; i < a_keys.size; i++) + 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 ]](); } } } @@ -139,7 +142,7 @@ init() //checked } -default_vending_precaching() //checked +default_vending_precaching() //checked changed to match cerberus output { if ( isDefined( level.zombiemode_using_pack_a_punch ) && level.zombiemode_using_pack_a_punch ) { @@ -274,20 +277,20 @@ default_vending_precaching() //checked level.machine_assets[ "whoswho" ].off_model = "p6_zm_vending_chugabud"; level.machine_assets[ "whoswho" ].on_model = "p6_zm_vending_chugabud_on"; } - if(level._custom_perks.size > 0) //changed + if ( level._custom_perks.size > 0 ) //changed { - a_keys = getarraykeys(level._custom_perks); - for(i = 0; i < a_keys.size; i++) + 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 ]](); } } } } -pap_weapon_move_in( trigger, origin_offset, angles_offset ) //changed +pap_weapon_move_in( trigger, origin_offset, angles_offset ) //checked matches cerberus output { level endon( "Pack_A_Punch_off" ); trigger endon( "pap_player_disconnected" ); @@ -305,7 +308,7 @@ pap_weapon_move_in( trigger, origin_offset, angles_offset ) //changed } } -pap_weapon_move_out( trigger, origin_offset, interact_offset ) //changed +pap_weapon_move_out( trigger, origin_offset, interact_offset ) //checked matches cerberus output { level endon( "Pack_A_Punch_off" ); trigger endon( "pap_player_disconnected" ); @@ -331,13 +334,13 @@ pap_weapon_move_out( trigger, origin_offset, interact_offset ) //changed } } -fx_ent_failsafe() +fx_ent_failsafe() //checked matches cerberus output { wait 25; self delete(); } -third_person_weapon_upgrade( current_weapon, upgrade_weapon, packa_rollers, perk_machine, trigger ) //changed +third_person_weapon_upgrade( current_weapon, upgrade_weapon, packa_rollers, perk_machine, trigger ) //checked matches cerberus output { level endon( "Pack_A_Punch_off" ); trigger endon( "pap_player_disconnected" ); @@ -439,7 +442,7 @@ third_person_weapon_upgrade( current_weapon, upgrade_weapon, packa_rollers, perk return trigger.worldgun; } -can_pack_weapon( weaponname ) //checked +can_pack_weapon( weaponname ) //checked did not match cebrerus output changed at own discretion { if ( weaponname == "riotshield_zm" ) { @@ -447,7 +450,7 @@ can_pack_weapon( weaponname ) //checked } if ( flag( "pack_machine_in_use" ) ) { - return 1; + return 0; //was 1 } weaponname = self get_nonalternate_weapon( weaponname ); if ( !maps/mp/zombies/_zm_weapons::is_weapon_or_base_included( weaponname ) ) @@ -461,9 +464,9 @@ can_pack_weapon( weaponname ) //checked return 1; } -player_use_can_pack_now() //checked +player_use_can_pack_now() //checked changed to match cerberus output { - if ( !self maps/mp/zombies/_zm_laststand::player_is_in_laststand() && isDefined( self.intermission ) || self.intermission && self isthrowinggrenade() ) + if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( self.intermission ) && self.intermission || self isthrowinggrenade() ) { return 0; } @@ -482,27 +485,27 @@ player_use_can_pack_now() //checked return 1; } -vending_machine_trigger_think() //changed 3/30/20 4:17 pm +vending_machine_trigger_think() //changed 3/30/20 4:17 pm //checked matches cerberus output { self endon("death"); self endon("Pack_A_Punch_off"); - while(1) + while( 1 ) { players = get_players(); - for(i = 0; i < players.size; i++) + 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); + self setinvisibletoplayer( players[ i ], 1 ); continue; } - self setinvisibletoplayer(players[i], 0); + self setinvisibletoplayer( players[ i ], 0 ); } - wait(0.1); + wait 0.1; } } -vending_weapon_upgrade() //changed +vending_weapon_upgrade() //checked matches cerberus output { level endon( "Pack_A_Punch_off" ); wait 0.01; @@ -683,7 +686,7 @@ vending_weapon_upgrade() //changed } } -shutoffpapsounds( ent1, ent2, ent3 ) //checked 3/30/20 4:18 pm +shutoffpapsounds( ent1, ent2, ent3 ) //checked matches cerberus output { while ( 1 ) { @@ -695,13 +698,13 @@ shutoffpapsounds( ent1, ent2, ent3 ) //checked 3/30/20 4:18 pm } } -turnonpapsounds( ent ) //checked 3/30/20 4:18 pm +turnonpapsounds( ent ) //checked 3/30/20 4:18 pm //checked matches cerberus output { level waittill( "Pack_A_Punch_on" ); ent playloopsound( "zmb_perks_packa_loop" ); } -vending_weapon_upgrade_cost() //checked 3/30/20 4:19 pm +vending_weapon_upgrade_cost() //checked 3/30/20 4:19 pm //checked matches cerberus output { level endon( "Pack_A_Punch_off" ); while ( 1 ) @@ -731,7 +734,7 @@ vending_weapon_upgrade_cost() //checked 3/30/20 4:19 pm } } -wait_for_player_to_take( player, weapon, packa_timer, upgrade_as_attachment ) //changed 3/30/20 4:22 pm +wait_for_player_to_take( player, weapon, packa_timer, upgrade_as_attachment ) //changed 3/30/20 4:22 pm //checked matches cerberus output { current_weapon = self.current_weapon; upgrade_name = self.upgrade_name; @@ -817,7 +820,7 @@ wait_for_player_to_take( player, weapon, packa_timer, upgrade_as_attachment ) // } } -wait_for_timeout( weapon, packa_timer, player ) //checked +wait_for_timeout( weapon, packa_timer, player ) //checked //checked matches cerberus output { self endon( "pap_taken" ); self endon( "pap_player_disconnected" ); @@ -834,7 +837,7 @@ wait_for_timeout( weapon, packa_timer, player ) //checked } } -wait_for_disconnect( player ) //checked +wait_for_disconnect( player ) //checked //checked matches cerberus output { self endon( "pap_taken" ); self endon( "pap_timeout" ); @@ -850,7 +853,7 @@ wait_for_disconnect( player ) //checked self notify( "pap_player_disconnected" ); } -destroy_weapon_on_disconnect( player ) //checked +destroy_weapon_on_disconnect( player ) //checked //checked matches cerberus output { self endon( "pap_timeout" ); self endon( "pap_taken" ); @@ -866,7 +869,7 @@ destroy_weapon_on_disconnect( player ) //checked } } -destroy_weapon_in_blackout( player ) //checked +destroy_weapon_in_blackout( player ) //checked //checked matches cerberus output { self endon( "pap_timeout" ); self endon( "pap_taken" ); @@ -885,7 +888,7 @@ destroy_weapon_in_blackout( player ) //checked } } -do_knuckle_crack() //checked +do_knuckle_crack() //checked //checked matches cerberus output { self endon( "disconnect" ); gun = self upgrade_knuckle_crack_begin(); @@ -893,7 +896,7 @@ do_knuckle_crack() //checked self upgrade_knuckle_crack_end( gun ); } -upgrade_knuckle_crack_begin() +upgrade_knuckle_crack_begin() //checked matches cerberus output { self increment_is_drinking(); self disable_player_move_states( 1 ); @@ -914,7 +917,7 @@ upgrade_knuckle_crack_begin() return gun; } -upgrade_knuckle_crack_end( gun ) //changed +upgrade_knuckle_crack_end( gun ) //changed //checked matches cerberus output { /* /# @@ -952,48 +955,42 @@ upgrade_knuckle_crack_end( gun ) //changed } } -turn_packapunch_on() +turn_packapunch_on() //checked changed to match cerberus output { vending_weapon_upgrade_trigger = getentarray( "specialty_weapupgrade", "script_noteworthy" ); level.pap_triggers = vending_weapon_upgrade_trigger; - i = 0; - while ( i < vending_weapon_upgrade_trigger.size ) + for ( i = 0; i < vending_weapon_upgrade_trigger.size; i++ ) { perk = getent( vending_weapon_upgrade_trigger[ i ].target, "targetname" ); if ( isDefined( perk ) ) { perk setmodel( level.machine_assets[ "packapunch" ].off_model ); } - i++; } for ( ;; ) { level waittill( "Pack_A_Punch_on" ); - i = 0; - while ( i < vending_weapon_upgrade_trigger.size ) + for ( i = 0; i < vending_weapon_upgrade_trigger.size; i++ ) { perk = getent( vending_weapon_upgrade_trigger[ i ].target, "targetname" ); if ( isDefined( perk ) ) { perk thread activate_packapunch(); } - i++; } level waittill( "Pack_A_Punch_off" ); - i = 0; - while ( i < vending_weapon_upgrade_trigger.size ) + for ( i = 0; i < vending_weapon_upgrade_trigger.size; i++ ) { perk = getent( vending_weapon_upgrade_trigger[ i ].target, "targetname" ); if ( isDefined( perk ) ) { perk thread deactivate_packapunch(); } - i++; } } } -activate_packapunch() +activate_packapunch() //checked matches cerberus output { self setmodel( level.machine_assets[ "packapunch" ].on_model ); self playsound( "zmb_perks_power_on" ); @@ -1002,12 +999,12 @@ activate_packapunch() duration = 0.05; } -deactivate_packapunch() +deactivate_packapunch() //checked matches cerberus output { self setmodel( level.machine_assets[ "packapunch" ].off_model ); } -do_initial_power_off_callback( machine_array, perkname ) +do_initial_power_off_callback( machine_array, perkname ) //checked matches cerberus output { if ( !isDefined( level.machine_assets[ perkname ] ) ) { @@ -1026,30 +1023,26 @@ do_initial_power_off_callback( machine_array, perkname ) array_thread( machine_array, level.machine_assets[ perkname ].power_off_callback ); } -turn_sleight_on() +turn_sleight_on() //checked changed to match cerberus output { while ( 1 ) { machine = getentarray( "vending_sleight", "targetname" ); machine_triggers = getentarray( "vending_sleight", "target" ); - i = 0; - while ( i < machine.size ) + for ( i = 0; i < machine.size; i++ ) { machine[ i ] setmodel( level.machine_assets[ "speedcola" ].off_model ); - i++; } level thread do_initial_power_off_callback( machine, "speedcola" ); array_thread( machine_triggers, ::set_power_on, 0 ); level waittill( "sleight_on" ); - i = 0; - while ( i < machine.size ) + for ( i = 0; i < machine.size; i++ ) { machine[ i ] setmodel( level.machine_assets[ "speedcola" ].on_model ); machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0.3, 0.4, 3 ); machine[ i ] playsound( "zmb_perks_power_on" ); machine[ i ] thread perk_fx( "sleight_light" ); machine[ i ] thread play_loop_on_machine(); - i++; } array_thread( machine_triggers, ::set_power_on, 1 ); if ( isDefined( level.machine_assets[ "speedcola" ].power_on_callback ) ) @@ -1066,7 +1059,7 @@ turn_sleight_on() } } -use_solo_revive() +use_solo_revive() //checked matches cerberus output { if ( isDefined( level.using_solo_revive ) ) { @@ -1082,7 +1075,7 @@ use_solo_revive() return solo_mode; } -turn_revive_on() +turn_revive_on() //checked partially changed to match cerberus output { level endon( "stop_quickrevive_logic" ); machine = getentarray( "vending_revive", "targetname" ); @@ -1106,8 +1099,7 @@ turn_revive_on() { machine = getentarray( "vending_revive", "targetname" ); machine_triggers = getentarray( "vending_revive", "target" ); - i = 0; - while ( i < machine.size ) + for ( i = 0; i < machine.size; i++ ) { if ( flag_exists( "solo_game" ) && flag_exists( "solo_revive" ) && flag( "solo_game" ) && flag( "solo_revive" ) ) { @@ -1124,7 +1116,6 @@ turn_revive_on() level.quick_revive_default_angles = machine[ i ].angles; } level.quick_revive_machine = machine[ i ]; - i++; } array_thread( machine_triggers, ::set_power_on, 0 ); if ( isDefined( start_state ) && !start_state ) @@ -1143,23 +1134,20 @@ turn_revive_on() i++; continue; } - else + machine[ i ] setmodel( level.machine_assets[ "revive" ].on_model ); + machine[ i ] playsound( "zmb_perks_power_on" ); + machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0.3, 0.4, 3 ); + machine_model = machine[ i ]; + machine[ i ] thread perk_fx( "revive_light" ); + machine[ i ] notify( "stop_loopsound" ); + machine[ i ] thread play_loop_on_machine(); + if ( isDefined( machine_triggers[ i ] ) ) { - machine[ i ] setmodel( level.machine_assets[ "revive" ].on_model ); - machine[ i ] playsound( "zmb_perks_power_on" ); - machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0.3, 0.4, 3 ); - machine_model = machine[ i ]; - machine[ i ] thread perk_fx( "revive_light" ); - machine[ i ] notify( "stop_loopsound" ); - machine[ i ] thread play_loop_on_machine(); - if ( isDefined( machine_triggers[ i ] ) ) - { - machine_clip = machine_triggers[ i ].clip; - } - if ( isDefined( machine_triggers[ i ] ) ) - { - blocker_model = machine_triggers[ i ].blocker_model; - } + machine_clip = machine_triggers[ i ].clip; + } + if ( isDefined( machine_triggers[ i ] ) ) + { + blocker_model = machine_triggers[ i ].blocker_model; } } i++; @@ -1189,19 +1177,17 @@ turn_revive_on() { array_thread( machine, level.machine_assets[ "revive" ].power_off_callback ); } - i = 0; - while ( i < machine.size ) + for ( i = 0; i < machine.size; i++ ) { if ( isDefined( machine[ i ].classname ) && machine[ i ].classname == "script_model" ) { machine[ i ] turn_perk_off( should_hide ); } - i++; } } } -revive_solo_fx( machine_clip, blocker_model ) +revive_solo_fx( machine_clip, blocker_model ) //checked matches cerberus output { if ( level flag_exists( "solo_revive" ) && flag( "solo_revive" ) && !flag( "solo_game" ) ) { @@ -1274,30 +1260,26 @@ revive_solo_fx( machine_clip, blocker_model ) level notify( "revive_hide" ); } -turn_jugger_on() +turn_jugger_on() //checked changed to match cerberus output { while ( 1 ) { machine = getentarray( "vending_jugg", "targetname" ); machine_triggers = getentarray( "vending_jugg", "target" ); - i = 0; - while ( i < machine.size ) + for ( i = 0; i < machine.size; i++ ) { machine[ i ] setmodel( level.machine_assets[ "juggernog" ].off_model ); - i++; } level thread do_initial_power_off_callback( machine, "juggernog" ); array_thread( machine_triggers, ::set_power_on, 0 ); level waittill( "juggernog_on" ); - i = 0; - while ( i < machine.size ) + for ( i = 0; i < machine.size; i++ ) { machine[ i ] setmodel( level.machine_assets[ "juggernog" ].on_model ); machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0.3, 0.4, 3 ); machine[ i ] playsound( "zmb_perks_power_on" ); machine[ i ] thread perk_fx( "jugger_light" ); machine[ i ] thread play_loop_on_machine(); - i++; } level notify( "specialty_armorvest_power_on" ); array_thread( machine_triggers, ::set_power_on, 1 ); @@ -1314,30 +1296,26 @@ turn_jugger_on() } } -turn_doubletap_on() +turn_doubletap_on() //checked changed to match cerberus output { while ( 1 ) { machine = getentarray( "vending_doubletap", "targetname" ); machine_triggers = getentarray( "vending_doubletap", "target" ); - i = 0; - while ( i < machine.size ) + for ( i = 0; i < machine.size; i++ ) { machine[ i ] setmodel( level.machine_assets[ "doubletap" ].off_model ); - i++; } level thread do_initial_power_off_callback( machine, "doubletap" ); array_thread( machine_triggers, ::set_power_on, 0 ); level waittill( "doubletap_on" ); - i = 0; - while ( i < machine.size ) + for ( i = 0; i < machine.size; i++ ) { machine[ i ] setmodel( level.machine_assets[ "doubletap" ].on_model ); machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0.3, 0.4, 3 ); machine[ i ] playsound( "zmb_perks_power_on" ); machine[ i ] thread perk_fx( "doubletap_light" ); machine[ i ] thread play_loop_on_machine(); - i++; } level notify( "specialty_rof_power_on" ); array_thread( machine_triggers, ::set_power_on, 1 ); @@ -1354,23 +1332,20 @@ turn_doubletap_on() } } -turn_marathon_on() +turn_marathon_on() //checked changed to match cerberus output { while ( 1 ) { machine = getentarray( "vending_marathon", "targetname" ); machine_triggers = getentarray( "vending_marathon", "target" ); - i = 0; - while ( i < machine.size ) + for ( i = 0; i < machine.size; i++ ) { machine[ i ] setmodel( level.machine_assets[ "marathon" ].off_model ); - i++; } array_thread( machine_triggers, ::set_power_on, 0 ); level thread do_initial_power_off_callback( machine, "marathon" ); level waittill( "marathon_on" ); - i = 0; - while ( i < machine.size ) + for ( i = 0; i < machine.size; i++ ) { machine[ i ] setmodel( level.machine_assets[ "marathon" ].on_model ); machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0.3, 0.4, 3 ); @@ -1394,30 +1369,26 @@ turn_marathon_on() } } -turn_deadshot_on() +turn_deadshot_on() //checked changed to match cerberus output { while ( 1 ) { machine = getentarray( "vending_deadshot_model", "targetname" ); machine_triggers = getentarray( "vending_deadshot", "target" ); - i = 0; - while ( i < machine.size ) + for ( i = 0; i < machine.size; i++ ) { machine[ i ] setmodel( level.machine_assets[ "deadshot" ].off_model ); - i++; } level thread do_initial_power_off_callback( machine, "deadshot" ); array_thread( machine_triggers, ::set_power_on, 0 ); level waittill( "deadshot_on" ); - i = 0; - while ( i < machine.size ) + for ( i = 0; i < machine.size; i++ ) { machine[ i ] setmodel( level.machine_assets[ "deadshot" ].on_model ); machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0.3, 0.4, 3 ); machine[ i ] playsound( "zmb_perks_power_on" ); machine[ i ] thread perk_fx( "deadshot_light" ); machine[ i ] thread play_loop_on_machine(); - i++; } level notify( "specialty_deadshot_power_on" ); array_thread( machine_triggers, ::set_power_on, 1 ); @@ -1434,31 +1405,27 @@ turn_deadshot_on() } } -turn_tombstone_on() +turn_tombstone_on() //checked changed to match cerberus output { level endon( "tombstone_removed" ); while ( 1 ) { machine = getentarray( "vending_tombstone", "targetname" ); machine_triggers = getentarray( "vending_tombstone", "target" ); - i = 0; - while ( i < machine.size ) + for ( i = 0; i < machine.size; i++ ) { machine[ i ] setmodel( level.machine_assets[ "tombstone" ].off_model ); - i++; } level thread do_initial_power_off_callback( machine, "tombstone" ); array_thread( machine_triggers, ::set_power_on, 0 ); level waittill( "tombstone_on" ); - i = 0; - while ( i < machine.size ) + for ( i = 0; i < machine.size; i++ ) { machine[ i ] setmodel( level.machine_assets[ "tombstone" ].on_model ); machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0.3, 0.4, 3 ); machine[ i ] playsound( "zmb_perks_power_on" ); machine[ i ] thread perk_fx( "tombstone_light" ); machine[ i ] thread play_loop_on_machine(); - i++; } level notify( "specialty_scavenger_power_on" ); array_thread( machine_triggers, ::set_power_on, 1 ); @@ -1473,41 +1440,33 @@ turn_tombstone_on() } array_thread( machine, ::turn_perk_off ); players = get_players(); - _a1718 = players; - _k1718 = getFirstArrayKey( _a1718 ); - while ( isDefined( _k1718 ) ) + foreach ( player in players ) { - player = _a1718[ _k1718 ]; player.hasperkspecialtytombstone = undefined; - _k1718 = getNextArrayKey( _a1718, _k1718 ); } } } -turn_additionalprimaryweapon_on() +turn_additionalprimaryweapon_on() //checked changed to match cerberus output { while ( 1 ) { machine = getentarray( "vending_additionalprimaryweapon", "targetname" ); machine_triggers = getentarray( "vending_additionalprimaryweapon", "target" ); - i = 0; - while ( i < machine.size ) + for ( i = 0; i < machine.size; i++ ) { machine[ i ] setmodel( level.machine_assets[ "additionalprimaryweapon" ].off_model ); - i++; } level thread do_initial_power_off_callback( machine, "additionalprimaryweapon" ); array_thread( machine_triggers, ::set_power_on, 0 ); level waittill( "additionalprimaryweapon_on" ); - i = 0; - while ( i < machine.size ) + for ( i = 0; i < machine.size; i++ ) { machine[ i ] setmodel( level.machine_assets[ "additionalprimaryweapon" ].on_model ); machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0.3, 0.4, 3 ); machine[ i ] playsound( "zmb_perks_power_on" ); machine[ i ] thread perk_fx( "additionalprimaryweapon_light" ); machine[ i ] thread play_loop_on_machine(); - i++; } level notify( "specialty_additionalprimaryweapon_power_on" ); array_thread( machine_triggers, ::set_power_on, 1 ); @@ -1524,7 +1483,7 @@ turn_additionalprimaryweapon_on() } } -turn_chugabud_on() +turn_chugabud_on() //checked changed to match cerberus output { maps/mp/zombies/_zm_chugabud::init(); if ( isDefined( level.vsmgr_prio_visionset_zm_whos_who ) ) @@ -1535,24 +1494,20 @@ turn_chugabud_on() { machine = getentarray( "vending_chugabud", "targetname" ); machine_triggers = getentarray( "vending_chugabud", "target" ); - i = 0; - while ( i < machine.size ) + for ( i = 0; i < machine.size; i++ ) { machine[ i ] setmodel( level.machine_assets[ "whoswho" ].off_model ); - i++; } level thread do_initial_power_off_callback( machine, "whoswho" ); array_thread( machine_triggers, ::set_power_on, 0 ); level waittill( "chugabud_on" ); - i = 0; - while ( i < machine.size ) + for ( i = 0; i < machine.size; i++ ) { machine[ i ] setmodel( level.machine_assets[ "whoswho" ].on_model ); machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0.3, 0.4, 3 ); machine[ i ] playsound( "zmb_perks_power_on" ); machine[ i ] thread perk_fx( "tombstone_light" ); machine[ i ] thread play_loop_on_machine(); - i++; } level notify( "specialty_finalstand_power_on" ); array_thread( machine_triggers, ::set_power_on, 1 ); @@ -1567,23 +1522,19 @@ turn_chugabud_on() } array_thread( machine, ::turn_perk_off ); players = get_players(); - _a1819 = players; - _k1819 = getFirstArrayKey( _a1819 ); - while ( isDefined( _k1819 ) ) + foreach ( player in players ) { - player = _a1819[ _k1819 ]; player.hasperkspecialtychugabud = undefined; - _k1819 = getNextArrayKey( _a1819, _k1819 ); } } } -set_power_on( state ) +set_power_on( state ) //checked matches cerberus output { self.power_on = state; } -turn_perk_off( ishidden ) +turn_perk_off( ishidden ) //checked matches cerberus output { self notify( "stop_loopsound" ); newmachine = spawn( "script_model", self.origin ); @@ -1597,7 +1548,7 @@ turn_perk_off( ishidden ) self delete(); } -play_loop_on_machine() +play_loop_on_machine() //checked matches cerberus output { if ( isDefined( level.sndperksacolaloopoverride ) ) { @@ -1611,7 +1562,7 @@ play_loop_on_machine() sound_ent delete(); } -perk_fx( fx, turnofffx ) +perk_fx( fx, turnofffx ) //checked matches cerberus output { if ( isDefined( turnofffx ) ) { @@ -1628,7 +1579,7 @@ perk_fx( fx, turnofffx ) } } -electric_perks_dialog() +electric_perks_dialog() //checked partially changed to match cerberus output { self endon( "death" ); wait 0.01; @@ -1672,24 +1623,21 @@ electric_perks_dialog() i++; continue; } - else - { - players[ i ] thread do_player_vo( "vox_start", 5 ); - wait 3; - self notify( "warning_dialog" ); - /* + players[ i ] thread do_player_vo( "vox_start", 5 ); + wait 3; + self notify( "warning_dialog" ); + /* /# - iprintlnbold( "warning_given" ); + iprintlnbold( "warning_given" ); #/ - */ - } + */ } i++; } } } -reset_vending_hint_string() +reset_vending_hint_string() //checked matches cerberus output { perk = self.script_noteworthy; solo = maps/mp/zombies/_zm_perks::use_solo_revive(); @@ -1750,7 +1698,7 @@ reset_vending_hint_string() } } -vending_trigger_think() //checked to a degree +vending_trigger_think() //checked changed to match cerberus output { self endon( "death" ); wait 0.01; @@ -1759,8 +1707,7 @@ vending_trigger_think() //checked to a degree start_on = 0; level.revive_machine_is_solo = 0; - //fixed - if( isdefined( perk ) && perk == "specialty_quickrevive" ) + if ( isdefined( perk ) && perk == "specialty_quickrevive" || perk == "specialty_quickrevive_upgrade" ) { flag_wait("start_zombie_round_logic"); solo = use_solo_revive(); @@ -1768,18 +1715,18 @@ vending_trigger_think() //checked to a degree level.quick_revive_trigger = self; if( solo ) { - if(!is_true(level.revive_machine_is_solo)) + if ( !is_true( level.revive_machine_is_solo ) ) { start_on = 1; players = get_players(); - foreach(player in players) + foreach ( player in players ) { - if(!isdefined(player.lives)) + if ( !isdefined( player.lives ) ) { player.lives = 0; } } - 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; } @@ -1845,11 +1792,9 @@ vending_trigger_think() //checked to a degree { level._perkmachinenetworkchoke++; } - i = 0; - while ( i < level._perkmachinenetworkchoke ) + for ( i = 0; i < level._perkmachinenetworkchoke; i++ ) { wait_network_frame(); - i++; } self thread maps/mp/zombies/_zm_audio::perks_a_cola_jingle_timer(); self thread check_player_has_perk( perk ); @@ -1908,35 +1853,72 @@ vending_trigger_think() //checked to a degree for ( ;; ) { self waittill( "trigger", player ); + if ( level.debugLogging_zm_perks ) + { + if ( !isDefined( player ) ) + { + logline10 = "_zm_perks.gsc vending_trigger_think() player is not defined for trigger!" + "\n"; + logprint( logline10 ); + } + } 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 ) { + if ( level.debugLogging_zm_perks ) + { + logline11 = "_zm_perks.gsc vending_trigger_think() player is in laststand or game is intermission; continue" + "\n"; + logprint( logline11 ); + } wait 0.1; continue; } - if ( player in_revive_trigger() ) { + if ( level.debugLogging_zm_perks ) + { + logline11 = "_zm_perks.gsc vending_trigger_think() player is in revive trigger; continue" + "\n"; + logprint( logline11 ); + } wait 0.1; continue; } if ( !player maps/mp/zombies/_zm_magicbox::can_buy_weapon() ) { + if ( level.debugLogging_zm_perks ) + { + logline12 = "_zm_perks.gsc vending_trigger_think() player is in revive trigger; continue" + "\n"; + logprint( logline12 ); + } wait 0.1; continue; } if ( player isthrowinggrenade() ) { + if ( level.debugLogging_zm_perks ) + { + logline13 = "_zm_perks.gsc vending_trigger_think() player is throwing grenade; continue" + "\n"; + logprint( logline13 ); + } wait 0.1; continue; } if ( player isswitchingweapons() ) { + if ( level.debugLogging_zm_perks ) + { + logline14 = "_zm_perks.gsc vending_trigger_think() player is switching weapons; continue" + "\n"; + logprint( logline14 ); + } wait 0.1; continue; } if ( player.is_drinking > 0 ) { + if ( level.debugLogging_zm_perks ) + { + logline15 = "_zm_perks.gsc vending_trigger_think() player is drinking; continue" + "\n"; + logprint( logline15 ); + } wait 0.1; continue; } @@ -1953,6 +1935,11 @@ vending_trigger_think() //checked to a degree */ if ( cheat != 1 ) { + if ( level.debugLogging_zm_perks ) + { + logline16 = "_zm_perks.gsc vending_trigger_think() player has perk; continue!" + "\n"; + logprint( logline16 ); + } self playsound( "deny" ); player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "perk_deny", undefined, 1 ); continue; @@ -1963,6 +1950,11 @@ vending_trigger_think() //checked to a degree valid = self [[ level.custom_perk_validation ]]( player ); if ( !valid ) { + if ( level.debugLogging_zm_perks ) + { + logline17 = "_zm_perks.gsc vending_trigger_think() [[ level.custom_perk_validation ]] determines player is not eligble for perk; continue" + "\n"; + logprint( logline17 ); + } continue; } } @@ -1973,6 +1965,11 @@ vending_trigger_think() //checked to a degree } if ( player.score < current_cost ) { + if ( level.debugLogging_zm_perks ) + { + logline18 = "_zm_perks.gsc vending_trigger_think() player does not have enough points for perk; continue" + "\n"; + logprint( logline18 ); + } self playsound( "evt_perk_deny" ); player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "perk_deny", undefined, 0 ); continue; @@ -1980,6 +1977,11 @@ vending_trigger_think() //checked to a degree if ( player.num_perks >= player get_player_perk_purchase_limit() ) { + if ( level.debugLogging_zm_perks ) + { + logline19 = "_zm_perks.gsc vending_trigger_think() player has reach their perk limit; continue" + "\n"; + logprint( logline19 ); + } self playsound( "evt_perk_deny" ); player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "sigh" ); continue; @@ -1993,17 +1995,38 @@ vending_trigger_think() //checked to a degree } } -vending_trigger_post_think( player, perk ) //something is broken here +vending_trigger_post_think( player, perk ) //checked matches cerberus output { player endon( "disconnect" ); player endon( "end_game" ); player endon( "perk_abort_drinking" ); gun = player perk_give_bottle_begin( perk ); + if ( level.debugLogging_zm_perks ) + { + logline29 = "_zm_perks.gsc vending_trigger_post_think(); perk_give_bottle_begin() completed its operation " + " \n"; + logprint( logline29 ); + } evt = player waittill_any_return( "fake_death", "death", "player_downed", "weapon_change_complete" ); + //evt = waittill( "weapon_change_complete" ); + if ( level.debugLogging_zm_perks ) + { + logline28 = "_zm_perks.gsc vending_trigger_post_think() finished waiting for event: " + evt + " \n"; + logprint( logline28 ); + } if ( evt == "weapon_change_complete" ) { + if ( level.debugLogging_zm_perks ) + { + logline26 = "_zm_perks.gsc vending_trigger_post_think() weapon_change_complete occured calling wait_give_perk() " + " \n"; + logprint( logline26 ); + } player thread wait_give_perk( perk, 1 ); } + if ( level.debugLogging_zm_perks ) + { + logline27 = "_zm_perks.gsc vending_trigger_post_think(); wait_give_perk() finished; calling perk_give_bottle_end() " + " \n"; + logprint( logline27 ); + } player perk_give_bottle_end( gun, perk ); if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( player.intermission ) && player.intermission ) { @@ -2031,21 +2054,17 @@ vending_trigger_post_think( player, perk ) //something is broken here bbprint( "zombie_uses", "playername %s playerscore %d round %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, perk, self.origin, "perk" ); } -solo_revive_buy_trigger_move( revive_trigger_noteworthy ) +solo_revive_buy_trigger_move( revive_trigger_noteworthy ) //checked changed to match cerberus output { self endon( "death" ); revive_perk_triggers = getentarray( revive_trigger_noteworthy, "script_noteworthy" ); - _a2384 = revive_perk_triggers; - _k2384 = getFirstArrayKey( _a2384 ); - while ( isDefined( _k2384 ) ) + foreach ( revive_perk_trigger in revive_perk_triggers ) { - revive_perk_trigger = _a2384[ _k2384 ]; self thread solo_revive_buy_trigger_move_trigger( revive_perk_trigger ); - _k2384 = getNextArrayKey( _a2384, _k2384 ); } } -solo_revive_buy_trigger_move_trigger( revive_perk_trigger ) +solo_revive_buy_trigger_move_trigger( revive_perk_trigger ) //checked matches cerberus output { self endon( "death" ); revive_perk_trigger setinvisibletoplayer( self ); @@ -2065,37 +2084,43 @@ solo_revive_buy_trigger_move_trigger( revive_perk_trigger ) revive_perk_trigger setvisibletoplayer( self ); } -wait_give_perk( perk, bought ) +wait_give_perk( perk, bought ) //checked matches cerberus output { self endon( "player_downed" ); self endon( "disconnect" ); self endon( "end_game" ); self endon( "perk_abort_drinking" ); self waittill_notify_or_timeout( "burp", 0.5 ); + if ( level.debugLogging_zm_perks ) + { + logline23 = "_zm_perks.gsc wait_give_perk() gives player a perk" + "\n"; + logprint( logline23 ); + } self give_perk( perk, bought ); } -return_retained_perks() +return_retained_perks() //checked changed to match cerberus output { - while ( isDefined( self._retain_perks_array ) ) + if ( isDefined( self._retain_perks_array ) ) { keys = getarraykeys( self._retain_perks_array ); - _a2445 = keys; - _k2445 = getFirstArrayKey( _a2445 ); - while ( isDefined( _k2445 ) ) + foreach ( perk in keys ) { - perk = _a2445[ _k2445 ]; - if ( isDefined( self._retain_perks_array[ perk ] ) && self._retain_perks_array[ perk ] ) + if ( isdefined( self._retain_perks_array[ perk ] ) && self._retain_perks_array[ perk ] ) { self give_perk( perk, 0 ); } - _k2445 = getNextArrayKey( _a2445, _k2445 ); } } } -give_perk( perk, bought ) +give_perk( perk, bought ) //checked changed to match cerberus output { + if ( level.debugLogging_zm_perks ) + { + logline24 = "_zm_perks.gsc give_perk() gives player perk: " + perk + " \n"; + logprint( logline24 ); + } self setperk( perk ); self.num_perks++; if ( isDefined( bought ) && bought ) @@ -2112,7 +2137,7 @@ give_perk( perk, bought ) self setblur( 4, 0.1 ); wait 0.1; self setblur( 0, 0.1 ); - self notify( "perk_bought" ); + self notify( "perk_bought", perk ); } self perk_set_max_health_if_jugg( perk, 1, 0 ); if ( isDefined( level.disable_deadshot_clientfield ) && !level.disable_deadshot_clientfield ) @@ -2121,12 +2146,9 @@ give_perk( perk, bought ) { self setclientfieldtoplayer( "deadshot_perk", 1 ); } - else + else if ( perk == "specialty_deadshot_upgrade" ) { - if ( perk == "specialty_deadshot_upgrade" ) - { - self setclientfieldtoplayer( "deadshot_perk", 1 ); - } + self setclientfieldtoplayer( "deadshot_perk", 1 ); } } if ( perk == "specialty_scavenger" ) @@ -2182,10 +2204,15 @@ give_perk( perk, bought ) } self.perks_active[ self.perks_active.size ] = perk; self notify( "perk_acquired" ); + if ( level.debugLogging_zm_perks ) + { + logline25 = "_zm_perks.gsc give_perk() calls perk_think" + " \n"; + logprint( logline25 ); + } self thread perk_think( perk ); } -perk_set_max_health_if_jugg( perk, set_premaxhealth, clamp_health_to_max_health ) +perk_set_max_health_if_jugg( perk, set_premaxhealth, clamp_health_to_max_health ) //checked matches cerberus output { max_total_health = undefined; if ( perk == "specialty_armorvest" ) @@ -2243,7 +2270,7 @@ perk_set_max_health_if_jugg( perk, set_premaxhealth, clamp_health_to_max_health } } -check_player_has_perk( perk ) +check_player_has_perk( perk ) //checked partially changed to match cerberus output { self endon( "death" ); /* @@ -2269,10 +2296,7 @@ check_player_has_perk( perk ) i++; continue; } - else - { - self setinvisibletoplayer( players[ i ], 1 ); - } + self setinvisibletoplayer( players[ i ], 1 ); } i++; } @@ -2280,7 +2304,7 @@ check_player_has_perk( perk ) } } -vending_set_hintstring( perk ) +vending_set_hintstring( perk ) //checked matches cerberus output { switch( perk ) { @@ -2290,7 +2314,7 @@ vending_set_hintstring( perk ) } } -perk_think( perk ) +perk_think( perk ) //checked changed to match cerberus output { /* /# @@ -2316,12 +2340,9 @@ perk_think( perk ) { return; } - else + else if ( isDefined( self._retain_perks_array ) && isDefined( self._retain_perks_array[ perk ] ) && self._retain_perks_array[ perk ] ) { - if ( isDefined( self._retain_perks_array ) && isDefined( self._retain_perks_array[ perk ] ) && self._retain_perks_array[ perk ] ) - { - return; - } + return; } } self unsetperk( perk ); @@ -2368,7 +2389,7 @@ perk_think( perk ) self notify( "perk_lost" ); } -set_perk_clientfield( perk, state ) +set_perk_clientfield( perk, state ) //checked matches cerberus output { switch( perk ) { @@ -2402,7 +2423,7 @@ set_perk_clientfield( perk, state ) case "specialty_finalstand": self setclientfieldtoplayer( "perk_chugabud", state ); break; - case default: + default: if ( isDefined( level._custom_perks[ perk ] ) && isDefined( level._custom_perks[ perk ].clientfield_set ) ) { self [[ level._custom_perks[ perk ].clientfield_set ]]( state ); @@ -2410,12 +2431,13 @@ set_perk_clientfield( perk, state ) } } -perk_hud_destroy( perk ) +perk_hud_destroy( perk ) //checked changed to match cerberus output { self.perk_hud[ perk ] destroy_hud(); + self.perk_hud[ perk ] = undefined; } -perk_hud_grey( perk, grey_on_off ) +perk_hud_grey( perk, grey_on_off ) //checked matches cerberus output { if ( grey_on_off ) { @@ -2427,7 +2449,7 @@ perk_hud_grey( perk, grey_on_off ) } } -perk_hud_flash() +perk_hud_flash() //checked matches cerberus output { self endon( "death" ); self.flash = 1; @@ -2438,7 +2460,7 @@ perk_hud_flash() self.flash = 0; } -perk_flash_audio( perk ) +perk_flash_audio( perk ) //checked matches cerberus output { alias = undefined; switch( perk ) @@ -2471,7 +2493,7 @@ perk_flash_audio( perk ) } } -perk_hud_start_flash( perk ) +perk_hud_start_flash( perk ) //checked does not match cerberus output did not change { if ( self hasperk( perk ) && isDefined( self.perk_hud ) ) { @@ -2487,7 +2509,7 @@ perk_hud_start_flash( perk ) } } -perk_hud_stop_flash( perk, taken ) +perk_hud_stop_flash( perk, taken ) //checked matches cerberus output { if ( self hasperk( perk ) && isDefined( self.perk_hud ) ) { @@ -2503,7 +2525,7 @@ perk_hud_stop_flash( perk, taken ) } } -perk_give_bottle_begin( perk ) +perk_give_bottle_begin( perk ) //checked matches cerberus output { self increment_is_drinking(); self disable_player_move_states( 1 ); @@ -2556,12 +2578,22 @@ perk_give_bottle_begin( perk ) { weapon = level._custom_perks[ perk ].perk_bottle; } + if ( level.debugLogging_zm_perks ) + { + logline20 = "_zm_perks.gsc perk_give_bottle_begin() gives perk bottle to player" + "\n"; + logprint( logline20 ); + } self giveweapon( weapon ); self switchtoweapon( weapon ); + if ( level.debugLogging_zm_perks ) + { + logline21 = "_zm_perks.gsc perk_give_bottle_begin() returns gun" + "\n"; + logprint( logline21 ); + } return gun; } -perk_give_bottle_end( gun, perk ) //changed +perk_give_bottle_end( gun, perk ) //checked matches cerberus output { self endon( "perk_abort_drinking" ); /* @@ -2651,15 +2683,20 @@ perk_give_bottle_end( gun, perk ) //changed self switchtoweapon( primaryweapons[ 0 ] ); } } - self waittill( "weapon_change_complete" ); //event doesn't occur because there is no notifier bug + self waittill( "weapon_change_complete" ); self decrement_is_drinking(); if ( !self maps/mp/zombies/_zm_laststand::player_is_in_laststand() && isDefined( self.intermission ) && !self.intermission ) { self decrement_is_drinking(); } + if ( level.debugLogging_zm_perks ) + { + logline22 = "_zm_perks.gsc perk_give_bottle_end() finishes returning gun to player" + "\n"; + logprint( logline22 ); + } } -perk_abort_drinking( post_delay ) +perk_abort_drinking( post_delay ) //checked matches cerberus output { if ( self.is_drinking ) { @@ -2673,7 +2710,7 @@ perk_abort_drinking( post_delay ) } } -give_random_perk() +give_random_perk() //checked partially changed to match cerberus output { random_perk = undefined; vending_triggers = getentarray( "zombie_vending", "targetname" ); @@ -2687,20 +2724,14 @@ give_random_perk() i++; continue; } - else + if ( perk == "specialty_weapupgrade" ) { - if ( perk == "specialty_weapupgrade" ) - { - i++; - continue; - } - else - { - if ( !self hasperk( perk ) && !self has_perk_paused( perk ) ) - { - perks[ perks.size ] = perk; - } - } + i++; + continue; + } + if ( !self hasperk( perk ) && !self has_perk_paused( perk ) ) + { + perks[ perks.size ] = perk; } i++; } @@ -2717,7 +2748,7 @@ give_random_perk() return random_perk; } -lose_random_perk() +lose_random_perk() //checked partially changed to match cerberus output { vending_triggers = getentarray( "zombie_vending", "targetname" ); perks = []; @@ -2730,12 +2761,9 @@ lose_random_perk() i++; continue; } - else + if ( self hasperk( perk ) || self has_perk_paused( perk ) ) { - if ( self hasperk( perk ) || self has_perk_paused( perk ) ) - { - perks[ perks.size ] = perk; - } + perks[ perks.size ] = perk; } i++; } @@ -2755,47 +2783,41 @@ lose_random_perk() update_perk_hud() { - while ( isDefined( self.perk_hud ) ) + if ( isDefined( self.perk_hud ) ) { keys = getarraykeys( self.perk_hud ); - i = 0; - while ( i < self.perk_hud.size ) + for ( i = 0; i < self.perk_hud.size; i++) { self.perk_hud[ keys[ i ] ].x = i * 30; - i++; } } } -quantum_bomb_give_nearest_perk_validation( position ) +quantum_bomb_give_nearest_perk_validation( position ) //checked changed to match cerberus output { vending_triggers = getentarray( "zombie_vending", "targetname" ); range_squared = 32400; - i = 0; - while ( i < vending_triggers.size ) + for ( i = 0; i < vending_triggers.size; i++ ) { if ( distancesquared( vending_triggers[ i ].origin, position ) < range_squared ) { return 1; } - i++; } return 0; } -quantum_bomb_give_nearest_perk_result( position ) +quantum_bomb_give_nearest_perk_result( position ) //checked partially changed to match cerberus output { [[ level.quantum_bomb_play_mystery_effect_func ]]( position ); vending_triggers = getentarray( "zombie_vending", "targetname" ); nearest = 0; - i = 1; - while ( i < vending_triggers.size ) + for ( i = 1; i < vending_triggers.size; i++ ) { if ( distancesquared( vending_triggers[ i ].origin, position ) < distancesquared( vending_triggers[ nearest ].origin, position ) ) { nearest = i; } - i++; } players = get_players(); perk = vending_triggers[ nearest ].script_noteworthy; @@ -2808,30 +2830,26 @@ quantum_bomb_give_nearest_perk_result( position ) i++; continue; } - else + if ( !player hasperk( perk ) && isDefined( player.perk_purchased ) && player.perk_purchased != perk && randomint( 5 ) ) { - if ( !player hasperk( perk ) && isDefined( player.perk_purchased ) && player.perk_purchased != perk && randomint( 5 ) ) + if ( player == self ) { - if ( player == self ) - { - self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "kill", "quant_good" ); - } - player give_perk( perk ); - player [[ level.quantum_bomb_play_player_effect_func ]](); + self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "kill", "quant_good" ); } + player give_perk( perk ); + player [[ level.quantum_bomb_play_player_effect_func ]](); } i++; } } -perk_pause( perk ) +perk_pause( perk ) //checked changed to match cerberus output { if ( perk == "Pack_A_Punch" || perk == "specialty_weapupgrade" ) { return; } - j = 0; - while ( j < get_players().size ) + for ( j = 0; j < get_players().size; j++ ) { player = get_players()[ j ]; if ( !isDefined( player.disabled_perks ) ) @@ -2868,11 +2886,10 @@ perk_pause( perk ) #/ */ } - j++; } } -perk_unpause( perk ) +perk_unpause( perk ) //checked changed to match cerberus output { if ( !isDefined( perk ) ) { @@ -2882,8 +2899,7 @@ perk_unpause( perk ) { return; } - j = 0; - while ( j < get_players().size ) + for ( j = 0; j < get_players().size; j++ ) { player = get_players()[ j ]; if ( isDefined( player.disabled_perks ) && isDefined( player.disabled_perks[ perk ] ) && player.disabled_perks[ perk ] ) @@ -2906,37 +2922,28 @@ perk_unpause( perk ) player thread [[ level._custom_perks[ perk ].player_thread_give ]](); } } - j++; } } -perk_pause_all_perks() +perk_pause_all_perks() //checked changed to match cerberus output { vending_triggers = getentarray( "zombie_vending", "targetname" ); - _a3378 = vending_triggers; - _k3378 = getFirstArrayKey( _a3378 ); - while ( isDefined( _k3378 ) ) + foreach ( trigger in vending_triggers ) { - trigger = _a3378[ _k3378 ]; maps/mp/zombies/_zm_perks::perk_pause( trigger.script_noteworthy ); - _k3378 = getNextArrayKey( _a3378, _k3378 ); } } -perk_unpause_all_perks() +perk_unpause_all_perks() //checked changed to match cerberus output { vending_triggers = getentarray( "zombie_vending", "targetname" ); - _a3388 = vending_triggers; - _k3388 = getFirstArrayKey( _a3388 ); - while ( isDefined( _k3388 ) ) + foreach ( trigger in vending_triggers ) { - trigger = _a3388[ _k3388 ]; maps/mp/zombies/_zm_perks::perk_unpause( trigger.script_noteworthy ); - _k3388 = getNextArrayKey( _a3388, _k3388 ); } } -has_perk_paused( perk ) +has_perk_paused( perk ) //checked matches cerberus output { if ( isDefined( self.disabled_perks ) && isDefined( self.disabled_perks[ perk ] ) && self.disabled_perks[ perk ] ) { @@ -2945,7 +2952,7 @@ has_perk_paused( perk ) return 0; } -getvendingmachinenotify() +getvendingmachinenotify() //checked matches cerberus output { if ( !isDefined( self ) ) { @@ -2994,68 +3001,50 @@ getvendingmachinenotify() return str_perk; } -perk_machine_removal( machine, replacement_model ) +perk_machine_removal( machine, replacement_model ) //checked changed to match cerberus output { - if ( !isDefined( machine ) ) + if ( !isdefined( machine ) ) { return; } trig = getent( machine, "script_noteworthy" ); machine_model = undefined; - if ( isDefined( trig ) ) + if ( isdefined( trig ) ) { trig notify( "warning_dialog" ); - while ( isDefined( trig.target ) ) + if ( isdefined( trig.target ) ) { parts = getentarray( trig.target, "targetname" ); - i = 0; - while ( i < parts.size ) + for ( i = 0; i < parts.size; i++ ) { - if ( isDefined( parts[ i ].classname ) && parts[ i ].classname == "script_model" ) + if ( isdefined( parts[ i ].classname ) && parts[ i ].classname == "script_model" ) { - machine_model = parts[ i ]; - i++; - continue; + machine_model = parts[i]; } - else + if ( isdefined( parts[ i ].script_noteworthy ) && parts[ i ].script_noteworthy == "clip" ) { - if ( parts[ i ].script_noteworthy ) - { - if ( isDefined( parts[ i ].script_noteworthy == "clip" ) ) - { - model_clip = parts[ i ]; - } - i++; - continue; - } - else - { - parts[ i ] delete(); - } + model_clip = parts[ i ]; } - i++; + parts[ i ] delete(); } } - if ( isDefined( replacement_model ) && isDefined( machine_model ) ) + else if ( isdefined( replacement_model ) && isdefined( machine_model ) ) { machine_model setmodel( replacement_model ); } - else + else if ( !isdefined( replacement_model ) && isdefined( machine_model ) ) { - if ( !isDefined( replacement_model ) && isDefined( machine_model ) ) + machine_model delete(); + if ( isdefined( model_clip ) ) { - machine_model delete(); - if ( isDefined( model_clip ) ) - { - model_clip delete(); - } - if ( isDefined( trig.clip ) ) - { - trig.clip delete(); - } + model_clip delete(); + } + if ( isdefined( trig.clip ) ) + { + trig.clip delete(); } } - if ( isDefined( trig.bump ) ) + if ( isdefined( trig.bump ) ) { trig.bump delete(); } @@ -3065,84 +3054,138 @@ 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 = []; - structs = getstructarray("zm_perk_machine", "targetname"); - _a3578 = structs; - _k3578 = getFirstArrayKey( _a3578 ); - while ( isDefined( _k3578 ) ) + if ( isdefined( level.override_perk_targetname ) ) { - struct = _a3578[ _k3578 ]; - if ( isDefined( struct.script_string ) ) + structs = getstructarray( level.override_perk_targetname, "targetname" ); + } + else + { + structs = getstructarray( "zm_perk_machine", "targetname" ); + } + if ( match_string == "zclassic_perks_rooftop" || match_string == "zclassic_perks_tomb" || match_string == "zstandard_perks_nuked" ) + { + if ( level.debugLogging_zm_perks ) { - tokens = strtok( struct.script_string, " " ); - _a3583 = tokens; - _k3583 = getFirstArrayKey( _a3583 ); - while ( isDefined( _k3583 ) ) + logline1 = "_zm_perks.gsc: perk_machine_spawn_init() uses default location " + "\n"; + logprint( logline1 ); + } + useDefaultLocation = 1; + } + if ( level.debugLogging_zm_perks ) + { + logline2 = "_zm_perks.gsc: perk_machine_spawn_init() found: " + structs.size + " zm_perk_machines" + " \n"; + logprint( logline2 ); + } + i = 0; + while ( i < structs.size ) + { + if ( isdefined( structs[ i ].script_string ) ) + { + tokens = strtok( structs[ i ].script_string, " " ); + if ( level.debugLogging_zm_perks ) { - token = _a3583[ _k3583 ]; - if ( token == match_string ) + logline3 = "_zm_perks.gsc: perk_machine_spawn_init() found: " + tokens.size + " match_strings" + " \n"; + logprint( logline3 ); + } + k = 0; + while ( k < tokens.size ) + { + if ( tokens[ k ] == match_string ) { - pos[ pos.size ] = struct; + if ( level.debugLogging_zm_perks ) + { + logline4 = "_zm_perks.gsc: perk_machine_spawn_init() found that token matches match_string, setting perk location to match_string location" + " \n"; + logprint( logline4 ); + } + pos[ pos.size ] = structs[ i ]; + k++; + } + else + { + if ( level.debugLogging_zm_perks ) + { + logline5 = "_zm_perks.gsc: perk_machine_spawn_init() found that token did not match match_string, skipping " + "\n"; + logprint( logline5 ); + } + //pos[ pos.size ] = structs[ i ]; + k++; } - _k3583 = getNextArrayKey( _a3583, _k3583 ); } } - else + else if ( isDefined( useDefaultLocation ) && useDefaultLocation ) { - pos[ pos.size ] = struct; + if ( level.debugLogging_zm_perks ) + { + logline6 = "_zm_perks.gsc: perk_machine_spawn_init() found that map only has one location, setting to match_string by default " + "\n"; + logprint( logline6 ); + } + pos[ pos.size ] = structs[ i ]; } - _k3578 = getNextArrayKey( _a3578, _k3578 ); + i++; } - - if(!IsDefined(pos) || pos.size == 0) + if ( !IsDefined( pos ) || pos.size == 0 ) { + if ( level.debugLogging_zm_perks ) + { + logline7 = "_zm_perks.gsc: perk_machine_spawn_init() returning because pos is undefined or pos.size is 0 " + "\n"; + logprint( logline7 ); + } return; } - 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++ ) + for ( i = 0; i < pos.size; i++ ) { - perk = pos[i].script_noteworthy; - if(IsDefined(perk) && IsDefined(pos[i].model)) + perk = pos[ i ].script_noteworthy; + if ( level.debugLogging_zm_perks ) { - use_trigger = Spawn( "trigger_radius_use", pos[i].origin + (0, 0, 30), 0, 40, 70 ); + logline8 = "_zm_perks.gsc: perk_machine_spawn_init() checking perk: " + perk + " \n"; + logprint( logline8 ); + } + if ( IsDefined( perk ) && IsDefined( pos[ i ].model ) ) + { + if ( level.debugLogging_zm_perks ) + { + logline9 = "_zm_perks.gsc: perk_machine_spawn_init() found perk and perk model; spawning in: " + perk + " \n"; + logprint( logline9 ); + } + 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(); //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); - - 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" ) + 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 ) { - bump_trigger thread thread_bump_trigger(); + bump_trigger = undefined; } - - collision = Spawn("script_model", pos[i].origin, 1); - collision.angles = pos[i].angles; - collision SetModel("zm_collision_perks1"); + 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.angles = pos[ i ].angles; + collision SetModel( "zm_collision_perks1" ); collision.script_noteworthy = "clip"; collision DisconnectPaths(); @@ -3150,7 +3193,19 @@ perk_machine_spawn_init() use_trigger.clip = collision; use_trigger.machine = perk_machine; use_trigger.bump = bump_trigger; - + //missing code found in cerberus output + 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 ) { case "specialty_quickrevive": @@ -3291,28 +3346,23 @@ perk_machine_spawn_init() bump_trigger.script_string = "deadshot_vending"; } break; - case default: - use_trigger.script_sound = "mus_perks_speed_jingle"; - use_trigger.script_string = "speedcola_perk"; - use_trigger.script_label = "mus_perks_speed_sting"; - use_trigger.target = "vending_sleight"; - perk_machine.script_string = "speedcola_perk"; - perk_machine.targetname = "vending_sleight"; - if ( isDefined( bump_trigger ) ) + default: + if ( isdefined( level._custom_perks[ perk ] ) && isdefined( level._custom_perks[ perk ].perk_machine_set_kvps ) ) { - bump_trigger.script_string = "speedcola_perk"; + [[ level._custom_perks[ perk ].perk_machine_set_kvps ]]( use_trigger, perk_machine, bump_trigger, collision ); + if ( level.debugLogging_zm_perks ) + { + logline30 = "_zm_perks.gsc: perk_machine_spawn_init() called level._custom_perks[ perk ].perk_machine_set_kvps on perk: " + perk + " \n"; + logprint( logline30 ); + } } 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); - } - } + } } -get_perk_machine_start_state( perk ) +get_perk_machine_start_state( perk ) //checked matches cerberus output { if ( isDefined( level.vending_machines_powered_on_at_start ) && level.vending_machines_powered_on_at_start ) { @@ -3320,17 +3370,12 @@ get_perk_machine_start_state( perk ) } if ( perk == "specialty_quickrevive" || perk == "specialty_quickrevive_upgrade" ) { - /* -/# - assert( isDefined( level.revive_machine_is_solo ) ); -#/ - */ return level.revive_machine_is_solo; } return 0; } -perks_register_clientfield() +perks_register_clientfield() //checked matches cerberus output { if ( isDefined( level.zombiemode_using_additionalprimaryweapon_perk ) && level.zombiemode_using_additionalprimaryweapon_perk ) { @@ -3372,20 +3417,20 @@ perks_register_clientfield() { registerclientfield( "toplayer", "perk_chugabud", 1000, 1, "int" ); } - if(isdefined(level._custom_perks)) + if ( isdefined( level._custom_perks ) ) { a_keys = getarraykeys(level._custom_perks); - for(i = 0; i < a_keys.size; i++) + 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 ]](); } } } } -thread_bump_trigger() +thread_bump_trigger() //checked matches cerberus output { for ( ;; ) { @@ -3398,7 +3443,7 @@ thread_bump_trigger() } } -reenable_quickrevive( machine_clip, solo_mode ) +reenable_quickrevive( machine_clip, solo_mode ) //checked changed to match cerberus output { if ( isDefined( level.revive_machine_spawned ) && !is_true( level.revive_machine_spawned ) ) { @@ -3411,23 +3456,16 @@ reenable_quickrevive( machine_clip, solo_mode ) power_state = 1; should_pause = 1; players = get_players(); - _a3918 = players; - _k3918 = getFirstArrayKey( _a3918 ); - while ( isDefined( _k3918 ) ) + foreach ( player in players ) { - player = _a3918[ _k3918 ]; - if ( isDefined( player.lives ) && player.lives > 0 && power_state ) + if ( isdefined( player.lives ) && player.lives > 0 && power_state ) { should_pause = 0; } - else + if ( isdefined( player.lives ) && player.lives < 1 ) { - if ( isDefined( player.lives ) && player.lives < 1 ) - { - should_pause = 1; - } + should_pause = 1; } - _k3918 = getNextArrayKey( _a3918, _k3918 ); } if ( should_pause ) { @@ -3484,37 +3522,30 @@ reenable_quickrevive( machine_clip, solo_mode ) } should_pause = 1; players = get_players(); - _a3996 = players; - _k3996 = getFirstArrayKey( _a3996 ); - while ( isDefined( _k3996 ) ) + foreach ( player in players ) { - player = _a3996[ _k3996 ]; if ( !is_player_valid( player ) ) { + continue; } - else if ( player hasperk( "specialty_quickrevive" ) ) + if ( player hasperk("specialty_quickrevive" ) ) { - if ( !isDefined( player.lives ) ) + if ( !isdefined( player.lives ) ) { player.lives = 0; } - if ( !isDefined( level.solo_lives_given ) ) + if ( !isdefined( level.solo_lives_given ) ) { level.solo_lives_given = 0; } level.solo_lives_given++; player.lives++; - if ( isDefined( player.lives ) && player.lives > 0 && power_state ) + if ( isdefined( player.lives ) && player.lives > 0 && power_state ) { should_pause = 0; - break; - } - else - { - should_pause = 1; } + should_pause = 1; } - _k3996 = getNextArrayKey( _a3996, _k3996 ); } if ( should_pause ) { @@ -3526,108 +3557,77 @@ reenable_quickrevive( machine_clip, solo_mode ) } } -update_quickrevive_power_state( poweron ) +update_quickrevive_power_state( poweron ) //checked matches cerberus output { - _a4034 = level.powered_items; - _k4034 = getFirstArrayKey( _a4034 ); - while ( isDefined( _k4034 ) ) + foreach ( item in level.powered_items ) { - item = _a4034[ _k4034 ]; - if ( isDefined( item.target ) && isDefined( item.target.script_noteworthy ) && item.target.script_noteworthy == "specialty_quickrevive" ) + if ( isdefined( item.target ) && isdefined( item.target.script_noteworthy ) && item.target.script_noteworthy == "specialty_quickrevive" ) { if ( item.power && !poweron ) { - if ( !isDefined( item.powered_count ) ) + if ( !isdefined( item.powered_count ) ) { item.powered_count = 0; } - else + else if ( item.powered_count > 0 ) { - if ( item.powered_count > 0 ) - { - item.powered_count--; - - } + item.powered_count--; } } - else + else if ( !item.power && poweron ) { - if ( !item.power && poweron ) + if ( !isdefined( item.powered_count ) ) { - if ( !isDefined( item.powered_count ) ) - { - item.powered_count = 0; - } - item.powered_count++; + item.powered_count = 0; } + item.powered_count++; } - if ( !isDefined( item.depowered_count ) ) + if ( !isdefined( item.depowered_count ) ) { item.depowered_count = 0; } item.power = poweron; } - _k4034 = getNextArrayKey( _a4034, _k4034 ); } } -restart_quickrevive() +restart_quickrevive() //checked changed to match cerberus output //changed at own discretion { triggers = getentarray( "zombie_vending", "targetname" ); - _a4074 = triggers; - _k4074 = getFirstArrayKey( _a4074 ); - while ( isDefined( _k4074 ) ) + foreach ( trigger in triggers ) { - trigger = _a4074[ _k4074 ]; - if ( !isDefined( trigger.script_noteworthy ) ) + if ( trigger.script_noteworthy == "specialty_quickrevive" || trigger.script_noteworthy == "specialty_quickrevive_upgrade" ) { + trigger notify( "stop_quickrevive_logic" ); + trigger thread vending_trigger_think(); + trigger trigger_on(); } - else - { - if ( trigger.script_noteworthy == "specialty_quickrevive" || trigger.script_noteworthy == "specialty_quickrevive_upgrade" ) - { - trigger notify( "stop_quickrevive_logic" ); - trigger thread vending_trigger_think(); - trigger trigger_on(); - } - } - _k4074 = getNextArrayKey( _a4074, _k4074 ); } } -disable_quickrevive( machine_clip ) +disable_quickrevive( machine_clip ) //checked changed to match cerberus output { if ( is_true( level.solo_revive_init ) && flag( "solo_revive" ) && isDefined( level.quick_revive_machine ) ) { triggers = getentarray( "zombie_vending", "targetname" ); - _a4096 = triggers; - _k4096 = getFirstArrayKey( _a4096 ); - while ( isDefined( _k4096 ) ) + foreach ( trigger in triggers ) { - trigger = _a4096[ _k4096 ]; - if ( !isDefined( trigger.script_noteworthy ) ) + if ( !isdefined( trigger.script_noteworthy ) ) { + continue; } - else + if ( trigger.script_noteworthy == "specialty_quickrevive" || trigger.script_noteworthy == "specialty_quickrevive_upgrade" ) { - if ( trigger.script_noteworthy == "specialty_quickrevive" || trigger.script_noteworthy == "specialty_quickrevive_upgrade" ) - { - trigger trigger_off(); - } + trigger trigger_off(); } - _k4096 = getNextArrayKey( _a4096, _k4096 ); } - _a4108 = level.powered_items; - _k4108 = getFirstArrayKey( _a4108 ); - while ( isDefined( _k4108 ) ) + foreach ( item in level.powered_items ) { - item = _a4108[ _k4108 ]; - if ( isDefined( item.target ) && isDefined( item.target.script_noteworthy ) && item.target.script_noteworthy == "specialty_quickrevive" ) + if ( isdefined( item.target ) && isdefined( item.target.script_noteworthy ) && item.target.script_noteworthy == "specialty_quickrevive" ) { item.power = 1; item.self_powered = 1; } - _k4108 = getNextArrayKey( _a4108, _k4108 ); } if ( isDefined( level.quick_revive_machine.original_pos ) ) { @@ -3676,7 +3676,7 @@ disable_quickrevive( machine_clip ) } } -unhide_quickrevive() +unhide_quickrevive() //checked matches cerberus output { while ( players_are_in_perk_area( level.quick_revive_machine ) ) { @@ -3751,7 +3751,7 @@ unhide_quickrevive() level.quick_revive_machine.ishidden = 0; } -players_are_in_perk_area( perk_machine ) +players_are_in_perk_area( perk_machine ) //checked changed to match cerberus output { perk_area_origin = level.quick_revive_default_origin; if ( isDefined( perk_machine._linked_ent ) ) @@ -3765,21 +3765,17 @@ players_are_in_perk_area( perk_machine ) in_area = 0; players = get_players(); dist_check = 9216; - _a4286 = players; - _k4286 = getFirstArrayKey( _a4286 ); - while ( isDefined( _k4286 ) ) + foreach ( player in players ) { - player = _a4286[ _k4286 ]; if ( distancesquared( player.origin, perk_area_origin ) < dist_check ) { return 1; } - _k4286 = getNextArrayKey( _a4286, _k4286 ); } return 0; } -perk_hostmigration() //changed level._custom_perks +perk_hostmigration() //checked changed to match cerberus output { level endon( "end_game" ); level notify( "perk_hostmigration" ); @@ -3796,129 +3792,93 @@ perk_hostmigration() //changed level._custom_perks sleight = getentarray( "vending_sleight", "targetname" ); revive = getentarray( "vending_revive", "targetname" ); chugabud = getentarray( "vending_chugabud", "targetname" ); - _a4321 = jug; - _k4321 = getFirstArrayKey( _a4321 ); - while ( isDefined( _k4321 ) ) + foreach ( perk in jug ) { - perk = _a4321[ _k4321 ]; - if ( isDefined( perk.model ) && perk.model == level.machine_assets[ "juggernog" ].on_model ) + if ( isdefined( perk.model ) && perk.model == level.machine_assets[ "juggernog" ].on_model ) { perk perk_fx( undefined, 1 ); perk thread perk_fx( "jugger_light" ); } - _k4321 = getNextArrayKey( _a4321, _k4321 ); } - _a4330 = tap; - _k4330 = getFirstArrayKey( _a4330 ); - while ( isDefined( _k4330 ) ) + foreach ( perk in tap ) { - perk = _a4330[ _k4330 ]; - if ( isDefined( perk.model ) && perk.model == level.machine_assets[ "doubletap" ].on_model ) + if ( isdefined( perk.model ) && perk.model == level.machine_assets[ "doubletap" ].on_model ) { - perk perk_fx( undefined, 1 ); - perk thread perk_fx( "doubletap_light" ); + perk perk_fx(undefined, 1); + perk thread perk_fx("doubletap_light"); } - _k4330 = getNextArrayKey( _a4330, _k4330 ); } - _a4339 = mar; - _k4339 = getFirstArrayKey( _a4339 ); - while ( isDefined( _k4339 ) ) + foreach ( perk in mar ) { - perk = _a4339[ _k4339 ]; - if ( isDefined( perk.model ) && perk.model == level.machine_assets[ "marathon" ].on_model ) + if ( isdefined( perk.model ) && perk.model == level.machine_assets[ "marathon" ].on_model ) { perk perk_fx( undefined, 1 ); perk thread perk_fx( "marathon_light" ); } - _k4339 = getNextArrayKey( _a4339, _k4339 ); } - _a4348 = deadshot; - _k4348 = getFirstArrayKey( _a4348 ); - while ( isDefined( _k4348 ) ) + foreach ( perk in deadshot ) { - perk = _a4348[ _k4348 ]; - if ( isDefined( perk.model ) && perk.model == level.machine_assets[ "deadshot" ].on_model ) + if ( isdefined( perk.model ) && perk.model == level.machine_assets[ "deadshot" ].on_model ) { perk perk_fx( undefined, 1 ); perk thread perk_fx( "deadshot_light" ); } - _k4348 = getNextArrayKey( _a4348, _k4348 ); } - _a4357 = tomb; - _k4357 = getFirstArrayKey( _a4357 ); - while ( isDefined( _k4357 ) ) + foreach ( perk in tomb ) { - perk = _a4357[ _k4357 ]; - if ( isDefined( perk.model ) && perk.model == level.machine_assets[ "tombstone" ].on_model ) + if ( isdefined( perk.model ) && perk.model == level.machine_assets[ "tombstone" ].on_model ) { perk perk_fx( undefined, 1 ); perk thread perk_fx( "tombstone_light" ); } - _k4357 = getNextArrayKey( _a4357, _k4357 ); } - _a4366 = extraweap; - _k4366 = getFirstArrayKey( _a4366 ); - while ( isDefined( _k4366 ) ) + foreach ( perk in extraweap ) { - perk = _a4366[ _k4366 ]; - if ( isDefined( perk.model ) && perk.model == level.machine_assets[ "additionalprimaryweapon" ].on_model ) + if ( isdefined( perk.model ) && perk.model == level.machine_assets[ "additionalprimaryweapon" ].on_model ) { perk perk_fx( undefined, 1 ); perk thread perk_fx( "additionalprimaryweapon_light" ); } - _k4366 = getNextArrayKey( _a4366, _k4366 ); } - _a4375 = sleight; - _k4375 = getFirstArrayKey( _a4375 ); - while ( isDefined( _k4375 ) ) + foreach(perk in sleight) { - perk = _a4375[ _k4375 ]; - if ( isDefined( perk.model ) && perk.model == level.machine_assets[ "speedcola" ].on_model ) + if ( isdefined( perk.model ) && perk.model == level.machine_assets[ "speedcola" ].on_model ) { perk perk_fx( undefined, 1 ); perk thread perk_fx( "sleight_light" ); } - _k4375 = getNextArrayKey( _a4375, _k4375 ); } - _a4384 = revive; - _k4384 = getFirstArrayKey( _a4384 ); - while ( isDefined( _k4384 ) ) + foreach ( perk in revive ) { - perk = _a4384[ _k4384 ]; - if ( isDefined( perk.model ) && perk.model == level.machine_assets[ "revive" ].on_model ) + if ( isdefined( perk.model ) && perk.model == level.machine_assets[ "revive" ].on_model ) { perk perk_fx( undefined, 1 ); perk thread perk_fx( "revive_light" ); } - _k4384 = getNextArrayKey( _a4384, _k4384 ); } - _a4393 = chugabud; - _k4393 = getFirstArrayKey( _a4393 ); - while ( isDefined( _k4393 ) ) + foreach ( perk in chugabud ) { - perk = _a4393[ _k4393 ]; - if ( isDefined( perk.model ) && perk.model == level.machine_assets[ "revive" ].on_model ) + if ( isdefined( perk.model ) && perk.model == level.machine_assets[ "revive" ].on_model ) { perk perk_fx( undefined, 1 ); perk thread perk_fx( "tombstone_light" ); } - _k4393 = getNextArrayKey( _a4393, _k4393 ); } - if(level._custom_perks.size > 0) + if ( level._custom_perks.size > 0 ) { - a_keys = getarraykeys(level._custom_perks); - for(i = 0; i < a_keys.size; i++) + 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 ]](); } } } } } -get_perk_array( ignore_chugabud ) //changed code relating to level._custom_perks +get_perk_array( ignore_chugabud ) //checked matches cerberus output { perk_array = []; if ( self hasperk( "specialty_armorvest" ) ) @@ -3960,21 +3920,21 @@ get_perk_array( ignore_chugabud ) //changed code relating to level._custom_perks perk_array[ perk_array.size ] = "specialty_finalstand"; } } - if(level._custom_perks.size > 0) + if ( level._custom_perks.size > 0 ) { - a_keys = getarraykeys(level._custom_perks); - for(i = 0; i < a_keys.size; i++) + 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 ]; } } } - return perk_array; + return perk_array; } -initialize_custom_perk_arrays() +initialize_custom_perk_arrays() //checked matches cerberus output { if ( !isDefined( level._custom_perks ) ) { @@ -3982,7 +3942,7 @@ initialize_custom_perk_arrays() } } -register_perk_basic_info( str_perk, str_alias, n_perk_cost, str_hint_string, str_perk_bottle_weapon ) +register_perk_basic_info( str_perk, str_alias, n_perk_cost, str_hint_string, str_perk_bottle_weapon ) //checked matches cerberus output { /* /# @@ -4008,7 +3968,7 @@ register_perk_basic_info( str_perk, str_alias, n_perk_cost, str_hint_string, str level._custom_perks[ str_perk ].perk_bottle = str_perk_bottle_weapon; } -register_perk_machine( str_perk, func_perk_machine_setup, func_perk_machine_thread ) +register_perk_machine( str_perk, func_perk_machine_setup, func_perk_machine_thread ) //checked matches cerberus output { /* /# @@ -4032,7 +3992,7 @@ register_perk_machine( str_perk, func_perk_machine_setup, func_perk_machine_thre } } -register_perk_precache_func( str_perk, func_precache ) +register_perk_precache_func( str_perk, func_precache ) //checked matches cerberus output { /* /# @@ -4049,7 +4009,7 @@ register_perk_precache_func( str_perk, func_precache ) } } -register_perk_threads( str_perk, func_give_player_perk, func_take_player_perk ) +register_perk_threads( str_perk, func_give_player_perk, func_take_player_perk ) //checked matches cerberus output { /* /# @@ -4073,7 +4033,7 @@ register_perk_threads( str_perk, func_give_player_perk, func_take_player_perk ) } } -register_perk_clientfields( str_perk, func_clientfield_register, func_clientfield_set ) +register_perk_clientfields( str_perk, func_clientfield_register, func_clientfield_set ) //checked matches cerberus output { /* /# @@ -4097,7 +4057,7 @@ register_perk_clientfields( str_perk, func_clientfield_register, func_clientfiel } } -register_perk_host_migration_func( str_perk, func_host_migration ) +register_perk_host_migration_func( str_perk, func_host_migration ) //checked matches cerberus output { /* /# @@ -4114,7 +4074,7 @@ register_perk_host_migration_func( str_perk, func_host_migration ) } } -_register_undefined_perk( str_perk ) +_register_undefined_perk( str_perk ) //checked matches cerberus output { if ( !isDefined( level._custom_perks ) ) { @@ -4132,3 +4092,9 @@ _register_undefined_perk( str_perk ) + + + + + + diff --git a/patch_zm/maps/mp/zombies/_zm_weapons.gsc b/patch_zm/maps/mp/zombies/_zm_weapons.gsc index 3be55fc..adf2807 100644 --- a/patch_zm/maps/mp/zombies/_zm_weapons.gsc +++ b/patch_zm/maps/mp/zombies/_zm_weapons.gsc @@ -5,6 +5,7 @@ #include maps/mp/zombies/_zm_score; #include maps/mp/zombies/_zm_pers_upgrades_functions; #include maps/mp/zombies/_zm_melee_weapon; +#include maps/mp/zombies/_zm_unitrigger; #include maps/mp/zombies/_zm_audio; #include maps/mp/gametypes_zm/_weapons; #include maps/mp/gametypes_zm/_weaponobjects; @@ -16,14 +17,16 @@ #include maps/mp/zombies/_zm_weap_ballistic_knife; -init() +init() //checked matches cerberus output { -/* -/# - println( "ZM >> init (_zm_weapons.gsc)" ); -#/ -*/ - + //begin debug + level.custom_zm_weapons_loaded = 1; + maps/mp/zombies/_zm_bot::init(); + if ( !isDefined( level.debugLogging_zm_weapons ) ) + { + level.debugLogging_zm_weapons = 0; + } + //end debug init_weapons(); init_weapon_upgrade(); init_weapon_toggle(); @@ -39,12 +42,12 @@ init() } -setupretrievablehintstrings() +setupretrievablehintstrings() //checked matches cerberus output { maps/mp/gametypes_zm/_weaponobjects::createretrievablehint( "claymore", &"ZOMBIE_CLAYMORE_PICKUP" ); } -onplayerconnect() +onplayerconnect() //checked matches cerberus output { for ( ;; ) { @@ -53,7 +56,7 @@ onplayerconnect() } } -onplayerspawned() +onplayerspawned() //checked matches cerberus output { self endon( "disconnect" ); for ( ;; ) @@ -65,7 +68,7 @@ onplayerspawned() } } -watchforgrenadeduds() +watchforgrenadeduds() //checked matches cerberus output { self endon( "spawned_player" ); self endon( "disconnect" ); @@ -80,7 +83,7 @@ watchforgrenadeduds() } } -watchforgrenadelauncherduds() +watchforgrenadelauncherduds() //checked matches cerberus output { self endon( "spawned_player" ); self endon( "disconnect" ); @@ -92,7 +95,7 @@ watchforgrenadelauncherduds() } } -grenade_safe_to_throw( player, weapname ) +grenade_safe_to_throw( player, weapname ) //checked matches cerberus output { if ( isDefined( level.grenade_safe_to_throw ) ) { @@ -101,7 +104,7 @@ grenade_safe_to_throw( player, weapname ) return 1; } -grenade_safe_to_bounce( player, weapname ) +grenade_safe_to_bounce( player, weapname ) //checked matches cerberus output { if ( isDefined( level.grenade_safe_to_bounce ) ) { @@ -110,7 +113,7 @@ grenade_safe_to_bounce( player, weapname ) return 1; } -makegrenadedudanddestroy() +makegrenadedudanddestroy() //checked matches cerberus output { self endon( "death" ); self notify( "grenade_dud" ); @@ -122,7 +125,7 @@ makegrenadedudanddestroy() } } -checkgrenadefordud( weapname, isthrowngrenade, player ) +checkgrenadefordud( weapname, isthrowngrenade, player ) //checked matches cerberus output { self endon( "death" ); player endon( "zombify" ); @@ -142,7 +145,7 @@ checkgrenadefordud( weapname, isthrowngrenade, player ) } } -wait_explode() +wait_explode() //checked matches cerberus output { self endon( "grenade_dud" ); self endon( "done" ); @@ -152,7 +155,7 @@ wait_explode() self notify( "done" ); } -wait_timeout( time ) +wait_timeout( time ) //checked matches cerberus output { self endon( "grenade_dud" ); self endon( "done" ); @@ -160,17 +163,17 @@ wait_timeout( time ) self notify( "done" ); } -wait_for_explosion( time ) +wait_for_explosion( time ) //checked changed to match cerberus output { level.explode_position = ( 0, 0, 0 ); level.explode_position_valid = 0; self thread wait_explode(); self thread wait_timeout( time ); self waittill( "done" ); - self notify( "death_or_explode" ); + self notify( "death_or_explode", level.explode_position_valid, level.explode_position ); } -watchforscriptexplosion( weapname, isthrowngrenade, player ) +watchforscriptexplosion( weapname, isthrowngrenade, player ) //checked changed to match cerberus output { self endon( "grenade_dud" ); if ( is_lethal_grenade( weapname ) || is_grenade_launcher( weapname ) ) @@ -179,34 +182,27 @@ watchforscriptexplosion( weapname, isthrowngrenade, player ) self waittill( "death_or_explode", exploded, position ); if ( exploded ) { - level notify( "grenade_exploded" ); + level notify( "grenade_exploded", position, 256, 300, 75 ); } } } -get_nonalternate_weapon( altweapon ) +get_nonalternate_weapon( altweapon ) //checked changed to match cerberus output { if ( is_alt_weapon( altweapon ) ) { alt = weaponaltweaponname( altweapon ); - while ( alt == "none" ) + if ( alt == "none" ) { primaryweapons = self getweaponslistprimaries(); alt = primaryweapons[ 0 ]; - _a201 = primaryweapons; - _k201 = getFirstArrayKey( _a201 ); - while ( isDefined( _k201 ) ) + foreach ( weapon in primaryweapons ) { - weapon = _a201[ _k201 ]; if ( weaponaltweaponname( weapon ) == altweapon ) { alt = weapon; break; } - else - { - _k201 = getNextArrayKey( _a201, _k201 ); - } } } return alt; @@ -214,29 +210,22 @@ get_nonalternate_weapon( altweapon ) return altweapon; } -switch_from_alt_weapon( current_weapon ) +switch_from_alt_weapon( current_weapon ) //checked changed to match cerberus output { if ( is_alt_weapon( current_weapon ) ) { alt = weaponaltweaponname( current_weapon ); - while ( alt == "none" ) + if ( alt == "none" ) { primaryweapons = self getweaponslistprimaries(); alt = primaryweapons[ 0 ]; - _a227 = primaryweapons; - _k227 = getFirstArrayKey( _a227 ); - while ( isDefined( _k227 ) ) + foreach ( weapon in primaryweapons ) { - weapon = _a227[ _k227 ]; if ( weaponaltweaponname( weapon ) == current_weapon ) { alt = weapon; break; } - else - { - _k227 = getNextArrayKey( _a227, _k227 ); - } } } self switchtoweaponimmediate( alt ); @@ -246,13 +235,13 @@ switch_from_alt_weapon( current_weapon ) return current_weapon; } -give_fallback_weapon() +give_fallback_weapon() //checked matches cerberus output { self giveweapon( "zombie_fists_zm" ); self switchtoweapon( "zombie_fists_zm" ); } -take_fallback_weapon() +take_fallback_weapon() //checked matches cerberus output { if ( self hasweapon( "zombie_fists_zm" ) ) { @@ -260,7 +249,7 @@ take_fallback_weapon() } } -switch_back_primary_weapon( oldprimary ) +switch_back_primary_weapon( oldprimary ) //checked changed to match cerberus output { if ( isDefined( self.laststand ) && self.laststand ) { @@ -271,16 +260,13 @@ switch_back_primary_weapon( oldprimary ) { self switchtoweapon( oldprimary ); } - else + else if ( isDefined( primaryweapons ) && primaryweapons.size > 0 ) { - if ( isDefined( primaryweapons ) && primaryweapons.size > 0 ) - { - self switchtoweapon( primaryweapons[ 0 ] ); - } + self switchtoweapon( primaryweapons[ 0 ] ); } } -add_retrievable_knife_init_name( name ) +add_retrievable_knife_init_name( name ) //checked matches cerberus output { if ( !isDefined( level.retrievable_knife_init_names ) ) { @@ -289,7 +275,7 @@ add_retrievable_knife_init_name( name ) level.retrievable_knife_init_names[ level.retrievable_knife_init_names.size ] = name; } -watchweaponusagezm() +watchweaponusagezm() //checked changed to match cerberus output { self endon( "death" ); self endon( "disconnect" ); @@ -341,7 +327,6 @@ watchweaponusagezm() case "mp40_blinged_mp": self.usedkillstreakweapon[ curweapon ] = 1; break; - continue; default: } @@ -349,7 +334,7 @@ watchweaponusagezm() } } -trackweaponzm() +trackweaponzm() //checked changed to match cerberus output { self.currentweapon = self getcurrentweapon(); self.currenttime = getTime(); @@ -367,20 +352,16 @@ trackweaponzm() self.currentweapon = newweapon; self.currenttime = newtime; } - continue; } - else + if ( event != "disconnect" ) { - if ( event != "disconnect" ) - { - updateweapontimingszm( newtime ); - } - return; + updateweapontimingszm( newtime ); } + //return; //changed at own discretion } } -updatelastheldweapontimingszm( newtime ) +updatelastheldweapontimingszm( newtime ) //checked matches cerberus output { if ( isDefined( self.currentweapon ) && isDefined( self.currenttime ) ) { @@ -397,7 +378,7 @@ updatelastheldweapontimingszm( newtime ) } } -updateweapontimingszm( newtime ) +updateweapontimingszm( newtime ) //checked matches cerberus output { if ( self is_bot() ) { @@ -416,7 +397,7 @@ updateweapontimingszm( newtime ) self.staticweaponsstarttime = newtime; } -watchweaponchangezm() +watchweaponchangezm() //checked matches cerberus output { self endon( "death" ); self endon( "disconnect" ); @@ -445,15 +426,13 @@ watchweaponchangezm() } } -weaponobjects_on_player_connect_override_internal() +weaponobjects_on_player_connect_override_internal() //checked changed to match cerberus output { self maps/mp/gametypes_zm/_weaponobjects::createbasewatchers(); self createclaymorewatcher_zm(); - i = 0; - while ( i < level.retrievable_knife_init_names.size ) + for ( i = 0; i < level.retrievable_knife_init_names.size; i++ ) { self createballisticknifewatcher_zm( level.retrievable_knife_init_names[ i ], level.retrievable_knife_init_names[ i ] + "_zm" ); - i++; } self maps/mp/gametypes_zm/_weaponobjects::setupretrievablewatcher(); if ( !isDefined( self.weaponobjectwatcherarray ) ) @@ -475,18 +454,18 @@ weaponobjects_on_player_connect_override_internal() self notify( "weapon_watchers_created" ); } -weaponobjects_on_player_connect_override() +weaponobjects_on_player_connect_override() //checked matches cerberus output { add_retrievable_knife_init_name( "knife_ballistic" ); add_retrievable_knife_init_name( "knife_ballistic_upgraded" ); onplayerconnect_callback( ::weaponobjects_on_player_connect_override_internal ); } -createclaymorewatcher_zm() +createclaymorewatcher_zm() //checked changed to match cerberus output { watcher = self maps/mp/gametypes_zm/_weaponobjects::createuseweaponobjectwatcher( "claymore", "claymore_zm", self.team ); - watcher.onspawnretrievetriggers = ::on_spawn_retrieve_trigger; - watcher.adjusttriggerorigin = ::adjust_trigger_origin; + watcher.onspawnretrievetriggers = maps/mp/zombies/_zm_weap_claymore::on_spawn_retrieve_trigger; + watcher.adjusttriggerorigin = maps/mp/zombies/_zm_weap_claymore::adjust_trigger_origin; watcher.pickup = level.pickup_claymores; watcher.pickup_trigger_listener = level.pickup_claymores_trigger_listener; watcher.skip_weapon_object_damage = 1; @@ -496,25 +475,25 @@ createclaymorewatcher_zm() watcher.ondamage = level.claymores_on_damage; } -createballisticknifewatcher_zm( name, weapon ) +createballisticknifewatcher_zm( name, weapon ) //checked changed to match cerberus output { watcher = self maps/mp/gametypes_zm/_weaponobjects::createuseweaponobjectwatcher( name, weapon, self.team ); - watcher.onspawn = ::on_spawn; - watcher.onspawnretrievetriggers = ::on_spawn_retrieve_trigger; + watcher.onspawn = maps/mp/zombies/_zm_weap_ballistic_knife::on_spawn; + watcher.onspawnretrievetriggers = maps/mp/zombies/_zm_weap_ballistic_knife::on_spawn_retrieve_trigger; watcher.storedifferentobject = 1; watcher.headicon = 0; } -isempweapon( weaponname ) +isempweapon( weaponname ) //checked changed at own discretion { - if ( isDefined( weaponname ) && weaponname != "emp_mp" || weaponname == "emp_grenade_mp" && weaponname == "emp_grenade_zm" ) + if ( isDefined( weaponname ) && weaponname == "emp_grenade_zm" ) { return 1; } return 0; } -claymoredetonate( attacker, weaponname ) +claymoredetonate( attacker, weaponname ) //checked matches cerberus output { from_emp = isempweapon( weaponname ); if ( from_emp ) @@ -536,12 +515,12 @@ claymoredetonate( attacker, weaponname ) } } -default_check_firesale_loc_valid_func() +default_check_firesale_loc_valid_func() //checked matches cerberus output { return 1; } -add_zombie_weapon( weapon_name, upgrade_name, hint, cost, weaponvo, weaponvoresp, ammo_cost, create_vox ) +add_zombie_weapon( weapon_name, upgrade_name, hint, cost, weaponvo, weaponvoresp, ammo_cost, create_vox ) //checked matches cerberus output { if ( isDefined( level.zombie_include_weapons ) && !isDefined( level.zombie_include_weapons[ weapon_name ] ) ) { @@ -572,6 +551,7 @@ add_zombie_weapon( weapon_name, upgrade_name, hint, cost, weaponvo, weaponvoresp { level.zombie_weapons_upgraded[ upgrade_name ] = weapon_name; } + struct.weapon_name = weapon_name; struct.upgrade_name = upgrade_name; struct.weapon_classname = "weapon_" + weapon_name; @@ -579,17 +559,14 @@ add_zombie_weapon( weapon_name, upgrade_name, hint, cost, weaponvo, weaponvoresp struct.cost = cost; struct.vox = weaponvo; struct.vox_response = weaponvoresp; - /* -/# - println( "ZM >> Looking for weapon - " + weapon_name ); -#/ - */ struct.is_in_box = level.zombie_include_weapons[ weapon_name ]; if ( !isDefined( ammo_cost ) ) { ammo_cost = round_up_to_ten( int( cost * 0.5 ) ); } struct.ammo_cost = ammo_cost; + + level.zombie_weapons[ weapon_name ] = struct; if ( isDefined( level.zombiemode_reusing_pack_a_punch ) && level.zombiemode_reusing_pack_a_punch && isDefined( upgrade_name ) ) { @@ -599,17 +576,9 @@ add_zombie_weapon( weapon_name, upgrade_name, hint, cost, weaponvo, weaponvoresp { level.vox maps/mp/zombies/_zm_audio::zmbvoxadd( "player", "weapon_pickup", weapon_name, weaponvo, undefined ); } - /* -/# - if ( isDefined( level.devgui_add_weapon ) ) - { - [[ level.devgui_add_weapon ]]( weapon_name, upgrade_name, hint, cost, weaponvo, weaponvoresp, ammo_cost ); -#/ - } - */ } -add_attachments( weapon_name, upgrade_name ) +add_attachments( weapon_name, upgrade_name ) //checked does not match cerberus output did not change { table = "zm/pap_attach.csv"; if ( isDefined( level.weapon_attachment_table ) ) @@ -617,27 +586,28 @@ add_attachments( weapon_name, upgrade_name ) table = level.weapon_attachment_table; } row = tablelookuprownum( table, 0, upgrade_name ); - while ( row > -1 ) + if ( row > -1 ) { - level.zombie_weapons[ weapon_name ].default_attachment = tablelookup( table, 0, upgrade_name, 1 ); - level.zombie_weapons[ weapon_name ].addon_attachments = []; + level.zombie_weapons[weapon].default_attachment = TableLookUp( table, 0, upgrade.name, 1 ); + level.zombie_weapons[weapon].addon_attachments = []; index = 2; - next_addon = tablelookup( table, 0, upgrade_name, index ); - while ( isDefined( next_addon ) && next_addon.size > 0 ) + next_addon = TableLookUp( table, 0, upgrade.name, index ); + + while ( isdefined( next_addon ) && next_addon.size > 0 ) { - level.zombie_weapons[ weapon_name ].addon_attachments[ level.zombie_weapons[ weapon_name ].addon_attachments.size ] = next_addon; + level.zombie_weapons[weapon].addon_attachments[level.zombie_weapons[weapon].addon_attachments.size] = next_addon; index++; - next_addon = tablelookup( table, 0, upgrade_name, index ); + next_addon = TableLookUp( table, 0, upgrade.name, index ); } } } -default_weighting_func() +default_weighting_func() //checked matches cerberus output { return 1; } -default_tesla_weighting_func() +default_tesla_weighting_func() //checked changed to match cerberus output { num_to_add = 1; if ( isDefined( level.pulls_since_last_tesla_gun ) ) @@ -652,19 +622,16 @@ default_tesla_weighting_func() { num_to_add += int( 0.2 * level.zombie_include_weapons.size ); } - else + else if ( level.round_number > 5 ) { - if ( level.round_number > 5 ) - { - num_to_add += int( 0.15 * level.zombie_include_weapons.size ); - } + num_to_add += int( 0.15 * level.zombie_include_weapons.size ); } } } return num_to_add; } -default_1st_move_weighting_func() +default_1st_move_weighting_func() //checked matches cerberus output { if ( level.chest_moves > 0 ) { @@ -677,7 +644,7 @@ default_1st_move_weighting_func() } } -default_upgrade_weapon_weighting_func() +default_upgrade_weapon_weighting_func() //checked matches cerberus output { if ( level.chest_moves > 1 ) { @@ -689,37 +656,32 @@ default_upgrade_weapon_weighting_func() } } -default_cymbal_monkey_weighting_func() +default_cymbal_monkey_weighting_func() //checked changed to match cerberus output { players = get_players(); count = 0; - i = 0; - while ( i < players.size ) + for ( i = 0; i < players.size; i++ ) { if ( players[ i ] has_weapon_or_upgrade( "cymbal_monkey_zm" ) ) { count++; } - i++; } if ( count > 0 ) { return 1; } + else if ( level.round_number < 10 ) + { + return 3; + } else { - if ( level.round_number < 10 ) - { - return 3; - } - else - { - return 5; - } + return 5; } } -is_weapon_included( weapon_name ) +is_weapon_included( weapon_name ) //checked matches cerberus output { if ( !isDefined( level.zombie_weapons ) ) { @@ -728,7 +690,7 @@ is_weapon_included( weapon_name ) return isDefined( level.zombie_weapons[ weapon_name ] ); } -is_weapon_or_base_included( weapon_name ) +is_weapon_or_base_included( weapon_name ) //checked matches cerberus output { if ( !isDefined( level.zombie_weapons ) ) { @@ -746,7 +708,7 @@ is_weapon_or_base_included( weapon_name ) return 0; } -include_zombie_weapon( weapon_name, in_box, collector, weighting_func ) +include_zombie_weapon( weapon_name, in_box, collector, weighting_func ) //checked matches cerberus output { if ( !isDefined( level.zombie_include_weapons ) ) { @@ -756,11 +718,7 @@ include_zombie_weapon( weapon_name, in_box, collector, weighting_func ) { in_box = 1; } - /* -/# - println( "ZM >> Including weapon - " + weapon_name ); -#/ - */ + level.zombie_include_weapons[ weapon_name ] = in_box; precacheitem( weapon_name ); if ( !isDefined( weighting_func ) ) @@ -773,18 +731,23 @@ include_zombie_weapon( weapon_name, in_box, collector, weighting_func ) } } -init_weapons() +init_weapons() //checked matches cerberus output { //throws exe_client_field_mismatch on join //or the server won't rotate to the map - if ( isDefined( level._zombie_custom_add_weapons ) ) + if ( isdefined( level._zombie_custom_add_weapons ) ) { - //[[ level._zombie_custom_add_weapons ]](); + [[ level._zombie_custom_add_weapons ]](); } precachemodel( "zombie_teddybear" ); + if ( level.debugLogging_zm_weapons ) + { + logline1 = "_zm_weapons.gsc init_weapons() completed its operation" + "\n"; + logprint( logline1 ); + } } -add_limited_weapon( weapon_name, amount ) +add_limited_weapon( weapon_name, amount ) //checked matches cerberus output { if ( !isDefined( level.limited_weapons ) ) { @@ -793,16 +756,17 @@ add_limited_weapon( weapon_name, amount ) level.limited_weapons[ weapon_name ] = amount; } -limited_weapon_below_quota( weapon, ignore_player, pap_triggers ) +limited_weapon_below_quota( weapon, ignore_player, pap_triggers ) //checked changed to match cerberus output { - while ( isDefined( level.limited_weapons[ weapon ] ) ) + + if ( isDefined( level.limited_weapons[ weapon ] ) ) { + if ( !isDefined( pap_triggers ) ) { if ( !isDefined( level.pap_triggers ) ) { pap_triggers = getentarray( "specialty_weapupgrade", "script_noteworthy" ); - break; } else { @@ -822,30 +786,14 @@ limited_weapon_below_quota( weapon, ignore_player, pap_triggers ) count = 0; limit = level.limited_weapons[ weapon ]; i = 0; - while ( i < players.size ) + while ( i < players.size) { if ( isDefined( ignore_player ) && ignore_player == players[ i ] ) { i++; continue; } - else - { - if ( players[ i ] has_weapon_or_upgrade( weapon ) ) - { - count++; - if ( count >= limit ) - { - return 0; - } - } - } - i++; - } - k = 0; - while ( k < pap_triggers.size ) - { - if ( isDefined( pap_triggers[ k ].current_weapon ) || pap_triggers[ k ].current_weapon == weapon && pap_triggers[ k ].current_weapon == upgradedweapon ) + if ( players[ i ] has_weapon_or_upgrade( weapon ) ) { count++; if ( count >= limit ) @@ -853,10 +801,20 @@ limited_weapon_below_quota( weapon, ignore_player, pap_triggers ) return 0; } } - k++; + i++; } - chestindex = 0; - while ( chestindex < level.chests.size ) + for ( k = 0; k < pap_triggers.size; k++ ) + { + if ( isDefined( pap_triggers[ k ].current_weapon ) && pap_triggers[ k ].current_weapon == weapon || pap_triggers[ k ].current_weapon == upgradedweapon ) + { + count++; + if ( count >= limit ) + { + return 0; + } + } + } + for ( chestindex = 0; chestindex < level.chests.size; chestindex++ ) { if ( isDefined( level.chests[ chestindex ].zbarrier.weapon_string ) && level.chests[ chestindex ].zbarrier.weapon_string == weapon ) { @@ -866,27 +824,21 @@ limited_weapon_below_quota( weapon, ignore_player, pap_triggers ) return 0; } } - chestindex++; } if ( isDefined( level.custom_limited_weapon_checks ) ) { - _a952 = level.custom_limited_weapon_checks; - _k952 = getFirstArrayKey( _a952 ); - while ( isDefined( _k952 ) ) + foreach ( check in level.custom_limited_weapon_checks ) { - check = _a952[ _k952 ]; - count += [[ check ]]( weapon ); - _k952 = getNextArrayKey( _a952, _k952 ); + count = count + [[ check ]]( weapon ); } if ( count >= limit ) { return 0; } } - while ( isDefined( level.random_weapon_powerups ) ) + if ( isDefined( level.random_weapon_powerups ) ) { - powerupindex = 0; - while ( powerupindex < level.random_weapon_powerups.size ) + for ( powerupindex = 0; powerupindex < level.random_weapon_powerups.size; powerupindex++ ) { if ( isDefined( level.random_weapon_powerups[ powerupindex ] ) && level.random_weapon_powerups[ powerupindex ].base_weapon == weapon ) { @@ -896,14 +848,14 @@ limited_weapon_below_quota( weapon, ignore_player, pap_triggers ) return 0; } } - powerupindex++; } } } return 1; + } -add_custom_limited_weapon_check( callback ) +add_custom_limited_weapon_check( callback ) //checked matches cerberus output { if ( !isDefined( level.custom_limited_weapon_checks ) ) { @@ -912,7 +864,7 @@ add_custom_limited_weapon_check( callback ) level.custom_limited_weapon_checks[ level.custom_limited_weapon_checks.size ] = callback; } -add_weapon_to_content( weapon_name, package ) +add_weapon_to_content( weapon_name, package ) //checked matches cerberus output { if ( !isDefined( level.content_weapons ) ) { @@ -921,7 +873,7 @@ add_weapon_to_content( weapon_name, package ) level.content_weapons[ weapon_name ] = package; } -player_can_use_content( weapon ) +player_can_use_content( weapon ) //checked matches cerberus output { if ( isDefined( level.content_weapons ) ) { @@ -933,7 +885,7 @@ player_can_use_content( weapon ) return 1; } -init_spawnable_weapon_upgrade() +init_spawnable_weapon_upgrade() //checked partially changed to match cerberus output { spawn_list = []; spawnable_weapon_spawns = getstructarray( "weapon_upgrade", "targetname" ); @@ -947,14 +899,14 @@ init_spawnable_weapon_upgrade() } 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; if ( location != "" ) { - match_string = ( match_string + "_" ) + location; + match_string = match_string + "_" + location; } match_string_plus_space = " " + match_string; i = 0; @@ -966,26 +918,18 @@ init_spawnable_weapon_upgrade() i++; continue; } - else + if ( !isDefined( spawnable_weapon.script_noteworthy ) || spawnable_weapon.script_noteworthy == "" ) { - if ( !isDefined( spawnable_weapon.script_noteworthy ) || spawnable_weapon.script_noteworthy == "" ) + spawn_list[ spawn_list.size ] = spawnable_weapon; + i++; + continue; + } + matches = strtok( spawnable_weapon.script_noteworthy, "," ); + for ( j = 0; j < matches.size; j++ ) + { + if ( matches[ j ] == match_string || matches[ j ] == match_string_plus_space ) { spawn_list[ spawn_list.size ] = spawnable_weapon; - i++; - continue; - } - else - { - matches = strtok( spawnable_weapon.script_noteworthy, "," ); - j = 0; - while ( j < matches.size ) - { - if ( matches[ j ] == match_string || matches[ j ] == match_string_plus_space ) - { - spawn_list[ spawn_list.size ] = spawnable_weapon; - } - j++; - } } } i++; @@ -994,7 +938,7 @@ init_spawnable_weapon_upgrade() i = 0; while ( i < spawn_list.size ) { - clientfieldname = ( spawn_list[ i ].zombie_weapon_upgrade + "_" ) + spawn_list[ i ].origin; + clientfieldname = spawn_list[ i ].zombie_weapon_upgrade + "_" + spawn_list[ i ].origin; numbits = 2; if ( isDefined( level._wallbuy_override_num_bits ) ) { @@ -1014,120 +958,106 @@ init_spawnable_weapon_upgrade() i++; continue; } - else + precachemodel( target_struct.model ); + unitrigger_stub = spawnstruct(); + unitrigger_stub.origin = spawn_list[ i ].origin; + unitrigger_stub.angles = spawn_list[ i ].angles; + tempmodel.origin = spawn_list[ i ].origin; + tempmodel.angles = spawn_list[ i ].angles; + mins = undefined; + maxs = undefined; + absmins = undefined; + absmaxs = undefined; + tempmodel setmodel( target_struct.model ); + tempmodel useweaponhidetags( spawn_list[ i ].zombie_weapon_upgrade ); + mins = tempmodel getmins(); + maxs = tempmodel getmaxs(); + absmins = tempmodel getabsmins(); + absmaxs = tempmodel getabsmaxs(); + bounds = absmaxs - absmins; + unitrigger_stub.script_length = bounds[ 0 ] * 0.25; + unitrigger_stub.script_width = bounds[ 1 ]; + unitrigger_stub.script_height = bounds[ 2 ]; + unitrigger_stub.origin -= anglesToRight( unitrigger_stub.angles ) * ( unitrigger_stub.script_length * 0.4 ); + unitrigger_stub.target = spawn_list[ i ].target; + unitrigger_stub.targetname = spawn_list[ i ].targetname; + unitrigger_stub.cursor_hint = "HINT_NOICON"; + if ( spawn_list[ i ].targetname == "weapon_upgrade" ) { - precachemodel( target_struct.model ); - unitrigger_stub = spawnstruct(); - unitrigger_stub.origin = spawn_list[ i ].origin; - unitrigger_stub.angles = spawn_list[ i ].angles; - tempmodel.origin = spawn_list[ i ].origin; - tempmodel.angles = spawn_list[ i ].angles; - mins = undefined; - maxs = undefined; - absmins = undefined; - absmaxs = undefined; - tempmodel setmodel( target_struct.model ); - tempmodel useweaponhidetags( spawn_list[ i ].zombie_weapon_upgrade ); - mins = tempmodel getmins(); - maxs = tempmodel getmaxs(); - absmins = tempmodel getabsmins(); - absmaxs = tempmodel getabsmaxs(); - bounds = absmaxs - absmins; - unitrigger_stub.script_length = bounds[ 0 ] * 0.25; - unitrigger_stub.script_width = bounds[ 1 ]; - unitrigger_stub.script_height = bounds[ 2 ]; - unitrigger_stub.origin -= anglesToRight( unitrigger_stub.angles ) * ( unitrigger_stub.script_length * 0.4 ); - unitrigger_stub.target = spawn_list[ i ].target; - unitrigger_stub.targetname = spawn_list[ i ].targetname; - unitrigger_stub.cursor_hint = "HINT_NOICON"; - if ( spawn_list[ i ].targetname == "weapon_upgrade" ) + unitrigger_stub.cost = get_weapon_cost( spawn_list[ i ].zombie_weapon_upgrade ); + if ( isDefined( level.monolingustic_prompt_format ) && !level.monolingustic_prompt_format ) { - unitrigger_stub.cost = get_weapon_cost( spawn_list[ i ].zombie_weapon_upgrade ); - if ( isDefined( level.monolingustic_prompt_format ) && !level.monolingustic_prompt_format ) - { - unitrigger_stub.hint_string = get_weapon_hint( spawn_list[ i ].zombie_weapon_upgrade ); - unitrigger_stub.hint_parm1 = unitrigger_stub.cost; - break; - } - else - { - unitrigger_stub.hint_parm1 = get_weapon_display_name( spawn_list[ i ].zombie_weapon_upgrade ); - if ( isDefined( unitrigger_stub.hint_parm1 ) || unitrigger_stub.hint_parm1 == "" && unitrigger_stub.hint_parm1 == "none" ) - { - unitrigger_stub.hint_parm1 = "missing weapon name " + spawn_list[ i ].zombie_weapon_upgrade; - } - unitrigger_stub.hint_parm2 = unitrigger_stub.cost; - unitrigger_stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY"; - } - } - unitrigger_stub.weapon_upgrade = spawn_list[ i ].zombie_weapon_upgrade; - unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; - unitrigger_stub.require_look_at = 1; - if ( isDefined( spawn_list[ i ].require_look_from ) && spawn_list[ i ].require_look_from ) - { - unitrigger_stub.require_look_from = 1; - } - unitrigger_stub.zombie_weapon_upgrade = spawn_list[ i ].zombie_weapon_upgrade; - unitrigger_stub.clientfieldname = clientfieldname; - maps/mp/zombies/_zm_unitrigger::unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); - if ( is_melee_weapon( unitrigger_stub.zombie_weapon_upgrade ) ) - { - if ( unitrigger_stub.zombie_weapon_upgrade == "tazer_knuckles_zm" && isDefined( level.taser_trig_adjustment ) ) - { - unitrigger_stub.origin += level.taser_trig_adjustment; - } - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::weapon_spawn_think ); - } - else if ( unitrigger_stub.zombie_weapon_upgrade == "claymore_zm" ) - { - unitrigger_stub.prompt_and_visibility_func = ::claymore_unitrigger_update_prompt; - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::buy_claymores ); + unitrigger_stub.hint_string = get_weapon_hint( spawn_list[ i ].zombie_weapon_upgrade ); + unitrigger_stub.hint_parm1 = unitrigger_stub.cost; } else { - unitrigger_stub.prompt_and_visibility_func = ::wall_weapon_update_prompt; - maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::weapon_spawn_think ); + unitrigger_stub.hint_parm1 = get_weapon_display_name( spawn_list[ i ].zombie_weapon_upgrade ); + if ( isDefined( unitrigger_stub.hint_parm1 ) || unitrigger_stub.hint_parm1 == "" || unitrigger_stub.hint_parm1 == "none" ) + { + unitrigger_stub.hint_parm1 = "missing weapon name " + spawn_list[ i ].zombie_weapon_upgrade; + } + unitrigger_stub.hint_parm2 = unitrigger_stub.cost; + unitrigger_stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY"; } - spawn_list[ i ].trigger_stub = unitrigger_stub; } + unitrigger_stub.weapon_upgrade = spawn_list[ i ].zombie_weapon_upgrade; + unitrigger_stub.script_unitrigger_type = "unitrigger_box_use"; + unitrigger_stub.require_look_at = 1; + if ( isDefined( spawn_list[ i ].require_look_from ) && spawn_list[ i ].require_look_from ) + { + unitrigger_stub.require_look_from = 1; + } + unitrigger_stub.zombie_weapon_upgrade = spawn_list[ i ].zombie_weapon_upgrade; + unitrigger_stub.clientfieldname = clientfieldname; + maps/mp/zombies/_zm_unitrigger::unitrigger_force_per_player_triggers( unitrigger_stub, 1 ); + if ( is_melee_weapon( unitrigger_stub.zombie_weapon_upgrade ) ) + { + if ( unitrigger_stub.zombie_weapon_upgrade == "tazer_knuckles_zm" && isDefined( level.taser_trig_adjustment ) ) + { + unitrigger_stub.origin += level.taser_trig_adjustment; + } + maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::weapon_spawn_think ); + } + else if ( unitrigger_stub.zombie_weapon_upgrade == "claymore_zm" ) + { + unitrigger_stub.prompt_and_visibility_func = ::claymore_unitrigger_update_prompt; + maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::buy_claymores ); + } + else + { + unitrigger_stub.prompt_and_visibility_func = ::wall_weapon_update_prompt; + maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::weapon_spawn_think ); + } + spawn_list[ i ].trigger_stub = unitrigger_stub; i++; } level._spawned_wallbuys = spawn_list; tempmodel delete(); + if ( level.debugLogging_zm_weapons ) + { + logline2 = "_zm_weapons.gsc init_spawnable_weapon_upgrade() completed its operation" + "\n"; + logprint( logline2 ); + } } -add_dynamic_wallbuy( weapon, wallbuy, pristine ) +add_dynamic_wallbuy( weapon, wallbuy, pristine ) //checked partially changed to match cerberus output { spawned_wallbuy = undefined; - i = 0; - while ( i < level._spawned_wallbuys.size ) + for ( i = 0; i < level._spawned_wallbuys.size; i++ ) { if ( level._spawned_wallbuys[ i ].target == wallbuy ) { spawned_wallbuy = level._spawned_wallbuys[ i ]; break; } - else - { - i++; - } } if ( !isDefined( spawned_wallbuy ) ) { - /* -/# - assertmsg( "Cannot find dynamic wallbuy" ); -#/ - */ return; } if ( isDefined( spawned_wallbuy.trigger_stub ) ) { - /* -/# - assertmsg( "Dynamic wallbuy already added" ); -#/ - */ return; } target_struct = getstruct( wallbuy, "targetname" ); @@ -1198,20 +1128,15 @@ add_dynamic_wallbuy( weapon, wallbuy, pristine ) } spawned_wallbuy.trigger_stub = unitrigger_stub; weaponidx = undefined; - while ( isDefined( level.buildable_wallbuy_weapons ) ) + if ( isDefined( level.buildable_wallbuy_weapons ) ) { - i = 0; - while ( i < level.buildable_wallbuy_weapons.size ) + for ( i = 0; i < level.buildable_wallbuy_weapons.size; i++ ) { if ( weapon == level.buildable_wallbuy_weapons[ i ] ) { weaponidx = i; break; } - else - { - i++; - } } } if ( isDefined( weaponidx ) ) @@ -1230,7 +1155,7 @@ add_dynamic_wallbuy( weapon, wallbuy, pristine ) } } -wall_weapon_update_prompt( player ) +wall_weapon_update_prompt( player ) //checked partially changed to match cerberus output //partially changed at own discretion { weapon = self.stub.zombie_weapon_upgrade; if ( isDefined( level.monolingustic_prompt_format ) && !level.monolingustic_prompt_format ) @@ -1258,71 +1183,58 @@ wall_weapon_update_prompt( player ) self.stub.hint_string = get_weapon_hint_ammo(); self sethintstring( self.stub.hint_string, cost, ammo_cost ); } - else + else if ( player has_upgrade( weapon ) ) { - if ( player has_upgrade( weapon ) ) - { - ammo_cost = get_upgraded_ammo_cost( weapon ); - } - else - { - ammo_cost = get_ammo_cost( weapon ); - } - self.stub.hint_string = &"ZOMBIE_WEAPONAMMOONLY"; - self sethintstring( self.stub.hint_string, ammo_cost ); - } - } - else - { - if ( !player has_weapon_or_upgrade( weapon ) ) - { - string_override = 0; - if ( isDefined( player.pers_upgrades_awarded[ "nube" ] ) && player.pers_upgrades_awarded[ "nube" ] ) - { - string_override = maps/mp/zombies/_zm_pers_upgrades_functions::pers_nube_ammo_hint_string( player, weapon ); - } - if ( !string_override ) - { - cost = get_weapon_cost( weapon ); - weapon_display = get_weapon_display_name( weapon ); - if ( isDefined( weapon_display ) || weapon_display == "" && weapon_display == "none" ) - { - weapon_display = "missing weapon name " + weapon; - } - self.stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY"; - self sethintstring( self.stub.hint_string, weapon_display, cost ); - } + ammo_cost = get_upgraded_ammo_cost( weapon ); } else { - if ( player has_upgrade( weapon ) ) + ammo_cost = get_ammo_cost( weapon ); + } + self.stub.hint_string = &"ZOMBIE_WEAPONAMMOONLY"; + self sethintstring( self.stub.hint_string, ammo_cost ); + } + else if ( !player has_weapon_or_upgrade( weapon ) ) + { + string_override = 0; + if ( isDefined( player.pers_upgrades_awarded[ "nube" ] ) && player.pers_upgrades_awarded[ "nube" ] ) + { + string_override = maps/mp/zombies/_zm_pers_upgrades_functions::pers_nube_ammo_hint_string( player, weapon ); + } + if ( !string_override ) + { + cost = get_weapon_cost( weapon ); + weapon_display = get_weapon_display_name( weapon ); + if ( isDefined( weapon_display ) || weapon_display == "" || weapon_display == "none" ) { - ammo_cost = get_upgraded_ammo_cost( weapon ); + weapon_display = "missing weapon name " + weapon; } - else - { - ammo_cost = get_ammo_cost( weapon ); - } - self.stub.hint_string = &"ZOMBIE_WEAPONAMMOONLY"; - self sethintstring( self.stub.hint_string, ammo_cost ); + self.stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY"; + self sethintstring( self.stub.hint_string, weapon_display, cost ); } } - if ( getDvarInt( #"1F0A2129" ) ) + else if ( player has_upgrade( weapon ) ) { - self.stub.cursor_hint = "HINT_WEAPON"; - self.stub.cursor_hint_weapon = weapon; - self setcursorhint( self.stub.cursor_hint, self.stub.cursor_hint_weapon ); + ammo_cost = get_upgraded_ammo_cost( weapon ); } else { - self.stub.cursor_hint = "HINT_NOICON"; - self.stub.cursor_hint_weapon = undefined; - self setcursorhint( self.stub.cursor_hint ); + ammo_cost = get_ammo_cost( weapon ); + } + self.stub.hint_string = &"ZOMBIE_WEAPONAMMOONLY"; + self sethintstring( self.stub.hint_string, ammo_cost ); + self.stub.cursor_hint = "HINT_WEAPON"; + self.stub.cursor_hint_weapon = weapon; + self setcursorhint( self.stub.cursor_hint, self.stub.cursor_hint_weapon ); + if ( level.debugLogging_zm_weapons ) + { + logline3 = "_zm_weapons.gsc wall_weapon_update_prompt() completed its operation" + "\n"; + logprint( logline3 ); } return 1; } -reset_wallbuy_internal( set_hint_string ) +reset_wallbuy_internal( set_hint_string ) //checked matches cerberus output { if ( isDefined( self.first_time_triggered ) && self.first_time_triggered == 1 ) { @@ -1340,7 +1252,7 @@ reset_wallbuy_internal( set_hint_string ) } } -reset_wallbuys() +reset_wallbuys() //checked changed to match cerberus output { weapon_spawns = []; weapon_spawns = getentarray( "weapon_upgrade", "targetname" ); @@ -1352,27 +1264,22 @@ reset_wallbuys() { melee_and_grenade_spawns = arraycombine( melee_and_grenade_spawns, getentarray( "claymore_purchase", "targetname" ), 1, 0 ); } - i = 0; - while ( i < weapon_spawns.size ) + for ( i = 0; i < weapon_spawns.size; i++ ) { weapon_spawns[ i ] reset_wallbuy_internal( 1 ); - i++; } - i = 0; - while ( i < melee_and_grenade_spawns.size ) + for ( i = 0; i < melee_and_grenade_spawns.size; i++ ) { melee_and_grenade_spawns[ i ] reset_wallbuy_internal( 0 ); - i++; } - while ( isDefined( level._unitriggers ) ) + if ( isDefined( level._unitriggers ) ) { candidates = []; - i = 0; - while ( i < level._unitriggers.trigger_stubs.size ) + for ( i = 0; i < level._unitriggers.trigger_stubs.size; i++ ) { stub = level._unitriggers.trigger_stubs[ i ]; tn = stub.targetname; - if ( tn != "weapon_upgrade" && tn != "bowie_upgrade" && tn != "sickle_upgrade" || tn == "tazer_upgrade" && tn == "claymore_purchase" ) + if ( tn == "weapon_upgrade" || tn == "bowie_upgrade" || tn == "sickle_upgrade" || tn == "tazer_upgrade" || tn == "claymore_purchase" ) { stub.first_time_triggered = 0; if ( isDefined( stub.clientfieldname ) ) @@ -1386,18 +1293,16 @@ reset_wallbuys() stub.hint_parm1 = stub.cost; } } - i++; } } } -init_weapon_upgrade() +init_weapon_upgrade() //checked changed to match cerberus output { - init_spawnable_weapon_upgrade(); + init_spawnable_weapon_upgrade(); weapon_spawns = []; weapon_spawns = getentarray( "weapon_upgrade", "targetname" ); - i = 0; - while ( i < weapon_spawns.size ) + for ( i = 0; i < weapon_spawns.size; i++ ) { if ( isDefined( level.monolingustic_prompt_format ) && !level.monolingustic_prompt_format ) { @@ -1410,7 +1315,7 @@ init_weapon_upgrade() { cost = get_weapon_cost( weapon_spawns[ i ].zombie_weapon_upgrade ); weapon_display = get_weapon_display_name( weapon_spawns[ i ].zombie_weapon_upgrade ); - if ( isDefined( weapon_display ) || weapon_display == "" && weapon_display == "none" ) + if ( !isDefined( weapon_display ) || weapon_display == "" || weapon_display == "none" ) { weapon_display = "missing weapon name " + weapon_spawns[ i ].zombie_weapon_upgrade; } @@ -1425,11 +1330,10 @@ init_weapon_upgrade() model useweaponhidetags( weapon_spawns[ i ].zombie_weapon_upgrade ); model hide(); } - i++; } } -init_weapon_toggle() +init_weapon_toggle() //checked changed to match cerberus output { if ( !isDefined( level.magic_box_weapon_toggle_init_callback ) ) { @@ -1456,8 +1360,7 @@ init_weapon_toggle() level.zombie_weapon_toggle_acquired_light = "zombie_zapper_cagelight_on"; weapon_toggle_ents = []; weapon_toggle_ents = getentarray( "magic_box_weapon_toggle", "targetname" ); - i = 0; - while ( i < weapon_toggle_ents.size ) + for ( i = 0; i < weapon_toggle_ents.size; i++ ) { struct = spawnstruct(); struct.trigger = weapon_toggle_ents[ i ]; @@ -1468,8 +1371,7 @@ init_weapon_toggle() struct.acquired = 0; target_array = []; target_array = getentarray( struct.trigger.target, "targetname" ); - j = 0; - while ( j < target_array.size ) + for ( j = 0; j < target_array.size; j++ ) { switch( target_array[ j ].script_string ) { @@ -1477,28 +1379,22 @@ init_weapon_toggle() struct.light = target_array[ j ]; struct.light setmodel( level.zombie_weapon_toggle_disabled_light ); break; - j++; - continue; case "weapon": struct.weapon_model = target_array[ j ]; struct.weapon_model hide(); break; - j++; - continue; } - j++; } struct.trigger sethintstring( level.zombie_weapon_toggle_disabled_hint ); struct.trigger setcursorhint( "HINT_NOICON" ); struct.trigger usetriggerrequirelookat(); struct thread weapon_toggle_think(); level.zombie_weapon_toggles[ struct.weapon_name ] = struct; - i++; } level thread [[ level.magic_box_weapon_toggle_init_callback ]](); } -get_weapon_toggle( weapon_name ) +get_weapon_toggle( weapon_name ) //checked changed to match cerberus output { if ( !isDefined( level.zombie_weapon_toggles ) ) { @@ -1509,24 +1405,22 @@ get_weapon_toggle( weapon_name ) return level.zombie_weapon_toggles[ weapon_name ]; } keys = getarraykeys( level.zombie_weapon_toggles ); - i = 0; - while ( i < keys.size ) + for ( i = 0; i < keys.size; i++ ) { if ( weapon_name == level.zombie_weapon_toggles[ keys[ i ] ].upgrade_name ) { return level.zombie_weapon_toggles[ keys[ i ] ]; } - i++; } return undefined; } -is_weapon_toggle( weapon_name ) +is_weapon_toggle( weapon_name ) //checked matches cerberus output { return isDefined( get_weapon_toggle( weapon_name ) ); } -disable_weapon_toggle( weapon_name ) +disable_weapon_toggle( weapon_name ) //checked matches cerberus output { toggle = get_weapon_toggle( weapon_name ); if ( !isDefined( toggle ) ) @@ -1545,7 +1439,7 @@ disable_weapon_toggle( weapon_name ) toggle.trigger sethintstring( level.zombie_weapon_toggle_disabled_hint ); } -enable_weapon_toggle( weapon_name ) +enable_weapon_toggle( weapon_name ) //checked matches cerberus output { toggle = get_weapon_toggle( weapon_name ); if ( !isDefined( toggle ) ) @@ -1558,7 +1452,7 @@ enable_weapon_toggle( weapon_name ) deactivate_weapon_toggle( weapon_name ); } -activate_weapon_toggle( weapon_name, trig_for_vox ) +activate_weapon_toggle( weapon_name, trig_for_vox ) //checked matches cerberus output { if ( level.zombie_weapon_toggle_active_count >= level.zombie_weapon_toggle_max_active_count ) { @@ -1583,7 +1477,7 @@ activate_weapon_toggle( weapon_name, trig_for_vox ) toggle.trigger sethintstring( level.zombie_weapon_toggle_deactivate_hint ); } -deactivate_weapon_toggle( weapon_name, trig_for_vox ) +deactivate_weapon_toggle( weapon_name, trig_for_vox ) //checked matches cerberus output { toggle = get_weapon_toggle( weapon_name ); if ( !isDefined( toggle ) ) @@ -1604,7 +1498,7 @@ deactivate_weapon_toggle( weapon_name, trig_for_vox ) toggle.trigger sethintstring( level.zombie_weapon_toggle_activate_hint ); } -acquire_weapon_toggle( weapon_name, player ) +acquire_weapon_toggle( weapon_name, player ) //checked matches cerberus output { toggle = get_weapon_toggle( weapon_name ); if ( !isDefined( toggle ) ) @@ -1621,7 +1515,7 @@ acquire_weapon_toggle( weapon_name, player ) toggle thread unacquire_weapon_toggle_on_death_or_disconnect_thread( player ); } -unacquire_weapon_toggle_on_death_or_disconnect_thread( player ) +unacquire_weapon_toggle_on_death_or_disconnect_thread( player ) //checked matches cerberus output { self notify( "end_unacquire_weapon_thread" ); self endon( "end_unacquire_weapon_thread" ); @@ -1629,7 +1523,7 @@ unacquire_weapon_toggle_on_death_or_disconnect_thread( player ) unacquire_weapon_toggle( self.weapon_name ); } -unacquire_weapon_toggle( weapon_name ) +unacquire_weapon_toggle( weapon_name ) //checked matches cerberus output { toggle = get_weapon_toggle( weapon_name ); if ( !isDefined( toggle ) ) @@ -1646,7 +1540,7 @@ unacquire_weapon_toggle( weapon_name ) toggle notify( "end_unacquire_weapon_thread" ); } -weapon_toggle_think() +weapon_toggle_think() //checked changed to match cerberus output { for ( ;; ) { @@ -1656,63 +1550,37 @@ weapon_toggle_think() player thread ignore_triggers( 0.5 ); continue; } - else if ( !self.enabled || self.acquired ) + if ( !self.enabled || self.acquired ) { self.trigger thread maps/mp/zombies/_zm_audio::weapon_toggle_vox( "max" ); continue; } - else + if ( !self.active ) { - if ( !self.active ) - { - activate_weapon_toggle( self.weapon_name, self.trigger ); - break; - } - else - { - deactivate_weapon_toggle( self.weapon_name, self.trigger ); - } + activate_weapon_toggle( self.weapon_name, self.trigger ); + break; } + deactivate_weapon_toggle( self.weapon_name, self.trigger ); } } -get_weapon_hint( weapon_name ) +get_weapon_hint( weapon_name ) //checked matches cerberus output { -/* -/# - assert( isDefined( level.zombie_weapons[ weapon_name ] ), weapon_name + " was not included or is not part of the zombie weapon list." ); -#/ -*/ return level.zombie_weapons[ weapon_name ].hint; } -get_weapon_cost( weapon_name ) +get_weapon_cost( weapon_name ) //checked matches cerberus output { -/* -/# - assert( isDefined( level.zombie_weapons[ weapon_name ] ), weapon_name + " was not included or is not part of the zombie weapon list." ); -#/ -*/ return level.zombie_weapons[ weapon_name ].cost; } -get_ammo_cost( weapon_name ) +get_ammo_cost( weapon_name ) //checked matches cerberus output { -/* -/# - assert( isDefined( level.zombie_weapons[ weapon_name ] ), weapon_name + " was not included or is not part of the zombie weapon list." ); -#/ -*/ return level.zombie_weapons[ weapon_name ].ammo_cost; } -get_upgraded_ammo_cost( weapon_name ) +get_upgraded_ammo_cost( weapon_name ) //checked matches cerberus output { -/* -/# - assert( isDefined( level.zombie_weapons[ weapon_name ] ), weapon_name + " was not included or is not part of the zombie weapon list." ); -#/ -*/ if ( isDefined( level.zombie_weapons[ weapon_name ].upgraded_ammo_cost ) ) { return level.zombie_weapons[ weapon_name ].upgraded_ammo_cost; @@ -1720,32 +1588,22 @@ get_upgraded_ammo_cost( weapon_name ) return 4500; } -get_weapon_display_name( weapon_name ) +get_weapon_display_name( weapon_name ) //checked changed to match cerberus output { weapon_display = getweapondisplayname( weapon_name ); - if ( isDefined( weapon_display ) || weapon_display == "" && weapon_display == "none" ) + if ( !isDefined( weapon_display ) || weapon_display == "" || weapon_display == "none" ) { weapon_display = &"MPUI_NONE"; -/* -/# - weapon_display = "missing weapon name " + weapon_name; -#/ -*/ } return weapon_display; } -get_is_in_box( weapon_name ) +get_is_in_box( weapon_name ) //checked matches cerberus output { -/* -/# - assert( isDefined( level.zombie_weapons[ weapon_name ] ), weapon_name + " was not included or is not part of the zombie weapon list." ); -#/ -*/ return level.zombie_weapons[ weapon_name ].is_in_box; } -weapon_supports_default_attachment( weaponname ) +weapon_supports_default_attachment( weaponname ) //checked matches cerberus output { weaponname = get_base_weapon_name( weaponname ); if ( isDefined( weaponname ) ) @@ -1755,7 +1613,7 @@ weapon_supports_default_attachment( weaponname ) return isDefined( attachment ); } -default_attachment( weaponname ) +default_attachment( weaponname ) //checked matches cerberus output { weaponname = get_base_weapon_name( weaponname ); if ( isDefined( weaponname ) ) @@ -1772,20 +1630,20 @@ default_attachment( weaponname ) } } -weapon_supports_attachments( weaponname ) +weapon_supports_attachments( weaponname ) //checked changed at own discretion { weaponname = get_base_weapon_name( weaponname ); if ( isDefined( weaponname ) ) { attachments = level.zombie_weapons[ weaponname ].addon_attachments; } - if ( isDefined( attachments ) ) + if ( isDefined( attachments ) && attachments.size > 1 ) { - return attachments.size > 1; + return 1; } } -random_attachment( weaponname, exclude ) +random_attachment( weaponname, exclude ) //checked changed to match cerberus output { lo = 0; if ( isDefined( level.zombie_weapons[ weaponname ].addon_attachments ) && level.zombie_weapons[ weaponname ].addon_attachments.size > 0 ) @@ -1802,7 +1660,7 @@ random_attachment( weaponname, exclude ) { minatt = lo + 1; } - while ( attachments.size > minatt ) + if ( attachments.size > minatt ) { while ( 1 ) { @@ -1816,7 +1674,7 @@ random_attachment( weaponname, exclude ) return "none"; } -get_base_name( weaponname ) +get_base_name( weaponname ) //checked matches cerberus output { split = strtok( weaponname, "+" ); if ( split.size > 1 ) @@ -1826,7 +1684,7 @@ get_base_name( weaponname ) return weaponname; } -get_attachment_name( weaponname, att_id ) +get_attachment_name( weaponname, att_id ) //checked changed to match cerberus output { split = strtok( weaponname, "+" ); if ( isDefined( att_id ) ) @@ -1837,24 +1695,19 @@ get_attachment_name( weaponname, att_id ) return split[ attachment ]; } } - else + else if ( split.size > 1 ) { - if ( split.size > 1 ) + att = split[ 1 ]; + for ( idx = 2; split.size > idx; idx++ ) { - att = split[ 1 ]; - idx = 2; - while ( split.size > idx ) - { - att = ( att + "+" ) + split[ idx ]; - idx++; - } - return att; + att = ( att + "+" ) + split[ idx ]; } + return att; } return undefined; } -get_attachment_index( weapon ) +get_attachment_index( weapon ) //checked changed to match cerberus output { att = get_attachment_name( weapon ); if ( att == "none" ) @@ -1866,49 +1719,40 @@ get_attachment_index( weapon ) { return 0; } - while ( isDefined( level.zombie_weapons[ base ].addon_attachments ) ) + if ( isDefined( level.zombie_weapons[ base ].addon_attachments ) ) { - i = 0; - while ( i < level.zombie_weapons[ base ].addon_attachments.size ) + for ( i = 0; i < level.zombie_weapons[base].addon_attachments.size; i++ ) { if ( level.zombie_weapons[ base ].addon_attachments[ i ] == att ) { return i + 1; } - i++; } } -/* -/# - println( "ZM WEAPON ERROR: Unrecognized attachment in weapon " + weapon ); -#/ -*/ return -1; } -weapon_supports_this_attachment( weapon, att ) +weapon_supports_this_attachment( weapon, att ) //checked changed to match cerberus output { base = get_base_name( weapon ); if ( att == level.zombie_weapons[ base ].default_attachment ) { return 1; } - while ( isDefined( level.zombie_weapons[ base ].addon_attachments ) ) + if ( isDefined( level.zombie_weapons[ base ].addon_attachments ) ) { - i = 0; - while ( i < level.zombie_weapons[ base ].addon_attachments.size ) + for(i = 0; i < level.zombie_weapons[base].addon_attachments.size; i++) { if ( level.zombie_weapons[ base ].addon_attachments[ i ] == att ) { return 1; } - i++; } } return 0; } -has_attachment( weaponname, att ) +has_attachment( weaponname, att ) //checked matches cerberus output { split = strtok( weaponname, "+" ); idx = 1; @@ -1922,7 +1766,7 @@ has_attachment( weaponname, att ) return 0; } -get_base_weapon_name( upgradedweaponname, base_if_not_upgraded ) +get_base_weapon_name( upgradedweaponname, base_if_not_upgraded ) //checked matches cerberus output { if ( !isDefined( upgradedweaponname ) || upgradedweaponname == "" ) { @@ -1941,7 +1785,7 @@ get_base_weapon_name( upgradedweaponname, base_if_not_upgraded ) return undefined; } -get_upgrade_weapon( weaponname, add_attachment ) +get_upgrade_weapon( weaponname, add_attachment ) //checked changed to match cerberus output { rootweaponname = tolower( weaponname ); rootweaponname = get_base_name( rootweaponname ); @@ -1955,22 +1799,19 @@ get_upgrade_weapon( weaponname, add_attachment ) { oldatt = get_attachment_name( weaponname ); att = random_attachment( baseweaponname, oldatt ); - newweapon = ( newweapon + "+" ) + att; + newweapon = newweapon + "+" + att; } - else + else if ( isDefined( level.zombie_weapons[ rootweaponname ] ) && isDefined( level.zombie_weapons[ rootweaponname ].default_attachment ) ) { - if ( isDefined( level.zombie_weapons[ rootweaponname ] ) && isDefined( level.zombie_weapons[ rootweaponname ].default_attachment ) ) - { - att = level.zombie_weapons[ rootweaponname ].default_attachment; - newweapon = ( newweapon + "+" ) + att; - } + att = level.zombie_weapons[ rootweaponname ].default_attachment; + newweapon = newweapon + "+" + att; } return newweapon; } -can_upgrade_weapon( weaponname ) +can_upgrade_weapon( weaponname ) //checked changed to match cerberus output { - if ( isDefined( weaponname ) || weaponname == "" && weaponname == "zombie_fists_zm" ) + if ( !isDefined( weaponname ) || weaponname == "" || weaponname == "zombie_fists_zm" ) { return 0; } @@ -1987,9 +1828,9 @@ can_upgrade_weapon( weaponname ) return 0; } -will_upgrade_weapon_as_attachment( weaponname ) +will_upgrade_weapon_as_attachment( weaponname ) //checked changed to match cerberus output { - if ( isDefined( weaponname ) || weaponname == "" && weaponname == "zombie_fists_zm" ) + if ( !isDefined( weaponname ) || weaponname == "" || weaponname == "zombie_fists_zm" ) { return 0; } @@ -2006,9 +1847,9 @@ will_upgrade_weapon_as_attachment( weaponname ) return 0; } -is_weapon_upgraded( weaponname ) +is_weapon_upgraded( weaponname ) //checked changed to match cerberus output { - if ( isDefined( weaponname ) || weaponname == "" && weaponname == "zombie_fists_zm" ) + if ( !isDefined( weaponname ) || weaponname == "" || weaponname == "zombie_fists_zm" ) { return 0; } @@ -2021,63 +1862,55 @@ is_weapon_upgraded( weaponname ) return 0; } -get_weapon_with_attachments( weaponname ) +get_weapon_with_attachments( weaponname ) //checked changed to match cerberus output { if ( self hasweapon( weaponname ) ) { return weaponname; } - while ( isDefined( level.zombiemode_reusing_pack_a_punch ) && level.zombiemode_reusing_pack_a_punch ) + if ( isDefined( level.zombiemode_reusing_pack_a_punch ) && level.zombiemode_reusing_pack_a_punch ) { weaponname = tolower( weaponname ); weaponname = get_base_name( weaponname ); weapons = self getweaponslist( 1 ); - _a2245 = weapons; - _k2245 = getFirstArrayKey( _a2245 ); - while ( isDefined( _k2245 ) ) + foreach ( weapon in weapons ) { - weapon = _a2245[ _k2245 ]; weapon = tolower( weapon ); weapon_base = get_base_name( weapon ); if ( weaponname == weapon_base ) { return weapon; } - _k2245 = getNextArrayKey( _a2245, _k2245 ); } } return undefined; } -has_weapon_or_attachments( weaponname ) +has_weapon_or_attachments( weaponname ) //checked changed to match cerberus output { if ( self hasweapon( weaponname ) ) { return 1; } - while ( isDefined( level.zombiemode_reusing_pack_a_punch ) && level.zombiemode_reusing_pack_a_punch ) + if ( isDefined( level.zombiemode_reusing_pack_a_punch ) && level.zombiemode_reusing_pack_a_punch ) { weaponname = tolower( weaponname ); weaponname = get_base_name( weaponname ); weapons = self getweaponslist( 1 ); - _a2267 = weapons; - _k2267 = getFirstArrayKey( _a2267 ); - while ( isDefined( _k2267 ) ) + foreach ( weapon in weapons ) { - weapon = _a2267[ _k2267 ]; weapon = tolower( weapon ); weapon = get_base_name( weapon ); if ( weaponname == weapon ) { return 1; } - _k2267 = getNextArrayKey( _a2267, _k2267 ); } } return 0; } -has_upgrade( weaponname ) +has_upgrade( weaponname ) //checked matches cerberus output { weaponname = get_base_name( weaponname ); has_upgrade = 0; @@ -2092,7 +1925,7 @@ has_upgrade( weaponname ) return has_upgrade; } -has_weapon_or_upgrade( weaponname ) +has_weapon_or_upgrade( weaponname ) //checked changed at own discretion { weaponname = get_base_name( weaponname ); upgradedweaponname = weaponname; @@ -2103,9 +1936,9 @@ has_weapon_or_upgrade( weaponname ) has_weapon = 0; if ( isDefined( level.zombie_weapons[ weaponname ] ) ) { - if ( !self has_weapon_or_attachments( weaponname ) ) + if ( self has_weapon_or_attachments( weaponname ) || self has_upgrade( weaponname ) ) { - has_weapon = self has_upgrade( weaponname ); + has_weapon = 1; } } if ( !has_weapon && weaponname == "knife_ballistic_zm" ) @@ -2119,36 +1952,32 @@ has_weapon_or_upgrade( weaponname ) return has_weapon; } -add_shared_ammo_weapon( str_weapon, str_base_weapon ) +add_shared_ammo_weapon( str_weapon, str_base_weapon ) //checked matches cerberus output { level.zombie_weapons[ str_weapon ].shared_ammo_weapon = str_base_weapon; } -get_shared_ammo_weapon( base_weapon ) +get_shared_ammo_weapon( base_weapon ) //checked changed to match cerberus output { base_weapon = get_base_name( base_weapon ); weapons = self getweaponslist( 1 ); - _a2355 = weapons; - _k2355 = getFirstArrayKey( _a2355 ); - while ( isDefined( _k2355 ) ) + foreach ( weapon in weapons ) { - weapon = _a2355[ _k2355 ]; weapon = tolower( weapon ); weapon = get_base_name( weapon ); - if ( !isDefined( level.zombie_weapons[ weapon ] ) && isDefined( level.zombie_weapons_upgraded[ weapon ] ) ) + if ( !isdefined( level.zombie_weapons[ weapon ] ) && isdefined( level.zombie_weapons_upgraded[ weapon ] ) ) { weapon = level.zombie_weapons_upgraded[ weapon ]; } - if ( isDefined( level.zombie_weapons[ weapon ] ) && isDefined( level.zombie_weapons[ weapon ].shared_ammo_weapon ) && level.zombie_weapons[ weapon ].shared_ammo_weapon == base_weapon ) + if ( isdefined( level.zombie_weapons[ weapon ] ) && isdefined( level.zombie_weapons[ weapon ].shared_ammo_weapon ) && level.zombie_weapons[ weapon ].shared_ammo_weapon == base_weapon ) { return weapon; } - _k2355 = getNextArrayKey( _a2355, _k2355 ); } return undefined; } -get_player_weapon_with_same_base( weaponname ) +get_player_weapon_with_same_base( weaponname ) //checked changed tp match cerberus output { weaponname = tolower( weaponname ); weaponname = get_base_name( weaponname ); @@ -2159,18 +1988,15 @@ get_player_weapon_with_same_base( weaponname ) { retweapon = get_weapon_with_attachments( level.zombie_weapons[ weaponname ].upgrade_name ); } - else + else if ( isDefined( level.zombie_weapons_upgraded[ weaponname ] ) ) { - if ( isDefined( level.zombie_weapons_upgraded[ weaponname ] ) ) - { - return get_weapon_with_attachments( level.zombie_weapons_upgraded[ weaponname ] ); - } + return get_weapon_with_attachments( level.zombie_weapons_upgraded[ weaponname ] ); } } return retweapon; } -get_weapon_hint_ammo() +get_weapon_hint_ammo() //checked matches cerberus output { if ( isDefined( level.has_pack_a_punch ) && !level.has_pack_a_punch ) { @@ -2182,12 +2008,12 @@ get_weapon_hint_ammo() } } -weapon_set_first_time_hint( cost, ammo_cost ) +weapon_set_first_time_hint( cost, ammo_cost ) //checked matches cerberus output { self sethintstring( get_weapon_hint_ammo(), cost, ammo_cost ); } -weapon_spawn_think() +weapon_spawn_think() //checked changed to match cerberus output { cost = get_weapon_cost( self.zombie_weapon_upgrade ); ammo_cost = get_ammo_cost( self.zombie_weapon_upgrade ); @@ -2221,14 +2047,11 @@ weapon_spawn_think() self.stub.first_time_triggered = 0; } } - else + else if ( self.first_time_triggered ) { - if ( self.first_time_triggered ) + if ( isDefined( level.use_legacy_weapon_prompt_format ) && level.use_legacy_weapon_prompt_format ) { - if ( isDefined( level.use_legacy_weapon_prompt_format ) && level.use_legacy_weapon_prompt_format ) - { - self weapon_set_first_time_hint( cost, get_ammo_cost( self.zombie_weapon_upgrade ) ); - } + self weapon_set_first_time_hint( cost, get_ammo_cost( self.zombie_weapon_upgrade ) ); } } for ( ;; ) @@ -2239,12 +2062,12 @@ weapon_spawn_think() player thread ignore_triggers( 0.5 ); continue; } - else if ( !player can_buy_weapon() ) + if ( !player can_buy_weapon() ) { wait 0.1; continue; } - else if ( isDefined( self.stub ) && isDefined( self.stub.require_look_from ) && self.stub.require_look_from ) + if ( isDefined( self.stub ) && isDefined( self.stub.require_look_from ) && self.stub.require_look_from ) { toplayer = player get_eye() - self.origin; forward = -1 * anglesToRight( self.angles ); @@ -2254,78 +2077,75 @@ weapon_spawn_think() continue; } } - else if ( player has_powerup_weapon() ) + if ( player has_powerup_weapon() ) { wait 0.1; continue; } + player_has_weapon = player has_weapon_or_upgrade( self.zombie_weapon_upgrade ); + if ( !player_has_weapon && isDefined( level.weapons_using_ammo_sharing ) && level.weapons_using_ammo_sharing ) + { + shared_ammo_weapon = player get_shared_ammo_weapon( self.zombie_weapon_upgrade ); + if ( isDefined( shared_ammo_weapon ) ) + { + player_has_weapon = 1; + } + } + if ( isDefined( level.pers_upgrade_nube ) && level.pers_upgrade_nube ) + { + player_has_weapon = maps/mp/zombies/_zm_pers_upgrades_functions::pers_nube_should_we_give_raygun( player_has_weapon, player, self.zombie_weapon_upgrade ); + } + cost = get_weapon_cost( self.zombie_weapon_upgrade ); + if ( player maps/mp/zombies/_zm_pers_upgrades_functions::is_pers_double_points_active() ) + { + cost = int( cost / 2 ); + } + if ( !player_has_weapon ) + { + if ( player.score >= cost ) + { + if ( self.first_time_triggered == 0 ) + { + self show_all_weapon_buys( player, cost, ammo_cost, is_grenade ); + } + player maps/mp/zombies/_zm_score::minus_to_player_score( cost, 1 ); + bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, self.zombie_weapon_upgrade, self.origin, "weapon" ); + level notify( "weapon_bought", player, self.zombie_weapon_upgrade ); + if ( self.zombie_weapon_upgrade == "riotshield_zm" ) + { + player maps/mp/zombies/_zm_equipment::equipment_give( "riotshield_zm" ); + if ( isDefined( player.player_shield_reset_health ) ) + { + player [[ player.player_shield_reset_health ]](); + } + } + else if ( self.zombie_weapon_upgrade == "jetgun_zm" ) + { + player maps/mp/zombies/_zm_equipment::equipment_give( "jetgun_zm" ); + } + else if ( is_lethal_grenade( self.zombie_weapon_upgrade ) ) + { + player takeweapon( player get_player_lethal_grenade() ); + player set_player_lethal_grenade( self.zombie_weapon_upgrade ); + } + str_weapon = self.zombie_weapon_upgrade; + if ( isDefined( level.pers_upgrade_nube ) && level.pers_upgrade_nube ) + { + str_weapon = maps/mp/zombies/_zm_pers_upgrades_functions::pers_nube_weapon_upgrade_check( player, str_weapon ); + } + player weapon_give( str_weapon ); + player maps/mp/zombies/_zm_stats::increment_client_stat( "wallbuy_weapons_purchased" ); + player maps/mp/zombies/_zm_stats::increment_player_stat( "wallbuy_weapons_purchased" ); + } + else + { + play_sound_on_ent( "no_purchase" ); + player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_weapon" ); + } + } else { - player_has_weapon = player has_weapon_or_upgrade( self.zombie_weapon_upgrade ); - if ( !player_has_weapon && isDefined( level.weapons_using_ammo_sharing ) && level.weapons_using_ammo_sharing ) - { - shared_ammo_weapon = player get_shared_ammo_weapon( self.zombie_weapon_upgrade ); - if ( isDefined( shared_ammo_weapon ) ) - { - player_has_weapon = 1; - } - } - if ( isDefined( level.pers_upgrade_nube ) && level.pers_upgrade_nube ) - { - player_has_weapon = maps/mp/zombies/_zm_pers_upgrades_functions::pers_nube_should_we_give_raygun( player_has_weapon, player, self.zombie_weapon_upgrade ); - } - cost = get_weapon_cost( self.zombie_weapon_upgrade ); - if ( player maps/mp/zombies/_zm_pers_upgrades_functions::is_pers_double_points_active() ) - { - cost = int( cost / 2 ); - } - if ( !player_has_weapon ) - { - if ( player.score >= cost ) - { - if ( self.first_time_triggered == 0 ) - { - self show_all_weapon_buys( player, cost, ammo_cost, is_grenade ); - } - player maps/mp/zombies/_zm_score::minus_to_player_score( cost, 1 ); - bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, self.zombie_weapon_upgrade, self.origin, "weapon" ); - level notify( "weapon_bought" ); - if ( self.zombie_weapon_upgrade == "riotshield_zm" ) - { - player maps/mp/zombies/_zm_equipment::equipment_give( "riotshield_zm" ); - if ( isDefined( player.player_shield_reset_health ) ) - { - player [[ player.player_shield_reset_health ]](); - } - } - else if ( self.zombie_weapon_upgrade == "jetgun_zm" ) - { - player maps/mp/zombies/_zm_equipment::equipment_give( "jetgun_zm" ); - } - else - { - if ( is_lethal_grenade( self.zombie_weapon_upgrade ) ) - { - player takeweapon( player get_player_lethal_grenade() ); - player set_player_lethal_grenade( self.zombie_weapon_upgrade ); - } - str_weapon = self.zombie_weapon_upgrade; - if ( isDefined( level.pers_upgrade_nube ) && level.pers_upgrade_nube ) - { - str_weapon = maps/mp/zombies/_zm_pers_upgrades_functions::pers_nube_weapon_upgrade_check( player, str_weapon ); - } - player weapon_give( str_weapon ); - } - player maps/mp/zombies/_zm_stats::increment_client_stat( "wallbuy_weapons_purchased" ); - player maps/mp/zombies/_zm_stats::increment_player_stat( "wallbuy_weapons_purchased" ); - } - else - { - play_sound_on_ent( "no_purchase" ); - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_weapon" ); - } - } - else str_weapon = self.zombie_weapon_upgrade; + str_weapon = self.zombie_weapon_upgrade; if ( isDefined( shared_ammo_weapon ) ) { str_weapon = shared_ammo_weapon; @@ -2345,17 +2165,13 @@ weapon_spawn_think() ammo_cost = get_ammo_cost( str_weapon ); } } + else if ( player has_upgrade( str_weapon ) ) + { + ammo_cost = 4500; + } else { - if ( player has_upgrade( str_weapon ) ) - { - ammo_cost = 4500; - break; - } - else - { - ammo_cost = get_ammo_cost( str_weapon ); - } + ammo_cost = get_ammo_cost( str_weapon ); } if ( isDefined( player.pers_upgrades_awarded[ "nube" ] ) && player.pers_upgrades_awarded[ "nube" ] ) { @@ -2410,36 +2226,36 @@ weapon_spawn_think() bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, ammo_cost, str_weapon, self.origin, "ammo" ); } } - else play_sound_on_ent( "no_purchase" ); - if ( isDefined( level.custom_generic_deny_vo_func ) ) - { - player [[ level.custom_generic_deny_vo_func ]](); - } else { - player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_weapon" ); - } - if ( isDefined( self.stub ) && isDefined( self.stub.prompt_and_visibility_func ) ) - { - self [[ self.stub.prompt_and_visibility_func ]]( player ); + play_sound_on_ent( "no_purchase" ); + if ( isDefined( level.custom_generic_deny_vo_func ) ) + { + player [[ level.custom_generic_deny_vo_func ]](); + } + else + { + player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_weapon" ); + } } } + if ( isDefined( self.stub ) && isDefined( self.stub.prompt_and_visibility_func ) ) + { + self [[ self.stub.prompt_and_visibility_func ]]( player ); + } } } -show_all_weapon_buys( player, cost, ammo_cost, is_grenade ) +show_all_weapon_buys( player, cost, ammo_cost, is_grenade ) //checked changed to match cerberus output { model = getent( self.target, "targetname" ); if ( isDefined( model ) ) { model thread weapon_show( player ); } - else + else if ( isDefined( self.clientfieldname ) ) { - if ( isDefined( self.clientfieldname ) ) - { - level setclientfield( self.clientfieldname, 1 ); - } + level setclientfield( self.clientfieldname, 1 ); } self.first_time_triggered = 1; if ( isDefined( self.stub ) ) @@ -2461,46 +2277,37 @@ show_all_weapon_buys( player, cost, ammo_cost, is_grenade ) i++; continue; } - else + if ( self.zombie_weapon_upgrade == wallbuy.zombie_weapon_upgrade ) { - if ( self.zombie_weapon_upgrade == wallbuy.zombie_weapon_upgrade ) + if ( isDefined( wallbuy.trigger_stub ) && isDefined( wallbuy.trigger_stub.clientfieldname ) ) { - if ( isDefined( wallbuy.trigger_stub ) && isDefined( wallbuy.trigger_stub.clientfieldname ) ) + level setclientfield( wallbuy.trigger_stub.clientfieldname, 1 ); + } + else if ( isDefined( wallbuy.target ) ) + { + model = getent( wallbuy.target, "targetname" ); + if ( isDefined( model ) ) { - level setclientfield( wallbuy.trigger_stub.clientfieldname, 1 ); + model thread weapon_show( player ); } - else - { - if ( isDefined( wallbuy.target ) ) - { - model = getent( wallbuy.target, "targetname" ); - if ( isDefined( model ) ) - { - model thread weapon_show( player ); - } - } - } - if ( isDefined( wallbuy.trigger_stub ) ) - { - wallbuy.trigger_stub.first_time_triggered = 1; - if ( isDefined( wallbuy.trigger_stub.trigger ) ) - { - wallbuy.trigger_stub.trigger.first_time_triggered = 1; - if ( !is_grenade ) - { - wallbuy.trigger_stub.trigger weapon_set_first_time_hint( cost, ammo_cost ); - } - } - i++; - continue; - } - else + } + if ( isDefined( wallbuy.trigger_stub ) ) + { + wallbuy.trigger_stub.first_time_triggered = 1; + if ( isDefined( wallbuy.trigger_stub.trigger ) ) { + wallbuy.trigger_stub.trigger.first_time_triggered = 1; if ( !is_grenade ) { - wallbuy weapon_set_first_time_hint( cost, ammo_cost ); + wallbuy.trigger_stub.trigger weapon_set_first_time_hint( cost, ammo_cost ); } } + i++; + continue; + } + if ( !is_grenade ) + { + wallbuy weapon_set_first_time_hint( cost, ammo_cost ); } } i++; @@ -2508,7 +2315,7 @@ show_all_weapon_buys( player, cost, ammo_cost, is_grenade ) } } -weapon_show( player ) +weapon_show( player ) //checked matches cerberus output { player_angles = vectorToAngles( player.origin - self.origin ); player_yaw = player_angles[ 1 ]; @@ -2538,7 +2345,7 @@ weapon_show( player ) } } -get_pack_a_punch_weapon_options( weapon ) +get_pack_a_punch_weapon_options( weapon ) //checked changed to match cerberus output { if ( !isDefined( self.pack_a_punch_weapon_options ) ) { @@ -2559,12 +2366,9 @@ get_pack_a_punch_weapon_options( weapon ) { camo_index = 40; } - else + else if ( level.script == "zm_tomb" ) { - if ( level.script == "zm_tomb" ) - { - camo_index = 45; - } + camo_index = 45; } lens_index = randomintrange( 0, 6 ); reticle_index = randomintrange( 0, 16 ); @@ -2576,21 +2380,10 @@ get_pack_a_punch_weapon_options( weapon ) { reticle_index = smiley_face_reticle_index; } - else + else if ( use_plain ) { - if ( use_plain ) - { - reticle_index = plain_reticle_index; - } + reticle_index = plain_reticle_index; } -/* -/# - if ( getDvarInt( #"471F9AB9" ) >= 0 ) - { - reticle_index = getDvarInt( #"471F9AB9" ); -#/ - } -*/ scary_eyes_reticle_index = 8; purple_reticle_color_index = 3; if ( reticle_index == scary_eyes_reticle_index ) @@ -2613,16 +2406,11 @@ get_pack_a_punch_weapon_options( weapon ) return self.pack_a_punch_weapon_options[ weapon ]; } -weapon_give( weapon, is_upgrade, magic_box, nosound ) +weapon_give( weapon, is_upgrade, magic_box, nosound ) //checked changed to match cerberus output { primaryweapons = self getweaponslistprimaries(); current_weapon = self getcurrentweapon(); current_weapon = self maps/mp/zombies/_zm_weapons::switch_from_alt_weapon( current_weapon ); - /* -/# - assert( self player_can_use_content( weapon ) ); -#/ - */ if ( !isDefined( is_upgrade ) ) { is_upgrade = 0; @@ -2676,18 +2464,15 @@ weapon_give( weapon, is_upgrade, magic_box, nosound ) } self set_player_tactical_grenade( weapon ); } - else + else if ( is_placeable_mine( weapon ) ) { - if ( is_placeable_mine( weapon ) ) + old_mine = self get_player_placeable_mine(); + if ( isDefined( old_mine ) ) { - old_mine = self get_player_placeable_mine(); - if ( isDefined( old_mine ) ) - { - self takeweapon( old_mine ); - unacquire_weapon_toggle( old_mine ); - } - self set_player_placeable_mine( weapon ); + self takeweapon( old_mine ); + unacquire_weapon_toggle( old_mine ); } + self set_player_placeable_mine( weapon ); } if ( !is_offhand_weapon( weapon ) ) { @@ -2733,14 +2518,11 @@ weapon_give( weapon, is_upgrade, magic_box, nosound ) { weapon = self maps/mp/zombies/_zm_melee_weapon::give_ballistic_knife( weapon, issubstr( weapon, "upgraded" ) ); } - else + else if ( weapon == "claymore_zm" ) { - if ( weapon == "claymore_zm" ) - { - self thread maps/mp/zombies/_zm_weap_claymore::claymore_setup(); - self play_weapon_vo( weapon, magic_box ); - return; - } + self thread maps/mp/zombies/_zm_weap_claymore::claymore_setup(); + self play_weapon_vo( weapon, magic_box ); + return; } if ( isDefined( level.zombie_weapons_callbacks ) && isDefined( level.zombie_weapons_callbacks[ weapon ] ) ) { @@ -2780,7 +2562,7 @@ weapon_give( weapon, is_upgrade, magic_box, nosound ) self play_weapon_vo( weapon, magic_box ); } -play_weapon_vo( weapon, magic_box ) +play_weapon_vo( weapon, magic_box ) //checked matches cerberus output { if ( isDefined( level._audio_custom_weapon_check ) ) { @@ -2801,7 +2583,7 @@ play_weapon_vo( weapon, magic_box ) self maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", type ); } -weapon_type_check( weapon ) +weapon_type_check( weapon ) //checked matches cerberus output { if ( !isDefined( self.entity_num ) ) { @@ -2822,27 +2604,12 @@ weapon_type_check( weapon ) } } -get_player_index( player ) +get_player_index( player ) //checked matches cerberus output { -/* -/# - assert( isplayer( player ) ); -#/ -/# - assert( isDefined( player.characterindex ) ); -#/ -/# - if ( player.entity_num == 0 && getDvar( #"2222BA21" ) != "" ) - { - new_vo_index = getDvarInt( #"2222BA21" ); - return new_vo_index; -#/ - } - */ return player.characterindex; } -ammo_give( weapon ) +ammo_give( weapon ) //checked changed to match cerberus output { give_ammo = 0; if ( !is_offhand_weapon( weapon ) ) @@ -2854,7 +2621,7 @@ ammo_give( weapon ) stockmax = weaponstartammo( weapon ); clipcount = self getweaponammoclip( weapon ); currstock = self getammocount( weapon ); - if ( ( currstock - clipcount ) >= stockmax ) + if ( currstock - clipcount >= stockmax ) { give_ammo = 0; } @@ -2864,14 +2631,11 @@ ammo_give( weapon ) } } } - else + else if ( self has_weapon_or_upgrade( weapon ) ) { - if ( self has_weapon_or_upgrade( weapon ) ) + if ( self getammocount( weapon ) < weaponmaxammo( weapon ) ) { - if ( self getammocount( weapon ) < weaponmaxammo( weapon ) ) - { - give_ammo = 1; - } + give_ammo = 1; } } if ( give_ammo ) @@ -2891,7 +2655,7 @@ ammo_give( weapon ) } } -get_player_weapondata( player, weapon ) +get_player_weapondata( player, weapon ) //checked matches cerberus output { weapondata = []; if ( !isDefined( weapon ) ) @@ -2941,7 +2705,7 @@ get_player_weapondata( player, weapon ) return weapondata; } -weapon_is_better( left, right ) +weapon_is_better( left, right ) //checked changed to match cerberus output { if ( left != right ) { @@ -2953,18 +2717,15 @@ weapon_is_better( left, right ) rightatt = get_attachment_index( right ); return leftatt > rightatt; } - else + else if ( left_upgraded ) { - if ( left_upgraded ) - { - return 1; - } + return 1; } } return 0; } -merge_weapons( oldweapondata, newweapondata ) +merge_weapons( oldweapondata, newweapondata ) //checked matches cerberus output { weapondata = []; weapondata[ "name" ] = "none"; @@ -3005,7 +2766,7 @@ merge_weapons( oldweapondata, newweapondata ) return weapondata; } -weapondata_give( weapondata ) +weapondata_give( weapondata ) //checked matches cerberus output { current = get_player_weapon_with_same_base( weapondata[ "name" ] ); if ( isDefined( current ) ) @@ -3042,7 +2803,7 @@ weapondata_give( weapondata ) } } -register_zombie_weapon_callback( str_weapon, func ) +register_zombie_weapon_callback( str_weapon, func ) //checked matches cerberus output { if ( !isDefined( level.zombie_weapons_callbacks ) ) { @@ -3056,3 +2817,8 @@ register_zombie_weapon_callback( str_weapon, func ) + + + + +