]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
fix emagged lathes (#23318)
authorIlya246 <57039557+Ilya246@users.noreply.github.com>
Tue, 2 Jan 2024 07:11:13 +0000 (11:11 +0400)
committerGitHub <noreply@github.com>
Tue, 2 Jan 2024 07:11:13 +0000 (02:11 -0500)
* implement

* pass uid

* fix

* fix dementia

* event implementation

* fix

Content.Server/Lathe/LatheSystem.cs
Content.Shared/Lathe/EmagLatheComponent.cs
Content.Shared/Lathe/LatheComponent.cs

index 9e06dca52b8047ac48f0acdef9d668ff336b159f..8b1f3b471c54701918e6436246e26d73c4fd08c8 100644 (file)
@@ -107,7 +107,7 @@ namespace Content.Server.Lathe
             if (args.Storage != uid)
                 return;
             var materialWhitelist = new List<ProtoId<MaterialPrototype>>();
-            var recipes = GetAllBaseRecipes(component);
+            var recipes = GetAvailableRecipes(uid, component, true);
             foreach (var id in recipes)
             {
                 if (!_proto.TryIndex(id, out var proto))
@@ -126,18 +126,18 @@ namespace Content.Server.Lathe
         }
 
         [PublicAPI]
-        public bool TryGetAvailableRecipes(EntityUid uid, [NotNullWhen(true)] out List<ProtoId<LatheRecipePrototype>>? recipes, [NotNullWhen(true)] LatheComponent? component = null)
+        public bool TryGetAvailableRecipes(EntityUid uid, [NotNullWhen(true)] out List<ProtoId<LatheRecipePrototype>>? recipes, [NotNullWhen(true)] LatheComponent? component = null, bool getUnavailable = false)
         {
             recipes = null;
             if (!Resolve(uid, ref component))
                 return false;
-            recipes = GetAvailableRecipes(uid, component);
+            recipes = GetAvailableRecipes(uid, component, getUnavailable);
             return true;
         }
 
-        public List<ProtoId<LatheRecipePrototype>> GetAvailableRecipes(EntityUid uid, LatheComponent component)
+        public List<ProtoId<LatheRecipePrototype>> GetAvailableRecipes(EntityUid uid, LatheComponent component, bool getUnavailable = false)
         {
-            var ev = new LatheGetRecipesEvent(uid)
+            var ev = new LatheGetRecipesEvent(uid, getUnavailable)
             {
                 Recipes = new List<ProtoId<LatheRecipePrototype>>(component.StaticRecipes)
             };
@@ -236,7 +236,7 @@ namespace Content.Server.Lathe
 
             foreach (var recipe in latheComponent.DynamicRecipes)
             {
-                if (!component.UnlockedRecipes.Contains(recipe) || args.Recipes.Contains(recipe))
+                if (!(args.getUnavailable || component.UnlockedRecipes.Contains(recipe)) || args.Recipes.Contains(recipe))
                     continue;
                 args.Recipes.Add(recipe);
             }
@@ -246,11 +246,11 @@ namespace Content.Server.Lathe
         {
             if (uid != args.Lathe || !TryComp<TechnologyDatabaseComponent>(uid, out var technologyDatabase))
                 return;
-            if (!HasComp<EmaggedComponent>(uid))
+            if (!args.getUnavailable && !HasComp<EmaggedComponent>(uid))
                 return;
             foreach (var recipe in component.EmagDynamicRecipes)
             {
-                if (!technologyDatabase.UnlockedRecipes.Contains(recipe) || args.Recipes.Contains(recipe))
+                if (!(args.getUnavailable || technologyDatabase.UnlockedRecipes.Contains(recipe)) || args.Recipes.Contains(recipe))
                     continue;
                 args.Recipes.Add(recipe);
             }
index 02a04b2024745d6ba3978f2053ee904e628ba03d..9fe53c8d4932cddee010f3624fc97ba31e7de70a 100644 (file)
@@ -1,25 +1,23 @@
 using Content.Shared.Research.Prototypes;
 using Robust.Shared.GameStates;
+using Robust.Shared.Prototypes;
 using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List;
 
 namespace Content.Shared.Lathe
 {
-    [RegisterComponent, NetworkedComponent]
-    [AutoGenerateComponentState]
+    [RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
     public sealed partial class EmagLatheRecipesComponent : Component
     {
         /// <summary>
         /// All of the dynamic recipes that the lathe is capable to get using EMAG
         /// </summary>
-        [DataField("emagDynamicRecipes", customTypeSerializer: typeof(PrototypeIdListSerializer<LatheRecipePrototype>))]
-        [AutoNetworkedField]
-        public List<string> EmagDynamicRecipes = new();
+        [DataField, AutoNetworkedField]
+        public List<ProtoId<LatheRecipePrototype>> EmagDynamicRecipes = new();
 
         /// <summary>
         /// All of the static recipes that the lathe is capable to get using EMAG
         /// </summary>
-        [DataField("emagStaticRecipes", customTypeSerializer: typeof(PrototypeIdListSerializer<LatheRecipePrototype>))]
-        [AutoNetworkedField]
-        public List<string> EmagStaticRecipes = new();
+        [DataField, AutoNetworkedField]
+        public List<ProtoId<LatheRecipePrototype>> EmagStaticRecipes = new();
     }
 }
index 6bbdb61a426f9484e398344b9d5077ec914d020d..e1110777dc026e153af042808194170b95695ef8 100644 (file)
@@ -68,11 +68,14 @@ namespace Content.Shared.Lathe
     {
         public readonly EntityUid Lathe;
 
+        public bool getUnavailable;
+
         public List<ProtoId<LatheRecipePrototype>> Recipes = new();
 
-        public LatheGetRecipesEvent(EntityUid lathe)
+        public LatheGetRecipesEvent(EntityUid lathe, bool forced)
         {
             Lathe = lathe;
+            getUnavailable = forced;
         }
     }