#pragma warning disable CS8625 // Cannot convert null literal to non-nullable reference type. namespace Fantasy; public static class ItemUseHelper { public static uint UseBagItem(Account account, long itemId, int count) { return UseItem(account, ContainerType.Bag, itemId, count); } public static uint CanUseBagItem(Account account, long itemId, int count, out Container container, out ItemConfig itemConfig, out ItemUseComponent itemUseComponent) { return CanUseItem(account, ContainerType.Bag, itemId, count, out container, out itemConfig, out itemUseComponent); } public static uint UseItem(Account account, ContainerType containerType, long itemId, int count) { var errorCode = CanUseItem(account, containerType, itemId, count, out var container, out var itemConfig, out var itemUseComponent); if (errorCode != 0) { return errorCode; } errorCode = container.RemoveItem(itemId, count, ItemReason.ItemUse, true); if (errorCode != 0) { return errorCode; } itemUseComponent.Use(account, itemConfig, ref count); return 0; } public static uint CanUseItem(Account account, ContainerType containerType, long itemId, int count, out Container container, out ItemConfig itemConfig, out ItemUseComponent itemUseComponent) { itemConfig = null; itemUseComponent = null; var errorCode = ContainerHelper.TryGetContainer(account, containerType, out container); if (errorCode != 0) { return errorCode; } if (!container.GetItemById(itemId, out var item)) { // 这里是找不到该物品的错误码。 return 1; } if (item.Count < count) { // 这里是物品数量不足的错误码。 return 2; } itemConfig = item.Config; if (itemConfig.Params.Length <= 0) { // 这里是物品没有配置参数的错误码。 return 3; } // 这里还可以增加一些其他的判定,比如物品是否过期,物品是否被锁定等。 // 甚至还有物品使用的CD。 // 使用物品效果来判定 itemUseComponent = account.Scene.GetComponent(); return itemUseComponent.CanUse(account, item.Config, ref count); } }