diff options
Diffstat (limited to 'Northstar.Custom/mod/scripts/vscripts/weapons/mp_titanweapon_arc_cannon.nut')
-rw-r--r-- | Northstar.Custom/mod/scripts/vscripts/weapons/mp_titanweapon_arc_cannon.nut | 223 |
1 files changed, 165 insertions, 58 deletions
diff --git a/Northstar.Custom/mod/scripts/vscripts/weapons/mp_titanweapon_arc_cannon.nut b/Northstar.Custom/mod/scripts/vscripts/weapons/mp_titanweapon_arc_cannon.nut index 09faafa57..788793932 100644 --- a/Northstar.Custom/mod/scripts/vscripts/weapons/mp_titanweapon_arc_cannon.nut +++ b/Northstar.Custom/mod/scripts/vscripts/weapons/mp_titanweapon_arc_cannon.nut @@ -1,24 +1,50 @@ -ArcCannon_PrecacheFX( self ) +untyped -function OnWeaponActivate( activateParams ) +global function MpTitanweaponArcCannon_Init + +global function OnWeaponActivate_titanweapon_arc_cannon +global function OnWeaponDeactivate_titanweapon_arc_cannon +global function OnWeaponReload_titanweapon_arc_cannon +global function OnWeaponOwnerChanged_titanweapon_arc_cannon +global function OnWeaponChargeBegin_titanweapon_arc_cannon +global function OnWeaponChargeEnd_titanweapon_arc_cannon +global function OnWeaponPrimaryAttack_titanweapon_arc_cannon + +const FX_EMP_BODY_HUMAN = $"P_emp_body_human" +const FX_EMP_BODY_TITAN = $"P_emp_body_titan" + +#if SERVER +global function OnWeaponNpcPrimaryAttack_titanweapon_arc_cannon +#endif // #if SERVER + +void function MpTitanweaponArcCannon_Init() +{ + ArcCannon_PrecacheFX() + + #if SERVER + AddDamageCallbackSourceID( eDamageSourceId.mp_titanweapon_arc_cannon, ArcRifleOnDamage ) + #endif +} + +void function OnWeaponActivate_titanweapon_arc_cannon( entity weapon ) { - local weaponOwner = self.GetWeaponOwner() - thread DelayedArcCannonStart( self, weaponOwner ) - if( !("weaponOwner" in self.s) ) - self.s.weaponOwner <- weaponOwner + entity weaponOwner = weapon.GetWeaponOwner() + thread DelayedArcCannonStart( weapon, weaponOwner ) + if( !("weaponOwner" in weapon.s) ) + weapon.s.weaponOwner <- weaponOwner } -function DelayedArcCannonStart( weapon, weaponOwner ) +function DelayedArcCannonStart( entity weapon, entity weaponOwner ) { weapon.EndSignal( "WeaponDeactivateEvent" ) - wait 0 + WaitFrame() if ( IsValid( weapon ) && IsValid( weaponOwner ) && weapon == weaponOwner.GetActiveWeapon() ) { if( weaponOwner.IsPlayer() ) { - local modelEnt = weaponOwner.GetViewModelEntity() + entity modelEnt = weaponOwner.GetViewModelEntity() if( IsValid( modelEnt ) && EntHasModelSet( modelEnt ) ) ArcCannon_Start( weapon ) } @@ -29,91 +55,172 @@ function DelayedArcCannonStart( weapon, weaponOwner ) } } -function OnWeaponDeactivate( deactivateParams ) +void function OnWeaponDeactivate_titanweapon_arc_cannon( entity weapon ) { - ArcCannon_ChargeEnd( self, self.s.weaponOwner ) - ArcCannon_Stop( self ) + ArcCannon_ChargeEnd( weapon, expect entity( weapon.s.weaponOwner ) ) + ArcCannon_Stop( weapon ) } -function OnWeaponReload( reloadParams ) +void function OnWeaponReload_titanweapon_arc_cannon( entity weapon, int milestoneIndex ) { - local reloadTime = self.GetWeaponInfoFileKeyField( "reload_time" ) - thread ArcCannon_HideIdleEffect( self, reloadTime ) //constant seems to help it sync up better + local reloadTime = weapon.GetWeaponInfoFileKeyField( "reload_time" ) + thread ArcCannon_HideIdleEffect( weapon, reloadTime ) //constant seems to help it sync up better } -function OnWeaponOwnerChanged( changeParams ) +void function OnWeaponOwnerChanged_titanweapon_arc_cannon( entity weapon, WeaponOwnerChangedParams changeParams ) { - if ( IsClient() ) - { - local viewPlayer = GetLocalViewPlayer() + #if CLIENT + entity viewPlayer = GetLocalViewPlayer() if ( changeParams.oldOwner != null && changeParams.oldOwner == viewPlayer ) { - ArcCannon_ChargeEnd( self, changeParams.oldOwner ) - ArcCannon_Stop( self, changeParams.oldOwner ) + ArcCannon_ChargeEnd( weapon, changeParams.oldOwner ) + ArcCannon_Stop( weapon) } + if ( changeParams.newOwner != null && changeParams.newOwner == viewPlayer ) - thread ArcCannon_HideIdleEffect( self, 0.25 ) - } - else - { + thread ArcCannon_HideIdleEffect( weapon, 0.25 ) + #else if ( changeParams.oldOwner != null ) { - ArcCannon_ChargeEnd( self, changeParams.oldOwner ) - ArcCannon_Stop( self, changeParams.oldOwner ) + ArcCannon_ChargeEnd( weapon, changeParams.oldOwner ) + ArcCannon_Stop( weapon ) } + if ( changeParams.newOwner != null ) - thread ArcCannon_HideIdleEffect( self, 0.25 ) - } + thread ArcCannon_HideIdleEffect( weapon, 0.25 ) + #endif } -function OnWeaponChargeBegin( chargeParams ) +bool function OnWeaponChargeBegin_titanweapon_arc_cannon( entity weapon ) { - ArcCannon_ChargeBegin( self ) + local stub = "this is here to suppress the untyped message. This can go away when the .s. usage is removed from this file." + #if SERVER + //if ( weapon.HasMod( "fastpacitor_push_apart" ) ) + // weapon.GetWeaponOwner().StunMovementBegin( weapon.GetWeaponSettingFloat( eWeaponVar.charge_time ) ) + #endif + + ArcCannon_ChargeBegin( weapon ) + + return true } -function OnWeaponChargeEnd( chargeParams ) +void function OnWeaponChargeEnd_titanweapon_arc_cannon( entity weapon ) { - ArcCannon_ChargeEnd( self ) + ArcCannon_ChargeEnd( weapon, weapon ) } -function OnWeaponPrimaryAttack( attackParams ) +var function OnWeaponPrimaryAttack_titanweapon_arc_cannon( entity weapon, WeaponPrimaryAttackParams attackParams ) { - if ( self.HasMod( "capacitor" ) && self.GetWeaponChargeFraction() < GetArcCannonChargeFraction( self ) ) + if ( weapon.HasMod( "capacitor" ) && weapon.GetWeaponChargeFraction() < GetArcCannonChargeFraction( weapon ) ) return 0 if ( !attackParams.firstTimePredicted ) return - local fireRate = self.GetWeaponInfoFileKeyField( "fire_rate" ) - thread ArcCannon_HideIdleEffect( self, (1 / fireRate) ) - return FireArcCannon( self, attackParams ) -} + local fireRate = weapon.GetWeaponInfoFileKeyField( "fire_rate" ) + thread ArcCannon_HideIdleEffect( weapon, (1 / fireRate) ) -function OnWeaponNpcPrimaryAttack( attackParams ) -{ - local fireRate = self.GetWeaponInfoFileKeyField( "fire_rate" ) - thread ArcCannon_HideIdleEffect( self, fireRate ) - return FireArcCannon( self, attackParams ) + return FireArcCannon( weapon, attackParams ) } -function OnWeaponStartZoomIn() +#if SERVER +var function OnWeaponNpcPrimaryAttack_titanweapon_arc_cannon( entity weapon, WeaponPrimaryAttackParams attackParams ) { - HandleWeaponSoundZoomIn( self, "Weapon_Titan_ArcCannon.ADS_In" ) -} + local fireRate = weapon.GetWeaponInfoFileKeyField( "fire_rate" ) + thread ArcCannon_HideIdleEffect( weapon, fireRate ) -function OnWeaponStartZoomOut() -{ - HandleWeaponSoundZoomOut( self, "Weapon_Titan_ArcCannon.ADS_Out" ) + return FireArcCannon( weapon, attackParams ) } -/* -function OnWeaponPrimaryAttackVMActivityToUse() +void function ArcRifleOnDamage( entity ent, var damageInfo ) { - local baseCharge = self.GetWeaponChargeFraction() - local charge = clamp ( baseCharge * ( 1 / 0.7 ), 0.0, 1.0 ) + vector pos = DamageInfo_GetDamagePosition( damageInfo ) + entity attacker = DamageInfo_GetAttacker( damageInfo ) - if ( charge > 0.25 ) - return 1 + EmitSoundOnEntity( ent, ARC_CANNON_TITAN_SCREEN_SFX ) + + if ( ent.IsPlayer() || ent.IsNPC() ) + { + entity entToSlow = ent + entity soul = ent.GetTitanSoul() + + if ( soul != null ) + entToSlow = soul + + StatusEffect_AddTimed( entToSlow, eStatusEffect.move_slow, 0.5, 2.0, 1.0 ) + StatusEffect_AddTimed( entToSlow, eStatusEffect.dodge_speed_slow, 0.5, 2.0, 1.0 ) + } + + string tag = "" + asset effect + + if ( ent.IsTitan() ) + { + tag = "exp_torso_front" + effect = FX_EMP_BODY_TITAN + } + else if ( ChestFocusTarget( ent ) ) + { + tag = "CHESTFOCUS" + effect = FX_EMP_BODY_HUMAN + } + else if ( IsAirDrone( ent ) ) + { + tag = "HEADSHOT" + effect = FX_EMP_BODY_HUMAN + } + else if ( IsGunship( ent ) ) + { + tag = "ORIGIN" + effect = FX_EMP_BODY_TITAN + } + + if ( tag != "" ) + { + float duration = 2.0 + //thread EMP_FX( effect, ent, tag, duration ) + } + + if ( ent.IsTitan() ) + { + if ( ent.IsPlayer() ) + { + EmitSoundOnEntityOnlyToPlayer( ent, ent, "titan_energy_bulletimpact_3p_vs_1p" ) + EmitSoundOnEntityExceptToPlayer( ent, ent, "titan_energy_bulletimpact_3p_vs_3p" ) + } + else + { + EmitSoundOnEntity( ent, "titan_energy_bulletimpact_3p_vs_3p" ) + } + } else - return 0 -}*/ + { + if ( ent.IsPlayer() ) + { + EmitSoundOnEntityOnlyToPlayer( ent, ent, "flesh_lavafog_deathzap_3p" ) + EmitSoundOnEntityExceptToPlayer( ent, ent, "flesh_lavafog_deathzap_1p" ) + } + else + { + EmitSoundOnEntity( ent, "flesh_lavafog_deathzap_1p" ) + } + } + +} + +bool function ChestFocusTarget( entity ent ) +{ + if ( IsSpectre( ent ) ) + return true + if ( IsStalker( ent ) ) + return true + if ( IsSuperSpectre( ent ) ) + return true + if ( IsGrunt( ent ) ) + return true + if ( IsPilot( ent ) ) + return true + + return false +} +#endif // #if SERVER |