提交示例代码

This commit is contained in:
Bob.Song
2026-03-05 11:39:06 +08:00
commit 25958f58c3
2534 changed files with 209593 additions and 0 deletions

View File

@@ -0,0 +1,73 @@
#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);
}
}