fix emagged lathes (#23318)
* implement * pass uid * fix * fix dementia * event implementation * fix
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user