1 #using scripts\codescripts\struct;
3 #using scripts\shared\array_shared;
4 #using scripts\shared\callbacks_shared;
5 #using scripts\shared\clientfield_shared;
6 #using scripts\shared\compass;
7 #using scripts\shared\exploder_shared;
8 #using scripts\shared\flag_shared;
9 #using scripts\shared\laststand_shared;
10 #using scripts\shared\math_shared;
11 #using scripts\shared\scene_shared;
12 #using scripts\shared\util_shared;
14 #insert scripts\shared\shared.gsh;
15 #insert scripts\shared\version.gsh;
17 #insert scripts\zm\_zm_utility.gsh;
19 #using scripts\zm\_load;
20 #using scripts\zm\_zm;
21 #using scripts\zm\_zm_audio;
22 #using scripts\zm\_zm_powerups;
23 #using scripts\zm\_zm_utility;
24 #using scripts\zm\_zm_weapons;
25 #using scripts\zm\_zm_zonemgr;
29 #using scripts\zm\_zm_pack_a_punch;
30 #using scripts\zm\_zm_pack_a_punch_util;
31 #using scripts\zm\_zm_perk_additionalprimaryweapon;
32 #using scripts\zm\_zm_perk_doubletap2;
33 #using scripts\zm\_zm_perk_deadshot;
34 #using scripts\zm\_zm_perk_juggernaut;
35 #using scripts\zm\_zm_perk_quick_revive;
36 #using scripts\zm\_zm_perk_sleight_of_hand;
37 #using scripts\zm\_zm_perk_staminup;
40 #using scripts\zm\_zm_powerup_double_points;
41 #using scripts\zm\_zm_powerup_carpenter;
42 #using scripts\zm\_zm_powerup_fire_sale;
43 #using scripts\zm\_zm_powerup_free_perk;
44 #using scripts\zm\_zm_powerup_full_ammo;
45 #using scripts\zm\_zm_powerup_insta_kill;
46 #using scripts\zm\_zm_powerup_nuke;
47 #using scripts\zm\_zm_powerup_weapon_minigun;
50 #using scripts\zm\_zm_weap_bowie;
51 #using scripts\zm\_zm_weap_bouncingbetty;
52 #using scripts\zm\_zm_weap_cymbal_monkey;
53 #using scripts\zm\_zm_weap_tesla;
56 #using scripts\zm\_zm_trap_electric;
59 #using scripts\shared\ai\zombie;
60 #using scripts\shared\ai\behavior_zombie_dog;
61 #using scripts\shared\ai\zombie_utility;
63 #using scripts\zm\_zm_ai_dogs;
65 #using scripts\shared\ai\systems\animation_state_machine_utility;
66 #using scripts\shared\ai\systems\animation_state_machine_notetracks;
67 #using scripts\shared\ai\systems\animation_state_machine_mocomp;
68 #using scripts\shared\ai\systems\behavior_tree_utility;
69 #insert scripts\shared\ai\systems\animation_state_machine.gsh;
70 #insert scripts\shared\ai\systems\behavior.gsh;
72 #namespace zm_usermap_ai;
84 SetDvar(
"scr_zm_use_code_enemy_selection", 0 );
89 level.move_valid_poi_to_navmesh =
true;
107 if ( isdefined( entity.traverseStartNode ) )
109 entity PushActors(
false );
118 if( IsDefined( entity.enemyoverride ) && IsDefined( entity.enemyoverride[1] ) )
120 entity OrientMode(
"face direction", entity.enemyoverride[1].origin - entity.origin );
125 entity OrientMode(
"face current" );
137 return IS_TRUE( entity.low_gravity );
145 if ( isdefined(
self.last_closest_player ) &&
IS_TRUE(
self.last_closest_player.am_i_valid ) )
150 self.need_closest_player =
true;
152 foreach( player
in players )
154 if (
IS_TRUE( player.am_i_valid ) )
156 self.last_closest_player = player;
161 self.last_closest_player = undefined;
166 if ( players.size == 0 )
171 if ( IsDefined(
self.zombie_poi ) )
176 if ( players.size == 1 )
178 self.last_closest_player = players[0];
179 return self.last_closest_player;
182 if ( !isdefined(
self.last_closest_player ) )
184 self.last_closest_player = players[0];
187 if ( !isdefined(
self.need_closest_player ) )
189 self.need_closest_player =
true;
192 if ( isdefined( level.last_closest_time ) && level.last_closest_time >= level.time )
195 return self.last_closest_player;
198 if (
IS_TRUE(
self.need_closest_player ) )
200 level.last_closest_time = level.time;
202 self.need_closest_player =
false;
204 closest = players[0];
207 if ( !isdefined( closest_dist ) )
212 for ( index = 1; index < players.size; index++ )
215 if ( isdefined( dist ) )
217 if ( isdefined( closest_dist ) )
219 if ( dist < closest_dist )
221 closest = players[ index ];
227 closest = players[ index ];
233 self.last_closest_player = closest;
236 if ( players.size > 1 && isdefined( closest ) )
242 return self.last_closest_player;
247 level waittill(
"start_of_round" );
251 reset_closest_player =
true;
253 foreach( zombie
in zombies )
255 if (
IS_TRUE( zombie.need_closest_player ) )
257 reset_closest_player =
false;
262 if ( reset_closest_player )
264 foreach( zombie
in zombies )
266 if ( isdefined( zombie.need_closest_player ) )
268 zombie.need_closest_player =
true;