From ad7a851e2773b9fd28bbf331bf0deac7204856ea Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Thu, 15 Sep 2022 11:53:17 +1000 Subject: [PATCH] Cargo economy balance (#11123) Co-authored-by: Visne <39844191+Visne@users.noreply.github.com> --- .../Cargo/UI/CargoConsoleMenu.xaml.cs | 2 +- Content.Client/UserInterface/StatValuesEui.cs | 29 ++++ Content.Client/UserInterface/StatsWindow.xaml | 11 ++ .../UserInterface/StatsWindow.xaml.cs | 48 ++++++ Content.IntegrationTests/Tests/CargoTest.cs | 9 +- .../Components/StationBankAccountComponent.cs | 2 +- Content.Server/Cargo/Systems/PricingSystem.cs | 30 +++- Content.Server/Lathe/LatheSystem.cs | 1 + .../UserInterface/StatValuesCommand.cs | 144 ++++++++++++++++++ Content.Server/UserInterface/StatValuesEui.cs | 5 + .../VendingMachines/VendingMachineSystem.cs | 39 ++++- .../Weapon/Ranged/Systems/GunSystem.cs | 25 +++ .../Cargo/Components/CargoShuttleComponent.cs | 2 +- .../UserInterface/StatValuesEuiMessage.cs | 18 +++ Resources/Prototypes/Body/Parts/animal.yml | 4 + Resources/Prototypes/Body/Parts/human.yml | 2 + Resources/Prototypes/Body/Parts/silicon.yml | 2 + Resources/Prototypes/Body/Parts/skeleton.yml | 2 + Resources/Prototypes/Body/Parts/slime.yml | 2 + Resources/Prototypes/Body/Parts/vox.yml | 2 + .../Prototypes/Catalog/Cargo/cargo_fun.yml | 2 +- .../Catalog/Cargo/cargo_livestock.yml | 14 +- .../Catalog/Cargo/cargo_medical.yml | 4 +- .../Catalog/Cargo/cargo_security.yml | 2 +- .../OuterClothing/base_clothingouter.yml | 2 + .../Entities/Clothing/Shoes/magboots.yml | 2 + .../Entities/Clothing/base_clothing.yml | 2 + .../Objects/Consumable/Food/food_base.yml | 2 + .../Smokeables/Cigarettes/cigarette.yml | 3 - .../Consumable/Smokeables/base_smokeables.yml | 2 + .../Machine/base_machineboard.yml | 2 +- .../Devices/Circuitboards/computer.yml | 2 +- .../Objects/Devices/Electronics/firelock.yml | 2 + .../Devices/Electronics/power_electronics.yml | 14 +- .../Objects/Devices/Electronics/signaller.yml | 6 +- .../Objects/Devices/Electronics/triggers.yml | 6 +- .../Objects/Devices/holoprojectors.yml | 2 + .../Entities/Objects/Devices/payload.yml | 2 + .../Fun/Instruments/base_instruments.yml | 6 +- .../Entities/Objects/Fun/crayons.yml | 2 + .../Objects/Materials/Sheets/glass.yml | 2 +- .../Objects/Materials/Sheets/other.yml | 2 +- .../Entities/Objects/Materials/parts.yml | 6 +- .../Entities/Objects/Misc/bedsheets.yml | 2 + .../Entities/Objects/Misc/botparts.yml | 2 + .../Entities/Objects/Power/antimatter_jar.yml | 2 + .../Objects/Power/antimatter_part.yml | 2 + .../Entities/Objects/Power/powercells.yml | 2 + .../Entities/Objects/Shields/shields.yml | 3 + .../Objects/Specific/Hydroponics/seeds.yml | 2 + .../Objects/Specific/Hydroponics/tools.yml | 2 + .../Medical/handheld_crew_monitor.yml | 2 + .../Objects/Specific/Medical/healing.yml | 9 ++ .../Objects/Specific/Medical/morgue.yml | 2 + .../Objects/Specific/Medical/surgery.yml | 2 + .../Objects/Specific/Security/barrier.yml | 2 + .../Entities/Objects/Specific/atmos.yml | 2 + .../Entities/Objects/Specific/chemistry.yml | 6 + .../Objects/Tools/airlock_painter.yml | 2 + .../Entities/Objects/Tools/flashlights.yml | 2 + .../Entities/Objects/Tools/light_replacer.yml | 2 + .../Entities/Objects/Tools/t-ray.yml | 2 + .../Entities/Objects/Tools/tools.yml | 16 ++ .../Entities/Objects/Tools/welders.yml | 2 + .../Ammunition/Cartridges/antimaterial.yml | 2 + .../Ammunition/Cartridges/caseless_rifle.yml | 2 + .../Ammunition/Cartridges/heavy_rifle.yml | 2 + .../Ammunition/Cartridges/light_rifle.yml | 2 + .../Guns/Ammunition/Cartridges/magnum.yml | 2 + .../Guns/Ammunition/Cartridges/pistol.yml | 2 + .../Guns/Ammunition/Cartridges/rifle.yml | 2 + .../Guns/Ammunition/Cartridges/toy.yml | 2 + .../Weapons/Guns/Ammunition/explosives.yml | 4 + .../Weapons/Guns/Battery/battery_guns.yml | 2 + .../Objects/Weapons/Guns/HMGs/hmgs.yml | 2 + .../Objects/Weapons/Guns/LMGs/lmgs.yml | 2 + .../Weapons/Guns/Launchers/launchers.yml | 2 + .../Objects/Weapons/Guns/Pistols/pistols.yml | 2 + .../Weapons/Guns/Revolvers/revolvers.yml | 2 + .../Objects/Weapons/Guns/Rifles/rifles.yml | 2 + .../Objects/Weapons/Guns/SMGs/smgs.yml | 2 + .../Weapons/Guns/Shotguns/shotguns.yml | 4 + .../Objects/Weapons/Guns/Snipers/snipers.yml | 2 + .../Entities/Objects/Weapons/security.yml | 4 + .../Prototypes/Entities/Objects/base_item.yml | 2 +- .../Dispensers/base_structuredispensers.yml | 2 + .../Doors/Airlocks/base_structureairlocks.yml | 2 + .../Structures/Doors/Firelocks/firelock.yml | 4 + .../Doors/Windoors/base_structurewindoors.yml | 2 + .../Entities/Structures/Furniture/chairs.yml | 2 + .../Structures/Furniture/rollerbeds.yml | 2 + .../Structures/Machines/Computers/arcades.yml | 2 + .../Computers/base_structurecomputers.yml | 2 + .../Structures/Machines/cloning_machine.yml | 2 + .../Entities/Structures/Machines/lathe.yml | 2 + .../Structures/Piping/Atmospherics/pipes.yml | 2 + .../Structures/Piping/Atmospherics/unary.yml | 2 + .../Structures/Piping/Disposal/units.yml | 2 + .../Power/Generation/generators.yml | 2 + .../Entities/Structures/Power/apc.yml | 2 + .../Entities/Structures/Power/smes.yml | 2 + .../Entities/Structures/Storage/morgue.yml | 4 +- .../Wallmounts/Signs/base_structuresigns.yml | 2 + .../Wallmounts/surveillance_camera.yml | 2 + .../Entities/Structures/Walls/walls.yml | 6 +- .../Structures/Windows/reinforced.yml | 2 +- .../Entities/Structures/Windows/window.yml | 2 +- .../Entities/Structures/base_structure.yml | 2 + .../Entities/Structures/conveyor.yml | 2 + .../Prototypes/Reagents/Materials/glass.yml | 8 +- .../Reagents/Materials/materials.yml | 14 +- .../Prototypes/Reagents/Materials/metals.yml | 8 +- Resources/Prototypes/tags.yml | 3 + 113 files changed, 615 insertions(+), 58 deletions(-) create mode 100644 Content.Client/UserInterface/StatValuesEui.cs create mode 100644 Content.Client/UserInterface/StatsWindow.xaml create mode 100644 Content.Client/UserInterface/StatsWindow.xaml.cs create mode 100644 Content.Server/UserInterface/StatValuesCommand.cs create mode 100644 Content.Server/UserInterface/StatValuesEui.cs create mode 100644 Content.Shared/UserInterface/StatValuesEuiMessage.cs diff --git a/Content.Client/Cargo/UI/CargoConsoleMenu.xaml.cs b/Content.Client/Cargo/UI/CargoConsoleMenu.xaml.cs index 9f6cba8483..fe77ff9c5f 100644 --- a/Content.Client/Cargo/UI/CargoConsoleMenu.xaml.cs +++ b/Content.Client/Cargo/UI/CargoConsoleMenu.xaml.cs @@ -63,7 +63,7 @@ namespace Content.Client.Cargo.UI Products.RemoveAllChildren(); var products = ProductPrototypes.ToList(); products.Sort((x, y) => - string.Compare(x.Name, y.Name, StringComparison.Ordinal)); + string.Compare(x.Name, y.Name, StringComparison.CurrentCultureIgnoreCase)); var search = SearchBar.Text.Trim().ToLowerInvariant(); foreach (var prototype in products) diff --git a/Content.Client/UserInterface/StatValuesEui.cs b/Content.Client/UserInterface/StatValuesEui.cs new file mode 100644 index 0000000000..33035940b5 --- /dev/null +++ b/Content.Client/UserInterface/StatValuesEui.cs @@ -0,0 +1,29 @@ +using Content.Client.Eui; +using Content.Shared.Eui; +using Content.Shared.UserInterface; + +namespace Content.Client.UserInterface; + +public sealed class StatValuesEui : BaseEui +{ + private readonly StatsWindow _window; + + public StatValuesEui() + { + _window = new StatsWindow(); + _window.Title = "Melee stats"; + _window.OpenCentered(); + _window.OnClose += Closed; + } + + public override void HandleMessage(EuiMessageBase msg) + { + base.HandleMessage(msg); + + if (msg is not StatValuesEuiMessage eui) + return; + + _window.Title = eui.Title; + _window.UpdateValues(eui.Headers, eui.Values); + } +} diff --git a/Content.Client/UserInterface/StatsWindow.xaml b/Content.Client/UserInterface/StatsWindow.xaml new file mode 100644 index 0000000000..9cda4e41c6 --- /dev/null +++ b/Content.Client/UserInterface/StatsWindow.xaml @@ -0,0 +1,11 @@ + + + + + + + diff --git a/Content.Client/UserInterface/StatsWindow.xaml.cs b/Content.Client/UserInterface/StatsWindow.xaml.cs new file mode 100644 index 0000000000..29c48fff67 --- /dev/null +++ b/Content.Client/UserInterface/StatsWindow.xaml.cs @@ -0,0 +1,48 @@ +using Content.Client.Administration.UI.CustomControls; +using Robust.Client.AutoGenerated; +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.CustomControls; +using Robust.Client.UserInterface.XAML; + +namespace Content.Client.UserInterface +{ + [GenerateTypedNameReferences] + public sealed partial class StatsWindow : DefaultWindow + { + public StatsWindow() + { + RobustXamlLoader.Load(this); + IoCManager.InjectDependencies(this); + } + + public void UpdateValues(List headers, List values) + { + Values.DisposeAllChildren(); + Values.Columns = headers.Count; + + for (var i = 0; i < headers.Count; i++) + { + var item = headers[i]; + Values.AddChild(new Label() + { + Text = item, + }); + } + + values.Sort((x, y) => string.Compare(x[0], y[0], StringComparison.CurrentCultureIgnoreCase)); + + for (var i = 0; i < values.Count; i++) + { + var value = values[i]; + + for (var j = 0; j < value.Length; j++) + { + Values.AddChild(new Label() + { + Text = value[j], + }); + } + } + } + } +} diff --git a/Content.IntegrationTests/Tests/CargoTest.cs b/Content.IntegrationTests/Tests/CargoTest.cs index 4ce1d3a720..c6f713723d 100644 --- a/Content.IntegrationTests/Tests/CargoTest.cs +++ b/Content.IntegrationTests/Tests/CargoTest.cs @@ -13,7 +13,7 @@ namespace Content.IntegrationTests.Tests; public sealed class CargoTest { [Test] - public async Task NoArbitrage() + public async Task NoCargoOrderArbitrage() { await using var pairTracker = await PoolManager.GetServerClient(new PoolSettings() {NoClient = true}); var server = pairTracker.Pair.Server; @@ -32,8 +32,13 @@ public sealed class CargoTest var ent = entManager.SpawnEntity(proto.Product, new MapCoordinates(Vector2.Zero, mapId)); var price = pricing.GetPrice(ent); - Assert.That(price, Is.LessThan(proto.PointCost), $"Found arbitrage on {proto.ID} cargo product!"); + Assert.That(price, Is.LessThan(proto.PointCost), $"Found arbitrage on {proto.ID} cargo product! Cost is {proto.PointCost} but sell is {price}!"); + entManager.DeleteEntity(ent); } + + mapManager.DeleteMap(mapId); }); + + await pairTracker.CleanReturnAsync(); } } diff --git a/Content.Server/Cargo/Components/StationBankAccountComponent.cs b/Content.Server/Cargo/Components/StationBankAccountComponent.cs index a2d56b3fd8..961c6ac9a6 100644 --- a/Content.Server/Cargo/Components/StationBankAccountComponent.cs +++ b/Content.Server/Cargo/Components/StationBankAccountComponent.cs @@ -15,5 +15,5 @@ public sealed class StationBankAccountComponent : Component /// How much the bank balance goes up per second, every Delay period. Rounded down when multiplied. /// [ViewVariables(VVAccess.ReadWrite), DataField("increasePerSecond")] - public int IncreasePerSecond = 10; + public int IncreasePerSecond = 2; } diff --git a/Content.Server/Cargo/Systems/PricingSystem.cs b/Content.Server/Cargo/Systems/PricingSystem.cs index af21e9ae30..d8c0239c66 100644 --- a/Content.Server/Cargo/Systems/PricingSystem.cs +++ b/Content.Server/Cargo/Systems/PricingSystem.cs @@ -9,6 +9,7 @@ using Content.Shared.MobState.Components; using Robust.Shared.Console; using Robust.Shared.Containers; using Robust.Shared.Map; +using Robust.Shared.Prototypes; using Robust.Shared.Utility; namespace Content.Server.Cargo.Systems; @@ -111,6 +112,33 @@ public sealed class PricingSystem : EntitySystem args.Price += component.Price; } + /// + /// Get a rough price for an entityprototype. Does not consider contained entities. + /// + public double GetEstimatedPrice(EntityPrototype prototype, IComponentFactory? factory = null) + { + IoCManager.Resolve(ref factory); + var price = 0.0; + + if (prototype.Components.TryGetValue(factory.GetComponentName(typeof(StaticPriceComponent)), + out var staticPriceProto)) + { + var staticComp = (StaticPriceComponent) staticPriceProto.Component; + + price += staticComp.Price; + } + + if (prototype.Components.TryGetValue(factory.GetComponentName(typeof(StackPriceComponent)), out var stackpriceProto) && + prototype.Components.TryGetValue(factory.GetComponentName(typeof(StackComponent)), out var stackProto)) + { + var stackPrice = (StackPriceComponent) stackpriceProto.Component; + var stack = (StackComponent) stackProto.Component; + price += stack.Count * stackPrice.Price; + } + + return price; + } + /// /// Appraises an entity, returning it's price. /// @@ -123,7 +151,7 @@ public sealed class PricingSystem : EntitySystem public double GetPrice(EntityUid uid) { var ev = new PriceCalculationEvent(); - RaiseLocalEvent(uid, ref ev, true); + RaiseLocalEvent(uid, ref ev); //TODO: Add an OpaqueToAppraisal component or similar for blocking the recursive descent into containers, or preventing material pricing. diff --git a/Content.Server/Lathe/LatheSystem.cs b/Content.Server/Lathe/LatheSystem.cs index 1641060cad..2e7a827644 100644 --- a/Content.Server/Lathe/LatheSystem.cs +++ b/Content.Server/Lathe/LatheSystem.cs @@ -15,6 +15,7 @@ using Robust.Shared.Prototypes; using Robust.Shared.Player; using JetBrains.Annotations; using System.Linq; +using Content.Server.Cargo.Systems; using Content.Server.Power.Components; using Robust.Server.Player; diff --git a/Content.Server/UserInterface/StatValuesCommand.cs b/Content.Server/UserInterface/StatValuesCommand.cs new file mode 100644 index 0000000000..51f0a160fc --- /dev/null +++ b/Content.Server/UserInterface/StatValuesCommand.cs @@ -0,0 +1,144 @@ +using Content.Server.Administration; +using Content.Server.Cargo.Systems; +using Content.Server.EUI; +using Content.Shared.Administration; +using Content.Shared.Materials; +using Content.Shared.Research.Prototypes; +using Content.Shared.UserInterface; +using Robust.Server.Player; +using Robust.Shared.Console; +using Robust.Shared.Prototypes; + +namespace Content.Server.UserInterface; + +[AdminCommand(AdminFlags.Debug)] +public sealed class StatValuesCommand : IConsoleCommand +{ + public string Command => "showvalues"; + public string Description => "Dumps all stats for a particular category into a table."; + public string Help => $"{Command} "; + public void Execute(IConsoleShell shell, string argStr, string[] args) + { + if (shell.Player is not IPlayerSession pSession) + { + shell.WriteError($"{Command} can't be run on server!"); + return; + } + + if (args.Length != 1) + { + shell.WriteError($"Invalid number of args, need 1"); + return; + } + + StatValuesEuiMessage message; + + switch (args[0]) + { + case "cargosell": + message = GetCargo(); + break; + case "lathesell": + message = GetLatheMessage(); + break; + default: + shell.WriteError($"{args[0]} is not a valid stat!"); + return; + } + + var euiManager = IoCManager.Resolve(); + var eui = new StatValuesEui(); + euiManager.OpenEui(eui, pSession); + eui.SendMessage(message); + } + + private StatValuesEuiMessage GetCargo() + { + // Okay so there's no easy way to do this with how pricing works + // So we'll just get the first value for each prototype ID which is probably good enough for the majority. + + var values = new List(); + var entManager = IoCManager.Resolve(); + var priceSystem = IoCManager.Resolve().GetEntitySystem(); + var metaQuery = entManager.GetEntityQuery(); + var prices = new HashSet(256); + + foreach (var entity in entManager.GetEntities()) + { + if (!metaQuery.TryGetComponent(entity, out var meta)) + continue; + + var id = meta.EntityPrototype?.ID; + + // We'll add it even if we don't have it so we don't have to raise the event again because this is probably faster. + if (id == null || !prices.Add(id)) + continue; + + var price = priceSystem.GetPrice(entity); + + if (price == 0) + continue; + + values.Add(new string[] + { + id, + $"{price:0}", + }); + } + + var state = new StatValuesEuiMessage() + { + Title = "Cargo sell prices", + Headers = new List() + { + "ID", + "Price", + }, + Values = values, + }; + + return state; + } + + private StatValuesEuiMessage GetLatheMessage() + { + var values = new List(); + var protoManager = IoCManager.Resolve(); + var factory = IoCManager.Resolve(); + var priceSystem = IoCManager.Resolve().GetEntitySystem(); + + foreach (var proto in protoManager.EnumeratePrototypes()) + { + var cost = 0.0; + + foreach (var (material, count) in proto.RequiredMaterials) + { + var materialPrice = protoManager.Index(material).Price; + cost += materialPrice * count; + } + + var sell = priceSystem.GetEstimatedPrice(protoManager.Index(proto.Result), factory); + + values.Add(new[] + { + proto.ID, + $"{cost:0}", + $"{sell:0}", + }); + } + + var state = new StatValuesEuiMessage() + { + Title = "Lathe sell prices", + Headers = new List() + { + "ID", + "Cost", + "Sell price", + }, + Values = values, + }; + + return state; + } +} diff --git a/Content.Server/UserInterface/StatValuesEui.cs b/Content.Server/UserInterface/StatValuesEui.cs new file mode 100644 index 0000000000..96dda1b1a6 --- /dev/null +++ b/Content.Server/UserInterface/StatValuesEui.cs @@ -0,0 +1,5 @@ +using Content.Server.EUI; + +namespace Content.Server.UserInterface; + +public sealed class StatValuesEui : BaseEui {} diff --git a/Content.Server/VendingMachines/VendingMachineSystem.cs b/Content.Server/VendingMachines/VendingMachineSystem.cs index 5eb0856332..ae18a47643 100644 --- a/Content.Server/VendingMachines/VendingMachineSystem.cs +++ b/Content.Server/VendingMachines/VendingMachineSystem.cs @@ -1,3 +1,4 @@ +using Content.Server.Cargo.Systems; using Content.Server.Popups; using Content.Server.Power.Components; using Content.Server.Power.EntitySystems; @@ -21,24 +22,30 @@ namespace Content.Server.VendingMachines { public sealed class VendingMachineSystem : SharedVendingMachineSystem { + [Dependency] private readonly IComponentFactory _factory = default!; [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly AccessReaderSystem _accessReader = default!; - [Dependency] private readonly PopupSystem _popupSystem = default!; - [Dependency] private readonly ThrowingSystem _throwingSystem = default!; - [Dependency] private readonly SharedActionsSystem _action = default!; - [Dependency] private readonly AudioSystem _audioSystem = default!; - [Dependency] private readonly UserInterfaceSystem _userInterfaceSystem = default!; [Dependency] private readonly AppearanceSystem _appearanceSystem = default!; + [Dependency] private readonly AudioSystem _audioSystem = default!; + [Dependency] private readonly PopupSystem _popupSystem = default!; + [Dependency] private readonly SharedActionsSystem _action = default!; + [Dependency] private readonly PricingSystem _pricing = default!; + [Dependency] private readonly ThrowingSystem _throwingSystem = default!; + [Dependency] private readonly UserInterfaceSystem _userInterfaceSystem = default!; + + private ISawmill _sawmill = default!; public override void Initialize() { base.Initialize(); + _sawmill = Logger.GetSawmill("vending"); SubscribeLocalEvent(OnPowerChanged); SubscribeLocalEvent(OnBreak); SubscribeLocalEvent(OnEmagged); SubscribeLocalEvent(OnDamage); + SubscribeLocalEvent(OnVendingPrice); SubscribeLocalEvent(OnActivatableUIOpenAttempt); SubscribeLocalEvent(OnBoundUIOpened); @@ -47,6 +54,24 @@ namespace Content.Server.VendingMachines SubscribeLocalEvent(OnSelfDispense); } + private void OnVendingPrice(EntityUid uid, VendingMachineComponent component, ref PriceCalculationEvent args) + { + var price = 0.0; + + foreach (var (id, entry) in component.Inventory) + { + if (!_prototypeManager.TryIndex(entry.ID, out var proto)) + { + _sawmill.Error($"Unable to find entity prototype {entry.ID} on {ToPrettyString(uid)} vending."); + continue; + } + + price += entry.Amount * _pricing.GetEstimatedPrice(proto, _factory); + } + + args.Price += price; + } + protected override void OnComponentInit(EntityUid uid, SharedVendingMachineComponent sharedComponent, ComponentInit args) { base.OnComponentInit(uid, sharedComponent, args); @@ -113,7 +138,7 @@ namespace Content.Server.VendingMachines component.Emagged = true; args.Handled = true; } - + private void OnDamage(EntityUid uid, VendingMachineComponent component, DamageChangedEvent args) { if (component.Broken || component.DispenseOnHitCoolingDown || @@ -320,7 +345,7 @@ namespace Content.Server.VendingMachines vendComponent.ThrowNextItem = false; return; } - + var ent = EntityManager.SpawnEntity(vendComponent.NextItemToEject, Transform(vendComponent.Owner).Coordinates); if (vendComponent.ThrowNextItem) { diff --git a/Content.Server/Weapon/Ranged/Systems/GunSystem.cs b/Content.Server/Weapon/Ranged/Systems/GunSystem.cs index 3c9a3f2a9b..7d451c7491 100644 --- a/Content.Server/Weapon/Ranged/Systems/GunSystem.cs +++ b/Content.Server/Weapon/Ranged/Systems/GunSystem.cs @@ -1,4 +1,5 @@ using System.Linq; +using Content.Server.Cargo.Systems; using Content.Server.Damage.Systems; using Content.Server.Examine; using Content.Server.Interaction; @@ -23,6 +24,7 @@ using Robust.Shared.Map; using Robust.Shared.Physics; using Robust.Shared.Physics.Components; using Robust.Shared.Player; +using Robust.Shared.Prototypes; using Robust.Shared.Utility; using SharedGunSystem = Content.Shared.Weapons.Ranged.Systems.SharedGunSystem; @@ -33,12 +35,35 @@ public sealed partial class GunSystem : SharedGunSystem [Dependency] private readonly IComponentFactory _factory = default!; [Dependency] private readonly ExamineSystem _examine = default!; [Dependency] private readonly InteractionSystem _interaction = default!; + [Dependency] private readonly PricingSystem _pricing = default!; [Dependency] private readonly StaminaSystem _stamina = default!; [Dependency] private readonly StunSystem _stun = default!; public const float DamagePitchVariation = MeleeWeaponSystem.DamagePitchVariation; public const float GunClumsyChance = 0.5f; + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnBallisticPrice); + } + + private void OnBallisticPrice(EntityUid uid, BallisticAmmoProviderComponent component, ref PriceCalculationEvent args) + { + if (string.IsNullOrEmpty(component.FillProto) || component.UnspawnedCount == 0) + return; + + if (!ProtoManager.TryIndex(component.FillProto, out var proto)) + { + Sawmill.Error($"Unable to find fill prototype for price on {component.FillProto} on {ToPrettyString(uid)}"); + return; + } + + // Probably good enough for most. + var price = _pricing.GetEstimatedPrice(proto); + args.Price += price * component.UnspawnedCount; + } + public override void Shoot(GunComponent gun, List ammo, EntityCoordinates fromCoordinates, EntityCoordinates toCoordinates, EntityUid? user = null) { // Try a clumsy roll diff --git a/Content.Shared/Cargo/Components/CargoShuttleComponent.cs b/Content.Shared/Cargo/Components/CargoShuttleComponent.cs index cba2196160..a4174bde15 100644 --- a/Content.Shared/Cargo/Components/CargoShuttleComponent.cs +++ b/Content.Shared/Cargo/Components/CargoShuttleComponent.cs @@ -12,7 +12,7 @@ public sealed class CargoShuttleComponent : Component public TimeSpan? NextCall; [ViewVariables(VVAccess.ReadWrite), DataField("cooldown")] - public float Cooldown = 150f; + public float Cooldown = 30f; [ViewVariables] public bool CanRecall; diff --git a/Content.Shared/UserInterface/StatValuesEuiMessage.cs b/Content.Shared/UserInterface/StatValuesEuiMessage.cs new file mode 100644 index 0000000000..4af086c872 --- /dev/null +++ b/Content.Shared/UserInterface/StatValuesEuiMessage.cs @@ -0,0 +1,18 @@ +using Content.Shared.Eui; +using Robust.Shared.Serialization; + +namespace Content.Shared.UserInterface; + +/// +/// It's a message not a state because it's for debugging and it makes it easier to bootstrap more data dumping. +/// +[Serializable, NetSerializable] +public sealed class StatValuesEuiMessage : EuiMessageBase +{ + /// + /// Titles for the window. + /// + public string Title = string.Empty; + public List Headers = new(); + public List Values = new(); +} diff --git a/Resources/Prototypes/Body/Parts/animal.yml b/Resources/Prototypes/Body/Parts/animal.yml index c2aa321d64..4f915ca87e 100644 --- a/Resources/Prototypes/Body/Parts/animal.yml +++ b/Resources/Prototypes/Body/Parts/animal.yml @@ -15,6 +15,8 @@ containers: bodypart: !type:Container ents: [] + - type: StaticPrice + price: 50 # For primates mainly - type: entity @@ -79,6 +81,8 @@ - type: Sprite netsync: false sprite: Mobs/Species/Human/organs.rsi + - type: StaticPrice + price: 50 - type: entity id: OrganAnimalLungs diff --git a/Resources/Prototypes/Body/Parts/human.yml b/Resources/Prototypes/Body/Parts/human.yml index 874b306a4e..6055e2752d 100644 --- a/Resources/Prototypes/Body/Parts/human.yml +++ b/Resources/Prototypes/Body/Parts/human.yml @@ -13,6 +13,8 @@ containers: bodypart: !type:Container ents: [] + - type: StaticPrice + price: 100 - type: entity id: TorsoHuman diff --git a/Resources/Prototypes/Body/Parts/silicon.yml b/Resources/Prototypes/Body/Parts/silicon.yml index 05eb122dbd..633fd8c1e9 100644 --- a/Resources/Prototypes/Body/Parts/silicon.yml +++ b/Resources/Prototypes/Body/Parts/silicon.yml @@ -11,6 +11,8 @@ containers: bodypart: !type:Container ents: [] + - type: StaticPrice + price: 100 - type: entity id: LeftArmBorg diff --git a/Resources/Prototypes/Body/Parts/skeleton.yml b/Resources/Prototypes/Body/Parts/skeleton.yml index 9494f6b5c6..d6477a134f 100644 --- a/Resources/Prototypes/Body/Parts/skeleton.yml +++ b/Resources/Prototypes/Body/Parts/skeleton.yml @@ -12,6 +12,8 @@ containers: bodypart: !type:Container ents: [] + - type: StaticPrice + price: 20 - type: entity id: TorsoSkeleton diff --git a/Resources/Prototypes/Body/Parts/slime.yml b/Resources/Prototypes/Body/Parts/slime.yml index 9c3c11747a..c2e77ecc1e 100644 --- a/Resources/Prototypes/Body/Parts/slime.yml +++ b/Resources/Prototypes/Body/Parts/slime.yml @@ -12,6 +12,8 @@ containers: bodypart: !type:Container ents: [] + - type: StaticPrice + price: 100 - type: entity id: TorsoSlime diff --git a/Resources/Prototypes/Body/Parts/vox.yml b/Resources/Prototypes/Body/Parts/vox.yml index 5bbd4e15fb..f2bbe87138 100644 --- a/Resources/Prototypes/Body/Parts/vox.yml +++ b/Resources/Prototypes/Body/Parts/vox.yml @@ -13,6 +13,8 @@ containers: bodypart: !type:Container ents: [] + - type: StaticPrice + price: 100 - type: entity id: TorsoVox diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_fun.yml b/Resources/Prototypes/Catalog/Cargo/cargo_fun.yml index f4eb92fe25..c1dd69dbcf 100644 --- a/Resources/Prototypes/Catalog/Cargo/cargo_fun.yml +++ b/Resources/Prototypes/Catalog/Cargo/cargo_fun.yml @@ -54,6 +54,6 @@ sprite: Objects/Vehicles/atv.rsi state: vehicle product: CrateFunATV - cost: 6000 + cost: 1500 category: Fun group: market diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_livestock.yml b/Resources/Prototypes/Catalog/Cargo/cargo_livestock.yml index b2859f7ad9..1e5cc2da3f 100644 --- a/Resources/Prototypes/Catalog/Cargo/cargo_livestock.yml +++ b/Resources/Prototypes/Catalog/Cargo/cargo_livestock.yml @@ -4,7 +4,7 @@ sprite: Mobs/Animals/bee.rsi state: 0 product: CrateNPCBee - cost: 1000 + cost: 4000 category: Livestock group: market @@ -14,7 +14,7 @@ sprite: Mobs/Animals/butterfly.rsi state: butterfly product: CrateNPCButterflies - cost: 1000 + cost: 2500 category: Livestock group: market @@ -34,7 +34,7 @@ sprite: Mobs/Animals/chicken.rsi state: icon-1 product: CrateNPCChicken - cost: 1500 + cost: 2500 category: Livestock group: market @@ -44,7 +44,7 @@ sprite: Mobs/Animals/duck.rsi state: icon-0 product: CrateNPCDuck - cost: 2000 + cost: 3500 category: Livestock group: market @@ -114,7 +114,7 @@ sprite: Mobs/Animals/mouse.rsi state: icon-0 product: CrateNPCMouse - cost: 1500 + cost: 2500 category: Livestock group: market @@ -124,7 +124,7 @@ sprite: Mobs/Animals/parrot.rsi state: parrot product: CrateNPCParrot - cost: 1000 + cost: 2000 category: Livestock group: market @@ -144,6 +144,6 @@ sprite: Mobs/Animals/snake.rsi state: snake product: CrateNPCSnake - cost: 1000 + cost: 2000 category: Livestock group: market diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_medical.yml b/Resources/Prototypes/Catalog/Cargo/cargo_medical.yml index f63a94d912..078e2ccbdb 100644 --- a/Resources/Prototypes/Catalog/Cargo/cargo_medical.yml +++ b/Resources/Prototypes/Catalog/Cargo/cargo_medical.yml @@ -4,7 +4,7 @@ sprite: Objects/Specific/Medical/firstaidkits.rsi state: firstaid product: CrateMedicalSupplies - cost: 1000 + cost: 2400 category: Medical group: market @@ -14,6 +14,6 @@ sprite: Objects/Specific/Chemistry/beaker.rsi state: beaker product: CrateChemistrySupplies - cost: 500 + cost: 650 category: Medical group: market diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_security.yml b/Resources/Prototypes/Catalog/Cargo/cargo_security.yml index a69ca24572..7c98f19cf4 100644 --- a/Resources/Prototypes/Catalog/Cargo/cargo_security.yml +++ b/Resources/Prototypes/Catalog/Cargo/cargo_security.yml @@ -24,7 +24,7 @@ sprite: Objects/Weapons/Guns/Battery/disabler.rsi state: base product: CrateSecurityNonlethal - cost: 1500 + cost: 2100 category: Security group: market diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml index 2c0079d502..ba68a4718a 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml @@ -40,6 +40,8 @@ interfaces: - key: enum.StorageUiKey.Key type: StorageBoundUserInterface + - type: StaticPrice + price: 80 - type: entity abstract: true diff --git a/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml b/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml index bfa406c41e..2a16608d73 100644 --- a/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml +++ b/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml @@ -31,6 +31,8 @@ enum.ToggleVisuals.Layer: True: {state: icon-on} False: {state: icon} + - type: StaticPrice + price: 200 - type: entity parent: ClothingShoesBootsMag diff --git a/Resources/Prototypes/Entities/Clothing/base_clothing.yml b/Resources/Prototypes/Entities/Clothing/base_clothing.yml index d110a13775..2f57dc258e 100644 --- a/Resources/Prototypes/Entities/Clothing/base_clothing.yml +++ b/Resources/Prototypes/Entities/Clothing/base_clothing.yml @@ -8,3 +8,5 @@ - type: Tag tags: - WhitelistChameleon + - type: StaticPrice + price: 15 diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/food_base.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/food_base.yml index f9877da959..6142e2076e 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/food_base.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/food_base.yml @@ -14,6 +14,8 @@ - type: SpaceGarbage - type: Sprite netsync: false + - type: StaticPrice + price: 50 # This base type is used to cover all of the "obvious" things that should be doable to open-package food. # Practically this means injection. diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/cigarette.yml b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/cigarette.yml index 87b84eeb16..13569c5754 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/cigarette.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/cigarette.yml @@ -1,6 +1,3 @@ -- type: Tag - id: Cigarette - - type: entity id: Cigarette parent: BaseCigar diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/base_smokeables.yml b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/base_smokeables.yml index 896ac02a45..cf9bfa476b 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/base_smokeables.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/base_smokeables.yml @@ -15,6 +15,8 @@ - Trash - type: Recyclable - type: SpaceGarbage + - type: StaticPrice + price: 5 # Base for all cigars and cigarettes. - type: entity diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/base_machineboard.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/base_machineboard.yml index 63e2e5fae6..0ff99e2902 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/base_machineboard.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/base_machineboard.yml @@ -13,4 +13,4 @@ tags: - DroneUsable - type: StaticPrice - price: 75 + price: 100 diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml index ab47c8edc2..57e60c0b7b 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml @@ -12,7 +12,7 @@ tags: - DroneUsable - type: StaticPrice - price: 75 + price: 100 - type: entity parent: BaseComputerCircuitboard diff --git a/Resources/Prototypes/Entities/Objects/Devices/Electronics/firelock.yml b/Resources/Prototypes/Entities/Objects/Devices/Electronics/firelock.yml index 8e4648aa5f..1e66ada1ea 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Electronics/firelock.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Electronics/firelock.yml @@ -12,3 +12,5 @@ sprite: Objects/Misc/module.rsi state: mainboard netsync: false + - type: StaticPrice + price: 100 diff --git a/Resources/Prototypes/Entities/Objects/Devices/Electronics/power_electronics.yml b/Resources/Prototypes/Entities/Objects/Devices/Electronics/power_electronics.yml index b009247232..4932bfdbb0 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Electronics/power_electronics.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Electronics/power_electronics.yml @@ -10,6 +10,8 @@ sprite: Objects/Misc/module.rsi state: charger_APC netsync: false + - type: StaticPrice + price: 100 # Wallmount Substation - type: entity @@ -22,7 +24,9 @@ sprite: Objects/Misc/module.rsi state: charger_APC netsync: false - + - type: StaticPrice + price: 100 + # Wallmount Generator - type: entity id: WallmountGeneratorElectronics @@ -34,7 +38,9 @@ sprite: Objects/Misc/module.rsi state: charger_APC netsync: false - + - type: StaticPrice + price: 100 + # APU - type: entity id: WallmountGeneratorAPUElectronics @@ -46,6 +52,8 @@ sprite: Objects/Misc/module.rsi state: charger_APC netsync: false + - type: StaticPrice + price: 100 # Solar Tracker Electronics - type: entity @@ -58,3 +66,5 @@ sprite: Objects/Misc/module.rsi state: generic netsync: false + - type: StaticPrice + price: 100 diff --git a/Resources/Prototypes/Entities/Objects/Devices/Electronics/signaller.yml b/Resources/Prototypes/Entities/Objects/Devices/Electronics/signaller.yml index f46e3b4f26..126ef5668a 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Electronics/signaller.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Electronics/signaller.yml @@ -5,9 +5,11 @@ id: RemoteSignaller name: remote signaller description: A handheld device used for remotely sending signals to objects. - components: + components: - type: Sprite sprite: Objects/Devices/signaller.rsi state: signaller - type: Signaller - - type: UseDelay \ No newline at end of file + - type: UseDelay + - type: StaticPrice + price: 40 diff --git a/Resources/Prototypes/Entities/Objects/Devices/Electronics/triggers.yml b/Resources/Prototypes/Entities/Objects/Devices/Electronics/triggers.yml index 3b5083116a..f8bae2881c 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Electronics/triggers.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Electronics/triggers.yml @@ -25,6 +25,8 @@ delayOptions: [3, 5, 10, 15, 30] initialBeepDelay: 0 beepSound: /Audio/Machines/Nuke/general_beep.ogg + - type: StaticPrice + price: 40 - type: entity parent: TimerTrigger @@ -38,4 +40,6 @@ - type: PayloadTrigger components: - type: TriggerOnSignal - - type: SignalReceiver \ No newline at end of file + - type: SignalReceiver + - type: StaticPrice + price: 40 diff --git a/Resources/Prototypes/Entities/Objects/Devices/holoprojectors.yml b/Resources/Prototypes/Entities/Objects/Devices/holoprojectors.yml index e99c0d00d7..a2789a15f2 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/holoprojectors.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/holoprojectors.yml @@ -33,3 +33,5 @@ sprite: Objects/Devices/Holoprojectors/atmos.rsi state: icon netsync: false + - type: StaticPrice + price: 80 diff --git a/Resources/Prototypes/Entities/Objects/Devices/payload.yml b/Resources/Prototypes/Entities/Objects/Devices/payload.yml index fce48952e0..beab635e9e 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/payload.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/payload.yml @@ -81,6 +81,8 @@ containers: BeakerSlotA: !type:ContainerSlot BeakerSlotB: !type:ContainerSlot + - type: StaticPrice + price: 60 - type: entity name: flash payload diff --git a/Resources/Prototypes/Entities/Objects/Fun/Instruments/base_instruments.yml b/Resources/Prototypes/Entities/Objects/Fun/Instruments/base_instruments.yml index 3bff802b41..df8cc5dc19 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/Instruments/base_instruments.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/Instruments/base_instruments.yml @@ -18,6 +18,8 @@ type: InstrumentBoundUserInterface - type: Item size: 24 + - type: StaticPrice + price: 200 #These are for instruments that are larger, can't be picked up, or have collision - type: entity @@ -67,6 +69,8 @@ - HighImpassable - MidImpassable - BulletImpassable + - type: StaticPrice + price: 300 - type: entity parent: BasePlaceableInstrument @@ -75,4 +79,4 @@ abstract: true components: - type: Rotatable - rotateWhileAnchored: true \ No newline at end of file + rotateWhileAnchored: true diff --git a/Resources/Prototypes/Entities/Objects/Fun/crayons.yml b/Resources/Prototypes/Entities/Objects/Fun/crayons.yml index 0085148ed7..0dc6cb3045 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/crayons.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/crayons.yml @@ -27,6 +27,8 @@ Quantity: 3 - ReagentId: MindbreakerToxin Quantity: 2 + - type: StaticPrice + price: 5 - type: entity parent: Crayon diff --git a/Resources/Prototypes/Entities/Objects/Materials/Sheets/glass.yml b/Resources/Prototypes/Entities/Objects/Materials/Sheets/glass.yml index 9b7fb8d34c..0a0c876e99 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/Sheets/glass.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/Sheets/glass.yml @@ -175,7 +175,7 @@ components: - type: Material materials: - ReinforcedPlasmaGlass: 500 + ReinforcedPlasmaGlass: 100 - type: Stack stackType: ReinforcedPlasmaGlass - type: Sprite diff --git a/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml b/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml index be10a0001f..632b287ecd 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml @@ -64,7 +64,7 @@ components: - type: Material materials: - Plasma: 500 + Plasma: 100 - type: Stack stackType: Plasma - type: Sprite diff --git a/Resources/Prototypes/Entities/Objects/Materials/parts.yml b/Resources/Prototypes/Entities/Objects/Materials/parts.yml index 1e2a325dd3..b629352d47 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/parts.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/parts.yml @@ -28,7 +28,7 @@ - type: entity parent: PartBase id: PartRodMetal - name: metals rods + name: metal rods suffix: Full components: - type: Stack @@ -53,6 +53,10 @@ outputs: - Lattice - FloorReinforced + - type: StaticPrice + price: 0 + - type: StackPrice + price: 5 - type: entity parent: PartRodMetal diff --git a/Resources/Prototypes/Entities/Objects/Misc/bedsheets.yml b/Resources/Prototypes/Entities/Objects/Misc/bedsheets.yml index 9edc1aeb31..9c0713d3ca 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/bedsheets.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/bedsheets.yml @@ -19,6 +19,8 @@ quickEquip: true slots: - neck + - type: StaticPrice + price: 100 - type: entity id: BedsheetBlack diff --git a/Resources/Prototypes/Entities/Objects/Misc/botparts.yml b/Resources/Prototypes/Entities/Objects/Misc/botparts.yml index a0dffdc3f6..fbbdca3909 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/botparts.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/botparts.yml @@ -10,3 +10,5 @@ - type: Tag tags: - ProximitySensor + - type: StaticPrice + price: 40 diff --git a/Resources/Prototypes/Entities/Objects/Power/antimatter_jar.yml b/Resources/Prototypes/Entities/Objects/Power/antimatter_jar.yml index d856cc506e..6145dd3361 100644 --- a/Resources/Prototypes/Entities/Objects/Power/antimatter_jar.yml +++ b/Resources/Prototypes/Entities/Objects/Power/antimatter_jar.yml @@ -12,3 +12,5 @@ state: jar netsync: false - type: AMEFuelContainer + - type: StaticPrice + price: 500 diff --git a/Resources/Prototypes/Entities/Objects/Power/antimatter_part.yml b/Resources/Prototypes/Entities/Objects/Power/antimatter_part.yml index 14da557dca..ecf110f09b 100644 --- a/Resources/Prototypes/Entities/Objects/Power/antimatter_part.yml +++ b/Resources/Prototypes/Entities/Objects/Power/antimatter_part.yml @@ -11,3 +11,5 @@ sprite: Objects/Power/AME/ame_part.rsi state: box - type: AMEPart + - type: StaticPrice + price: 500 diff --git a/Resources/Prototypes/Entities/Objects/Power/powercells.yml b/Resources/Prototypes/Entities/Objects/Power/powercells.yml index c0bdd68228..5a5147c03d 100644 --- a/Resources/Prototypes/Entities/Objects/Power/powercells.yml +++ b/Resources/Prototypes/Entities/Objects/Power/powercells.yml @@ -28,6 +28,8 @@ - DroneUsable - type: Appearance - type: PowerCellVisuals + - type: StaticPrice + price: 100 - type: entity name: potato battery diff --git a/Resources/Prototypes/Entities/Objects/Shields/shields.yml b/Resources/Prototypes/Entities/Objects/Shields/shields.yml index b5fceeea21..09e7e28bb4 100644 --- a/Resources/Prototypes/Entities/Objects/Shields/shields.yml +++ b/Resources/Prototypes/Entities/Objects/Shields/shields.yml @@ -50,6 +50,9 @@ parent: BaseShield id: RiotShield description: A large tower shield. Good for controlling crowds. + components: + - type: StaticPrice + price: 100 - type: entity name: riot laser shield diff --git a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml index 271a4f6c88..c84b855c00 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml @@ -10,6 +10,8 @@ netsync: true - type: Item size: 2 + - type: StaticPrice + price: 20 - type: entity parent: SeedBase diff --git a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml index 383e14ed1c..750c28d3ac 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml @@ -61,6 +61,8 @@ sprite: Objects/Tools/Hydroponics/scythe.rsi slots: - back + - type: StaticPrice + price: 40 - type: entity name: hatchet diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/handheld_crew_monitor.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/handheld_crew_monitor.yml index 4a553949b9..21e20ba61f 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/handheld_crew_monitor.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/handheld_crew_monitor.yml @@ -19,3 +19,5 @@ receiveFrequencyId: SuitSensor - type: WirelessNetworkConnection range: 500 + - type: StaticPrice + price: 500 diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/healing.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/healing.yml index 34e2bca274..8111288894 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/healing.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/healing.yml @@ -8,6 +8,9 @@ - type: Item sprite: Objects/Specific/Medical/medical.rsi heldPrefix: ointment + # Inherited + - type: StaticPrice + price: 0 - type: entity name: ointment @@ -35,6 +38,8 @@ stackType: Ointment max: 10 count: 10 + - type: StackPrice + price: 10 - type: entity name: bruise pack @@ -61,6 +66,8 @@ stackType: Brutepack max: 10 count: 10 + - type: StackPrice + price: 10 - type: entity name: roll of gauze @@ -91,6 +98,8 @@ stackType: Gauze max: 10 count: 10 + - type: StackPrice + price: 10 - type: entity id: Gauze1 diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/morgue.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/morgue.yml index 3a081b80ca..e6d0af9afc 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/morgue.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/morgue.yml @@ -72,6 +72,8 @@ containers: entity_storage: !type:Container paper_label: !type:ContainerSlot + - type: StaticPrice + price: 50 - type: entity id: BodyBag_Folded diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml index dc98802deb..98780d7489 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml @@ -7,6 +7,8 @@ components: - type: Sprite netsync: false + - type: StaticPrice + price: 60 # Cautery diff --git a/Resources/Prototypes/Entities/Objects/Specific/Security/barrier.yml b/Resources/Prototypes/Entities/Objects/Specific/Security/barrier.yml index 3ae354ce1c..dd60d484cf 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Security/barrier.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Security/barrier.yml @@ -54,3 +54,5 @@ - type: Appearance visuals: - type: DeployableBarrierVisualizer + - type: StaticPrice + price: 200 diff --git a/Resources/Prototypes/Entities/Objects/Specific/atmos.yml b/Resources/Prototypes/Entities/Objects/Specific/atmos.yml index 2312a239cb..21ce9f46d4 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/atmos.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/atmos.yml @@ -30,3 +30,5 @@ - type: Tag tags: - DroneUsable + - type: StaticPrice + price: 80 diff --git a/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml b/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml index 2c806a84dc..0f68f4befe 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml @@ -78,6 +78,8 @@ damage: types: Blunt: 5 + - type: StaticPrice + price: 30 - type: entity name: beaker @@ -113,6 +115,8 @@ - type: SolutionContainerVisuals maxFillLevels: 6 fillBaseName: beakerlarge + - type: StaticPrice + price: 40 - type: entity name: cryostasis beaker @@ -205,6 +209,8 @@ - type: SolutionContainerVisuals maxFillLevels: 1 fillBaseName: dropper + - type: StaticPrice + price: 40 - type: entity name: syringe diff --git a/Resources/Prototypes/Entities/Objects/Tools/airlock_painter.yml b/Resources/Prototypes/Entities/Objects/Tools/airlock_painter.yml index 760b871827..2f540ac934 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/airlock_painter.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/airlock_painter.yml @@ -18,3 +18,5 @@ whitelist: tags: - PaintableAirlock + - type: StaticPrice + price: 40 diff --git a/Resources/Prototypes/Entities/Objects/Tools/flashlights.yml b/Resources/Prototypes/Entities/Objects/Tools/flashlights.yml index dbbf2963a4..5efab18f72 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/flashlights.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/flashlights.yml @@ -52,6 +52,8 @@ - type: Appearance visuals: - type: FlashLightVisualizer + - type: StaticPrice + price: 40 - type: entity name: seclite diff --git a/Resources/Prototypes/Entities/Objects/Tools/light_replacer.yml b/Resources/Prototypes/Entities/Objects/Tools/light_replacer.yml index b755f18470..b9b526f1a5 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/light_replacer.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/light_replacer.yml @@ -20,3 +20,5 @@ - type: Tag tags: - DroneUsable + - type: StaticPrice + price: 100 diff --git a/Resources/Prototypes/Entities/Objects/Tools/t-ray.yml b/Resources/Prototypes/Entities/Objects/Tools/t-ray.yml index 7b180ab655..24a6a238e2 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/t-ray.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/t-ray.yml @@ -22,3 +22,5 @@ - type: Tag tags: - DroneUsable + - type: StaticPrice + price: 60 diff --git a/Resources/Prototypes/Entities/Objects/Tools/tools.yml b/Resources/Prototypes/Entities/Objects/Tools/tools.yml index b2249bf9c6..bc50916b7e 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/tools.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/tools.yml @@ -35,6 +35,8 @@ - type: Item sprite: Objects/Tools/wirecutters.rsi - type: LatticeCutting + - type: StaticPrice + price: 40 - type: entity name: screwdriver @@ -71,6 +73,8 @@ available: - enum.DamageStateVisualLayers.Base: screwdriver: Rainbow + - type: StaticPrice + price: 40 - type: entity name: wrench @@ -100,6 +104,8 @@ - Anchoring useSound: path: /Audio/Items/ratchet.ogg + - type: StaticPrice + price: 40 - type: entity name: crowbar @@ -131,6 +137,8 @@ useSound: path: /Audio/Items/crowbar.ogg - type: TilePrying + - type: StaticPrice + price: 40 - type: entity name: emergency crowbar @@ -190,6 +198,8 @@ - type: Tag tags: - DroneUsable + - type: StaticPrice + price: 60 - type: entity name: power drill @@ -229,6 +239,8 @@ path: /Audio/Items/drill_use.ogg changeSound: path: /Audio/Items/change_drill.ogg + - type: StaticPrice + price: 60 - type: entity name: RCD @@ -249,6 +261,8 @@ quickEquip: false slots: - Belt + - type: StaticPrice + price: 100 - type: entity name: RCD Ammo @@ -263,6 +277,8 @@ - type: Item sprite: Objects/Tools/rcd.rsi heldPrefix: ammo + - type: StaticPrice + price: 60 - type: entity name: shovel diff --git a/Resources/Prototypes/Entities/Objects/Tools/welders.yml b/Resources/Prototypes/Entities/Objects/Tools/welders.yml index d3c694f7c1..313eb70ec5 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/welders.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/welders.yml @@ -51,6 +51,8 @@ color: orange - type: Appearance - type: RequiresEyeProtection + - type: StaticPrice + price: 40 - type: entity name: industrial welding tool diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/antimaterial.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/antimaterial.yml index 5618adfdfe..57612048d1 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/antimaterial.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/antimaterial.yml @@ -16,3 +16,5 @@ map: ["enum.AmmoVisualLayers.Base"] - type: Appearance - type: SpentAmmoVisuals + - type: StaticPrice + price: 20 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/caseless_rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/caseless_rifle.yml index 4d9b184c5f..6200c50499 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/caseless_rifle.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/caseless_rifle.yml @@ -19,6 +19,8 @@ map: ["enum.AmmoVisualLayers.Base"] - type: Appearance - type: SpentAmmoVisuals + - type: StaticPrice + price: 10 - type: entity id: CartridgeCaselessRifle diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/heavy_rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/heavy_rifle.yml index d8f9dde395..c3b3ced849 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/heavy_rifle.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/heavy_rifle.yml @@ -18,6 +18,8 @@ map: ["enum.AmmoVisualLayers.Base"] - type: Appearance - type: SpentAmmoVisuals + - type: StaticPrice + price: 10 - type: entity id: CartridgeMinigun diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/light_rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/light_rifle.yml index 8eadd268b1..5ffb67b65b 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/light_rifle.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/light_rifle.yml @@ -18,6 +18,8 @@ map: ["enum.AmmoVisualLayers.Base"] - type: Appearance - type: SpentAmmoVisuals + - type: StaticPrice + price: 10 - type: entity id: CartridgeLightRifle diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/magnum.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/magnum.yml index 335dfbd402..aa82621138 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/magnum.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/magnum.yml @@ -18,6 +18,8 @@ map: ["enum.AmmoVisualLayers.Base"] - type: Appearance - type: SpentAmmoVisuals + - type: StaticPrice + price: 10 - type: entity id: CartridgeMagnum diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/pistol.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/pistol.yml index dde7304678..1a11d21dfc 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/pistol.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/pistol.yml @@ -18,6 +18,8 @@ map: ["enum.AmmoVisualLayers.Base"] - type: Appearance - type: SpentAmmoVisuals + - type: StaticPrice + price: 10 - type: entity id: CartridgePistol diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/rifle.yml index e058757a50..8da032ebb3 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/rifle.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/rifle.yml @@ -18,6 +18,8 @@ map: ["enum.AmmoVisualLayers.Base"] - type: Appearance - type: SpentAmmoVisuals + - type: StaticPrice + price: 10 - type: entity id: CartridgeRifle diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/toy.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/toy.yml index b28f05adf6..b05202a170 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/toy.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/toy.yml @@ -17,6 +17,8 @@ map: ["enum.AmmoVisualLayers.Base"] - type: SpentAmmoVisuals - type: Appearance + - type: StaticPrice + price: 5 - type: entity id: CartridgeCap diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/explosives.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/explosives.yml index a2c926b8dd..cca919abc5 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/explosives.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/explosives.yml @@ -18,6 +18,8 @@ netsync: false sprite: Objects/Weapons/Guns/Ammunition/Explosives/explosives.rsi state: rpg + - type: StaticPrice + price: 20 - type: entity id: CartridgeRocketSlow @@ -36,6 +38,8 @@ - type: Sprite sprite: Objects/Weapons/Guns/Ammunition/Explosives/explosives.rsi state: frag + - type: StaticPrice + price: 20 # Grenades diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml index da81d464d5..1017a35d29 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml @@ -29,6 +29,8 @@ steps: 5 zeroVisible: false - type: Appearance + - type: StaticPrice + price: 500 - type: entity id: BaseWeaponBatterySmall diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/HMGs/hmgs.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/HMGs/hmgs.yml index 957aa63004..264842d2bb 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/HMGs/hmgs.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/HMGs/hmgs.yml @@ -17,6 +17,8 @@ path: /Audio/Weapons/Guns/Gunshots/lmg.ogg soundEmpty: path: /Audio/Weapons/Guns/Empty/lmg_empty.ogg + - type: StaticPrice + price: 500 # No chamber because HMG may want its own - type: entity diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml index 89bda8748b..a46c8ec7c3 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml @@ -51,6 +51,8 @@ containers: gun_magazine: !type:ContainerSlot gun_chamber: !type:ContainerSlot + - type: StaticPrice + price: 500 - type: entity name: L6 SAW diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml index a548a16ffc..7d554b8d12 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml @@ -14,6 +14,8 @@ - Back - type: Item size: 60 + - type: StaticPrice + price: 500 - type: entity name: china lake diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml index ef57db9612..c80552e96b 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml @@ -55,6 +55,8 @@ steps: 1 zeroVisible: true - type: Appearance + - type: StaticPrice + price: 500 - type: entity name: viper diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml index c75774b43f..4d9e640a0f 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml @@ -38,6 +38,8 @@ path: /Audio/Weapons/Guns/MagOut/revolver_magout.ogg soundInsert: path: /Audio/Weapons/Guns/MagIn/revolver_magin.ogg + - type: StaticPrice + price: 500 - type: entity name: Deckard diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml index 07a1dd29e7..e43a11d508 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml @@ -46,6 +46,8 @@ containers: gun_magazine: !type:ContainerSlot gun_chamber: !type:ContainerSlot + - type: StaticPrice + price: 500 - type: entity name: AKMS diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml index e2e7ac857e..1ed0e17654 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml @@ -49,6 +49,8 @@ containers: gun_magazine: !type:ContainerSlot gun_chamber: !type:ContainerSlot + - type: StaticPrice + price: 500 - type: entity name: Atreides diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml index 833f43a286..0fed3a6e61 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml @@ -42,6 +42,8 @@ containers: ballistic-ammo: !type:Container ents: [] + - type: StaticPrice + price: 500 - type: entity name: Bulldog @@ -96,6 +98,8 @@ steps: 1 zeroVisible: true - type: Appearance + - type: StaticPrice + price: 500 - type: entity name: double-barreled shotgun diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml index c2a9502503..035ceb07fe 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml @@ -36,6 +36,8 @@ containers: ballistic-ammo: !type:Container ents: [] + - type: StaticPrice + price: 500 - type: entity name: Kardashev-Mosin diff --git a/Resources/Prototypes/Entities/Objects/Weapons/security.yml b/Resources/Prototypes/Entities/Objects/Weapons/security.yml index 9a4616e080..508b94d782 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/security.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/security.yml @@ -45,6 +45,8 @@ enum.ToggleVisuals.Layer: True: {state: stunbaton_on} False: {state: stunbaton_off} + - type: StaticPrice + price: 100 - type: entity name: flash @@ -67,6 +69,8 @@ size: 5 sprite: Objects/Weapons/Melee/flash.rsi - type: ItemCooldown + - type: StaticPrice + price: 40 - type: entity name: portable flasher diff --git a/Resources/Prototypes/Entities/Objects/base_item.yml b/Resources/Prototypes/Entities/Objects/base_item.yml index 71372ab368..de09c0aa89 100644 --- a/Resources/Prototypes/Entities/Objects/base_item.yml +++ b/Resources/Prototypes/Entities/Objects/base_item.yml @@ -6,7 +6,7 @@ - type: Item size: 5 - type: StaticPrice - price: 5 + price: 20 - type: Clickable - type: InteractionOutline - type: MovedByPressure diff --git a/Resources/Prototypes/Entities/Structures/Dispensers/base_structuredispensers.yml b/Resources/Prototypes/Entities/Structures/Dispensers/base_structuredispensers.yml index c2855fb121..59ab255968 100644 --- a/Resources/Prototypes/Entities/Structures/Dispensers/base_structuredispensers.yml +++ b/Resources/Prototypes/Entities/Structures/Dispensers/base_structuredispensers.yml @@ -59,3 +59,5 @@ machine_board: !type:Container machine_parts: !type:Container ReagentDispenser-beaker: !type:ContainerSlot + - type: StaticPrice + price: 1000 diff --git a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml index b35a58bd21..fecab7ada1 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml @@ -99,5 +99,7 @@ mode: NoSprite - type: PaintableAirlock group: Standard + - type: StaticPrice + price: 150 placement: mode: SnapgridCenter diff --git a/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml b/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml index 0aef5f1338..1b7f75cefe 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml @@ -99,6 +99,8 @@ node: Firelock - type: WallMount arc: 360 + - type: StaticPrice + price: 150 - type: entity id: FirelockGlass @@ -152,3 +154,5 @@ occludes: false - type: Physics canCollide: false + - type: StaticPrice + price: 100 diff --git a/Resources/Prototypes/Entities/Structures/Doors/Windoors/base_structurewindoors.yml b/Resources/Prototypes/Entities/Structures/Doors/Windoors/base_structurewindoors.yml index 43056ffda8..6d399d3d4c 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Windoors/base_structurewindoors.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Windoors/base_structurewindoors.yml @@ -111,6 +111,8 @@ - type: Construction graph: Windoor node: windoor + - type: StaticPrice + price: 100 - type: entity id: BaseSecureWindoor diff --git a/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml b/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml index ff829d9254..94c003589c 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml @@ -40,6 +40,8 @@ - !type:PlaySoundBehavior sound: path: /Audio/Effects/metalbreak.ogg + - type: StaticPrice + price: 50 - type: entity name: chair diff --git a/Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml b/Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml index edbbce118d..59b42c2ecf 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml @@ -55,6 +55,8 @@ key: rollerbed - type: RollerbedVisualizer key: rollerbed + - type: StaticPrice + price: 200 - type: entity id: CheapRollerBed diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml index c9d4e553fb..2af2d95236 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml @@ -33,6 +33,8 @@ bodyBroken: arcade - type: Anchorable - type: Pullable + - type: StaticPrice + price: 300 - type: entity id: SpaceVillainArcade diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/base_structurecomputers.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/base_structurecomputers.yml index d66c499153..f1bca1fd55 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Computers/base_structurecomputers.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/base_structurecomputers.yml @@ -53,3 +53,5 @@ containers: board: !type:Container ents: [] + - type: StaticPrice + price: 400 diff --git a/Resources/Prototypes/Entities/Structures/Machines/cloning_machine.yml b/Resources/Prototypes/Entities/Structures/Machines/cloning_machine.yml index 53e01e9e4c..4b178056f9 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/cloning_machine.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/cloning_machine.yml @@ -63,3 +63,5 @@ enum.CloningPodStatus.Gore: pod_g enum.CloningPodStatus.Idle: pod_0 - type: Climbable + - type: StaticPrice + price: 1000 diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index f1246a135f..d8d72d0252 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -85,6 +85,8 @@ anchored: true - type: Pullable - type: Lathe + - type: StaticPrice + price: 800 - type: entity parent: [ BaseMachinePowered, ConstructibleMachine ] diff --git a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/pipes.yml b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/pipes.yml index a2e923cb5e..ee049039bc 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/pipes.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/pipes.yml @@ -48,6 +48,8 @@ range: 2 sound: path: /Audio/Ambience/Objects/gas_hiss.ogg + - type: StaticPrice + price: 100 #Note: The PipeDirection of the PipeNode should be the south-facing version, because the entity starts at an angle of 0 (south) diff --git a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml index 2e9bf03450..80f3dcea50 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml @@ -246,6 +246,8 @@ !type:PipeNode nodeGroupID: Pipe pipeDirection: South + - type: StaticPrice + price: 500 - type: entity parent: BaseGasThermoMachine diff --git a/Resources/Prototypes/Entities/Structures/Piping/Disposal/units.yml b/Resources/Prototypes/Entities/Structures/Piping/Disposal/units.yml index 00ea4dddf2..4ceb151459 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Disposal/units.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Disposal/units.yml @@ -74,6 +74,8 @@ - type: ContainerContainer containers: DisposalUnit: !type:Container + - type: StaticPrice + price: 100 - type: entity id: DisposalUnit diff --git a/Resources/Prototypes/Entities/Structures/Power/Generation/generators.yml b/Resources/Prototypes/Entities/Structures/Power/Generation/generators.yml index 02478b07c4..a02475ca1d 100644 --- a/Resources/Prototypes/Entities/Structures/Power/Generation/generators.yml +++ b/Resources/Prototypes/Entities/Structures/Power/Generation/generators.yml @@ -67,6 +67,8 @@ maxIntensity: 100 intensitySlope: 2 totalIntensity: 200 + - type: StaticPrice + price: 500 # Base Wallmount Generator diff --git a/Resources/Prototypes/Entities/Structures/Power/apc.yml b/Resources/Prototypes/Entities/Structures/Power/apc.yml index 29c82cfc9d..5d0287b279 100644 --- a/Resources/Prototypes/Entities/Structures/Power/apc.yml +++ b/Resources/Prototypes/Entities/Structures/Power/apc.yml @@ -92,6 +92,8 @@ - !type:DoActsBehavior acts: [ "Destruction" ] - type: StationInfiniteBatteryTarget + - type: StaticPrice + price: 500 # APC under construction - type: entity diff --git a/Resources/Prototypes/Entities/Structures/Power/smes.yml b/Resources/Prototypes/Entities/Structures/Power/smes.yml index 39db24851c..e555728bdb 100644 --- a/Resources/Prototypes/Entities/Structures/Power/smes.yml +++ b/Resources/Prototypes/Entities/Structures/Power/smes.yml @@ -58,6 +58,8 @@ - type: Machine board: SMESMachineCircuitboard - type: StationInfiniteBatteryTarget + - type: StaticPrice + price: 750 # SMES' in use diff --git a/Resources/Prototypes/Entities/Structures/Storage/morgue.yml b/Resources/Prototypes/Entities/Structures/Storage/morgue.yml index f7546a7172..dd72e44e1d 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/morgue.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/morgue.yml @@ -68,6 +68,8 @@ - type: Transform anchored: true - type: AntiRottingContainer + - type: StaticPrice + price: 200 #needs to be removed - type: entity @@ -156,4 +158,4 @@ - type: Sprite netsync: false sprite: Structures/Storage/morgue.rsi - state: crema_tray \ No newline at end of file + state: crema_tray diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/base_structuresigns.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/base_structuresigns.yml index e1a0aa1e84..61823c866f 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/base_structuresigns.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/base_structuresigns.yml @@ -33,3 +33,5 @@ sprite: Structures/Wallmounts/signs.rsi netsync: false snapCardinals: true + - type: StaticPrice + price: 20 diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/surveillance_camera.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/surveillance_camera.yml index 3fb20fcac7..373504bf4d 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/surveillance_camera.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/surveillance_camera.yml @@ -43,6 +43,8 @@ type: SurveillanceCameraSetupBoundUi - key: enum.WiresUiKey.Key type: WiresBoundUserInterface + - type: StaticPrice + price: 200 placement: mode: SnapgridCenter snap: diff --git a/Resources/Prototypes/Entities/Structures/Walls/walls.yml b/Resources/Prototypes/Entities/Structures/Walls/walls.yml index 98d34f27bb..34b68de81a 100644 --- a/Resources/Prototypes/Entities/Structures/Walls/walls.yml +++ b/Resources/Prototypes/Entities/Structures/Walls/walls.yml @@ -44,6 +44,8 @@ sizeX: 32 sizeY: 32 - type: Airtight + - type: StaticPrice + price: 75 - type: entity parent: BaseWall @@ -447,7 +449,7 @@ visuals: - type: ReinforcedWallVisualizer - type: StaticPrice - price: 41.5 # total material cost. If you change the recipe for the wall you should recalculate this. + price: 150 # Riveting - type: entity @@ -479,6 +481,8 @@ - type: IconSmooth key: walls base: riveted + - type: StaticPrice + price: 150 - type: entity parent: BaseWall diff --git a/Resources/Prototypes/Entities/Structures/Windows/reinforced.yml b/Resources/Prototypes/Entities/Structures/Windows/reinforced.yml index 3e732c9118..3805c482bd 100644 --- a/Resources/Prototypes/Entities/Structures/Windows/reinforced.yml +++ b/Resources/Prototypes/Entities/Structures/Windows/reinforced.yml @@ -49,7 +49,7 @@ damageOverlay: sprite: Structures/Windows/cracks.rsi - type: StaticPrice - price: 0.75 + price: 150 - type: entity parent: ReinforcedWindow diff --git a/Resources/Prototypes/Entities/Structures/Windows/window.yml b/Resources/Prototypes/Entities/Structures/Windows/window.yml index 6b188d8ce1..4fbef22d7a 100644 --- a/Resources/Prototypes/Entities/Structures/Windows/window.yml +++ b/Resources/Prototypes/Entities/Structures/Windows/window.yml @@ -85,7 +85,7 @@ damageOverlay: sprite: Structures/Windows/cracks.rsi - type: StaticPrice - price: 0.5 + price: 100 - type: entity id: WindowDirectional diff --git a/Resources/Prototypes/Entities/Structures/base_structure.yml b/Resources/Prototypes/Entities/Structures/base_structure.yml index a486260f88..5855923001 100644 --- a/Resources/Prototypes/Entities/Structures/base_structure.yml +++ b/Resources/Prototypes/Entities/Structures/base_structure.yml @@ -53,6 +53,8 @@ - MidImpassable - LowImpassable - type: Anchorable + - type: StaticPrice + price: 50 - type: Tag id: Structure diff --git a/Resources/Prototypes/Entities/Structures/conveyor.yml b/Resources/Prototypes/Entities/Structures/conveyor.yml index 513fc493df..8a82e0c294 100644 --- a/Resources/Prototypes/Entities/Structures/conveyor.yml +++ b/Resources/Prototypes/Entities/Structures/conveyor.yml @@ -81,4 +81,6 @@ - type: Construction graph: ConveyorGraph node: item + - type: StaticPrice + price: 40 diff --git a/Resources/Prototypes/Reagents/Materials/glass.yml b/Resources/Prototypes/Reagents/Materials/glass.yml index 777463eebe..fdb19b4948 100644 --- a/Resources/Prototypes/Reagents/Materials/glass.yml +++ b/Resources/Prototypes/Reagents/Materials/glass.yml @@ -4,7 +4,7 @@ name: materials-glass icon: Objects/Materials/Sheets/glass.rsi/glass.png color: "#a8ccd7" - price: 0.0025 + price: 0.075 - type: material id: ReinforcedGlass @@ -12,7 +12,7 @@ name: materials-reinforced-glass icon: Objects/Materials/Sheets/glass.rsi/rglass.png color: "#549bb0" - price: 0.00375 # 2-1 mix of glass and metal. + price: 0.22 # 2-1 mix of glass and metal. - type: material id: PlasmaGlass @@ -20,7 +20,7 @@ name: materials-plasma-glass icon: Objects/Materials/Sheets/glass.rsi/pglass.png color: "#b35989" - price: 0.1025 # 1-1 mix of plasma and glass. + price: 0.30 # 1-1 mix of plasma and glass. - type: material id: ReinforcedPlasmaGlass @@ -28,4 +28,4 @@ name: materials-reinforced-plasma-glass icon: Objects/Materials/Sheets/glass.rsi/rpglass.png color: "#8c4069" - price: 0.10375 # 2-2-1 mix of plasma, glass, and metal. + price: 0.66 # 2-2-1 mix of plasma, glass, and metal. diff --git a/Resources/Prototypes/Reagents/Materials/materials.yml b/Resources/Prototypes/Reagents/Materials/materials.yml index 9603987ea4..09e2749f65 100644 --- a/Resources/Prototypes/Reagents/Materials/materials.yml +++ b/Resources/Prototypes/Reagents/Materials/materials.yml @@ -4,7 +4,7 @@ name: materials-biomass icon: /Textures/Objects/Misc/monkeycube.rsi/cube.png color: "#8A9A5B" - price: 0.05 + price: 0.1 - type: material id: Cloth @@ -12,7 +12,7 @@ name: materials-cloth icon: /Textures/Objects/Materials/materials.rsi/cloth.png color: "#e7e7de" - price: 0.005 + price: 0.05 - type: material id: Durathread @@ -20,7 +20,7 @@ name: materials-durathread icon: /Textures/Objects/Materials/materials.rsi/durathread.png color: "#8291a1" - price: 0.0175 # 1-1 mix of plastic and cloth. + price: 0.15 # 1-1 mix of plastic and cloth. - type: material id: Plasma @@ -28,7 +28,7 @@ name: materials-plasma icon: Objects/Materials/Sheets/other.rsi/plasma.png color: "#7e009e" - price: 0.1 + price: 0.2 - type: material id: Plastic @@ -36,7 +36,7 @@ name: materials-plastic icon: Objects/Materials/Sheets/other.rsi/plastic.png color: "#d9d9d9" - price: 0.0125 + price: 0.1 - type: material id: Wood @@ -44,7 +44,7 @@ name: materials-wood icon: Objects/Materials/materials.rsi/wood.png color: "#966F33" - price: 0.01 + price: 0.05 - type: material id: Uranium @@ -52,4 +52,4 @@ name: materials-uranium icon: Objects/Materials/Sheets/other.rsi/uranium.png color: "#32a852" - price: 0.05 + price: 0.2 diff --git a/Resources/Prototypes/Reagents/Materials/metals.yml b/Resources/Prototypes/Reagents/Materials/metals.yml index dec7bfff99..88870f973e 100644 --- a/Resources/Prototypes/Reagents/Materials/metals.yml +++ b/Resources/Prototypes/Reagents/Materials/metals.yml @@ -3,7 +3,7 @@ stack: Steel name: materials-steel icon: Objects/Materials/Sheets/metal.rsi/steel.png - price: 0.0025 + price: 0.05 - type: material id: Gold @@ -11,7 +11,7 @@ name: materials-gold icon: Objects/Materials/ingots.rsi/gold.png color: "#FFD700" - price: 0.0625 + price: 0.2 - type: material id: Silver @@ -19,7 +19,7 @@ name: materials-silver icon: Objects/Materials/ingots.rsi/silver.png color: "#C0C0C0" - price: 0.025 + price: 0.15 - type: material id: Plasteel @@ -27,4 +27,4 @@ name: materials-plasteel icon: Objects/Materials/Sheets/metal.rsi/plasteel.png color: "#696969" #Okay, this is epic - price: 0.1025 # 1-1 mix of plasma and steel. + price: 0.28 # 1-1 mix of plasma and steel. diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index 3b526bf665..817a60ccc5 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -96,6 +96,9 @@ - type: Tag id: CartridgeRocket +- type: Tag + id: Cigarette + - type: Tag id: CigFilter