提交示例代码
This commit is contained in:
73
物品和背包的完整代码/Server/Hotfix/Gate/Container/ItemUseHelper.cs
Normal file
73
物品和背包的完整代码/Server/Hotfix/Gate/Container/ItemUseHelper.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user