Files
caliverse_server/GameServer/Contents/ItemFunction/Action/RandomBoxItemUseAction.cs
2025-05-01 07:20:41 +09:00

129 lines
4.5 KiB
C#

using Amazon.Runtime.Internal;
using Nettention.Proud;
using ServerCommon;
using ServerCore; using ServerBase;
namespace GameServer
{
public class RandomBoxItemReference
{
public SelectedGacha? m_gacha_data { get; set; } = null;
public ushort m_num { get; set; } = 1;
public string m_item_guid { get; set; } = string.Empty;
public List<MetaAssets.Reward> m_rewards { get; set; } = new ();
public Item? m_deleted_item_nullable { get; set; } = null;
//public List<MetaAssets.Reward> m_rewarded_money { get; set; } = new();
//public List<Item> m_rewarded_items { get; set; } = new();
public CommonResult m_common_result { get; set; } = new();
}
public class RandomBoxItemUseAction : EntityActionBase
{
public RandomBoxItemUseAction(EntityBase owner) : base(owner)
{
}
public override void onClear()
{
return;
}
public override async Task<Result> onInit()
{
await Task.CompletedTask;
var result = new Result();
return result;
}
public async Task<Result> getGachaReward(RandomBoxItemReference randomBoxItemRef)
{
var owner = getOwner() as Player;
NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!");
IReward reward_proc = new RewardRandomItemBox(owner, owner.getUserGuid(), randomBoxItemRef);
var result = await RewardManager.It.proceedRewardProcess(reward_proc);
reward_proc.postRewardProcess();
return result;
}
public async Task<Result> deleteRandomBox(RandomBoxItemReference randomBoxItemRef)
{
var item_guid = randomBoxItemRef.m_item_guid;
var num = randomBoxItemRef.m_num;
var owner = getOwner() as Player;
NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!");
var inventory_action = owner.getEntityAction<InventoryActionBase>();
(var result, var removed_item) = await inventory_action.tryDeleteItemByGuid(item_guid, num);
if (result.isFail())
{
var err_msg = $"Failed to tryDeleteItemByGuid() !!! : {result.toBasicString()} - {owner.toBasicString()}";
Log.getLogger().error(err_msg);
return result;
}
randomBoxItemRef.m_deleted_item_nullable = removed_item;
return result;
}
public Result conditionCheck(ref RandomBoxItemReference randomBoxItemRef)
{
var owner = getOwner() as Player;
NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!");
var inventory_action = owner.getEntityAction<InventoryActionBase>();
var result = new Result();
var item_guid = randomBoxItemRef.m_item_guid;
var item = inventory_action.tryGetItemByItemGuid(item_guid);
if (item is null)
{
var err_msg = $"Failed to tryGetItemByItemGuid !!! : itemGuid:{item_guid} : {this.getTypeName()}";
result.setFail(ServerErrorCode.ItemNotFound, err_msg);
Log.getLogger().error(result.toBasicString());
return result;
}
var item_meta = item.getItemMeta();
if (item_meta is null)
{
var err_msg = $"Not found meta of Item !!! : temMetaId:{item_guid}";
result.setFail(ServerErrorCode.ItemNotFound, err_msg);
return result;
}
if (false == item_meta.canRewardFromItem())
{
var err_msg = $"RandomBoxItemDataInvalid itemId({item_meta.ItemId})";
result.setFail(ServerErrorCode.RandomBoxItemDataInvalid, err_msg);
return result;
}
if (false == MetaData.Instance._GachaMetaTable.TryGetValue(item_meta.GachaGroupId, out var gachaData))
{
var err_msg = $"Not Exist GachaData gachaGroupId = {item_meta.GachaGroupId}";
result.setFail(ServerErrorCode.NotExistGachaData, err_msg);
return result;
}
randomBoxItemRef.m_gacha_data = gachaData;
return result;
}
public void useRandomBoxItem()
{
string err_msg = $"need code implement !!!!";
Log.getLogger().error(err_msg);
}
}
}