Call of duty bo3: ZM Cleanup
Jump to navigation
Jump to search
Explanation
This code here will allow for 2 things:
- Removing and re-spawning Zombies too far from the player into a zone closer to the player
- Add Point Of Interest using "dog_location" for Zombies during Solo Revive or Zombie Blood
Code
- In your Map GSC, before the first Main function add this:
#using scripts\zm\zm_giant_cleanup_mgr;
- After the zm_usermap::main() in the Main function add this:
level.enemy_location_override_func = &enemy_location_override; level.no_target_override = &no_target_override;
- Now after the main function add this new functions:
function enemy_location_override( zombie, enemy ) { AIProfile_BeginEntry( "factory-enemy_location_override" ); if ( IS_TRUE( zombie.is_trapped ) ) { AIProfile_EndEntry(); return zombie.origin; } AIProfile_EndEntry(); return undefined; } // -------------------------------- // NO TARGET OVERRIDE // -------------------------------- function validate_and_set_no_target_position( position ) { if( IsDefined( position ) ) { goal_point = GetClosestPointOnNavMesh( position.origin, 100 ); if( IsDefined( goal_point ) ) { self SetGoal( goal_point ); self.has_exit_point = 1; return true; } } return false; } function no_target_override( zombie ) { if( isdefined( zombie.has_exit_point ) ) { return; } players = level.players; dist_zombie = 0; dist_player = 0; dest = 0; if ( isdefined( level.zm_loc_types[ "dog_location" ] ) ) { locs = array::randomize( level.zm_loc_types[ "dog_location" ] ); for ( i = 0; i < locs.size; i++ ) { found_point = false; foreach( player in players ) { if( player laststand::player_is_in_laststand() ) { continue; } away = VectorNormalize( self.origin - player.origin ); endPos = self.origin + VectorScale( away, 600 ); dist_zombie = DistanceSquared( locs[i].origin, endPos ); dist_player = DistanceSquared( locs[i].origin, player.origin ); if ( dist_zombie < dist_player ) { dest = i; found_point= true; } else { found_point = false; } } if( found_point ) { if( zombie validate_and_set_no_target_position( locs[i] ) ) { return; } } } } escape_position = zombie giant_cleanup::get_escape_position_in_current_zone(); if( zombie validate_and_set_no_target_position( escape_position ) ) { return; } escape_position = zombie giant_cleanup::get_escape_position(); if( zombie validate_and_set_no_target_position( escape_position ) ) { return; } zombie.has_exit_point = 1; zombie SetGoal( zombie.origin ); }
Zone File
- In your Zone file add this line:
scriptparsetree,scripts/zm/zm_giant_cleanup_mgr.gsc
Credits
This is Treyarch's code, as seen in The Giant
~~