1 #using scripts\shared\clientfield_shared;
2 #using scripts\shared\flag_shared;
3 #using scripts\shared\util_shared;
4 #using scripts\shared\system_shared;
5 #using scripts\shared\callbacks_shared;
6 #using scripts\shared\flag_shared;
7 #using scripts\shared\flagsys_shared;
9 #insert scripts\shared\shared.gsh;
10 #insert scripts\shared\version.gsh;
11 #insert scripts\shared\ai\zombie.gsh;
15 #define PLAYER_RADIUS 15
16 #define PLAYER_HALF_HEIGHT 16
17 #define PLAYER_POS_SEARCH_RADIUS 100
18 #define LARGE_SEARCH_RADIUS 2048
32 mapname = GetDvarString(
"mapname" );
34 if( mapname ===
"core_frontend" )
39 if( SessionModeIsZombiesGame() || SessionModeIsCampaignGame() )
45 self SetOrigin( snappedOrigin );
49 isMultiplayer = !SessionModeIsZombiesGame() && !SessionModeIsCampaignGame();
51 if ( !isMultiplayer ||
IS_TRUE( level._enableLastValidPosition ) )
60 self endon(
"disconnect" );
62 self notify(
"stop_last_valid_position" );
63 self endon(
"stop_last_valid_position" );
83 if ( IsDefined( level.last_valid_position_override ) &&
self [[ level.last_valid_position_override ]]() )
88 else if ( IsPointOnNavMesh(
self.origin,
self ) )
90 self.last_valid_position =
self.origin;
92 else if( !IsPointOnNavmesh(
self.origin,
self )
104 if ( isdefined( position ) )
106 self.last_valid_position = position;
116 if ( !
IS_TRUE(
self.gun_removed ) )
118 self.gun_removed =
true;
126 DEFAULT(
self._current_weapon, level.weaponNone );
128 w_current =
self GetCurrentWeapon();
129 if ( w_current != level.weaponNone )
131 self._current_weapon = w_current;
134 a_weapon_list =
self GetWeaponsList();
139 if (
self._current_weapon == level.weaponNone )
141 if ( isdefined( a_weapon_list[ 0 ] ) )
143 self._current_weapon = a_weapon_list[ 0 ];
147 foreach ( weapon
in a_weapon_list )
155 self TakeWeapon( weapon );
162 self._generated_weapons = [];
164 DEFAULT(
self._generated_current_weapon, level.weaponNone );
166 if(
IS_TRUE(
self.gun_removed ) && IsDefined(
self._weapons ) )
168 self._generated_weapons = ArrayCopy(
self._weapons );
169 self._generated_current_weapon =
self._current_weapon;
173 w_current =
self GetCurrentWeapon();
174 if ( w_current != level.weaponNone )
176 self._generated_current_weapon = w_current;
179 a_weapon_list =
self GetWeaponsList();
184 if (
self._generated_current_weapon == level.weaponNone )
186 if ( isdefined( a_weapon_list[ 0 ] ) )
188 self._generated_current_weapon = a_weapon_list[ 0 ];
192 foreach ( weapon
in a_weapon_list )
205 if ( isdefined(
self._weapons ) )
207 foreach ( weapondata
in self._weapons )
212 if ( isdefined(
self._current_weapon ) && (
self._current_weapon != level.weaponNone ) )
216 self SwitchToWeaponImmediate(
self._current_weapon );
220 self SwitchToWeapon(
self._current_weapon );
223 else if ( isdefined(
self.primaryloadoutweapon ) &&
self HasWeapon(
self.primaryloadoutweapon ) )
229 self._weapons = undefined;
230 self.gun_removed = undefined;
237 if ( !isdefined( weapon ) )
239 weapon =
self GetCurrentWeapon();
242 weapondata[
"weapon" ] = weapon.name;
244 if ( weapon != level.weaponNone )
246 weapondata[
"clip" ] =
self GetWeaponAmmoClip( weapon );
247 weapondata[
"stock" ] =
self GetWeaponAmmoStock( weapon );
248 weapondata[
"fuel" ] =
self GetWeaponAmmoFuel( weapon );
249 weapondata[
"heat" ] =
self IsWeaponOverheating( 1, weapon );
250 weapondata[
"overheat" ] =
self IsWeaponOverheating( 0, weapon );
251 weapondata[
"renderOptions" ] =
self GetWeaponOptions( weapon );
252 weapondata[
"acvi" ] =
self GetPlayerAttachmentCosmeticVariantIndexes( weapon );
254 if ( weapon.isRiotShield )
256 weapondata[
"health" ] =
self.weaponHealth;
261 weapondata[
"clip" ] = 0;
262 weapondata[
"stock" ] = 0;
263 weapondata[
"fuel" ] = 0;
264 weapondata[
"heat" ] = 0;
265 weapondata[
"overheat" ] = 0;
268 if ( weapon.dualWieldWeapon != level.weaponNone )
270 weapondata[
"lh_clip" ] =
self GetWeaponAmmoClip( weapon.dualWieldWeapon );
274 weapondata[
"lh_clip" ] = 0;
277 if ( weapon.altWeapon != level.weaponNone )
279 weapondata[
"alt_clip" ] =
self GetWeaponAmmoClip( weapon.altWeapon );
280 weapondata[
"alt_stock" ] =
self GetWeaponAmmoStock( weapon.altWeapon );
284 weapondata[
"alt_clip" ] = 0;
285 weapondata[
"alt_stock" ] = 0;
295 self GiveWeapon( weapon, weapondata[
"renderOptions" ], weapondata[
"acvi" ] );
297 if ( weapon != level.weaponNone )
299 self SetWeaponAmmoClip( weapon, weapondata[
"clip" ] );
300 self SetWeaponAmmoStock( weapon, weapondata[
"stock" ] );
302 if ( IsDefined( weapondata[
"fuel" ] ) )
304 self SetWeaponAmmoFuel( weapon, weapondata[
"fuel" ] );
307 if ( IsDefined( weapondata[
"heat" ] ) && IsDefined( weapondata[
"overheat" ] ) )
309 self SetWeaponOverheating( weapondata[
"overheat" ], weapondata[
"heat" ], weapon );
312 if ( weapon.isRiotShield && IsDefined( weapondata[
"health" ] ) )
314 self.weaponHealth = weapondata[
"health" ];
318 if ( weapon.dualWieldWeapon != level.weaponNone )
320 self SetWeaponAmmoClip( weapon.dualWieldWeapon, weapondata[
"lh_clip" ] );
323 if ( weapon.altWeapon != level.weaponNone )
325 self SetWeaponAmmoClip( weapon.altWeapon, weapondata[
"alt_clip" ] );
326 self SetWeaponAmmoStock( weapon.altWeapon, weapondata[
"alt_stock" ] );
336 self SwitchToWeaponImmediate(
self.primaryloadoutweapon );
340 self SwitchToWeapon(
self.primaryloadoutweapon );
347 w_current =
self GetCurrentWeapon();
348 if ( w_current.isheroweapon )
350 w_current =
self.primaryloadoutweapon;
353 if ( isdefined( w_current ) &&
self HasWeapon( w_current ) )
355 self SetWeaponAmmoClip( w_current, w_current.clipsize );
361 return ( isdefined( weaponObject ) && ( weaponObject != level.weaponNone ) );
366 return ( GetTime() -
VAL(
self.spawntime, 0 ) <= level.spawnProtectionTimeMS );
378 self [[ level.onSpawnPlayer ]]( false );
383 snap_max_height = 100;
386 mins = (-1 * size, -1 * size, 0 );
387 maxs = ( size, size, height );
389 spot_position = (spot_position[0], spot_position[1], spot_position[2] + 5);
390 new_spot_position = ( spot_position[0], spot_position[1], spot_position[2] - snap_max_height);
392 trace = physicstrace( spot_position, new_spot_position, mins, maxs,
self);
394 if (
trace[
"fraction"] < 1 )
396 return trace[
"position"];
399 return spot_position;
406 self AllowProne(
true );
407 self AllowCrouch(
true );
408 self AllowStand(
true );
412 str_stance =
self GetStance();
414 switch ( str_stance )
418 self AllowProne(
true );
419 self AllowCrouch(
false );
420 self AllowStand(
false );
426 self AllowProne(
false );
427 self AllowCrouch(
true );
428 self AllowStand(
false );
434 self AllowProne(
false );
435 self AllowCrouch(
false );
436 self AllowStand(
true );