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); } }
/// <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}"); }