Merge remote-tracking branch 'upstream/master'
This commit is contained in:
@@ -100,7 +100,8 @@ namespace Content.Server.Cargo.Systems
|
|||||||
|
|
||||||
#region Interface
|
#region Interface
|
||||||
|
|
||||||
private void OnApproveOrderMessage(EntityUid uid, CargoOrderConsoleComponent component, CargoConsoleApproveOrderMessage args)
|
private void OnApproveOrderMessage(EntityUid uid, CargoOrderConsoleComponent component,
|
||||||
|
CargoConsoleApproveOrderMessage args)
|
||||||
{
|
{
|
||||||
if (args.Session.AttachedEntity is not { Valid: true } player)
|
if (args.Session.AttachedEntity is not { Valid: true } player)
|
||||||
return;
|
return;
|
||||||
@@ -184,7 +185,9 @@ namespace Content.Server.Cargo.Systems
|
|||||||
order.SetApproverData(idCard.Comp?.FullName, idCard.Comp?.JobTitle);
|
order.SetApproverData(idCard.Comp?.FullName, idCard.Comp?.JobTitle);
|
||||||
_audio.PlayPvs(component.ConfirmSound, uid);
|
_audio.PlayPvs(component.ConfirmSound, uid);
|
||||||
|
|
||||||
ConsolePopup(args.Session, Loc.GetString("cargo-console-trade-station", ("destination", MetaData(tradeDestination.Value).EntityName)));
|
ConsolePopup(args.Session,
|
||||||
|
Loc.GetString("cargo-console-trade-station",
|
||||||
|
("destination", MetaData(tradeDestination.Value).EntityName)));
|
||||||
|
|
||||||
// Log order approval
|
// Log order approval
|
||||||
_adminLogger.Add(LogType.Action, LogImpact.Low,
|
_adminLogger.Add(LogType.Action, LogImpact.Low,
|
||||||
@@ -195,7 +198,8 @@ namespace Content.Server.Cargo.Systems
|
|||||||
UpdateOrders(station.Value, orderDatabase);
|
UpdateOrders(station.Value, orderDatabase);
|
||||||
}
|
}
|
||||||
|
|
||||||
private EntityUid? TryFulfillOrder(StationDataComponent stationData, CargoOrderData order, StationCargoOrderDatabaseComponent orderDatabase)
|
private EntityUid? TryFulfillOrder(StationDataComponent stationData, CargoOrderData order,
|
||||||
|
StationCargoOrderDatabaseComponent orderDatabase)
|
||||||
{
|
{
|
||||||
// No slots at the trade station
|
// No slots at the trade station
|
||||||
_listEnts.Clear();
|
_listEnts.Clear();
|
||||||
@@ -219,7 +223,8 @@ namespace Content.Server.Cargo.Systems
|
|||||||
{
|
{
|
||||||
tradeDestination = trade;
|
tradeDestination = trade;
|
||||||
order.NumDispatched++;
|
order.NumDispatched++;
|
||||||
if (order.OrderQuantity <= order.NumDispatched) //Spawn a crate on free pellets until the order is fulfilled.
|
if (order.OrderQuantity <=
|
||||||
|
order.NumDispatched) //Spawn a crate on free pellets until the order is fulfilled.
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -234,16 +239,15 @@ namespace Content.Server.Cargo.Systems
|
|||||||
|
|
||||||
private void GetTradeStations(StationDataComponent data, ref List<EntityUid> ents)
|
private void GetTradeStations(StationDataComponent data, ref List<EntityUid> ents)
|
||||||
{
|
{
|
||||||
foreach (var gridUid in data.Grids)
|
var tradeStationQuery = AllEntityQuery<TradeStationComponent>();
|
||||||
|
while (tradeStationQuery.MoveNext(out var uid, out _))
|
||||||
{
|
{
|
||||||
if (!_tradeQuery.HasComponent(gridUid))
|
ents.Add(uid);
|
||||||
continue;
|
|
||||||
|
|
||||||
ents.Add(gridUid);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnRemoveOrderMessage(EntityUid uid, CargoOrderConsoleComponent component, CargoConsoleRemoveOrderMessage args)
|
private void OnRemoveOrderMessage(EntityUid uid, CargoOrderConsoleComponent component,
|
||||||
|
CargoConsoleRemoveOrderMessage args)
|
||||||
{
|
{
|
||||||
var station = _station.GetOwningStation(uid);
|
var station = _station.GetOwningStation(uid);
|
||||||
|
|
||||||
@@ -253,7 +257,8 @@ namespace Content.Server.Cargo.Systems
|
|||||||
RemoveOrder(station.Value, args.OrderId, orderDatabase);
|
RemoveOrder(station.Value, args.OrderId, orderDatabase);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnAddOrderMessage(EntityUid uid, CargoOrderConsoleComponent component, CargoConsoleAddOrderMessage args)
|
private void OnAddOrderMessage(EntityUid uid, CargoOrderConsoleComponent component,
|
||||||
|
CargoConsoleAddOrderMessage args)
|
||||||
{
|
{
|
||||||
if (args.Session.AttachedEntity is not { Valid: true } player)
|
if (args.Session.AttachedEntity is not { Valid: true } player)
|
||||||
return;
|
return;
|
||||||
@@ -286,7 +291,6 @@ namespace Content.Server.Cargo.Systems
|
|||||||
// Log order addition
|
// Log order addition
|
||||||
_adminLogger.Add(LogType.Action, LogImpact.Low,
|
_adminLogger.Add(LogType.Action, LogImpact.Low,
|
||||||
$"{ToPrettyString(player):user} added order [orderId:{data.OrderId}, quantity:{data.OrderQuantity}, product:{data.ProductId}, requester:{data.Requester}, reason:{data.Reason}]");
|
$"{ToPrettyString(player):user} added order [orderId:{data.OrderId}, quantity:{data.OrderQuantity}, product:{data.ProductId}, requester:{data.Requester}, reason:{data.Reason}]");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnOrderUIOpened(EntityUid uid, CargoOrderConsoleComponent component, BoundUIOpenedEvent args)
|
private void OnOrderUIOpened(EntityUid uid, CargoOrderConsoleComponent component, BoundUIOpenedEvent args)
|
||||||
@@ -325,9 +329,11 @@ namespace Content.Server.Cargo.Systems
|
|||||||
_audio.PlayPvs(_audio.GetSound(component.ErrorSound), uid);
|
_audio.PlayPvs(_audio.GetSound(component.ErrorSound), uid);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static CargoOrderData GetOrderData(CargoConsoleAddOrderMessage args, CargoProductPrototype cargoProduct, int id)
|
private static CargoOrderData GetOrderData(CargoConsoleAddOrderMessage args, CargoProductPrototype cargoProduct,
|
||||||
|
int id)
|
||||||
{
|
{
|
||||||
return new CargoOrderData(id, cargoProduct.Product, cargoProduct.Cost, args.Amount, args.Requester, args.Reason);
|
return new CargoOrderData(id, cargoProduct.Product, cargoProduct.Cost, args.Amount, args.Requester,
|
||||||
|
args.Reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int GetOutstandingOrderCount(StationCargoOrderDatabaseComponent component)
|
public static int GetOutstandingOrderCount(StationCargoOrderDatabaseComponent component)
|
||||||
@@ -422,6 +428,7 @@ namespace Content.Server.Cargo.Systems
|
|||||||
{
|
{
|
||||||
orderDB.Orders.RemoveAt(sequenceIdx);
|
orderDB.Orders.RemoveAt(sequenceIdx);
|
||||||
}
|
}
|
||||||
|
|
||||||
UpdateOrders(dbUid, orderDB);
|
UpdateOrders(dbUid, orderDB);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -433,7 +440,8 @@ namespace Content.Server.Cargo.Systems
|
|||||||
component.Orders.Clear();
|
component.Orders.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static bool PopFrontOrder(StationCargoOrderDatabaseComponent orderDB, [NotNullWhen(true)] out CargoOrderData? orderOut)
|
private static bool PopFrontOrder(StationCargoOrderDatabaseComponent orderDB,
|
||||||
|
[NotNullWhen(true)] out CargoOrderData? orderOut)
|
||||||
{
|
{
|
||||||
var orderIdx = orderDB.Orders.FindIndex(order => order.Approved);
|
var orderIdx = orderDB.Orders.FindIndex(order => order.Approved);
|
||||||
if (orderIdx == -1)
|
if (orderIdx == -1)
|
||||||
@@ -450,13 +458,15 @@ namespace Content.Server.Cargo.Systems
|
|||||||
// Order is complete. Remove from the queue.
|
// Order is complete. Remove from the queue.
|
||||||
orderDB.Orders.RemoveAt(orderIdx);
|
orderDB.Orders.RemoveAt(orderIdx);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Tries to fulfill the next outstanding order.
|
/// Tries to fulfill the next outstanding order.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private bool FulfillNextOrder(StationCargoOrderDatabaseComponent orderDB, EntityCoordinates spawn, string? paperProto)
|
private bool FulfillNextOrder(StationCargoOrderDatabaseComponent orderDB, EntityCoordinates spawn,
|
||||||
|
string? paperProto)
|
||||||
{
|
{
|
||||||
if (!PopFrontOrder(orderDB, out var order))
|
if (!PopFrontOrder(orderDB, out var order))
|
||||||
return false;
|
return false;
|
||||||
@@ -497,7 +507,6 @@ namespace Content.Server.Cargo.Systems
|
|||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DeductFunds(StationBankAccountComponent component, int amount)
|
private void DeductFunds(StationBankAccountComponent component, int amount)
|
||||||
@@ -507,7 +516,8 @@ namespace Content.Server.Cargo.Systems
|
|||||||
|
|
||||||
#region Station
|
#region Station
|
||||||
|
|
||||||
private bool TryGetOrderDatabase([NotNullWhen(true)] EntityUid? stationUid, [MaybeNullWhen(false)] out StationCargoOrderDatabaseComponent dbComp)
|
private bool TryGetOrderDatabase([NotNullWhen(true)] EntityUid? stationUid,
|
||||||
|
[MaybeNullWhen(false)] out StationCargoOrderDatabaseComponent dbComp)
|
||||||
{
|
{
|
||||||
return TryComp(stationUid, out dbComp);
|
return TryComp(stationUid, out dbComp);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,17 @@
|
|||||||
using Content.Server.Cargo.Components;
|
using Content.Server.Cargo.Components;
|
||||||
|
using Content.Server.GameTicking;
|
||||||
|
using Content.Server.Station.Systems;
|
||||||
using Content.Shared.Stacks;
|
using Content.Shared.Stacks;
|
||||||
using Content.Shared.Cargo;
|
using Content.Shared.Cargo;
|
||||||
using Content.Shared.Cargo.BUI;
|
using Content.Shared.Cargo.BUI;
|
||||||
using Content.Shared.Cargo.Components;
|
using Content.Shared.Cargo.Components;
|
||||||
using Content.Shared.Cargo.Events;
|
using Content.Shared.Cargo.Events;
|
||||||
|
using Content.Shared.CCVar;
|
||||||
using Content.Shared.GameTicking;
|
using Content.Shared.GameTicking;
|
||||||
|
using Content.Shared.Shuttles.Components;
|
||||||
|
using Content.Shared.Whitelist;
|
||||||
|
using Robust.Server.Maps;
|
||||||
using Robust.Shared.Map;
|
using Robust.Shared.Map;
|
||||||
using Robust.Shared.Random;
|
|
||||||
using Robust.Shared.Audio;
|
using Robust.Shared.Audio;
|
||||||
|
|
||||||
namespace Content.Server.Cargo.Systems;
|
namespace Content.Server.Cargo.Systems;
|
||||||
@@ -16,9 +21,12 @@ public sealed partial class CargoSystem
|
|||||||
/*
|
/*
|
||||||
* Handles cargo shuttle / trade mechanics.
|
* Handles cargo shuttle / trade mechanics.
|
||||||
*/
|
*/
|
||||||
|
private MapId? TradeStationMap { get; set; }
|
||||||
|
|
||||||
private static readonly SoundPathSpecifier ApproveSound = new("/Audio/Effects/Cargo/ping.ogg");
|
private static readonly SoundPathSpecifier ApproveSound = new("/Audio/Effects/Cargo/ping.ogg");
|
||||||
|
|
||||||
|
private const string TradeStationMapPath = "/Maps/Shuttles/trading_outpost.yml";
|
||||||
|
|
||||||
private void InitializeShuttle()
|
private void InitializeShuttle()
|
||||||
{
|
{
|
||||||
SubscribeLocalEvent<TradeStationComponent, GridSplitEvent>(OnTradeSplit);
|
SubscribeLocalEvent<TradeStationComponent, GridSplitEvent>(OnTradeSplit);
|
||||||
@@ -30,6 +38,17 @@ public sealed partial class CargoSystem
|
|||||||
SubscribeLocalEvent<CargoPalletConsoleComponent, BoundUIOpenedEvent>(OnPalletUIOpen);
|
SubscribeLocalEvent<CargoPalletConsoleComponent, BoundUIOpenedEvent>(OnPalletUIOpen);
|
||||||
|
|
||||||
SubscribeLocalEvent<RoundRestartCleanupEvent>(OnRoundRestart);
|
SubscribeLocalEvent<RoundRestartCleanupEvent>(OnRoundRestart);
|
||||||
|
SubscribeLocalEvent<StationInitializedEvent>(OnStationInitialize);
|
||||||
|
|
||||||
|
Subs.CVar(_cfgManager, CCVars.GridFill, SetGridFill);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetGridFill(bool obj)
|
||||||
|
{
|
||||||
|
if (obj && _ticker.RunLevel != GameRunLevel.PreRoundLobby) // Ensure run level is in game
|
||||||
|
{
|
||||||
|
SetupTradeStation();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#region Console
|
#region Console
|
||||||
@@ -61,6 +80,7 @@ public sealed partial class CargoSystem
|
|||||||
new CargoPalletConsoleInterfaceState(0, 0, false));
|
new CargoPalletConsoleInterfaceState(0, 0, false));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
GetPalletGoods(gridUid, out var toSell, out var amount);
|
GetPalletGoods(gridUid, out var toSell, out var amount);
|
||||||
_uiSystem.SetUiState(bui,
|
_uiSystem.SetUiState(bui,
|
||||||
new CargoPalletConsoleInterfaceState((int)amount, toSell.Count, true));
|
new CargoPalletConsoleInterfaceState((int)amount, toSell.Count, true));
|
||||||
@@ -83,7 +103,6 @@ public sealed partial class CargoSystem
|
|||||||
/// I dont want it to explode if cargo uses a conveyor to move 8000 pineapple slices or whatever, they are
|
/// I dont want it to explode if cargo uses a conveyor to move 8000 pineapple slices or whatever, they are
|
||||||
/// known for their entity spam i wouldnt put it past them
|
/// known for their entity spam i wouldnt put it past them
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
||||||
private void OnPalletAppraise(EntityUid uid, CargoPalletConsoleComponent component, CargoPalletAppraiseMessage args)
|
private void OnPalletAppraise(EntityUid uid, CargoPalletConsoleComponent component, CargoPalletAppraiseMessage args)
|
||||||
{
|
{
|
||||||
var player = args.Session.AttachedEntity;
|
var player = args.Session.AttachedEntity;
|
||||||
@@ -94,7 +113,8 @@ public sealed partial class CargoSystem
|
|||||||
UpdatePalletConsoleInterface(uid);
|
UpdatePalletConsoleInterface(uid);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnCargoShuttleConsoleStartup(EntityUid uid, CargoShuttleConsoleComponent component, ComponentStartup args)
|
private void OnCargoShuttleConsoleStartup(EntityUid uid, CargoShuttleConsoleComponent component,
|
||||||
|
ComponentStartup args)
|
||||||
{
|
{
|
||||||
var station = _station.GetOwningStation(uid);
|
var station = _station.GetOwningStation(uid);
|
||||||
UpdateShuttleState(uid, station);
|
UpdateShuttleState(uid, station);
|
||||||
@@ -106,12 +126,18 @@ public sealed partial class CargoSystem
|
|||||||
TryComp<CargoShuttleComponent>(orderDatabase?.Shuttle, out var shuttle);
|
TryComp<CargoShuttleComponent>(orderDatabase?.Shuttle, out var shuttle);
|
||||||
|
|
||||||
var orders = GetProjectedOrders(station ?? EntityUid.Invalid, orderDatabase, shuttle);
|
var orders = GetProjectedOrders(station ?? EntityUid.Invalid, orderDatabase, shuttle);
|
||||||
var shuttleName = orderDatabase?.Shuttle != null ? MetaData(orderDatabase.Shuttle.Value).EntityName : string.Empty;
|
var shuttleName = orderDatabase?.Shuttle != null
|
||||||
|
? MetaData(orderDatabase.Shuttle.Value).EntityName
|
||||||
|
: string.Empty;
|
||||||
|
|
||||||
if (_uiSystem.TryGetUi(uid, CargoConsoleUiKey.Shuttle, out var bui))
|
if (_uiSystem.TryGetUi(uid, CargoConsoleUiKey.Shuttle, out var bui))
|
||||||
_uiSystem.SetUiState(bui, new CargoShuttleConsoleBoundUserInterfaceState(
|
_uiSystem.SetUiState(bui, new CargoShuttleConsoleBoundUserInterfaceState(
|
||||||
station != null ? MetaData(station.Value).EntityName : Loc.GetString("cargo-shuttle-console-station-unknown"),
|
station != null
|
||||||
string.IsNullOrEmpty(shuttleName) ? Loc.GetString("cargo-shuttle-console-shuttle-not-found") : shuttleName,
|
? MetaData(station.Value).EntityName
|
||||||
|
: Loc.GetString("cargo-shuttle-console-station-unknown"),
|
||||||
|
string.IsNullOrEmpty(shuttleName)
|
||||||
|
? Loc.GetString("cargo-shuttle-console-shuttle-not-found")
|
||||||
|
: shuttleName,
|
||||||
orders
|
orders
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
@@ -161,6 +187,7 @@ public sealed partial class CargoSystem
|
|||||||
{
|
{
|
||||||
orders.Add(order);
|
orders.Add(order);
|
||||||
}
|
}
|
||||||
|
|
||||||
spaceRemaining -= numToShip;
|
spaceRemaining -= numToShip;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -179,7 +206,8 @@ public sealed partial class CargoSystem
|
|||||||
|
|
||||||
/// GetCargoPallets(gridUid, BuySellType.Sell) to return only Sell pads
|
/// GetCargoPallets(gridUid, BuySellType.Sell) to return only Sell pads
|
||||||
/// GetCargoPallets(gridUid, BuySellType.Buy) to return only Buy pads
|
/// GetCargoPallets(gridUid, BuySellType.Buy) to return only Buy pads
|
||||||
private List<(EntityUid Entity, CargoPalletComponent Component, TransformComponent PalletXform)> GetCargoPallets(EntityUid gridUid, BuySellType requestType = BuySellType.All)
|
private List<(EntityUid Entity, CargoPalletComponent Component, TransformComponent PalletXform)> GetCargoPallets(
|
||||||
|
EntityUid gridUid, BuySellType requestType = BuySellType.All)
|
||||||
{
|
{
|
||||||
_pads.Clear();
|
_pads.Clear();
|
||||||
|
|
||||||
@@ -199,7 +227,6 @@ public sealed partial class CargoSystem
|
|||||||
}
|
}
|
||||||
|
|
||||||
_pads.Add((uid, comp, compXform));
|
_pads.Add((uid, comp, compXform));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return _pads;
|
return _pads;
|
||||||
@@ -215,7 +242,8 @@ public sealed partial class CargoSystem
|
|||||||
|
|
||||||
foreach (var pallet in pallets)
|
foreach (var pallet in pallets)
|
||||||
{
|
{
|
||||||
var aabb = _lookup.GetAABBNoContainer(pallet.Entity, pallet.Transform.LocalPosition, pallet.Transform.LocalRotation);
|
var aabb = _lookup.GetAABBNoContainer(pallet.Entity, pallet.Transform.LocalPosition,
|
||||||
|
pallet.Transform.LocalRotation);
|
||||||
|
|
||||||
if (_lookup.AnyLocalEntitiesIntersecting(gridUid, aabb, LookupFlags.Dynamic))
|
if (_lookup.AnyLocalEntitiesIntersecting(gridUid, aabb, LookupFlags.Dynamic))
|
||||||
continue;
|
continue;
|
||||||
@@ -343,6 +371,64 @@ public sealed partial class CargoSystem
|
|||||||
private void OnRoundRestart(RoundRestartCleanupEvent ev)
|
private void OnRoundRestart(RoundRestartCleanupEvent ev)
|
||||||
{
|
{
|
||||||
Reset();
|
Reset();
|
||||||
|
CleanupTradeStation();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnStationInitialize(StationInitializedEvent args)
|
||||||
|
{
|
||||||
|
if (!HasComp<StationCargoOrderDatabaseComponent>(args.Station))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (_cfgManager.GetCVar(CCVars.GridFill))
|
||||||
|
SetupTradeStation();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetupTradeStation()
|
||||||
|
{
|
||||||
|
if (TradeStationMap.HasValue && _mapManager.MapExists(TradeStationMap.Value))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
TradeStationMap = _mapManager.CreateMap();
|
||||||
|
|
||||||
|
var loadOptions = new MapLoadOptions
|
||||||
|
{
|
||||||
|
LoadMap = true,
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!_mapLoader.TryLoad(TradeStationMap.Value, TradeStationMapPath, out _, loadOptions))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var mapUid = _mapManager.GetMapEntityId(TradeStationMap.Value);
|
||||||
|
var ftl = EnsureComp<FTLDestinationComponent>(mapUid);
|
||||||
|
ftl.Whitelist = new EntityWhitelist
|
||||||
|
{
|
||||||
|
Components =
|
||||||
|
[
|
||||||
|
_factory.GetComponentName(typeof(CargoShuttleComponent))
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
_metaSystem.SetEntityName(mapUid, $"Торговая Станция {_random.Next(1000):000}");
|
||||||
|
_console.RefreshShuttleConsoles();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CleanupTradeStation()
|
||||||
|
{
|
||||||
|
if (!TradeStationMap.HasValue)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_mapManager.MapExists(TradeStationMap.Value))
|
||||||
|
{
|
||||||
|
_mapManager.DeleteMap(TradeStationMap.Value);
|
||||||
|
}
|
||||||
|
|
||||||
|
TradeStationMap = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ using Content.Server.Shuttles.Systems;
|
|||||||
using Content.Server.Stack;
|
using Content.Server.Stack;
|
||||||
using Content.Server.Station.Systems;
|
using Content.Server.Station.Systems;
|
||||||
using Content.Server._White.Economy;
|
using Content.Server._White.Economy;
|
||||||
|
using Content.Server.GameTicking;
|
||||||
using Content.Shared.Access.Systems;
|
using Content.Shared.Access.Systems;
|
||||||
using Content.Shared.Administration.Logs;
|
using Content.Shared.Administration.Logs;
|
||||||
using Content.Shared.Cargo;
|
using Content.Shared.Cargo;
|
||||||
@@ -16,6 +17,8 @@ using Content.Shared.Mobs.Components;
|
|||||||
using JetBrains.Annotations;
|
using JetBrains.Annotations;
|
||||||
using Robust.Server.GameObjects;
|
using Robust.Server.GameObjects;
|
||||||
using Robust.Shared.Audio.Systems;
|
using Robust.Shared.Audio.Systems;
|
||||||
|
using Robust.Shared.Configuration;
|
||||||
|
using Robust.Shared.Map;
|
||||||
using Robust.Shared.Prototypes;
|
using Robust.Shared.Prototypes;
|
||||||
using Robust.Shared.Timing;
|
using Robust.Shared.Timing;
|
||||||
using Robust.Shared.Random;
|
using Robust.Shared.Random;
|
||||||
@@ -44,6 +47,11 @@ public sealed partial class CargoSystem : SharedCargoSystem
|
|||||||
[Dependency] private readonly UserInterfaceSystem _uiSystem = default!;
|
[Dependency] private readonly UserInterfaceSystem _uiSystem = default!;
|
||||||
[Dependency] private readonly MetaDataSystem _metaSystem = default!;
|
[Dependency] private readonly MetaDataSystem _metaSystem = default!;
|
||||||
[Dependency] private readonly BankCardSystem _bankCard = default!; // WD
|
[Dependency] private readonly BankCardSystem _bankCard = default!; // WD
|
||||||
|
[Dependency] private readonly IConfigurationManager _cfgManager = default!; // WD
|
||||||
|
[Dependency] private readonly IMapManager _mapManager = default!; // WD
|
||||||
|
[Dependency] private readonly IComponentFactory _factory = default!; // WD
|
||||||
|
[Dependency] private readonly MapLoaderSystem _mapLoader = default!; // WD
|
||||||
|
[Dependency] private readonly GameTicker _ticker = default!; // WD
|
||||||
|
|
||||||
private EntityQuery<TransformComponent> _xformQuery;
|
private EntityQuery<TransformComponent> _xformQuery;
|
||||||
private EntityQuery<CargoSellBlacklistComponent> _blacklistQuery;
|
private EntityQuery<CargoSellBlacklistComponent> _blacklistQuery;
|
||||||
|
|||||||
@@ -37,5 +37,19 @@ namespace Content.Server.Tabletop.Components
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
[ViewVariables]
|
[ViewVariables]
|
||||||
public TabletopSession? Session { get; set; } = null;
|
public TabletopSession? Session { get; set; } = null;
|
||||||
|
|
||||||
|
// Skyedra Fix start
|
||||||
|
/// <summary>
|
||||||
|
/// How many holograms have been spawned onto this board.
|
||||||
|
/// </summary>
|
||||||
|
[ViewVariables]
|
||||||
|
public int HologramsSpawned { get; set; } = 0;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// How many holograms are allowed to be spawned total by players.
|
||||||
|
/// </summary>
|
||||||
|
[ViewVariables]
|
||||||
|
public int MaximumHologramsAllowed { get; set; } = 10;
|
||||||
|
// Skyedra Fix end
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,6 +68,9 @@ namespace Content.Server.Tabletop
|
|||||||
// Find the entity, remove it from the session and set it's position to the tabletop
|
// Find the entity, remove it from the session and set it's position to the tabletop
|
||||||
session.Entities.TryGetValue(entity, out var result);
|
session.Entities.TryGetValue(entity, out var result);
|
||||||
session.Entities.Remove(result);
|
session.Entities.Remove(result);
|
||||||
|
|
||||||
|
tabletop.HologramsSpawned--; // White Dream fix
|
||||||
|
|
||||||
QueueDel(result);
|
QueueDel(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,6 +93,16 @@ namespace Content.Server.Tabletop
|
|||||||
if (!TryComp<ItemComponent>(handEnt, out var item))
|
if (!TryComp<ItemComponent>(handEnt, out var item))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// Skye hotfix to prevent people from infinitely spawning mice on the board games and crashing server.
|
||||||
|
if (component.HologramsSpawned >= component.MaximumHologramsAllowed)
|
||||||
|
{
|
||||||
|
_popupSystem.PopupEntity(Loc.GetString("tabletop-max-entities"), uid, args.User);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
component.HologramsSpawned++;
|
||||||
|
// Skye hotfix end
|
||||||
|
|
||||||
var meta = MetaData(handEnt);
|
var meta = MetaData(handEnt);
|
||||||
var protoId = meta.EntityPrototype?.ID;
|
var protoId = meta.EntityPrototype?.ID;
|
||||||
|
|
||||||
|
|||||||
@@ -233,7 +233,7 @@ namespace Content.Shared.CCVar
|
|||||||
/// Whether a random position offset will be applied to the station on roundstart.
|
/// Whether a random position offset will be applied to the station on roundstart.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static readonly CVarDef<bool> StationOffset =
|
public static readonly CVarDef<bool> StationOffset =
|
||||||
CVarDef.Create("game.station_offset", true);
|
CVarDef.Create("game.station_offset", false);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// When the default blueprint is loaded what is the maximum amount it can be offset from 0,0.
|
/// When the default blueprint is loaded what is the maximum amount it can be offset from 0,0.
|
||||||
@@ -246,7 +246,7 @@ namespace Content.Shared.CCVar
|
|||||||
/// Whether a random rotation will be applied to the station on roundstart.
|
/// Whether a random rotation will be applied to the station on roundstart.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static readonly CVarDef<bool> StationRotation =
|
public static readonly CVarDef<bool> StationRotation =
|
||||||
CVarDef.Create("game.station_rotation", true);
|
CVarDef.Create("game.station_rotation", false);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// When enabled, guests will be assigned permanent UIDs and will have their preferences stored.
|
/// When enabled, guests will be assigned permanent UIDs and will have their preferences stored.
|
||||||
|
|||||||
@@ -5028,3 +5028,23 @@
|
|||||||
id: 330
|
id: 330
|
||||||
time: '2024-06-27T20:54:09.0000000+00:00'
|
time: '2024-06-27T20:54:09.0000000+00:00'
|
||||||
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/387
|
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/387
|
||||||
|
- author: ThereDrD
|
||||||
|
changes:
|
||||||
|
- message: "\u0418\u043D\u0445\u0435\u043D\u0434\u044B \u0434\u0440\u043E\u0431\u043E\
|
||||||
|
\u0432\u0438\u043A\u043E\u0432 \u0432\u0435\u0440\u043D\u0443\u043B\u0438\u0441\
|
||||||
|
\u044C"
|
||||||
|
type: Fix
|
||||||
|
id: 331
|
||||||
|
time: '2024-06-28T09:43:09.0000000+00:00'
|
||||||
|
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/390
|
||||||
|
- author: Remuchi
|
||||||
|
changes:
|
||||||
|
- message: "\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\
|
||||||
|
\u0430\u044F \u0442\u043E\u0440\u0433\u043E\u0432\u0430\u044F \u0441\u0442\u0430\
|
||||||
|
\u043D\u0446\u0438\u044F \u0432\u044B\u043D\u0435\u0441\u0435\u043D\u0430 \u043D\
|
||||||
|
\u0430 \u043E\u0442\u0434\u0435\u043B\u044C\u043D\u0443\u044E \u043A\u0430\u0440\
|
||||||
|
\u0442\u0443."
|
||||||
|
type: Add
|
||||||
|
id: 332
|
||||||
|
time: '2024-06-28T12:23:19.0000000+00:00'
|
||||||
|
url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/391
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ tabletop-verb-dump-pieces = Dump Pieces
|
|||||||
tabletop-default-board-name = Board Game
|
tabletop-default-board-name = Board Game
|
||||||
tabletop-error-remove-non-hologram = You cant remove a built in piece!
|
tabletop-error-remove-non-hologram = You cant remove a built in piece!
|
||||||
tabletop-added-piece = The board shimmers brightly!
|
tabletop-added-piece = The board shimmers brightly!
|
||||||
|
tabletop-max-entities = Maximum number of holograms placed.
|
||||||
|
|
||||||
## Chess
|
## Chess
|
||||||
tabletop-chess-board-name = Chess
|
tabletop-chess-board-name = Chess
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ tabletop-verb-dump-pieces = Сбросить куски
|
|||||||
tabletop-default-board-name = Настольная игра
|
tabletop-default-board-name = Настольная игра
|
||||||
tabletop-error-remove-non-hologram = Вы не можете удалить встроенный элемент!
|
tabletop-error-remove-non-hologram = Вы не можете удалить встроенный элемент!
|
||||||
tabletop-added-piece = Доска ярко переливается!
|
tabletop-added-piece = Доска ярко переливается!
|
||||||
|
tabletop-max-entities = Максимальное количество голограмм уже поставлено.
|
||||||
|
|
||||||
## Chess
|
## Chess
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ entities:
|
|||||||
- uid: 2
|
- uid: 2
|
||||||
components:
|
components:
|
||||||
- type: MetaData
|
- type: MetaData
|
||||||
name: Automated Trade Station
|
name: Автономная Торговая Станция
|
||||||
- type: Transform
|
- type: Transform
|
||||||
pos: -2.9375,-1.625
|
pos: -2.9375,-1.625
|
||||||
parent: invalid
|
parent: invalid
|
||||||
@@ -382,6 +382,11 @@ entities:
|
|||||||
chunkSize: 4
|
chunkSize: 4
|
||||||
- type: GasTileOverlay
|
- type: GasTileOverlay
|
||||||
- type: RadiationGridResistance
|
- type: RadiationGridResistance
|
||||||
|
- type: ProtectedGrid
|
||||||
|
- type: TradeStation
|
||||||
|
- type: Shuttle
|
||||||
|
linearDamping: 10000
|
||||||
|
angularDamping: 10000
|
||||||
- proto: AirAlarm
|
- proto: AirAlarm
|
||||||
entities:
|
entities:
|
||||||
- uid: 802
|
- uid: 802
|
||||||
|
|||||||
@@ -10,7 +10,6 @@
|
|||||||
- state: icon
|
- state: icon
|
||||||
map: [ "enum.GunVisualLayers.Base" ]
|
map: [ "enum.GunVisualLayers.Base" ]
|
||||||
- type: Item
|
- type: Item
|
||||||
# If you update this also update the bulldog's size.
|
|
||||||
size: Large
|
size: Large
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
sprite: Objects/Weapons/Guns/Shotguns/db_shotgun.rsi
|
sprite: Objects/Weapons/Guns/Shotguns/db_shotgun.rsi
|
||||||
@@ -52,6 +51,7 @@
|
|||||||
- type: EmitSoundOnLand
|
- type: EmitSoundOnLand
|
||||||
sound:
|
sound:
|
||||||
collection: ShotgunsDrop
|
collection: ShotgunsDrop
|
||||||
|
- type: Appearance
|
||||||
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
@@ -126,7 +126,6 @@
|
|||||||
shape:
|
shape:
|
||||||
- 0,0,4,0
|
- 0,0,4,0
|
||||||
sprite: White/Objects/Weapons/Guns/Shotguns/db_shotgun-inhands.rsi
|
sprite: White/Objects/Weapons/Guns/Shotguns/db_shotgun-inhands.rsi
|
||||||
heldPrefix: db
|
|
||||||
- type: Gun
|
- type: Gun
|
||||||
fireRate: 2
|
fireRate: 2
|
||||||
- type: BallisticAmmoProvider
|
- type: BallisticAmmoProvider
|
||||||
@@ -159,7 +158,6 @@
|
|||||||
sprite: White/Objects/Weapons/Guns/Shotguns/enforcer-inhands.rsi
|
sprite: White/Objects/Weapons/Guns/Shotguns/enforcer-inhands.rsi
|
||||||
- type: Item
|
- type: Item
|
||||||
sprite: White/Objects/Weapons/Guns/Shotguns/enforcer-inhands.rsi
|
sprite: White/Objects/Weapons/Guns/Shotguns/enforcer-inhands.rsi
|
||||||
heldPrefix: enforcer
|
|
||||||
- type: BallisticAmmoProvider
|
- type: BallisticAmmoProvider
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
@@ -177,11 +175,10 @@
|
|||||||
description: When an old Remington design meets modern materials, this is the result. A favourite weapon of militia forces throughout many worlds. Uses .50 shotgun shells.
|
description: When an old Remington design meets modern materials, this is the result. A favourite weapon of militia forces throughout many worlds. Uses .50 shotgun shells.
|
||||||
components:
|
components:
|
||||||
- type: Item
|
- type: Item
|
||||||
|
sprite: White/Objects/Weapons/Guns/Shotguns/pump-inhands.rsi
|
||||||
size: Normal
|
size: Normal
|
||||||
shape:
|
shape:
|
||||||
- 0,0,4,0
|
- 0,0,4,0
|
||||||
sprite: White/Objects/Weapons/Guns/Shotguns/pump-inhands.rsi
|
|
||||||
heldPrefix: pump
|
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
sprite: White/Objects/Weapons/Guns/Shotguns/pump-icons.rsi
|
sprite: White/Objects/Weapons/Guns/Shotguns/pump-icons.rsi
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
@@ -289,7 +286,6 @@
|
|||||||
shape:
|
shape:
|
||||||
- 0,0,4,0
|
- 0,0,4,0
|
||||||
sprite: White/Objects/Weapons/Guns/Shotguns/improvised_shotgun-inhands.rsi
|
sprite: White/Objects/Weapons/Guns/Shotguns/improvised_shotgun-inhands.rsi
|
||||||
heldPrefix: improvised
|
|
||||||
- type: Gun
|
- type: Gun
|
||||||
fireRate: 4 #No reason to stifle the firerate since you have to manually reload every time anyways.
|
fireRate: 4 #No reason to stifle the firerate since you have to manually reload every time anyways.
|
||||||
- type: BallisticAmmoProvider
|
- type: BallisticAmmoProvider
|
||||||
|
|||||||
@@ -46,12 +46,12 @@
|
|||||||
path: /Maps/Shuttles/cargo.yml
|
path: /Maps/Shuttles/cargo.yml
|
||||||
- type: GridSpawn
|
- type: GridSpawn
|
||||||
groups:
|
groups:
|
||||||
trade:
|
# trade:
|
||||||
addComponents:
|
# addComponents:
|
||||||
- type: ProtectedGrid
|
# - type: ProtectedGrid
|
||||||
- type: TradeStation
|
# - type: TradeStation
|
||||||
paths:
|
# paths:
|
||||||
- /Maps/Shuttles/trading_outpost.yml
|
# - /Maps/Shuttles/trading_outpost.yml
|
||||||
mining:
|
mining:
|
||||||
paths:
|
paths:
|
||||||
- /Maps/Shuttles/mining.yml
|
- /Maps/Shuttles/mining.yml
|
||||||
|
|||||||
Reference in New Issue
Block a user