From 47cc5c732432f222430eed69dbb0d1eba161d8a1 Mon Sep 17 00:00:00 2001 From: alborrajo Date: Sun, 28 Apr 2024 22:52:42 +0200 Subject: [PATCH] Crafting/consuming items hotfix --- Arrowgene.Ddon.GameServer/Characters/ItemManager.cs | 13 +++++++------ .../Handler/CraftStartCraftHandler.cs | 1 + 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/Arrowgene.Ddon.GameServer/Characters/ItemManager.cs b/Arrowgene.Ddon.GameServer/Characters/ItemManager.cs index bb557c306..d0eecc3e9 100644 --- a/Arrowgene.Ddon.GameServer/Characters/ItemManager.cs +++ b/Arrowgene.Ddon.GameServer/Characters/ItemManager.cs @@ -135,12 +135,13 @@ public List ConsumeItemByUIdFromMultipleStorages(DdonServ } private CDataItemUpdateResult ConsumeItem(DdonServer server, Character character, StorageType fromStorageType, ushort slotNo, Item item, uint itemNum, uint consuneNum) { - itemNum = (uint) Math.Max(0, (int)itemNum - (int)consuneNum); + uint finalItemNum = (uint) Math.Max(0, (int)itemNum - (int)consuneNum); + int finalConsumeNum = (int)itemNum - (int)finalItemNum; CDataItemUpdateResult ntcData = new CDataItemUpdateResult(); ntcData.ItemList.ItemUId = item.UId; ntcData.ItemList.ItemId = item.ItemId; - ntcData.ItemList.ItemNum = itemNum; + ntcData.ItemList.ItemNum = finalItemNum; ntcData.ItemList.Unk3 = item.Unk3; ntcData.ItemList.StorageType = fromStorageType; ntcData.ItemList.SlotNo = slotNo; @@ -153,9 +154,9 @@ private CDataItemUpdateResult ConsumeItem(DdonServer server, Charact ntcData.ItemList.WeaponCrestDataList = item.WeaponCrestDataList; ntcData.ItemList.ArmorCrestDataList = item.ArmorCrestDataList; ntcData.ItemList.EquipElementParamList = item.EquipElementParamList; - ntcData.UpdateItemNum = -(int)consuneNum; + ntcData.UpdateItemNum = -finalConsumeNum; - if(itemNum == 0) + if(finalItemNum == 0) { // Delete item when ItemNum reaches 0 to free up the slot character.Storage.setStorageItem(null, 0, fromStorageType, slotNo); @@ -163,8 +164,8 @@ private CDataItemUpdateResult ConsumeItem(DdonServer server, Charact } else { - character.Storage.setStorageItem(item, itemNum, fromStorageType, slotNo); - server.Database.ReplaceStorageItem(character.CharacterId, fromStorageType, slotNo, item.UId, itemNum); + character.Storage.setStorageItem(item, finalItemNum, fromStorageType, slotNo); + server.Database.ReplaceStorageItem(character.CharacterId, fromStorageType, slotNo, item.UId, finalItemNum); } return ntcData; diff --git a/Arrowgene.Ddon.GameServer/Handler/CraftStartCraftHandler.cs b/Arrowgene.Ddon.GameServer/Handler/CraftStartCraftHandler.cs index a158606cc..b6058ff3d 100644 --- a/Arrowgene.Ddon.GameServer/Handler/CraftStartCraftHandler.cs +++ b/Arrowgene.Ddon.GameServer/Handler/CraftStartCraftHandler.cs @@ -52,6 +52,7 @@ public override void Handle(GameClient client, StructurePacket updateResults = _itemManager.ConsumeItemByUIdFromMultipleStorages(Server, client.Character, STORAGE_TYPES, craftMaterial.ItemUId, craftMaterial.ItemNum); + updateCharacterItemNtc.UpdateItemList.AddRange(updateResults); } catch (NotEnoughItemsException e) {