stack cleanup and mild refactoring (#11717)
* stack cleanup * fix tests and ulong * somehow did half a commit * ulong got usmall. (it's ints now) * sussy baka cleanup * mirror's review * make da tests pass again * shadowcommander review * sloth por favor * Update StoreSystem.Ui.cs
This commit is contained in:
@@ -467,7 +467,7 @@ public sealed partial class AdminVerbSystem
|
||||
Act = () =>
|
||||
{
|
||||
// Unbounded intentionally.
|
||||
_quickDialog.OpenDialog(player, "Adjust stack", $"Amount (max {stack.MaxCount})", (int newAmount) =>
|
||||
_quickDialog.OpenDialog(player, "Adjust stack", $"Amount (max {_stackSystem.GetMaxCount(stack)})", (int newAmount) =>
|
||||
{
|
||||
_stackSystem.SetCount(args.Target, newAmount, stack);
|
||||
});
|
||||
@@ -485,7 +485,7 @@ public sealed partial class AdminVerbSystem
|
||||
IconTexture = "/Textures/Interface/AdminActions/fill-stack.png",
|
||||
Act = () =>
|
||||
{
|
||||
_stackSystem.SetCount(args.Target, stack.MaxCount, stack);
|
||||
_stackSystem.SetCount(args.Target, _stackSystem.GetMaxCount(stack), stack);
|
||||
},
|
||||
Impact = LogImpact.Medium,
|
||||
Message = Loc.GetString("admin-trick-fill-stack-description"),
|
||||
|
||||
@@ -97,7 +97,7 @@ namespace Content.Server.Cloning.Systems
|
||||
|
||||
private void OnDeconstruct(EntityUid uid, CloningPodComponent component, MachineDeconstructedEvent args)
|
||||
{
|
||||
_serverStackSystem.SpawnMultiple(_material.GetMaterialAmount(uid, "Biomass"), 100, "Biomass", Transform(uid).Coordinates);
|
||||
_serverStackSystem.SpawnMultiple(component.MaterialCloningOutput, _material.GetMaterialAmount(uid, component.RequiredMaterial), Transform(uid).Coordinates);
|
||||
}
|
||||
|
||||
internal void TransferMindToClone(Mind.Mind mind)
|
||||
@@ -149,7 +149,7 @@ namespace Content.Server.Cloning.Systems
|
||||
if (!args.IsInDetailsRange || !_powerReceiverSystem.IsPowered(uid))
|
||||
return;
|
||||
|
||||
args.PushMarkup(Loc.GetString("cloning-pod-biomass", ("number", _material.GetMaterialAmount(uid, "Biomass"))));
|
||||
args.PushMarkup(Loc.GetString("cloning-pod-biomass", ("number", _material.GetMaterialAmount(uid, component.RequiredMaterial))));
|
||||
}
|
||||
|
||||
public bool TryCloning(EntityUid uid, EntityUid bodyToClone, Mind.Mind mind, CloningPodComponent? clonePod)
|
||||
@@ -193,7 +193,7 @@ namespace Content.Server.Cloning.Systems
|
||||
cloningCost = (int) Math.Round(cloningCost * EasyModeCloningCost);
|
||||
|
||||
// biomass checks
|
||||
var biomassAmount = _material.GetMaterialAmount(uid, "Biomass");
|
||||
var biomassAmount = _material.GetMaterialAmount(uid, clonePod.RequiredMaterial);
|
||||
|
||||
if (biomassAmount < cloningCost)
|
||||
{
|
||||
@@ -202,7 +202,7 @@ namespace Content.Server.Cloning.Systems
|
||||
return false;
|
||||
}
|
||||
|
||||
_material.TryChangeMaterialAmount(uid, "Biomass", -cloningCost);
|
||||
_material.TryChangeMaterialAmount(uid, clonePod.RequiredMaterial, -cloningCost);
|
||||
clonePod.UsedBiomass = cloningCost;
|
||||
// end of biomass checks
|
||||
|
||||
@@ -319,7 +319,7 @@ namespace Content.Server.Cloning.Systems
|
||||
}
|
||||
_spillableSystem.SpillAt(uid, bloodSolution, "PuddleBlood");
|
||||
|
||||
var biomassStack = Spawn("MaterialBiomass", transform.Coordinates);
|
||||
var biomassStack = Spawn(clonePod.MaterialCloningOutput, transform.Coordinates);
|
||||
_stackSystem.SetCount(biomassStack, _robustRandom.Next(1, (int) (clonePod.UsedBiomass / 2.5)));
|
||||
|
||||
clonePod.UsedBiomass = 0;
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
using Content.Shared.Cloning;
|
||||
using Content.Shared.Construction.Prototypes;
|
||||
using Content.Shared.Materials;
|
||||
using Robust.Shared.Containers;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
|
||||
|
||||
namespace Content.Server.Cloning.Components
|
||||
@@ -25,6 +27,18 @@ namespace Content.Server.Cloning.Components
|
||||
[ViewVariables]
|
||||
public bool FailedClone = false;
|
||||
|
||||
/// <summary>
|
||||
/// The material that is used to clone entities.
|
||||
/// </summary>
|
||||
[DataField("requiredMaterial", customTypeSerializer: typeof(PrototypeIdSerializer<MaterialPrototype>)), ViewVariables(VVAccess.ReadWrite)]
|
||||
public string RequiredMaterial = "Biomass";
|
||||
|
||||
/// <summary>
|
||||
/// The entity that is spawned on machine deconstruct as well as failed cloning.
|
||||
/// </summary>
|
||||
[DataField("materialCloningOutput", customTypeSerializer: typeof(PrototypeIdSerializer<EntityPrototype>)), ViewVariables(VVAccess.ReadWrite)]
|
||||
public string MaterialCloningOutput = "MaterialBiomass";
|
||||
|
||||
/// <summary>
|
||||
/// The base amount of time it takes to clone a body
|
||||
/// </summary>
|
||||
|
||||
@@ -85,6 +85,8 @@ public sealed class MachineFrameSystem : EntitySystem
|
||||
if (TryComp<StackComponent?>(args.Used, out var stack))
|
||||
{
|
||||
var type = stack.StackTypeId;
|
||||
if (type == null)
|
||||
return;
|
||||
if (!component.MaterialRequirements.ContainsKey(type))
|
||||
return;
|
||||
|
||||
@@ -262,6 +264,8 @@ public sealed class MachineFrameSystem : EntitySystem
|
||||
{
|
||||
var type = stack.StackTypeId;
|
||||
// Check this is part of the requirements...
|
||||
if (type == null)
|
||||
continue;
|
||||
if (!component.MaterialRequirements.ContainsKey(type))
|
||||
continue;
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using Content.Shared.Storage;
|
||||
using System.Threading;
|
||||
using Content.Shared.Construction.Prototypes;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
|
||||
|
||||
namespace Content.Server.Medical.BiomassReclaimer
|
||||
@@ -35,7 +36,7 @@ namespace Content.Server.Medical.BiomassReclaimer
|
||||
/// This is calculated from the YieldPerUnitMass.
|
||||
/// </summary>
|
||||
[ViewVariables]
|
||||
public uint CurrentExpectedYield = default;
|
||||
public int CurrentExpectedYield = default;
|
||||
|
||||
/// <summary>
|
||||
/// The reagent that will be spilled while processing a mob.
|
||||
@@ -54,6 +55,12 @@ namespace Content.Server.Medical.BiomassReclaimer
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
public float YieldPerUnitMass = default;
|
||||
|
||||
/// <summary>
|
||||
/// The entity that is output by the reclaimer
|
||||
/// </summary>
|
||||
[DataField("outputEntityId", customTypeSerializer: typeof(PrototypeIdSerializer<EntityPrototype>)), ViewVariables(VVAccess.ReadWrite)]
|
||||
public string OutputEntityId = "MaterialBiomass";
|
||||
|
||||
/// <summary>
|
||||
/// The base yield per mass unit when no components are upgraded.
|
||||
/// </summary>
|
||||
|
||||
@@ -78,7 +78,7 @@ namespace Content.Server.Medical.BiomassReclaimer
|
||||
continue;
|
||||
}
|
||||
|
||||
_stackSystem.SpawnMultiple((int) reclaimer.CurrentExpectedYield, 100, "Biomass", Transform(reclaimer.Owner).Coordinates);
|
||||
_stackSystem.SpawnMultiple(reclaimer.OutputEntityId, reclaimer.CurrentExpectedYield, Transform(reclaimer.Owner).Coordinates);
|
||||
|
||||
reclaimer.BloodReagent = null;
|
||||
reclaimer.SpawnedEntities.Clear();
|
||||
@@ -234,7 +234,7 @@ namespace Content.Server.Medical.BiomassReclaimer
|
||||
component.SpawnedEntities = butcherableComponent.SpawnedEntities;
|
||||
}
|
||||
|
||||
component.CurrentExpectedYield = (uint) Math.Max(0, physics.FixturesMass * component.YieldPerUnitMass);
|
||||
component.CurrentExpectedYield = (int) Math.Max(0, physics.FixturesMass * component.YieldPerUnitMass);
|
||||
component.ProcessingTimer = physics.FixturesMass * component.ProcessingTimePerUnitMass;
|
||||
QueueDel(toProcess);
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ namespace Content.Server.Stack
|
||||
|
||||
public override void SetCount(EntityUid uid, int amount, SharedStackComponent? component = null)
|
||||
{
|
||||
if (!Resolve(uid, ref component))
|
||||
if (!Resolve(uid, ref component, false))
|
||||
return;
|
||||
|
||||
base.SetCount(uid, amount, component);
|
||||
@@ -46,6 +46,9 @@ namespace Content.Server.Stack
|
||||
if (!Resolve(uid, ref stack))
|
||||
return null;
|
||||
|
||||
if (stack.StackTypeId == null)
|
||||
return null;
|
||||
|
||||
// Get a prototype ID to spawn the new entity. Null is also valid, although it should rarely be picked...
|
||||
var prototype = _prototypeManager.TryIndex<StackPrototype>(stack.StackTypeId, out var stackType)
|
||||
? stackType.Spawn
|
||||
@@ -87,38 +90,21 @@ namespace Content.Server.Stack
|
||||
/// Say you want to spawn 97 stacks of something that has a max stack count of 30.
|
||||
/// This would spawn 3 stacks of 30 and 1 stack of 7.
|
||||
/// </summary>
|
||||
public void SpawnMultiple(int amount, int maxCountPerStack, StackPrototype prototype, EntityCoordinates spawnPosition)
|
||||
public List<EntityUid> SpawnMultiple(string entityPrototype, int amount, EntityCoordinates spawnPosition)
|
||||
{
|
||||
var proto = _prototypeManager.Index<EntityPrototype>(entityPrototype);
|
||||
proto.TryGetComponent<StackComponent>(out var stack);
|
||||
var maxCountPerStack = GetMaxCount(stack);
|
||||
var spawnedEnts = new List<EntityUid>();
|
||||
while (amount > 0)
|
||||
{
|
||||
if (amount > maxCountPerStack)
|
||||
{
|
||||
var entity = Spawn("MaterialBiomass", spawnPosition);
|
||||
var stack = Comp<StackComponent>(entity);
|
||||
|
||||
SetCount(entity, maxCountPerStack, stack);
|
||||
amount -= maxCountPerStack;
|
||||
var entity = Spawn(entityPrototype, spawnPosition);
|
||||
spawnedEnts.Add(entity);
|
||||
var countAmount = Math.Min(maxCountPerStack, amount);
|
||||
SetCount(entity, countAmount);
|
||||
amount -= countAmount;
|
||||
}
|
||||
else
|
||||
{
|
||||
var entity = Spawn("MaterialBiomass", spawnPosition);
|
||||
var stack = Comp<StackComponent>(entity);
|
||||
|
||||
SetCount(entity, amount, stack);
|
||||
amount = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void SpawnMultiple(int amount, int maxCountPerStack, string prototype, EntityCoordinates spawnPosition)
|
||||
{
|
||||
if (!_prototypeManager.TryIndex<StackPrototype>(prototype, out var stackType))
|
||||
{
|
||||
Logger.Error("Failed to index stack prototype " + prototype);
|
||||
return;
|
||||
}
|
||||
|
||||
SpawnMultiple(amount, maxCountPerStack, stackType, spawnPosition);
|
||||
return spawnedEnts;
|
||||
}
|
||||
|
||||
private void OnStackAlternativeInteract(EntityUid uid, StackComponent stack, GetVerbsEvent<AlternativeVerb> args)
|
||||
|
||||
@@ -10,9 +10,7 @@ using Content.Shared.Database;
|
||||
using Robust.Server.GameObjects;
|
||||
using System.Linq;
|
||||
using Content.Server.Stack;
|
||||
using Content.Shared.Prototypes;
|
||||
using Robust.Shared.Player;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Server.Store.Systems;
|
||||
|
||||
@@ -133,7 +131,9 @@ public sealed partial class StoreSystem : EntitySystem
|
||||
}
|
||||
//subtract the cash
|
||||
foreach (var currency in listing.Cost)
|
||||
{
|
||||
component.Balance[currency.Key] -= currency.Value;
|
||||
}
|
||||
|
||||
//spawn entity
|
||||
if (listing.ProductEntity != null)
|
||||
@@ -199,35 +199,9 @@ public sealed partial class StoreSystem : EntitySystem
|
||||
foreach (var value in sortedCashValues)
|
||||
{
|
||||
var cashId = proto.Cash[value];
|
||||
|
||||
if (!_proto.TryIndex<EntityPrototype>(cashId, out var cashProto))
|
||||
continue;
|
||||
|
||||
//how many times this subdivision fits in the amount remaining
|
||||
var amountToSpawn = (int) Math.Floor((double) (amountRemaining / value));
|
||||
if (cashProto.HasComponent<StackComponent>())
|
||||
{
|
||||
var amountToRemove = amountToSpawn; //we don't want to modify amountToSpawn, as we use it for calculations
|
||||
while (amountToRemove > 0)
|
||||
{
|
||||
var ent = Spawn(cashId, coordinates);
|
||||
if (!TryComp<StackComponent>(ent, out var stack))
|
||||
return; //you really fucked up if you got here
|
||||
|
||||
var maxAmount = Math.Min(amountToRemove, stack.MaxCount); //limit it based on max stack amount
|
||||
_stack.SetCount(ent, maxAmount, stack);
|
||||
_hands.PickupOrDrop(buyer, ent);
|
||||
amountToRemove -= maxAmount;
|
||||
}
|
||||
}
|
||||
else //please for the love of christ give your currency stack component
|
||||
{
|
||||
for (var i = 0; i < amountToSpawn; i++)
|
||||
{
|
||||
var ent = Spawn(cashId, coordinates);
|
||||
_hands.PickupOrDrop(buyer, ent);
|
||||
}
|
||||
}
|
||||
var amountToSpawn = (int) MathF.Floor((float) (amountRemaining / value));
|
||||
var ents = _stack.SpawnMultiple(cashId, amountToSpawn, coordinates);
|
||||
_hands.PickupOrDrop(buyer, ents.First());
|
||||
amountRemaining -= value * amountToSpawn;
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ using Content.Shared.Whitelist;
|
||||
using Robust.Shared.Audio;
|
||||
using Robust.Shared.GameStates;
|
||||
using Robust.Shared.Serialization;
|
||||
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Dictionary;
|
||||
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List;
|
||||
|
||||
namespace Content.Shared.Materials;
|
||||
@@ -10,7 +11,7 @@ namespace Content.Shared.Materials;
|
||||
[RegisterComponent, NetworkedComponent]
|
||||
public sealed class MaterialStorageComponent : Component
|
||||
{
|
||||
[ViewVariables]
|
||||
[DataField("storage", customTypeSerializer: typeof(PrototypeIdDictionarySerializer<int, MaterialPrototype>)), ViewVariables]
|
||||
public Dictionary<string, int> Storage { get; set; } = new();
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -166,7 +166,6 @@ public abstract class SharedMaterialStorageSystem : EntitySystem
|
||||
}
|
||||
|
||||
var multiplier = TryComp<SharedStackComponent>(toInsert, out var stackComponent) ? stackComponent.Count : 1;
|
||||
|
||||
var totalVolume = 0;
|
||||
foreach (var (mat, vol) in component.Storage)
|
||||
{
|
||||
|
||||
@@ -8,8 +8,8 @@ namespace Content.Shared.Stacks
|
||||
public abstract class SharedStackComponent : Component
|
||||
{
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
[DataField("stackType", required:true, customTypeSerializer:typeof(PrototypeIdSerializer<StackPrototype>))]
|
||||
public string StackTypeId { get; private set; } = string.Empty;
|
||||
[DataField("stackType", required: true, customTypeSerializer: typeof(PrototypeIdSerializer<StackPrototype>))]
|
||||
public string? StackTypeId { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Current stack count.
|
||||
@@ -20,10 +20,11 @@ namespace Content.Shared.Stacks
|
||||
|
||||
/// <summary>
|
||||
/// Max amount of things that can be in the stack.
|
||||
/// Overrides the max defined on the stack prototype.
|
||||
/// </summary>
|
||||
[ViewVariables(VVAccess.ReadOnly)]
|
||||
[DataField("max")]
|
||||
public int MaxCount { get; set; } = 30;
|
||||
[DataField("maxCountOverride")]
|
||||
public int? MaxCountOverride { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Set to true to not reduce the count when used.
|
||||
@@ -31,9 +32,6 @@ namespace Content.Shared.Stacks
|
||||
[DataField("unlimited")]
|
||||
[ViewVariables(VVAccess.ReadOnly)]
|
||||
public bool Unlimited { get; set; }
|
||||
|
||||
[ViewVariables]
|
||||
public int AvailableSpace => MaxCount - Count;
|
||||
}
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
|
||||
@@ -6,6 +6,7 @@ using Content.Shared.Popups;
|
||||
using JetBrains.Annotations;
|
||||
using Robust.Shared.GameStates;
|
||||
using Robust.Shared.Player;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Timing;
|
||||
|
||||
namespace Content.Shared.Stacks
|
||||
@@ -13,6 +14,7 @@ namespace Content.Shared.Stacks
|
||||
[UsedImplicitly]
|
||||
public abstract class SharedStackSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly IPrototypeManager _prototype = default!;
|
||||
[Dependency] protected readonly SharedAppearanceSystem Appearance = default!;
|
||||
[Dependency] protected readonly SharedPopupSystem PopupSystem = default!;
|
||||
[Dependency] protected readonly SharedHandsSystem HandsSystem = default!;
|
||||
@@ -72,7 +74,7 @@ namespace Content.Shared.Stacks
|
||||
case > 0:
|
||||
PopupSystem.PopupCoordinates($"+{transfered}", popupPos, Filter.Local());
|
||||
|
||||
if (recipientStack.AvailableSpace == 0)
|
||||
if (GetAvailableSpace(recipientStack) == 0)
|
||||
{
|
||||
PopupSystem.PopupCoordinates(Loc.GetString("comp-stack-becomes-full"),
|
||||
popupPos.Offset(new Vector2(0, -0.5f)), Filter.Local());
|
||||
@@ -80,7 +82,7 @@ namespace Content.Shared.Stacks
|
||||
|
||||
break;
|
||||
|
||||
case 0 when recipientStack.AvailableSpace == 0:
|
||||
case 0 when GetAvailableSpace(recipientStack) == 0:
|
||||
PopupSystem.PopupCoordinates(Loc.GetString("comp-stack-already-full"), popupPos, Filter.Local());
|
||||
break;
|
||||
}
|
||||
@@ -97,10 +99,10 @@ namespace Content.Shared.Stacks
|
||||
if (!Resolve(recipient, ref recipientStack, false) || !Resolve(donor, ref donorStack, false))
|
||||
return false;
|
||||
|
||||
if (!recipientStack.StackTypeId.Equals(donorStack.StackTypeId))
|
||||
if (recipientStack.StackTypeId == null || !recipientStack.StackTypeId.Equals(donorStack.StackTypeId))
|
||||
return false;
|
||||
|
||||
transfered = Math.Min(donorStack.Count, recipientStack.AvailableSpace);
|
||||
transfered = Math.Min(donorStack.Count, GetAvailableSpace(recipientStack));
|
||||
SetCount(donor, donorStack.Count - transfered, donorStack);
|
||||
SetCount(recipient, recipientStack.Count + transfered, recipientStack);
|
||||
return true;
|
||||
@@ -154,21 +156,14 @@ namespace Content.Shared.Stacks
|
||||
var old = component.Count;
|
||||
|
||||
// Clamp the value.
|
||||
if (amount > component.MaxCount)
|
||||
{
|
||||
amount = component.MaxCount;
|
||||
}
|
||||
|
||||
if (amount < 0)
|
||||
{
|
||||
amount = 0;
|
||||
}
|
||||
amount = Math.Min(amount, GetMaxCount(component));
|
||||
amount = Math.Max(amount, 0);
|
||||
|
||||
component.Count = amount;
|
||||
Dirty(component);
|
||||
|
||||
Appearance.SetData(uid, StackVisuals.Actual, component.Count);
|
||||
RaiseLocalEvent(uid, new StackCountChangedEvent(old, component.Count), false);
|
||||
RaiseLocalEvent(uid, new StackCountChangedEvent(old, component.Count));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -195,19 +190,83 @@ namespace Content.Shared.Stacks
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the max count for a given entity prototype
|
||||
/// </summary>
|
||||
/// <param name="entityId"></param>
|
||||
/// <returns></returns>
|
||||
[PublicAPI]
|
||||
public int GetMaxCount(string entityId)
|
||||
{
|
||||
var entProto = _prototype.Index<EntityPrototype>(entityId);
|
||||
entProto.TryGetComponent<SharedStackComponent>(out var stackComp);
|
||||
return GetMaxCount(stackComp);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the max count for a given entity
|
||||
/// </summary>
|
||||
/// <param name="uid"></param>
|
||||
/// <returns></returns>
|
||||
[PublicAPI]
|
||||
public int GetMaxCount(EntityUid uid)
|
||||
{
|
||||
return GetMaxCount(CompOrNull<SharedStackComponent>(uid));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the maximum amount that can be fit on a stack.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// <p>
|
||||
/// if there's no stackcomp, this equals 1. Otherwise, if there's a max
|
||||
/// count override, it equals that. It then checks for a max count value
|
||||
/// on the prototype. If there isn't one, it defaults to the max integer
|
||||
/// value (unlimimted).
|
||||
/// </p>
|
||||
/// </remarks>
|
||||
/// <param name="component"></param>
|
||||
/// <returns></returns>
|
||||
public int GetMaxCount(SharedStackComponent? component)
|
||||
{
|
||||
if (component == null)
|
||||
return 1;
|
||||
|
||||
if (component.MaxCountOverride != null)
|
||||
return component.MaxCountOverride.Value;
|
||||
|
||||
if (component.StackTypeId == null)
|
||||
return 1;
|
||||
|
||||
var stackProto = _prototype.Index<StackPrototype>(component.StackTypeId);
|
||||
|
||||
return stackProto.MaxCount ?? int.MaxValue;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the remaining space in a stack.
|
||||
/// </summary>
|
||||
/// <param name="component"></param>
|
||||
/// <returns></returns>
|
||||
[PublicAPI]
|
||||
public int GetAvailableSpace(SharedStackComponent component)
|
||||
{
|
||||
return GetMaxCount(component) - component.Count;
|
||||
}
|
||||
|
||||
private void OnStackStarted(EntityUid uid, SharedStackComponent component, ComponentStartup args)
|
||||
{
|
||||
if (!TryComp(uid, out AppearanceComponent? appearance))
|
||||
return;
|
||||
|
||||
Appearance.SetData(uid, StackVisuals.Actual, component.Count, appearance);
|
||||
Appearance.SetData(uid, StackVisuals.MaxCount, component.MaxCount, appearance);
|
||||
Appearance.SetData(uid, StackVisuals.MaxCount, GetMaxCount(component), appearance);
|
||||
Appearance.SetData(uid, StackVisuals.Hide, false, appearance);
|
||||
}
|
||||
|
||||
private void OnStackGetState(EntityUid uid, SharedStackComponent component, ref ComponentGetState args)
|
||||
{
|
||||
args.State = new StackComponentState(component.Count, component.MaxCount);
|
||||
args.State = new StackComponentState(component.Count, GetMaxCount(component));
|
||||
}
|
||||
|
||||
private void OnStackHandleState(EntityUid uid, SharedStackComponent component, ref ComponentHandleState args)
|
||||
@@ -215,7 +274,7 @@ namespace Content.Shared.Stacks
|
||||
if (args.Current is not StackComponentState cast)
|
||||
return;
|
||||
|
||||
component.MaxCount = cast.MaxCount;
|
||||
component.MaxCountOverride = cast.MaxCount;
|
||||
// This will change the count and call events.
|
||||
SetCount(uid, cast.Count, component);
|
||||
}
|
||||
@@ -242,12 +301,12 @@ namespace Content.Shared.Stacks
|
||||
/// <summary>
|
||||
/// The old stack count.
|
||||
/// </summary>
|
||||
public int OldCount { get; }
|
||||
public int OldCount;
|
||||
|
||||
/// <summary>
|
||||
/// The new stack count.
|
||||
/// </summary>
|
||||
public int NewCount { get; }
|
||||
public int NewCount;
|
||||
|
||||
public StackCountChangedEvent(int oldCount, int newCount)
|
||||
{
|
||||
|
||||
@@ -22,12 +22,20 @@ namespace Content.Shared.Stacks
|
||||
/// An icon that will be used to represent this stack type.
|
||||
/// </summary>
|
||||
[DataField("icon")]
|
||||
public SpriteSpecifier? Icon { get; } = null;
|
||||
public SpriteSpecifier? Icon { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The entity id that will be spawned by default from this stack.
|
||||
/// </summary>
|
||||
[DataField("spawn", required: true, customTypeSerializer:typeof(PrototypeIdSerializer<EntityPrototype>))]
|
||||
public string Spawn { get; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// The maximum amount of things that can be in a stack.
|
||||
/// Can be overriden on <see cref="SharedStackComponent"/>
|
||||
/// if null, simply has unlimited max count.
|
||||
/// </summary>
|
||||
[DataField("maxCount")]
|
||||
public int? MaxCount { get; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -131,7 +131,6 @@
|
||||
- type: Stack
|
||||
stackType: Biomass
|
||||
count: 100
|
||||
max: 100
|
||||
- type: Sprite
|
||||
sprite: /Textures/Objects/Misc/monkeycube.rsi
|
||||
state: cube
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
price: 0
|
||||
- type: Stack
|
||||
stackType: Credit
|
||||
max: 1000000 # if you somehow get this rich consider buying a second station
|
||||
count: 1
|
||||
- type: Sprite
|
||||
sprite: Objects/Economy/cash.rsi
|
||||
|
||||
@@ -26,7 +26,6 @@
|
||||
components:
|
||||
- type: Stack
|
||||
stackType: LeavesCannabisDried
|
||||
max: 5
|
||||
count: 1
|
||||
- type: SolutionContainerManager
|
||||
solutions:
|
||||
@@ -46,7 +45,6 @@
|
||||
components:
|
||||
- type: Stack
|
||||
stackType: GroundCannabis
|
||||
max: 5
|
||||
count: 1
|
||||
- type: SolutionContainerManager
|
||||
solutions:
|
||||
@@ -84,7 +82,6 @@
|
||||
components:
|
||||
- type: Stack
|
||||
stackType: LeavesTobaccoDried
|
||||
max: 5
|
||||
count: 1
|
||||
- type: SolutionContainerManager
|
||||
solutions:
|
||||
@@ -104,7 +101,6 @@
|
||||
components:
|
||||
- type: Stack
|
||||
stackType: GroundTobacco
|
||||
max: 5
|
||||
count: 1
|
||||
- type: SolutionContainerManager
|
||||
solutions:
|
||||
|
||||
@@ -36,7 +36,6 @@
|
||||
path: "/Audio/Items/Medical/ointment_end.ogg"
|
||||
- type: Stack
|
||||
stackType: Ointment
|
||||
max: 10
|
||||
count: 10
|
||||
- type: StackPrice
|
||||
price: 10
|
||||
@@ -64,7 +63,6 @@
|
||||
path: "/Audio/Items/Medical/brutepack_end.ogg"
|
||||
- type: Stack
|
||||
stackType: Brutepack
|
||||
max: 10
|
||||
count: 10
|
||||
- type: StackPrice
|
||||
price: 10
|
||||
@@ -96,7 +94,6 @@
|
||||
path: "/Audio/Items/Medical/brutepack_end.ogg"
|
||||
- type: Stack
|
||||
stackType: Gauze
|
||||
max: 10
|
||||
count: 10
|
||||
- type: StackPrice
|
||||
price: 10
|
||||
@@ -120,7 +117,6 @@
|
||||
state: cream
|
||||
- type: Stack
|
||||
stackType: AloeCream
|
||||
max: 10
|
||||
count: 10
|
||||
|
||||
# Pills
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
sprite: Objects/Specific/Syndicate/telecrystal.rsi
|
||||
- type: Stack
|
||||
count: 20
|
||||
max: 999999 # todo: add support for unlimited stacks
|
||||
stackType: Telecrystal
|
||||
- type: StackPrice
|
||||
price: 200
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
- type: Stack
|
||||
stackType: InflatableWall
|
||||
count: 10
|
||||
max: 10
|
||||
- type: Sprite
|
||||
sprite: Objects/Misc/inflatable_wall.rsi
|
||||
state: item_wall
|
||||
@@ -42,7 +41,6 @@
|
||||
- type: Stack
|
||||
stackType: InflatableDoor
|
||||
count: 4
|
||||
max: 4
|
||||
- type: Sprite
|
||||
sprite: Objects/Misc/inflatable_door.rsi
|
||||
state: item_door
|
||||
|
||||
@@ -3,22 +3,26 @@
|
||||
name: glass
|
||||
icon: /Textures/Objects/Materials/Sheets/glass.rsi/glass.png
|
||||
spawn: SheetGlass1
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: ReinforcedGlass
|
||||
name: reinforced glass
|
||||
icon: /Textures/Objects/Materials/Sheets/glass.rsi/rglass.png
|
||||
spawn: SheetRGlass1
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: PlasmaGlass
|
||||
name: plasma glass
|
||||
icon: /Textures/Objects/Materials/Sheets/glass.rsi/pglass.png
|
||||
spawn: SheetPGlass1
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: ReinforcedPlasmaGlass
|
||||
name: reinforced plasma glass
|
||||
icon: /Textures/Objects/Materials/Sheets/glass.rsi/rpglass.png
|
||||
spawn: SheetRPGlass1
|
||||
maxCount: 30
|
||||
|
||||
|
||||
@@ -3,9 +3,11 @@
|
||||
name: steel
|
||||
icon: /Textures/Objects/Materials/Sheets/metal.rsi/steel.png
|
||||
spawn: SheetSteel1
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: Plasteel
|
||||
name: plasteel
|
||||
icon: /Textures/Objects/Materials/Sheets/metal.rsi/plasteel.png
|
||||
spawn: SheetPlasteel1
|
||||
maxCount: 30
|
||||
|
||||
@@ -3,21 +3,25 @@
|
||||
name: paper
|
||||
icon: /Textures/Objects/Materials/Sheets/other.rsi/paper.png
|
||||
spawn: SheetPaper1
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: Plasma
|
||||
name: plasma
|
||||
icon: /Textures/Objects/Materials/Sheets/other.rsi/plasma.png
|
||||
spawn: SheetPlasma1
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: Plastic
|
||||
name: plastic
|
||||
icon: /Textures/Objects/Materials/Sheets/other.rsi/plastic.png
|
||||
spawn: SheetPlastic1
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: Uranium
|
||||
name: uranium
|
||||
icon: /Textures/Objects/Materials/Sheets/other.rsi/uranium.png
|
||||
spawn: SheetUranium1
|
||||
maxCount: 30
|
||||
@@ -3,9 +3,11 @@
|
||||
name: gold
|
||||
icon: "/Textures/Objects/Materials/ingots.rsi/gold.png"
|
||||
spawn: IngotGold1
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: Silver
|
||||
name: silver
|
||||
icon: "/Textures/Objects/Materials/ingots.rsi/silver.png"
|
||||
spawn: IngotSilver1
|
||||
maxCount: 30
|
||||
|
||||
@@ -3,33 +3,39 @@
|
||||
name: biomass
|
||||
icon: /Textures/Objects/Misc/monkeycube.rsi/cube.png
|
||||
spawn: MaterialBiomass1
|
||||
maxCount: 100
|
||||
|
||||
- type: stack
|
||||
id: WoodPlank
|
||||
name: wood plank
|
||||
icon: /Textures/Objects/Materials/materials.rsi/wood.png
|
||||
spawn: MaterialWoodPlank1
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: Cloth
|
||||
name: cloth
|
||||
icon: /Textures/Objects/Materials/materials.rsi/cloth.png
|
||||
spawn: MaterialCloth1
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: Durathread
|
||||
name: durathread
|
||||
icon: /Textures/Objects/Materials/materials.rsi/durathread.png
|
||||
spawn: MaterialDurathread1
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: Diamond
|
||||
name: diamond
|
||||
icon: /Textures/Objects/Materials/materials.rsi/diamond.png
|
||||
spawn: MaterialDiamond1
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: Cotton
|
||||
name: cotton
|
||||
icon: /Textures/Objects/Materials/materials.rsi/cotton.png
|
||||
spawn: MaterialCotton1
|
||||
maxCount: 30
|
||||
|
||||
@@ -3,33 +3,39 @@
|
||||
name: gold ore
|
||||
icon: /Textures/Objects/Materials/ore.rsi/gold.png
|
||||
spawn: GoldOre1
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: SteelOre
|
||||
name: steel ore
|
||||
icon: /Textures/Objects/Materials/ore.rsi/iron.png
|
||||
spawn: SteelOre1
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: PlasmaOre
|
||||
name: plasma ore
|
||||
icon: /Textures/Objects/Materials/ore.rsi/plasma.png
|
||||
spawn: PlasmaOre1
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: SilverOre
|
||||
name: silver ore
|
||||
icon: /Textures/Objects/Materials/ore.rsi/silver.png
|
||||
spawn: SilverOre1
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: SpaceQuartz
|
||||
name: space quartz
|
||||
icon: /Textures/Objects/Materials/ore.rsi/spacequartz.png
|
||||
spawn: SpaceQuartz1
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: UraniumOre
|
||||
name: uranium ore
|
||||
icon: /Textures/Objects/Materials/ore.rsi/uranium.png
|
||||
spawn: UraniumOre1
|
||||
maxCount: 30
|
||||
@@ -3,3 +3,4 @@
|
||||
name: rods
|
||||
icon: /Textures/Objects/Materials/parts.rsi/rods.png
|
||||
spawn: PartRodMetal1
|
||||
maxCount: 30
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
id: Pancake
|
||||
name: pancake
|
||||
spawn: FoodBakedPancake
|
||||
maxCount: 30
|
||||
|
||||
# Food Containers
|
||||
|
||||
@@ -12,6 +13,7 @@
|
||||
name: pizza box
|
||||
icon: Objects/Consumable/Food/Baked/pizza.rsi/box.png
|
||||
spawn: FoodBoxPizza
|
||||
maxCount: 30
|
||||
|
||||
# Smokeables
|
||||
|
||||
@@ -20,33 +22,39 @@
|
||||
name: rolling paper
|
||||
icon: /Textures/Objects/Consumable/Smokeables/Cigarettes/paper.rsi/cigpaper.png
|
||||
spawn: PaperRolling
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: CigaretteFilter
|
||||
name: cigarette filter
|
||||
icon: /Textures/Objects/Consumable/Smokeables/Cigarettes/paper.rsi/cigfilter.png
|
||||
spawn: CigaretteFilter
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: GroundTobacco
|
||||
name: ground tobacco
|
||||
icon: /Textures/Objects/Misc/reagent_fillings.rsi/powderpile.png
|
||||
spawn: GroundTobacco
|
||||
maxCount: 5
|
||||
|
||||
- type: stack
|
||||
id: GroundCannabis
|
||||
name: ground cannabis
|
||||
icon: /Textures/Objects/Misc/reagent_fillings.rsi/powderpile.png
|
||||
spawn: GroundCannabis
|
||||
maxCount: 5
|
||||
|
||||
- type: stack
|
||||
id: LeavesTobaccoDried
|
||||
name: dried tobacco leaves
|
||||
icon: /Textures/Objects/Specific/Hydroponics/tobacco.rsi/dried.png
|
||||
spawn: LeavesTobaccoDried
|
||||
maxCount: 5
|
||||
|
||||
- type: stack
|
||||
id: LeavesCannabisDried
|
||||
name: dried cannabis leaves
|
||||
icon: /Textures/Objects/Specific/Hydroponics/tobacco.rsi/dried.png
|
||||
spawn: LeavesCannabisDried
|
||||
maxCount: 5
|
||||
|
||||
@@ -2,8 +2,10 @@
|
||||
id: InflatableWall
|
||||
name: inflatable wall
|
||||
spawn: InflatableWallStack1
|
||||
maxCount: 10
|
||||
|
||||
- type: stack
|
||||
id: InflatableDoor
|
||||
name: inflatable door
|
||||
spawn: InflatableDoorStack1
|
||||
maxCount: 4
|
||||
|
||||
@@ -2,258 +2,316 @@
|
||||
id: FloorTileSteel
|
||||
name: steel tile
|
||||
spawn: FloorTileItemSteel
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileMetalDiamond
|
||||
name: steel tile
|
||||
spawn: FloorTileItemMetalDiamond
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileWood
|
||||
name: wood floor
|
||||
spawn: FloorTileItemWood
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileWhite
|
||||
name: white tile
|
||||
spawn: FloorTileItemWhite
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileDark
|
||||
name: dark tile
|
||||
spawn: FloorTileItemDark
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileTechmaint
|
||||
name: techmaint floor
|
||||
spawn: FloorTileItemTechmaint
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileFreezer
|
||||
name: freezer tile
|
||||
spawn: FloorTileItemFreezer
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileShowroom
|
||||
name: showroom tile
|
||||
spawn: FloorTileItemShowroom
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileGCircuit
|
||||
name: green-circuit floor
|
||||
spawn: FloorTileItemGCircuit
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileGold
|
||||
name: gold floor
|
||||
spawn: FloorTileItemGold
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileReinforced
|
||||
name: reinforced tile
|
||||
spawn: FloorTileItemReinforced
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileMono
|
||||
name: mono tile
|
||||
spawn: FloorTileItemMono
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileLino
|
||||
name: linoleum floor
|
||||
spawn: FloorTileItemLino
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileHydro
|
||||
name: hydro tile
|
||||
spawn: FloorTileItemHydro
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileDirty
|
||||
name: dirty tile
|
||||
spawn: FloorTileItemDirty
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileStackShuttleWhite
|
||||
name: white shuttle tile
|
||||
spawn: FloorTileItemShuttleWhite
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileStackShuttleBlue
|
||||
name: blue shuttle tile
|
||||
spawn: FloorTileItemShuttleBlue
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileStackShuttleOrange
|
||||
name: orange shuttle tile
|
||||
spawn: FloorTileItemShuttleOrange
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileStackShuttlePurple
|
||||
name: purple shuttle tile
|
||||
spawn: FloorTileItemShuttlePurple
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileStackShuttleRed
|
||||
name: red shuttle tile
|
||||
spawn: FloorTileItemShuttleRed
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileStackEighties
|
||||
name: eighties floor tile
|
||||
spawn: FloorTileItemEighties
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileStackArcadeBlue
|
||||
name: blue arcade tile
|
||||
spawn: FloorTileItemArcadeBlue
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileStackArcadeBlue2
|
||||
name: blue arcade tile
|
||||
spawn: FloorTileItemArcadeBlue2
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileStackArcadeRed
|
||||
name: red arcade tile
|
||||
spawn: FloorTileItemArcadeRed
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorCarpetRed
|
||||
name: red carpet tile
|
||||
spawn: FloorCarpetItemRed
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorCarpetBlack
|
||||
name: block carpet tile
|
||||
spawn: FloorCarpetItemBlack
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorCarpetBlue
|
||||
name: blue carpet tile
|
||||
spawn: FloorCarpetItemBlue
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorCarpetGreen
|
||||
name: green carpet tile
|
||||
spawn: FloorCarpetItemGreen
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorCarpetOrange
|
||||
name: orange carpet tile
|
||||
spawn: FloorCarpetItemOrange
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorCarpetSkyBlue
|
||||
name: skyblue carpet tile
|
||||
spawn: FloorCarpetItemSkyBlue
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorCarpetPurple
|
||||
name: purple carpet tile
|
||||
spawn: FloorCarpetItemPurple
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorCarpetPink
|
||||
name: pink carpet tile
|
||||
spawn: FloorCarpetItemPink
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileStackCarpetClown
|
||||
name: clown carpet tile
|
||||
spawn: FloorTileItemCarpetClown
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileStackCarpetOffice
|
||||
name: office carpet tile
|
||||
spawn: FloorTileItemCarpetOffice
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileStackBoxing
|
||||
name: boxing ring tile
|
||||
spawn: FloorTileItemBoxing
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileStackGym
|
||||
name: gym floor tile
|
||||
spawn: FloorTileItemGym
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileElevatorShaft
|
||||
name: elevator shaft tile
|
||||
spawn: FloorTileItemElevatorShaft
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileRockVault
|
||||
name: rock vault tile
|
||||
spawn: FloorTileItemRockVault
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileBlue
|
||||
name: blue floor tile
|
||||
spawn: FloorTileItemBlue
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileBar
|
||||
name: item bar floor tile
|
||||
spawn: FloorTileItemBar
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileClown
|
||||
name: clown floor tile
|
||||
spawn: FloorTileItemClown
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileMime
|
||||
name: mime floor tile
|
||||
spawn: FloorTileItemMime
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileKitchen
|
||||
name: kitchen floor tile
|
||||
spawn: FloorTileItemKitchen
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileLaundry
|
||||
name: laundry floor tile
|
||||
spawn: FloorTileItemLaundry
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileSilver
|
||||
name: silver floor tile
|
||||
spawn: FloorTileItemSilver
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileGCircuit
|
||||
name: gcircuit floor tile
|
||||
spawn: FloorTileItemGCircuit
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileBCircuit
|
||||
name: bcircuit floor tile
|
||||
spawn: FloorTileItemBCircuit
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileGrass
|
||||
name: grass floor tile
|
||||
spawn: FloorTileItemGrass
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileGrassJungle
|
||||
name: grass jungle floor tile
|
||||
spawn: FloorTileItemGrassJungle
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileSnow
|
||||
name: snow floor tile
|
||||
spawn: FloorTileItemSnow
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileWoodPattern
|
||||
name: wood pattern floor
|
||||
spawn: FloorTileItemWoodPattern
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileSteelMaint
|
||||
name: steel maint floor
|
||||
spawn: FloorTileItemSteelMaint
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: FloorTileGratingMaint
|
||||
name: grating maint floor
|
||||
spawn: FloorTileItemGratingMaint
|
||||
maxCount: 30
|
||||
|
||||
@@ -3,21 +3,25 @@
|
||||
name: ointment
|
||||
icon: "/Textures/Objects/Specific/Medical/medical.rsi/ointment.png"
|
||||
spawn: Ointment
|
||||
maxCount: 10
|
||||
|
||||
- type: stack
|
||||
id: AloeCream
|
||||
name: aloe cream
|
||||
icon: "/Textures/Objects/Specific/Hydroponics/aloe.rsi/cream.png"
|
||||
spawn: AloeCream
|
||||
maxCount: 10
|
||||
|
||||
- type: stack
|
||||
id: Gauze
|
||||
name: gauze
|
||||
icon: "/Textures/Objects/Specific/Medical/medical.rsi/gauze.png"
|
||||
spawn: Gauze
|
||||
maxCount: 10
|
||||
|
||||
- type: stack
|
||||
id: Brutepack
|
||||
name: brutepack
|
||||
icon: "/Textures/Objects/Specific/Medical/medical.rsi/gauze.png"
|
||||
spawn: Brutepack
|
||||
maxCount: 10
|
||||
|
||||
@@ -3,15 +3,18 @@
|
||||
name: lv cable
|
||||
icon: "/Textures/Objects/Tools/cable-coils.rsi/coil-30.png"
|
||||
spawn: CableApcStack1
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: CableMV
|
||||
name: mv cable
|
||||
icon: "/Textures/Objects/Tools/cable-coils.rsi/coilmv-30.png"
|
||||
spawn: CableMVStack1
|
||||
maxCount: 30
|
||||
|
||||
- type: stack
|
||||
id: CableHV
|
||||
name: hv cable
|
||||
icon: "/Textures/Objects/Tools/cable-coils.rsi/coilhv-30.png"
|
||||
spawn: CableHVStack1
|
||||
maxCount: 30
|
||||
|
||||
Reference in New Issue
Block a user