diff --git a/Content.Server/Research/Components/ResearchServerComponent.cs b/Content.Server/Research/Components/ResearchServerComponent.cs
index 4a9460cf8f..0b43434076 100644
--- a/Content.Server/Research/Components/ResearchServerComponent.cs
+++ b/Content.Server/Research/Components/ResearchServerComponent.cs
@@ -11,6 +11,12 @@ namespace Content.Server.Research.Components
[ViewVariables(VVAccess.ReadWrite)] [DataField("points")]
public int Points = 0;
+ ///
+ /// To encourage people to spend points,
+ /// will not accept passive points gain above this number for each source.
+ ///
+ [DataField("passiveLimitPerSource")]
+ public int PassiveLimitPerSource = 30000;
[ViewVariables(VVAccess.ReadOnly)] public int Id { get; set; }
[ViewVariables(VVAccess.ReadOnly)]
diff --git a/Content.Server/Research/Systems/ResearchSystem.Server.cs b/Content.Server/Research/Systems/ResearchSystem.Server.cs
index b563b0c4ef..76251a546f 100644
--- a/Content.Server/Research/Systems/ResearchSystem.Server.cs
+++ b/Content.Server/Research/Systems/ResearchSystem.Server.cs
@@ -1,4 +1,5 @@
using Content.Server.Power.EntitySystems;
+using Content.Server.Station.Systems;
using Content.Server.Research.Components;
using Content.Shared.Research.Prototypes;
@@ -6,6 +7,7 @@ namespace Content.Server.Research;
public sealed partial class ResearchSystem
{
+ [Dependency] private readonly StationSystem _stationSystem = default!;
private void InitializeServer()
{
SubscribeLocalEvent(OnServerStartup);
@@ -35,6 +37,10 @@ public sealed partial class ResearchSystem
public bool RegisterServerClient(ResearchServerComponent component, ResearchClientComponent clientComponent)
{
+ // Has to be on the same station
+ if (_stationSystem.GetOwningStation(component.Owner) != _stationSystem.GetOwningStation(clientComponent.Owner))
+ return false;
+
// TODO: This is shit but I'm just trying to fix RND for now until it gets bulldozed
if (TryComp(clientComponent.Owner, out var source))
{
@@ -96,7 +102,8 @@ public sealed partial class ResearchSystem
{
var points = 0;
- if (CanRun(component))
+ // Is our machine powered, and are we below our limit of passive point gain?
+ if (CanRun(component) && component.Points < (component.PassiveLimitPerSource * component.PointSources.Count))
{
foreach (var source in component.PointSources)
{