Files
caliverse_server/GameServer/z.Backup/Inventory.cs
2025-05-01 07:20:41 +09:00

1084 lines
41 KiB
C#

//using Amazon.DynamoDBv2.DocumentModel;
//using CommandLine;
//using Google.Protobuf.WellKnownTypes;
//using Nettention.Proud;
//using ServerCommon;
//using ServerCommon.BusinessLogDomain;
//using ServerCore; using ServerBase;
//using System.Collections.Concurrent;
//using System.Data;
//using System.Diagnostics.CodeAnalysis;
//using System.Linq;
//using static ClientToGameRes.Types;
//using static ServerCommon.UserActorLog;
//namespace GameServer
//{
// public class Inventory
// {
// InventoryEntity ItemList = new();
// ConcurrentDictionary<string, ItemEntity> Items = new();
// /// <summary>
// /// accountGuid
// /// </summary>
// string Owner = string.Empty;
// public int[] MaxSlot = { 80, 80, 80, 80, 80, 80, 80, 80, 80, 80 };
// public Inventory() { }
// public void SetOwner(string owner)
// {
// Owner = owner;
// }
// public async Task<InventoryEntity> getInventoryEntityAfterReadDocument(Document inventoryDocument)
// {
// if (!ItemList.ReadFrom(inventoryDocument))
// {
// Log.getLogger().error("Inventory read error");
// return null;
// }
// return ItemList;
// }
// public async Task<bool> LoadDB(string accountGuid)
// {
// Clear();
// var inventoryDocument = await GameServerApp.Instance.MainDB.GetInventory(accountGuid);
// if (inventoryDocument == null)
// {
// Log.getLogger().error("document is null");
// return false;
// }
// if (!ItemList.ReadFrom(inventoryDocument))
// {
// Log.getLogger().error("Inventory read error");
// return false;
// }
// List<string> itemGuids = new();
// foreach (var itemtap in ItemList.Attr.InventoryTaps)
// {
// itemGuids.AddRange(itemtap.ToList());
// }
// var itemEntityList = await GameServerApp.Instance.MainDB.GetItemEntityList(itemGuids);
// if (itemEntityList == null)
// {
// Log.getLogger().error("itemList is null");
// return false;
// }
// foreach (var itemEntity in itemEntityList)
// {
// if (itemEntity.Attr.Count <= 0)
// {
// ServerLog.Fatal($"{accountGuid} Check Item{itemEntity.Attr.ItemGuid} Delete Logic !!!!!");
// foreach (var inventoryTap in ItemList.Attr.InventoryTaps)
// {
// if (!inventoryTap.Contains(itemEntity.PK_Guid))
// continue;
// inventoryTap.Remove(itemEntity.PK_Guid);
// }
// }
// else
// {
// if (!Items.TryAdd(itemEntity.PK_Guid, itemEntity))
// {
// Log.getLogger().error($"ItemEntity itemGuid : {itemEntity.PK_Guid} - add fail");
// return false;
// }
// }
// }
// Owner = accountGuid;
// return true;
// }
// public void UpdateItemDBToMemory(List<ItemEntity> newitems)
// {
// foreach(var item in newitems)
// {
// if(item.Attr.Count == 0 || Owner != item.Attr.Owner)
// {
// if(Items.TryRemove(item.PK_Guid, out var itemEntity) == false)
// {
// Log.getLogger().error($"TryRemove failed. pk : {item.PK_Guid}");
// continue;
// }
// }
// else
// {
// Items[item.PK_Guid] = item;
// }
// }
// }
// public void UpdateInventoryDBToMemory(Document document)
// {
// ItemList.ReadFrom(document);
// }
// public async Task<bool> ClearDB()
// {
// List<Document> documents = new();
// var inventoryDocument = MainDB.DocumentForDelete(EEntityType.Inventory, ItemList.PK_Guid, ItemList.SK_Empty);
// documents.Add(inventoryDocument);
// foreach (var item in Items.Values)
// {
// var itemDocument = MainDB.DocumentForDelete(EEntityType.Item, item.PK_Guid, item.SK_Guid);
// documents.Add(itemDocument);
// }
// if (!await GameServerApp.Instance.MainDB.DeleteDocuments(documents))
// {
// Log.getLogger().error("Fail DeleteDocuments");
// return false;
// }
// return true;
// }
// public void Clear()
// {
// ItemList.Clear();
// Items.Clear();
// }
// public global::Inventory MakePacketInventoryData()
// {
// global::Inventory inventory = new();
// inventory.EtcItem.AddRange(MakePacketItemList(0));
// inventory.CostumeItem.AddRange(MakePacketItemList(1));
// inventory.InteriorItem.AddRange(MakePacketItemList(2));
// inventory.BeautyItem.AddRange(MakePacketItemList(3));
// inventory.TattooItem.AddRange(MakePacketItemList(4));
// inventory.EtcItemNft.AddRange(MakePacketItemList(5));
// inventory.CostumeItemNft.AddRange(MakePacketItemList(6));
// inventory.InteriorItemNft.AddRange(MakePacketItemList(7));
// inventory.BeautyItemNft.AddRange(MakePacketItemList(8));
// inventory.TattooItemNft.AddRange(MakePacketItemList(9));
// return inventory;
// }
// List<Item> MakePacketItemList(int inventoryTapNumber)
// {
// List<Item> itemList = new();
// foreach (var itemGuid in ItemList.Attr.InventoryTaps[inventoryTapNumber])
// {
// if (!Items.TryGetValue(itemGuid, out var item))
// continue;
// itemList.Add(item.ConvetToItem());
// }
// return itemList;
// }
// public void SendInfo(HostID hostId)
// {
// }
// public bool HasItem(string itemGuid)
// {
// return Items.ContainsKey(itemGuid);
// }
// public bool HasItem(int itemId)
// {
// foreach(var item in Items.Values)
// {
// if (item.Attr.ItemId == itemId)
// return true;
// }
// return false;
// }
// public bool GetItem(string itemGuid, [MaybeNullWhen(false)] out ItemEntity item)
// {
// return Items.TryGetValue(itemGuid, out item);
// }
// public List<ItemEntity> GetItem(int itemId)
// {
// return Items.Values.Where(x => x.Attr.ItemId == itemId).ToList();
// }
// public static int GetInventoryTapNumber(int itemId)
// {
// int tapNumber = 0;
// if (!TableData.Instance._ItemTable.TryGetValue(itemId, out var itemData))
// return -1;
// if (itemData.TypeLarge == EItemLargeType.CLOTH)
// {
// tapNumber += 1;
// }
// else if (itemData.TypeLarge == EItemLargeType.PROP)
// {
// tapNumber += 2;
// }
// else if (itemData.TypeLarge == EItemLargeType.BEAUTY)
// {
// tapNumber += 3;
// }
// else if (itemData.TypeLarge == EItemLargeType.TATTOO)
// {
// tapNumber += 4;
// }
// if (itemData.IsNFT)
// tapNumber += 5;
// return tapNumber;
// }
// private bool _ChangeAttribute(string itemGuid, int slot, out int changeAttributeId)
// {
// changeAttributeId = -1;
// if (!Items.TryGetValue(itemGuid, out var item))
// {
// Log.getLogger().error($"Not Exist itemGuid({itemGuid})");
// return false;
// }
// if(slot <= 0 || slot > item.Attr.AttributeIds.Count)
// {
// Log.getLogger().error($"Invalid Slot : {slot}");
// return false;
// }
// if (!TableData.Instance._ItemTable.TryGetValue(item.Attr.ItemId, out var itemData))
// {
// Log.getLogger().error($"Not Exist itemId({item.Attr.ItemId})");
// return false;
// }
// if (!TableData.Instance._AttributeRandomGroupDataTable.TryGetValue(itemData.AttributeRandomGroupID, out var randomGroupList))
// {
// Log.getLogger().error($"Not Exist AttributeRandomGroupID({itemData.AttributeRandomGroupID})");
// return false;
// }
// int TotalWeight = randomGroupList.TotalWeight;
// var attrivuteIds = item.Attr.AttributeIds;
// foreach (var attributeData in randomGroupList.attributeRandomGroupDatas)
// {
// for (int i = 0; i < attrivuteIds.Count; ++i)
// {
// if (attributeData.Key == attrivuteIds[i])
// {
// TotalWeight -= attributeData.Weight;
// break;
// }
// }
// }
// int Count = 0;
// int randomNumber = ServerUtil.rnd.Next(0, TotalWeight);
// foreach (var attributeData in randomGroupList.attributeRandomGroupDatas)
// {
// bool breakCheck = false;
// for (int i = 0; i < attrivuteIds.Count; ++i)
// {
// if (attributeData.Key == attrivuteIds[i])
// {
// breakCheck = true;
// break;
// }
// }
// if (breakCheck == true)
// {
// continue;
// }
// Count += attributeData.Weight;
// if (Count > randomNumber)
// {
// changeAttributeId = attributeData.Key;
// return true;
// }
// }
// return false;
// }
// private bool MakeAttribute(ItemData itemdata, out List<int> selectedAttributeIds)
// {
// selectedAttributeIds = new();
// if (!TableData.Instance._AttributeDefinitionDataTable.TryGetValue(itemdata.DefaultAttribute, out var AttributeData))
// {
// Log.getLogger().error($"Not Exist DefaultAttribute({itemdata.DefaultAttribute})");
// return false;
// }
// selectedAttributeIds.Add(AttributeData.ID);
// if (!TableData.Instance._ItemLevelEnchantDataTable.TryGetValue(1, out var itemLevelEnchantData))
// {
// Log.getLogger().error($"Not Exist Level(1)");
// return false;
// }
// if(itemLevelEnchantData.enchantDataList.TryGetValue(itemdata.Rarity, out var enchantData) == false)
// {
// Log.getLogger().error($"Not Exist Rarity({itemdata.Rarity})");
// return false;
// }
// if (!TableData.Instance._AttributeRandomGroupDataTable.TryGetValue(itemdata.AttributeRandomGroupID, out var randomGroupList))
// {
// Log.getLogger().error($"Not Exist AttributeRandomGroupID({itemdata.AttributeRandomGroupID})");
// return false;
// }
// int TotalWeight = randomGroupList.TotalWeight;
// List<int> randomAttributeIds = new();
// var AttributeDefinitionData = TableData.Instance._AttributeDefinitionDataTable;
// while (randomAttributeIds.Count < enchantData.AttributeValues.Count - 1)
// {
// if(TotalWeight == 0)
// {
// return false;
// }
// int Count = 0;
// int randomNumber = ServerUtil.rnd.Next(0, TotalWeight);
// foreach (var attributeData in randomGroupList.attributeRandomGroupDatas)
// {
// if (!AttributeDefinitionData.TryGetValue(attributeData.Attribute, out var randomAttributeData))
// {
// Log.getLogger().error($"Not Exist AttributeRandomGroupID({itemdata.AttributeRandomGroupID})");
// return false;
// }
// bool breakCheck = false;
// foreach(var selectAttribute in randomAttributeIds)
// {
// if (randomAttributeData.ID == selectAttribute)
// {
// breakCheck = true;
// break;
// }
// }
// if (breakCheck == true)
// {
// continue;
// }
// Count += attributeData.Weight;
// if(Count > randomNumber)
// {
// randomAttributeIds.Add(randomAttributeData.ID);
// TotalWeight -= attributeData.Weight;
// break;
// }
// }
// }
// selectedAttributeIds.AddRange(randomAttributeIds);
// return true;
// }
// bool CreateItem(int itemId, int count, [MaybeNullWhen(false)] out List<ItemEntity> createdItemList)
// {
// createdItemList = new();
// if (!TableData.Instance._ItemTable.TryGetValue(itemId, out var itemData))
// {
// Log.getLogger().error($"Not Exist itemId({itemId})");
// return false;
// }
// if (count <= 0)
// {
// Log.getLogger().error($"Invalid Parameter count({count})");
// return false;
// }
// var remainCount = count;
// while (remainCount > 0)
// {
// int createCount;
// if (remainCount >= itemData.StackMaxCount)
// {
// createCount = itemData.StackMaxCount;
// remainCount -= itemData.StackMaxCount;
// }
// else
// {
// createCount = remainCount;
// remainCount = 0;
// }
// List<int> attributeIds = new();
// int level = 0;
// if (itemData.TypeLarge == EItemLargeType.TATTOO)
// {
// level = 1;
// if (MakeAttribute(itemData, out attributeIds) == false)
// {
// Log.getLogger().error($"Invalid Parameter id({itemData.ItemId})");
// return false;
// }
// }
// ItemEntity item = new(itemId, createCount, level, attributeIds);
// createdItemList.Add(item);
// }
// return true;
// }
// bool _isPossibleToAddItem(int InventoryCount, out ServerErrorCode errorCode)
// {
// errorCode = ServerErrorCode.Success;
// if (TableData.Instance._GameConfigDataTable.TryGetValue("MaxItemCategorySlotNum", out var MaxCategorySlot) == false)
// {
// Log.getLogger().error($"Not Found MaxItemCategorySlotNum.");
// errorCode = ServerErrorCode.NotFoundTable;
// return false;
// }
// if (int.TryParse(MaxCategorySlot, out var Max_CategorySlot) == false)
// {
// Log.getLogger().error($"MaxItemCategorySlotNum convert failed.");
// errorCode = ServerErrorCode.TableError;
// return false;
// }
// if (Max_CategorySlot < 1 + InventoryCount)
// {
// Log.getLogger().error($"Create Item Failed. Inventory over.");
// errorCode = ServerErrorCode.InventoryFull;
// return false;
// }
// return true;
// }
// bool _AddItem(ItemEntity item, InventoryEntity updateInventoryEntity, out ServerErrorCode errorCode, [MaybeNullWhen(false)] out ItemLogData itemlogData)
// {
// itemlogData = default;
// if (TableData.Instance._ItemTable.TryGetValue(item.Attr.ItemId, out var itemMetaData) == false)
// {
// Log.getLogger().error($"Not Exist itemId({item.Attr.ItemId})");
// errorCode = ServerErrorCode.NotFoundTable;
// return false;
// }
// var tapNumber = GetInventoryTapNumber(item.Attr.ItemId);
// if (tapNumber == -1)
// {
// Log.getLogger().error($"Can't find InventoryTapNumber");
// errorCode = ServerErrorCode.TableError;
// return false;
// }
// if (_isPossibleToAddItem(updateInventoryEntity.Attr.InventoryTaps[tapNumber].Count, out errorCode) == false)
// return false;
// if (!updateInventoryEntity.Attr.InventoryTaps[tapNumber].Add(item.Attr.ItemGuid))
// return false;
// item.Attr.Owner = Owner;
// itemlogData = ItemBusinessLogHelper.toItemLogInfo(item, itemMetaData, CountDeltaType.New, 0, 0, new());
// return true;
// }
// public bool AddItem(ItemEntity item, InventoryEntity updateInventoryEntity, [MaybeNullWhen(false)] out ItemEntity updateItems,
// out ServerErrorCode errorCode, [MaybeNullWhen(false)] out ItemLogData itemlogData)
// {
// updateItems = default;
// itemlogData = default;
// if (Items.ContainsKey(item.Attr.ItemGuid))
// {
// Log.getLogger().error($"Already Exist itemGuid({item.Attr.ItemGuid})");
// errorCode = ServerErrorCode.NotFoundItem;
// return false;
// }
// if (!_AddItem(item, updateInventoryEntity, out errorCode, out itemlogData))
// {
// Log.getLogger().error($"Add Fail itemGuid({item.Attr.ItemGuid})");
// return false;
// }
// updateItems = item;
// return true;
// }
// public bool AddItem(int itemId, int count, InventoryEntity updateInventoryEntity, [MaybeNullWhen(false)] out List<ItemEntity> updateItems,
// out ServerErrorCode errorCode, out List<ItemLogData> itemlogDatas)
// {
// updateItems = default;
// itemlogDatas = new();
// if (!TableData.Instance._ItemTable.TryGetValue(itemId, out var itemMetaData))
// {
// Log.getLogger().error($"Not Exist itemId({itemId})");
// errorCode = ServerErrorCode.NotFoundItemTableId;
// return false;
// }
// if (count <= 0)
// {
// Log.getLogger().error($"Invalid Parameter count({count})");
// errorCode = ServerErrorCode.InvalidArgument;
// return false;
// }
// var itemList = Items.Values.Where(x => x.Attr.ItemId == itemId).ToList();
// var itemCount = itemList.Sum(x => x.Attr.Count);
// List<ItemEntity> newitemList = itemList.ConvertAll(o => new ItemEntity(o.DocumentForUpdate()));
// if (itemCount + count > itemMetaData.MaxCount)
// {
// Log.getLogger().error($"Item MaxCount Over");
// errorCode = ServerErrorCode.NoMoreAddItem;
// return false;
// }
// List<ItemEntity> addedItemAndCountList = new();
// var remainCount = count;
// newitemList.OrderByDescending(x => x.Attr.Count);
// foreach (var item in newitemList)
// {
// if (remainCount <= 0)
// break;
// if (item.Attr.Count >= itemMetaData.StackMaxCount)
// continue;
// var addCount = 0;
// if (item.Attr.Count + remainCount > itemMetaData.StackMaxCount)
// addCount = itemMetaData.StackMaxCount - item.Attr.Count;
// else
// addCount = remainCount;
// item.Attr.Count += addCount;
// item.Attr.UpdateTime = Timestamp.FromDateTime(DateTime.UtcNow);
// addedItemAndCountList.Add(item);
// remainCount -= addCount;
// itemlogDatas.Add(ItemBusinessLogHelper.toItemLogInfo(item, itemMetaData, CountDeltaType.Acquire, addCount, 0, new()));
// }
// if (remainCount > 0)
// {
// if(!CreateItem(itemId, remainCount, out var createdItemList))
// {
// Log.getLogger().error($"Create Fail itemId({itemId})");
// errorCode = ServerErrorCode.CreateItemFail;
// return false;
// }
// foreach (var createdItem in createdItemList)
// {
// if (!_AddItem(createdItem, updateInventoryEntity, out errorCode, out var itemlogData))
// {
// Log.getLogger().error($"Add Fail itemGuid({createdItem.Attr.ItemGuid})");
// return false;
// }
// if(itemlogData != null) itemlogDatas.Add(itemlogData);
// addedItemAndCountList.Add((createdItem));
// }
// }
// updateItems = addedItemAndCountList;
// errorCode = ServerErrorCode.Success;
// return true;
// }
// bool _DeleteItem(ItemEntity item, InventoryEntity updateInventoryEntity, [MaybeNullWhen(false)] out ItemLogData itemlogData)
// {
// itemlogData = default;
// if (TableData.Instance._ItemTable.TryGetValue(item.Attr.ItemId, out var itemMetaData) == false)
// {
// Log.getLogger().error($"Not Exist itemId({item.Attr.ItemId})");
// return false;
// }
// foreach (var inventoryTap in updateInventoryEntity.Attr.InventoryTaps)
// {
// if (!inventoryTap.Contains(item.PK_Guid))
// continue;
// if (!inventoryTap.Remove(item.PK_Guid))
// return false;
// int deltaCount = item.Attr.Count * -1;
// item.Attr.Count = 0;
// item.Attr.UpdateTime = Timestamp.FromDateTime(DateTime.UtcNow);
// itemlogData = ItemBusinessLogHelper.toItemLogInfo(item, itemMetaData, CountDeltaType.Delete, deltaCount, 0, new());
// return true;
// }
// return false;
// }
// public bool SellItem(string itemGuid, InventoryEntity updateInventoryEntity, [MaybeNullWhen(false)] out ItemEntity updateItems,
// out ServerErrorCode errorCode, [MaybeNullWhen(false)] out ItemLogData itemlogData)
// {
// updateItems = default;
// itemlogData = default;
// if (!Items.TryGetValue(itemGuid, out var item))
// {
// Log.getLogger().error($"Not Exist itemGuid({itemGuid})");
// errorCode = ServerErrorCode.NotFoundItem;
// return false;
// }
// ItemEntity newItem = new(item.DocumentForUpdate());
// if (!_SellItem(newItem, updateInventoryEntity, out itemlogData))
// {
// Log.getLogger().error($"Delete Fail itemGuid({itemGuid})");
// errorCode = ServerErrorCode.DeleteItemFail;
// return false;
// }
// updateItems = newItem;
// errorCode = ServerErrorCode.Success;
// return true;
// }
// bool _SellItem(ItemEntity item, InventoryEntity updateInventoryEntity, [MaybeNullWhen(false)] out ItemLogData itemlogData)
// {
// itemlogData = default;
// if (TableData.Instance._ItemTable.TryGetValue(item.Attr.ItemId, out var itemMetaData) == false)
// {
// Log.getLogger().error($"Not Exist itemId({item.Attr.ItemId})");
// return false;
// }
// foreach (var inventoryTap in updateInventoryEntity.Attr.InventoryTaps)
// {
// if (!inventoryTap.Contains(item.PK_Guid))
// continue;
// if (!inventoryTap.Remove(item.PK_Guid))
// return false;
// item.Attr.Owner = "";
// item.Attr.UpdateTime = Timestamp.FromDateTime(DateTime.UtcNow);
// itemlogData = ItemBusinessLogHelper.toItemLogInfo(item, itemMetaData, CountDeltaType.Delete, item.Attr.Count * -1, 0, new());
// return true;
// }
// return false;
// }
// public bool DeleteItem(string itemGuid, int count, InventoryEntity updateInventoryEntity, [MaybeNullWhen(false)] out ItemEntity updateItems,
// out ServerErrorCode errorCode, [MaybeNullWhen(false)] out ItemLogData itemlogData)
// {
// updateItems = default;
// itemlogData = default;
// if (!Items.TryGetValue(itemGuid, out var item))
// {
// Log.getLogger().error($"Not Exist itemGuid({itemGuid})");
// errorCode = ServerErrorCode.NotFoundItem;
// return false;
// }
// if (TableData.Instance._ItemTable.TryGetValue(item.Attr.ItemId, out var itemMetaData) == false)
// {
// Log.getLogger().error($"Not Exist itemId({item.Attr.ItemId})");
// errorCode = ServerErrorCode.NotFoundTable;
// return false;
// }
// if (count <= 0)
// {
// Log.getLogger().error($"Invalid Parameter count({count})");
// errorCode = ServerErrorCode.InvalidArgument;
// return false;
// }
// ItemEntity newItem = new(item.DocumentForUpdate());
// if (newItem.Attr.Count < count)
// {
// Log.getLogger().error($"Not Enough ItemCount");
// errorCode = ServerErrorCode.NotEnoughItem;
// return false;
// }
// else if (newItem.Attr.Count > count)
// {
// newItem.Attr.Count -= count;
// newItem.Attr.UpdateTime = Timestamp.FromDateTime(DateTime.UtcNow);
// itemlogData = ItemBusinessLogHelper.toItemLogInfo(item, itemMetaData, CountDeltaType.Consume, count * -1, 0, new());
// }
// else // deleteItem.Attr.Count == count
// {
// if (!_DeleteItem(newItem, updateInventoryEntity, out itemlogData))
// {
// Log.getLogger().error($"Delete Fail itemGuid({itemGuid})");
// errorCode = ServerErrorCode.DeleteItemFail;
// return false;
// }
// }
// updateItems = newItem;
// errorCode = ServerErrorCode.Success;
// return true;
// }
// public bool DeleteItem(int itemId, int count, InventoryEntity updateInventoryEntity, [MaybeNullWhen(false)] out List<ItemEntity> updateItems,
// out ServerErrorCode errorCode, [MaybeNullWhen(false)] out ItemLogData itemlogData)
// {
// updateItems = default;
// itemlogData = default;
// if (TableData.Instance._ItemTable.TryGetValue(itemId, out var itemMetaData) == false)
// {
// Log.getLogger().error($"Not Exist itemId({itemId})");
// errorCode = ServerErrorCode.NotFoundTable;
// return false;
// }
// if (count <= 0)
// {
// Log.getLogger().error($"Invalid Parameter count({count})");
// errorCode = ServerErrorCode.InvalidArgument;
// return false;
// }
// var itemList = Items.Values.Where(x => x.Attr.ItemId == itemId).ToList();
// var itemCount = itemList.Sum(x => x.Attr.Count);
// List<ItemEntity> newitemList = itemList.ConvertAll(o => new ItemEntity(o.DocumentForUpdate()));
// if (itemCount < count)
// {
// Log.getLogger().error($"Not Enough ItemCount");
// errorCode = ServerErrorCode.NotEnoughItem;
// return false;
// }
// List<ItemEntity> deletedItemAndCountList = new();
// var remainCount = count;
// newitemList.OrderBy(x => x.Attr.Count);
// foreach (var item in newitemList)
// {
// if (remainCount <= 0)
// break;
// if (item.Attr.Count > remainCount)
// {
// item.Attr.Count -= remainCount;
// item.Attr.UpdateTime = Timestamp.FromDateTime(DateTime.UtcNow);
// deletedItemAndCountList.Add(item);
// itemlogData = ItemBusinessLogHelper.toItemLogInfo(item, itemMetaData, CountDeltaType.Consume, remainCount * -1, 0, new());
// remainCount = 0;
// }
// else // item.Attr.Count <= remainCount
// {
// var deleteCount = item.Attr.Count;
// if (!_DeleteItem(item, updateInventoryEntity, out itemlogData))
// {
// Log.getLogger().error($"Delete Fail itemGuid({item.Attr.ItemGuid})");
// errorCode = ServerErrorCode.DeleteItemFail;
// return false;
// }
// deletedItemAndCountList.Add(item);
// remainCount -= deleteCount;
// }
// }
// updateItems = deletedItemAndCountList;
// errorCode = ServerErrorCode.Success;
// return true;
// }
// public async Task<bool> SaveInventory()
// {
// List<Document> documents = new();
// var inventoryDocument = ItemList.DocumentForUpdate();
// documents.Add(inventoryDocument);
// foreach (var item in Items.Values)
// {
// var itemDocument = item.DocumentForUpdate();
// documents.Add(itemDocument);
// }
// if (!await GameServerApp.Instance.MainDB.UpdateDocuments(documents))
// {
// Log.getLogger().error("Fail UpdateDocuments");
// return false;
// }
// return true;
// }
// public void CopyInventoryEntityForTransaction(out InventoryEntity newInventoryEntity)
// {
// newInventoryEntity = new(ItemList.DocumentForUpdate());
// }
// public bool LevelUpItem(string itemGuid, InventoryEntity updateInventoryEntity, bool isRegisterTattoo, [MaybeNullWhen(false)] out List<ItemEntity> updateItems, out ServerErrorCode errorCode,
// out bool isEnchantSuccess, out List<AttributeInfo>? changeAttributeList, [MaybeNullWhen(false)] out List<ItemLogData> itemlogDatas)
// {
// updateItems = default;
// changeAttributeList = default;
// isEnchantSuccess = false;
// itemlogDatas = new();
// if (Items.TryGetValue(itemGuid, out var itemInfo) == false)
// {
// Log.getLogger().error($"Not Exist itemGuid({itemGuid})");
// errorCode = ServerErrorCode.NotFoundItemTableId;
// return false;
// }
// if (!TableData.Instance._ItemTable.TryGetValue(itemInfo.Attr.ItemId, out var itemMetaData))
// {
// Log.getLogger().error($"Not Exist itemId({itemInfo.Attr.ItemId})");
// errorCode = ServerErrorCode.NotFoundItemTableId;
// return false;
// }
// if (!TableData.Instance._ItemLevelEnchantDataTable.TryGetValue(itemInfo.Attr.Level, out var newEnchantData))
// {
// Log.getLogger().error($"Not Exist EnchantDataTable Level({itemInfo.Attr.Level})");
// errorCode = ServerErrorCode.NotFoundItemTableId;
// return false;
// }
// if (newEnchantData.enchantDataList.TryGetValue(itemMetaData.Rarity, out var newEnchantInfo) == false)
// {
// Log.getLogger().error($"Not Exist Rarity({itemMetaData.Rarity})");
// errorCode = ServerErrorCode.NotFoundItemTableId;
// return false;
// }
// var curr_enchant_level = itemInfo.Attr.Level - 1;
// if (!TableData.Instance._ItemLevelEnchantDataTable.TryGetValue(curr_enchant_level, out var enchantData))
// {
// if(curr_enchant_level != 0)
// {
// Log.getLogger().error($"Not Exist EnchantDataTable Level({curr_enchant_level})");
// errorCode = ServerErrorCode.NotFoundItemTableId;
// return false;
// }
// }
// ItemLevelEnchantData.EnchantData enchantInfo = null;
// if ( null != enchantData
// && enchantData.enchantDataList.TryGetValue(itemMetaData.Rarity, out enchantInfo) == false)
// {
// Log.getLogger().error($"Not Exist Rarity({itemMetaData.Rarity})");
// errorCode = ServerErrorCode.NotFoundItemTableId;
// return false;
// }
// updateItems = new List<ItemEntity>();
// if (DeleteItem(newEnchantInfo.ConsumeItemID, newEnchantInfo.ConsumeItemCount, updateInventoryEntity, out var deletedItem, out errorCode, out var itemlogData) == false)
// {
// Log.getLogger().error($"Not Enough Item Item(ID : {newEnchantInfo.ConsumeItemID} NeedCount : {newEnchantInfo.ConsumeItemCount})");
// return false;
// }
// itemlogDatas.Add(itemlogData);
// updateItems.AddRange(deletedItem);
// ItemEntity updateItem = new(itemInfo.DocumentForUpdate());
// if (newEnchantInfo.Probability >= ServerUtil.rnd.Next(0, 10000) == true)
// {
// updateItem.Attr.Level += 1;
// updateItems.Add(updateItem);
// isEnchantSuccess = true;
// if(isRegisterTattoo == true)
// {
// changeAttributeList = new();
// for (int attributeSlot = 0; attributeSlot < itemInfo.Attr.AttributeIds.Count; ++attributeSlot)
// {
// int attributeId = itemInfo.Attr.AttributeIds[attributeSlot];
// int applyAttribute = newEnchantInfo.AttributeValues[attributeSlot] - (enchantInfo != null ? enchantInfo.AttributeValues[attributeSlot] : 0);
// changeAttributeList.Add(new AttributeInfo() { Attributeid = attributeId, Value = applyAttribute});
// }
// }
// itemlogDatas.Add(ItemBusinessLogHelper.toItemLogInfo(itemInfo, itemMetaData, CountDeltaType.Update, 0, 1, new()));
// }
// errorCode = ServerErrorCode.Success;
// return true;
// }
// public bool ChangeAttribute(string itemGuid, int slot, InventoryEntity updateInventoryEntity, bool isRegisterTattoo, [MaybeNullWhen(false)] out List<ItemEntity> updateItems,
// out ServerErrorCode errorCode, [MaybeNullWhen(false)] out List<AttributeInfo> changeAttriuteList, [MaybeNullWhen(false)] out List<ItemLogData> itemlogDatas)
// {
// updateItems = default;
// changeAttriuteList = default;
// itemlogDatas = new();
// if (slot < 0 || slot > Constant.MAX_TATTOO_SLOT)
// {
// Log.getLogger().error($"Out Of Range(0~{Constant.MAX_TATTOO_SLOT - 1}). TattooSlot:{slot}");
// errorCode = ServerErrorCode.InvalidAttributeSlot;
// return false;
// }
// if (Items.TryGetValue(itemGuid, out var itemInfo) == false)
// {
// Log.getLogger().error($"Not Exist itemGuid({itemGuid})");
// errorCode = ServerErrorCode.NotFoundItemTableId;
// return false;
// }
// if (!TableData.Instance._ItemTable.TryGetValue(itemInfo.Attr.ItemId, out var itemMetaData))
// {
// Log.getLogger().error($"Not Exist itemId({itemInfo.Attr.ItemId})");
// errorCode = ServerErrorCode.NotFoundItemTableId;
// return false;
// }
// if (!TableData.Instance._AttributeEnchantDataTable.TryGetValue(itemMetaData.Rarity, out var AttributeEnchantInfo))
// {
// Log.getLogger().error($"Not Exist itemId({itemInfo.Attr.ItemId})");
// errorCode = ServerErrorCode.NotFoundItemTableId;
// return false;
// }
// if (!TableData.Instance._ItemLevelEnchantDataTable.TryGetValue(itemInfo.Attr.Level, out var itemLevelEnchantData))
// {
// Log.getLogger().error($"Not Exist Level({itemInfo.Attr.Level})");
// errorCode = ServerErrorCode.NotFoundItemTableId;
// return false;
// }
// if (itemLevelEnchantData.enchantDataList.TryGetValue(itemMetaData.Rarity, out var enchantData) == false)
// {
// Log.getLogger().error($"Not Exist Rarity({itemMetaData.Rarity})");
// errorCode = ServerErrorCode.NotFoundItemTableId;
// return false;
// }
// updateItems = new List<ItemEntity>();
// if (DeleteItem(
// AttributeEnchantInfo.ItemID,
// AttributeEnchantInfo.ItemCount,
// updateInventoryEntity,
// out var deletedItem,
// out errorCode, out var itemlogData) == false)
// {
// Log.getLogger().error($"Not Enough Item Item(ID : {AttributeEnchantInfo.ItemID} NeedCount : {AttributeEnchantInfo.ItemCount})");
// return false;
// }
// itemlogDatas.Add(itemlogData);
// updateItems.AddRange(deletedItem);
// changeAttriuteList = new();
// ItemEntity updateItem = new(itemInfo.DocumentForUpdate());
// List<int> oldAttributeIds = itemInfo.Attr.AttributeIds;
// if (slot == 0)
// {
// if(MakeAttribute(itemMetaData, out var selectedAttributeIds) == false)
// {
// Log.getLogger().error($"Invalid Parameter id({itemMetaData.ItemId})");
// errorCode = ServerErrorCode.NotFoundItemTableId;
// return false;
// }
// if(isRegisterTattoo == true)
// {
// for (int attributeSlot = 0; attributeSlot < updateItem.Attr.AttributeIds.Count; ++attributeSlot)
// {
// int attributeId = updateItem.Attr.AttributeIds[attributeSlot];
// changeAttriuteList.Add(new AttributeInfo(){ Attributeid = attributeId, Value = enchantData.AttributeValues[attributeSlot] * -1 });
// }
// for (int attributeSlot = 0; attributeSlot < updateItem.Attr.AttributeIds.Count; ++attributeSlot)
// {
// int attributeId = selectedAttributeIds[attributeSlot];
// changeAttriuteList.Add(new AttributeInfo() { Attributeid = attributeId, Value = enchantData.AttributeValues[attributeSlot]});
// }
// }
// updateItem.Attr.AttributeIds = selectedAttributeIds;
// }
// else
// {
// if(_ChangeAttribute(itemGuid, slot, out var changeAttributeId) == false)
// {
// Log.getLogger().error($"_ChangeAttribute failed.");
// errorCode = ServerErrorCode.NotFoundItemTableId;
// return false;
// }
// if (isRegisterTattoo == true)
// {
// int attributeId = updateItem.Attr.AttributeIds[slot];
// changeAttriuteList.Add(new AttributeInfo() { Attributeid = attributeId, Value = enchantData.AttributeValues[slot] * -1 });
// changeAttriuteList.Add(new AttributeInfo() { Attributeid = attributeId, Value = enchantData.AttributeValues[slot]});
// }
// updateItem.Attr.AttributeIds[slot] = changeAttributeId;
// }
// updateItems.Add(updateItem);
// itemlogDatas.Add(ItemBusinessLogHelper.toItemLogInfo(updateItem, itemMetaData, CountDeltaType.Update, 0, 0, oldAttributeIds));
// errorCode = ServerErrorCode.Success;
// return true;
// }
// }
//}