]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Fix multiple research consoles exploit (#34334)
authorthemias <89101928+themias@users.noreply.github.com>
Tue, 11 Feb 2025 02:52:26 +0000 (21:52 -0500)
committerGitHub <noreply@github.com>
Tue, 11 Feb 2025 02:52:26 +0000 (13:52 +1100)
Content.Server/Research/Systems/ResearchSystem.Console.cs
Content.Server/Research/Systems/ResearchSystem.Technology.cs
Content.Shared/Research/Components/TechnologyDatabaseComponent.cs
Content.Shared/Research/Systems/SharedResearchSystem.cs

index c227aee7f075216700041892c1529f92c3afc8d6..baaf06ea714220a9ed55db1855a6f18c9565da2b 100644 (file)
@@ -21,6 +21,7 @@ public sealed partial class ResearchSystem
         SubscribeLocalEvent<ResearchConsoleComponent, ResearchServerPointsChangedEvent>(OnPointsChanged);
         SubscribeLocalEvent<ResearchConsoleComponent, ResearchRegistrationChangedEvent>(OnConsoleRegistrationChanged);
         SubscribeLocalEvent<ResearchConsoleComponent, TechnologyDatabaseModifiedEvent>(OnConsoleDatabaseModified);
+        SubscribeLocalEvent<ResearchConsoleComponent, TechnologyDatabaseSynchronizedEvent>(OnConsoleDatabaseSynchronized);
         SubscribeLocalEvent<ResearchConsoleComponent, GotEmaggedEvent>(OnEmagged);
     }
 
@@ -100,6 +101,12 @@ public sealed partial class ResearchSystem
     }
 
     private void OnConsoleDatabaseModified(EntityUid uid, ResearchConsoleComponent component, ref TechnologyDatabaseModifiedEvent args)
+    {
+        SyncClientWithServer(uid);
+        UpdateConsoleInterface(uid, component);
+    }
+
+    private void OnConsoleDatabaseSynchronized(EntityUid uid, ResearchConsoleComponent component, ref TechnologyDatabaseSynchronizedEvent args)
     {
         UpdateConsoleInterface(uid, component);
     }
@@ -114,5 +121,4 @@ public sealed partial class ResearchSystem
 
         args.Handled = true;
     }
-
 }
index 7578d316c5e8946dfd834155dcd7aa04d8c57e74..360985b4b6371aa487719ce8df1d0f7463805269 100644 (file)
@@ -23,7 +23,7 @@ public sealed partial class ResearchSystem
 
         Dirty(primaryUid, primaryDb);
 
-        var ev = new TechnologyDatabaseModifiedEvent();
+        var ev = new TechnologyDatabaseSynchronizedEvent();
         RaiseLocalEvent(primaryUid, ref ev);
     }
 
index fc317454c9a3f2fbe374efd1461a8745ff04be23..4f976869f76b8ce3395e878e8727e5d1ede0c929 100644 (file)
@@ -55,3 +55,10 @@ public sealed partial class TechnologyDatabaseComponent : Component
 /// </remarks>
 [ByRefEvent]
 public readonly record struct TechnologyDatabaseModifiedEvent;
+
+/// <summary>
+/// Event raised on a database after being synchronized
+/// with the values from another database.
+/// </summary>
+[ByRefEvent]
+public readonly record struct TechnologyDatabaseSynchronizedEvent;
index 06e12e0798acba85e7ec81b84c4843242a4649e4..bca1ae4888f37c9b14c2dea0e394ea6427bd4e3f 100644 (file)
@@ -227,6 +227,9 @@ public abstract class SharedResearchSystem : EntitySystem
             return;
         component.MainDiscipline = prototype.Discipline;
         Dirty(uid, component);
+
+        var ev = new TechnologyDatabaseModifiedEvent();
+        RaiseLocalEvent(uid, ref ev);
     }
 
     /// <summary>