Storage Standardization [Take 2] (#21270)
This commit is contained in:
@@ -1,16 +1,15 @@
|
|||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
using Robust.Client.GameObjects;
|
using Content.Client.Message;
|
||||||
using Robust.Client.Graphics;
|
using Robust.Client.Graphics;
|
||||||
using Robust.Client.UserInterface.Controls;
|
using Robust.Client.UserInterface.Controls;
|
||||||
using Robust.Client.UserInterface.CustomControls;
|
|
||||||
using Content.Client.Stylesheets;
|
using Content.Client.Stylesheets;
|
||||||
using Content.Client.UserInterface.Controls;
|
using Content.Client.UserInterface.Controls;
|
||||||
using Content.Shared.IdentityManagement;
|
using Content.Shared.IdentityManagement;
|
||||||
using Content.Shared.Item;
|
using Content.Shared.Item;
|
||||||
using Content.Shared.Stacks;
|
using Content.Shared.Stacks;
|
||||||
using Content.Shared.Storage;
|
using Content.Shared.Storage;
|
||||||
|
using Content.Shared.Storage.EntitySystems;
|
||||||
using Robust.Client.UserInterface;
|
using Robust.Client.UserInterface;
|
||||||
using Robust.Shared.Containers;
|
|
||||||
using static Robust.Client.UserInterface.Controls.BoxContainer;
|
using static Robust.Client.UserInterface.Controls.BoxContainer;
|
||||||
using Direction = Robust.Shared.Maths.Direction;
|
using Direction = Robust.Shared.Maths.Direction;
|
||||||
|
|
||||||
@@ -23,7 +22,9 @@ namespace Content.Client.Storage.UI
|
|||||||
{
|
{
|
||||||
private readonly IEntityManager _entityManager;
|
private readonly IEntityManager _entityManager;
|
||||||
|
|
||||||
private readonly Label _information;
|
private readonly SharedStorageSystem _storage;
|
||||||
|
|
||||||
|
private readonly RichTextLabel _information;
|
||||||
public readonly ContainerButton StorageContainerButton;
|
public readonly ContainerButton StorageContainerButton;
|
||||||
public readonly ListContainer EntityList;
|
public readonly ListContainer EntityList;
|
||||||
private readonly StyleBoxFlat _hoveredBox = new() { BackgroundColor = Color.Black.WithAlpha(0.35f) };
|
private readonly StyleBoxFlat _hoveredBox = new() { BackgroundColor = Color.Black.WithAlpha(0.35f) };
|
||||||
@@ -32,6 +33,7 @@ namespace Content.Client.Storage.UI
|
|||||||
public StorageWindow(IEntityManager entityManager)
|
public StorageWindow(IEntityManager entityManager)
|
||||||
{
|
{
|
||||||
_entityManager = entityManager;
|
_entityManager = entityManager;
|
||||||
|
_storage = _entityManager.System<SharedStorageSystem>();
|
||||||
SetSize = new Vector2(240, 320);
|
SetSize = new Vector2(240, 320);
|
||||||
Title = Loc.GetString("comp-storage-window-title");
|
Title = Loc.GetString("comp-storage-window-title");
|
||||||
RectClipContent = true;
|
RectClipContent = true;
|
||||||
@@ -60,11 +62,13 @@ namespace Content.Client.Storage.UI
|
|||||||
|
|
||||||
StorageContainerButton.AddChild(vBox);
|
StorageContainerButton.AddChild(vBox);
|
||||||
|
|
||||||
_information = new Label
|
_information = new RichTextLabel
|
||||||
{
|
{
|
||||||
Text = Loc.GetString("comp-storage-window-volume", ("itemCount", 0), ("usedVolume", 0), ("maxVolume", 0)),
|
|
||||||
VerticalAlignment = VAlignment.Center
|
VerticalAlignment = VAlignment.Center
|
||||||
};
|
};
|
||||||
|
_information.SetMessage(Loc.GetString("comp-storage-window-weight",
|
||||||
|
("percent", 0),
|
||||||
|
("size", SharedItemSystem.GetItemSizeLocale(ItemSize.Normal))));
|
||||||
|
|
||||||
vBox.AddChild(_information);
|
vBox.AddChild(_information);
|
||||||
|
|
||||||
@@ -101,15 +105,25 @@ namespace Content.Client.Storage.UI
|
|||||||
|
|
||||||
EntityList.PopulateList(list);
|
EntityList.PopulateList(list);
|
||||||
|
|
||||||
// Sets information about entire storage container current capacity
|
SetStorageInformation((entity, component));
|
||||||
if (component.StorageCapacityMax != 0)
|
}
|
||||||
|
|
||||||
|
private void SetStorageInformation(Entity<StorageComponent> uid)
|
||||||
|
{
|
||||||
|
//todo: text is the straight agenda. What about anything else?
|
||||||
|
if (uid.Comp.MaxSlots == null)
|
||||||
{
|
{
|
||||||
_information.Text = Loc.GetString("comp-storage-window-volume", ("itemCount", storedCount),
|
_information.SetMarkup(Loc.GetString("comp-storage-window-weight",
|
||||||
("usedVolume", component.StorageUsed), ("maxVolume", component.StorageCapacityMax));
|
("weight", _storage.GetCumulativeItemSizes(uid, uid.Comp)),
|
||||||
|
("maxWeight", uid.Comp.MaxTotalWeight),
|
||||||
|
("size", SharedItemSystem.GetItemSizeLocale(_storage.GetMaxItemSize((uid, uid.Comp))))));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_information.Text = Loc.GetString("comp-storage-window-volume-unlimited", ("itemCount", storedCount));
|
_information.SetMarkup(Loc.GetString("comp-storage-window-slots",
|
||||||
|
("itemCount", uid.Comp.Container.ContainedEntities.Count),
|
||||||
|
("maxCount", uid.Comp.MaxSlots),
|
||||||
|
("size", SharedItemSystem.GetItemSizeLocale(_storage.GetMaxItemSize((uid, uid.Comp))))));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -122,10 +136,9 @@ namespace Content.Client.Storage.UI
|
|||||||
|| !_entityManager.EntityExists(entity))
|
|| !_entityManager.EntityExists(entity))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
_entityManager.TryGetComponent(entity, out ItemComponent? item);
|
|
||||||
_entityManager.TryGetComponent(entity, out StackComponent? stack);
|
_entityManager.TryGetComponent(entity, out StackComponent? stack);
|
||||||
|
_entityManager.TryGetComponent(entity, out ItemComponent? item);
|
||||||
var count = stack?.Count ?? 1;
|
var count = stack?.Count ?? 1;
|
||||||
var size = item?.Size;
|
|
||||||
|
|
||||||
var spriteView = new SpriteView
|
var spriteView = new SpriteView
|
||||||
{
|
{
|
||||||
@@ -147,12 +160,14 @@ namespace Content.Client.Storage.UI
|
|||||||
HorizontalExpand = true,
|
HorizontalExpand = true,
|
||||||
ClipText = true,
|
ClipText = true,
|
||||||
Text = _entityManager.GetComponent<MetaDataComponent>(Identity.Entity(entity, _entityManager)).EntityName +
|
Text = _entityManager.GetComponent<MetaDataComponent>(Identity.Entity(entity, _entityManager)).EntityName +
|
||||||
(count > 1 ? $" x {count}" : string.Empty),
|
(count > 1 ? $" x {count}" : string.Empty)
|
||||||
},
|
},
|
||||||
new Label
|
new Label
|
||||||
{
|
{
|
||||||
Align = Label.AlignMode.Right,
|
Align = Label.AlignMode.Right,
|
||||||
Text = size.ToString() ?? Loc.GetString("comp-storage-no-item-size"),
|
Text = item?.Size != null
|
||||||
|
? $"{SharedItemSystem.GetItemSizeWeight(item.Size)}"
|
||||||
|
: Loc.GetString("comp-storage-no-item-size")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ namespace Content.IntegrationTests.Tests
|
|||||||
- type: Clothing
|
- type: Clothing
|
||||||
slots: [innerclothing]
|
slots: [innerclothing]
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 5
|
size: Tiny
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: IDCardDummy
|
name: IDCardDummy
|
||||||
@@ -36,7 +36,7 @@ namespace Content.IntegrationTests.Tests
|
|||||||
slots:
|
slots:
|
||||||
- idcard
|
- idcard
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 5
|
size: Tiny
|
||||||
- type: IdCard
|
- type: IdCard
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
@@ -44,14 +44,14 @@ namespace Content.IntegrationTests.Tests
|
|||||||
id: FlashlightDummy
|
id: FlashlightDummy
|
||||||
components:
|
components:
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 5
|
size: Tiny
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: ToolboxDummy
|
name: ToolboxDummy
|
||||||
id: ToolboxDummy
|
id: ToolboxDummy
|
||||||
components:
|
components:
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 9999
|
size: Huge
|
||||||
";
|
";
|
||||||
[Test]
|
[Test]
|
||||||
public async Task Test()
|
public async Task Test()
|
||||||
|
|||||||
@@ -1,39 +0,0 @@
|
|||||||
using Content.Shared.Item;
|
|
||||||
using Content.Shared.Stacks;
|
|
||||||
using Robust.Shared.GameObjects;
|
|
||||||
using Robust.Shared.Prototypes;
|
|
||||||
|
|
||||||
namespace Content.IntegrationTests.Tests;
|
|
||||||
|
|
||||||
[TestFixture]
|
|
||||||
public sealed class StackTest
|
|
||||||
{
|
|
||||||
[Test]
|
|
||||||
public async Task StackCorrectItemSize()
|
|
||||||
{
|
|
||||||
await using var pair = await PoolManager.GetServerClient();
|
|
||||||
var server = pair.Server;
|
|
||||||
|
|
||||||
var protoManager = server.ResolveDependency<IPrototypeManager>();
|
|
||||||
var compFact = server.ResolveDependency<IComponentFactory>();
|
|
||||||
|
|
||||||
Assert.Multiple(() =>
|
|
||||||
{
|
|
||||||
foreach (var entity in PoolManager.GetPrototypesWithComponent<StackComponent>(server))
|
|
||||||
{
|
|
||||||
if (!entity.TryGetComponent<StackComponent>(out var stackComponent, compFact) ||
|
|
||||||
!entity.TryGetComponent<ItemComponent>(out var itemComponent, compFact))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (!protoManager.TryIndex<StackPrototype>(stackComponent.StackTypeId, out var stackProto) ||
|
|
||||||
stackProto.ItemSize == null)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
var expectedSize = stackProto.ItemSize * stackComponent.Count;
|
|
||||||
Assert.That(itemComponent.Size, Is.EqualTo(expectedSize), $"Prototype id: {entity.ID} has an item size of {itemComponent.Size} but expected size of {expectedSize}.");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
await pair.CleanReturnAsync();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -3,11 +3,12 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Content.Server.Storage.Components;
|
using Content.Server.Storage.Components;
|
||||||
using Content.Shared.Item;
|
using Content.Shared.Item;
|
||||||
|
using Content.Shared.Prototypes;
|
||||||
using Content.Shared.Storage;
|
using Content.Shared.Storage;
|
||||||
using Content.Shared.Storage.Components;
|
using Content.Shared.Storage.Components;
|
||||||
|
using Content.Shared.Storage.EntitySystems;
|
||||||
using Robust.Shared.GameObjects;
|
using Robust.Shared.GameObjects;
|
||||||
using Robust.Shared.Prototypes;
|
using Robust.Shared.Prototypes;
|
||||||
using Robust.UnitTesting;
|
|
||||||
|
|
||||||
namespace Content.IntegrationTests.Tests
|
namespace Content.IntegrationTests.Tests
|
||||||
{
|
{
|
||||||
@@ -32,9 +33,11 @@ namespace Content.IntegrationTests.Tests
|
|||||||
{
|
{
|
||||||
if (!proto.TryGetComponent<StorageComponent>("Storage", out var storage) ||
|
if (!proto.TryGetComponent<StorageComponent>("Storage", out var storage) ||
|
||||||
storage.Whitelist != null ||
|
storage.Whitelist != null ||
|
||||||
!proto.TryGetComponent<ItemComponent>("Item", out var item)) continue;
|
storage.MaxItemSize == null ||
|
||||||
|
!proto.TryGetComponent<ItemComponent>("Item", out var item))
|
||||||
|
continue;
|
||||||
|
|
||||||
Assert.That(storage.StorageCapacityMax, Is.LessThanOrEqualTo(item.Size), $"Found storage arbitrage on {proto.ID}");
|
Assert.That(storage.MaxItemSize.Value, Is.LessThanOrEqualTo(item.Size), $"Found storage arbitrage on {proto.ID}");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
await pair.CleanReturnAsync();
|
await pair.CleanReturnAsync();
|
||||||
@@ -82,69 +85,122 @@ namespace Content.IntegrationTests.Tests
|
|||||||
{
|
{
|
||||||
foreach (var proto in PoolManager.GetPrototypesWithComponent<StorageFillComponent>(server))
|
foreach (var proto in PoolManager.GetPrototypesWithComponent<StorageFillComponent>(server))
|
||||||
{
|
{
|
||||||
int capacity;
|
if (proto.HasComponent<EntityStorageComponent>(compFact))
|
||||||
var isEntStorage = false;
|
continue;
|
||||||
|
|
||||||
if (proto.TryGetComponent<StorageComponent>("Storage", out var storage))
|
if (!proto.TryGetComponent<StorageComponent>("Storage", out var storage))
|
||||||
{
|
{
|
||||||
capacity = storage.StorageCapacityMax;
|
Assert.Fail($"Entity {proto.ID} has storage-fill without a storage component!");
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
else if (proto.TryGetComponent<EntityStorageComponent>("EntityStorage", out var entStorage))
|
|
||||||
|
proto.TryGetComponent<ItemComponent>("Item", out var item);
|
||||||
|
|
||||||
|
var fill = (StorageFillComponent) proto.Components[id].Component;
|
||||||
|
var size = GetFillSize(fill, false, protoMan);
|
||||||
|
var maxSize = storage.MaxItemSize ??
|
||||||
|
(item?.Size == null
|
||||||
|
? SharedStorageSystem.DefaultStorageMaxItemSize
|
||||||
|
: (ItemSize) Math.Max(0, (int) item.Size - 1));
|
||||||
|
if (storage.MaxSlots != null)
|
||||||
{
|
{
|
||||||
capacity = entStorage.Capacity;
|
Assert.That(GetFillSize(fill, true, protoMan), Is.LessThanOrEqualTo(storage.MaxSlots),
|
||||||
isEntStorage = true;
|
$"{proto.ID} storage fill has too many items.");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
Assert.That(size, Is.LessThanOrEqualTo(storage.MaxTotalWeight), $"{proto.ID} storage fill is too large.");
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var entry in fill.Contents)
|
||||||
|
{
|
||||||
|
if (entry.PrototypeId == null)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!protoMan.TryIndex<EntityPrototype>(entry.PrototypeId, out var fillItem))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!fillItem.TryGetComponent<ItemComponent>("Item", out var entryItem))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
Assert.That(entryItem.Size, Is.LessThanOrEqualTo(maxSize),
|
||||||
|
$"Entity {proto.ID} has storage-fill item, {entry.PrototypeId}, that is too large");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
await pair.CleanReturnAsync();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public async Task TestSufficientSpaceForEntityStorageFill()
|
||||||
|
{
|
||||||
|
await using var pair = await PoolManager.GetServerClient();
|
||||||
|
var server = pair.Server;
|
||||||
|
|
||||||
|
var protoMan = server.ResolveDependency<IPrototypeManager>();
|
||||||
|
var compFact = server.ResolveDependency<IComponentFactory>();
|
||||||
|
var id = compFact.GetComponentName(typeof(StorageFillComponent));
|
||||||
|
|
||||||
|
Assert.Multiple(() =>
|
||||||
|
{
|
||||||
|
foreach (var proto in PoolManager.GetPrototypesWithComponent<StorageFillComponent>(server))
|
||||||
|
{
|
||||||
|
if (proto.HasComponent<StorageComponent>(compFact))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!proto.TryGetComponent<EntityStorageComponent>("EntityStorage", out var entStorage))
|
||||||
{
|
{
|
||||||
Assert.Fail($"Entity {proto.ID} has storage-fill without a storage component!");
|
Assert.Fail($"Entity {proto.ID} has storage-fill without a storage component!");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
var fill = (StorageFillComponent) proto.Components[id].Component;
|
var fill = (StorageFillComponent) proto.Components[id].Component;
|
||||||
var size = GetFillSize(fill, isEntStorage);
|
var size = GetFillSize(fill, true, protoMan);
|
||||||
Assert.That(size, Is.LessThanOrEqualTo(capacity), $"{proto.ID} storage fill is too large.");
|
Assert.That(size, Is.LessThanOrEqualTo(entStorage.Capacity),
|
||||||
|
$"{proto.ID} storage fill is too large.");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
await pair.CleanReturnAsync();
|
||||||
|
}
|
||||||
|
|
||||||
int GetEntrySize(EntitySpawnEntry entry, bool isEntStorage)
|
private int GetEntrySize(EntitySpawnEntry entry, bool getCount, IPrototypeManager protoMan)
|
||||||
|
{
|
||||||
|
if (entry.PrototypeId == null)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (!protoMan.TryIndex<EntityPrototype>(entry.PrototypeId, out var proto))
|
||||||
{
|
{
|
||||||
if (entry.PrototypeId == null)
|
Assert.Fail($"Unknown prototype: {entry.PrototypeId}");
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (!protoMan.TryIndex<EntityPrototype>(entry.PrototypeId, out var proto))
|
|
||||||
{
|
|
||||||
Assert.Fail($"Unknown prototype: {entry.PrototypeId}");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isEntStorage)
|
|
||||||
return entry.Amount;
|
|
||||||
|
|
||||||
if (proto.TryGetComponent<ItemComponent>("Item", out var item))
|
|
||||||
return item.Size * entry.Amount;
|
|
||||||
|
|
||||||
Assert.Fail($"Prototype is missing item comp: {entry.PrototypeId}");
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int GetFillSize(StorageFillComponent fill, bool isEntStorage)
|
if (getCount)
|
||||||
|
return entry.Amount;
|
||||||
|
|
||||||
|
if (proto.TryGetComponent<ItemComponent>("Item", out var item))
|
||||||
|
return SharedItemSystem.GetItemSizeWeight(item.Size) * entry.Amount;
|
||||||
|
|
||||||
|
Assert.Fail($"Prototype is missing item comp: {entry.PrototypeId}");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int GetFillSize(StorageFillComponent fill, bool getCount, IPrototypeManager protoMan)
|
||||||
|
{
|
||||||
|
var totalSize = 0;
|
||||||
|
var groups = new Dictionary<string, int>();
|
||||||
|
foreach (var entry in fill.Contents)
|
||||||
{
|
{
|
||||||
var totalSize = 0;
|
var size = GetEntrySize(entry, getCount, protoMan);
|
||||||
var groups = new Dictionary<string, int>();
|
|
||||||
foreach (var entry in fill.Contents)
|
|
||||||
{
|
|
||||||
var size = GetEntrySize(entry, isEntStorage);
|
|
||||||
|
|
||||||
if (entry.GroupId == null)
|
if (entry.GroupId == null)
|
||||||
totalSize += size;
|
totalSize += size;
|
||||||
else
|
else
|
||||||
groups[entry.GroupId] = Math.Max(size, groups.GetValueOrDefault(entry.GroupId));
|
groups[entry.GroupId] = Math.Max(size, groups.GetValueOrDefault(entry.GroupId));
|
||||||
}
|
|
||||||
|
|
||||||
return totalSize + groups.Values.Sum();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
await pair.CleanReturnAsync();
|
return totalSize + groups.Values.Sum();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -180,14 +180,13 @@ namespace Content.Server.Chemistry.EntitySystems
|
|||||||
var user = message.Session.AttachedEntity;
|
var user = message.Session.AttachedEntity;
|
||||||
var maybeContainer = _itemSlotsSystem.GetItemOrNull(chemMaster, SharedChemMaster.OutputSlotName);
|
var maybeContainer = _itemSlotsSystem.GetItemOrNull(chemMaster, SharedChemMaster.OutputSlotName);
|
||||||
if (maybeContainer is not { Valid: true } container
|
if (maybeContainer is not { Valid: true } container
|
||||||
|| !TryComp(container, out StorageComponent? storage)
|
|| !TryComp(container, out StorageComponent? storage))
|
||||||
|| storage.Container is null)
|
|
||||||
{
|
{
|
||||||
return; // output can't fit pills
|
return; // output can't fit pills
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ensure the number is valid.
|
// Ensure the number is valid.
|
||||||
if (message.Number == 0 || message.Number > storage.StorageCapacityMax - storage.StorageUsed)
|
if (message.Number == 0 || !_storageSystem.HasSpace((container, storage)))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Ensure the amount is valid.
|
// Ensure the amount is valid.
|
||||||
@@ -348,17 +347,14 @@ namespace Content.Server.Chemistry.EntitySystems
|
|||||||
if (!TryComp(container, out StorageComponent? storage))
|
if (!TryComp(container, out StorageComponent? storage))
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
var pills = storage.Container?.ContainedEntities.Select((Func<EntityUid, (string, FixedPoint2 quantity)>) (pill =>
|
var pills = storage.Container.ContainedEntities.Select((Func<EntityUid, (string, FixedPoint2 quantity)>) (pill =>
|
||||||
{
|
{
|
||||||
_solutionContainerSystem.TryGetSolution(pill, SharedChemMaster.PillSolutionName, out var solution);
|
_solutionContainerSystem.TryGetSolution(pill, SharedChemMaster.PillSolutionName, out var solution);
|
||||||
var quantity = solution?.Volume ?? FixedPoint2.Zero;
|
var quantity = solution?.Volume ?? FixedPoint2.Zero;
|
||||||
return (Name(pill), quantity);
|
return (Name(pill), quantity);
|
||||||
})).ToList();
|
})).ToList();
|
||||||
|
|
||||||
if (pills == null)
|
return new ContainerInfo(name, _storageSystem.GetCumulativeItemSizes(container.Value, storage), storage.MaxTotalWeight)
|
||||||
return null;
|
|
||||||
|
|
||||||
return new ContainerInfo(name, storage.StorageUsed, storage.StorageCapacityMax)
|
|
||||||
{
|
{
|
||||||
Entities = pills
|
Entities = pills
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
using System.Linq;
|
||||||
using Content.Server.Body.Components;
|
using Content.Server.Body.Components;
|
||||||
using Content.Server.Body.Systems;
|
using Content.Server.Body.Systems;
|
||||||
using Content.Server.Inventory;
|
using Content.Server.Inventory;
|
||||||
@@ -122,7 +123,7 @@ public sealed class FoodSystem : EntitySystem
|
|||||||
return (false, false);
|
return (false, false);
|
||||||
|
|
||||||
// Check for used storage on the food item
|
// Check for used storage on the food item
|
||||||
if (TryComp<StorageComponent>(food, out var storageState) && storageState.StorageUsed != 0)
|
if (TryComp<StorageComponent>(food, out var storageState) && storageState.Container.ContainedEntities.Any())
|
||||||
{
|
{
|
||||||
_popup.PopupEntity(Loc.GetString("food-has-used-storage", ("food", food)), user, user);
|
_popup.PopupEntity(Loc.GetString("food-has-used-storage", ("food", food)), user, user);
|
||||||
return (false, true);
|
return (false, true);
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ namespace Content.Server.Storage.Components
|
|||||||
/// Max item size that can be fitted into secret stash.
|
/// Max item size that can be fitted into secret stash.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[DataField("maxItemSize")]
|
[DataField("maxItemSize")]
|
||||||
public int MaxItemSize = (int) ReferenceSizes.Pocket;
|
public ItemSize MaxItemSize = ItemSize.Small;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// IC secret stash name. For example "the toilet cistern".
|
/// IC secret stash name. For example "the toilet cistern".
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
using Content.Shared.Rounding;
|
using Content.Shared.Rounding;
|
||||||
using Content.Shared.Storage;
|
using Content.Shared.Storage;
|
||||||
using Content.Shared.Storage.Components;
|
using Content.Shared.Storage.Components;
|
||||||
using Robust.Server.GameObjects;
|
|
||||||
using Robust.Shared.Containers;
|
using Robust.Shared.Containers;
|
||||||
|
|
||||||
namespace Content.Server.Storage.EntitySystems;
|
namespace Content.Server.Storage.EntitySystems;
|
||||||
@@ -13,12 +12,12 @@ public sealed class StorageFillVisualizerSystem : EntitySystem
|
|||||||
public override void Initialize()
|
public override void Initialize()
|
||||||
{
|
{
|
||||||
base.Initialize();
|
base.Initialize();
|
||||||
SubscribeLocalEvent<StorageFillVisualizerComponent, ComponentInit>(OnInit);
|
SubscribeLocalEvent<StorageFillVisualizerComponent, ComponentStartup>(OnStartup);
|
||||||
SubscribeLocalEvent<StorageFillVisualizerComponent, EntInsertedIntoContainerMessage>(OnInserted);
|
SubscribeLocalEvent<StorageFillVisualizerComponent, EntInsertedIntoContainerMessage>(OnInserted);
|
||||||
SubscribeLocalEvent<StorageFillVisualizerComponent, EntRemovedFromContainerMessage>(OnRemoved);
|
SubscribeLocalEvent<StorageFillVisualizerComponent, EntRemovedFromContainerMessage>(OnRemoved);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnInit(EntityUid uid, StorageFillVisualizerComponent component, ComponentInit args)
|
private void OnStartup(EntityUid uid, StorageFillVisualizerComponent component, ComponentStartup args)
|
||||||
{
|
{
|
||||||
UpdateAppearance(uid, component: component);
|
UpdateAppearance(uid, component: component);
|
||||||
}
|
}
|
||||||
@@ -42,7 +41,13 @@ public sealed class StorageFillVisualizerSystem : EntitySystem
|
|||||||
if (component.MaxFillLevels < 1)
|
if (component.MaxFillLevels < 1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var level = ContentHelpers.RoundToEqualLevels(storage.StorageUsed, storage.StorageCapacityMax, component.MaxFillLevels);
|
if (!_appearance.TryGetData<int>(uid, StorageVisuals.StorageUsed, out var used, appearance))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!_appearance.TryGetData<int>(uid, StorageVisuals.Capacity, out var capacity, appearance))
|
||||||
|
return;
|
||||||
|
|
||||||
|
var level = ContentHelpers.RoundToEqualLevels(used, capacity, component.MaxFillLevels);
|
||||||
_appearance.SetData(uid, StorageFillVisuals.FillLevel, level, appearance);
|
_appearance.SetData(uid, StorageFillVisuals.FillLevel, level, appearance);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,10 +38,11 @@ public sealed partial class StorageSystem
|
|||||||
if (entityStorageComp != null && EntityStorage.Insert(ent, uid, entityStorageComp))
|
if (entityStorageComp != null && EntityStorage.Insert(ent, uid, entityStorageComp))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (storageComp != null && Insert(uid, ent, out _, storageComp: storageComp, playSound: false))
|
var reason = string.Empty;
|
||||||
|
if (storageComp != null && Insert(uid, ent, out _, out reason, storageComp: storageComp, playSound: false))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
Log.Error($"Tried to StorageFill {item} inside {ToPrettyString(uid)} but can't.");
|
Log.Error($"Tried to StorageFill {item} inside {ToPrettyString(uid)} but can't. Reason: {Loc.GetString(reason ?? "no reason.")}");
|
||||||
EntityManager.DeleteEntity(ent);
|
EntityManager.DeleteEntity(ent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,9 @@ using System.Linq;
|
|||||||
using Content.Server.Administration;
|
using Content.Server.Administration;
|
||||||
using Content.Server.Cargo.Systems;
|
using Content.Server.Cargo.Systems;
|
||||||
using Content.Server.EUI;
|
using Content.Server.EUI;
|
||||||
|
using Content.Server.Item;
|
||||||
using Content.Shared.Administration;
|
using Content.Shared.Administration;
|
||||||
|
using Content.Shared.Item;
|
||||||
using Content.Shared.Materials;
|
using Content.Shared.Materials;
|
||||||
using Content.Shared.Research.Prototypes;
|
using Content.Shared.Research.Prototypes;
|
||||||
using Content.Shared.UserInterface;
|
using Content.Shared.UserInterface;
|
||||||
@@ -23,7 +25,7 @@ public sealed class StatValuesCommand : IConsoleCommand
|
|||||||
|
|
||||||
public string Command => "showvalues";
|
public string Command => "showvalues";
|
||||||
public string Description => Loc.GetString("stat-values-desc");
|
public string Description => Loc.GetString("stat-values-desc");
|
||||||
public string Help => $"{Command} <cargosell / lathesell / melee>";
|
public string Help => $"{Command} <cargosell / lathesell / melee / itemsize>";
|
||||||
public void Execute(IConsoleShell shell, string argStr, string[] args)
|
public void Execute(IConsoleShell shell, string argStr, string[] args)
|
||||||
{
|
{
|
||||||
if (shell.Player is not { } pSession)
|
if (shell.Player is not { } pSession)
|
||||||
@@ -51,6 +53,9 @@ public sealed class StatValuesCommand : IConsoleCommand
|
|||||||
case "melee":
|
case "melee":
|
||||||
message = GetMelee();
|
message = GetMelee();
|
||||||
break;
|
break;
|
||||||
|
case "itemsize":
|
||||||
|
message = GetItem();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
shell.WriteError(Loc.GetString("stat-values-invalid", ("arg", args[0])));
|
shell.WriteError(Loc.GetString("stat-values-invalid", ("arg", args[0])));
|
||||||
return;
|
return;
|
||||||
@@ -119,6 +124,49 @@ public sealed class StatValuesCommand : IConsoleCommand
|
|||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private StatValuesEuiMessage GetItem()
|
||||||
|
{
|
||||||
|
var values = new List<string[]>();
|
||||||
|
var metaQuery = _entManager.GetEntityQuery<MetaDataComponent>();
|
||||||
|
var itemQuery = _entManager.GetEntityQuery<ItemComponent>();
|
||||||
|
var items = new HashSet<string>(1024);
|
||||||
|
var ents = _entManager.GetEntities().ToArray();
|
||||||
|
|
||||||
|
foreach (var entity in ents)
|
||||||
|
{
|
||||||
|
if (!metaQuery.TryGetComponent(entity, out var meta))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
var id = meta.EntityPrototype?.ID;
|
||||||
|
|
||||||
|
// We'll add it even if we don't have it so we don't have to raise the event again because this is probably faster.
|
||||||
|
if (id == null || !items.Add(id))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!itemQuery.TryGetComponent(entity, out var itemComp))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
values.Add(new[]
|
||||||
|
{
|
||||||
|
id,
|
||||||
|
$"{SharedItemSystem.GetItemSizeLocale(itemComp.Size)}",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
var state = new StatValuesEuiMessage
|
||||||
|
{
|
||||||
|
Title = Loc.GetString("stat-item-values"),
|
||||||
|
Headers = new List<string>
|
||||||
|
{
|
||||||
|
Loc.GetString("stat-item-id"),
|
||||||
|
Loc.GetString("stat-item-price"),
|
||||||
|
},
|
||||||
|
Values = values,
|
||||||
|
};
|
||||||
|
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
private StatValuesEuiMessage GetMelee()
|
private StatValuesEuiMessage GetMelee()
|
||||||
{
|
{
|
||||||
var values = new List<string[]>();
|
var values = new List<string[]>();
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ public sealed class EnergySwordSystem : EntitySystem
|
|||||||
{
|
{
|
||||||
if (TryComp(uid, out ItemComponent? item))
|
if (TryComp(uid, out ItemComponent? item))
|
||||||
{
|
{
|
||||||
_item.SetSize(uid, 5, item);
|
_item.SetSize(uid, ItemSize.Small, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TryComp<DisarmMalusComponent>(uid, out var malus))
|
if (TryComp<DisarmMalusComponent>(uid, out var malus))
|
||||||
@@ -125,7 +125,7 @@ public sealed class EnergySwordSystem : EntitySystem
|
|||||||
{
|
{
|
||||||
if (TryComp(uid, out ItemComponent? item))
|
if (TryComp(uid, out ItemComponent? item))
|
||||||
{
|
{
|
||||||
_item.SetSize(uid, 9999, item);
|
_item.SetSize(uid, ItemSize.Huge, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (comp.IsSharp)
|
if (comp.IsSharp)
|
||||||
|
|||||||
@@ -264,7 +264,7 @@ public abstract partial class InventorySystem
|
|||||||
if (slotDefinition.DependsOn != null && !TryGetSlotEntity(target, slotDefinition.DependsOn, out _, inventory))
|
if (slotDefinition.DependsOn != null && !TryGetSlotEntity(target, slotDefinition.DependsOn, out _, inventory))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
var fittingInPocket = slotDefinition.SlotFlags.HasFlag(SlotFlags.POCKET) && item is { Size: <= (int) ReferenceSizes.Pocket };
|
var fittingInPocket = slotDefinition.SlotFlags.HasFlag(SlotFlags.POCKET) && item is { Size: <= ItemSize.Small };
|
||||||
if (clothing == null && !fittingInPocket
|
if (clothing == null && !fittingInPocket
|
||||||
|| clothing != null && !clothing.Slots.HasFlag(slotDefinition.SlotFlags) && !fittingInPocket)
|
|| clothing != null && !clothing.Slots.HasFlag(slotDefinition.SlotFlags) && !fittingInPocket)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -13,18 +13,17 @@ namespace Content.Shared.Item;
|
|||||||
[Access(typeof(SharedItemSystem))]
|
[Access(typeof(SharedItemSystem))]
|
||||||
public sealed partial class ItemComponent : Component
|
public sealed partial class ItemComponent : Component
|
||||||
{
|
{
|
||||||
[ViewVariables(VVAccess.ReadWrite)]
|
[DataField, ViewVariables(VVAccess.ReadWrite)]
|
||||||
[DataField("size")]
|
[Access(typeof(SharedItemSystem))]
|
||||||
[Access(typeof(SharedItemSystem), Other = AccessPermissions.ReadExecute)]
|
public ItemSize Size = ItemSize.Small;
|
||||||
public int Size = 5;
|
|
||||||
|
|
||||||
[Access(typeof(SharedItemSystem))]
|
[Access(typeof(SharedItemSystem))]
|
||||||
[DataField("inhandVisuals")]
|
[DataField]
|
||||||
public Dictionary<HandLocation, List<PrototypeLayerData>> InhandVisuals = new();
|
public Dictionary<HandLocation, List<PrototypeLayerData>> InhandVisuals = new();
|
||||||
|
|
||||||
[Access(typeof(SharedItemSystem))]
|
[Access(typeof(SharedItemSystem))]
|
||||||
[ViewVariables(VVAccess.ReadWrite)]
|
[ViewVariables(VVAccess.ReadWrite)]
|
||||||
[DataField("heldPrefix")]
|
[DataField]
|
||||||
public string? HeldPrefix;
|
public string? HeldPrefix;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -39,10 +38,10 @@ public sealed partial class ItemComponent : Component
|
|||||||
[Serializable, NetSerializable]
|
[Serializable, NetSerializable]
|
||||||
public sealed class ItemComponentState : ComponentState
|
public sealed class ItemComponentState : ComponentState
|
||||||
{
|
{
|
||||||
public int Size { get; }
|
public ItemSize Size { get; }
|
||||||
public string? HeldPrefix { get; }
|
public string? HeldPrefix { get; }
|
||||||
|
|
||||||
public ItemComponentState(int size, string? heldPrefix)
|
public ItemComponentState(ItemSize size, string? heldPrefix)
|
||||||
{
|
{
|
||||||
Size = size;
|
Size = size;
|
||||||
HeldPrefix = heldPrefix;
|
HeldPrefix = heldPrefix;
|
||||||
@@ -67,15 +66,38 @@ public sealed class VisualsChangedEvent : EntityEventArgs
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Reference sizes for common containers and items.
|
/// Abstracted sizes for items.
|
||||||
|
/// Used to determine what can fit into inventories.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public enum ReferenceSizes
|
public enum ItemSize
|
||||||
{
|
{
|
||||||
Wallet = 4,
|
/// <summary>
|
||||||
Pocket = 12,
|
/// Items that can be held completely in one's hand.
|
||||||
Box = 24,
|
/// </summary>
|
||||||
Belt = 30,
|
Tiny = 1,
|
||||||
Toolbox = 60,
|
|
||||||
Backpack = 100,
|
/// <summary>
|
||||||
NoStoring = 9999
|
/// Items that can fit inside of a standard pocket.
|
||||||
|
/// </summary>
|
||||||
|
Small = 2,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Items that can fit inside of a standard bag.
|
||||||
|
/// </summary>
|
||||||
|
Normal = 4,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Items that are too large to fit inside of standard bags, but can worn in exterior slots or placed in custom containers.
|
||||||
|
/// </summary>
|
||||||
|
Large = 16,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Items that are too large to place inside of any kind of container.
|
||||||
|
/// </summary>
|
||||||
|
Huge = 24,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Picture furry gf
|
||||||
|
/// </summary>
|
||||||
|
Ginormous = 48
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
using Content.Shared.Item;
|
||||||
using Robust.Shared.Audio;
|
using Robust.Shared.Audio;
|
||||||
using Robust.Shared.GameStates;
|
using Robust.Shared.GameStates;
|
||||||
|
|
||||||
@@ -20,11 +21,11 @@ public sealed partial class ItemToggleComponent : Component
|
|||||||
|
|
||||||
[ViewVariables(VVAccess.ReadWrite)]
|
[ViewVariables(VVAccess.ReadWrite)]
|
||||||
[DataField("offSize")]
|
[DataField("offSize")]
|
||||||
public int OffSize = 1;
|
public ItemSize OffSize = ItemSize.Small;
|
||||||
|
|
||||||
[ViewVariables(VVAccess.ReadWrite)]
|
[ViewVariables(VVAccess.ReadWrite)]
|
||||||
[DataField("onSize")]
|
[DataField("onSize")]
|
||||||
public int OnSize = 9999;
|
public ItemSize OnSize = ItemSize.Huge;
|
||||||
}
|
}
|
||||||
|
|
||||||
[ByRefEvent]
|
[ByRefEvent]
|
||||||
|
|||||||
@@ -1,21 +1,18 @@
|
|||||||
using Content.Shared.CombatMode;
|
|
||||||
using Content.Shared.Hands.EntitySystems;
|
using Content.Shared.Hands.EntitySystems;
|
||||||
using Content.Shared.Interaction;
|
using Content.Shared.Interaction;
|
||||||
using Content.Shared.Stacks;
|
using Content.Shared.Stacks;
|
||||||
using Content.Shared.Verbs;
|
using Content.Shared.Verbs;
|
||||||
using Content.Shared.Examine;
|
using Content.Shared.Examine;
|
||||||
|
using JetBrains.Annotations;
|
||||||
using Robust.Shared.Containers;
|
using Robust.Shared.Containers;
|
||||||
using Robust.Shared.GameStates;
|
using Robust.Shared.GameStates;
|
||||||
using Robust.Shared.Prototypes;
|
|
||||||
using Robust.Shared.Utility;
|
using Robust.Shared.Utility;
|
||||||
|
|
||||||
namespace Content.Shared.Item;
|
namespace Content.Shared.Item;
|
||||||
|
|
||||||
public abstract class SharedItemSystem : EntitySystem
|
public abstract class SharedItemSystem : EntitySystem
|
||||||
{
|
{
|
||||||
[Dependency] private readonly IPrototypeManager _prototype = default!;
|
|
||||||
[Dependency] private readonly SharedHandsSystem _handsSystem = default!;
|
[Dependency] private readonly SharedHandsSystem _handsSystem = default!;
|
||||||
[Dependency] private readonly SharedCombatModeSystem _combatMode = default!;
|
|
||||||
[Dependency] protected readonly SharedContainerSystem Container = default!;
|
[Dependency] protected readonly SharedContainerSystem Container = default!;
|
||||||
|
|
||||||
public override void Initialize()
|
public override void Initialize()
|
||||||
@@ -33,13 +30,13 @@ public abstract class SharedItemSystem : EntitySystem
|
|||||||
|
|
||||||
#region Public API
|
#region Public API
|
||||||
|
|
||||||
public void SetSize(EntityUid uid, int size, ItemComponent? component = null)
|
public void SetSize(EntityUid uid, ItemSize size, ItemComponent? component = null)
|
||||||
{
|
{
|
||||||
if (!Resolve(uid, ref component, false))
|
if (!Resolve(uid, ref component, false))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
component.Size = size;
|
component.Size = size;
|
||||||
Dirty(component);
|
Dirty(uid, component);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetHeldPrefix(EntityUid uid, string? heldPrefix, ItemComponent? component = null)
|
public void SetHeldPrefix(EntityUid uid, string? heldPrefix, ItemComponent? component = null)
|
||||||
@@ -51,7 +48,7 @@ public abstract class SharedItemSystem : EntitySystem
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
component.HeldPrefix = heldPrefix;
|
component.HeldPrefix = heldPrefix;
|
||||||
Dirty(component);
|
Dirty(uid, component);
|
||||||
VisualsChanged(uid);
|
VisualsChanged(uid);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,7 +64,7 @@ public abstract class SharedItemSystem : EntitySystem
|
|||||||
item.InhandVisuals = otherItem.InhandVisuals;
|
item.InhandVisuals = otherItem.InhandVisuals;
|
||||||
item.HeldPrefix = otherItem.HeldPrefix;
|
item.HeldPrefix = otherItem.HeldPrefix;
|
||||||
|
|
||||||
Dirty(item);
|
Dirty(uid, item);
|
||||||
VisualsChanged(uid);
|
VisualsChanged(uid);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -83,14 +80,7 @@ public abstract class SharedItemSystem : EntitySystem
|
|||||||
|
|
||||||
protected virtual void OnStackCountChanged(EntityUid uid, ItemComponent component, StackCountChangedEvent args)
|
protected virtual void OnStackCountChanged(EntityUid uid, ItemComponent component, StackCountChangedEvent args)
|
||||||
{
|
{
|
||||||
if (!TryComp<StackComponent>(uid, out var stack))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (!_prototype.TryIndex<StackPrototype>(stack.StackTypeId, out var stackProto) ||
|
|
||||||
stackProto.ItemSize is not { } size)
|
|
||||||
return;
|
|
||||||
|
|
||||||
SetSize(uid, args.NewCount * size, component);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnHandleState(EntityUid uid, ItemComponent component, ref ComponentHandleState args)
|
private void OnHandleState(EntityUid uid, ItemComponent component, ref ComponentHandleState args)
|
||||||
@@ -135,7 +125,7 @@ public abstract class SharedItemSystem : EntitySystem
|
|||||||
private void OnExamine(EntityUid uid, ItemComponent component, ExaminedEvent args)
|
private void OnExamine(EntityUid uid, ItemComponent component, ExaminedEvent args)
|
||||||
{
|
{
|
||||||
args.PushMarkup(Loc.GetString("item-component-on-examine-size",
|
args.PushMarkup(Loc.GetString("item-component-on-examine-size",
|
||||||
("size", component.Size)));
|
("size", GetItemSizeLocale(component.Size))));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -148,4 +138,16 @@ public abstract class SharedItemSystem : EntitySystem
|
|||||||
public virtual void VisualsChanged(EntityUid owner)
|
public virtual void VisualsChanged(EntityUid owner)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[PublicAPI]
|
||||||
|
public static string GetItemSizeLocale(ItemSize size)
|
||||||
|
{
|
||||||
|
return Robust.Shared.Localization.Loc.GetString($"item-component-size-{size.ToString()}");
|
||||||
|
}
|
||||||
|
|
||||||
|
[PublicAPI]
|
||||||
|
public static int GetItemSizeWeight(ItemSize size)
|
||||||
|
{
|
||||||
|
return (int) size;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,7 @@
|
|||||||
using Content.Server.Storage.Components;
|
using Content.Server.Storage.Components;
|
||||||
using Content.Shared.Hands;
|
|
||||||
using Content.Shared.Inventory;
|
using Content.Shared.Inventory;
|
||||||
using Content.Shared.Stacks;
|
|
||||||
using Robust.Shared.Map;
|
using Robust.Shared.Map;
|
||||||
using Robust.Shared.Physics.Components;
|
using Robust.Shared.Physics.Components;
|
||||||
using Robust.Shared.Player;
|
|
||||||
using Robust.Shared.Timing;
|
using Robust.Shared.Timing;
|
||||||
|
|
||||||
namespace Content.Shared.Storage.EntitySystems;
|
namespace Content.Shared.Storage.EntitySystems;
|
||||||
@@ -56,7 +53,7 @@ public sealed class MagnetPickupSystem : EntitySystem
|
|||||||
comp.NextScan += ScanDelay;
|
comp.NextScan += ScanDelay;
|
||||||
|
|
||||||
// No space
|
// No space
|
||||||
if (storage.StorageUsed >= storage.StorageCapacityMax)
|
if (!_storage.HasSpace((uid, storage)))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!_inventory.TryGetContainingSlot(uid, out var slotDef))
|
if (!_inventory.TryGetContainingSlot(uid, out var slotDef))
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
|
using System.Diagnostics.CodeAnalysis;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Content.Shared.ActionBlocker;
|
using Content.Shared.ActionBlocker;
|
||||||
using Content.Shared.CombatMode;
|
using Content.Shared.CombatMode;
|
||||||
using Content.Shared.Containers.ItemSlots;
|
using Content.Shared.Containers.ItemSlots;
|
||||||
using Content.Shared.Destructible;
|
using Content.Shared.Destructible;
|
||||||
using Content.Shared.DoAfter;
|
using Content.Shared.DoAfter;
|
||||||
using Content.Shared.Hands;
|
using Content.Shared.FixedPoint;
|
||||||
using Content.Shared.Hands.Components;
|
using Content.Shared.Hands.Components;
|
||||||
using Content.Shared.Hands.EntitySystems;
|
using Content.Shared.Hands.EntitySystems;
|
||||||
using Content.Shared.Implants.Components;
|
using Content.Shared.Implants.Components;
|
||||||
@@ -46,6 +47,8 @@ public abstract class SharedStorageSystem : EntitySystem
|
|||||||
private EntityQuery<StackComponent> _stackQuery;
|
private EntityQuery<StackComponent> _stackQuery;
|
||||||
private EntityQuery<TransformComponent> _xformQuery;
|
private EntityQuery<TransformComponent> _xformQuery;
|
||||||
|
|
||||||
|
public const ItemSize DefaultStorageMaxItemSize = ItemSize.Normal;
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override void Initialize()
|
public override void Initialize()
|
||||||
{
|
{
|
||||||
@@ -89,6 +92,7 @@ public abstract class SharedStorageSystem : EntitySystem
|
|||||||
{
|
{
|
||||||
// TODO: I had this.
|
// TODO: I had this.
|
||||||
// We can get states being applied before the container is ready.
|
// We can get states being applied before the container is ready.
|
||||||
|
// ReSharper disable once ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract
|
||||||
if (component.Container == default)
|
if (component.Container == default)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -229,7 +233,7 @@ public abstract class SharedStorageSystem : EntitySystem
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TryComp<TransformComponent>(uid, out var transformOwner) && TryComp<TransformComponent>(target, out var transformEnt))
|
if (_xformQuery.TryGetComponent(uid, out var transformOwner) && TryComp<TransformComponent>(target, out var transformEnt))
|
||||||
{
|
{
|
||||||
var parent = transformOwner.ParentUid;
|
var parent = transformOwner.ParentUid;
|
||||||
|
|
||||||
@@ -239,7 +243,7 @@ public abstract class SharedStorageSystem : EntitySystem
|
|||||||
_transform
|
_transform
|
||||||
);
|
);
|
||||||
|
|
||||||
if (PlayerInsertEntityInWorld(uid, args.User, target, storageComp))
|
if (PlayerInsertEntityInWorld((uid, storageComp), args.User, target))
|
||||||
{
|
{
|
||||||
RaiseNetworkEvent(new AnimateInsertingEntitiesEvent(GetNetEntity(uid),
|
RaiseNetworkEvent(new AnimateInsertingEntitiesEvent(GetNetEntity(uid),
|
||||||
new List<NetEntity> { GetNetEntity(target) },
|
new List<NetEntity> { GetNetEntity(target) },
|
||||||
@@ -285,7 +289,7 @@ public abstract class SharedStorageSystem : EntitySystem
|
|||||||
|
|
||||||
var angle = targetXform.LocalRotation;
|
var angle = targetXform.LocalRotation;
|
||||||
|
|
||||||
if (PlayerInsertEntityInWorld(uid, args.Args.User, entity, component))
|
if (PlayerInsertEntityInWorld((uid, component), args.Args.User, entity))
|
||||||
{
|
{
|
||||||
successfullyInserted.Add(entity);
|
successfullyInserted.Add(entity);
|
||||||
successfullyInsertedPositions.Add(position);
|
successfullyInsertedPositions.Add(position);
|
||||||
@@ -322,7 +326,7 @@ public abstract class SharedStorageSystem : EntitySystem
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private void OnInteractWithItem(EntityUid uid, StorageComponent storageComp, StorageInteractWithItemEvent args)
|
private void OnInteractWithItem(EntityUid uid, StorageComponent storageComp, StorageInteractWithItemEvent args)
|
||||||
{
|
{
|
||||||
if (args.Session.AttachedEntity is not EntityUid player)
|
if (args.Session.AttachedEntity is not { } player)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var entity = GetEntity(args.InteractedItemUID);
|
var entity = GetEntity(args.InteractedItemUID);
|
||||||
@@ -396,27 +400,16 @@ public abstract class SharedStorageSystem : EntitySystem
|
|||||||
|
|
||||||
public void RecalculateStorageUsed(EntityUid uid, StorageComponent storageComp)
|
public void RecalculateStorageUsed(EntityUid uid, StorageComponent storageComp)
|
||||||
{
|
{
|
||||||
storageComp.StorageUsed = 0;
|
if (storageComp.MaxSlots == null)
|
||||||
|
|
||||||
foreach (var entity in storageComp.Container.ContainedEntities)
|
|
||||||
{
|
{
|
||||||
if (!_itemQuery.TryGetComponent(entity, out var itemComp))
|
_appearance.SetData(uid, StorageVisuals.StorageUsed, GetCumulativeItemSizes(uid, storageComp));
|
||||||
continue;
|
_appearance.SetData(uid, StorageVisuals.Capacity, storageComp.MaxTotalWeight);
|
||||||
|
}
|
||||||
var size = itemComp.Size;
|
else
|
||||||
storageComp.StorageUsed += size;
|
{
|
||||||
|
_appearance.SetData(uid, StorageVisuals.StorageUsed, storageComp.Container.ContainedEntities.Count);
|
||||||
|
_appearance.SetData(uid, StorageVisuals.Capacity, storageComp.MaxSlots.Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
_appearance.SetData(uid, StorageVisuals.StorageUsed, storageComp.StorageUsed);
|
|
||||||
_appearance.SetData(uid, StorageVisuals.Capacity, storageComp.StorageCapacityMax);
|
|
||||||
}
|
|
||||||
|
|
||||||
public int GetAvailableSpace(EntityUid uid, StorageComponent? component = null)
|
|
||||||
{
|
|
||||||
if (!Resolve(uid, ref component))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return component.StorageCapacityMax - component.StorageUsed;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -449,17 +442,20 @@ public abstract class SharedStorageSystem : EntitySystem
|
|||||||
/// Verifies if an entity can be stored and if it fits
|
/// Verifies if an entity can be stored and if it fits
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="uid">The entity to check</param>
|
/// <param name="uid">The entity to check</param>
|
||||||
|
/// <param name="insertEnt"></param>
|
||||||
/// <param name="reason">If returning false, the reason displayed to the player</param>
|
/// <param name="reason">If returning false, the reason displayed to the player</param>
|
||||||
|
/// <param name="storageComp"></param>
|
||||||
|
/// <param name="item"></param>
|
||||||
/// <returns>true if it can be inserted, false otherwise</returns>
|
/// <returns>true if it can be inserted, false otherwise</returns>
|
||||||
public bool CanInsert(EntityUid uid, EntityUid insertEnt, out string? reason, StorageComponent? storageComp = null)
|
public bool CanInsert(EntityUid uid, EntityUid insertEnt, out string? reason, StorageComponent? storageComp = null, ItemComponent? item = null)
|
||||||
{
|
{
|
||||||
if (!Resolve(uid, ref storageComp))
|
if (!Resolve(uid, ref storageComp) || !Resolve(insertEnt, ref item))
|
||||||
{
|
{
|
||||||
reason = null;
|
reason = null;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TryComp(insertEnt, out TransformComponent? transformComp) && transformComp.Anchored)
|
if (Transform(insertEnt).Anchored)
|
||||||
{
|
{
|
||||||
reason = "comp-storage-anchored-failure";
|
reason = "comp-storage-anchored-failure";
|
||||||
return false;
|
return false;
|
||||||
@@ -477,15 +473,28 @@ public abstract class SharedStorageSystem : EntitySystem
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TryComp(insertEnt, out StorageComponent? storage) &&
|
if (item.Size > GetMaxItemSize((uid, storageComp)))
|
||||||
storage.StorageCapacityMax >= storageComp.StorageCapacityMax)
|
|
||||||
{
|
{
|
||||||
reason = "comp-storage-insufficient-capacity";
|
reason = "comp-storage-too-big";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TryComp(insertEnt, out ItemComponent? itemComp) &&
|
if (TryComp<StorageComponent>(insertEnt, out var insertStorage)
|
||||||
itemComp.Size > storageComp.StorageCapacityMax - storageComp.StorageUsed)
|
&& GetMaxItemSize((insertEnt, insertStorage)) >= GetMaxItemSize((uid, storageComp)))
|
||||||
|
{
|
||||||
|
reason = "comp-storage-too-big";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (storageComp.MaxSlots != null)
|
||||||
|
{
|
||||||
|
if (storageComp.Container.ContainedEntities.Count >= storageComp.MaxSlots)
|
||||||
|
{
|
||||||
|
reason = "comp-storage-insufficient-capacity";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (SharedItemSystem.GetItemSizeWeight(item.Size) + GetCumulativeItemSizes(uid, storageComp) > storageComp.MaxTotalWeight)
|
||||||
{
|
{
|
||||||
reason = "comp-storage-insufficient-capacity";
|
reason = "comp-storage-insufficient-capacity";
|
||||||
return false;
|
return false;
|
||||||
@@ -499,11 +508,34 @@ public abstract class SharedStorageSystem : EntitySystem
|
|||||||
/// Inserts into the storage container
|
/// Inserts into the storage container
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>true if the entity was inserted, false otherwise</returns>
|
/// <returns>true if the entity was inserted, false otherwise</returns>
|
||||||
public bool Insert(EntityUid uid, EntityUid insertEnt, out EntityUid? stackedEntity, EntityUid? user = null, StorageComponent? storageComp = null, bool playSound = true)
|
public bool Insert(
|
||||||
|
EntityUid uid,
|
||||||
|
EntityUid insertEnt,
|
||||||
|
out EntityUid? stackedEntity,
|
||||||
|
EntityUid? user = null,
|
||||||
|
StorageComponent? storageComp = null,
|
||||||
|
bool playSound = true)
|
||||||
|
{
|
||||||
|
return Insert(uid, insertEnt, out stackedEntity, out _, user: user, storageComp: storageComp, playSound: playSound);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Inserts into the storage container
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>true if the entity was inserted, false otherwise</returns>
|
||||||
|
public bool Insert(
|
||||||
|
EntityUid uid,
|
||||||
|
EntityUid insertEnt,
|
||||||
|
out EntityUid? stackedEntity,
|
||||||
|
out string? reason,
|
||||||
|
EntityUid? user = null,
|
||||||
|
StorageComponent? storageComp = null,
|
||||||
|
bool playSound = true)
|
||||||
{
|
{
|
||||||
stackedEntity = null;
|
stackedEntity = null;
|
||||||
|
reason = null;
|
||||||
|
|
||||||
if (!Resolve(uid, ref storageComp) || !CanInsert(uid, insertEnt, out _, storageComp))
|
if (!Resolve(uid, ref storageComp) || !CanInsert(uid, insertEnt, out reason, storageComp))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -542,8 +574,7 @@ public abstract class SharedStorageSystem : EntitySystem
|
|||||||
if (insertStack.Count > 0)
|
if (insertStack.Count > 0)
|
||||||
{
|
{
|
||||||
// Try to insert it as a new stack.
|
// Try to insert it as a new stack.
|
||||||
if (TryComp(insertEnt, out ItemComponent? itemComp) &&
|
if (!CanInsert(uid, insertEnt, out _, storageComp) ||
|
||||||
itemComp.Size > storageComp.StorageCapacityMax - storageComp.StorageUsed ||
|
|
||||||
!storageComp.Container.Insert(insertEnt))
|
!storageComp.Container.Insert(insertEnt))
|
||||||
{
|
{
|
||||||
// If we also didn't do any stack fills above then just end
|
// If we also didn't do any stack fills above then just end
|
||||||
@@ -568,7 +599,9 @@ public abstract class SharedStorageSystem : EntitySystem
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Inserts an entity into storage from the player's active hand
|
/// Inserts an entity into storage from the player's active hand
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="uid"></param>
|
||||||
/// <param name="player">The player to insert an entity from</param>
|
/// <param name="player">The player to insert an entity from</param>
|
||||||
|
/// <param name="storageComp"></param>
|
||||||
/// <returns>true if inserted, false otherwise</returns>
|
/// <returns>true if inserted, false otherwise</returns>
|
||||||
public bool PlayerInsertHeldEntity(EntityUid uid, EntityUid player, StorageComponent? storageComp = null)
|
public bool PlayerInsertHeldEntity(EntityUid uid, EntityUid player, StorageComponent? storageComp = null)
|
||||||
{
|
{
|
||||||
@@ -589,21 +622,23 @@ public abstract class SharedStorageSystem : EntitySystem
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return PlayerInsertEntityInWorld(uid, player, toInsert.Value, storageComp);
|
return PlayerInsertEntityInWorld((uid, storageComp), player, toInsert.Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Inserts an Entity (<paramref name="toInsert"/>) in the world into storage, informing <paramref name="player"/> if it fails.
|
/// Inserts an Entity (<paramref name="toInsert"/>) in the world into storage, informing <paramref name="player"/> if it fails.
|
||||||
/// <paramref name="toInsert"/> is *NOT* held, see <see cref="PlayerInsertHeldEntity(Robust.Shared.GameObjects.EntityUid)"/>.
|
/// <paramref name="toInsert"/> is *NOT* held, see <see cref="PlayerInsertHeldEntity(EntityUid,EntityUid,StorageComponent)"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="uid"></param>
|
||||||
/// <param name="player">The player to insert an entity with</param>
|
/// <param name="player">The player to insert an entity with</param>
|
||||||
|
/// <param name="toInsert"></param>
|
||||||
/// <returns>true if inserted, false otherwise</returns>
|
/// <returns>true if inserted, false otherwise</returns>
|
||||||
public bool PlayerInsertEntityInWorld(EntityUid uid, EntityUid player, EntityUid toInsert, StorageComponent? storageComp = null)
|
public bool PlayerInsertEntityInWorld(Entity<StorageComponent?> uid, EntityUid player, EntityUid toInsert)
|
||||||
{
|
{
|
||||||
if (!Resolve(uid, ref storageComp) || !_sharedInteractionSystem.InRangeUnobstructed(player, uid))
|
if (!Resolve(uid, ref uid.Comp) || !_sharedInteractionSystem.InRangeUnobstructed(player, uid))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!Insert(uid, toInsert, out _, user: player, storageComp))
|
if (!Insert(uid, toInsert, out _, user: player, uid.Comp))
|
||||||
{
|
{
|
||||||
_popupSystem.PopupClient(Loc.GetString("comp-storage-cant-insert"), uid, player);
|
_popupSystem.PopupClient(Loc.GetString("comp-storage-cant-insert"), uid, player);
|
||||||
return false;
|
return false;
|
||||||
@@ -611,6 +646,71 @@ public abstract class SharedStorageSystem : EntitySystem
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns true if there is enough space to theoretically fit another item.
|
||||||
|
/// </summary>
|
||||||
|
public bool HasSpace(Entity<StorageComponent?> uid)
|
||||||
|
{
|
||||||
|
if (!Resolve(uid, ref uid.Comp))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
//todo maybe this shouldn't be authoritative over weight? idk.
|
||||||
|
if (uid.Comp.MaxSlots != null)
|
||||||
|
{
|
||||||
|
return uid.Comp.Container.ContainedEntities.Count < uid.Comp.MaxSlots;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return GetCumulativeItemSizes(uid, uid.Comp) < uid.Comp.MaxTotalWeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns the sum of all the ItemSizes of the items inside of a storage.
|
||||||
|
/// </summary>
|
||||||
|
public int GetCumulativeItemSizes(EntityUid uid, StorageComponent? component = null)
|
||||||
|
{
|
||||||
|
if (!Resolve(uid, ref component))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
var sum = 0;
|
||||||
|
foreach (var item in component.Container.ContainedEntities)
|
||||||
|
{
|
||||||
|
if (!_itemQuery.TryGetComponent(item, out var itemComp))
|
||||||
|
continue;
|
||||||
|
sum += SharedItemSystem.GetItemSizeWeight(itemComp.Size);
|
||||||
|
}
|
||||||
|
|
||||||
|
return sum;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemSize GetMaxItemSize(Entity<StorageComponent?> uid)
|
||||||
|
{
|
||||||
|
if (!Resolve(uid, ref uid.Comp))
|
||||||
|
return DefaultStorageMaxItemSize;
|
||||||
|
|
||||||
|
// If we specify a max item size, use that
|
||||||
|
if (uid.Comp.MaxItemSize != null)
|
||||||
|
return uid.Comp.MaxItemSize.Value;
|
||||||
|
|
||||||
|
if (!_itemQuery.TryGetComponent(uid, out var item))
|
||||||
|
return DefaultStorageMaxItemSize;
|
||||||
|
|
||||||
|
// if there is no max item size specified, the value used
|
||||||
|
// is one below the item size of the storage entity, clamped at ItemSize.Tiny
|
||||||
|
return (ItemSize) Math.Max((int) item.Size - 1, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public FixedPoint2 GetStorageFillPercentage(Entity<StorageComponent?> uid)
|
||||||
|
{
|
||||||
|
if (!Resolve(uid, ref uid.Comp))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
var slotPercent = FixedPoint2.New(uid.Comp.Container.ContainedEntities.Count) / uid.Comp.MaxSlots ?? FixedPoint2.Zero;
|
||||||
|
var weightPercent = FixedPoint2.New(GetCumulativeItemSizes(uid)) / uid.Comp.MaxTotalWeight;
|
||||||
|
|
||||||
|
return FixedPoint2.Max(slotPercent, weightPercent);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Plays a clientside pickup animation for the specified uid.
|
/// Plays a clientside pickup animation for the specified uid.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
using Content.Shared.Item;
|
||||||
|
using Content.Shared.Storage.EntitySystems;
|
||||||
using Content.Shared.Whitelist;
|
using Content.Shared.Whitelist;
|
||||||
using Robust.Shared.Audio;
|
using Robust.Shared.Audio;
|
||||||
using Robust.Shared.Containers;
|
using Robust.Shared.Containers;
|
||||||
@@ -20,6 +22,26 @@ namespace Content.Shared.Storage
|
|||||||
[ViewVariables]
|
[ViewVariables]
|
||||||
public Container Container = default!;
|
public Container Container = default!;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A limit for the cumulative ItemSize weights that can be inserted in this storage.
|
||||||
|
/// If MaxSlots is not null, then this is ignored.
|
||||||
|
/// </summary>
|
||||||
|
[DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
|
||||||
|
public int MaxTotalWeight;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The maximum size item that can be inserted into this storage,
|
||||||
|
/// </summary>
|
||||||
|
[DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
|
||||||
|
[Access(typeof(SharedStorageSystem))]
|
||||||
|
public ItemSize? MaxItemSize;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The max number of entities that can be inserted into this storage.
|
||||||
|
/// </summary>
|
||||||
|
[DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
|
||||||
|
public int? MaxSlots;
|
||||||
|
|
||||||
// TODO: Make area insert its own component.
|
// TODO: Make area insert its own component.
|
||||||
[DataField("quickInsert")]
|
[DataField("quickInsert")]
|
||||||
public bool QuickInsert; // Can insert storables by "attacking" them with the storage entity
|
public bool QuickInsert; // Can insert storables by "attacking" them with the storage entity
|
||||||
@@ -45,18 +67,6 @@ namespace Content.Shared.Storage
|
|||||||
[DataField("blacklist")]
|
[DataField("blacklist")]
|
||||||
public EntityWhitelist? Blacklist;
|
public EntityWhitelist? Blacklist;
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// How much storage is currently being used by contained entities.
|
|
||||||
/// </summary>
|
|
||||||
[ViewVariables, DataField("storageUsed"), AutoNetworkedField]
|
|
||||||
public int StorageUsed;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Maximum capacity for storage.
|
|
||||||
/// </summary>
|
|
||||||
[DataField("capacity"), AutoNetworkedField]
|
|
||||||
public int StorageCapacityMax = 10000;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Sound played whenever an entity is inserted into storage.
|
/// Sound played whenever an entity is inserted into storage.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -13,3 +13,8 @@ stat-lathe-values = Lathe sell prices
|
|||||||
stat-lathe-id = ID
|
stat-lathe-id = ID
|
||||||
stat-lathe-cost = Cost
|
stat-lathe-cost = Cost
|
||||||
stat-lathe-sell = Sell price
|
stat-lathe-sell = Sell price
|
||||||
|
|
||||||
|
# Item Sizes
|
||||||
|
stat-item-values = Item sizes
|
||||||
|
stat-item-id = ID
|
||||||
|
stat-item-price = Size
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
comp-storage-no-item-size = N/A
|
comp-storage-no-item-size = N/A
|
||||||
comp-storage-cant-insert = Can't insert.
|
comp-storage-cant-insert = Can't insert.
|
||||||
comp-storage-insufficient-capacity = Insufficient capacity.
|
comp-storage-too-big = Too big!
|
||||||
|
comp-storage-insufficient-capacity = No room!
|
||||||
comp-storage-invalid-container = This doesn't go in there!
|
comp-storage-invalid-container = This doesn't go in there!
|
||||||
comp-storage-anchored-failure = Can't insert an anchored item.
|
comp-storage-anchored-failure = Can't insert an anchored item.
|
||||||
comp-storage-cant-drop = You can't let go of { THE($entity) }!
|
comp-storage-cant-drop = You can't let go of { THE($entity) }!
|
||||||
comp-storage-window-title = Storage Item
|
comp-storage-window-title = Storage Item
|
||||||
comp-storage-window-volume = Items: { $itemCount }, Stored: { $usedVolume }/{ $maxVolume }
|
comp-storage-window-weight = { $weight }/{ $maxWeight }, Max Size: {$size}
|
||||||
comp-storage-window-volume-unlimited = Items: { $itemCount }
|
comp-storage-window-slots = Slots: { $itemCount }/{ $maxCount }, Max Size: {$size}
|
||||||
|
|||||||
@@ -7,3 +7,10 @@ pick-up-verb-get-data-text = Pick Up
|
|||||||
pick-up-verb-get-data-text-inventory = Put in hand
|
pick-up-verb-get-data-text-inventory = Put in hand
|
||||||
|
|
||||||
item-component-on-examine-size = Size: {$size}
|
item-component-on-examine-size = Size: {$size}
|
||||||
|
|
||||||
|
item-component-size-Tiny = tiny
|
||||||
|
item-component-size-Small = small
|
||||||
|
item-component-size-Normal = normal
|
||||||
|
item-component-size-Large = large
|
||||||
|
item-component-size-Huge = huge
|
||||||
|
item-component-size-Ginormous = ginormous
|
||||||
|
|||||||
@@ -874,36 +874,6 @@ entities:
|
|||||||
pos: -0.5,0.5
|
pos: -0.5,0.5
|
||||||
parent: 325
|
parent: 325
|
||||||
type: Transform
|
type: Transform
|
||||||
- proto: ClothingBeltSyndieHolster
|
|
||||||
entities:
|
|
||||||
- uid: 317
|
|
||||||
components:
|
|
||||||
- flags: InContainer
|
|
||||||
type: MetaData
|
|
||||||
- parent: 177
|
|
||||||
type: Transform
|
|
||||||
- canCollide: False
|
|
||||||
type: Physics
|
|
||||||
- proto: ClothingHandsGlovesCombat
|
|
||||||
entities:
|
|
||||||
- uid: 316
|
|
||||||
components:
|
|
||||||
- flags: InContainer
|
|
||||||
type: MetaData
|
|
||||||
- parent: 177
|
|
||||||
type: Transform
|
|
||||||
- canCollide: False
|
|
||||||
type: Physics
|
|
||||||
- proto: ClothingMaskGasSyndicate
|
|
||||||
entities:
|
|
||||||
- uid: 318
|
|
||||||
components:
|
|
||||||
- flags: InContainer
|
|
||||||
type: MetaData
|
|
||||||
- parent: 177
|
|
||||||
type: Transform
|
|
||||||
- canCollide: False
|
|
||||||
type: Physics
|
|
||||||
- proto: ComputerIFFSyndicate
|
- proto: ComputerIFFSyndicate
|
||||||
entities:
|
entities:
|
||||||
- uid: 40
|
- uid: 40
|
||||||
@@ -926,16 +896,6 @@ entities:
|
|||||||
ents:
|
ents:
|
||||||
- 245
|
- 245
|
||||||
type: ContainerContainer
|
type: ContainerContainer
|
||||||
- proto: Crowbar
|
|
||||||
entities:
|
|
||||||
- uid: 313
|
|
||||||
components:
|
|
||||||
- flags: InContainer
|
|
||||||
type: MetaData
|
|
||||||
- parent: 177
|
|
||||||
type: Transform
|
|
||||||
- canCollide: False
|
|
||||||
type: Physics
|
|
||||||
- proto: CyberPen
|
- proto: CyberPen
|
||||||
entities:
|
entities:
|
||||||
- uid: 77
|
- uid: 77
|
||||||
@@ -1672,16 +1632,6 @@ entities:
|
|||||||
pos: -2.5,-3.5
|
pos: -2.5,-3.5
|
||||||
parent: 325
|
parent: 325
|
||||||
type: Transform
|
type: Transform
|
||||||
- proto: Multitool
|
|
||||||
entities:
|
|
||||||
- uid: 314
|
|
||||||
components:
|
|
||||||
- flags: InContainer
|
|
||||||
type: MetaData
|
|
||||||
- parent: 177
|
|
||||||
type: Transform
|
|
||||||
- canCollide: False
|
|
||||||
type: Physics
|
|
||||||
- proto: NitrogenTankFilled
|
- proto: NitrogenTankFilled
|
||||||
entities:
|
entities:
|
||||||
- uid: 105
|
- uid: 105
|
||||||
@@ -1880,20 +1830,6 @@ entities:
|
|||||||
type: Transform
|
type: Transform
|
||||||
- canCollide: False
|
- canCollide: False
|
||||||
type: Physics
|
type: Physics
|
||||||
- proto: Screwdriver
|
|
||||||
entities:
|
|
||||||
- uid: 310
|
|
||||||
components:
|
|
||||||
- flags: InContainer
|
|
||||||
type: MetaData
|
|
||||||
- parent: 177
|
|
||||||
type: Transform
|
|
||||||
- selected:
|
|
||||||
enum.DamageStateVisualLayers.Base:
|
|
||||||
screwdriver: '#1861D5FF'
|
|
||||||
type: RandomSprite
|
|
||||||
- canCollide: False
|
|
||||||
type: Physics
|
|
||||||
- proto: SheetGlass1
|
- proto: SheetGlass1
|
||||||
entities:
|
entities:
|
||||||
- uid: 244
|
- uid: 244
|
||||||
@@ -2382,21 +2318,6 @@ entities:
|
|||||||
- pos: 1.5699697,-0.44908836
|
- pos: 1.5699697,-0.44908836
|
||||||
parent: 325
|
parent: 325
|
||||||
type: Transform
|
type: Transform
|
||||||
- containers:
|
|
||||||
storagebase: !type:Container
|
|
||||||
showEnts: False
|
|
||||||
occludes: True
|
|
||||||
ents:
|
|
||||||
- 310
|
|
||||||
- 311
|
|
||||||
- 312
|
|
||||||
- 313
|
|
||||||
- 314
|
|
||||||
- 315
|
|
||||||
- 316
|
|
||||||
- 317
|
|
||||||
- 318
|
|
||||||
type: ContainerContainer
|
|
||||||
- canCollide: False
|
- canCollide: False
|
||||||
type: Physics
|
type: Physics
|
||||||
- proto: ToyFigurineNukie
|
- proto: ToyFigurineNukie
|
||||||
@@ -2656,16 +2577,6 @@ entities:
|
|||||||
- pos: -2.5,2.5
|
- pos: -2.5,2.5
|
||||||
parent: 325
|
parent: 325
|
||||||
type: Transform
|
type: Transform
|
||||||
- proto: Welder
|
|
||||||
entities:
|
|
||||||
- uid: 312
|
|
||||||
components:
|
|
||||||
- flags: InContainer
|
|
||||||
type: MetaData
|
|
||||||
- parent: 177
|
|
||||||
type: Transform
|
|
||||||
- canCollide: False
|
|
||||||
type: Physics
|
|
||||||
- proto: WindoorSecure
|
- proto: WindoorSecure
|
||||||
entities:
|
entities:
|
||||||
- uid: 166
|
- uid: 166
|
||||||
@@ -2687,30 +2598,6 @@ entities:
|
|||||||
ents:
|
ents:
|
||||||
- 346
|
- 346
|
||||||
type: ContainerContainer
|
type: ContainerContainer
|
||||||
- proto: Wirecutter
|
|
||||||
entities:
|
|
||||||
- uid: 315
|
|
||||||
components:
|
|
||||||
- flags: InContainer
|
|
||||||
type: MetaData
|
|
||||||
- parent: 177
|
|
||||||
type: Transform
|
|
||||||
- selected:
|
|
||||||
enum.DamageStateVisualLayers.Base:
|
|
||||||
cutters: '#D58C18FF'
|
|
||||||
type: RandomSprite
|
|
||||||
- canCollide: False
|
|
||||||
type: Physics
|
|
||||||
- proto: Wrench
|
|
||||||
entities:
|
|
||||||
- uid: 311
|
|
||||||
components:
|
|
||||||
- flags: InContainer
|
|
||||||
type: MetaData
|
|
||||||
- parent: 177
|
|
||||||
type: Transform
|
|
||||||
- canCollide: False
|
|
||||||
type: Physics
|
|
||||||
- proto: YellowOxygenTankFilled
|
- proto: YellowOxygenTankFilled
|
||||||
entities:
|
entities:
|
||||||
- uid: 167
|
- uid: 167
|
||||||
|
|||||||
@@ -102471,8 +102471,6 @@ entities:
|
|||||||
type: Transform
|
type: Transform
|
||||||
- count: 15
|
- count: 15
|
||||||
type: Stack
|
type: Stack
|
||||||
- size: 15
|
|
||||||
type: Item
|
|
||||||
- proto: SheetPlasma
|
- proto: SheetPlasma
|
||||||
entities:
|
entities:
|
||||||
- uid: 12944
|
- uid: 12944
|
||||||
@@ -102564,8 +102562,6 @@ entities:
|
|||||||
type: Transform
|
type: Transform
|
||||||
- count: 20
|
- count: 20
|
||||||
type: Stack
|
type: Stack
|
||||||
- size: 20
|
|
||||||
type: Item
|
|
||||||
- proto: Shovel
|
- proto: Shovel
|
||||||
entities:
|
entities:
|
||||||
- uid: 12955
|
- uid: 12955
|
||||||
|
|||||||
@@ -78331,8 +78331,6 @@ entities:
|
|||||||
type: Transform
|
type: Transform
|
||||||
- count: 15
|
- count: 15
|
||||||
type: Stack
|
type: Stack
|
||||||
- size: 30
|
|
||||||
type: Item
|
|
||||||
- proto: StoolBar
|
- proto: StoolBar
|
||||||
entities:
|
entities:
|
||||||
- uid: 921
|
- uid: 921
|
||||||
|
|||||||
@@ -285,8 +285,7 @@
|
|||||||
- id: trayScanner
|
- id: trayScanner
|
||||||
- id: RCD
|
- id: RCD
|
||||||
- id: RCDAmmo
|
- id: RCDAmmo
|
||||||
- id: RCDAmmo
|
amount: 2
|
||||||
- id: RCDAmmo
|
|
||||||
- id: CableMVStack
|
- id: CableMVStack
|
||||||
- id: CableHVStack
|
- id: CableHVStack
|
||||||
- id: CableApcStack
|
- id: CableApcStack
|
||||||
|
|||||||
@@ -4,31 +4,31 @@
|
|||||||
name: surgical duffel bag
|
name: surgical duffel bag
|
||||||
description: "A large duffel bag for holding extra medical supplies - this one seems to be designed for holding surgical tools."
|
description: "A large duffel bag for holding extra medical supplies - this one seems to be designed for holding surgical tools."
|
||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: Hemostat
|
- id: Hemostat
|
||||||
- id: Saw
|
- id: Saw
|
||||||
- id: Drill
|
- id: Drill
|
||||||
- id: Cautery
|
- id: Cautery
|
||||||
- id: Retractor
|
- id: Retractor
|
||||||
- id: Scalpel
|
- id: Scalpel
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: ClothingBackpackDuffelCBURNFilled
|
id: ClothingBackpackDuffelCBURNFilled
|
||||||
parent: ClothingBackpackDuffelCBURN
|
parent: ClothingBackpackDuffelCBURN
|
||||||
suffix: Filled
|
suffix: Filled
|
||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: BoxSurvivalEngineering
|
- id: BoxSurvivalEngineering
|
||||||
- id: WeaponShotgunDoubleBarreled
|
- id: WeaponShotgunDoubleBarreled
|
||||||
- id: BoxShotgunIncendiary
|
- id: BoxShotgunIncendiary
|
||||||
amount: 2
|
amount: 2
|
||||||
- id: GrenadeFlashBang
|
- id: GrenadeFlashBang
|
||||||
amount: 2
|
amount: 2
|
||||||
- id: PillAmbuzolPlus
|
- id: PillAmbuzolPlus
|
||||||
- id: PillAmbuzol
|
- id: PillAmbuzol
|
||||||
amount: 4
|
amount: 4
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingBackpackDuffelSyndicateMedicalBundle
|
parent: ClothingBackpackDuffelSyndicateMedicalBundle
|
||||||
@@ -36,14 +36,14 @@
|
|||||||
name: syndicate surgical duffel bag
|
name: syndicate surgical duffel bag
|
||||||
description: A large duffel bag containing a full suite of surgical tools.
|
description: A large duffel bag containing a full suite of surgical tools.
|
||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: Hemostat
|
- id: Hemostat
|
||||||
- id: SawAdvanced
|
- id: SawAdvanced
|
||||||
- id: Drill
|
- id: Drill
|
||||||
- id: Cautery
|
- id: Cautery
|
||||||
- id: Retractor
|
- id: Retractor
|
||||||
- id: ScalpelAdvanced
|
- id: ScalpelAdvanced
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingBackpackDuffelSyndicateBundle
|
parent: ClothingBackpackDuffelSyndicateBundle
|
||||||
@@ -51,12 +51,12 @@
|
|||||||
name: Bulldog bundle
|
name: Bulldog bundle
|
||||||
description: "Lean and mean: Contains the popular Bulldog Shotgun, a 12g beanbag drum and 3 12g buckshot drums." #, and a pair of Thermal Imaging Goggles.
|
description: "Lean and mean: Contains the popular Bulldog Shotgun, a 12g beanbag drum and 3 12g buckshot drums." #, and a pair of Thermal Imaging Goggles.
|
||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: WeaponShotgunBulldog
|
- id: WeaponShotgunBulldog
|
||||||
- id: MagazineShotgun
|
- id: MagazineShotgun
|
||||||
- id: MagazineShotgun
|
- id: MagazineShotgun
|
||||||
- id: MagazineShotgunBeanbag
|
- id: MagazineShotgunBeanbag
|
||||||
# - id: ThermalImagingGoggles
|
# - id: ThermalImagingGoggles
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
@@ -65,11 +65,11 @@
|
|||||||
name: C-20r bundle
|
name: C-20r bundle
|
||||||
description: "Old faithful: The classic C-20r Submachine Gun, bundled with three magazines." #, and a Suppressor.
|
description: "Old faithful: The classic C-20r Submachine Gun, bundled with three magazines." #, and a Suppressor.
|
||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: WeaponSubMachineGunC20r
|
- id: WeaponSubMachineGunC20r
|
||||||
- id: MagazinePistolSubMachineGun
|
- id: MagazinePistolSubMachineGun
|
||||||
amount: 2
|
amount: 2
|
||||||
# - id: SMGSuppressor
|
# - id: SMGSuppressor
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
@@ -78,11 +78,11 @@
|
|||||||
name: Python bundle
|
name: Python bundle
|
||||||
description: "Go loud and proud with a fully loaded Magnum Python, bundled with two speed loaders."
|
description: "Go loud and proud with a fully loaded Magnum Python, bundled with two speed loaders."
|
||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: WeaponRevolverPythonAP
|
- id: WeaponRevolverPythonAP
|
||||||
- id: SpeedLoaderMagnumAP
|
- id: SpeedLoaderMagnumAP
|
||||||
amount: 2
|
amount: 2
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingBackpackDuffelSyndicateBundle
|
parent: ClothingBackpackDuffelSyndicateBundle
|
||||||
@@ -90,10 +90,10 @@
|
|||||||
name: L6 Saw bundle
|
name: L6 Saw bundle
|
||||||
description: "More dakka: The iconic L6 lightmachinegun, bundled with 2 box magazines."
|
description: "More dakka: The iconic L6 lightmachinegun, bundled with 2 box magazines."
|
||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: WeaponLightMachineGunL6
|
- id: WeaponLightMachineGunL6
|
||||||
- id: MagazineLightRifleBox
|
- id: MagazineLightRifleBox
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingBackpackDuffelSyndicateBundle
|
parent: ClothingBackpackDuffelSyndicateBundle
|
||||||
@@ -101,13 +101,13 @@
|
|||||||
name: China-Lake bundle
|
name: China-Lake bundle
|
||||||
description: "An old China-Lake grenade launcher bundled with 11 rounds of various destruction capability."
|
description: "An old China-Lake grenade launcher bundled with 11 rounds of various destruction capability."
|
||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: WeaponLauncherChinaLake
|
- id: WeaponLauncherChinaLake
|
||||||
- id: GrenadeBlast
|
- id: GrenadeBlast
|
||||||
amount: 4
|
amount: 4
|
||||||
- id: GrenadeFrag
|
- id: GrenadeFrag
|
||||||
amount: 4
|
amount: 4
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingBackpackDuffelSyndicateBundle
|
parent: ClothingBackpackDuffelSyndicateBundle
|
||||||
@@ -115,17 +115,17 @@
|
|||||||
name: M-90gl bundle
|
name: M-90gl bundle
|
||||||
description: "A versatile battle rifle with an attached grenade launcher, bundled with 3 magazines and 6 grenades of various capabilities."
|
description: "A versatile battle rifle with an attached grenade launcher, bundled with 3 magazines and 6 grenades of various capabilities."
|
||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: WeaponRifleM90GrenadeLauncher
|
- id: WeaponRifleM90GrenadeLauncher
|
||||||
- id: MagazineRifle
|
- id: MagazineRifle
|
||||||
amount: 2
|
amount: 2
|
||||||
- id: GrenadeBlast
|
- id: GrenadeBlast
|
||||||
amount: 2
|
amount: 2
|
||||||
- id: GrenadeFlash
|
- id: GrenadeFlash
|
||||||
amount: 2
|
amount: 2
|
||||||
- id: GrenadeFrag
|
- id: GrenadeFrag
|
||||||
amount: 2
|
amount: 2
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingBackpackDuffelSyndicateAmmo
|
parent: ClothingBackpackDuffelSyndicateAmmo
|
||||||
@@ -133,14 +133,14 @@
|
|||||||
name: ammo bundle
|
name: ammo bundle
|
||||||
description: "Reloading! Contains 4 magazines for the C-20r, 4 drums for the Bulldog, and 2 ammo boxes for the L6 SAW."
|
description: "Reloading! Contains 4 magazines for the C-20r, 4 drums for the Bulldog, and 2 ammo boxes for the L6 SAW."
|
||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: MagazinePistolSubMachineGun
|
- id: MagazinePistolSubMachineGun
|
||||||
amount: 4
|
amount: 4
|
||||||
- id: MagazineShotgun
|
- id: MagazineShotgun
|
||||||
amount: 4
|
amount: 4
|
||||||
- id: MagazineLightRifleBox
|
- id: MagazineLightRifleBox
|
||||||
amount: 2
|
amount: 2
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingBackpackDuffel
|
parent: ClothingBackpackDuffel
|
||||||
@@ -149,36 +149,36 @@
|
|||||||
description: "Contains a full CentCom Official uniform set, headset and clipboard included. Encryption keys and ID access are not included."
|
description: "Contains a full CentCom Official uniform set, headset and clipboard included. Encryption keys and ID access are not included."
|
||||||
suffix: DO NOT MAP
|
suffix: DO NOT MAP
|
||||||
components:
|
components:
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags: [] # ignore "WhitelistChameleon" tag
|
tags: [] # ignore "WhitelistChameleon" tag
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: ClothingHeadHatCentcom
|
- id: ClothingHeadHatCentcom
|
||||||
- id: ClothingEyesGlassesSunglasses
|
- id: ClothingEyesGlassesSunglasses
|
||||||
- id: ClothingUniformJumpsuitCentcomOfficial
|
- id: ClothingUniformJumpsuitCentcomOfficial
|
||||||
- id: ClothingShoesBootsJack
|
- id: ClothingShoesBootsJack
|
||||||
- id: ClothingHandsGlovesColorBlack
|
- id: ClothingHandsGlovesColorBlack
|
||||||
- id: ClothingHeadsetAltCentComFake
|
- id: ClothingHeadsetAltCentComFake
|
||||||
- id: ClothingOuterArmorBasic
|
- id: ClothingOuterArmorBasic
|
||||||
- id: Paper
|
- id: Paper
|
||||||
- id: Pen
|
- id: Pen
|
||||||
- id: CentcomPDAFake
|
- id: CentcomPDAFake
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingBackpackDuffelClown
|
parent: ClothingBackpackDuffelClown
|
||||||
id: ClothingBackpackDuffelSyndicateCostumeClown
|
id: ClothingBackpackDuffelSyndicateCostumeClown
|
||||||
suffix: syndicate
|
suffix: syndicate
|
||||||
components:
|
components:
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags: [] # ignore "WhitelistChameleon" tag
|
tags: [] # ignore "WhitelistChameleon" tag
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: ClothingUniformJumpsuitClown
|
- id: ClothingUniformJumpsuitClown
|
||||||
- id: ClothingShoesClown
|
- id: ClothingShoesClown
|
||||||
- id: ClothingMaskClown
|
- id: ClothingMaskClown
|
||||||
- id: BikeHorn
|
- id: BikeHorn
|
||||||
- id: ClownPDA
|
- id: ClownPDA
|
||||||
- id: ClothingHeadsetService
|
- id: ClothingHeadsetService
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingBackpackDuffelSyndicateBundle
|
parent: ClothingBackpackDuffelSyndicateBundle
|
||||||
@@ -186,11 +186,11 @@
|
|||||||
name: carp suit duffel bag
|
name: carp suit duffel bag
|
||||||
description: Contains a carp suit and some friends to play with.
|
description: Contains a carp suit and some friends to play with.
|
||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: ClothingOuterSuitCarp
|
- id: ClothingOuterSuitCarp
|
||||||
- id: PlushieCarp
|
- id: PlushieCarp
|
||||||
amount: 6
|
amount: 6
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingBackpackDuffelSyndicateBundle
|
parent: ClothingBackpackDuffelSyndicateBundle
|
||||||
@@ -198,22 +198,24 @@
|
|||||||
name: syndicate pyjama duffel bag
|
name: syndicate pyjama duffel bag
|
||||||
description: Contains 3 pairs of syndicate pyjamas and 3 plushies for the ultimate sleepover.
|
description: Contains 3 pairs of syndicate pyjamas and 3 plushies for the ultimate sleepover.
|
||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: Storage
|
||||||
contents:
|
maxTotalWeight: 44
|
||||||
- id: ClothingUniformJumpsuitPyjamaSyndicateRed
|
- type: StorageFill
|
||||||
- id: ClothingUniformJumpsuitPyjamaSyndicateBlack
|
contents:
|
||||||
- id: ClothingUniformJumpsuitPyjamaSyndicatePink
|
- id: ClothingUniformJumpsuitPyjamaSyndicateRed
|
||||||
- id: ClothingHeadPyjamaSyndicateRed
|
- id: ClothingUniformJumpsuitPyjamaSyndicateBlack
|
||||||
- id: ClothingHeadPyjamaSyndicateBlack
|
- id: ClothingUniformJumpsuitPyjamaSyndicatePink
|
||||||
- id: ClothingHeadPyjamaSyndicatePink
|
- id: ClothingHeadPyjamaSyndicateRed
|
||||||
- id: ClothingShoesSlippers
|
- id: ClothingHeadPyjamaSyndicateBlack
|
||||||
amount: 3
|
- id: ClothingHeadPyjamaSyndicatePink
|
||||||
- id: BedsheetSyndie
|
- id: ClothingShoesSlippers
|
||||||
amount: 3
|
amount: 3
|
||||||
- id: PlushieCarp
|
- id: BedsheetSyndie
|
||||||
- id: PlushieNuke
|
amount: 3
|
||||||
- id: PlushieLizard
|
- id: PlushieCarp
|
||||||
- id: PlushieSharkBlue
|
- id: PlushieNuke
|
||||||
|
- id: PlushieLizard
|
||||||
|
- id: PlushieSharkBlue
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingBackpackDuffelSyndicateBundle
|
parent: ClothingBackpackDuffelSyndicateBundle
|
||||||
@@ -249,12 +251,12 @@
|
|||||||
name: syndicate EVA bundle
|
name: syndicate EVA bundle
|
||||||
description: "Contains the Syndicate approved EVA suit."
|
description: "Contains the Syndicate approved EVA suit."
|
||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: ClothingHeadHelmetSyndicate
|
- id: ClothingHeadHelmetSyndicate
|
||||||
- id: ClothingOuterHardsuitSyndicate
|
- id: ClothingOuterHardsuitSyndicate
|
||||||
- id: ClothingMaskGasSyndicate
|
- id: ClothingMaskGasSyndicate
|
||||||
- id: DoubleEmergencyOxygenTankFilled
|
- id: DoubleEmergencyOxygenTankFilled
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingBackpackDuffelSyndicateBundle
|
parent: ClothingBackpackDuffelSyndicateBundle
|
||||||
@@ -262,11 +264,16 @@
|
|||||||
name: syndicate hardsuit bundle
|
name: syndicate hardsuit bundle
|
||||||
description: "Contains the Syndicate's signature blood red hardsuit."
|
description: "Contains the Syndicate's signature blood red hardsuit."
|
||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: Storage
|
||||||
contents:
|
maxItemSize: Huge
|
||||||
- id: ClothingOuterHardsuitSyndie
|
whitelist: #to snub 'dem metagamers
|
||||||
- id: ClothingMaskGasSyndicate
|
components:
|
||||||
- id: ClothingHandsGlovesCombat
|
- Clothing
|
||||||
|
- type: StorageFill
|
||||||
|
contents:
|
||||||
|
- id: ClothingOuterHardsuitSyndie
|
||||||
|
- id: ClothingMaskGasSyndicate
|
||||||
|
- id: ClothingHandsGlovesCombat
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingBackpackDuffelSyndicateBundle
|
parent: ClothingBackpackDuffelSyndicateBundle
|
||||||
@@ -274,26 +281,26 @@
|
|||||||
name: syndicate zombie bundle
|
name: syndicate zombie bundle
|
||||||
description: "An all-in-one kit for unleashing the undead upon a station."
|
description: "An all-in-one kit for unleashing the undead upon a station."
|
||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: SyringeRomerol
|
- id: SyringeRomerol
|
||||||
- id: WeaponRevolverPython
|
- id: WeaponRevolverPython
|
||||||
- id: MagazineBoxMagnumIncendiary
|
- id: MagazineBoxMagnumIncendiary
|
||||||
- id: PillAmbuzolPlus
|
- id: PillAmbuzolPlus
|
||||||
- id: PillAmbuzol
|
- id: PillAmbuzol
|
||||||
amount: 3
|
amount: 3
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingBackpackDuffelSyndicateBundle
|
parent: ClothingBackpackDuffelSyndicateBundle
|
||||||
id: ClothingBackpackDuffelSyndicateOperative
|
id: ClothingBackpackDuffelSyndicateOperative
|
||||||
name: operative duffelbag
|
name: operative duffelbag
|
||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: BoxSurvivalSyndicate
|
- id: BoxSurvivalSyndicate
|
||||||
- id: WeaponPistolViper
|
- id: WeaponPistolViper
|
||||||
- id: PinpointerNuclear
|
- id: PinpointerNuclear
|
||||||
- id: MicroBombImplanter
|
- id: MicroBombImplanter
|
||||||
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
@@ -302,18 +309,17 @@
|
|||||||
name: operative medic duffelbag
|
name: operative medic duffelbag
|
||||||
description: A large duffel bag for holding extra medical supplies.
|
description: A large duffel bag for holding extra medical supplies.
|
||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: BoxSurvivalSyndicate
|
- id: BoxSurvivalSyndicate
|
||||||
- id: SawAdvanced
|
- id: SawAdvanced
|
||||||
- id: Cautery
|
- id: Cautery
|
||||||
- id: CombatKnife
|
- id: CombatKnife
|
||||||
- id: WeaponPistolViper
|
- id: WeaponPistolViper
|
||||||
- id: PinpointerNuclear
|
- id: PinpointerNuclear
|
||||||
- id: HandheldHealthAnalyzer
|
- id: HandheldHealthAnalyzer
|
||||||
- id: CombatMedipen
|
- id: CombatMedipen
|
||||||
- id: MicroBombImplanter
|
- id: MicroBombImplanter
|
||||||
- id: SyndiHypo
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingBackpackDuffelSyndicateMedicalBundle
|
parent: ClothingBackpackDuffelSyndicateMedicalBundle
|
||||||
@@ -321,12 +327,12 @@
|
|||||||
name: medical bundle
|
name: medical bundle
|
||||||
description: "All you need to get your comrades back in the fight."
|
description: "All you need to get your comrades back in the fight."
|
||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: MedkitCombatFilled
|
- id: MedkitCombatFilled
|
||||||
- id: Defibrillator
|
- id: Defibrillator
|
||||||
- id: CombatMedipen
|
- id: CombatMedipen
|
||||||
amount: 3
|
amount: 3
|
||||||
- id: ClothingHandsGlovesLatex
|
- id: ClothingHandsGlovesLatex
|
||||||
- id: SyringeTranexamicAcid
|
- id: SyringeTranexamicAcid
|
||||||
- id: SyringeHyronalin
|
- id: SyringeHyronalin
|
||||||
|
|||||||
@@ -278,7 +278,7 @@
|
|||||||
containers:
|
containers:
|
||||||
ballistic-ammo: !type:Container
|
ballistic-ammo: !type:Container
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 30
|
size: Normal
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
sprite: Objects/Storage/boxes.rsi
|
sprite: Objects/Storage/boxes.rsi
|
||||||
|
|
||||||
|
|||||||
@@ -37,7 +37,7 @@
|
|||||||
- state: box
|
- state: box
|
||||||
- state: light
|
- state: light
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 60
|
maxTotalWeight: 24
|
||||||
whitelist:
|
whitelist:
|
||||||
components:
|
components:
|
||||||
- LightBulb
|
- LightBulb
|
||||||
@@ -60,7 +60,7 @@
|
|||||||
- state: box
|
- state: box
|
||||||
- state: lighttube
|
- state: lighttube
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 60
|
maxTotalWeight: 24
|
||||||
whitelist:
|
whitelist:
|
||||||
components:
|
components:
|
||||||
- LightBulb
|
- LightBulb
|
||||||
@@ -85,7 +85,7 @@
|
|||||||
- state: box
|
- state: box
|
||||||
- state: lightmixed
|
- state: lightmixed
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 60
|
maxTotalWeight: 24
|
||||||
whitelist:
|
whitelist:
|
||||||
components:
|
components:
|
||||||
- LightBulb
|
- LightBulb
|
||||||
@@ -107,11 +107,6 @@
|
|||||||
layers:
|
layers:
|
||||||
- state: box
|
- state: box
|
||||||
- state: pda
|
- state: pda
|
||||||
- type: Storage
|
|
||||||
capacity: 60
|
|
||||||
whitelist:
|
|
||||||
components:
|
|
||||||
- Pda
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: ID card box
|
name: ID card box
|
||||||
@@ -127,11 +122,6 @@
|
|||||||
layers:
|
layers:
|
||||||
- state: box
|
- state: box
|
||||||
- state: pda
|
- state: pda
|
||||||
- type: Storage
|
|
||||||
capacity: 60
|
|
||||||
whitelist:
|
|
||||||
components:
|
|
||||||
- IdCard
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: headset box
|
name: headset box
|
||||||
@@ -147,11 +137,6 @@
|
|||||||
layers:
|
layers:
|
||||||
- state: box
|
- state: box
|
||||||
- state: headset
|
- state: headset
|
||||||
- type: Storage
|
|
||||||
capacity: 60
|
|
||||||
whitelist:
|
|
||||||
components:
|
|
||||||
- Headset
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: meson box
|
name: meson box
|
||||||
@@ -191,8 +176,6 @@
|
|||||||
id: BoxHugHealing
|
id: BoxHugHealing
|
||||||
description: A special box for sensitive people.
|
description: A special box for sensitive people.
|
||||||
components:
|
components:
|
||||||
- type: Storage
|
|
||||||
capacity: 30
|
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
layers:
|
layers:
|
||||||
- state: box_hug
|
- state: box_hug
|
||||||
@@ -234,6 +217,12 @@
|
|||||||
id: BoxPerformer
|
id: BoxPerformer
|
||||||
description: Happy Hatsune Miku Day!
|
description: Happy Hatsune Miku Day!
|
||||||
components:
|
components:
|
||||||
|
- type: Storage
|
||||||
|
maxItemSize: Normal
|
||||||
|
whitelist:
|
||||||
|
components:
|
||||||
|
- Clothing
|
||||||
|
- Food
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: ClothingShoesBootsPerformer
|
- id: ClothingShoesBootsPerformer
|
||||||
@@ -267,7 +256,8 @@
|
|||||||
- id: TrashBag
|
- id: TrashBag
|
||||||
amount: 6
|
amount: 6
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 800
|
maxTotalWeight: 24
|
||||||
|
maxItemSize: Normal
|
||||||
whitelist:
|
whitelist:
|
||||||
tags:
|
tags:
|
||||||
- TrashBag
|
- TrashBag
|
||||||
@@ -294,7 +284,6 @@
|
|||||||
- state: box
|
- state: box
|
||||||
- state: encryptokey
|
- state: encryptokey
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 30
|
|
||||||
whitelist:
|
whitelist:
|
||||||
components:
|
components:
|
||||||
- EncryptionKey
|
- EncryptionKey
|
||||||
@@ -386,13 +375,12 @@
|
|||||||
description: Two syndicate encryption keys for the price of one. Miniaturized for ease of use.
|
description: Two syndicate encryption keys for the price of one. Miniaturized for ease of use.
|
||||||
components:
|
components:
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 15
|
size: Normal
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: EncryptionKeySyndie
|
- id: EncryptionKeySyndie
|
||||||
amount: 2
|
amount: 2
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 15
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: deathrattle implant box
|
name: deathrattle implant box
|
||||||
@@ -401,7 +389,7 @@
|
|||||||
description: Six deathrattle implants and handheld GPS devices for the whole squad.
|
description: Six deathrattle implants and handheld GPS devices for the whole squad.
|
||||||
components:
|
components:
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 60
|
size: Normal
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: DeathRattleImplanter
|
- id: DeathRattleImplanter
|
||||||
@@ -409,7 +397,7 @@
|
|||||||
- id: HandheldGPSBasic
|
- id: HandheldGPSBasic
|
||||||
amount: 6
|
amount: 6
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 60
|
maxTotalWeight: 24
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
layers:
|
layers:
|
||||||
- state: box
|
- state: box
|
||||||
@@ -434,19 +422,19 @@
|
|||||||
description: This box filled with colorful darts.
|
description: This box filled with colorful darts.
|
||||||
components:
|
components:
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 40
|
size: Normal
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: Dart
|
- id: Dart
|
||||||
amount: 5
|
amount: 3
|
||||||
- id: DartBlue
|
- id: DartBlue
|
||||||
amount: 5
|
amount: 3
|
||||||
- id: DartPurple
|
- id: DartPurple
|
||||||
amount: 5
|
amount: 3
|
||||||
- id: DartYellow
|
- id: DartYellow
|
||||||
amount: 5
|
amount: 3
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 40
|
maxTotalWeight: 24
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
layers:
|
layers:
|
||||||
- state: box
|
- state: box
|
||||||
|
|||||||
@@ -93,10 +93,12 @@
|
|||||||
parent: BoxCardboard
|
parent: BoxCardboard
|
||||||
id: BoxMouthSwab
|
id: BoxMouthSwab
|
||||||
components:
|
components:
|
||||||
|
- type: Storage
|
||||||
|
maxTotalWeight: 20
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: DiseaseSwab
|
- id: DiseaseSwab
|
||||||
amount: 30
|
amount: 10
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
layers:
|
layers:
|
||||||
- state: box
|
- state: box
|
||||||
|
|||||||
@@ -49,6 +49,11 @@
|
|||||||
id: BoxZiptie
|
id: BoxZiptie
|
||||||
description: A box full of zipties.
|
description: A box full of zipties.
|
||||||
components:
|
components:
|
||||||
|
- type: Storage
|
||||||
|
maxTotalWeight: 20
|
||||||
|
whitelist:
|
||||||
|
components:
|
||||||
|
- Handcuff
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: Zipties
|
- id: Zipties
|
||||||
@@ -64,6 +69,8 @@
|
|||||||
id: BoxForensicPad
|
id: BoxForensicPad
|
||||||
description: A box of forensic pads.
|
description: A box of forensic pads.
|
||||||
components:
|
components:
|
||||||
|
- type: Storage
|
||||||
|
maxTotalWeight: 20
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: ForensicPad
|
- id: ForensicPad
|
||||||
|
|||||||
@@ -302,7 +302,7 @@
|
|||||||
- id: TargetDarts
|
- id: TargetDarts
|
||||||
amount: 1
|
amount: 1
|
||||||
- id: BoxDarts
|
- id: BoxDarts
|
||||||
amount: 1
|
amount: 2
|
||||||
- id: BoxDarts
|
- id: BoxDarts
|
||||||
amount: 1
|
amount: 1
|
||||||
prob: 0.05
|
prob: 0.05
|
||||||
|
|||||||
@@ -91,14 +91,11 @@
|
|||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: Brutepack
|
- id: Brutepack
|
||||||
amount: 1
|
|
||||||
- id: Ointment
|
- id: Ointment
|
||||||
amount: 1
|
|
||||||
- id: Bloodpack
|
- id: Bloodpack
|
||||||
amount: 1
|
|
||||||
- id: Gauze
|
- id: Gauze
|
||||||
- id: EmergencyMedipen #You never know what people are going to latejoin into
|
- id: EmergencyMedipen #You never know what people are going to latejoin into
|
||||||
amount: 6
|
amount: 3
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: ClothingBeltPlantFilled
|
id: ClothingBeltPlantFilled
|
||||||
@@ -126,6 +123,10 @@
|
|||||||
name: grenadier chest rig
|
name: grenadier chest rig
|
||||||
suffix: Filled
|
suffix: Filled
|
||||||
components:
|
components:
|
||||||
|
- type: Item
|
||||||
|
size: Large
|
||||||
|
- type: Storage
|
||||||
|
maxSlots: 8
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: ExGrenade
|
- id: ExGrenade
|
||||||
|
|||||||
@@ -15,6 +15,10 @@
|
|||||||
parent: BriefcaseSyndie
|
parent: BriefcaseSyndie
|
||||||
suffix: SniperBundle
|
suffix: SniperBundle
|
||||||
components:
|
components:
|
||||||
|
- type: Item
|
||||||
|
size: Huge
|
||||||
|
- type: Storage
|
||||||
|
maxItemSize: Large
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: WeaponSniperHristov
|
- id: WeaponSniperHristov
|
||||||
|
|||||||
@@ -12,8 +12,7 @@
|
|||||||
- id: Ointment
|
- id: Ointment
|
||||||
amount: 2
|
amount: 2
|
||||||
- id: Gauze
|
- id: Gauze
|
||||||
- id: PillTricordrazine
|
- id: PillCanisterTricordrazine
|
||||||
amount: 5
|
|
||||||
# see https://github.com/tgstation/blob/master/code/game/objects/items/storage/firstaid.dm for example contents
|
# see https://github.com/tgstation/blob/master/code/game/objects/items/storage/firstaid.dm for example contents
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
@@ -28,10 +27,8 @@
|
|||||||
- id: Ointment
|
- id: Ointment
|
||||||
amount: 2
|
amount: 2
|
||||||
- id: SyringeSigynate
|
- id: SyringeSigynate
|
||||||
- id: PillKelotane
|
- id: PillCanisterKelotane
|
||||||
amount: 5
|
- id: PillCanisterDermaline
|
||||||
- id: PillDermaline
|
|
||||||
amount: 5
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: MedkitBruteFilled
|
id: MedkitBruteFilled
|
||||||
@@ -45,10 +42,8 @@
|
|||||||
- id: Gauze
|
- id: Gauze
|
||||||
- id: Bloodpack
|
- id: Bloodpack
|
||||||
- id: SyringeTranexamicAcid
|
- id: SyringeTranexamicAcid
|
||||||
- id: PillIron
|
- id: PillCanisterIron
|
||||||
amount: 5
|
- id: PillCanisterBicaridine
|
||||||
- id: PillBicaridine
|
|
||||||
amount: 5
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: MedkitToxinFilled
|
id: MedkitToxinFilled
|
||||||
@@ -60,10 +55,8 @@
|
|||||||
- id: SyringeIpecac
|
- id: SyringeIpecac
|
||||||
- id: SyringeEthylredoxrazine
|
- id: SyringeEthylredoxrazine
|
||||||
- id: AntiPoisonMedipen
|
- id: AntiPoisonMedipen
|
||||||
- id: PillDylovene
|
- id: PillCanisterDylovene
|
||||||
amount: 5
|
- id: PillCanisterCharcoal
|
||||||
- id: PillCharcoal
|
|
||||||
amount: 3
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: MedkitOxygenFilled
|
id: MedkitOxygenFilled
|
||||||
@@ -76,8 +69,7 @@
|
|||||||
- id: EmergencyOxygenTankFilled
|
- id: EmergencyOxygenTankFilled
|
||||||
- id: EmergencyMedipen
|
- id: EmergencyMedipen
|
||||||
- id: SyringeInaprovaline
|
- id: SyringeInaprovaline
|
||||||
- id: PillDexalin
|
- id: PillCanisterDexalin
|
||||||
amount: 7
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: MedkitRadiationFilled
|
id: MedkitRadiationFilled
|
||||||
@@ -92,8 +84,7 @@
|
|||||||
amount: 1
|
amount: 1
|
||||||
- id: EmergencyMedipen
|
- id: EmergencyMedipen
|
||||||
amount: 1
|
amount: 1
|
||||||
- id: PillHyronalin
|
- id: PillCanisterHyronalin
|
||||||
amount: 5
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: MedkitAdvancedFilled
|
id: MedkitAdvancedFilled
|
||||||
@@ -120,11 +111,9 @@
|
|||||||
- id: MedicatedSuture
|
- id: MedicatedSuture
|
||||||
- id: RegenerativeMesh
|
- id: RegenerativeMesh
|
||||||
- id: SyringeEphedrine
|
- id: SyringeEphedrine
|
||||||
- id: SyringeSaline
|
|
||||||
- id: BruteAutoInjector
|
- id: BruteAutoInjector
|
||||||
- id: BurnAutoInjector
|
- id: BurnAutoInjector
|
||||||
- id: EmergencyMedipen
|
- id: EmergencyMedipen
|
||||||
- id: Bloodpack
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: StimkitFilled
|
id: StimkitFilled
|
||||||
|
|||||||
@@ -86,9 +86,16 @@
|
|||||||
suffix: Filled
|
suffix: Filled
|
||||||
parent: ToolboxSyndicate
|
parent: ToolboxSyndicate
|
||||||
components:
|
components:
|
||||||
|
- type: Storage
|
||||||
|
maxSlots: 8
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: ClothingBeltUtilityEngineering
|
- id: Crowbar
|
||||||
|
- id: Wrench
|
||||||
|
- id: Screwdriver
|
||||||
|
- id: Wirecutter
|
||||||
|
- id: Welder
|
||||||
|
- id: Multitool
|
||||||
- id: ClothingHandsGlovesCombat
|
- id: ClothingHandsGlovesCombat
|
||||||
- id: ClothingMaskGasSyndicate
|
- id: ClothingMaskGasSyndicate
|
||||||
|
|
||||||
|
|||||||
@@ -8,13 +8,14 @@
|
|||||||
sprite: Clothing/Back/Backpacks/backpack.rsi
|
sprite: Clothing/Back/Backpacks/backpack.rsi
|
||||||
state: icon
|
state: icon
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 9999
|
size: Large
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
quickEquip: false
|
quickEquip: false
|
||||||
slots:
|
slots:
|
||||||
- back
|
- back
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 100
|
maxItemSize: Large
|
||||||
|
maxTotalWeight: 28
|
||||||
- type: ContainerContainer
|
- type: ContainerContainer
|
||||||
containers:
|
containers:
|
||||||
storagebase: !type:Container
|
storagebase: !type:Container
|
||||||
@@ -196,7 +197,7 @@
|
|||||||
- type: Sprite
|
- type: Sprite
|
||||||
sprite: Clothing/Back/Backpacks/ertleader.rsi
|
sprite: Clothing/Back/Backpacks/ertleader.rsi
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 250
|
maxTotalWeight: 44
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingBackpackERTLeader
|
parent: ClothingBackpackERTLeader
|
||||||
@@ -259,8 +260,11 @@
|
|||||||
shader: unshaded
|
shader: unshaded
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
equippedPrefix: holding
|
equippedPrefix: holding
|
||||||
|
- type: Item
|
||||||
|
size: Ginormous
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 9999
|
maxItemSize: Large
|
||||||
|
maxTotalWeight: 56 #14 normal-sized items.
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingBackpackClown
|
parent: ClothingBackpackClown
|
||||||
|
|||||||
@@ -4,13 +4,14 @@
|
|||||||
name: duffel bag
|
name: duffel bag
|
||||||
description: A large duffel bag for holding extra things.
|
description: A large duffel bag for holding extra things.
|
||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
sprite: Clothing/Back/Duffels/duffel.rsi
|
sprite: Clothing/Back/Duffels/duffel.rsi
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 120
|
maxItemSize: Large
|
||||||
- type: ClothingSpeedModifier
|
maxTotalWeight: 40
|
||||||
walkModifier: 1
|
- type: ClothingSpeedModifier
|
||||||
sprintModifier: 0.9
|
walkModifier: 1
|
||||||
|
sprintModifier: 0.9
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingBackpackDuffel
|
parent: ClothingBackpackDuffel
|
||||||
@@ -18,8 +19,8 @@
|
|||||||
name: engineering duffel bag
|
name: engineering duffel bag
|
||||||
description: A large duffel bag for holding extra tools and supplies.
|
description: A large duffel bag for holding extra tools and supplies.
|
||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
sprite: Clothing/Back/Duffels/engineering.rsi
|
sprite: Clothing/Back/Duffels/engineering.rsi
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingBackpackDuffel
|
parent: ClothingBackpackDuffel
|
||||||
@@ -27,8 +28,8 @@
|
|||||||
name: atmospherics duffel bag
|
name: atmospherics duffel bag
|
||||||
description: A large duffel bag made of fire resistant fibers. Smells like plasma.
|
description: A large duffel bag made of fire resistant fibers. Smells like plasma.
|
||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
sprite: Clothing/Back/Duffels/atmospherics.rsi
|
sprite: Clothing/Back/Duffels/atmospherics.rsi
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingBackpackDuffel
|
parent: ClothingBackpackDuffel
|
||||||
@@ -36,8 +37,8 @@
|
|||||||
name: medical duffel bag
|
name: medical duffel bag
|
||||||
description: A large duffel bag for holding extra medical supplies.
|
description: A large duffel bag for holding extra medical supplies.
|
||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
sprite: Clothing/Back/Duffels/medical.rsi
|
sprite: Clothing/Back/Duffels/medical.rsi
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingBackpackDuffel
|
parent: ClothingBackpackDuffel
|
||||||
@@ -45,8 +46,8 @@
|
|||||||
name: captain's duffel bag
|
name: captain's duffel bag
|
||||||
description: A large duffel bag for holding extra captainly goods.
|
description: A large duffel bag for holding extra captainly goods.
|
||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
sprite: Clothing/Back/Duffels/captain.rsi
|
sprite: Clothing/Back/Duffels/captain.rsi
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingBackpackDuffel
|
parent: ClothingBackpackDuffel
|
||||||
@@ -54,11 +55,11 @@
|
|||||||
name: clown duffel bag
|
name: clown duffel bag
|
||||||
description: A large duffel bag for holding extra honk goods.
|
description: A large duffel bag for holding extra honk goods.
|
||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
sprite: Clothing/Back/Duffels/clown.rsi
|
sprite: Clothing/Back/Duffels/clown.rsi
|
||||||
- type: Storage
|
- type: Storage
|
||||||
storageOpenSound:
|
storageOpenSound:
|
||||||
collection: BikeHorn
|
collection: BikeHorn
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingBackpackDuffel
|
parent: ClothingBackpackDuffel
|
||||||
@@ -66,8 +67,8 @@
|
|||||||
name: security duffel bag
|
name: security duffel bag
|
||||||
description: A large duffel bag for holding extra security related goods.
|
description: A large duffel bag for holding extra security related goods.
|
||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
sprite: Clothing/Back/Duffels/security.rsi
|
sprite: Clothing/Back/Duffels/security.rsi
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingBackpackDuffel
|
parent: ClothingBackpackDuffel
|
||||||
@@ -75,8 +76,8 @@
|
|||||||
name: brigmedic duffel bag
|
name: brigmedic duffel bag
|
||||||
description: A large duffel bag for holding extra medical related goods.
|
description: A large duffel bag for holding extra medical related goods.
|
||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
sprite: Clothing/Back/Duffels/brigmedic.rsi
|
sprite: Clothing/Back/Duffels/brigmedic.rsi
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingBackpackDuffel
|
parent: ClothingBackpackDuffel
|
||||||
@@ -84,8 +85,8 @@
|
|||||||
name: chemistry duffel bag
|
name: chemistry duffel bag
|
||||||
description: A large duffel bag for holding extra beakers and test tubes.
|
description: A large duffel bag for holding extra beakers and test tubes.
|
||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
sprite: Clothing/Back/Duffels/chemistry.rsi
|
sprite: Clothing/Back/Duffels/chemistry.rsi
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingBackpackDuffel
|
parent: ClothingBackpackDuffel
|
||||||
@@ -93,8 +94,8 @@
|
|||||||
name: virology duffel bag
|
name: virology duffel bag
|
||||||
description: A large duffel bag made of hypo-allergenic fibers. It's designed to help prevent the spread of disease. Smells like monkey.
|
description: A large duffel bag made of hypo-allergenic fibers. It's designed to help prevent the spread of disease. Smells like monkey.
|
||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
sprite: Clothing/Back/Duffels/virology.rsi
|
sprite: Clothing/Back/Duffels/virology.rsi
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingBackpackDuffel
|
parent: ClothingBackpackDuffel
|
||||||
@@ -102,8 +103,8 @@
|
|||||||
name: genetics duffel bag
|
name: genetics duffel bag
|
||||||
description: A large duffel bag for holding extra genetic mutations.
|
description: A large duffel bag for holding extra genetic mutations.
|
||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
sprite: Clothing/Back/Duffels/genetics.rsi
|
sprite: Clothing/Back/Duffels/genetics.rsi
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingBackpackDuffel
|
parent: ClothingBackpackDuffel
|
||||||
@@ -111,12 +112,12 @@
|
|||||||
name: mime duffel bag
|
name: mime duffel bag
|
||||||
description: A large duffel bag for holding... mime... stuff.
|
description: A large duffel bag for holding... mime... stuff.
|
||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
sprite: Clothing/Back/Duffels/mime.rsi
|
sprite: Clothing/Back/Duffels/mime.rsi
|
||||||
storageOpenSound:
|
storageOpenSound:
|
||||||
collection: null
|
collection: null
|
||||||
storageInsertSound:
|
storageInsertSound:
|
||||||
collection: null
|
collection: null
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingBackpackDuffel
|
parent: ClothingBackpackDuffel
|
||||||
@@ -124,8 +125,8 @@
|
|||||||
name: science duffel bag
|
name: science duffel bag
|
||||||
description: A large duffel bag for holding extra science related goods.
|
description: A large duffel bag for holding extra science related goods.
|
||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
sprite: Clothing/Back/Duffels/science.rsi
|
sprite: Clothing/Back/Duffels/science.rsi
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingBackpackDuffel
|
parent: ClothingBackpackDuffel
|
||||||
@@ -160,31 +161,29 @@
|
|||||||
name: syndicate duffel bag
|
name: syndicate duffel bag
|
||||||
description: A large duffel bag for holding various traitor goods.
|
description: A large duffel bag for holding various traitor goods.
|
||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
sprite: Clothing/Back/Duffels/syndicate.rsi
|
sprite: Clothing/Back/Duffels/syndicate.rsi
|
||||||
- type: Storage
|
|
||||||
capacity: 131
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingBackpackDuffelSyndicate
|
parent: ClothingBackpackDuffelSyndicate
|
||||||
id: ClothingBackpackDuffelSyndicateBundle
|
id: ClothingBackpackDuffelSyndicateBundle
|
||||||
abstract: true
|
abstract: true
|
||||||
components:
|
components:
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags: [] # ignore "WhitelistChameleon" tag
|
tags: [] # ignore "WhitelistChameleon" tag
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingBackpackDuffelSyndicate
|
parent: ClothingBackpackDuffelSyndicate
|
||||||
id: ClothingBackpackDuffelSyndicateAmmo
|
id: ClothingBackpackDuffelSyndicateAmmo
|
||||||
name: syndicate duffel bag
|
name: syndicate duffel bag
|
||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
sprite: Clothing/Back/Duffels/syndicate.rsi
|
sprite: Clothing/Back/Duffels/syndicate.rsi
|
||||||
state: icon-ammo
|
state: icon-ammo
|
||||||
- type: Item
|
- type: Item
|
||||||
heldPrefix: ammo
|
heldPrefix: ammo
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
equippedPrefix: ammo
|
equippedPrefix: ammo
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingBackpackDuffelSyndicateAmmo
|
parent: ClothingBackpackDuffelSyndicateAmmo
|
||||||
@@ -199,13 +198,13 @@
|
|||||||
id: ClothingBackpackDuffelSyndicateMedical
|
id: ClothingBackpackDuffelSyndicateMedical
|
||||||
name: syndicate duffel bag
|
name: syndicate duffel bag
|
||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
sprite: Clothing/Back/Duffels/syndicate.rsi
|
sprite: Clothing/Back/Duffels/syndicate.rsi
|
||||||
state: icon-med
|
state: icon-med
|
||||||
- type: Item
|
- type: Item
|
||||||
heldPrefix: med
|
heldPrefix: med
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
equippedPrefix: med
|
equippedPrefix: med
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingBackpackDuffelSyndicateMedical
|
parent: ClothingBackpackDuffelSyndicateMedical
|
||||||
@@ -221,17 +220,20 @@
|
|||||||
name: duffelbag of holding
|
name: duffelbag of holding
|
||||||
description: A duffelbag that opens into a localized pocket of bluespace.
|
description: A duffelbag that opens into a localized pocket of bluespace.
|
||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
sprite: Clothing/Back/Duffels/holding.rsi
|
sprite: Clothing/Back/Duffels/holding.rsi
|
||||||
state: icon
|
state: icon
|
||||||
layers:
|
layers:
|
||||||
- state: icon
|
- state: icon
|
||||||
- state: icon-unlit
|
- state: icon-unlit
|
||||||
shader: unshaded
|
shader: unshaded
|
||||||
- type: Storage
|
- type: Item
|
||||||
capacity: 9999
|
size: Ginormous
|
||||||
- type: ClothingSpeedModifier
|
- type: Storage
|
||||||
sprintModifier: 1 # makes its stats identical to other variants of bag of holding
|
maxItemSize: Large
|
||||||
|
maxTotalWeight: 56 #14 normal-sized items.
|
||||||
|
- type: ClothingSpeedModifier
|
||||||
|
sprintModifier: 1 # makes its stats identical to other variants of bag of holding
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingBackpackDuffel
|
parent: ClothingBackpackDuffel
|
||||||
@@ -239,8 +241,9 @@
|
|||||||
name: CBURN duffel bag
|
name: CBURN duffel bag
|
||||||
description: A duffel bag containing a variety of biological containment equipment.
|
description: A duffel bag containing a variety of biological containment equipment.
|
||||||
components:
|
components:
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 150
|
maxItemSize: Large
|
||||||
- type: ClothingSpeedModifier
|
maxTotalWeight: 40
|
||||||
walkModifier: 1
|
- type: ClothingSpeedModifier
|
||||||
sprintModifier: 1
|
walkModifier: 1
|
||||||
|
sprintModifier: 1
|
||||||
|
|||||||
@@ -167,5 +167,8 @@
|
|||||||
- state: icon
|
- state: icon
|
||||||
- state: icon-unlit
|
- state: icon-unlit
|
||||||
shader: unshaded
|
shader: unshaded
|
||||||
|
- type: Item
|
||||||
|
size: Ginormous
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 9999
|
maxItemSize: Large
|
||||||
|
maxTotalWeight: 56 #14 normal-sized items.
|
||||||
|
|||||||
@@ -33,7 +33,7 @@
|
|||||||
sprite: Clothing/Back/Backpacks/waterbackpack.rsi
|
sprite: Clothing/Back/Backpacks/waterbackpack.rsi
|
||||||
state: icon
|
state: icon
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 200
|
size: Huge
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
slots: BACK
|
slots: BACK
|
||||||
sprite: Clothing/Back/Backpacks/waterbackpack.rsi
|
sprite: Clothing/Back/Backpacks/waterbackpack.rsi
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
- type: Sprite
|
- type: Sprite
|
||||||
state: icon
|
state: icon
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 50
|
size: Normal
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
slots: [belt]
|
slots: [belt]
|
||||||
quickEquip: false
|
quickEquip: false
|
||||||
@@ -22,7 +22,10 @@
|
|||||||
id: ClothingBeltStorageBase
|
id: ClothingBeltStorageBase
|
||||||
components:
|
components:
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 40
|
maxSlots: 7
|
||||||
|
maxItemSize: Normal
|
||||||
|
- type: Item
|
||||||
|
size: Huge
|
||||||
- type: ContainerContainer
|
- type: ContainerContainer
|
||||||
containers:
|
containers:
|
||||||
storagebase: !type:Container
|
storagebase: !type:Container
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
- type: Clothing
|
- type: Clothing
|
||||||
sprite: Clothing/Belt/utility.rsi
|
sprite: Clothing/Belt/utility.rsi
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 45
|
maxItemSize: Normal
|
||||||
# TODO: Fill this out more.
|
# TODO: Fill this out more.
|
||||||
whitelist:
|
whitelist:
|
||||||
tags:
|
tags:
|
||||||
@@ -83,7 +83,6 @@
|
|||||||
- type: Clothing
|
- type: Clothing
|
||||||
sprite: Clothing/Belt/ce.rsi
|
sprite: Clothing/Belt/ce.rsi
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 105
|
|
||||||
# TODO: Fill this out more.
|
# TODO: Fill this out more.
|
||||||
whitelist:
|
whitelist:
|
||||||
tags:
|
tags:
|
||||||
@@ -238,7 +237,6 @@
|
|||||||
- type: Clothing
|
- type: Clothing
|
||||||
sprite: Clothing/Belt/medical.rsi
|
sprite: Clothing/Belt/medical.rsi
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 60
|
|
||||||
whitelist:
|
whitelist:
|
||||||
tags:
|
tags:
|
||||||
- Wrench
|
- Wrench
|
||||||
@@ -393,7 +391,7 @@
|
|||||||
- type: Clothing
|
- type: Clothing
|
||||||
sprite: Clothing/Belt/sheath.rsi
|
sprite: Clothing/Belt/sheath.rsi
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 15
|
maxSlots: 1
|
||||||
whitelist:
|
whitelist:
|
||||||
tags:
|
tags:
|
||||||
- CaptainSabre
|
- CaptainSabre
|
||||||
@@ -418,9 +416,8 @@
|
|||||||
- type: Clothing
|
- type: Clothing
|
||||||
sprite: Clothing/Belt/bandolier.rsi
|
sprite: Clothing/Belt/bandolier.rsi
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 60
|
size: Large
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 60
|
|
||||||
whitelist:
|
whitelist:
|
||||||
tags:
|
tags:
|
||||||
- ShellShotgun
|
- ShellShotgun
|
||||||
@@ -451,7 +448,7 @@
|
|||||||
- type: Clothing
|
- type: Clothing
|
||||||
sprite: Clothing/Belt/holster.rsi
|
sprite: Clothing/Belt/holster.rsi
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 20
|
maxSlots: 3
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingBeltStorageBase
|
parent: ClothingBeltStorageBase
|
||||||
@@ -464,9 +461,8 @@
|
|||||||
- type: Clothing
|
- type: Clothing
|
||||||
sprite: Clothing/Belt/syndieholster.rsi
|
sprite: Clothing/Belt/syndieholster.rsi
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 60
|
size: Large
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 60
|
|
||||||
whitelist:
|
whitelist:
|
||||||
components:
|
components:
|
||||||
- Gun
|
- Gun
|
||||||
@@ -528,9 +524,7 @@
|
|||||||
- type: Clothing
|
- type: Clothing
|
||||||
sprite: Clothing/Belt/militarywebbingmed.rsi
|
sprite: Clothing/Belt/militarywebbingmed.rsi
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 70
|
size: Large
|
||||||
- type: Storage
|
|
||||||
capacity: 70
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingBeltBase
|
parent: ClothingBeltBase
|
||||||
@@ -559,7 +553,7 @@
|
|||||||
- type: Clothing
|
- type: Clothing
|
||||||
sprite: Clothing/Belt/wand.rsi
|
sprite: Clothing/Belt/wand.rsi
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 120
|
maxSlots: 8
|
||||||
whitelist:
|
whitelist:
|
||||||
tags:
|
tags:
|
||||||
- WizardWand
|
- WizardWand
|
||||||
|
|||||||
@@ -12,7 +12,8 @@
|
|||||||
visible: false
|
visible: false
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 150
|
maxSlots: 15
|
||||||
|
maxItemSize: Small
|
||||||
whitelist:
|
whitelist:
|
||||||
tags:
|
tags:
|
||||||
- Arrow
|
- Arrow
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
- type: Clothing
|
- type: Clothing
|
||||||
sprite: Clothing/Belt/waistbag_leather.rsi
|
sprite: Clothing/Belt/waistbag_leather.rsi
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 20
|
maxItemSize: Small
|
||||||
|
|
||||||
#Colorization on worn items doesn't work. If this ever gets fixed, you can duplicate this entry and change the color on the sprite to add color variants.
|
#Colorization on worn items doesn't work. If this ever gets fixed, you can duplicate this entry and change the color on the sprite to add color variants.
|
||||||
#- type: entity
|
#- type: entity
|
||||||
|
|||||||
@@ -17,6 +17,8 @@
|
|||||||
keySlots: 4
|
keySlots: 4
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
state: icon
|
state: icon
|
||||||
|
- type: Item
|
||||||
|
size: Small
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
slots:
|
slots:
|
||||||
- ears
|
- ears
|
||||||
|
|||||||
@@ -7,3 +7,5 @@
|
|||||||
state: icon
|
state: icon
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
slots: [eyes]
|
slots: [eyes]
|
||||||
|
- type: Item
|
||||||
|
size: Small
|
||||||
|
|||||||
@@ -9,6 +9,8 @@
|
|||||||
slots: [gloves]
|
slots: [gloves]
|
||||||
- type: Food
|
- type: Food
|
||||||
requiresSpecialDigestion: true
|
requiresSpecialDigestion: true
|
||||||
|
- type: Item
|
||||||
|
size: Small
|
||||||
- type: SolutionContainerManager
|
- type: SolutionContainerManager
|
||||||
solutions:
|
solutions:
|
||||||
food:
|
food:
|
||||||
|
|||||||
@@ -8,6 +8,8 @@
|
|||||||
- HEAD
|
- HEAD
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
state: icon
|
state: icon
|
||||||
|
- type: Item
|
||||||
|
size: Small
|
||||||
- type: Food
|
- type: Food
|
||||||
requiresSpecialDigestion: true
|
requiresSpecialDigestion: true
|
||||||
- type: SolutionContainerManager
|
- type: SolutionContainerManager
|
||||||
@@ -69,6 +71,7 @@
|
|||||||
equippedPrefix: off
|
equippedPrefix: off
|
||||||
- type: Item
|
- type: Item
|
||||||
heldPrefix: off
|
heldPrefix: off
|
||||||
|
size: Normal
|
||||||
- type: ToggleableLightVisuals
|
- type: ToggleableLightVisuals
|
||||||
- type: PointLight
|
- type: PointLight
|
||||||
enabled: false
|
enabled: false
|
||||||
@@ -117,7 +120,7 @@
|
|||||||
name: base space helmet
|
name: base space helmet
|
||||||
components:
|
components:
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 10
|
size: Normal
|
||||||
- type: PressureProtection
|
- type: PressureProtection
|
||||||
highPressureMultiplier: 0.6
|
highPressureMultiplier: 0.6
|
||||||
lowPressureMultiplier: 1000
|
lowPressureMultiplier: 1000
|
||||||
|
|||||||
@@ -197,7 +197,7 @@
|
|||||||
- type: Clothing
|
- type: Clothing
|
||||||
sprite: Clothing/Head/Hats/chefhat.rsi
|
sprite: Clothing/Head/Hats/chefhat.rsi
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 5
|
maxSlots: 1
|
||||||
- type: UserInterface
|
- type: UserInterface
|
||||||
interfaces:
|
interfaces:
|
||||||
- key: enum.StorageUiKey.Key
|
- key: enum.StorageUiKey.Key
|
||||||
@@ -751,10 +751,10 @@
|
|||||||
offset: "0, 0.12"
|
offset: "0, 0.12"
|
||||||
sprite: Clothing/Head/Hats/magician.rsi
|
sprite: Clothing/Head/Hats/magician.rsi
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 10
|
size: Small
|
||||||
sprite: Clothing/Head/Hats/magician.rsi
|
sprite: Clothing/Head/Hats/magician.rsi
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 10
|
maxSlots: 1
|
||||||
- type: UserInterface
|
- type: UserInterface
|
||||||
interfaces:
|
interfaces:
|
||||||
- key: enum.StorageUiKey.Key
|
- key: enum.StorageUiKey.Key
|
||||||
|
|||||||
@@ -5,6 +5,8 @@
|
|||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
state: icon
|
state: icon
|
||||||
|
- type: Item
|
||||||
|
size: Small
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
slots: [mask]
|
slots: [mask]
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
id: ClothingNeckBase
|
id: ClothingNeckBase
|
||||||
components:
|
components:
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 10
|
size: Small
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
quickEquip: true
|
quickEquip: true
|
||||||
slots:
|
slots:
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
description: be nothing do crime
|
description: be nothing do crime
|
||||||
components:
|
components:
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 1
|
size: Tiny
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingNeckPinBase
|
parent: ClothingNeckPinBase
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
id: ClothingOuterBaseLarge
|
id: ClothingOuterBaseLarge
|
||||||
components:
|
components:
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 80
|
size: Large
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
slots:
|
slots:
|
||||||
- outerClothing
|
- outerClothing
|
||||||
@@ -28,10 +28,8 @@
|
|||||||
parent: ClothingOuterBase
|
parent: ClothingOuterBase
|
||||||
id: ClothingOuterStorageBase
|
id: ClothingOuterStorageBase
|
||||||
components:
|
components:
|
||||||
- type: Item
|
|
||||||
size: 10
|
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 10
|
maxTotalWeight: 6
|
||||||
- type: ContainerContainer
|
- type: ContainerContainer
|
||||||
containers:
|
containers:
|
||||||
storagebase: !type:Container
|
storagebase: !type:Container
|
||||||
@@ -72,7 +70,7 @@
|
|||||||
walkModifier: 0.4
|
walkModifier: 0.4
|
||||||
sprintModifier: 0.6
|
sprintModifier: 0.6
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 121
|
size: Huge
|
||||||
- type: Armor
|
- type: Armor
|
||||||
modifiers:
|
modifiers:
|
||||||
coefficients:
|
coefficients:
|
||||||
@@ -107,7 +105,7 @@
|
|||||||
walkModifier: 0.8
|
walkModifier: 0.8
|
||||||
sprintModifier: 0.8
|
sprintModifier: 0.8
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 80
|
size: Large
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingOuterBase
|
parent: ClothingOuterBase
|
||||||
@@ -130,7 +128,7 @@
|
|||||||
id: ClothingOuterBaseMedium
|
id: ClothingOuterBaseMedium
|
||||||
components:
|
components:
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 30
|
size: Large
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
slots:
|
slots:
|
||||||
- outerClothing
|
- outerClothing
|
||||||
|
|||||||
@@ -350,7 +350,7 @@
|
|||||||
walkModifier: 0.75
|
walkModifier: 0.75
|
||||||
sprintModifier: 0.75
|
sprintModifier: 0.75
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 50
|
size: Normal
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
- WhitelistChameleon
|
- WhitelistChameleon
|
||||||
|
|||||||
@@ -176,7 +176,7 @@
|
|||||||
- type: Sprite
|
- type: Sprite
|
||||||
sprite: Clothing/OuterClothing/Suits/iansuit.rsi
|
sprite: Clothing/OuterClothing/Suits/iansuit.rsi
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 30
|
size: Normal
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
sprite: Clothing/OuterClothing/Suits/iansuit.rsi
|
sprite: Clothing/OuterClothing/Suits/iansuit.rsi
|
||||||
- type: ToggleableClothing
|
- type: ToggleableClothing
|
||||||
@@ -197,7 +197,7 @@
|
|||||||
- type: Sprite
|
- type: Sprite
|
||||||
sprite: Clothing/OuterClothing/Suits/carpsuit.rsi
|
sprite: Clothing/OuterClothing/Suits/carpsuit.rsi
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 30
|
size: Normal
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
sprite: Clothing/OuterClothing/Suits/carpsuit.rsi
|
sprite: Clothing/OuterClothing/Suits/carpsuit.rsi
|
||||||
- type: ToggleableClothing
|
- type: ToggleableClothing
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
- type: TemperatureProtection
|
- type: TemperatureProtection
|
||||||
coefficient: 0.1
|
coefficient: 0.1
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 10
|
size: Small
|
||||||
- type: Armor
|
- type: Armor
|
||||||
modifiers:
|
modifiers:
|
||||||
coefficients:
|
coefficients:
|
||||||
|
|||||||
@@ -8,6 +8,8 @@
|
|||||||
- FEET
|
- FEET
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
state: icon
|
state: icon
|
||||||
|
- type: Item
|
||||||
|
size: Normal
|
||||||
- type: Food
|
- type: Food
|
||||||
requiresSpecialDigestion: true
|
requiresSpecialDigestion: true
|
||||||
- type: SolutionContainerManager
|
- type: SolutionContainerManager
|
||||||
@@ -39,7 +41,8 @@
|
|||||||
id: ClothingShoesStorageBase
|
id: ClothingShoesStorageBase
|
||||||
components:
|
components:
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 10
|
maxSlots: 1
|
||||||
|
maxItemSize: Normal
|
||||||
- type: ContainerContainer
|
- type: ContainerContainer
|
||||||
containers:
|
containers:
|
||||||
storagebase: !type:Container
|
storagebase: !type:Container
|
||||||
|
|||||||
@@ -181,7 +181,7 @@
|
|||||||
- state: equipped-FEET
|
- state: equipped-FEET
|
||||||
offset: "0, -0.02"
|
offset: "0, -0.02"
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 10
|
size: Small
|
||||||
sprite: Clothing/Shoes/Specific/large_clown.rsi
|
sprite: Clothing/Shoes/Specific/large_clown.rsi
|
||||||
- type: ClothingSpeedModifier
|
- type: ClothingSpeedModifier
|
||||||
walkModifier: 0.85
|
walkModifier: 0.85
|
||||||
|
|||||||
@@ -3,6 +3,8 @@
|
|||||||
parent: BaseItem
|
parent: BaseItem
|
||||||
id: Clothing
|
id: Clothing
|
||||||
components:
|
components:
|
||||||
|
- type: Item
|
||||||
|
size: Normal
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
|
|||||||
@@ -101,7 +101,7 @@
|
|||||||
types:
|
types:
|
||||||
Blunt: 20000
|
Blunt: 20000
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 1
|
size: Tiny
|
||||||
sprite: Objects/Weapons/Melee/debug.rsi
|
sprite: Objects/Weapons/Melee/debug.rsi
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
|
|||||||
@@ -959,7 +959,7 @@
|
|||||||
- map: ["enum.DamageStateVisualLayers.Base"]
|
- map: ["enum.DamageStateVisualLayers.Base"]
|
||||||
state: mouse-0
|
state: mouse-0
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 5
|
size: Tiny
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
quickEquip: false
|
quickEquip: false
|
||||||
sprite: Mobs/Animals/mouse.rsi
|
sprite: Mobs/Animals/mouse.rsi
|
||||||
@@ -1425,7 +1425,7 @@
|
|||||||
groups:
|
groups:
|
||||||
Brute: 5
|
Brute: 5
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 80
|
size: Normal
|
||||||
- type: OnUseTimerTrigger
|
- type: OnUseTimerTrigger
|
||||||
delay: 10
|
delay: 10
|
||||||
beepSound:
|
beepSound:
|
||||||
@@ -2330,7 +2330,7 @@
|
|||||||
- map: ["enum.DamageStateVisualLayers.Base"]
|
- map: ["enum.DamageStateVisualLayers.Base"]
|
||||||
state: hamster-0
|
state: hamster-0
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 5
|
size: Tiny
|
||||||
- type: Physics
|
- type: Physics
|
||||||
- type: Fixtures
|
- type: Fixtures
|
||||||
fixtures:
|
fixtures:
|
||||||
|
|||||||
@@ -172,7 +172,8 @@
|
|||||||
graph: SupplyBot
|
graph: SupplyBot
|
||||||
node: bot
|
node: bot
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 250
|
maxItemSize: Large
|
||||||
|
maxTotalWeight: 40
|
||||||
- type: UserInterface
|
- type: UserInterface
|
||||||
interfaces:
|
interfaces:
|
||||||
- key: enum.StorageUiKey.Key
|
- key: enum.StorageUiKey.Key
|
||||||
|
|||||||
@@ -370,9 +370,9 @@
|
|||||||
map: ["6pack6"]
|
map: ["6pack6"]
|
||||||
visible: false
|
visible: false
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 6
|
size: Normal
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 30
|
maxSlots: 6
|
||||||
whitelist:
|
whitelist:
|
||||||
tags:
|
tags:
|
||||||
- Cola
|
- Cola
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
abstract: true
|
abstract: true
|
||||||
components:
|
components:
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 1
|
size: Tiny
|
||||||
- type: FlavorProfile
|
- type: FlavorProfile
|
||||||
flavors:
|
flavors:
|
||||||
- bread
|
- bread
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
- ReagentId: Vitamin
|
- ReagentId: Vitamin
|
||||||
Quantity: 5
|
Quantity: 5
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 25
|
size: Normal
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: FoodCakeBase
|
parent: FoodCakeBase
|
||||||
@@ -43,7 +43,7 @@
|
|||||||
- ReagentId: Vitamin
|
- ReagentId: Vitamin
|
||||||
Quantity: 1
|
Quantity: 1
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 5
|
size: Tiny
|
||||||
|
|
||||||
# Custom Cake Example
|
# Custom Cake Example
|
||||||
|
|
||||||
@@ -574,7 +574,7 @@
|
|||||||
- type: Food
|
- type: Food
|
||||||
transferAmount: 12
|
transferAmount: 12
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 40
|
size: Normal
|
||||||
- type: PointLight
|
- type: PointLight
|
||||||
color: "#FFFF00"
|
color: "#FFFF00"
|
||||||
radius: 2
|
radius: 2
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
- ReagentId: Nutriment
|
- ReagentId: Nutriment
|
||||||
Quantity: 3
|
Quantity: 3
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 1
|
size: Tiny
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
- DonkPocket
|
- DonkPocket
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
Quantity: 3
|
Quantity: 3
|
||||||
- type: Item
|
- type: Item
|
||||||
sprite: Objects/Consumable/Food/Baked/donut.rsi
|
sprite: Objects/Consumable/Food/Baked/donut.rsi
|
||||||
size: 1
|
size: Tiny
|
||||||
# Tastes like donut.
|
# Tastes like donut.
|
||||||
|
|
||||||
# The sprinkles are now an overlay, so you can put them on any donut! If we really
|
# The sprinkles are now an overlay, so you can put them on any donut! If we really
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
- ReagentId: Nutriment
|
- ReagentId: Nutriment
|
||||||
Quantity: 5
|
Quantity: 5
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 1
|
size: Tiny
|
||||||
|
|
||||||
# Muffins/Buns
|
# Muffins/Buns
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
- type: SliceableFood
|
- type: SliceableFood
|
||||||
count: 8
|
count: 8
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 8
|
size: Normal
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
- Pizza
|
- Pizza
|
||||||
@@ -53,7 +53,7 @@
|
|||||||
- ReagentId: Vitamin
|
- ReagentId: Vitamin
|
||||||
Quantity: 0.8
|
Quantity: 0.8
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 1
|
size: Tiny
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
- Pizza
|
- Pizza
|
||||||
|
|||||||
@@ -38,13 +38,13 @@
|
|||||||
map: ["pink-box6"]
|
map: ["pink-box6"]
|
||||||
visible: false
|
visible: false
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 6
|
maxSlots: 6
|
||||||
whitelist:
|
whitelist:
|
||||||
tags:
|
tags:
|
||||||
- Donut
|
- Donut
|
||||||
- type: Item
|
- type: Item
|
||||||
sprite: Objects/Consumable/Food/Baked/donut.rsi
|
sprite: Objects/Consumable/Food/Baked/donut.rsi
|
||||||
size: 6
|
size: Small
|
||||||
heldPrefix: box
|
heldPrefix: box
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
@@ -118,13 +118,13 @@
|
|||||||
map: ["box12"]
|
map: ["box12"]
|
||||||
visible: false
|
visible: false
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 12
|
maxSlots: 12
|
||||||
whitelist:
|
whitelist:
|
||||||
tags:
|
tags:
|
||||||
- Egg
|
- Egg
|
||||||
- type: Item
|
- type: Item
|
||||||
sprite: Objects/Consumable/Food/egg.rsi
|
sprite: Objects/Consumable/Food/egg.rsi
|
||||||
size: 12
|
size: Small
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: FoodEgg
|
- id: FoodEgg
|
||||||
@@ -206,7 +206,8 @@
|
|||||||
map: ["enum.StorageVisualLayers.Door"]
|
map: ["enum.StorageVisualLayers.Door"]
|
||||||
# TODO make these entitystorage again + placeablesurface after entity storage ECS gets merged.
|
# TODO make these entitystorage again + placeablesurface after entity storage ECS gets merged.
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 8
|
maxSlots: 1
|
||||||
|
maxItemSize: Normal
|
||||||
whitelist:
|
whitelist:
|
||||||
tags:
|
tags:
|
||||||
- Pizza
|
- Pizza
|
||||||
@@ -296,10 +297,10 @@
|
|||||||
map: ["box6"]
|
map: ["box6"]
|
||||||
visible: false
|
visible: false
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 6
|
maxSlots: 6
|
||||||
- type: Item
|
- type: Item
|
||||||
sprite: Objects/Consumable/Food/Baked/nuggets.rsi
|
sprite: Objects/Consumable/Food/Baked/nuggets.rsi
|
||||||
size: 6
|
size: Small
|
||||||
heldPrefix: box
|
heldPrefix: box
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
@@ -330,13 +331,13 @@
|
|||||||
sprite: Objects/Consumable/Food/Baked/donkpocket.rsi
|
sprite: Objects/Consumable/Food/Baked/donkpocket.rsi
|
||||||
state: box
|
state: box
|
||||||
- type: Storage
|
- type: Storage
|
||||||
|
maxTotalWeight: 12
|
||||||
whitelist:
|
whitelist:
|
||||||
tags:
|
tags:
|
||||||
- DonkPocket
|
- DonkPocket
|
||||||
capacity: 6
|
|
||||||
- type: Item
|
- type: Item
|
||||||
sprite: Objects/Consumable/Food/Baked/donkpocket.rsi
|
sprite: Objects/Consumable/Food/Baked/donkpocket.rsi
|
||||||
size: 6
|
size: Small
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: FoodDonkpocket
|
- id: FoodDonkpocket
|
||||||
@@ -458,8 +459,6 @@
|
|||||||
- type: Item
|
- type: Item
|
||||||
sprite: Objects/Storage/Happyhonk/clown.rsi
|
sprite: Objects/Storage/Happyhonk/clown.rsi
|
||||||
heldPrefix: box
|
heldPrefix: box
|
||||||
- type: Storage
|
|
||||||
capacity: 30
|
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
- Trash
|
- Trash
|
||||||
@@ -583,10 +582,8 @@
|
|||||||
suffix: Toy Unsafe, Snacks
|
suffix: Toy Unsafe, Snacks
|
||||||
name: syndicate snack box
|
name: syndicate snack box
|
||||||
components:
|
components:
|
||||||
- type: Item
|
|
||||||
size: 64
|
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 64 # need more room for goodies
|
maxSlots: 9
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
# toy
|
# toy
|
||||||
|
|||||||
@@ -37,7 +37,7 @@
|
|||||||
- type: Item
|
- type: Item
|
||||||
sprite: Objects/Consumable/Food/snacks.rsi
|
sprite: Objects/Consumable/Food/snacks.rsi
|
||||||
heldPrefix: packet
|
heldPrefix: packet
|
||||||
size: 3
|
size: Tiny
|
||||||
- type: DamageOnLand
|
- type: DamageOnLand
|
||||||
damage:
|
damage:
|
||||||
types:
|
types:
|
||||||
@@ -63,7 +63,7 @@
|
|||||||
- type: Item
|
- type: Item
|
||||||
sprite: Objects/Consumable/Food/snacks.rsi
|
sprite: Objects/Consumable/Food/snacks.rsi
|
||||||
heldPrefix: packet
|
heldPrefix: packet
|
||||||
size: 3
|
size: Tiny
|
||||||
- type: PhysicalComposition
|
- type: PhysicalComposition
|
||||||
materialComposition:
|
materialComposition:
|
||||||
Steel: 100
|
Steel: 100
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
sprite: Objects/Consumable/Food/egg.rsi
|
sprite: Objects/Consumable/Food/egg.rsi
|
||||||
- type: Item
|
- type: Item
|
||||||
sprite: Objects/Consumable/Food/egg.rsi
|
sprite: Objects/Consumable/Food/egg.rsi
|
||||||
size: 1
|
size: Tiny
|
||||||
- type: SolutionContainerManager
|
- type: SolutionContainerManager
|
||||||
solutions:
|
solutions:
|
||||||
food:
|
food:
|
||||||
@@ -69,7 +69,7 @@
|
|||||||
sprite: Objects/Consumable/Food/egg.rsi
|
sprite: Objects/Consumable/Food/egg.rsi
|
||||||
state: eggshells
|
state: eggshells
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 1
|
size: Tiny
|
||||||
- type: SolutionContainerManager
|
- type: SolutionContainerManager
|
||||||
solutions:
|
solutions:
|
||||||
food:
|
food:
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
- ReagentId: Fat
|
- ReagentId: Fat
|
||||||
Quantity: 5
|
Quantity: 5
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 5
|
size: Tiny
|
||||||
- type: Fixtures
|
- type: Fixtures
|
||||||
fixtures:
|
fixtures:
|
||||||
fix1:
|
fix1:
|
||||||
|
|||||||
@@ -136,7 +136,7 @@
|
|||||||
- type: Sprite
|
- type: Sprite
|
||||||
sprite: Objects/Specific/Hydroponics/nettle.rsi
|
sprite: Objects/Specific/Hydroponics/nettle.rsi
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 10
|
size: Small
|
||||||
sprite: Objects/Specific/Hydroponics/nettle.rsi
|
sprite: Objects/Specific/Hydroponics/nettle.rsi
|
||||||
- type: MeleeWeapon
|
- type: MeleeWeapon
|
||||||
damage:
|
damage:
|
||||||
@@ -166,7 +166,7 @@
|
|||||||
- type: Sprite
|
- type: Sprite
|
||||||
sprite: Objects/Specific/Hydroponics/death_nettle.rsi
|
sprite: Objects/Specific/Hydroponics/death_nettle.rsi
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 10
|
size: Small
|
||||||
sprite: Objects/Specific/Hydroponics/death_nettle.rsi
|
sprite: Objects/Specific/Hydroponics/death_nettle.rsi
|
||||||
- type: MeleeWeapon
|
- type: MeleeWeapon
|
||||||
damage:
|
damage:
|
||||||
@@ -836,7 +836,7 @@
|
|||||||
sprite: Objects/Specific/Hydroponics/corn.rsi
|
sprite: Objects/Specific/Hydroponics/corn.rsi
|
||||||
state: cob
|
state: cob
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 1
|
size: Tiny
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
- Trash
|
- Trash
|
||||||
@@ -1365,7 +1365,7 @@
|
|||||||
description: Round green object that you can slice and eat.
|
description: Round green object that you can slice and eat.
|
||||||
components:
|
components:
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 10
|
size: Small
|
||||||
- type: FlavorProfile
|
- type: FlavorProfile
|
||||||
flavors:
|
flavors:
|
||||||
- watermelon
|
- watermelon
|
||||||
@@ -1427,7 +1427,7 @@
|
|||||||
description: Juicy green and red slice.
|
description: Juicy green and red slice.
|
||||||
components:
|
components:
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 2
|
size: Tiny
|
||||||
- type: FlavorProfile
|
- type: FlavorProfile
|
||||||
flavors:
|
flavors:
|
||||||
- watermelon
|
- watermelon
|
||||||
@@ -1573,7 +1573,7 @@
|
|||||||
description: A large, orange... berry. Seriously.
|
description: A large, orange... berry. Seriously.
|
||||||
components:
|
components:
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 10
|
size: Small
|
||||||
- type: FlavorProfile
|
- type: FlavorProfile
|
||||||
flavors:
|
flavors:
|
||||||
- pumpkin
|
- pumpkin
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
- ReagentId: Nutriment
|
- ReagentId: Nutriment
|
||||||
Quantity: 8
|
Quantity: 8
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 5
|
size: Small
|
||||||
|
|
||||||
# Kebabs
|
# Kebabs
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
- type: Item
|
- type: Item
|
||||||
sprite: Objects/Consumable/Food/snacks.rsi
|
sprite: Objects/Consumable/Food/snacks.rsi
|
||||||
heldPrefix: packet
|
heldPrefix: packet
|
||||||
size: 3
|
size: Tiny
|
||||||
# Snacks
|
# Snacks
|
||||||
|
|
||||||
# "Snacks" means food in a packet. Down the line this stuff can have multiple
|
# "Snacks" means food in a packet. Down the line this stuff can have multiple
|
||||||
@@ -101,7 +101,7 @@
|
|||||||
state: chocolatebar
|
state: chocolatebar
|
||||||
- type: Item
|
- type: Item
|
||||||
heldPrefix: chocolatebar
|
heldPrefix: chocolatebar
|
||||||
size: 3
|
size: Tiny
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
- FoodSnack
|
- FoodSnack
|
||||||
@@ -346,7 +346,7 @@
|
|||||||
- type: Item
|
- type: Item
|
||||||
sprite: Objects/Consumable/Food/snacks.rsi
|
sprite: Objects/Consumable/Food/snacks.rsi
|
||||||
heldPrefix: packet
|
heldPrefix: packet
|
||||||
size: 1
|
size: Tiny
|
||||||
- type: Food
|
- type: Food
|
||||||
trash: FoodCookieFortune
|
trash: FoodCookieFortune
|
||||||
|
|
||||||
@@ -357,7 +357,7 @@
|
|||||||
description: A carefully synthesized brick designed to contain the highest ratio of nutriment to volume. Tastes like shit.
|
description: A carefully synthesized brick designed to contain the highest ratio of nutriment to volume. Tastes like shit.
|
||||||
components:
|
components:
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 10
|
size: Small
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
- FoodSnack
|
- FoodSnack
|
||||||
@@ -381,7 +381,7 @@
|
|||||||
flavors:
|
flavors:
|
||||||
- nutribrick
|
- nutribrick
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 10
|
size: Small
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
state: nutribrick-open
|
state: nutribrick-open
|
||||||
- type: Food
|
- type: Food
|
||||||
|
|||||||
@@ -10,11 +10,9 @@
|
|||||||
- state: closed
|
- state: closed
|
||||||
- state: open
|
- state: open
|
||||||
map: ["openLayer"]
|
map: ["openLayer"]
|
||||||
- type: Storage
|
|
||||||
capacity: 36
|
|
||||||
- type: Item
|
- type: Item
|
||||||
sprite: Objects/Consumable/Smokeables/Cigarettes/Cartons/green.rsi
|
sprite: Objects/Consumable/Smokeables/Cigarettes/Cartons/green.rsi
|
||||||
size: 36
|
size: Normal
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: CigPackGreen
|
- id: CigPackGreen
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
slots: [ mask ]
|
slots: [ mask ]
|
||||||
equippedPrefix: unlit
|
equippedPrefix: unlit
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 1
|
size: Tiny
|
||||||
- type: Construction
|
- type: Construction
|
||||||
graph: smokeableCigarette
|
graph: smokeableCigarette
|
||||||
node: cigarette
|
node: cigarette
|
||||||
@@ -41,7 +41,7 @@
|
|||||||
slots: [ mask ]
|
slots: [ mask ]
|
||||||
equippedPrefix: unlit
|
equippedPrefix: unlit
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 1
|
size: Tiny
|
||||||
- type: Construction
|
- type: Construction
|
||||||
graph: smokeableCigarette
|
graph: smokeableCigarette
|
||||||
node: cigarette
|
node: cigarette
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
slots: [ mask ]
|
slots: [ mask ]
|
||||||
equippedPrefix: unlit
|
equippedPrefix: unlit
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 1
|
size: Tiny
|
||||||
- type: Construction
|
- type: Construction
|
||||||
graph: smokeableJoint
|
graph: smokeableJoint
|
||||||
node: joint
|
node: joint
|
||||||
@@ -48,7 +48,7 @@
|
|||||||
slots: [ mask ]
|
slots: [ mask ]
|
||||||
equippedPrefix: unlit
|
equippedPrefix: unlit
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 1
|
size: Tiny
|
||||||
- type: Construction
|
- type: Construction
|
||||||
graph: smokeableBlunt
|
graph: smokeableBlunt
|
||||||
node: blunt
|
node: blunt
|
||||||
|
|||||||
@@ -43,9 +43,9 @@
|
|||||||
Steel: 50
|
Steel: 50
|
||||||
- type: SpaceGarbage
|
- type: SpaceGarbage
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 5
|
maxSlots: 5
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 5
|
size: Small
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: Cigarette
|
- id: Cigarette
|
||||||
@@ -108,9 +108,10 @@
|
|||||||
Steel: 50
|
Steel: 50
|
||||||
- type: SpaceGarbage
|
- type: SpaceGarbage
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 10
|
maxSlots: 10
|
||||||
|
maxTotalWeight: 20
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 10
|
size: Small
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: CigaretteRandom
|
- id: CigaretteRandom
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
tags:
|
tags:
|
||||||
- RollingPaper
|
- RollingPaper
|
||||||
- CigFilter
|
- CigFilter
|
||||||
capacity: 20
|
maxSlots: 20
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: PaperRolling
|
- id: PaperRolling
|
||||||
@@ -31,7 +31,6 @@
|
|||||||
tags:
|
tags:
|
||||||
- RollingPaper
|
- RollingPaper
|
||||||
- CigFilter
|
- CigFilter
|
||||||
capacity: 32
|
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: PaperRolling
|
- id: PaperRolling
|
||||||
@@ -54,7 +53,7 @@
|
|||||||
state: cigpaper
|
state: cigpaper
|
||||||
- type: Item
|
- type: Item
|
||||||
sprite: Objects/Consumable/Smokeables/Cigarettes/paper.rsi
|
sprite: Objects/Consumable/Smokeables/Cigarettes/paper.rsi
|
||||||
size: 5
|
size: Tiny
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
- RollingPaper
|
- RollingPaper
|
||||||
@@ -68,8 +67,6 @@
|
|||||||
components:
|
components:
|
||||||
- type: Stack
|
- type: Stack
|
||||||
count: 1
|
count: 1
|
||||||
- type: Item
|
|
||||||
size: 1
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: CigaretteFilter
|
id: CigaretteFilter
|
||||||
@@ -86,7 +83,7 @@
|
|||||||
state: cigfilter
|
state: cigfilter
|
||||||
- type: Item
|
- type: Item
|
||||||
sprite: Objects/Consumable/Smokeables/Cigarettes/paper.rsi
|
sprite: Objects/Consumable/Smokeables/Cigarettes/paper.rsi
|
||||||
size: 10
|
size: Tiny
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
- CigFilter
|
- CigFilter
|
||||||
@@ -99,5 +96,3 @@
|
|||||||
components:
|
components:
|
||||||
- type: Stack
|
- type: Stack
|
||||||
count: 1
|
count: 1
|
||||||
- type: Item
|
|
||||||
size: 2
|
|
||||||
|
|||||||
@@ -35,10 +35,10 @@
|
|||||||
map: ["cigar8"]
|
map: ["cigar8"]
|
||||||
visible: false
|
visible: false
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 8
|
maxSlots: 8
|
||||||
- type: Item
|
- type: Item
|
||||||
sprite: Objects/Consumable/Smokeables/Cigars/case.rsi
|
sprite: Objects/Consumable/Smokeables/Cigars/case.rsi
|
||||||
size: 8
|
size: Small
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- id: Cigar
|
- id: Cigar
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
slots: [ mask ]
|
slots: [ mask ]
|
||||||
equippedPrefix: unlit
|
equippedPrefix: unlit
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 1
|
size: Tiny
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: CigarSpent
|
id: CigarSpent
|
||||||
@@ -49,7 +49,7 @@
|
|||||||
slots: [ mask ]
|
slots: [ mask ]
|
||||||
equippedPrefix: unlit
|
equippedPrefix: unlit
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 1
|
size: Tiny
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: CigarGoldSpent
|
id: CigarGoldSpent
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
slots: [ mask ]
|
slots: [ mask ]
|
||||||
equippedPrefix: unlit
|
equippedPrefix: unlit
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 3
|
size: Tiny
|
||||||
sprite: Objects/Consumable/Smokeables/Pipes/pipe.rsi
|
sprite: Objects/Consumable/Smokeables/Pipes/pipe.rsi
|
||||||
- type: Appearance
|
- type: Appearance
|
||||||
- type: BurnStateVisuals
|
- type: BurnStateVisuals
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
sprite: Objects/Specific/Hydroponics/pumpkin.rsi
|
sprite: Objects/Specific/Hydroponics/pumpkin.rsi
|
||||||
state: carved
|
state: carved
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 10
|
size: Normal
|
||||||
- type: Construction
|
- type: Construction
|
||||||
graph: PumpkinAddLight
|
graph: PumpkinAddLight
|
||||||
node: start
|
node: start
|
||||||
|
|||||||
@@ -9,6 +9,6 @@
|
|||||||
layers:
|
layers:
|
||||||
- state: icon
|
- state: icon
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 1001
|
size: Huge
|
||||||
- type: StaticPrice
|
- type: StaticPrice
|
||||||
price: 0
|
price: 0
|
||||||
|
|||||||
@@ -15,9 +15,7 @@
|
|||||||
suffix: Empty
|
suffix: Empty
|
||||||
components:
|
components:
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 30
|
size: Normal
|
||||||
- type: Storage
|
|
||||||
capacity: 30
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: PresentRandomUnsafe
|
id: PresentRandomUnsafe
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
sprite: Objects/Devices/timer.rsi
|
sprite: Objects/Devices/timer.rsi
|
||||||
state: timer
|
state: timer
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 5
|
size: Small
|
||||||
- type: PayloadTrigger
|
- type: PayloadTrigger
|
||||||
components:
|
components:
|
||||||
- type: OnUseTimerTrigger
|
- type: OnUseTimerTrigger
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
sprite: Objects/Misc/module.rsi
|
sprite: Objects/Misc/module.rsi
|
||||||
state: abductor_mod
|
state: abductor_mod
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 10
|
size: Small
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
- WeaponPistolCHIMPUpgradeKit
|
- WeaponPistolCHIMPUpgradeKit
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
sprite: Objects/Devices/forensic_scanner.rsi
|
sprite: Objects/Devices/forensic_scanner.rsi
|
||||||
state: forensicnew
|
state: forensicnew
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 5
|
size: Small
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
sprite: Objects/Devices/forensic_scanner.rsi
|
sprite: Objects/Devices/forensic_scanner.rsi
|
||||||
quickEquip: false
|
quickEquip: false
|
||||||
|
|||||||
@@ -37,7 +37,7 @@
|
|||||||
components:
|
components:
|
||||||
- IdCard
|
- IdCard
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 10
|
size: Small
|
||||||
- type: ContainerContainer
|
- type: ContainerContainer
|
||||||
containers:
|
containers:
|
||||||
PDA-id: !type:ContainerSlot {}
|
PDA-id: !type:ContainerSlot {}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
- key: enum.InstrumentUiKey.Key
|
- key: enum.InstrumentUiKey.Key
|
||||||
type: InstrumentBoundUserInterface
|
type: InstrumentBoundUserInterface
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 24
|
size: Normal
|
||||||
- type: StaticPrice
|
- type: StaticPrice
|
||||||
price: 200
|
price: 200
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
sprite: Objects/Fun/Instruments/trumpet.rsi
|
sprite: Objects/Fun/Instruments/trumpet.rsi
|
||||||
state: icon
|
state: icon
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 24
|
size: Normal
|
||||||
sprite: Objects/Fun/Instruments/trumpet.rsi
|
sprite: Objects/Fun/Instruments/trumpet.rsi
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
@@ -32,7 +32,7 @@
|
|||||||
sprite: Objects/Fun/Instruments/trombone.rsi
|
sprite: Objects/Fun/Instruments/trombone.rsi
|
||||||
state: icon
|
state: icon
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 48
|
size: Normal
|
||||||
sprite: Objects/Fun/Instruments/trombone.rsi
|
sprite: Objects/Fun/Instruments/trombone.rsi
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
@@ -50,7 +50,7 @@
|
|||||||
sprite: Objects/Fun/Instruments/frenchhorn.rsi
|
sprite: Objects/Fun/Instruments/frenchhorn.rsi
|
||||||
state: icon
|
state: icon
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 48
|
size: Normal
|
||||||
sprite: Objects/Fun/Instruments/frenchhorn.rsi
|
sprite: Objects/Fun/Instruments/frenchhorn.rsi
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
@@ -69,7 +69,7 @@
|
|||||||
sprite: Objects/Fun/Instruments/euphonium.rsi
|
sprite: Objects/Fun/Instruments/euphonium.rsi
|
||||||
state: icon
|
state: icon
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 48
|
size: Normal
|
||||||
sprite: Objects/Fun/Instruments/euphonium.rsi
|
sprite: Objects/Fun/Instruments/euphonium.rsi
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
- type: Instrument
|
- type: Instrument
|
||||||
program: 121
|
program: 121
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 10
|
size: Small
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: BaseHandheldInstrument
|
parent: BaseHandheldInstrument
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
- type: Instrument
|
- type: Instrument
|
||||||
program: 122
|
program: 122
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 10
|
size: Small
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: BaseHandheldInstrument
|
parent: BaseHandheldInstrument
|
||||||
@@ -38,7 +38,7 @@
|
|||||||
- type: Instrument
|
- type: Instrument
|
||||||
program: 123
|
program: 123
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 5
|
size: Tiny
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: BaseHandheldInstrument
|
parent: BaseHandheldInstrument
|
||||||
@@ -55,7 +55,7 @@
|
|||||||
- type: Instrument
|
- type: Instrument
|
||||||
program: 124
|
program: 124
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 10
|
size: Small
|
||||||
- type: Prayable
|
- type: Prayable
|
||||||
sentMessage: prayer-popup-notify-centcom-sent
|
sentMessage: prayer-popup-notify-centcom-sent
|
||||||
notifiactionPrefix: prayer-chat-notify-centcom
|
notifiactionPrefix: prayer-chat-notify-centcom
|
||||||
@@ -74,7 +74,7 @@
|
|||||||
- type: Instrument
|
- type: Instrument
|
||||||
program: 125
|
program: 125
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 10
|
size: Small
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: BaseHandheldInstrument
|
parent: BaseHandheldInstrument
|
||||||
@@ -88,7 +88,7 @@
|
|||||||
- type: Instrument
|
- type: Instrument
|
||||||
program: 126
|
program: 126
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 5
|
size: Tiny
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: BaseHandheldInstrument
|
parent: BaseHandheldInstrument
|
||||||
@@ -102,7 +102,7 @@
|
|||||||
sprite: Objects/Fun/Instruments/gunpet.rsi
|
sprite: Objects/Fun/Instruments/gunpet.rsi
|
||||||
state: icon
|
state: icon
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 15
|
size: Normal
|
||||||
sprite: Objects/Fun/Instruments/gunpet.rsi
|
sprite: Objects/Fun/Instruments/gunpet.rsi
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
@@ -125,7 +125,7 @@
|
|||||||
- BrassInstrument #Go figure.
|
- BrassInstrument #Go figure.
|
||||||
- type: Item
|
- type: Item
|
||||||
sprite: Objects/Fun/Instruments/bike_horn.rsi
|
sprite: Objects/Fun/Instruments/bike_horn.rsi
|
||||||
size: 10
|
size: Small
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
sprite: Objects/Fun/Instruments/bike_horn.rsi
|
sprite: Objects/Fun/Instruments/bike_horn.rsi
|
||||||
slots: [Belt]
|
slots: [Belt]
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
sprite: Objects/Fun/Instruments/glockenspiel.rsi
|
sprite: Objects/Fun/Instruments/glockenspiel.rsi
|
||||||
state: icon
|
state: icon
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 24
|
size: Normal
|
||||||
sprite: Objects/Fun/Instruments/glockenspiel.rsi
|
sprite: Objects/Fun/Instruments/glockenspiel.rsi
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
@@ -58,7 +58,7 @@
|
|||||||
sprite: Objects/Fun/Instruments/microphone.rsi
|
sprite: Objects/Fun/Instruments/microphone.rsi
|
||||||
state: icon
|
state: icon
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 10
|
size: Small
|
||||||
sprite: Objects/Fun/Instruments/microphone.rsi
|
sprite: Objects/Fun/Instruments/microphone.rsi
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
@@ -76,7 +76,7 @@
|
|||||||
sprite: Objects/Fun/Instruments/h_synthesizer.rsi
|
sprite: Objects/Fun/Instruments/h_synthesizer.rsi
|
||||||
state: icon
|
state: icon
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 24
|
size: Normal
|
||||||
sprite: Objects/Fun/Instruments/h_synthesizer.rsi
|
sprite: Objects/Fun/Instruments/h_synthesizer.rsi
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
@@ -135,5 +135,5 @@
|
|||||||
sprite: Objects/Fun/Instruments/h_synthesizer.rsi
|
sprite: Objects/Fun/Instruments/h_synthesizer.rsi
|
||||||
state: icon
|
state: icon
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 24
|
size: Normal
|
||||||
sprite: Objects/Fun/Instruments/h_synthesizer.rsi
|
sprite: Objects/Fun/Instruments/h_synthesizer.rsi
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
sprite: Objects/Fun/Instruments/eguitar.rsi
|
sprite: Objects/Fun/Instruments/eguitar.rsi
|
||||||
state: icon
|
state: icon
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 24
|
size: Normal
|
||||||
sprite: Objects/Fun/Instruments/eguitar.rsi
|
sprite: Objects/Fun/Instruments/eguitar.rsi
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
quickEquip: false
|
quickEquip: false
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
sprite: Objects/Fun/Instruments/bassguitar.rsi
|
sprite: Objects/Fun/Instruments/bassguitar.rsi
|
||||||
state: icon
|
state: icon
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 24
|
size: Normal
|
||||||
sprite: Objects/Fun/Instruments/bassguitar.rsi
|
sprite: Objects/Fun/Instruments/bassguitar.rsi
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
quickEquip: false
|
quickEquip: false
|
||||||
@@ -72,7 +72,7 @@
|
|||||||
sprite: Objects/Fun/Instruments/rockguitar.rsi
|
sprite: Objects/Fun/Instruments/rockguitar.rsi
|
||||||
state: icon
|
state: icon
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 24
|
size: Normal
|
||||||
sprite: Objects/Fun/Instruments/rockguitar.rsi
|
sprite: Objects/Fun/Instruments/rockguitar.rsi
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
quickEquip: false
|
quickEquip: false
|
||||||
@@ -115,7 +115,7 @@
|
|||||||
- StringInstrument
|
- StringInstrument
|
||||||
- type: Item
|
- type: Item
|
||||||
sprite: Objects/Fun/Instruments/guitar.rsi
|
sprite: Objects/Fun/Instruments/guitar.rsi
|
||||||
size: 24
|
size: Normal
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
quickEquip: false
|
quickEquip: false
|
||||||
slots:
|
slots:
|
||||||
@@ -178,7 +178,7 @@
|
|||||||
sprite: Objects/Fun/Instruments/banjo.rsi
|
sprite: Objects/Fun/Instruments/banjo.rsi
|
||||||
state: icon
|
state: icon
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 24
|
size: Normal
|
||||||
sprite: Objects/Fun/Instruments/banjo.rsi
|
sprite: Objects/Fun/Instruments/banjo.rsi
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
@@ -200,7 +200,7 @@
|
|||||||
sprite: Objects/Fun/Instruments/violin.rsi
|
sprite: Objects/Fun/Instruments/violin.rsi
|
||||||
state: icon
|
state: icon
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 24
|
size: Normal
|
||||||
sprite: Objects/Fun/Instruments/violin.rsi
|
sprite: Objects/Fun/Instruments/violin.rsi
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
@@ -218,7 +218,7 @@
|
|||||||
sprite: Objects/Fun/Instruments/viola.rsi
|
sprite: Objects/Fun/Instruments/viola.rsi
|
||||||
state: icon
|
state: icon
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 24
|
size: Normal
|
||||||
sprite: Objects/Fun/Instruments/viola.rsi
|
sprite: Objects/Fun/Instruments/viola.rsi
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
@@ -236,7 +236,7 @@
|
|||||||
sprite: Objects/Fun/Instruments/cello.rsi
|
sprite: Objects/Fun/Instruments/cello.rsi
|
||||||
state: icon
|
state: icon
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 48
|
size: Normal
|
||||||
sprite: Objects/Fun/Instruments/cello.rsi
|
sprite: Objects/Fun/Instruments/cello.rsi
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
sprite: Objects/Fun/Instruments/saxophone.rsi
|
sprite: Objects/Fun/Instruments/saxophone.rsi
|
||||||
state: icon
|
state: icon
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 24
|
size: Normal
|
||||||
sprite: Objects/Fun/Instruments/saxophone.rsi
|
sprite: Objects/Fun/Instruments/saxophone.rsi
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
@@ -45,7 +45,7 @@
|
|||||||
sprite: Objects/Fun/Instruments/accordion.rsi
|
sprite: Objects/Fun/Instruments/accordion.rsi
|
||||||
state: icon
|
state: icon
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 24
|
size: Normal
|
||||||
sprite: Objects/Fun/Instruments/accordion.rsi
|
sprite: Objects/Fun/Instruments/accordion.rsi
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
@@ -62,7 +62,7 @@
|
|||||||
sprite: Objects/Fun/Instruments/harmonica.rsi
|
sprite: Objects/Fun/Instruments/harmonica.rsi
|
||||||
state: icon
|
state: icon
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 10
|
size: Small
|
||||||
sprite: Objects/Fun/Instruments/harmonica.rsi
|
sprite: Objects/Fun/Instruments/harmonica.rsi
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
@@ -80,7 +80,7 @@
|
|||||||
sprite: Objects/Fun/Instruments/clarinet.rsi
|
sprite: Objects/Fun/Instruments/clarinet.rsi
|
||||||
state: icon
|
state: icon
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 20
|
size: Normal
|
||||||
sprite: Objects/Fun/Instruments/clarinet.rsi
|
sprite: Objects/Fun/Instruments/clarinet.rsi
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
@@ -98,7 +98,7 @@
|
|||||||
sprite: Objects/Fun/Instruments/flute.rsi
|
sprite: Objects/Fun/Instruments/flute.rsi
|
||||||
state: icon
|
state: icon
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 20
|
size: Normal
|
||||||
sprite: Objects/Fun/Instruments/flute.rsi
|
sprite: Objects/Fun/Instruments/flute.rsi
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
@@ -116,7 +116,7 @@
|
|||||||
sprite: Objects/Fun/Instruments/recorder.rsi
|
sprite: Objects/Fun/Instruments/recorder.rsi
|
||||||
state: icon
|
state: icon
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 24
|
size: Normal
|
||||||
sprite: Objects/Fun/Instruments/recorder.rsi
|
sprite: Objects/Fun/Instruments/recorder.rsi
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
@@ -134,7 +134,7 @@
|
|||||||
sprite: Objects/Fun/Instruments/panflute.rsi
|
sprite: Objects/Fun/Instruments/panflute.rsi
|
||||||
state: icon
|
state: icon
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 15
|
size: Normal
|
||||||
sprite: Objects/Fun/Instruments/panflute.rsi
|
sprite: Objects/Fun/Instruments/panflute.rsi
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
@@ -153,7 +153,7 @@
|
|||||||
sprite: Objects/Fun/Instruments/ocarina.rsi
|
sprite: Objects/Fun/Instruments/ocarina.rsi
|
||||||
state: icon
|
state: icon
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 15
|
size: Normal
|
||||||
sprite: Objects/Fun/Instruments/ocarina.rsi
|
sprite: Objects/Fun/Instruments/ocarina.rsi
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
@@ -171,7 +171,7 @@
|
|||||||
sprite: Objects/Fun/Instruments/bagpipes.rsi
|
sprite: Objects/Fun/Instruments/bagpipes.rsi
|
||||||
state: icon
|
state: icon
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 48
|
size: Normal
|
||||||
sprite: Objects/Fun/Instruments/bagpipes.rsi
|
sprite: Objects/Fun/Instruments/bagpipes.rsi
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
state: icon
|
state: icon
|
||||||
- type: Item
|
- type: Item
|
||||||
sprite: Objects/Fun/bikehorn.rsi
|
sprite: Objects/Fun/bikehorn.rsi
|
||||||
size: 5
|
size: Tiny
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
sprite: Objects/Fun/bikehorn.rsi
|
sprite: Objects/Fun/bikehorn.rsi
|
||||||
slots: [Belt]
|
slots: [Belt]
|
||||||
@@ -58,7 +58,7 @@
|
|||||||
state: icon
|
state: icon
|
||||||
- type: Item
|
- type: Item
|
||||||
sprite: Objects/Fun/cluwnehorn.rsi
|
sprite: Objects/Fun/cluwnehorn.rsi
|
||||||
size: 5
|
size: Tiny
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
sprite: Objects/Fun/cluwnehorn.rsi
|
sprite: Objects/Fun/cluwnehorn.rsi
|
||||||
slots: [Belt]
|
slots: [Belt]
|
||||||
@@ -100,7 +100,7 @@
|
|||||||
state: icon
|
state: icon
|
||||||
- type: Item
|
- type: Item
|
||||||
sprite: Objects/Fun/goldbikehorn.rsi
|
sprite: Objects/Fun/goldbikehorn.rsi
|
||||||
size: 5
|
size: Tiny
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
sprite: Objects/Fun/goldbikehorn.rsi
|
sprite: Objects/Fun/goldbikehorn.rsi
|
||||||
slots: [Belt]
|
slots: [Belt]
|
||||||
@@ -119,7 +119,7 @@
|
|||||||
state: icon
|
state: icon
|
||||||
- type: Item
|
- type: Item
|
||||||
sprite: Objects/Fun/bananiumhorn.rsi
|
sprite: Objects/Fun/bananiumhorn.rsi
|
||||||
size: 5
|
size: Tiny
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
sprite: Objects/Fun/bananiumhorn.rsi
|
sprite: Objects/Fun/bananiumhorn.rsi
|
||||||
slots: [Belt]
|
slots: [Belt]
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
sprite: Objects/Fun/crayons.rsi
|
sprite: Objects/Fun/crayons.rsi
|
||||||
- type: Item
|
- type: Item
|
||||||
sprite: Objects/Fun/crayons.rsi
|
sprite: Objects/Fun/crayons.rsi
|
||||||
size: 1
|
size: Tiny
|
||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
- Write
|
- Write
|
||||||
@@ -235,10 +235,11 @@
|
|||||||
sprite: Objects/Fun/crayons.rsi
|
sprite: Objects/Fun/crayons.rsi
|
||||||
state: box
|
state: box
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 7
|
maxSlots: 7
|
||||||
|
maxTotalWeight: 7
|
||||||
- type: Item
|
- type: Item
|
||||||
sprite: Objects/Fun/crayons.rsi
|
sprite: Objects/Fun/crayons.rsi
|
||||||
size: 7
|
size: Small
|
||||||
heldPrefix: box
|
heldPrefix: box
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
|
|||||||
@@ -40,7 +40,7 @@
|
|||||||
types:
|
types:
|
||||||
Piercing: 4
|
Piercing: 4
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 2
|
size: Tiny
|
||||||
sprite: Objects/Fun/Darts/dart_red.rsi
|
sprite: Objects/Fun/Darts/dart_red.rsi
|
||||||
- type: ItemCooldown
|
- type: ItemCooldown
|
||||||
- type: SolutionContainerManager
|
- type: SolutionContainerManager
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
tags:
|
tags:
|
||||||
- Dice
|
- Dice
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 2
|
size: Tiny
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: BaseDice
|
parent: BaseDice
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user