120 lines
3.9 KiB
C#
120 lines
3.9 KiB
C#
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<META_ID, CraftRecipe> m_Recipes = new();
|
|
|
|
public CraftRecipeAction(Player owner)
|
|
: base(owner)
|
|
{
|
|
}
|
|
|
|
public override Task<Result> onInit()
|
|
{
|
|
var result = new Result();
|
|
|
|
return Task.FromResult(result);
|
|
}
|
|
|
|
public override void onClear()
|
|
{
|
|
m_Recipes.Clear();
|
|
}
|
|
|
|
public List<META_ID> getRecipeMetaIds()
|
|
{
|
|
var recipe_meta_ids = new List<META_ID>();
|
|
|
|
foreach (var recipe in m_Recipes.Values)
|
|
{
|
|
var recipe_attribute = recipe.getEntityAttribute<CraftRecipeAttribute>();
|
|
NullReferenceCheckHelper.throwIfNull(recipe_attribute, () => $"recipe_attribute is null !!!");
|
|
|
|
recipe_meta_ids.Add(recipe_attribute.CraftMetaId);
|
|
}
|
|
|
|
return recipe_meta_ids;
|
|
}
|
|
|
|
public async Task<Result> AddRecipeFromDocs(List<CraftRecipeDoc> 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<CraftRecipeAttribute>();
|
|
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<Result> 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;
|
|
}
|
|
}
|
|
}
|