aboutsummaryrefslogtreecommitdiff
path: root/Northstar.Custom/mod/scripts/vscripts/weapons/mp_projectile_titanweapon_triple_threat.nut
diff options
context:
space:
mode:
Diffstat (limited to 'Northstar.Custom/mod/scripts/vscripts/weapons/mp_projectile_titanweapon_triple_threat.nut')
-rw-r--r--Northstar.Custom/mod/scripts/vscripts/weapons/mp_projectile_titanweapon_triple_threat.nut85
1 files changed, 85 insertions, 0 deletions
diff --git a/Northstar.Custom/mod/scripts/vscripts/weapons/mp_projectile_titanweapon_triple_threat.nut b/Northstar.Custom/mod/scripts/vscripts/weapons/mp_projectile_titanweapon_triple_threat.nut
new file mode 100644
index 000000000..afdb6961e
--- /dev/null
+++ b/Northstar.Custom/mod/scripts/vscripts/weapons/mp_projectile_titanweapon_triple_threat.nut
@@ -0,0 +1,85 @@
+untyped
+
+
+global function OnProjectileCollision_titanweapon_triple_threat
+
+
+void function OnProjectileCollision_titanweapon_triple_threat( entity projectile, vector pos, vector normal, entity hitEnt, int hitbox, bool isCritical )
+{
+ if( !IsValid( hitEnt ) )
+ return
+
+ if( "impactFuse" in projectile.s && projectile.s.impactFuse == true )
+ projectile.GrenadeExplode( Vector( 0,0,0 ) )
+
+ if( hitEnt.GetClassName() == "player" && !hitEnt.IsTitan() )
+ return
+
+ if( !IsValid( projectile ) )
+ return
+
+ if( IsMagneticTarget( hitEnt ) )
+ {
+ if( hitEnt.GetTeam() != projectile.GetTeam() )
+ {
+ local normal = Vector( 0, 0, 1 )
+ if( "collisionNormal" in projectile.s )
+ normal = projectile.s.collisionNormal
+ projectile.GrenadeExplode( normal )
+ }
+ }
+ else if( "becomeProxMine" in projectile.s && projectile.s.becomeProxMine == true )
+ {
+ table collisionParams =
+ {
+ pos = pos,
+ normal = normal,
+ hitEnt = hitEnt,
+ hitbox = hitbox
+ }
+
+ PlantStickyEntity( projectile, collisionParams )
+ projectile.s.collisionNormal <- normal
+ #if SERVER
+ thread TripleThreatProximityTrigger( projectile )
+ #endif
+ }
+
+}
+
+#if SERVER
+function TripleThreatProximityTrigger( entity nade )
+{
+ //Hack, shouldn't be necessary with the IsValid check in OnProjectileCollision.
+ if( !IsValid( nade ) )
+ return
+
+ nade.EndSignal( "OnDestroy" )
+ EmitSoundOnEntity( nade, "Wpn_TripleThreat_Grenade_MineAttach" )
+
+ wait TRIPLETHREAT_MINE_FIELD_ACTIVATION_TIME
+
+ EmitSoundOnEntity( nade, "Weapon_Vortex_Gun.ExplosiveWarningBeep" )
+ local rangeCheck = PROX_MINE_RANGE
+ while( 1 )
+ {
+ local origin = nade.GetOrigin()
+ int team = nade.GetTeam()
+
+ local entityArray = GetScriptManagedEntArrayWithinCenter( level._proximityTargetArrayID, team, origin, PROX_MINE_RANGE )
+ foreach( entity ent in entityArray )
+ {
+ if ( TRIPLETHREAT_MINE_FIELD_TITAN_ONLY )
+ if ( !ent.IsTitan() )
+ continue
+
+ if ( IsAlive( ent ) )
+ {
+ nade.Signal( "ProxMineTrigger" )
+ return
+ }
+ }
+ WaitFrame()
+ }
+}
+#endif // SERVER