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 m_rewards { get; set; } = new (); public Item? m_deleted_item_nullable { get; set; } = null; //public List m_rewarded_money { get; set; } = new(); //public List 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 onInit() { await Task.CompletedTask; var result = new Result(); return result; } public async Task 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 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(); (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(); 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); } } }