1 #using scripts\codescripts\struct;
3 #using scripts\shared\array_shared;
4 #using scripts\shared\bb_shared;
5 #using scripts\shared\challenges_shared;
6 #using scripts\shared\gameobjects_shared;
7 #using scripts\shared\util_shared;
8 #using scripts\shared\weapons_shared;
10 #insert scripts\shared\shared.gsh;
12 #using scripts\zm\gametypes\_globallogic_utils;
13 #using scripts\zm\gametypes\_shellshock;
14 #using scripts\zm\gametypes\_weapon_utils;
15 #using scripts\zm\gametypes\_weaponobjects;
17 #using scripts\zm\_bb;
18 #using scripts\zm\_challenges;
19 #using scripts\zm\_util;
20 #using scripts\zm\_zm_pers_upgrades_functions;
24 #precache( "material", "hud_scavenger_pickup" );
28 level.missileEntities = [];
29 level.hackerToolTargets = [];
31 if ( !isdefined(level.grenadeLauncherDudTime) )
32 level.grenadeLauncherDudTime = 0;
34 if ( !isdefined(level.thrownGrenadeDudTime) )
35 level.thrownGrenadeDudTime = 0;
44 level waittill(
"connecting", player);
46 player.usedWeapons =
false;
47 player.lastFireTime = 0;
57 self endon(
"disconnect");
61 self waittill(
"spawned_player");
63 self.concussionEndTime = 0;
64 self.hasDoneCombat =
false;
65 self.shieldDamageBlocked = 0;
74 self.droppedDeathWeapon = undefined;
75 self.tookWeaponFrom = [];
76 self.pickedUpWeaponKills = [];
85 self endon(
"disconnect");
87 self.lastDroppableWeapon =
self GetCurrentWeapon();
91 previous_weapon =
self GetCurrentWeapon();
92 self waittill(
"weapon_change", newWeapon );
96 self.lastDroppableWeapon = newWeapon;
122 if ( isdefined(
self.currentWeapon ) && isdefined(
self.currentWeaponStartTime ) )
124 totalTime = int ( ( newTime -
self.currentWeaponStartTime ) / 1000 );
127 self AddWeaponStat(
self.currentWeapon,
"timeUsed", totalTime );
128 self.currentWeaponStartTime = newTime;
142 if ( !isdefined(
self.staticWeaponsStartTime ) )
147 totalTime = int ( ( newTime -
self.staticWeaponsStartTime ) / 1000 );
154 self.staticWeaponsStartTime = newTime;
158 if( isdefined(
self.weapon_array_grenade ) )
160 for( i=0; i<
self.weapon_array_grenade.size; i++ )
162 self AddWeaponStat(
self.weapon_array_grenade[i],
"timeUsed", totalTime );
165 if( isdefined(
self.weapon_array_inventory ) )
167 for( i=0; i<
self.weapon_array_inventory.size; i++ )
169 self AddWeaponStat(
self.weapon_array_inventory[i],
"timeUsed", totalTime );
174 if( isdefined(
self.killstreak ) )
176 for( i=0; i<
self.killstreak.size; i++ )
178 killstreakWeapon = level.menuReferenceForKillStreak[
self.killstreak[i] ];
179 if ( isdefined( killstreakWeapon ) )
181 self AddWeaponStat( killstreakWeapon,
"timeUsed", totalTime );
187 if ( level.rankedmatch && level.perksEnabled )
189 perksIndexArray = [];
191 specialtys =
self.specialty;
193 if ( !isdefined( specialtys ) )
198 if ( !isdefined(
self.curClass ) )
203 if ( isdefined(
self.class_num ) )
205 for ( numSpecialties = 0; numSpecialties < level.maxSpecialties; numSpecialties++ )
207 perk =
self GetLoadoutItem(
self.class_num,
"specialty" + ( numSpecialties + 1 ) );
210 perksIndexArray[ perk ] =
true;
214 perkIndexArrayKeys = getarraykeys( perksIndexArray );
215 for ( i = 0; i < perkIndexArrayKeys.size; i ++ )
217 if ( perksIndexArray[ perkIndexArrayKeys[i] ] ==
true )
219 self AddDStat(
"itemStats", perkIndexArrayKeys[i],
"stats",
"timeUsed",
"statValue", totalTime );
228 currentWeapon =
self getCurrentWeapon();
229 currentTime = getTime();
230 spawnid = getplayerspawnid(
self );
237 if( event ==
"weapon_change" )
239 newWeapon =
self getCurrentWeapon();
240 if( newWeapon != level.weaponNone && newWeapon != currentWeapon )
245 currentWeapon = newWeapon;
246 currentTime = newTime;
251 if( event !=
"disconnect" )
263 if ( level.disableWeaponDrop == 1 )
266 if ( weapon == level.weaponNone )
269 if ( !weapon.isPrimary )
277 if ( level.disableWeaponDrop == 1 )
280 weapon =
self.lastDroppableWeapon;
282 if ( isdefined(
self.droppedDeathWeapon ) )
285 if ( !isdefined( weapon ) )
290 if ( weapon == level.weaponNone )
295 if ( !
self hasWeapon( weapon ) )
300 if ( !(
self AnyAmmoForWeaponModes( weapon )) )
310 clipAmmo =
self GetWeaponAmmoClip( weapon );
311 stockAmmo =
self GetWeaponAmmoStock( weapon );
312 clip_and_stock_ammo = clipAmmo + stockAmmo;
315 if( !clip_and_stock_ammo )
320 stockMax = weapon.maxAmmo;
321 if ( stockAmmo > stockMax )
322 stockAmmo = stockMax;
324 item =
self dropItem( weapon );
326 if ( !isdefined( item ) )
334 self.droppedDeathWeapon =
true;
336 item ItemWeaponSetAmmo( clipAmmo, stockAmmo );
339 item.ownersattacker = attacker;
352 if ( !isdefined(
self ) )
366 self waittill(
"trigger", player, droppedItem );
368 if ( isdefined( droppedItem ) )
373 assert( isdefined( player.tookWeaponFrom ) );
374 assert( isdefined( player.pickedUpWeaponKills ) );
376 if ( isdefined( droppedItem ) )
378 for ( i = 0; i < droppedItem.size; i++ )
380 if ( !IsDefined( droppedItem[i] ) )
386 droppedWeapon = droppedItem[i].item;
387 if ( isdefined( player.tookWeaponFrom[ droppedWeapon ] ) )
389 droppedItem[i].owner = player.tookWeaponFrom[ droppedWeapon ];
390 droppedItem[i].ownersattacker = player;
391 player.tookWeaponFrom[ droppedWeapon ] = undefined;
398 if ( isdefined(
self.ownersattacker ) &&
self.ownersattacker == player )
400 player.tookWeaponFrom[ weapon ] =
self.owner;
401 player.pickedUpWeaponKills[ weapon ] = 0;
405 player.tookWeaponFrom[ weapon ] = undefined;
406 player.pickedUpWeaponKills[ weapon ] = undefined;
412 self endon(
"death" );
413 self endon(
"disconnect" );
414 level endon (
"game_ended" );
417 self.usedKillstreakWeapon = [];
418 self.usedKillstreakWeapon[
"minigun"] =
false;
419 self.usedKillstreakWeapon[
"m32"] =
false;
420 self.usedKillstreakWeapon[
"m202_flash"] =
false;
421 self.usedKillstreakWeapon[
"m220_tow"] =
false;
422 self.usedKillstreakWeapon[
"mp40_blinged"] =
false;
423 self.killstreakType = [];
424 self.killstreakType[
"minigun"] =
"minigun";
425 self.killstreakType[
"m32"] =
"m32";
426 self.killstreakType[
"m202_flash"] =
"m202_flash";
427 self.killstreakType[
"m220_tow"] =
"m220_tow";
428 self.killstreakType[
"mp40_blinged"] =
"mp40_blinged_drop";
432 self waittill (
"weapon_fired", curWeapon );
433 self.lastFireTime = GetTime();
435 self.hasDoneCombat =
true;
437 switch ( curWeapon.weapClass )
445 level.globalShotsFired++;
447 case "rocketlauncher":
449 self AddWeaponStat( curWeapon,
"shots", 1 );
469 if ( isdefined(
self.lastStandParams ) &&
self.lastStandParams.lastStandStartTime == getTime() )
475 pixbeginevent(
"trackWeaponFire");
477 misses = int( max( 0, shotsFired -
self.hits ) );
479 self AddWeaponStat( curWeapon,
"shots", shotsFired );
480 self AddWeaponStat( curWeapon,
"hits",
self.hits );
481 self AddWeaponStat( curWeapon,
"misses", misses );
485 if ( isdefined( level.add_client_stat ) )
487 self [[level.add_client_stat]](
"total_shots", shotsFired );
488 self [[level.add_client_stat]](
"hits",
self.hits );
489 self [[level.add_client_stat]](
"misses", misses );
493 self AddPlayerStat(
"total_shots", shotsFired );
494 self AddPlayerStat(
"hits",
self.hits );
495 self AddPlayerStat(
"misses", misses );
498 self IncrementPlayerStat(
"total_shots", shotsFired );
499 self IncrementPlayerStat(
"hits",
self.hits );
500 self IncrementPlayerStat(
"misses", misses );
510 self endon(
"death" );
511 self endon(
"disconnect" );
513 self.throwingGrenade =
false;
514 self.gotPullbackNotify =
false;
524 self waittill (
"grenade_pullback", weapon );
526 self AddWeaponStat( weapon,
"shots", 1 );
528 self.hasDoneCombat =
true;
530 self.throwingGrenade =
true;
531 self.gotPullbackNotify =
true;
533 if ( weapon.drawOffhandModelInHand )
535 self SetOffhandVisible(
true );
545 self endon(
"death" );
546 self endon(
"disconnect" );
547 level endon (
"game_ended" );
551 self waittill (
"missile_fire", missile, weapon );
553 self.hasDoneCombat =
true;
556 level.missileEntities[ level.missileEntities.size ] = missile;
557 missile.weapon = weapon;
564 self waittill(
"death" );
565 ArrayRemoveValue( level.missileEntities,
self );
570 weapons = GetDroppedWeapons();
571 for ( i = 0 ; i < weapons.size ; i++ )
573 if ( DistanceSquared( origin, weapons[i].origin ) < radius * radius )
575 trace = bullettrace( weapons[i].origin, weapons[i].origin + (0,0,-2000),
false, weapons[i] );
576 weapons[i].origin =
trace[
"position"];
583 grenades = getentarray(
"grenade",
"classname" );
584 for( i = 0 ; i < grenades.size ; i++ )
586 if( DistanceSquared( origin, grenades[i].origin )< radius * radius )
588 grenades[i]
launch( (5,5,5) );
595 self endon (
"death" );
596 self endon (
"disconnect" );
597 self endon (
"grenade_fire" );
600 weapon = level.weaponNone;
602 while(
self IsThrowingGrenade() && weapon == level.weaponNone )
604 self waittill(
"weapon_change", weapon );
607 self.throwingGrenade =
false;
608 self.gotPullbackNotify =
false;
614 self notify(
"watchOffhandEnd" );
615 self endon(
"watchOffhandEnd" );
621 if (( msg ==
"death" ) || ( msg ==
"disconnect" ))
627 self SetOffhandVisible(
false );
632 if (
self IsUsingOffhand() )
634 weapon =
self GetCurrentOffhand();
635 if ( weapon.isEquipment )
647 self endon (
"death" );
648 self endon (
"disconnect" );
654 self waittill (
"grenade_fire", grenade, weapon );
657 if (!isdefined(grenade))
660 level.missileEntities[ level.missileEntities.size ] = grenade;
661 grenade.weapon = weapon;
672 grenade.isCooked =
true;
674 switch( weapon.name )
677 case "sticky_grenade":
678 self AddWeaponStat( weapon,
"used", 1 );
680 case "explosive_bolt":
681 grenade.originalOwner =
self;
684 self.throwingGrenade =
false;
745 self endon(
"death" );
747 self waittill(
"stuck_to_player", player );
748 if ( isdefined ( player ) )
750 if ( deleteOnTeamChange )
753 if ( awardScoreEvent && isdefined (
self.originalOwner ) )
760 self.stuckToPlayer = player;
766 self endon(
"stuck_to_player" );
767 self endon(
"death");
768 self waittill(
"grenade_bounce" );
775 player endon(
"disconnect");
776 originalTeam = player.pers[
"team"];
780 player waittill(
"joined_team");
782 if ( player.pers[
"team"] != originalTeam )
792 self endon (
"death" );
793 self endon (
"disconnect" );
797 self waittill (
"grenade_fire", grenade, weapon );
798 if (
self.gotPullbackNotify )
800 self.gotPullbackNotify =
false;
803 if ( !isSubStr( weapon.name,
"frag_" ) )
807 grenade.threwBack =
true;
809 grenade.originalOwner =
self;
815 dvarString = (
"scr_" + dvarString +
"_grenadeLauncherDudTime");
816 if ( GetDvarString( dvarString ) ==
"" )
817 SetDvar( dvarString, defaultValue );
819 if ( getDvarInt( dvarString ) > maxValue )
820 SetDvar( dvarString, maxValue );
821 else if ( getDvarInt( dvarString ) < minValue )
822 SetDvar( dvarString, minValue );
824 level.grenadeLauncherDudTimeDvar = dvarString;
825 level.grenadeLauncherDudTimeMin = minValue;
826 level.grenadeLauncherDudTimeMax = maxValue;
827 level.grenadeLauncherDudTime = getDvarInt( level.grenadeLauncherDudTimeDvar );
832 dvarString = (
"scr_" + dvarString +
"_thrownGrenadeDudTime");
833 if ( GetDvarString( dvarString ) ==
"" )
834 SetDvar( dvarString, defaultValue );
836 if ( getDvarInt( dvarString ) > maxValue )
837 SetDvar( dvarString, maxValue );
838 else if ( getDvarInt( dvarString ) < minValue )
839 SetDvar( dvarString, minValue );
841 level.thrownGrenadeDudTimeDvar = dvarString;
842 level.thrownGrenadeDudTimeMin = minValue;
843 level.thrownGrenadeDudTimeMax = maxValue;
844 level.thrownGrenadeDudTime = getDvarInt( level.thrownGrenadeDudTimeDvar );
849 dvarString = (
"scr_" + dvarString +
"_killstreakDelayTime");
850 if ( GetDvarString( dvarString ) ==
"" )
851 SetDvar( dvarString, defaultValue );
853 if ( getDvarInt( dvarString ) > maxValue )
854 SetDvar( dvarString, maxValue );
855 else if ( getDvarInt( dvarString ) < minValue )
856 SetDvar( dvarString, minValue );
858 level.killstreakRoundDelay = getDvarInt( dvarString );
865 if ( weapon.disallowatmatchstart || WeaponHasAttachment( weapon,
"gl" ) )
873 if ( isThrownGrenade )
874 player iPrintLnBold( &
"MP_GRENADE_UNAVAILABLE_FOR_N",
" " + timeLeft +
" ", &
"EXE_SECONDS" );
876 player iPrintLnBold( &
"MP_LAUNCHER_UNAVAILABLE_FOR_N",
" " + timeLeft +
" ", &
"EXE_SECONDS" );
879 self makeGrenadeDud();
886 self endon(
"spawned_player" );
887 self endon(
"disconnect" );
891 self waittill(
"grenade_fire", grenade, weapon );
898 self endon(
"spawned_player" );
899 self endon(
"disconnect" );
903 self waittill(
"grenade_launcher_fire", grenade, weapon );
907 level.missileEntities[ level.missileEntities.size ] = grenade;
908 grenade.weapon = weapon;
923 if (!isdefined(doLOS))
926 if ( !isdefined( startRadius ) )
930 players = level.players;
931 for (i = 0; i < players.size; i++)
933 if (!isalive(players[i]) || players[i].sessionstate !=
"playing")
936 playerpos = players[i].origin + (0,0,32);
937 distsq = distancesquared(pos, playerpos);
940 newent = spawnstruct();
941 newent.isPlayer =
true;
942 newent.isADestructable =
false;
943 newent.isADestructible =
false;
944 newent.isActor =
false;
945 newent.entity = players[i];
946 newent.damageCenter = playerpos;
947 ents[ents.size] = newent;
952 grenades = getentarray(
"grenade",
"classname");
953 for (i = 0; i < grenades.size; i++)
955 entpos = grenades[i].origin;
956 distsq = distancesquared(pos, entpos);
959 newent = spawnstruct();
960 newent.isPlayer =
false;
961 newent.isADestructable =
false;
962 newent.isADestructible =
false;
963 newent.isActor =
false;
964 newent.entity = grenades[i];
965 newent.damageCenter = entpos;
966 ents[ents.size] = newent;
971 destructibles = getentarray(
"destructible",
"targetname");
972 for (i = 0; i < destructibles.size; i++)
974 entpos = destructibles[i].origin;
975 distsq = distancesquared(pos, entpos);
978 newent = spawnstruct();
979 newent.isPlayer =
false;
980 newent.isADestructable =
false;
981 newent.isADestructible =
true;
982 newent.isActor =
false;
983 newent.entity = destructibles[i];
984 newent.damageCenter = entpos;
985 ents[ents.size] = newent;
990 destructables = getentarray(
"destructable",
"targetname");
991 for (i = 0; i < destructables.size; i++)
993 entpos = destructables[i].origin;
994 distsq = distancesquared(pos, entpos);
997 newent = spawnstruct();
998 newent.isPlayer =
false;
999 newent.isADestructable =
true;
1000 newent.isADestructible =
false;
1001 newent.isActor =
false;
1002 newent.entity = destructables[i];
1003 newent.damageCenter = entpos;
1004 ents[ents.size] = newent;
1042 function damageEnt(eInflictor, eAttacker, iDamage, sMeansOfDeath, weapon, damagepos, damagedir)
1046 self.damageOrigin = damagepos;
1047 self.entity thread [[level.callbackPlayerDamage]](
1063 else if (
self.isactor)
1065 self.damageOrigin = damagepos;
1066 self.entity thread [[level.callbackActorDamage]](
1083 else if (
self.isADestructible)
1085 self.damageOrigin = damagepos;
1086 self.entity DoDamage(
1099 self.entity
util::damage_notify_wrapper( iDamage, eAttacker, (0,0,0), (0,0,0),
"mod_explosive",
"",
"" );
1106 for (i = 0; i < 30*20; i++)
1117 self endon (
"death" );
1118 self endon (
"disconnect" );
1120 switch ( weapon.name )
1122 case "concussion_grenade":
1125 if (
self == eAttacker)
1128 scale = 1 - (distance(
self.origin, eInflictor.origin ) / radius);
1133 time = 2 + (4 * scale);
1137 if (
self HasPerk (
"specialty_stunprotection" ) )
1146 self shellShock(
"concussion_grenade_mp", time,
false );
1148 self.concussionEndTime = getTime() + (time * 1000);
1157 if ( isdefined( level.shellshockOnPlayerDamage ) )
1159 [[level.shellshockOnPlayerDamage]]( meansOfDeath,
damage, weapon );
1167 self endon(
"death" );
1168 self endon(
"disconnect" );
1170 concussionSound =
spawn (
"script_origin",(0,0,1));
1171 concussionSound.origin =
self.origin;
1172 concussionSound linkTo(
self );
1174 concussionSound playsound(
"" );
1175 concussionSound playLoopSound (
"" );
1176 if ( duration > 0.5 )
1177 wait( duration - 0.5 );
1178 concussionSound playsound(
"" );
1179 concussionSound StopLoopSound( .5);
1182 concussionSound notify (
"delete" );
1183 concussionSound
delete();
1188 self endon(
"delete" );
1189 owner waittill(
"death" );
1198 self endon(
"spawned" );
1199 self endon(
"killed_player" );
1200 self endon(
"disconnect" );
1204 self.tag_stowed_back = undefined;
1205 self.tag_stowed_hip = undefined;
1207 team =
self.pers[
"team"];
1208 curclass =
self.pers[
"class"];
1212 self waittill(
"weapon_change", newWeapon );
1215 self.weapon_array_primary =[];
1216 self.weapon_array_sidearm = [];
1217 self.weapon_array_grenade = [];
1218 self.weapon_array_inventory =[];
1221 weaponsList =
self GetWeaponsList();
1222 for( idx = 0; idx < weaponsList.size; idx++ )
1225 switch( weaponsList[idx] )
1231 case "mp40_blinged":
1240 self.weapon_array_primary[
self.weapon_array_primary.size] = weaponsList[idx];
1242 self.weapon_array_sidearm[
self.weapon_array_sidearm.size] = weaponsList[idx];
1244 self.weapon_array_grenade[
self.weapon_array_grenade.size] = weaponsList[idx];
1246 self.weapon_array_inventory[
self.weapon_array_inventory.size] = weaponsList[idx];
1247 else if ( weaponsList[idx].isPrimary )
1248 self.weapon_array_primary[
self.weapon_array_primary.size] = weaponsList[idx];
1259 assert( IsPlayer(
self ) );
1260 assert( isdefined(
self.curClass ) );
1262 if ( isdefined( level.classToClassNum[
self.curClass ] ) )
1264 return level.classToClassNum[
self.curClass ];
1267 class_num = int(
self.curClass[
self.curClass.size-1] )-1;
1270 if( -1 == class_num )
1278 if ( isdefined( level.giveCustomLoadout ) )
1280 return level.weaponNone;
1287 if ( isdefined( level.tbl_weaponIDs[index] ) && isdefined( level.tbl_weaponIDs[index][
"reference"] ) )
1289 return GetWeapon( level.tbl_weaponIDs[index][
"reference"] );
1292 return level.weaponNone;
1297 if ( isdefined( level.giveCustomLoadout ) )
1310 self endon(
"death" );
1311 self waittill(
"scavenger", player );
1313 primary_weapons = player GetWeaponsListPrimaries();
1314 offhand_weapons_and_alts = array::exclude( player GetWeaponsList(
true ), primary_weapons );
1316 ArrayRemoveValue( offhand_weapons_and_alts, level.weaponBaseMelee );
1318 player playsound(
"wpn_ammo_pickup" );
1319 player playlocalsound(
"wpn_ammo_pickup" );
1323 player.scavenger_icon.alpha = 1;
1324 player.scavenger_icon fadeOverTime( 2.5 );
1325 player.scavenger_icon.alpha = 0;
1326 scavenger_lethal_proc = 1;
1327 scavenger_tactical_proc = 1;
1329 if (!isdefined(player.scavenger_lethal_proc))
1331 player.scavenger_lethal_proc = 0;
1332 player.scavenger_tactical_proc = 0;
1340 for ( i = 0; i < offhand_weapons_and_alts.size; i++ )
1342 weapon = offhand_weapons_and_alts[i];
1344 if ( !weapon.isScavengable )
1349 switch ( weapon.name )
1351 case "frag_grenade":
1353 case "sticky_grenade":
1354 case "satchel_charge":
1356 case "bouncingbetty":
1357 if ( isdefined( player.grenadeTypePrimaryCount ) && player.grenadeTypePrimaryCount < 1 )
1360 if (player GetWeaponAmmoStock( weapon ) != loadout_primary_count)
1362 if (player.scavenger_lethal_proc < scavenger_lethal_proc )
1364 player.scavenger_lethal_proc++;
1367 player.scavenger_lethal_proc = 0;
1368 player.scavenger_tactical_proc = 0;
1371 case "proximity_grenade":
1372 case "flash_grenade":
1373 case "concussion_grenade":
1378 case "trophy_system":
1379 case "sensor_grenade":
1381 if ( isdefined( player.grenadeTypeSecondaryCount ) && player.grenadeTypeSecondaryCount < 1 )
1384 if (weapon == loadout_secondary && player GetWeaponAmmoStock( weapon ) != loadout_secondary_count)
1386 if (player.scavenger_tactical_proc < scavenger_tactical_proc )
1388 player.scavenger_tactical_proc++;
1391 player.scavenger_tactical_proc = 0;
1392 player.scavenger_lethal_proc = 0;
1395 maxAmmo = weapon.maxAmmo;
1398 stock = player GetWeaponAmmoStock( weapon );
1400 if ( isdefined( level.customLoadoutScavenge ) )
1402 maxAmmo =
self [[level.customLoadoutScavenge]]( weapon );
1404 else if ( weapon == loadout_primary )
1406 maxAmmo = loadout_primary_count;
1408 else if ( weapon == loadout_secondary )
1410 maxAmmo = loadout_secondary_count;
1413 if ( stock < maxAmmo )
1416 if ( ammo > maxAmmo )
1420 player SetWeaponAmmoStock( weapon, ammo );
1427 if ( weapon.isLauncherWeapon )
1429 stock = player GetWeaponAmmoStock( weapon );
1430 start = player GetFractionStartAmmo( weapon );
1431 clip = weapon.clipSize;
1432 clip *= GetDvarFloat(
"scavenger_clip_multiplier", 2 );
1434 maxAmmo = weapon.maxAmmo;
1436 if ( stock < maxAmmo - clip )
1438 ammo = stock + clip;
1439 player SetWeaponAmmoStock( weapon, ammo );
1443 player SetWeaponAmmoStock( weapon, maxAmmo );
1450 for ( i = 0; i < primary_weapons.size; i++ )
1452 weapon = primary_weapons[i];
1454 if ( !weapon.isScavengable )
1459 stock = player GetWeaponAmmoStock( weapon );
1460 start = player GetFractionStartAmmo( weapon );
1461 clip = weapon.clipSize;
1462 clip *= GetDvarFloat(
"scavenger_clip_multiplier", 2 );
1464 maxAmmo = weapon.maxAmmo;
1466 if ( stock < maxAmmo - clip )
1468 ammo = stock + clip;
1469 player SetWeaponAmmoStock( weapon, ammo );
1473 player SetWeaponAmmoStock( weapon, maxAmmo );
1480 if( level.wagerMatch )
1483 self.scavenger_icon = NewClientHudElem(
self );
1484 self.scavenger_icon.horzAlign =
"center";
1485 self.scavenger_icon.vertAlign =
"middle";
1486 self.scavenger_icon.x = -16;
1487 self.scavenger_icon.y = 16;
1488 self.scavenger_icon.alpha = 0;
1493 if (
self IsSplitscreen() )
1495 width = Int( width * 0.5 );
1496 height = Int( height * 0.5 );
1497 self.scavenger_icon.x = -8;
1500 self.scavenger_icon setShader(
"hud_scavenger_pickup", width, height );
1505 if( SessionModeIsZombiesGame() )
1508 if( level.wagerMatch )
1511 if( !isdefined( attacker ) )
1514 if( attacker ==
self )
1517 if ( level.gameType ==
"hack" )
1519 item =
self dropScavengerItem( GetWeapon(
"scavenger_item_hack" ) );
1523 item =
self dropScavengerItem( GetWeapon(
"scavenger_item" ) );
1533 limited_info = SpawnStruct();
1534 limited_info.weapon = weapon;
1535 limited_info.drops = num_drops;
1537 owner.limited_info = limited_info;
1542 limited_info = owner.limited_info;
1544 if ( !isdefined( limited_info ) )
1549 if ( limited_info.weapon != weapon )
1554 if ( limited_info.drops <= 0 )
1565 limited_info = owner.limited_info;
1567 if ( !isdefined( limited_info ) )
1572 if ( limited_info.weapon != weapon )
1577 limited_info.drops = limited_info.drops - 1;
1578 owner.limited_info = undefined;
1586 self endon(
"death" );
1587 self waittill(
"trigger", player, item );
1589 if ( !isdefined( item ) )
1594 player.limited_info = limited_info;