예제 #1
0
        private void Refill(Stackable stackable, int needAmmo)
        {
            var plasmaInStack = stackable.Amount;

            if (needAmmo >= plasmaInStack)
            {
                magazineBehaviour.ExpendAmmo(-plasmaInStack);
                stackable.ServerConsume(plasmaInStack);
            }
            else if (needAmmo < plasmaInStack)
            {
                magazineBehaviour.ExpendAmmo(-needAmmo);
                stackable.ServerConsume(needAmmo);
            }
        }
예제 #2
0
        /// <summary>
        /// Loads as much ammo as possible from the given clip. Returns reloading message.
        /// </summary>
        public String LoadFromClip(MagazineBehaviour clip)
        {
            if (clip == null)
            {
                return("");
            }

            int toTransfer = Math.Min(magazineSize - serverAmmoRemains, clip.serverAmmoRemains);

            if (clip.serverAmmoRemains == 0)
            {
                return($"{clip.gameObject.ExpensiveName()} is empty!");
            }
            else if (toTransfer == 0)
            {
                return($"{gameObject.ExpensiveName()} is full");
            }

            clip.ExpendAmmo(toTransfer);

            if (magType == MagType.Standard)
            {
                for (int i = toTransfer; i != 0; i--)
                {
                    containedBullets.Add(clip.initalProjectile);
                    containedProjectilesFired.Add(clip.ProjectilesFired);
                }
            }

            ServerSetAmmoRemains(serverAmmoRemains + toTransfer);

            var plural = toTransfer == 1 ? "" : "s";

            return($"Loaded {toTransfer} round{plural}");
        }