clean up infinite researchsystem shitcode (#13136)

* clean up infinite researchsystem shitcode

* fml some more shit

* make syncing work logically

* naming naming naming
This commit is contained in:
Nemanja
2022-12-25 16:22:23 -05:00
committed by GitHub
parent 9afbdf6a17
commit 4eee1ee9b2
23 changed files with 497 additions and 293 deletions

View File

@@ -1,8 +1,8 @@
using Content.Server.Research.Components;
using Content.Server.Research.Systems;
using Content.Server.Research.Systems;
using Content.Server.Research.TechnologyDisk.Components;
using Content.Server.UserInterface;
using Content.Shared.Research;
using Content.Shared.Research.Components;
using Robust.Server.GameObjects;
using Robust.Shared.Timing;
@@ -20,6 +20,7 @@ public sealed class DiskConsoleSystem : EntitySystem
{
SubscribeLocalEvent<DiskConsoleComponent, DiskConsolePrintDiskMessage>(OnPrintDisk);
SubscribeLocalEvent<DiskConsoleComponent, ResearchServerPointsChangedEvent>(OnPointsChanged);
SubscribeLocalEvent<DiskConsoleComponent, ResearchRegistrationChangedEvent>(OnRegistrationChanged);
SubscribeLocalEvent<DiskConsoleComponent, BeforeActivatableUIOpenEvent>(OnBeforeUiOpen);
SubscribeLocalEvent<DiskConsolePrintingComponent, ComponentShutdown>(OnShutdown);
@@ -41,17 +42,21 @@ public sealed class DiskConsoleSystem : EntitySystem
private void OnPrintDisk(EntityUid uid, DiskConsoleComponent component, DiskConsolePrintDiskMessage args)
{
if (!TryComp<ResearchClientComponent>(uid, out var client) || client.Server == null)
if (HasComp<DiskConsolePrintingComponent>(uid))
return;
if (client.Server.Points < component.PricePerDisk)
if (!_research.TryGetClientServer(uid, out var server, out var serverComp))
return;
_research.ChangePointsOnServer(client.Server.Owner, -component.PricePerDisk, client.Server);
if (serverComp.Points < component.PricePerDisk)
return;
_research.AddPointsToServer(server.Value, -component.PricePerDisk, serverComp);
_audio.PlayPvs(component.PrintSound, uid);
var printing = EnsureComp<DiskConsolePrintingComponent>(uid);
printing.FinishTime = _timing.CurTime + component.PrintDuration;
UpdateUserInterface(uid, component);
}
private void OnPointsChanged(EntityUid uid, DiskConsoleComponent component, ref ResearchServerPointsChangedEvent args)
@@ -59,6 +64,11 @@ public sealed class DiskConsoleSystem : EntitySystem
UpdateUserInterface(uid, component);
}
private void OnRegistrationChanged(EntityUid uid, DiskConsoleComponent component, ref ResearchRegistrationChangedEvent args)
{
UpdateUserInterface(uid, component);
}
private void OnBeforeUiOpen(EntityUid uid, DiskConsoleComponent component, BeforeActivatableUIOpenEvent args)
{
UpdateUserInterface(uid, component);
@@ -70,9 +80,9 @@ public sealed class DiskConsoleSystem : EntitySystem
return;
var totalPoints = 0;
if (TryComp<ResearchClientComponent>(uid, out var client) && client.Server != null)
if (_research.TryGetClientServer(uid, out _, out var server))
{
totalPoints = client.Server.Points;
totalPoints = server.Points;
}
var canPrint = !HasComp<DiskConsolePrintingComponent>(uid) && totalPoints >= component.PricePerDisk;