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:
Paul Ritter
2020-09-21 12:47:52 +02:00
committed by GitHub
parent 8238a89190
commit 37d6ca556f
23 changed files with 247 additions and 562 deletions

View File

@@ -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",

View File

@@ -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");
}
}
}

View File

@@ -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();
}
}
}
}

View File

@@ -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");
}
}
}

View File

@@ -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);
}
}
}
}

View File

@@ -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");
}
}
}
}
}

View File

@@ -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");
}
}
}

View File

@@ -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");
}
}
}

View File

@@ -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");
}
}
}

View File

@@ -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");
}
}
}

View File

@@ -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);
}
}
}
}

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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