Storagefill component refactor (#2093)
* refactored storagefill component to allow for random items, amount, and conditional exclusion * i fudged it * yaml for the already deleted filler components * ignoredcomponents & janifill * remainder of toolboxes done * emergencyclosetfill * really makes you think * it DOES really make you think * orGroup * exp111 suggestions * last touches * isNullOrEmpty
This commit is contained in:
@@ -15,11 +15,7 @@
|
|||||||
"AtmosExposed",
|
"AtmosExposed",
|
||||||
"Explosive",
|
"Explosive",
|
||||||
"OnUseTimerTrigger",
|
"OnUseTimerTrigger",
|
||||||
"ToolboxElectricalFill",
|
|
||||||
"ToolboxEmergencyFill",
|
|
||||||
"WarpPoint",
|
"WarpPoint",
|
||||||
"ToolboxGoldFill",
|
|
||||||
"ToolLockerFill",
|
|
||||||
"EmitSoundOnUse",
|
"EmitSoundOnUse",
|
||||||
"FootstepModifier",
|
"FootstepModifier",
|
||||||
"HeatResistance",
|
"HeatResistance",
|
||||||
@@ -67,10 +63,8 @@
|
|||||||
"Stomach",
|
"Stomach",
|
||||||
"Rotatable",
|
"Rotatable",
|
||||||
"MagicMirror",
|
"MagicMirror",
|
||||||
"MedkitFill",
|
|
||||||
"FloorTile",
|
"FloorTile",
|
||||||
"FootstepSound",
|
"FootstepSound",
|
||||||
"UtilityBeltClothingFill",
|
|
||||||
"ShuttleController",
|
"ShuttleController",
|
||||||
"HumanInventoryController",
|
"HumanInventoryController",
|
||||||
"UseDelay",
|
"UseDelay",
|
||||||
@@ -97,7 +91,6 @@
|
|||||||
"SolarPanel",
|
"SolarPanel",
|
||||||
"BodyScanner",
|
"BodyScanner",
|
||||||
"Stunbaton",
|
"Stunbaton",
|
||||||
"EmergencyClosetFill",
|
|
||||||
"Tool",
|
"Tool",
|
||||||
"TilePrying",
|
"TilePrying",
|
||||||
"RandomSpriteColor",
|
"RandomSpriteColor",
|
||||||
@@ -127,7 +120,6 @@
|
|||||||
"EmitSoundOnThrow",
|
"EmitSoundOnThrow",
|
||||||
"Flash",
|
"Flash",
|
||||||
"DamageOnToolInteract",
|
"DamageOnToolInteract",
|
||||||
"CustodialClosetFill",
|
|
||||||
"NoSlip",
|
"NoSlip",
|
||||||
"TrashSpawner",
|
"TrashSpawner",
|
||||||
"Pill",
|
"Pill",
|
||||||
|
|||||||
@@ -1,29 +0,0 @@
|
|||||||
using Robust.Server.Interfaces.GameObjects;
|
|
||||||
using Robust.Shared.GameObjects;
|
|
||||||
|
|
||||||
namespace Content.Server.GameObjects.Components.Items.Storage.Fill
|
|
||||||
{
|
|
||||||
[RegisterComponent]
|
|
||||||
internal sealed class CustodialClosetFillComponent : Component, IMapInit
|
|
||||||
{
|
|
||||||
public override string Name => "CustodialClosetFill";
|
|
||||||
|
|
||||||
void IMapInit.MapInit()
|
|
||||||
{
|
|
||||||
var storage = Owner.GetComponent<IStorageComponent>();
|
|
||||||
|
|
||||||
void Spawn(string prototype)
|
|
||||||
{
|
|
||||||
storage.Insert(Owner.EntityManager.SpawnEntity(prototype, Owner.Transform.Coordinates));
|
|
||||||
}
|
|
||||||
|
|
||||||
Spawn("MopItem");
|
|
||||||
Spawn("MopBucket");
|
|
||||||
Spawn("WetFloorSign");
|
|
||||||
Spawn("WetFloorSign");
|
|
||||||
Spawn("WetFloorSign");
|
|
||||||
Spawn("TrashBag");
|
|
||||||
Spawn("TrashBag");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,65 +0,0 @@
|
|||||||
using Robust.Server.Interfaces.GameObjects;
|
|
||||||
using Robust.Shared.GameObjects;
|
|
||||||
using Robust.Shared.Interfaces.Random;
|
|
||||||
using Robust.Shared.IoC;
|
|
||||||
using Robust.Shared.Random;
|
|
||||||
|
|
||||||
namespace Content.Server.GameObjects.Components.Items.Storage.Fill
|
|
||||||
{
|
|
||||||
[RegisterComponent]
|
|
||||||
internal sealed class EmergencyClosetFillComponent : Component, IMapInit
|
|
||||||
{
|
|
||||||
public override string Name => "EmergencyClosetFill";
|
|
||||||
|
|
||||||
void IMapInit.MapInit()
|
|
||||||
{
|
|
||||||
var storage = Owner.GetComponent<IStorageComponent>();
|
|
||||||
var random = IoCManager.Resolve<IRobustRandom>();
|
|
||||||
|
|
||||||
void Spawn(string prototype)
|
|
||||||
{
|
|
||||||
storage.Insert(Owner.EntityManager.SpawnEntity(prototype, Owner.Transform.Coordinates));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (random.Prob(0.4f))
|
|
||||||
{
|
|
||||||
Spawn("ToolboxEmergencyFilled");
|
|
||||||
}
|
|
||||||
|
|
||||||
var pick = random.Next(0, 100);
|
|
||||||
if (pick < 40) // 40%
|
|
||||||
{
|
|
||||||
// TODO: uncomment when we actually have these items.
|
|
||||||
// Spawn("TankOxygenSmallFilled");
|
|
||||||
// Spawn("TankOxygenSmallFilled");
|
|
||||||
Spawn("BreathMaskClothing");
|
|
||||||
Spawn("BreathMaskClothing");
|
|
||||||
}
|
|
||||||
else if (pick < 65) // 25%
|
|
||||||
{
|
|
||||||
// Spawn("TankOxygenSmallFilled");
|
|
||||||
// Spawn("MedkitOxygenFilled");
|
|
||||||
Spawn("BreathMaskClothing");
|
|
||||||
}
|
|
||||||
else if (pick < 85) // 20%
|
|
||||||
{
|
|
||||||
// Spawn("TankOxygenFilled");
|
|
||||||
Spawn("BreathMaskClothing");
|
|
||||||
}
|
|
||||||
else if (pick < 95) // 10%
|
|
||||||
{
|
|
||||||
// Spawn("TankOxygenSmallFilled");
|
|
||||||
Spawn("BreathMaskClothing");
|
|
||||||
}
|
|
||||||
else if (pick < 99) // 4%
|
|
||||||
{
|
|
||||||
// nothing, doot
|
|
||||||
}
|
|
||||||
else // 1%
|
|
||||||
{
|
|
||||||
// teehee
|
|
||||||
Owner.Delete();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
using Robust.Server.Interfaces.GameObjects;
|
|
||||||
using Robust.Shared.GameObjects;
|
|
||||||
using Robust.Shared.Interfaces.GameObjects;
|
|
||||||
using Robust.Shared.IoC;
|
|
||||||
|
|
||||||
namespace Content.Server.GameObjects.Components.Items.Storage.Fill
|
|
||||||
{
|
|
||||||
[RegisterComponent]
|
|
||||||
internal sealed class MedkitFillComponent : Component, IMapInit
|
|
||||||
{
|
|
||||||
[Dependency] private readonly IEntityManager _entityManager = default!;
|
|
||||||
|
|
||||||
public override string Name => "MedkitFill";
|
|
||||||
|
|
||||||
void IMapInit.MapInit()
|
|
||||||
{
|
|
||||||
var storage = Owner.GetComponent<IStorageComponent>();
|
|
||||||
|
|
||||||
void Spawn(string prototype)
|
|
||||||
{
|
|
||||||
storage.Insert(_entityManager.SpawnEntity(prototype, Owner.Transform.Coordinates));
|
|
||||||
}
|
|
||||||
|
|
||||||
Spawn("Brutepack");
|
|
||||||
Spawn("Brutepack");
|
|
||||||
Spawn("Brutepack");
|
|
||||||
Spawn("Ointment");
|
|
||||||
Spawn("Ointment");
|
|
||||||
Spawn("Ointment");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
using System.Collections.Generic;
|
|
||||||
using Robust.Server.Interfaces.GameObjects;
|
|
||||||
using Robust.Shared.GameObjects;
|
|
||||||
using Robust.Shared.Interfaces.GameObjects;
|
|
||||||
using Robust.Shared.IoC;
|
|
||||||
using Robust.Shared.Serialization;
|
|
||||||
using Robust.Shared.ViewVariables;
|
|
||||||
|
|
||||||
namespace Content.Server.GameObjects.Components.Items.Storage.Fill
|
|
||||||
{
|
|
||||||
[RegisterComponent]
|
|
||||||
internal sealed class StorageFillComponent : Component, IMapInit
|
|
||||||
{
|
|
||||||
[Dependency] private readonly IEntityManager _entityManager = default!;
|
|
||||||
|
|
||||||
public override string Name => "StorageFill";
|
|
||||||
|
|
||||||
[ViewVariables]
|
|
||||||
private List<string> _contents = new List<string>();
|
|
||||||
|
|
||||||
public override void ExposeData(ObjectSerializer serializer)
|
|
||||||
{
|
|
||||||
base.ExposeData(serializer);
|
|
||||||
|
|
||||||
serializer.DataField(ref _contents, "contents", new List<string>());
|
|
||||||
}
|
|
||||||
|
|
||||||
void IMapInit.MapInit()
|
|
||||||
{
|
|
||||||
if (_contents.Count == 0)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var storage = Owner.GetComponent<IStorageComponent>();
|
|
||||||
|
|
||||||
void Spawn(string prototype)
|
|
||||||
{
|
|
||||||
storage.Insert(_entityManager.SpawnEntity(prototype, Owner.Transform.Coordinates));
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var prototype in _contents)
|
|
||||||
{
|
|
||||||
Spawn(prototype);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,88 +0,0 @@
|
|||||||
using Robust.Server.Interfaces.GameObjects;
|
|
||||||
using Robust.Shared.GameObjects;
|
|
||||||
using Robust.Shared.Interfaces.Random;
|
|
||||||
using Robust.Shared.IoC;
|
|
||||||
using Robust.Shared.Random;
|
|
||||||
|
|
||||||
namespace Content.Server.GameObjects.Components.Items.Storage.Fill
|
|
||||||
{
|
|
||||||
[RegisterComponent]
|
|
||||||
internal sealed class ToolLockerFillComponent : Component, IMapInit
|
|
||||||
{
|
|
||||||
public override string Name => "ToolLockerFill";
|
|
||||||
|
|
||||||
void IMapInit.MapInit()
|
|
||||||
{
|
|
||||||
var storage = Owner.GetComponent<IStorageComponent>();
|
|
||||||
var random = IoCManager.Resolve<IRobustRandom>();
|
|
||||||
|
|
||||||
void Spawn(string prototype)
|
|
||||||
{
|
|
||||||
storage.Insert(Owner.EntityManager.SpawnEntity(prototype, Owner.Transform.Coordinates));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (random.Prob(0.4f))
|
|
||||||
{
|
|
||||||
Spawn("OuterclothingHazard");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (random.Prob(0.7f))
|
|
||||||
{
|
|
||||||
Spawn("FlashlightLantern");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (random.Prob(0.7f))
|
|
||||||
{
|
|
||||||
Spawn("Screwdriver");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (random.Prob(0.7f))
|
|
||||||
{
|
|
||||||
Spawn("Wrench");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (random.Prob(0.7f))
|
|
||||||
{
|
|
||||||
Spawn("Welder");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (random.Prob(0.7f))
|
|
||||||
{
|
|
||||||
Spawn("Crowbar");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (random.Prob(0.7f))
|
|
||||||
{
|
|
||||||
Spawn("Wirecutter");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (random.Prob(0.2f))
|
|
||||||
{
|
|
||||||
Spawn("Multitool");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (random.Prob(0.2f))
|
|
||||||
{
|
|
||||||
Spawn("UtilityBeltClothing");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (random.Prob(0.05f))
|
|
||||||
{
|
|
||||||
Spawn("GlovesYellow");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (random.Prob(0.4f))
|
|
||||||
{
|
|
||||||
Spawn("HatHardhatRed");
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var i = 0; i < 3; i++)
|
|
||||||
{
|
|
||||||
if (random.Prob(0.3f))
|
|
||||||
{
|
|
||||||
Spawn("ApcExtensionCableStack");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
using Robust.Server.Interfaces.GameObjects;
|
|
||||||
using Robust.Shared.GameObjects;
|
|
||||||
using Robust.Shared.Interfaces.GameObjects;
|
|
||||||
using Robust.Shared.Interfaces.Random;
|
|
||||||
using Robust.Shared.IoC;
|
|
||||||
using Robust.Shared.Random;
|
|
||||||
|
|
||||||
namespace Content.Server.GameObjects.Components.Items.Storage.Fill
|
|
||||||
{
|
|
||||||
[RegisterComponent]
|
|
||||||
internal sealed class ToolboxElectricalFillComponent : Component, IMapInit
|
|
||||||
{
|
|
||||||
[Dependency] private readonly IEntityManager _entityManager = default!;
|
|
||||||
|
|
||||||
public override string Name => "ToolboxElectricalFill";
|
|
||||||
|
|
||||||
void IMapInit.MapInit()
|
|
||||||
{
|
|
||||||
var storage = Owner.GetComponent<IStorageComponent>();
|
|
||||||
var random = IoCManager.Resolve<IRobustRandom>();
|
|
||||||
|
|
||||||
void Spawn(string prototype)
|
|
||||||
{
|
|
||||||
storage.Insert(_entityManager.SpawnEntity(prototype, Owner.Transform.Coordinates));
|
|
||||||
}
|
|
||||||
|
|
||||||
Spawn("Screwdriver");
|
|
||||||
Spawn("Crowbar");
|
|
||||||
Spawn("Wirecutter");
|
|
||||||
Spawn("ApcExtensionCableStack");
|
|
||||||
Spawn("MVWireStack");
|
|
||||||
Spawn(random.Prob(0.05f) ? "GlovesYellow" : "HVWireStack");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
using Robust.Server.Interfaces.GameObjects;
|
|
||||||
using Robust.Shared.GameObjects;
|
|
||||||
using Robust.Shared.Interfaces.GameObjects;
|
|
||||||
using Robust.Shared.Interfaces.Random;
|
|
||||||
using Robust.Shared.IoC;
|
|
||||||
using Robust.Shared.Random;
|
|
||||||
|
|
||||||
namespace Content.Server.GameObjects.Components.Items.Storage.Fill
|
|
||||||
{
|
|
||||||
[RegisterComponent]
|
|
||||||
internal sealed class ToolboxEmergencyFillComponent : Component, IMapInit
|
|
||||||
{
|
|
||||||
[Dependency] private readonly IEntityManager _entityManager = default!;
|
|
||||||
|
|
||||||
public override string Name => "ToolboxEmergencyFill";
|
|
||||||
|
|
||||||
void IMapInit.MapInit()
|
|
||||||
{
|
|
||||||
var storage = Owner.GetComponent<IStorageComponent>();
|
|
||||||
var random = IoCManager.Resolve<IRobustRandom>();
|
|
||||||
|
|
||||||
void Spawn(string prototype)
|
|
||||||
{
|
|
||||||
storage.Insert(_entityManager.SpawnEntity(prototype, Owner.Transform.Coordinates));
|
|
||||||
}
|
|
||||||
|
|
||||||
Spawn("BreathMaskClothing");
|
|
||||||
Spawn("BreathMaskClothing");
|
|
||||||
Spawn("FoodChocolateBar");
|
|
||||||
Spawn("FlashlightLantern");
|
|
||||||
Spawn("FlashlightLantern");
|
|
||||||
|
|
||||||
Spawn(random.Prob(0.15f) ? "HarmonicaInstrument" : "FoodChocolateBar");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
using Robust.Server.Interfaces.GameObjects;
|
|
||||||
using Robust.Shared.GameObjects;
|
|
||||||
using Robust.Shared.Interfaces.GameObjects;
|
|
||||||
using Robust.Shared.Interfaces.Random;
|
|
||||||
using Robust.Shared.IoC;
|
|
||||||
using Robust.Shared.Random;
|
|
||||||
|
|
||||||
namespace Content.Server.GameObjects.Components.Items.Storage.Fill
|
|
||||||
{
|
|
||||||
[RegisterComponent]
|
|
||||||
internal sealed class ToolboxGoldFillComponent : Component, IMapInit
|
|
||||||
{
|
|
||||||
[Dependency] private readonly IEntityManager _entityManager = default!;
|
|
||||||
|
|
||||||
public override string Name => "ToolboxGoldFill";
|
|
||||||
|
|
||||||
void IMapInit.MapInit()
|
|
||||||
{
|
|
||||||
var storage = Owner.GetComponent<IStorageComponent>();
|
|
||||||
var random = IoCManager.Resolve<IRobustRandom>();
|
|
||||||
|
|
||||||
void Spawn(string prototype)
|
|
||||||
{
|
|
||||||
storage.Insert(_entityManager.SpawnEntity(prototype, Owner.Transform.Coordinates));
|
|
||||||
}
|
|
||||||
|
|
||||||
Spawn("GoldStack");
|
|
||||||
Spawn("GoldStack");
|
|
||||||
Spawn("GoldStack");
|
|
||||||
Spawn("GoldStack");
|
|
||||||
Spawn("GoldStack");
|
|
||||||
|
|
||||||
Spawn(random.Prob(0.05f) ? "DrinkGoldenCup" : "GoldStack");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
using Robust.Server.Interfaces.GameObjects;
|
|
||||||
using Robust.Shared.GameObjects;
|
|
||||||
using Robust.Shared.Interfaces.GameObjects;
|
|
||||||
using Robust.Shared.IoC;
|
|
||||||
|
|
||||||
namespace Content.Server.GameObjects.Components.Items.Storage.Fill
|
|
||||||
{
|
|
||||||
[RegisterComponent]
|
|
||||||
internal sealed class UtilityBeltClothingFillComponent : Component, IMapInit
|
|
||||||
{
|
|
||||||
[Dependency] private readonly IEntityManager _entityManager = default!;
|
|
||||||
|
|
||||||
public override string Name => "UtilityBeltClothingFill";
|
|
||||||
|
|
||||||
void IMapInit.MapInit()
|
|
||||||
{
|
|
||||||
var storage = Owner.GetComponent<IStorageComponent>();
|
|
||||||
|
|
||||||
void Spawn(string prototype)
|
|
||||||
{
|
|
||||||
storage.Insert(_entityManager.SpawnEntity(prototype, Owner.Transform.Coordinates));
|
|
||||||
}
|
|
||||||
|
|
||||||
Spawn("Crowbar");
|
|
||||||
Spawn("Wrench");
|
|
||||||
Spawn("Screwdriver");
|
|
||||||
Spawn("Wirecutter");
|
|
||||||
Spawn("Welder");
|
|
||||||
Spawn("Multitool");
|
|
||||||
Spawn("ApcExtensionCableStack");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Robust.Server.Interfaces.GameObjects;
|
||||||
|
using Robust.Shared.GameObjects;
|
||||||
|
using Robust.Shared.Interfaces.GameObjects;
|
||||||
|
using Robust.Shared.Interfaces.Random;
|
||||||
|
using Robust.Shared.Interfaces.Serialization;
|
||||||
|
using Robust.Shared.IoC;
|
||||||
|
using Robust.Shared.Random;
|
||||||
|
using Robust.Shared.Serialization;
|
||||||
|
using Logger = Robust.Shared.Log.Logger;
|
||||||
|
|
||||||
|
namespace Content.Server.GameObjects.Components.Items.Storage
|
||||||
|
{
|
||||||
|
[RegisterComponent]
|
||||||
|
internal sealed class StorageFillComponent : Component, IMapInit
|
||||||
|
{
|
||||||
|
[Dependency] private readonly IEntityManager _entityManager;
|
||||||
|
|
||||||
|
public override string Name => "StorageFill";
|
||||||
|
|
||||||
|
private List<PrototypeItemData> _contents;
|
||||||
|
|
||||||
|
public override void ExposeData(ObjectSerializer serializer)
|
||||||
|
{
|
||||||
|
base.ExposeData(serializer);
|
||||||
|
|
||||||
|
serializer.DataField(ref _contents, "contents", new List<PrototypeItemData>());
|
||||||
|
}
|
||||||
|
|
||||||
|
void IMapInit.MapInit()
|
||||||
|
{
|
||||||
|
if (_contents.Count == 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Owner.TryGetComponent(out IStorageComponent storage))
|
||||||
|
{
|
||||||
|
Logger.Error($"StorageFillComponent couldn't find any StorageComponent ({Owner})");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var random = IoCManager.Resolve<IRobustRandom>();
|
||||||
|
|
||||||
|
var alreadySpawnedGroups = new List<string>();
|
||||||
|
foreach (var storageItem in _contents)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(storageItem.PrototypeName)) continue;
|
||||||
|
if (string.IsNullOrEmpty(storageItem.GroupId) && alreadySpawnedGroups.Contains(storageItem.GroupId)) continue;
|
||||||
|
|
||||||
|
if (storageItem.SpawnProbability != 1f &&
|
||||||
|
!random.Prob(storageItem.SpawnProbability))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
storage.Insert(_entityManager.SpawnEntity(storageItem.PrototypeName, Owner.Transform.Coordinates));
|
||||||
|
if(string.IsNullOrEmpty(storageItem.GroupId)) alreadySpawnedGroups.Add(storageItem.GroupId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Serializable]
|
||||||
|
private struct PrototypeItemData : IExposeData
|
||||||
|
{
|
||||||
|
public string PrototypeName;
|
||||||
|
public float SpawnProbability;
|
||||||
|
public string GroupId;
|
||||||
|
public int Amount;
|
||||||
|
|
||||||
|
public void ExposeData(ObjectSerializer serializer)
|
||||||
|
{
|
||||||
|
serializer.DataField(ref PrototypeName, "name", null);
|
||||||
|
serializer.DataField(ref Amount, "amount", 1);
|
||||||
|
serializer.DataField(ref SpawnProbability, "prob", 1f);
|
||||||
|
serializer.DataField(ref GroupId, "orGroup", null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- BoxSurvival
|
- name: BoxSurvival
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
abstract: true
|
abstract: true
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- BoxSurvival
|
- name: BoxSurvival
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
abstract: true
|
abstract: true
|
||||||
@@ -23,9 +23,9 @@
|
|||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- BoxSurvival
|
- name: BoxSurvival
|
||||||
- Stunbaton
|
- name: Stunbaton
|
||||||
- Flash
|
- name: Flash
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
abstract: true
|
abstract: true
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- BoxSurvival
|
- name: BoxSurvival
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
abstract: true
|
abstract: true
|
||||||
@@ -43,9 +43,9 @@
|
|||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- BoxSurvival
|
- name: BoxSurvival
|
||||||
#- StationCharter
|
#- name: StationCharter
|
||||||
#- TelescopicBaton
|
#- name: TelescopicBaton
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
abstract: true
|
abstract: true
|
||||||
@@ -54,4 +54,4 @@
|
|||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- BoxSurvival
|
- name: BoxSurvival
|
||||||
|
|||||||
@@ -3,4 +3,12 @@
|
|||||||
parent: UtilityBeltClothing
|
parent: UtilityBeltClothing
|
||||||
suffix: Filled
|
suffix: Filled
|
||||||
components:
|
components:
|
||||||
- type: UtilityBeltClothingFill
|
- type: StorageFill
|
||||||
|
contents:
|
||||||
|
- name: Crowbar
|
||||||
|
- name: Wrench
|
||||||
|
- name: Screwdriver
|
||||||
|
- name: Wirecutter
|
||||||
|
- name: Welder
|
||||||
|
- name: Multitool
|
||||||
|
- name: ApcExtensionCableStack
|
||||||
|
|||||||
@@ -5,11 +5,8 @@
|
|||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- FlashlightLantern
|
- name: FlashlightLantern
|
||||||
- FlashlightLantern
|
amount: 5
|
||||||
- FlashlightLantern
|
|
||||||
- FlashlightLantern
|
|
||||||
- FlashlightLantern
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: CrateLightBulb
|
id: CrateLightBulb
|
||||||
@@ -18,16 +15,8 @@
|
|||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- LightBulb
|
- name: LightBulb
|
||||||
- LightBulb
|
amount: 10
|
||||||
- LightBulb
|
|
||||||
- LightBulb
|
|
||||||
- LightBulb
|
|
||||||
- LightBulb
|
|
||||||
- LightBulb
|
|
||||||
- LightBulb
|
|
||||||
- LightBulb
|
|
||||||
- LightBulb
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: CrateFireExtinguisher
|
id: CrateFireExtinguisher
|
||||||
@@ -36,9 +25,8 @@
|
|||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- FireExtinguisher
|
- name: FireExtinguisher
|
||||||
- FireExtinguisher
|
amount: 3
|
||||||
- FireExtinguisher
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: CratePen
|
id: CratePen
|
||||||
@@ -47,16 +35,8 @@
|
|||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- Pen
|
- name: Pen
|
||||||
- Pen
|
amount: 10
|
||||||
- Pen
|
|
||||||
- Pen
|
|
||||||
- Pen
|
|
||||||
- Pen
|
|
||||||
- Pen
|
|
||||||
- Pen
|
|
||||||
- Pen
|
|
||||||
- Pen
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: CrateBikeHorn
|
id: CrateBikeHorn
|
||||||
@@ -65,11 +45,8 @@
|
|||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- BikeHorn
|
- name: BikeHorn
|
||||||
- BikeHorn
|
amount: 5
|
||||||
- BikeHorn
|
|
||||||
- BikeHorn
|
|
||||||
- BikeHorn
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: CrateCleaver
|
id: CrateCleaver
|
||||||
@@ -78,11 +55,8 @@
|
|||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- ButchCleaver
|
- name: ButchCleaver
|
||||||
- ButchCleaver
|
amount: 5
|
||||||
- ButchCleaver
|
|
||||||
- ButchCleaver
|
|
||||||
- ButchCleaver
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: CrateFuelTank
|
id: CrateFuelTank
|
||||||
@@ -91,7 +65,7 @@
|
|||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- WeldingFuelTank
|
- name: WeldingFuelTank
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: CrateMedicalScanner
|
id: CrateMedicalScanner
|
||||||
@@ -100,7 +74,7 @@
|
|||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- MedicalScanner
|
- name: MedicalScanner
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: CrateGlass
|
id: CrateGlass
|
||||||
@@ -109,7 +83,7 @@
|
|||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- GlassStack
|
- name: GlassStack
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: CrateCable
|
id: CrateCable
|
||||||
@@ -118,4 +92,4 @@
|
|||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- CableStack1
|
- name: CableStack1
|
||||||
|
|||||||
@@ -4,21 +4,73 @@
|
|||||||
name: "custodial closet"
|
name: "custodial closet"
|
||||||
description: "It's a storage unit for janitorial clothes and gear."
|
description: "It's a storage unit for janitorial clothes and gear."
|
||||||
components:
|
components:
|
||||||
- type: CustodialClosetFill
|
- type: StorageFill
|
||||||
|
contents:
|
||||||
|
- name: MopItem
|
||||||
|
- name: MopBucket
|
||||||
|
- name: WetFloorSign
|
||||||
|
amount: 3
|
||||||
|
- name: TrashBag
|
||||||
|
amount: 2
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: LockerToolFilled
|
id: LockerToolFilled
|
||||||
parent: LockerTool
|
parent: LockerTool
|
||||||
suffix: Filled
|
suffix: Filled
|
||||||
components:
|
components:
|
||||||
- type: ToolLockerFill
|
- type: StorageFill
|
||||||
|
contents:
|
||||||
|
- name: OuterclothingHazard
|
||||||
|
prob: 0.4
|
||||||
|
- name: FlashlightLantern
|
||||||
|
prob: 0.7
|
||||||
|
- name: Screwdriver
|
||||||
|
prob: 0.7
|
||||||
|
- name: Wrench
|
||||||
|
prob: 0.7
|
||||||
|
- name: Welder
|
||||||
|
prob: 0.7
|
||||||
|
- name: Crowbar
|
||||||
|
prob: 0.7
|
||||||
|
- name: Wirecutter
|
||||||
|
prob: 0.7
|
||||||
|
- name: Multitool
|
||||||
|
prob: 0.2
|
||||||
|
- name: UtilityBeltClothing
|
||||||
|
prob: 0.2
|
||||||
|
- name: GlovesYellow
|
||||||
|
prob: 0.05
|
||||||
|
- name: HatHardhatRed
|
||||||
|
prob: 0.4
|
||||||
|
- name: ApcExtensionCableStack
|
||||||
|
prob: 0.3
|
||||||
|
- name: ApcExtensionCableStack
|
||||||
|
prob: 0.3
|
||||||
|
- name: ApcExtensionCableStack
|
||||||
|
prob: 0.3
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: LockerEmergencyFilledRandom
|
id: LockerEmergencyFilledRandom
|
||||||
parent: LockerEmergency
|
parent: LockerEmergency
|
||||||
suffix: Filled, Random
|
suffix: Filled, Random
|
||||||
components:
|
components:
|
||||||
- type: EmergencyClosetFill
|
- type: StorageFill
|
||||||
|
contents:
|
||||||
|
- name: ToolboxEmergencyFilled
|
||||||
|
prob: 0.4
|
||||||
|
- name: BreathMaskClothing
|
||||||
|
prob: 0.4
|
||||||
|
- name: BreathMaskClothing
|
||||||
|
prob: 0.25
|
||||||
|
# TODO: uncomment when we actually have these items.
|
||||||
|
#- name: TankOxygenSmallFilled
|
||||||
|
# prob: 0.4s
|
||||||
|
#- name: TankOxygenSmallFilled
|
||||||
|
# prob: 0.25
|
||||||
|
#- name: MedkitOxygenFilled
|
||||||
|
# prob: 0.25
|
||||||
|
#- name: TankOxygenFilled
|
||||||
|
# prob: 0.2
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: LockerBoozeFilled
|
id: LockerBoozeFilled
|
||||||
|
|||||||
@@ -127,11 +127,11 @@
|
|||||||
sprite: Clothing/Back/Duffels/duffel_med.rsi
|
sprite: Clothing/Back/Duffels/duffel_med.rsi
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- Hemostat
|
- name: Hemostat
|
||||||
- BoneSaw
|
- name: BoneSaw
|
||||||
- Drill
|
- name: Drill
|
||||||
- Cautery
|
- name: Cautery
|
||||||
- Retractor
|
- name: Retractor
|
||||||
- Scalpel
|
- name: Scalpel
|
||||||
- type: Storage
|
- type: Storage
|
||||||
capacity: 30
|
capacity: 30
|
||||||
|
|||||||
@@ -6,12 +6,8 @@
|
|||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- FoodDonkPocket
|
- name: FoodDonkPocket
|
||||||
- FoodDonkPocket
|
amount: 6
|
||||||
- FoodDonkPocket
|
|
||||||
- FoodDonkPocket
|
|
||||||
- FoodDonkPocket
|
|
||||||
- FoodDonkPocket
|
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
sprite: Objects/Storage/donkpocket.rsi
|
sprite: Objects/Storage/donkpocket.rsi
|
||||||
state: icon
|
state: icon
|
||||||
|
|||||||
@@ -6,18 +6,8 @@
|
|||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- LightBulb
|
- name: LightBulb
|
||||||
- LightBulb
|
amount: 12
|
||||||
- LightBulb
|
|
||||||
- LightBulb
|
|
||||||
- LightBulb
|
|
||||||
- LightBulb
|
|
||||||
- LightBulb
|
|
||||||
- LightBulb
|
|
||||||
- LightBulb
|
|
||||||
- LightBulb
|
|
||||||
- LightBulb
|
|
||||||
- LightBulb
|
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
layers:
|
layers:
|
||||||
- state: box
|
- state: box
|
||||||
@@ -34,18 +24,8 @@
|
|||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- LightTube
|
- name: LightTube
|
||||||
- LightTube
|
amount: 12
|
||||||
- LightTube
|
|
||||||
- LightTube
|
|
||||||
- LightTube
|
|
||||||
- LightTube
|
|
||||||
- LightTube
|
|
||||||
- LightTube
|
|
||||||
- LightTube
|
|
||||||
- LightTube
|
|
||||||
- LightTube
|
|
||||||
- LightTube
|
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
layers:
|
layers:
|
||||||
- state: box
|
- state: box
|
||||||
@@ -62,18 +42,8 @@
|
|||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- LightTube
|
- name: LightTube
|
||||||
- LightTube
|
amount: 12
|
||||||
- LightTube
|
|
||||||
- LightTube
|
|
||||||
- LightTube
|
|
||||||
- LightTube
|
|
||||||
- LightBulb
|
|
||||||
- LightBulb
|
|
||||||
- LightBulb
|
|
||||||
- LightBulb
|
|
||||||
- LightBulb
|
|
||||||
- LightBulb
|
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
layers:
|
layers:
|
||||||
- state: box
|
- state: box
|
||||||
@@ -90,9 +60,8 @@
|
|||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- AssistantPDA
|
- name: AssistantPDA
|
||||||
- AssistantPDA
|
amount: 3
|
||||||
- AssistantPDA
|
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
layers:
|
layers:
|
||||||
- state: box
|
- state: box
|
||||||
@@ -111,10 +80,8 @@
|
|||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- MesonGlasses
|
- name: MesonGlasses
|
||||||
- MesonGlasses
|
amount: 4
|
||||||
- MesonGlasses
|
|
||||||
- MesonGlasses
|
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
layers:
|
layers:
|
||||||
- state: box
|
- state: box
|
||||||
@@ -133,9 +100,9 @@
|
|||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- BreathMaskClothing
|
- name: BreathMaskClothing
|
||||||
#- O2 Canister
|
#- name: O2 Canister
|
||||||
#- Injector
|
#- name: Injector
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
layers:
|
layers:
|
||||||
- state: box
|
- state: box
|
||||||
|
|||||||
@@ -6,12 +6,8 @@
|
|||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- Syringe
|
- name: Syringe
|
||||||
- Syringe
|
amount: 6
|
||||||
- Syringe
|
|
||||||
- Syringe
|
|
||||||
- Syringe
|
|
||||||
- Syringe
|
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
layers:
|
layers:
|
||||||
- state: box
|
- state: box
|
||||||
@@ -30,10 +26,8 @@
|
|||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- MaskSterile
|
- name: MaskSterile
|
||||||
- MaskSterile
|
amount: 4
|
||||||
- MaskSterile
|
|
||||||
- MaskSterile
|
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
layers:
|
layers:
|
||||||
- state: box
|
- state: box
|
||||||
@@ -52,10 +46,8 @@
|
|||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- GlovesLatex
|
- name: GlovesLatex
|
||||||
- GlovesLatex
|
amount: 4
|
||||||
- GlovesLatex
|
|
||||||
- GlovesLatex
|
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
layers:
|
layers:
|
||||||
- state: box
|
- state: box
|
||||||
|
|||||||
@@ -6,12 +6,10 @@
|
|||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- Beaker
|
- name: Beaker
|
||||||
- Beaker
|
amount: 3
|
||||||
- Beaker
|
- name: LargeBeaker
|
||||||
- LargeBeaker
|
amount: 3
|
||||||
- LargeBeaker
|
|
||||||
- LargeBeaker
|
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
layers:
|
layers:
|
||||||
- state: box
|
- state: box
|
||||||
|
|||||||
@@ -6,12 +6,8 @@
|
|||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- Handcuffs
|
- name: Handcuffs
|
||||||
- Handcuffs
|
amount: 6
|
||||||
- Handcuffs
|
|
||||||
- Handcuffs
|
|
||||||
- Handcuffs
|
|
||||||
- Handcuffs
|
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
layers:
|
layers:
|
||||||
- state: box_security
|
- state: box_security
|
||||||
@@ -30,10 +26,8 @@
|
|||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- GrenadeFlashBang
|
- name: GrenadeFlashBang
|
||||||
- GrenadeFlashBang
|
amount: 4
|
||||||
- GrenadeFlashBang
|
|
||||||
- GrenadeFlashBang
|
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
layers:
|
layers:
|
||||||
- state: box_security
|
- state: box_security
|
||||||
@@ -52,10 +46,8 @@
|
|||||||
components:
|
components:
|
||||||
- type: StorageFill
|
- type: StorageFill
|
||||||
contents:
|
contents:
|
||||||
- SecGlasses
|
- name: SecGlasses
|
||||||
- SecGlasses
|
amount: 4
|
||||||
- SecGlasses
|
|
||||||
- SecGlasses
|
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
layers:
|
layers:
|
||||||
- state: box_security
|
- state: box_security
|
||||||
|
|||||||
@@ -15,9 +15,16 @@
|
|||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: MedkitFilled
|
id: MedkitFilled
|
||||||
|
suffix: Filled
|
||||||
parent: Medkit
|
parent: Medkit
|
||||||
components:
|
components:
|
||||||
- type: MedkitFill # 3 Ointment, 3 Roll of Gauze. TODO 1 Health Analyzer once it exists
|
- type: StorageFill
|
||||||
|
contents:
|
||||||
|
- name: Brutepack
|
||||||
|
amount: 3
|
||||||
|
- name: Ointment
|
||||||
|
amount: 3
|
||||||
|
# todo 1 Health Analyzer once it exists
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: medical stack
|
name: medical stack
|
||||||
|
|||||||
@@ -32,7 +32,18 @@
|
|||||||
parent: ToolboxEmergency
|
parent: ToolboxEmergency
|
||||||
suffix: Filled
|
suffix: Filled
|
||||||
components:
|
components:
|
||||||
- type: ToolboxEmergencyFill
|
- type: StorageFill
|
||||||
|
contents:
|
||||||
|
- name: BreathMaskClothing
|
||||||
|
amount: 2
|
||||||
|
- name: FoodChocolateBar
|
||||||
|
- name: FlashlightLantern
|
||||||
|
amount: 2
|
||||||
|
- name: HarmonicaInstrument
|
||||||
|
prob: 0.15
|
||||||
|
orGroup: HarmonicaOrChocolate
|
||||||
|
- name: FoodChocolateBar
|
||||||
|
orGroup: HarmonicaOrChocolate
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: mechanical toolbox
|
name: mechanical toolbox
|
||||||
@@ -70,7 +81,18 @@
|
|||||||
suffix: Filled
|
suffix: Filled
|
||||||
parent: ToolboxElectrical
|
parent: ToolboxElectrical
|
||||||
components:
|
components:
|
||||||
- type: ToolboxElectricalFill
|
- type: StorageFill
|
||||||
|
contents:
|
||||||
|
- name: Screwdriver
|
||||||
|
- name: Crowbar
|
||||||
|
- name: Wirecutter
|
||||||
|
- name: ApcExtensionCableStack
|
||||||
|
- name: MVWireStack
|
||||||
|
- name: GlovesYellow
|
||||||
|
prob: 0.05
|
||||||
|
orGroup: GlovesOrWires
|
||||||
|
- name: HVWireStack
|
||||||
|
orGroup: GlovesOrWires
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: artistic toolbox
|
name: artistic toolbox
|
||||||
@@ -123,4 +145,12 @@
|
|||||||
parent: ToolboxGolden
|
parent: ToolboxGolden
|
||||||
suffix: Filled
|
suffix: Filled
|
||||||
components:
|
components:
|
||||||
- type: ToolboxGoldFill
|
- type: StorageFill
|
||||||
|
contents:
|
||||||
|
- name: GoldStack
|
||||||
|
amount: 5
|
||||||
|
- name: DrinkGoldenCup
|
||||||
|
prob: 0.05
|
||||||
|
orGroup: CupOrGold
|
||||||
|
- name: GoldStack
|
||||||
|
orGroup: CupOrGold
|
||||||
|
|||||||
Reference in New Issue
Block a user