public virtual bool CanAttack(ClipInfo clipInfo, InputButton inputButton) { if (clipInfo == null || !Owner.IsValid() || !Input.Down(inputButton) || TimeSinceDeployed <= WeaponInfo.DeployTime || !clipInfo.IsPartialReloading && IsReloading) { return(false); } if (clipInfo.FiringType == FiringType.BURST) { if (_burstCount > 2) { return(false); } if (TimeSinceAttack > GetRealRPM(clipInfo.RPM)) { _burstCount++; return(true); } return(false); } else if (clipInfo.FiringType == FiringType.SEMI && !Input.Pressed(inputButton)) { return(false); } if (clipInfo.RPM <= 0) { return(true); } return(TimeSinceAttack > GetRealRPM(clipInfo.RPM)); }
public virtual void ShootEffects(int clipInfoIndex) { Host.AssertClient(); if (clipInfoIndex < 0 || clipInfoIndex >= ClipInfos.Length) { return; } ClipInfo clipInfo = ClipInfos[clipInfoIndex]; if (clipInfo == null) { return; } if (CarriableInfo.Category != CarriableCategories.Melee) { foreach (KeyValuePair <string, string> keyValuePair in clipInfo.ShootEffectList) { Particles.Create(keyValuePair.Key, EffectEntity, keyValuePair.Value); } } if (IsLocalPawn && clipInfo.ShakeEffect != null) { _ = new Perlin(clipInfo.ShakeEffect.Length, clipInfo.ShakeEffect.Speed, clipInfo.ShakeEffect.Size, clipInfo.ShakeEffect.Rotation); } ViewModelEntity?.SetAnimParameter("fire", true); CrosshairPanel?.CreateEvent("fire"); }
public virtual void OnReloadFinish(ClipInfo clipInfo) { if (clipInfo == null) { return; } IsReloading = false; TimeSinceReload = Math.Max(TimeSinceReload, clipInfo.ReloadTime); if (Owner is not Player player || clipInfo.AmmoName == null || ClipAmmo >= clipInfo.ClipSize) { return; } int reloadBullets = Math.Min(clipInfo.ClipSize - ClipAmmo, clipInfo.BulletsPerReload); int ammo = clipInfo.UnlimitedAmmo ? reloadBullets : player.Inventory.Ammo.Take(clipInfo.AmmoName, reloadBullets); if (ammo > 0) { ClipAmmo += ammo; } if (ammo > 0 && ClipAmmo < clipInfo.ClipSize) { Reload(clipInfo); } else { FinishReload(clipInfo); } }
public override void Attack(ClipInfo clipInfo) { (Owner as AnimEntity).SetAnimParameter("b_attack", true); if (IsClient) { ShootEffects(GetClipInfoIndex(clipInfo)); } PlaySound("rust_boneknife.attack"); MeleeStrike(clipInfo.Damage, 1.5f); }
public virtual void ResetBurstFireCount(ClipInfo clipInfo, InputButton inputButton) { if (clipInfo == null || clipInfo.FiringType != FiringType.BURST) { return; } if (Input.Released(inputButton)) { _burstCount = 0; } }
public virtual void ClientFinishReload(int clipInfoIndex) { if (clipInfoIndex < 0 || clipInfoIndex >= ClipInfos.Length) { return; } ClipInfo clipInfo = ClipInfos[clipInfoIndex]; if (!string.IsNullOrEmpty(clipInfo.ViewModelReloadFinishAnim)) { ViewModelEntity?.SetAnimParameter(clipInfo.ViewModelReloadFinishAnim, true); } }
public virtual void Reload(ClipInfo clipInfo) { if (clipInfo == null || CarriableInfo.Category == CarriableCategories.Melee || IsReloading || ClipAmmo >= clipInfo.ClipSize || clipInfo.ClipSize <= 0) { return; } if (Owner is Player player && !clipInfo.UnlimitedAmmo && (clipInfo.AmmoName == null || player.Inventory.Ammo.Count(clipInfo.AmmoName) <= 0)) { return; } IsReloading = true; TimeSinceReload = 0f; CurrentReloadTime = clipInfo.ReloadTime; (Owner as AnimEntity).SetAnimParameter(clipInfo.ReloadAnim, true); ClientReload(GetClipInfoIndex(clipInfo)); }
public virtual void Attack(ClipInfo clipInfo) { if (clipInfo == null) { return; } if (clipInfo.IsPartialReloading && IsReloading) { OnReloadFinish(clipInfo); } TimeSinceAttack = 0f; if (!TakeAmmo(clipInfo, 1)) { PlaySound(clipInfo.DryFireSound).SetPosition(Position).SetVolume(0.2f); return; } (Owner as AnimEntity).SetAnimParameter("b_attack", true); if (!string.IsNullOrEmpty(clipInfo.ShootSound)) { PlaySound(clipInfo.ShootSound).SetPosition(Position).SetVolume(0.8f); } Rand.SetSeed(Time.Tick); ShootEffects(GetClipInfoIndex(clipInfo)); for (int i = 0; i < clipInfo.Bullets; i++) { ShootBullet(clipInfo); } }
public virtual void ShootBullet(ClipInfo clipInfo) { ShootBullet(clipInfo.Spread, clipInfo.Force, clipInfo.Damage, clipInfo.BulletSize, clipInfo.ImpactEffect, clipInfo.DamageType); }
public virtual void FinishReload(ClipInfo clipInfo) { ClientFinishReload(GetClipInfoIndex(clipInfo)); }