Cargo economy balance (#11123)
Co-authored-by: Visne <39844191+Visne@users.noreply.github.com>
This commit is contained in:
@@ -63,7 +63,7 @@ namespace Content.Client.Cargo.UI
|
|||||||
Products.RemoveAllChildren();
|
Products.RemoveAllChildren();
|
||||||
var products = ProductPrototypes.ToList();
|
var products = ProductPrototypes.ToList();
|
||||||
products.Sort((x, y) =>
|
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();
|
var search = SearchBar.Text.Trim().ToLowerInvariant();
|
||||||
foreach (var prototype in products)
|
foreach (var prototype in products)
|
||||||
|
|||||||
29
Content.Client/UserInterface/StatValuesEui.cs
Normal file
29
Content.Client/UserInterface/StatValuesEui.cs
Normal file
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
11
Content.Client/UserInterface/StatsWindow.xaml
Normal file
11
Content.Client/UserInterface/StatsWindow.xaml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<DefaultWindow xmlns="https://spacestation14.io"
|
||||||
|
Title="Stats window"
|
||||||
|
MinSize="600 400">
|
||||||
|
<BoxContainer Orientation="Vertical">
|
||||||
|
<ScrollContainer HorizontalExpand="True"
|
||||||
|
VerticalExpand="True"
|
||||||
|
SizeFlagsStretchRatio="6">
|
||||||
|
<GridContainer Name="Values"/>
|
||||||
|
</ScrollContainer>
|
||||||
|
</BoxContainer>
|
||||||
|
</DefaultWindow>
|
||||||
48
Content.Client/UserInterface/StatsWindow.xaml.cs
Normal file
48
Content.Client/UserInterface/StatsWindow.xaml.cs
Normal file
@@ -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<string> headers, List<string[]> 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],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -13,7 +13,7 @@ namespace Content.IntegrationTests.Tests;
|
|||||||
public sealed class CargoTest
|
public sealed class CargoTest
|
||||||
{
|
{
|
||||||
[Test]
|
[Test]
|
||||||
public async Task NoArbitrage()
|
public async Task NoCargoOrderArbitrage()
|
||||||
{
|
{
|
||||||
await using var pairTracker = await PoolManager.GetServerClient(new PoolSettings() {NoClient = true});
|
await using var pairTracker = await PoolManager.GetServerClient(new PoolSettings() {NoClient = true});
|
||||||
var server = pairTracker.Pair.Server;
|
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 ent = entManager.SpawnEntity(proto.Product, new MapCoordinates(Vector2.Zero, mapId));
|
||||||
var price = pricing.GetPrice(ent);
|
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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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.
|
/// How much the bank balance goes up per second, every Delay period. Rounded down when multiplied.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[ViewVariables(VVAccess.ReadWrite), DataField("increasePerSecond")]
|
[ViewVariables(VVAccess.ReadWrite), DataField("increasePerSecond")]
|
||||||
public int IncreasePerSecond = 10;
|
public int IncreasePerSecond = 2;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ using Content.Shared.MobState.Components;
|
|||||||
using Robust.Shared.Console;
|
using Robust.Shared.Console;
|
||||||
using Robust.Shared.Containers;
|
using Robust.Shared.Containers;
|
||||||
using Robust.Shared.Map;
|
using Robust.Shared.Map;
|
||||||
|
using Robust.Shared.Prototypes;
|
||||||
using Robust.Shared.Utility;
|
using Robust.Shared.Utility;
|
||||||
|
|
||||||
namespace Content.Server.Cargo.Systems;
|
namespace Content.Server.Cargo.Systems;
|
||||||
@@ -111,6 +112,33 @@ public sealed class PricingSystem : EntitySystem
|
|||||||
args.Price += component.Price;
|
args.Price += component.Price;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Get a rough price for an entityprototype. Does not consider contained entities.
|
||||||
|
/// </summary>
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Appraises an entity, returning it's price.
|
/// Appraises an entity, returning it's price.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -123,7 +151,7 @@ public sealed class PricingSystem : EntitySystem
|
|||||||
public double GetPrice(EntityUid uid)
|
public double GetPrice(EntityUid uid)
|
||||||
{
|
{
|
||||||
var ev = new PriceCalculationEvent();
|
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.
|
//TODO: Add an OpaqueToAppraisal component or similar for blocking the recursive descent into containers, or preventing material pricing.
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ using Robust.Shared.Prototypes;
|
|||||||
using Robust.Shared.Player;
|
using Robust.Shared.Player;
|
||||||
using JetBrains.Annotations;
|
using JetBrains.Annotations;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using Content.Server.Cargo.Systems;
|
||||||
using Content.Server.Power.Components;
|
using Content.Server.Power.Components;
|
||||||
using Robust.Server.Player;
|
using Robust.Server.Player;
|
||||||
|
|
||||||
|
|||||||
144
Content.Server/UserInterface/StatValuesCommand.cs
Normal file
144
Content.Server/UserInterface/StatValuesCommand.cs
Normal file
@@ -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} <cargosell / lathsell>";
|
||||||
|
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<EuiManager>();
|
||||||
|
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<string[]>();
|
||||||
|
var entManager = IoCManager.Resolve<IEntityManager>();
|
||||||
|
var priceSystem = IoCManager.Resolve<IEntitySystemManager>().GetEntitySystem<PricingSystem>();
|
||||||
|
var metaQuery = entManager.GetEntityQuery<MetaDataComponent>();
|
||||||
|
var prices = new HashSet<string>(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<string>()
|
||||||
|
{
|
||||||
|
"ID",
|
||||||
|
"Price",
|
||||||
|
},
|
||||||
|
Values = values,
|
||||||
|
};
|
||||||
|
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
private StatValuesEuiMessage GetLatheMessage()
|
||||||
|
{
|
||||||
|
var values = new List<string[]>();
|
||||||
|
var protoManager = IoCManager.Resolve<IPrototypeManager>();
|
||||||
|
var factory = IoCManager.Resolve<IComponentFactory>();
|
||||||
|
var priceSystem = IoCManager.Resolve<IEntitySystemManager>().GetEntitySystem<PricingSystem>();
|
||||||
|
|
||||||
|
foreach (var proto in protoManager.EnumeratePrototypes<LatheRecipePrototype>())
|
||||||
|
{
|
||||||
|
var cost = 0.0;
|
||||||
|
|
||||||
|
foreach (var (material, count) in proto.RequiredMaterials)
|
||||||
|
{
|
||||||
|
var materialPrice = protoManager.Index<MaterialPrototype>(material).Price;
|
||||||
|
cost += materialPrice * count;
|
||||||
|
}
|
||||||
|
|
||||||
|
var sell = priceSystem.GetEstimatedPrice(protoManager.Index<EntityPrototype>(proto.Result), factory);
|
||||||
|
|
||||||
|
values.Add(new[]
|
||||||
|
{
|
||||||
|
proto.ID,
|
||||||
|
$"{cost:0}",
|
||||||
|
$"{sell:0}",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
var state = new StatValuesEuiMessage()
|
||||||
|
{
|
||||||
|
Title = "Lathe sell prices",
|
||||||
|
Headers = new List<string>()
|
||||||
|
{
|
||||||
|
"ID",
|
||||||
|
"Cost",
|
||||||
|
"Sell price",
|
||||||
|
},
|
||||||
|
Values = values,
|
||||||
|
};
|
||||||
|
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
}
|
||||||
5
Content.Server/UserInterface/StatValuesEui.cs
Normal file
5
Content.Server/UserInterface/StatValuesEui.cs
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
using Content.Server.EUI;
|
||||||
|
|
||||||
|
namespace Content.Server.UserInterface;
|
||||||
|
|
||||||
|
public sealed class StatValuesEui : BaseEui {}
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
using Content.Server.Cargo.Systems;
|
||||||
using Content.Server.Popups;
|
using Content.Server.Popups;
|
||||||
using Content.Server.Power.Components;
|
using Content.Server.Power.Components;
|
||||||
using Content.Server.Power.EntitySystems;
|
using Content.Server.Power.EntitySystems;
|
||||||
@@ -21,24 +22,30 @@ namespace Content.Server.VendingMachines
|
|||||||
{
|
{
|
||||||
public sealed class VendingMachineSystem : SharedVendingMachineSystem
|
public sealed class VendingMachineSystem : SharedVendingMachineSystem
|
||||||
{
|
{
|
||||||
|
[Dependency] private readonly IComponentFactory _factory = default!;
|
||||||
[Dependency] private readonly IRobustRandom _random = default!;
|
[Dependency] private readonly IRobustRandom _random = default!;
|
||||||
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
|
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
|
||||||
[Dependency] private readonly AccessReaderSystem _accessReader = 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 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()
|
public override void Initialize()
|
||||||
{
|
{
|
||||||
base.Initialize();
|
base.Initialize();
|
||||||
|
|
||||||
|
_sawmill = Logger.GetSawmill("vending");
|
||||||
SubscribeLocalEvent<VendingMachineComponent, PowerChangedEvent>(OnPowerChanged);
|
SubscribeLocalEvent<VendingMachineComponent, PowerChangedEvent>(OnPowerChanged);
|
||||||
SubscribeLocalEvent<VendingMachineComponent, BreakageEventArgs>(OnBreak);
|
SubscribeLocalEvent<VendingMachineComponent, BreakageEventArgs>(OnBreak);
|
||||||
SubscribeLocalEvent<VendingMachineComponent, GotEmaggedEvent>(OnEmagged);
|
SubscribeLocalEvent<VendingMachineComponent, GotEmaggedEvent>(OnEmagged);
|
||||||
SubscribeLocalEvent<VendingMachineComponent, DamageChangedEvent>(OnDamage);
|
SubscribeLocalEvent<VendingMachineComponent, DamageChangedEvent>(OnDamage);
|
||||||
|
SubscribeLocalEvent<VendingMachineComponent, PriceCalculationEvent>(OnVendingPrice);
|
||||||
|
|
||||||
SubscribeLocalEvent<VendingMachineComponent, ActivatableUIOpenAttemptEvent>(OnActivatableUIOpenAttempt);
|
SubscribeLocalEvent<VendingMachineComponent, ActivatableUIOpenAttemptEvent>(OnActivatableUIOpenAttempt);
|
||||||
SubscribeLocalEvent<VendingMachineComponent, BoundUIOpenedEvent>(OnBoundUIOpened);
|
SubscribeLocalEvent<VendingMachineComponent, BoundUIOpenedEvent>(OnBoundUIOpened);
|
||||||
@@ -47,6 +54,24 @@ namespace Content.Server.VendingMachines
|
|||||||
SubscribeLocalEvent<VendingMachineComponent, VendingMachineSelfDispenseEvent>(OnSelfDispense);
|
SubscribeLocalEvent<VendingMachineComponent, VendingMachineSelfDispenseEvent>(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<EntityPrototype>(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)
|
protected override void OnComponentInit(EntityUid uid, SharedVendingMachineComponent sharedComponent, ComponentInit args)
|
||||||
{
|
{
|
||||||
base.OnComponentInit(uid, sharedComponent, args);
|
base.OnComponentInit(uid, sharedComponent, args);
|
||||||
@@ -113,7 +138,7 @@ namespace Content.Server.VendingMachines
|
|||||||
component.Emagged = true;
|
component.Emagged = true;
|
||||||
args.Handled = true;
|
args.Handled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnDamage(EntityUid uid, VendingMachineComponent component, DamageChangedEvent args)
|
private void OnDamage(EntityUid uid, VendingMachineComponent component, DamageChangedEvent args)
|
||||||
{
|
{
|
||||||
if (component.Broken || component.DispenseOnHitCoolingDown ||
|
if (component.Broken || component.DispenseOnHitCoolingDown ||
|
||||||
@@ -320,7 +345,7 @@ namespace Content.Server.VendingMachines
|
|||||||
vendComponent.ThrowNextItem = false;
|
vendComponent.ThrowNextItem = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var ent = EntityManager.SpawnEntity(vendComponent.NextItemToEject, Transform(vendComponent.Owner).Coordinates);
|
var ent = EntityManager.SpawnEntity(vendComponent.NextItemToEject, Transform(vendComponent.Owner).Coordinates);
|
||||||
if (vendComponent.ThrowNextItem)
|
if (vendComponent.ThrowNextItem)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using Content.Server.Cargo.Systems;
|
||||||
using Content.Server.Damage.Systems;
|
using Content.Server.Damage.Systems;
|
||||||
using Content.Server.Examine;
|
using Content.Server.Examine;
|
||||||
using Content.Server.Interaction;
|
using Content.Server.Interaction;
|
||||||
@@ -23,6 +24,7 @@ using Robust.Shared.Map;
|
|||||||
using Robust.Shared.Physics;
|
using Robust.Shared.Physics;
|
||||||
using Robust.Shared.Physics.Components;
|
using Robust.Shared.Physics.Components;
|
||||||
using Robust.Shared.Player;
|
using Robust.Shared.Player;
|
||||||
|
using Robust.Shared.Prototypes;
|
||||||
using Robust.Shared.Utility;
|
using Robust.Shared.Utility;
|
||||||
using SharedGunSystem = Content.Shared.Weapons.Ranged.Systems.SharedGunSystem;
|
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 IComponentFactory _factory = default!;
|
||||||
[Dependency] private readonly ExamineSystem _examine = default!;
|
[Dependency] private readonly ExamineSystem _examine = default!;
|
||||||
[Dependency] private readonly InteractionSystem _interaction = default!;
|
[Dependency] private readonly InteractionSystem _interaction = default!;
|
||||||
|
[Dependency] private readonly PricingSystem _pricing = default!;
|
||||||
[Dependency] private readonly StaminaSystem _stamina = default!;
|
[Dependency] private readonly StaminaSystem _stamina = default!;
|
||||||
[Dependency] private readonly StunSystem _stun = default!;
|
[Dependency] private readonly StunSystem _stun = default!;
|
||||||
|
|
||||||
public const float DamagePitchVariation = MeleeWeaponSystem.DamagePitchVariation;
|
public const float DamagePitchVariation = MeleeWeaponSystem.DamagePitchVariation;
|
||||||
public const float GunClumsyChance = 0.5f;
|
public const float GunClumsyChance = 0.5f;
|
||||||
|
|
||||||
|
public override void Initialize()
|
||||||
|
{
|
||||||
|
base.Initialize();
|
||||||
|
SubscribeLocalEvent<BallisticAmmoProviderComponent, PriceCalculationEvent>(OnBallisticPrice);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnBallisticPrice(EntityUid uid, BallisticAmmoProviderComponent component, ref PriceCalculationEvent args)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(component.FillProto) || component.UnspawnedCount == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!ProtoManager.TryIndex<EntityPrototype>(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<IShootable> ammo, EntityCoordinates fromCoordinates, EntityCoordinates toCoordinates, EntityUid? user = null)
|
public override void Shoot(GunComponent gun, List<IShootable> ammo, EntityCoordinates fromCoordinates, EntityCoordinates toCoordinates, EntityUid? user = null)
|
||||||
{
|
{
|
||||||
// Try a clumsy roll
|
// Try a clumsy roll
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ public sealed class CargoShuttleComponent : Component
|
|||||||
public TimeSpan? NextCall;
|
public TimeSpan? NextCall;
|
||||||
|
|
||||||
[ViewVariables(VVAccess.ReadWrite), DataField("cooldown")]
|
[ViewVariables(VVAccess.ReadWrite), DataField("cooldown")]
|
||||||
public float Cooldown = 150f;
|
public float Cooldown = 30f;
|
||||||
|
|
||||||
[ViewVariables]
|
[ViewVariables]
|
||||||
public bool CanRecall;
|
public bool CanRecall;
|
||||||
|
|||||||
18
Content.Shared/UserInterface/StatValuesEuiMessage.cs
Normal file
18
Content.Shared/UserInterface/StatValuesEuiMessage.cs
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
using Content.Shared.Eui;
|
||||||
|
using Robust.Shared.Serialization;
|
||||||
|
|
||||||
|
namespace Content.Shared.UserInterface;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// It's a message not a state because it's for debugging and it makes it easier to bootstrap more data dumping.
|
||||||
|
/// </summary>
|
||||||
|
[Serializable, NetSerializable]
|
||||||
|
public sealed class StatValuesEuiMessage : EuiMessageBase
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Titles for the window.
|
||||||
|
/// </summary>
|
||||||
|
public string Title = string.Empty;
|
||||||
|
public List<string> Headers = new();
|
||||||
|
public List<string[]> Values = new();
|
||||||
|
}
|
||||||
@@ -15,6 +15,8 @@
|
|||||||
containers:
|
containers:
|
||||||
bodypart: !type:Container
|
bodypart: !type:Container
|
||||||
ents: []
|
ents: []
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 50
|
||||||
|
|
||||||
# For primates mainly
|
# For primates mainly
|
||||||
- type: entity
|
- type: entity
|
||||||
@@ -79,6 +81,8 @@
|
|||||||
- type: Sprite
|
- type: Sprite
|
||||||
netsync: false
|
netsync: false
|
||||||
sprite: Mobs/Species/Human/organs.rsi
|
sprite: Mobs/Species/Human/organs.rsi
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 50
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: OrganAnimalLungs
|
id: OrganAnimalLungs
|
||||||
|
|||||||
@@ -13,6 +13,8 @@
|
|||||||
containers:
|
containers:
|
||||||
bodypart: !type:Container
|
bodypart: !type:Container
|
||||||
ents: []
|
ents: []
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 100
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: TorsoHuman
|
id: TorsoHuman
|
||||||
|
|||||||
@@ -11,6 +11,8 @@
|
|||||||
containers:
|
containers:
|
||||||
bodypart: !type:Container
|
bodypart: !type:Container
|
||||||
ents: []
|
ents: []
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 100
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: LeftArmBorg
|
id: LeftArmBorg
|
||||||
|
|||||||
@@ -12,6 +12,8 @@
|
|||||||
containers:
|
containers:
|
||||||
bodypart: !type:Container
|
bodypart: !type:Container
|
||||||
ents: []
|
ents: []
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 20
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: TorsoSkeleton
|
id: TorsoSkeleton
|
||||||
|
|||||||
@@ -12,6 +12,8 @@
|
|||||||
containers:
|
containers:
|
||||||
bodypart: !type:Container
|
bodypart: !type:Container
|
||||||
ents: []
|
ents: []
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 100
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: TorsoSlime
|
id: TorsoSlime
|
||||||
|
|||||||
@@ -13,6 +13,8 @@
|
|||||||
containers:
|
containers:
|
||||||
bodypart: !type:Container
|
bodypart: !type:Container
|
||||||
ents: []
|
ents: []
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 100
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: TorsoVox
|
id: TorsoVox
|
||||||
|
|||||||
@@ -54,6 +54,6 @@
|
|||||||
sprite: Objects/Vehicles/atv.rsi
|
sprite: Objects/Vehicles/atv.rsi
|
||||||
state: vehicle
|
state: vehicle
|
||||||
product: CrateFunATV
|
product: CrateFunATV
|
||||||
cost: 6000
|
cost: 1500
|
||||||
category: Fun
|
category: Fun
|
||||||
group: market
|
group: market
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
sprite: Mobs/Animals/bee.rsi
|
sprite: Mobs/Animals/bee.rsi
|
||||||
state: 0
|
state: 0
|
||||||
product: CrateNPCBee
|
product: CrateNPCBee
|
||||||
cost: 1000
|
cost: 4000
|
||||||
category: Livestock
|
category: Livestock
|
||||||
group: market
|
group: market
|
||||||
|
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
sprite: Mobs/Animals/butterfly.rsi
|
sprite: Mobs/Animals/butterfly.rsi
|
||||||
state: butterfly
|
state: butterfly
|
||||||
product: CrateNPCButterflies
|
product: CrateNPCButterflies
|
||||||
cost: 1000
|
cost: 2500
|
||||||
category: Livestock
|
category: Livestock
|
||||||
group: market
|
group: market
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
sprite: Mobs/Animals/chicken.rsi
|
sprite: Mobs/Animals/chicken.rsi
|
||||||
state: icon-1
|
state: icon-1
|
||||||
product: CrateNPCChicken
|
product: CrateNPCChicken
|
||||||
cost: 1500
|
cost: 2500
|
||||||
category: Livestock
|
category: Livestock
|
||||||
group: market
|
group: market
|
||||||
|
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
sprite: Mobs/Animals/duck.rsi
|
sprite: Mobs/Animals/duck.rsi
|
||||||
state: icon-0
|
state: icon-0
|
||||||
product: CrateNPCDuck
|
product: CrateNPCDuck
|
||||||
cost: 2000
|
cost: 3500
|
||||||
category: Livestock
|
category: Livestock
|
||||||
group: market
|
group: market
|
||||||
|
|
||||||
@@ -114,7 +114,7 @@
|
|||||||
sprite: Mobs/Animals/mouse.rsi
|
sprite: Mobs/Animals/mouse.rsi
|
||||||
state: icon-0
|
state: icon-0
|
||||||
product: CrateNPCMouse
|
product: CrateNPCMouse
|
||||||
cost: 1500
|
cost: 2500
|
||||||
category: Livestock
|
category: Livestock
|
||||||
group: market
|
group: market
|
||||||
|
|
||||||
@@ -124,7 +124,7 @@
|
|||||||
sprite: Mobs/Animals/parrot.rsi
|
sprite: Mobs/Animals/parrot.rsi
|
||||||
state: parrot
|
state: parrot
|
||||||
product: CrateNPCParrot
|
product: CrateNPCParrot
|
||||||
cost: 1000
|
cost: 2000
|
||||||
category: Livestock
|
category: Livestock
|
||||||
group: market
|
group: market
|
||||||
|
|
||||||
@@ -144,6 +144,6 @@
|
|||||||
sprite: Mobs/Animals/snake.rsi
|
sprite: Mobs/Animals/snake.rsi
|
||||||
state: snake
|
state: snake
|
||||||
product: CrateNPCSnake
|
product: CrateNPCSnake
|
||||||
cost: 1000
|
cost: 2000
|
||||||
category: Livestock
|
category: Livestock
|
||||||
group: market
|
group: market
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
sprite: Objects/Specific/Medical/firstaidkits.rsi
|
sprite: Objects/Specific/Medical/firstaidkits.rsi
|
||||||
state: firstaid
|
state: firstaid
|
||||||
product: CrateMedicalSupplies
|
product: CrateMedicalSupplies
|
||||||
cost: 1000
|
cost: 2400
|
||||||
category: Medical
|
category: Medical
|
||||||
group: market
|
group: market
|
||||||
|
|
||||||
@@ -14,6 +14,6 @@
|
|||||||
sprite: Objects/Specific/Chemistry/beaker.rsi
|
sprite: Objects/Specific/Chemistry/beaker.rsi
|
||||||
state: beaker
|
state: beaker
|
||||||
product: CrateChemistrySupplies
|
product: CrateChemistrySupplies
|
||||||
cost: 500
|
cost: 650
|
||||||
category: Medical
|
category: Medical
|
||||||
group: market
|
group: market
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
sprite: Objects/Weapons/Guns/Battery/disabler.rsi
|
sprite: Objects/Weapons/Guns/Battery/disabler.rsi
|
||||||
state: base
|
state: base
|
||||||
product: CrateSecurityNonlethal
|
product: CrateSecurityNonlethal
|
||||||
cost: 1500
|
cost: 2100
|
||||||
category: Security
|
category: Security
|
||||||
group: market
|
group: market
|
||||||
|
|
||||||
|
|||||||
@@ -40,6 +40,8 @@
|
|||||||
interfaces:
|
interfaces:
|
||||||
- key: enum.StorageUiKey.Key
|
- key: enum.StorageUiKey.Key
|
||||||
type: StorageBoundUserInterface
|
type: StorageBoundUserInterface
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 80
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
abstract: true
|
abstract: true
|
||||||
|
|||||||
@@ -31,6 +31,8 @@
|
|||||||
enum.ToggleVisuals.Layer:
|
enum.ToggleVisuals.Layer:
|
||||||
True: {state: icon-on}
|
True: {state: icon-on}
|
||||||
False: {state: icon}
|
False: {state: icon}
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 200
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: ClothingShoesBootsMag
|
parent: ClothingShoesBootsMag
|
||||||
|
|||||||
@@ -8,3 +8,5 @@
|
|||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
- WhitelistChameleon
|
- WhitelistChameleon
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 15
|
||||||
|
|||||||
@@ -14,6 +14,8 @@
|
|||||||
- type: SpaceGarbage
|
- type: SpaceGarbage
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
netsync: false
|
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.
|
# This base type is used to cover all of the "obvious" things that should be doable to open-package food.
|
||||||
# Practically this means injection.
|
# Practically this means injection.
|
||||||
|
|||||||
@@ -1,6 +1,3 @@
|
|||||||
- type: Tag
|
|
||||||
id: Cigarette
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: Cigarette
|
id: Cigarette
|
||||||
parent: BaseCigar
|
parent: BaseCigar
|
||||||
|
|||||||
@@ -15,6 +15,8 @@
|
|||||||
- Trash
|
- Trash
|
||||||
- type: Recyclable
|
- type: Recyclable
|
||||||
- type: SpaceGarbage
|
- type: SpaceGarbage
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 5
|
||||||
|
|
||||||
# Base for all cigars and cigarettes.
|
# Base for all cigars and cigarettes.
|
||||||
- type: entity
|
- type: entity
|
||||||
|
|||||||
@@ -13,4 +13,4 @@
|
|||||||
tags:
|
tags:
|
||||||
- DroneUsable
|
- DroneUsable
|
||||||
- type: StaticPrice
|
- type: StaticPrice
|
||||||
price: 75
|
price: 100
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
tags:
|
tags:
|
||||||
- DroneUsable
|
- DroneUsable
|
||||||
- type: StaticPrice
|
- type: StaticPrice
|
||||||
price: 75
|
price: 100
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: BaseComputerCircuitboard
|
parent: BaseComputerCircuitboard
|
||||||
|
|||||||
@@ -12,3 +12,5 @@
|
|||||||
sprite: Objects/Misc/module.rsi
|
sprite: Objects/Misc/module.rsi
|
||||||
state: mainboard
|
state: mainboard
|
||||||
netsync: false
|
netsync: false
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 100
|
||||||
|
|||||||
@@ -10,6 +10,8 @@
|
|||||||
sprite: Objects/Misc/module.rsi
|
sprite: Objects/Misc/module.rsi
|
||||||
state: charger_APC
|
state: charger_APC
|
||||||
netsync: false
|
netsync: false
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 100
|
||||||
|
|
||||||
# Wallmount Substation
|
# Wallmount Substation
|
||||||
- type: entity
|
- type: entity
|
||||||
@@ -22,7 +24,9 @@
|
|||||||
sprite: Objects/Misc/module.rsi
|
sprite: Objects/Misc/module.rsi
|
||||||
state: charger_APC
|
state: charger_APC
|
||||||
netsync: false
|
netsync: false
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 100
|
||||||
|
|
||||||
# Wallmount Generator
|
# Wallmount Generator
|
||||||
- type: entity
|
- type: entity
|
||||||
id: WallmountGeneratorElectronics
|
id: WallmountGeneratorElectronics
|
||||||
@@ -34,7 +38,9 @@
|
|||||||
sprite: Objects/Misc/module.rsi
|
sprite: Objects/Misc/module.rsi
|
||||||
state: charger_APC
|
state: charger_APC
|
||||||
netsync: false
|
netsync: false
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 100
|
||||||
|
|
||||||
# APU
|
# APU
|
||||||
- type: entity
|
- type: entity
|
||||||
id: WallmountGeneratorAPUElectronics
|
id: WallmountGeneratorAPUElectronics
|
||||||
@@ -46,6 +52,8 @@
|
|||||||
sprite: Objects/Misc/module.rsi
|
sprite: Objects/Misc/module.rsi
|
||||||
state: charger_APC
|
state: charger_APC
|
||||||
netsync: false
|
netsync: false
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 100
|
||||||
|
|
||||||
# Solar Tracker Electronics
|
# Solar Tracker Electronics
|
||||||
- type: entity
|
- type: entity
|
||||||
@@ -58,3 +66,5 @@
|
|||||||
sprite: Objects/Misc/module.rsi
|
sprite: Objects/Misc/module.rsi
|
||||||
state: generic
|
state: generic
|
||||||
netsync: false
|
netsync: false
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 100
|
||||||
|
|||||||
@@ -5,9 +5,11 @@
|
|||||||
id: RemoteSignaller
|
id: RemoteSignaller
|
||||||
name: remote signaller
|
name: remote signaller
|
||||||
description: A handheld device used for remotely sending signals to objects.
|
description: A handheld device used for remotely sending signals to objects.
|
||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
sprite: Objects/Devices/signaller.rsi
|
sprite: Objects/Devices/signaller.rsi
|
||||||
state: signaller
|
state: signaller
|
||||||
- type: Signaller
|
- type: Signaller
|
||||||
- type: UseDelay
|
- type: UseDelay
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 40
|
||||||
|
|||||||
@@ -25,6 +25,8 @@
|
|||||||
delayOptions: [3, 5, 10, 15, 30]
|
delayOptions: [3, 5, 10, 15, 30]
|
||||||
initialBeepDelay: 0
|
initialBeepDelay: 0
|
||||||
beepSound: /Audio/Machines/Nuke/general_beep.ogg
|
beepSound: /Audio/Machines/Nuke/general_beep.ogg
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 40
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: TimerTrigger
|
parent: TimerTrigger
|
||||||
@@ -38,4 +40,6 @@
|
|||||||
- type: PayloadTrigger
|
- type: PayloadTrigger
|
||||||
components:
|
components:
|
||||||
- type: TriggerOnSignal
|
- type: TriggerOnSignal
|
||||||
- type: SignalReceiver
|
- type: SignalReceiver
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 40
|
||||||
|
|||||||
@@ -33,3 +33,5 @@
|
|||||||
sprite: Objects/Devices/Holoprojectors/atmos.rsi
|
sprite: Objects/Devices/Holoprojectors/atmos.rsi
|
||||||
state: icon
|
state: icon
|
||||||
netsync: false
|
netsync: false
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 80
|
||||||
|
|||||||
@@ -81,6 +81,8 @@
|
|||||||
containers:
|
containers:
|
||||||
BeakerSlotA: !type:ContainerSlot
|
BeakerSlotA: !type:ContainerSlot
|
||||||
BeakerSlotB: !type:ContainerSlot
|
BeakerSlotB: !type:ContainerSlot
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 60
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: flash payload
|
name: flash payload
|
||||||
|
|||||||
@@ -18,6 +18,8 @@
|
|||||||
type: InstrumentBoundUserInterface
|
type: InstrumentBoundUserInterface
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 24
|
size: 24
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 200
|
||||||
|
|
||||||
#These are for instruments that are larger, can't be picked up, or have collision
|
#These are for instruments that are larger, can't be picked up, or have collision
|
||||||
- type: entity
|
- type: entity
|
||||||
@@ -67,6 +69,8 @@
|
|||||||
- HighImpassable
|
- HighImpassable
|
||||||
- MidImpassable
|
- MidImpassable
|
||||||
- BulletImpassable
|
- BulletImpassable
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 300
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: BasePlaceableInstrument
|
parent: BasePlaceableInstrument
|
||||||
@@ -75,4 +79,4 @@
|
|||||||
abstract: true
|
abstract: true
|
||||||
components:
|
components:
|
||||||
- type: Rotatable
|
- type: Rotatable
|
||||||
rotateWhileAnchored: true
|
rotateWhileAnchored: true
|
||||||
|
|||||||
@@ -27,6 +27,8 @@
|
|||||||
Quantity: 3
|
Quantity: 3
|
||||||
- ReagentId: MindbreakerToxin
|
- ReagentId: MindbreakerToxin
|
||||||
Quantity: 2
|
Quantity: 2
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 5
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: Crayon
|
parent: Crayon
|
||||||
|
|||||||
@@ -175,7 +175,7 @@
|
|||||||
components:
|
components:
|
||||||
- type: Material
|
- type: Material
|
||||||
materials:
|
materials:
|
||||||
ReinforcedPlasmaGlass: 500
|
ReinforcedPlasmaGlass: 100
|
||||||
- type: Stack
|
- type: Stack
|
||||||
stackType: ReinforcedPlasmaGlass
|
stackType: ReinforcedPlasmaGlass
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
|
|||||||
@@ -64,7 +64,7 @@
|
|||||||
components:
|
components:
|
||||||
- type: Material
|
- type: Material
|
||||||
materials:
|
materials:
|
||||||
Plasma: 500
|
Plasma: 100
|
||||||
- type: Stack
|
- type: Stack
|
||||||
stackType: Plasma
|
stackType: Plasma
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
- type: entity
|
- type: entity
|
||||||
parent: PartBase
|
parent: PartBase
|
||||||
id: PartRodMetal
|
id: PartRodMetal
|
||||||
name: metals rods
|
name: metal rods
|
||||||
suffix: Full
|
suffix: Full
|
||||||
components:
|
components:
|
||||||
- type: Stack
|
- type: Stack
|
||||||
@@ -53,6 +53,10 @@
|
|||||||
outputs:
|
outputs:
|
||||||
- Lattice
|
- Lattice
|
||||||
- FloorReinforced
|
- FloorReinforced
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 0
|
||||||
|
- type: StackPrice
|
||||||
|
price: 5
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: PartRodMetal
|
parent: PartRodMetal
|
||||||
|
|||||||
@@ -19,6 +19,8 @@
|
|||||||
quickEquip: true
|
quickEquip: true
|
||||||
slots:
|
slots:
|
||||||
- neck
|
- neck
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 100
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: BedsheetBlack
|
id: BedsheetBlack
|
||||||
|
|||||||
@@ -10,3 +10,5 @@
|
|||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
- ProximitySensor
|
- ProximitySensor
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 40
|
||||||
|
|||||||
@@ -12,3 +12,5 @@
|
|||||||
state: jar
|
state: jar
|
||||||
netsync: false
|
netsync: false
|
||||||
- type: AMEFuelContainer
|
- type: AMEFuelContainer
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 500
|
||||||
|
|||||||
@@ -11,3 +11,5 @@
|
|||||||
sprite: Objects/Power/AME/ame_part.rsi
|
sprite: Objects/Power/AME/ame_part.rsi
|
||||||
state: box
|
state: box
|
||||||
- type: AMEPart
|
- type: AMEPart
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 500
|
||||||
|
|||||||
@@ -28,6 +28,8 @@
|
|||||||
- DroneUsable
|
- DroneUsable
|
||||||
- type: Appearance
|
- type: Appearance
|
||||||
- type: PowerCellVisuals
|
- type: PowerCellVisuals
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 100
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: potato battery
|
name: potato battery
|
||||||
|
|||||||
@@ -50,6 +50,9 @@
|
|||||||
parent: BaseShield
|
parent: BaseShield
|
||||||
id: RiotShield
|
id: RiotShield
|
||||||
description: A large tower shield. Good for controlling crowds.
|
description: A large tower shield. Good for controlling crowds.
|
||||||
|
components:
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 100
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: riot laser shield
|
name: riot laser shield
|
||||||
|
|||||||
@@ -10,6 +10,8 @@
|
|||||||
netsync: true
|
netsync: true
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 2
|
size: 2
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 20
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: SeedBase
|
parent: SeedBase
|
||||||
|
|||||||
@@ -61,6 +61,8 @@
|
|||||||
sprite: Objects/Tools/Hydroponics/scythe.rsi
|
sprite: Objects/Tools/Hydroponics/scythe.rsi
|
||||||
slots:
|
slots:
|
||||||
- back
|
- back
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 40
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: hatchet
|
name: hatchet
|
||||||
|
|||||||
@@ -19,3 +19,5 @@
|
|||||||
receiveFrequencyId: SuitSensor
|
receiveFrequencyId: SuitSensor
|
||||||
- type: WirelessNetworkConnection
|
- type: WirelessNetworkConnection
|
||||||
range: 500
|
range: 500
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 500
|
||||||
|
|||||||
@@ -8,6 +8,9 @@
|
|||||||
- type: Item
|
- type: Item
|
||||||
sprite: Objects/Specific/Medical/medical.rsi
|
sprite: Objects/Specific/Medical/medical.rsi
|
||||||
heldPrefix: ointment
|
heldPrefix: ointment
|
||||||
|
# Inherited
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 0
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: ointment
|
name: ointment
|
||||||
@@ -35,6 +38,8 @@
|
|||||||
stackType: Ointment
|
stackType: Ointment
|
||||||
max: 10
|
max: 10
|
||||||
count: 10
|
count: 10
|
||||||
|
- type: StackPrice
|
||||||
|
price: 10
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: bruise pack
|
name: bruise pack
|
||||||
@@ -61,6 +66,8 @@
|
|||||||
stackType: Brutepack
|
stackType: Brutepack
|
||||||
max: 10
|
max: 10
|
||||||
count: 10
|
count: 10
|
||||||
|
- type: StackPrice
|
||||||
|
price: 10
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: roll of gauze
|
name: roll of gauze
|
||||||
@@ -91,6 +98,8 @@
|
|||||||
stackType: Gauze
|
stackType: Gauze
|
||||||
max: 10
|
max: 10
|
||||||
count: 10
|
count: 10
|
||||||
|
- type: StackPrice
|
||||||
|
price: 10
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: Gauze1
|
id: Gauze1
|
||||||
|
|||||||
@@ -72,6 +72,8 @@
|
|||||||
containers:
|
containers:
|
||||||
entity_storage: !type:Container
|
entity_storage: !type:Container
|
||||||
paper_label: !type:ContainerSlot
|
paper_label: !type:ContainerSlot
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 50
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: BodyBag_Folded
|
id: BodyBag_Folded
|
||||||
|
|||||||
@@ -7,6 +7,8 @@
|
|||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
netsync: false
|
netsync: false
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 60
|
||||||
|
|
||||||
# Cautery
|
# Cautery
|
||||||
|
|
||||||
|
|||||||
@@ -54,3 +54,5 @@
|
|||||||
- type: Appearance
|
- type: Appearance
|
||||||
visuals:
|
visuals:
|
||||||
- type: DeployableBarrierVisualizer
|
- type: DeployableBarrierVisualizer
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 200
|
||||||
|
|||||||
@@ -30,3 +30,5 @@
|
|||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
- DroneUsable
|
- DroneUsable
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 80
|
||||||
|
|||||||
@@ -78,6 +78,8 @@
|
|||||||
damage:
|
damage:
|
||||||
types:
|
types:
|
||||||
Blunt: 5
|
Blunt: 5
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 30
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: beaker
|
name: beaker
|
||||||
@@ -113,6 +115,8 @@
|
|||||||
- type: SolutionContainerVisuals
|
- type: SolutionContainerVisuals
|
||||||
maxFillLevels: 6
|
maxFillLevels: 6
|
||||||
fillBaseName: beakerlarge
|
fillBaseName: beakerlarge
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 40
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: cryostasis beaker
|
name: cryostasis beaker
|
||||||
@@ -205,6 +209,8 @@
|
|||||||
- type: SolutionContainerVisuals
|
- type: SolutionContainerVisuals
|
||||||
maxFillLevels: 1
|
maxFillLevels: 1
|
||||||
fillBaseName: dropper
|
fillBaseName: dropper
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 40
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: syringe
|
name: syringe
|
||||||
|
|||||||
@@ -18,3 +18,5 @@
|
|||||||
whitelist:
|
whitelist:
|
||||||
tags:
|
tags:
|
||||||
- PaintableAirlock
|
- PaintableAirlock
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 40
|
||||||
|
|||||||
@@ -52,6 +52,8 @@
|
|||||||
- type: Appearance
|
- type: Appearance
|
||||||
visuals:
|
visuals:
|
||||||
- type: FlashLightVisualizer
|
- type: FlashLightVisualizer
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 40
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: seclite
|
name: seclite
|
||||||
|
|||||||
@@ -20,3 +20,5 @@
|
|||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
- DroneUsable
|
- DroneUsable
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 100
|
||||||
|
|||||||
@@ -22,3 +22,5 @@
|
|||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
- DroneUsable
|
- DroneUsable
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 60
|
||||||
|
|||||||
@@ -35,6 +35,8 @@
|
|||||||
- type: Item
|
- type: Item
|
||||||
sprite: Objects/Tools/wirecutters.rsi
|
sprite: Objects/Tools/wirecutters.rsi
|
||||||
- type: LatticeCutting
|
- type: LatticeCutting
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 40
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: screwdriver
|
name: screwdriver
|
||||||
@@ -71,6 +73,8 @@
|
|||||||
available:
|
available:
|
||||||
- enum.DamageStateVisualLayers.Base:
|
- enum.DamageStateVisualLayers.Base:
|
||||||
screwdriver: Rainbow
|
screwdriver: Rainbow
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 40
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: wrench
|
name: wrench
|
||||||
@@ -100,6 +104,8 @@
|
|||||||
- Anchoring
|
- Anchoring
|
||||||
useSound:
|
useSound:
|
||||||
path: /Audio/Items/ratchet.ogg
|
path: /Audio/Items/ratchet.ogg
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 40
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: crowbar
|
name: crowbar
|
||||||
@@ -131,6 +137,8 @@
|
|||||||
useSound:
|
useSound:
|
||||||
path: /Audio/Items/crowbar.ogg
|
path: /Audio/Items/crowbar.ogg
|
||||||
- type: TilePrying
|
- type: TilePrying
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 40
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: emergency crowbar
|
name: emergency crowbar
|
||||||
@@ -190,6 +198,8 @@
|
|||||||
- type: Tag
|
- type: Tag
|
||||||
tags:
|
tags:
|
||||||
- DroneUsable
|
- DroneUsable
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 60
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: power drill
|
name: power drill
|
||||||
@@ -229,6 +239,8 @@
|
|||||||
path: /Audio/Items/drill_use.ogg
|
path: /Audio/Items/drill_use.ogg
|
||||||
changeSound:
|
changeSound:
|
||||||
path: /Audio/Items/change_drill.ogg
|
path: /Audio/Items/change_drill.ogg
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 60
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: RCD
|
name: RCD
|
||||||
@@ -249,6 +261,8 @@
|
|||||||
quickEquip: false
|
quickEquip: false
|
||||||
slots:
|
slots:
|
||||||
- Belt
|
- Belt
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 100
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: RCD Ammo
|
name: RCD Ammo
|
||||||
@@ -263,6 +277,8 @@
|
|||||||
- type: Item
|
- type: Item
|
||||||
sprite: Objects/Tools/rcd.rsi
|
sprite: Objects/Tools/rcd.rsi
|
||||||
heldPrefix: ammo
|
heldPrefix: ammo
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 60
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: shovel
|
name: shovel
|
||||||
|
|||||||
@@ -51,6 +51,8 @@
|
|||||||
color: orange
|
color: orange
|
||||||
- type: Appearance
|
- type: Appearance
|
||||||
- type: RequiresEyeProtection
|
- type: RequiresEyeProtection
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 40
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: industrial welding tool
|
name: industrial welding tool
|
||||||
|
|||||||
@@ -16,3 +16,5 @@
|
|||||||
map: ["enum.AmmoVisualLayers.Base"]
|
map: ["enum.AmmoVisualLayers.Base"]
|
||||||
- type: Appearance
|
- type: Appearance
|
||||||
- type: SpentAmmoVisuals
|
- type: SpentAmmoVisuals
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 20
|
||||||
|
|||||||
@@ -19,6 +19,8 @@
|
|||||||
map: ["enum.AmmoVisualLayers.Base"]
|
map: ["enum.AmmoVisualLayers.Base"]
|
||||||
- type: Appearance
|
- type: Appearance
|
||||||
- type: SpentAmmoVisuals
|
- type: SpentAmmoVisuals
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 10
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: CartridgeCaselessRifle
|
id: CartridgeCaselessRifle
|
||||||
|
|||||||
@@ -18,6 +18,8 @@
|
|||||||
map: ["enum.AmmoVisualLayers.Base"]
|
map: ["enum.AmmoVisualLayers.Base"]
|
||||||
- type: Appearance
|
- type: Appearance
|
||||||
- type: SpentAmmoVisuals
|
- type: SpentAmmoVisuals
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 10
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: CartridgeMinigun
|
id: CartridgeMinigun
|
||||||
|
|||||||
@@ -18,6 +18,8 @@
|
|||||||
map: ["enum.AmmoVisualLayers.Base"]
|
map: ["enum.AmmoVisualLayers.Base"]
|
||||||
- type: Appearance
|
- type: Appearance
|
||||||
- type: SpentAmmoVisuals
|
- type: SpentAmmoVisuals
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 10
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: CartridgeLightRifle
|
id: CartridgeLightRifle
|
||||||
|
|||||||
@@ -18,6 +18,8 @@
|
|||||||
map: ["enum.AmmoVisualLayers.Base"]
|
map: ["enum.AmmoVisualLayers.Base"]
|
||||||
- type: Appearance
|
- type: Appearance
|
||||||
- type: SpentAmmoVisuals
|
- type: SpentAmmoVisuals
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 10
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: CartridgeMagnum
|
id: CartridgeMagnum
|
||||||
|
|||||||
@@ -18,6 +18,8 @@
|
|||||||
map: ["enum.AmmoVisualLayers.Base"]
|
map: ["enum.AmmoVisualLayers.Base"]
|
||||||
- type: Appearance
|
- type: Appearance
|
||||||
- type: SpentAmmoVisuals
|
- type: SpentAmmoVisuals
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 10
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: CartridgePistol
|
id: CartridgePistol
|
||||||
|
|||||||
@@ -18,6 +18,8 @@
|
|||||||
map: ["enum.AmmoVisualLayers.Base"]
|
map: ["enum.AmmoVisualLayers.Base"]
|
||||||
- type: Appearance
|
- type: Appearance
|
||||||
- type: SpentAmmoVisuals
|
- type: SpentAmmoVisuals
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 10
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: CartridgeRifle
|
id: CartridgeRifle
|
||||||
|
|||||||
@@ -17,6 +17,8 @@
|
|||||||
map: ["enum.AmmoVisualLayers.Base"]
|
map: ["enum.AmmoVisualLayers.Base"]
|
||||||
- type: SpentAmmoVisuals
|
- type: SpentAmmoVisuals
|
||||||
- type: Appearance
|
- type: Appearance
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 5
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: CartridgeCap
|
id: CartridgeCap
|
||||||
|
|||||||
@@ -18,6 +18,8 @@
|
|||||||
netsync: false
|
netsync: false
|
||||||
sprite: Objects/Weapons/Guns/Ammunition/Explosives/explosives.rsi
|
sprite: Objects/Weapons/Guns/Ammunition/Explosives/explosives.rsi
|
||||||
state: rpg
|
state: rpg
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 20
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: CartridgeRocketSlow
|
id: CartridgeRocketSlow
|
||||||
@@ -36,6 +38,8 @@
|
|||||||
- type: Sprite
|
- type: Sprite
|
||||||
sprite: Objects/Weapons/Guns/Ammunition/Explosives/explosives.rsi
|
sprite: Objects/Weapons/Guns/Ammunition/Explosives/explosives.rsi
|
||||||
state: frag
|
state: frag
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 20
|
||||||
|
|
||||||
# Grenades
|
# Grenades
|
||||||
|
|
||||||
|
|||||||
@@ -29,6 +29,8 @@
|
|||||||
steps: 5
|
steps: 5
|
||||||
zeroVisible: false
|
zeroVisible: false
|
||||||
- type: Appearance
|
- type: Appearance
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 500
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: BaseWeaponBatterySmall
|
id: BaseWeaponBatterySmall
|
||||||
|
|||||||
@@ -17,6 +17,8 @@
|
|||||||
path: /Audio/Weapons/Guns/Gunshots/lmg.ogg
|
path: /Audio/Weapons/Guns/Gunshots/lmg.ogg
|
||||||
soundEmpty:
|
soundEmpty:
|
||||||
path: /Audio/Weapons/Guns/Empty/lmg_empty.ogg
|
path: /Audio/Weapons/Guns/Empty/lmg_empty.ogg
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 500
|
||||||
# No chamber because HMG may want its own
|
# No chamber because HMG may want its own
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
|
|||||||
@@ -51,6 +51,8 @@
|
|||||||
containers:
|
containers:
|
||||||
gun_magazine: !type:ContainerSlot
|
gun_magazine: !type:ContainerSlot
|
||||||
gun_chamber: !type:ContainerSlot
|
gun_chamber: !type:ContainerSlot
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 500
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: L6 SAW
|
name: L6 SAW
|
||||||
|
|||||||
@@ -14,6 +14,8 @@
|
|||||||
- Back
|
- Back
|
||||||
- type: Item
|
- type: Item
|
||||||
size: 60
|
size: 60
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 500
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: china lake
|
name: china lake
|
||||||
|
|||||||
@@ -55,6 +55,8 @@
|
|||||||
steps: 1
|
steps: 1
|
||||||
zeroVisible: true
|
zeroVisible: true
|
||||||
- type: Appearance
|
- type: Appearance
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 500
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: viper
|
name: viper
|
||||||
|
|||||||
@@ -38,6 +38,8 @@
|
|||||||
path: /Audio/Weapons/Guns/MagOut/revolver_magout.ogg
|
path: /Audio/Weapons/Guns/MagOut/revolver_magout.ogg
|
||||||
soundInsert:
|
soundInsert:
|
||||||
path: /Audio/Weapons/Guns/MagIn/revolver_magin.ogg
|
path: /Audio/Weapons/Guns/MagIn/revolver_magin.ogg
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 500
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: Deckard
|
name: Deckard
|
||||||
|
|||||||
@@ -46,6 +46,8 @@
|
|||||||
containers:
|
containers:
|
||||||
gun_magazine: !type:ContainerSlot
|
gun_magazine: !type:ContainerSlot
|
||||||
gun_chamber: !type:ContainerSlot
|
gun_chamber: !type:ContainerSlot
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 500
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: AKMS
|
name: AKMS
|
||||||
|
|||||||
@@ -49,6 +49,8 @@
|
|||||||
containers:
|
containers:
|
||||||
gun_magazine: !type:ContainerSlot
|
gun_magazine: !type:ContainerSlot
|
||||||
gun_chamber: !type:ContainerSlot
|
gun_chamber: !type:ContainerSlot
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 500
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: Atreides
|
name: Atreides
|
||||||
|
|||||||
@@ -42,6 +42,8 @@
|
|||||||
containers:
|
containers:
|
||||||
ballistic-ammo: !type:Container
|
ballistic-ammo: !type:Container
|
||||||
ents: []
|
ents: []
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 500
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: Bulldog
|
name: Bulldog
|
||||||
@@ -96,6 +98,8 @@
|
|||||||
steps: 1
|
steps: 1
|
||||||
zeroVisible: true
|
zeroVisible: true
|
||||||
- type: Appearance
|
- type: Appearance
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 500
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: double-barreled shotgun
|
name: double-barreled shotgun
|
||||||
|
|||||||
@@ -36,6 +36,8 @@
|
|||||||
containers:
|
containers:
|
||||||
ballistic-ammo: !type:Container
|
ballistic-ammo: !type:Container
|
||||||
ents: []
|
ents: []
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 500
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: Kardashev-Mosin
|
name: Kardashev-Mosin
|
||||||
|
|||||||
@@ -45,6 +45,8 @@
|
|||||||
enum.ToggleVisuals.Layer:
|
enum.ToggleVisuals.Layer:
|
||||||
True: {state: stunbaton_on}
|
True: {state: stunbaton_on}
|
||||||
False: {state: stunbaton_off}
|
False: {state: stunbaton_off}
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 100
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: flash
|
name: flash
|
||||||
@@ -67,6 +69,8 @@
|
|||||||
size: 5
|
size: 5
|
||||||
sprite: Objects/Weapons/Melee/flash.rsi
|
sprite: Objects/Weapons/Melee/flash.rsi
|
||||||
- type: ItemCooldown
|
- type: ItemCooldown
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 40
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: portable flasher
|
name: portable flasher
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
- type: Item
|
- type: Item
|
||||||
size: 5
|
size: 5
|
||||||
- type: StaticPrice
|
- type: StaticPrice
|
||||||
price: 5
|
price: 20
|
||||||
- type: Clickable
|
- type: Clickable
|
||||||
- type: InteractionOutline
|
- type: InteractionOutline
|
||||||
- type: MovedByPressure
|
- type: MovedByPressure
|
||||||
|
|||||||
@@ -59,3 +59,5 @@
|
|||||||
machine_board: !type:Container
|
machine_board: !type:Container
|
||||||
machine_parts: !type:Container
|
machine_parts: !type:Container
|
||||||
ReagentDispenser-beaker: !type:ContainerSlot
|
ReagentDispenser-beaker: !type:ContainerSlot
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 1000
|
||||||
|
|||||||
@@ -99,5 +99,7 @@
|
|||||||
mode: NoSprite
|
mode: NoSprite
|
||||||
- type: PaintableAirlock
|
- type: PaintableAirlock
|
||||||
group: Standard
|
group: Standard
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 150
|
||||||
placement:
|
placement:
|
||||||
mode: SnapgridCenter
|
mode: SnapgridCenter
|
||||||
|
|||||||
@@ -99,6 +99,8 @@
|
|||||||
node: Firelock
|
node: Firelock
|
||||||
- type: WallMount
|
- type: WallMount
|
||||||
arc: 360
|
arc: 360
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 150
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: FirelockGlass
|
id: FirelockGlass
|
||||||
@@ -152,3 +154,5 @@
|
|||||||
occludes: false
|
occludes: false
|
||||||
- type: Physics
|
- type: Physics
|
||||||
canCollide: false
|
canCollide: false
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 100
|
||||||
|
|||||||
@@ -111,6 +111,8 @@
|
|||||||
- type: Construction
|
- type: Construction
|
||||||
graph: Windoor
|
graph: Windoor
|
||||||
node: windoor
|
node: windoor
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 100
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: BaseSecureWindoor
|
id: BaseSecureWindoor
|
||||||
|
|||||||
@@ -40,6 +40,8 @@
|
|||||||
- !type:PlaySoundBehavior
|
- !type:PlaySoundBehavior
|
||||||
sound:
|
sound:
|
||||||
path: /Audio/Effects/metalbreak.ogg
|
path: /Audio/Effects/metalbreak.ogg
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 50
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: chair
|
name: chair
|
||||||
|
|||||||
@@ -55,6 +55,8 @@
|
|||||||
key: rollerbed
|
key: rollerbed
|
||||||
- type: RollerbedVisualizer
|
- type: RollerbedVisualizer
|
||||||
key: rollerbed
|
key: rollerbed
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 200
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: CheapRollerBed
|
id: CheapRollerBed
|
||||||
|
|||||||
@@ -33,6 +33,8 @@
|
|||||||
bodyBroken: arcade
|
bodyBroken: arcade
|
||||||
- type: Anchorable
|
- type: Anchorable
|
||||||
- type: Pullable
|
- type: Pullable
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 300
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: SpaceVillainArcade
|
id: SpaceVillainArcade
|
||||||
|
|||||||
@@ -53,3 +53,5 @@
|
|||||||
containers:
|
containers:
|
||||||
board: !type:Container
|
board: !type:Container
|
||||||
ents: []
|
ents: []
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 400
|
||||||
|
|||||||
@@ -63,3 +63,5 @@
|
|||||||
enum.CloningPodStatus.Gore: pod_g
|
enum.CloningPodStatus.Gore: pod_g
|
||||||
enum.CloningPodStatus.Idle: pod_0
|
enum.CloningPodStatus.Idle: pod_0
|
||||||
- type: Climbable
|
- type: Climbable
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 1000
|
||||||
|
|||||||
@@ -85,6 +85,8 @@
|
|||||||
anchored: true
|
anchored: true
|
||||||
- type: Pullable
|
- type: Pullable
|
||||||
- type: Lathe
|
- type: Lathe
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 800
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: [ BaseMachinePowered, ConstructibleMachine ]
|
parent: [ BaseMachinePowered, ConstructibleMachine ]
|
||||||
|
|||||||
@@ -48,6 +48,8 @@
|
|||||||
range: 2
|
range: 2
|
||||||
sound:
|
sound:
|
||||||
path: /Audio/Ambience/Objects/gas_hiss.ogg
|
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)
|
#Note: The PipeDirection of the PipeNode should be the south-facing version, because the entity starts at an angle of 0 (south)
|
||||||
|
|
||||||
|
|||||||
@@ -246,6 +246,8 @@
|
|||||||
!type:PipeNode
|
!type:PipeNode
|
||||||
nodeGroupID: Pipe
|
nodeGroupID: Pipe
|
||||||
pipeDirection: South
|
pipeDirection: South
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 500
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: BaseGasThermoMachine
|
parent: BaseGasThermoMachine
|
||||||
|
|||||||
@@ -74,6 +74,8 @@
|
|||||||
- type: ContainerContainer
|
- type: ContainerContainer
|
||||||
containers:
|
containers:
|
||||||
DisposalUnit: !type:Container
|
DisposalUnit: !type:Container
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 100
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: DisposalUnit
|
id: DisposalUnit
|
||||||
|
|||||||
@@ -67,6 +67,8 @@
|
|||||||
maxIntensity: 100
|
maxIntensity: 100
|
||||||
intensitySlope: 2
|
intensitySlope: 2
|
||||||
totalIntensity: 200
|
totalIntensity: 200
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 500
|
||||||
|
|
||||||
# Base Wallmount Generator
|
# Base Wallmount Generator
|
||||||
|
|
||||||
|
|||||||
@@ -92,6 +92,8 @@
|
|||||||
- !type:DoActsBehavior
|
- !type:DoActsBehavior
|
||||||
acts: [ "Destruction" ]
|
acts: [ "Destruction" ]
|
||||||
- type: StationInfiniteBatteryTarget
|
- type: StationInfiniteBatteryTarget
|
||||||
|
- type: StaticPrice
|
||||||
|
price: 500
|
||||||
|
|
||||||
# APC under construction
|
# APC under construction
|
||||||
- type: entity
|
- type: entity
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user