public void RemoveMagazine(EntityUid user, MagazineBarrelComponent component) { var mag = component.MagazineContainer.ContainedEntity; if (mag == null) { return; } if (component.MagNeedsOpenBolt && !component.BoltOpen) { _popup.PopupEntity(Loc.GetString("server-magazine-barrel-component-remove-magazine-bolt-closed"), component.Owner, Filter.Entities(user)); return; } component.MagazineContainer.Remove(mag.Value); SoundSystem.Play(Filter.Pvs(component.Owner), component.SoundMagEject.GetSound(), component.Owner, AudioParams.Default.WithVolume(-2)); if (TryComp(user, out HandsComponent? handsComponent)) { handsComponent.PutInHandOrDrop(EntityManager.GetComponent <SharedItemComponent>(mag.Value)); } component.Dirty(EntityManager); UpdateMagazineAppearance(component); }
private void CycleMagazine(MagazineBarrelComponent component, bool manual = false) { if (component.BoltOpen) { return; } TryEjectChamber(component); TryFeedChamber(component); if (component.ChamberContainer.ContainedEntity == null && !component.BoltOpen) { SoundSystem.Play(Filter.Pvs(component.Owner), component.SoundBoltOpen.GetSound(), component.Owner, AudioParams.Default.WithVolume(-5)); if (_container.TryGetContainingContainer(component.Owner, out var container)) { _popup.PopupEntity(Loc.GetString("server-magazine-barrel-component-cycle-bolt-open"), component.Owner, Filter.Entities(container.Owner)); } component.BoltOpen = true; return; } if (manual) { SoundSystem.Play(Filter.Pvs(component.Owner), component.SoundRack.GetSound(), component.Owner, AudioParams.Default.WithVolume(-2)); } component.Dirty(EntityManager); UpdateMagazineAppearance(component); }
public void InsertMagazine(EntityUid user, EntityUid magazine, MagazineBarrelComponent component) { SoundSystem.Play(Filter.Pvs(component.Owner), component.SoundMagInsert.GetSound(), component.Owner, AudioParams.Default.WithVolume(-2)); _popup.PopupEntity(Loc.GetString("server-magazine-barrel-component-interact-using-success"), component.Owner, Filter.Entities(user)); component.MagazineContainer.Insert(magazine); component.Dirty(EntityManager); UpdateMagazineAppearance(component); }
private void OnMagazineInit(EntityUid uid, MagazineBarrelComponent component, ComponentInit args) { component.ChamberContainer = uid.EnsureContainer <ContainerSlot>($"{component.GetType()}-chamber"); component.MagazineContainer = uid.EnsureContainer <ContainerSlot>($"{component.GetType()}-magazine", out var existing); if (!existing && component.MagFillPrototype != null) { var magEntity = EntityManager.SpawnEntity(component.MagFillPrototype, Transform(uid).Coordinates); component.MagazineContainer.Insert(magEntity); } // Temporary coz client doesn't know about magfill. component.Dirty(EntityManager); }
private void OnMagazineInteractUsing(EntityUid uid, MagazineBarrelComponent component, InteractUsingEvent args) { if (args.Handled) { return; } if (CanInsertMagazine(args.User, args.Used, component, false)) { InsertMagazine(args.User, args.Used, component); args.Handled = true; return; } // Insert 1 ammo if (TryComp(args.Used, out AmmoComponent? ammoComponent)) { if (!component.BoltOpen) { _popup.PopupEntity(Loc.GetString("server-magazine-barrel-component-interact-using-ammo-bolt-closed"), component.Owner, Filter.Entities(args.User)); return; } if (ammoComponent.Caliber != component.Caliber) { _popup.PopupEntity(Loc.GetString("server-magazine-barrel-component-interact-using-wrong-caliber"), component.Owner, Filter.Entities(args.User)); return; } if (component.ChamberContainer.ContainedEntity == null) { _popup.PopupEntity(Loc.GetString("server-magazine-barrel-component-interact-using-ammo-success"), component.Owner, Filter.Entities(args.User)); component.ChamberContainer.Insert(args.Used); component.Dirty(EntityManager); UpdateMagazineAppearance(component); args.Handled = true; return; } _popup.PopupEntity(Loc.GetString("server-magazine-barrel-component-interact-using-ammo-full"), component.Owner, Filter.Entities(args.User)); } }