Example #1
0
        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));
        }
Example #2
0
        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");
        }
Example #3
0
        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);
            }
        }
Example #4
0
        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);
        }
Example #5
0
        public virtual void ResetBurstFireCount(ClipInfo clipInfo, InputButton inputButton)
        {
            if (clipInfo == null || clipInfo.FiringType != FiringType.BURST)
            {
                return;
            }

            if (Input.Released(inputButton))
            {
                _burstCount = 0;
            }
        }
Example #6
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);
            }
        }
Example #7
0
        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));
        }
Example #8
0
        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);
            }
        }
Example #9
0
 public virtual void ShootBullet(ClipInfo clipInfo)
 {
     ShootBullet(clipInfo.Spread, clipInfo.Force, clipInfo.Damage, clipInfo.BulletSize, clipInfo.ImpactEffect, clipInfo.DamageType);
 }
Example #10
0
 public virtual void FinishReload(ClipInfo clipInfo)
 {
     ClientFinishReload(GetClipInfoIndex(clipInfo));
 }