//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 Items = new(); // /// // /// accountGuid // /// // 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 getInventoryEntityAfterReadDocument(Document inventoryDocument) // { // if (!ItemList.ReadFrom(inventoryDocument)) // { // Log.getLogger().error("Inventory read error"); // return null; // } // return ItemList; // } // public async Task 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 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 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 ClearDB() // { // List 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 MakePacketItemList(int inventoryTapNumber) // { // List 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 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 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 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 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 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 updateItems, // out ServerErrorCode errorCode, out List 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 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 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 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 newitemList = itemList.ConvertAll(o => new ItemEntity(o.DocumentForUpdate())); // if (itemCount < count) // { // Log.getLogger().error($"Not Enough ItemCount"); // errorCode = ServerErrorCode.NotEnoughItem; // return false; // } // List 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 SaveInventory() // { // List 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 updateItems, out ServerErrorCode errorCode, // out bool isEnchantSuccess, out List? changeAttributeList, [MaybeNullWhen(false)] out List 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(); // 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 updateItems, // out ServerErrorCode errorCode, [MaybeNullWhen(false)] out List changeAttriuteList, [MaybeNullWhen(false)] out List 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(); // 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 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; // } // } //}