1 #using scripts\codescripts\struct;
3 #using scripts\shared\callbacks_shared;
4 #using scripts\shared\challenges_shared;
5 #using scripts\shared\clientfield_shared;
6 #using scripts\shared\system_shared;
7 #using scripts\shared\weapons\_weaponobjects;
9 #insert scripts\shared\shared.gsh;
11 #define RETRIEVE_TRIGGER_HEIGHT 100
12 #define RETRIEVE_TRIGGER_RADIUS 50
14 #namespace ballistic_knife;
23 player endon(
"death" );
24 player endon(
"disconnect" );
25 level endon(
"game_ended" );
27 self waittill(
"stationary", endpos, normal, angles, attacker, prey, bone );
31 if( isdefined(endpos) )
34 retrievable_model =
spawn(
"script_model", endpos );
35 retrievable_model SetModel(
"wpn_t7_loot_ballistic_knife_projectile" );
36 retrievable_model SetTeam( player.team );
37 retrievable_model SetOwner( player );
38 retrievable_model.owner = player;
39 retrievable_model.angles = angles;
40 retrievable_model.name = watcher.weapon;
41 retrievable_model.targetname =
"sticky_weapon";
43 if( isdefined( prey ) )
46 if( level.teamBased && player.team == prey.team )
53 retrievable_model
dropToGround( retrievable_model.origin, 80 );
57 retrievable_model LinkTo( prey, bone );
63 retrievable_model physicslaunch( normal, (randomint(10),randomint(10),randomint(10)) );
71 watcher.objectArray[watcher.objectArray.size] = retrievable_model;
75 retrievable_model waittill(
"stationary");
80 player notify(
"ballistic_knife_stationary", retrievable_model, normal );
82 player notify(
"ballistic_knife_stationary", retrievable_model, normal, prey );
88 pickUpTrigger =
self.pickUpTrigger;
90 self waittill(
"death" );
92 if( isdefined( pickUpTrigger ) )
93 pickUpTrigger
delete();
98 player endon(
"death" );
99 player endon(
"disconnect" );
100 level endon(
"game_ended" );
102 player waittill(
"ballistic_knife_stationary", retrievable_model, normal, prey );
104 if( !isdefined( retrievable_model ) )
109 if ( isdefined( prey ) && ( isPlayer( prey ) || isAI( prey ) ) )
111 trigger_pos[0] = prey.origin[0];
112 trigger_pos[1] = prey.origin[1];
113 trigger_pos[2] = prey.origin[2] + vec_scale;
117 trigger_pos[0] = retrievable_model.origin[0] + (vec_scale * normal[0]);
118 trigger_pos[1] = retrievable_model.origin[1] + (vec_scale * normal[1]);
119 trigger_pos[2] = retrievable_model.origin[2] + (vec_scale * normal[2]);
129 pickup_trigger.owner = player;
131 retrievable_model.pickUpTrigger = pickup_trigger;
134 pickup_trigger EnableLinkTo();
136 if ( isdefined( prey ) )
137 pickup_trigger LinkTo( prey );
139 pickup_trigger LinkTo( retrievable_model );
141 retrievable_model thread
watch_use_trigger( pickup_trigger, retrievable_model,&
pick_up, watcher.pickUpSoundPlayer, watcher.pickUpSound );
147 self endon(
"death" );
148 self endon(
"delete" );
149 level endon (
"game_ended" );
153 max_ammo = level.weaponBallisticKnife.maxAmmo + 1;
157 trigger waittill(
"trigger", player );
159 if ( !IsAlive( player ) )
162 if ( !player IsOnGround() && !SessionModeIsMultiplayerGame() )
165 if ( isdefined( trigger.triggerTeam ) && ( player.team != trigger.triggerTeam ) )
168 if ( isdefined( trigger.claimedBy ) && ( player != trigger.claimedBy ) )
171 if ( !player HasWeapon( level.weaponBallisticKnife,
true ) )
174 heldBallisticKnife = player GetWeaponForWeaponRoot( level.weaponBallisticKnife );
175 if ( !isdefined( heldBallisticKnife ) )
178 ammo_stock = player GetWeaponAmmoStock( heldBallisticKnife );
179 ammo_clip = player GetWeaponAmmoClip( heldBallisticKnife );
181 total_ammo = ammo_stock + ammo_clip;
186 if ( total_ammo > 0 && ammo_stock == total_ammo )
189 if ( total_ammo >= max_ammo || !hasReloaded )
192 if ( isdefined( playerSoundOnUse ) )
193 player playLocalSound( playerSoundOnUse );
194 if ( isdefined( npcSoundOnUse ) )
195 player playSound( npcSoundOnUse );
207 current_weapon = player GetCurrentWeapon();
209 if( current_weapon.rootWeapon != level.weaponBallisticKnife )
211 heldBallisticKnife = player GetWeaponForWeaponRoot( level.weaponBallisticKnife );
212 if ( !isdefined( heldBallisticKnife ) )
216 clip_ammo = player GetWeaponAmmoClip( heldBallisticKnife );
219 player SetWeaponAmmoClip( heldBallisticKnife, 1 );
223 new_ammo_stock = player GetWeaponAmmoStock( heldBallisticKnife ) + 1;
224 player SetWeaponAmmoStock( heldBallisticKnife, new_ammo_stock );
229 new_ammo_stock = player GetWeaponAmmoStock( current_weapon ) + 1;
230 player SetWeaponAmmoStock( current_weapon, new_ammo_stock );
236 if( isdefined(
self) )
238 pickUpTrigger =
self.pickUpTrigger;
240 if( isdefined( pickUpTrigger ) )
241 pickUpTrigger
delete();
253 level waittill(
"drop_objects_to_ground", origin, radius );
260 if( DistanceSquared( origin,
self.origin )< radius * radius )
262 self physicslaunch( (0,0,1), (5,5,5));
271 self waittill(
"stationary");
273 trigger =
self.pickUpTrigger;
275 trigger.origin = (
self.origin[0],
self.origin[1],
self.origin[2] + 10 );
276 trigger LinkTo(
self );
285 watcher.storeDifferentObject =
true;