73 lines
2.4 KiB
C#
73 lines
2.4 KiB
C#
#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<ItemUseComponent>();
|
|
return itemUseComponent.CanUse(account, item.Config, ref count);
|
|
}
|
|
} |