Files
OldThink/Content.Server/Inventory/ServerInventorySystem.cs
Aviu00 735ff4a00b Всякое (#213)
* - tweak: Shotgun firerate standartization.

* - tweak: Less storage clothing size.

* - tweak: No spears for nukies.

* - tweak: Slightly buff ling armor.

* - tweak: Nerf tranquilizers.

* Revert "Tranquilizer balance (#23979)"

This reverts commit 9e1342f3e4.

* - remove: Disable whisper aspect.

* - fix: Borer fix on transform person.

* - fix: Items no longer get dropped on transform.

* - tweak: Reduce ling tentacle stun time.

* - tweak: Update chitinous armor desc.

* - fix: Transform sting range check.

* - tweak: More explosion resistance.

* - tweak: Fuel tanks can't create vacuum.

* - fix: Fix transform while being carried.

* - fix: Monkey form.

* - fix: I have no brain but I must live.

* - tweak: Update ling desc.

* - tweak: Fleshmend heals airloss.

* - fix: New wiki rules.

* - fix: Fix missing polymorph.

* - tweak: Structural damage now works better.

* - tweak: Less reflect prob.

* - fix: Popup fix.
2024-03-20 22:54:07 +03:00

65 lines
2.3 KiB
C#

using Content.Server.Storage.EntitySystems;
using Content.Shared.Explosion;
using Content.Shared.Inventory;
using Content.Shared.Inventory.Events;
using Content.Shared.Storage;
namespace Content.Server.Inventory
{
public sealed class ServerInventorySystem : InventorySystem
{
[Dependency] private readonly StorageSystem _storageSystem = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<InventoryComponent, BeforeExplodeEvent>(OnExploded);
SubscribeNetworkEvent<OpenSlotStorageNetworkMessage>(OnOpenSlotStorage);
}
private void OnExploded(Entity<InventoryComponent> ent, ref BeforeExplodeEvent args)
{
// explode each item in their inventory too
var slots = new InventorySlotEnumerator(ent);
while (slots.MoveNext(out var slot))
{
if (slot.ContainedEntity != null)
args.Contents.Add(slot.ContainedEntity.Value);
}
}
private void OnOpenSlotStorage(OpenSlotStorageNetworkMessage ev, EntitySessionEventArgs args)
{
if (args.SenderSession.AttachedEntity is not { Valid: true } uid)
return;
if (TryGetSlotEntity(uid, ev.Slot, out var entityUid) && TryComp<StorageComponent>(entityUid, out var storageComponent))
{
_storageSystem.OpenStorageUI(entityUid.Value, uid, storageComponent);
}
}
public void TransferEntityInventories(Entity<InventoryComponent?> source, Entity<InventoryComponent?> target)
{
if (!Resolve(source.Owner, ref source.Comp) || !Resolve(target.Owner, ref target.Comp))
return;
var enumerator = new InventorySlotEnumerator(source.Comp);
// WD EDIT START
List<(EntityUid, string)> items = new();
while (enumerator.NextItem(out var item, out var slot))
{
items.Add((item, slot.Name));
}
foreach (var (item, name) in items)
{
TryUnequip(source, name, true, true, inventory: source.Comp);
TryEquip(target, item, name, true, true, inventory: target.Comp);
}
// WD EDIT END
}
}
}