using Amazon.S3.Model.Internal.MarshallTransformations; using ServerCommon; using ServerCore; using ServerBase; using System.Collections.Concurrent; using META_ID = System.UInt32; namespace GameServer { public class CraftRecipeAction : EntityActionBase { private ConcurrentDictionary m_Recipes = new(); public CraftRecipeAction(Player owner) : base(owner) { } public override Task onInit() { var result = new Result(); return Task.FromResult(result); } public override void onClear() { m_Recipes.Clear(); } public List getRecipeMetaIds() { var recipe_meta_ids = new List(); foreach (var recipe in m_Recipes.Values) { var recipe_attribute = recipe.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(recipe_attribute, () => $"recipe_attribute is null !!!"); recipe_meta_ids.Add(recipe_attribute.CraftMetaId); } return recipe_meta_ids; } public async Task AddRecipeFromDocs(List recipeDocs) { var result = new Result(); var err_msg = string.Empty; var player = getOwner() as Player; NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!"); foreach (var recipe_doc in recipeDocs) { (result, var recipe) = await CraftRecipe.createRecipeFromDoc(player, recipe_doc); if (result.isFail() || recipe == null) { err_msg = $"Failed to createRecipeFromDoc() !!! : {result.toBasicString()}"; Log.getLogger().error(err_msg); return result; } var recipe_attribute = recipe.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(recipe_attribute, () => $"recipe_attribute is null !!! - {player.toBasicString()}"); if (m_Recipes.TryAdd(recipe_attribute.CraftMetaId, recipe) == false) { err_msg = $"Failed to get recipe attribute : {nameof(CraftRecipeAttribute)}"; result.setFail(ServerErrorCode.EntityAttributeIsNull, err_msg); Log.getLogger().error(result.toBasicString()); return result; } } return result; } public async Task RegisterRecipe(META_ID craft_meta_id) { var result = new Result(); var err_msg = string.Empty; var player = getOwner() as Player; NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!"); if (HasRecipe(craft_meta_id) == true) { err_msg = $"Already Registered Recipe Failed. !!! - {getOwner().toBasicString()}"; result.setFail(ServerErrorCode.CraftingRecipeIsAlreadyRegister, err_msg); Log.getLogger().error(result.toBasicString()); return result; } (result, var craft_recipe) = await CraftRecipe.createRecipe(player, craft_meta_id); if (result.isFail() || craft_recipe == null) { err_msg = $"Create Craft Recipe Failed. !!! - {getOwner().toBasicString()}"; Log.getLogger().error(err_msg); return result; } m_Recipes.TryAdd(craft_meta_id, craft_recipe); return result; } public bool HasRecipe(META_ID craft_meta_id) { if(m_Recipes.TryGetValue(craft_meta_id, out var result) == false) { return false; } return true; } } }