1 #insert scripts\shared\shared.gsh;
2 #using scripts\codescripts\struct;
4 #using scripts\shared\array_shared;
5 #using scripts\shared\callbacks_shared;
6 #using scripts\shared\gameobjects_shared;
7 #using scripts\shared\system_shared;
8 #using scripts\shared\util_shared;
9 #using scripts\shared\weapons\_weaponobjects;
10 #using scripts\shared\weapons\_weapons;
12 #using scripts\mp\_util;
13 #using scripts\mp\gametypes\_weaponobjects;
15 #insert scripts\mp\_pickup_items.gsh;
17 #namespace pickup_items;
22 #define PICKUP_ROTATE_RATE 175
23 #define PICKUP_BOB_DISTANCE 4
26 #precache( "xmodel", "p7_perk_t7_hud_perk_flakjacket" );
27 #precache( "xmodel", "p7_perk_t7_hud_perk_blind_eye" );
28 #precache( "xmodel", "p7_perk_t7_hud_perk_hardline" );
29 #precache( "xmodel", "p7_perk_t7_hud_perk_ghost" );
30 #precache( "xmodel", "p7_perk_t7_hud_perk_jetsilencer" );
31 #precache( "xmodel", "p7_perk_t7_hud_perk_lightweight" );
32 #precache( "xmodel", "p7_perk_t7_hud_perk_jetcharge" );
33 #precache( "xmodel", "p7_perk_t7_hud_perk_overcharge" );
36 #precache( "xmodel", "p7_perk_t7_hud_perk_hardwired" );
37 #precache( "xmodel", "p7_perk_t7_hud_perk_scavenger" );
38 #precache( "xmodel", "p7_perk_t7_hud_perk_cold_blooded" );
39 #precache( "xmodel", "p7_perk_t7_hud_perk_fasthands" );
40 #precache( "xmodel", "p7_perk_t7_hud_perk_toughness" );
41 #precache( "xmodel", "p7_perk_t7_hud_perk_tracker" );
42 #precache( "xmodel", "p7_perk_t7_hud_perk_ante_up" );
45 #precache( "xmodel", "p7_perk_t7_hud_perk_dexterity" );
46 #precache( "xmodel", "p7_perk_t7_hud_perk_engineer" );
47 #precache( "xmodel", "p7_perk_t7_hud_perk_deadsilence" );
48 #precache( "xmodel", "p7_perk_t7_hud_perk_tacticalmask" );
49 #precache( "xmodel", "p7_perk_t7_hud_perk_awareness" );
50 #precache( "xmodel", "p7_perk_t7_hud_perk_sixthsense" );
51 #precache( "xmodel", "p7_perk_t7_hud_perk_marathon" );
52 #precache( "xmodel", "p7_perk_t7_hud_perk_gungho" );
54 #precache( "objective", "pickup_item" );
60 level.nullPrimaryOffhand = GetWeapon(
"null_offhand_primary" );
61 level.nullSecondaryOffhand = GetWeapon(
"null_offhand_secondary" );
63 level.pickup_items = [];
65 level.pickupItemRespawn =
true;
70 self.pickup_damage_scale = undefined;
71 self.pickup_damage_scale_time = undefined;
78 pickup_triggers = GetEntArray(
"pickup_item",
"targetname" );
79 pickup_models = GetEntArray(
"pickup_model",
"targetname" );
83 foreach( trigger
in pickup_triggers )
86 assert( isDefined( visuals[0]) );
96 level.pickup_items[level.pickup_items.size] = pickup_item_object;
102 foreach( model
in pickup_models )
104 if ( model istouchingswept( trigger ) )
123 if(
self.items.size == 1 )
125 return self.items[0];
128 if (
self.items_shuffle.size == 0 )
130 self.items_shuffle = ArrayCopy(
self.items );
131 array::randomize(
self.items_shuffle );
134 return array::pop_front(
self.items_shuffle );
141 if ( isdefined(
self.current_item.model ) )
143 self SetModel(
self.current_item.model );
149 item_struct = SpawnStruct();
151 item_struct.name =
"ammo";
152 item_struct.weapon = GetWeapon(
"scavenger_item" );
153 item_struct.model = item_struct.weapon.worldmodel;
154 self.angles = ( 0, 0, 90 );
163 item_struct = SpawnStruct();
165 item_struct.name =
"damage";
166 item_struct.damage_scale = float(perks_string);
167 item_struct.model =
"wpn_t7_igc_bullet_prop";
168 self.angles = ( -45, 0, 0 );
176 item_struct = SpawnStruct();
178 item_struct.name =
"health";
179 item_struct.extra_health = int(perks_string);
180 item_struct.model =
"p7_medical_surgical_tools_syringe";
181 self.angles = ( -45, 0, 45 );
189 item_struct = SpawnStruct();
191 if ( !IsDefined(level.perkSpecialties[ perks_string ]) )
194 println(
"Invalid perk name " + perks_string +
" for pick up item at " +
self.origin);
199 item_struct.name = perks_string;
200 item_struct.specialties = StrTok( level.perkSpecialties[ perks_string ],
"|" );
201 item_struct.model =
"p7_perk_" + level.perkIcons[ perks_string ];
209 item_struct = SpawnStruct();
211 weapon_and_attachments = strtok(weapon_and_attachments_string,
"+");
212 weapon_name = GetSubStr(weapon_and_attachments[0],0,weapon_and_attachments[0].size);
216 item_struct.name = weapon_name;
217 item_struct.weapon = GetWeapon( weapon_name, attachments );
218 item_struct.model = item_struct.weapon.worldmodel;
219 self SetScale ( 1.5 );
226 switch(
self.script_noteworthy )
243 items_string =
self.script_parameters;
245 items_array = strtok(items_string,
" ");
249 foreach( item_string
in items_array )
259 switch(
self.script_noteworthy )
276 switch(
self.script_noteworthy )
293 switch(
self.script_noteworthy )
310 self.items_shuffle = [];
327 self endon(
"respawned");
329 pickup_item =
self.visuals[0];
330 switch( pickup_item.script_noteworthy )
350 pickup_item PlaySound( pickup_item.sound_pickup );
355 if ( level.pickupItemRespawn )
357 wait ( pickup_item.respawn_time );
364 self notify(
"respawned");
365 pickup_item =
self.visuals[0];
366 pickup_item PlaySound( pickup_item.sound_respawn );
376 foreach( item
in level.pickup_items )
384 self notify(
"scavenger", player );
385 player PickupAmmoEvent();
390 damage_scale_length = 15 * 1000;
391 player.pickup_damage_scale =
self.current_item.damage_scale;
392 player.pickup_damage_scale_time = GetTime() + damage_scale_length;
397 if (
self.current_item.extra_health <= 100 )
399 health = player.health +
self.current_item.extra_health;
406 health =
self.current_item.extra_health;
409 player.health = health;
414 foreach( specialty
in self.current_item.specialties )
416 player setPerk( specialty );
422 weapons =
self GetWeaponsList(
true );
423 foreach ( weapon
in weapons )
425 if ( !weapon.isgadget )
428 if ( !weapon.isheroweapon && weapon.offhandslot !==
"Gadget" )
431 slot =
self GadgetGetSlot( weapon );
432 if (
self GadgetIsActive( slot ) )
441 weapons =
self GetWeaponsList(
true );
442 foreach ( weapon
in weapons )
444 if ( weapon.isgadget )
446 self TakeWeapon(weapon);
453 weapons =
self GetWeaponsList(
true );
454 foreach ( weapon
in weapons )
456 if ( weapon.offhandSlot == offhandSlot )
458 self TakeWeapon(weapon);
466 if ( weapon.isgadget )
469 if ( weapon.isgrenadeweapon )
477 weapon =
self.current_item.weapon;
478 had_weapon = player HasWeapon( weapon );
481 ammo_in_reserve = player GetWeaponAmmoStock( weapon );
483 if ( weapon.isgadget )
492 if ( weapon.inventoryType ==
"offhand" )
497 player PickupWeaponEvent(weapon);
499 player GiveWeapon( weapon );
502 if ( !player HasWeapon( weapon ) )
505 if ( isDefined(
self.script_ammo_clip) && isDefined(
self.script_ammo_extra) )
510 player SetWeaponAmmoStock( weapon, ammo_in_reserve +
self.script_ammo_clip +
self.script_ammo_extra );
514 if (
self.script_ammo_clip >= 0 )
516 player SetWeaponAmmoClip( weapon,
self.script_ammo_clip );
518 if (
self.script_ammo_extra >= 0 )
520 player SetWeaponAmmoStock( weapon,
self.script_ammo_extra );
525 if ( weapon.isgadget )
527 slot = player GadgetGetSlot( weapon );
528 player GadgetPowerSet( slot, 100.0 );
533 player SwitchToWeapon(weapon);