초기커밋
This commit is contained in:
119
GameServer/Contents/Craft/Action/CraftRecipeAction.cs
Normal file
119
GameServer/Contents/Craft/Action/CraftRecipeAction.cs
Normal file
@@ -0,0 +1,119 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user