Files
2026-03-05 11:39:06 +08:00

137 lines
5.2 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
namespace Fantasy;
public static class EquipHelper
{
/// <summary>
/// 装载一个装备
/// </summary>
/// <param name="account"></param>
/// <param name="mountEquipItem"></param>
/// <returns></returns>
public static uint MountEquip(Account account, Item mountEquipItem)
{
var itemConfig = mountEquipItem.Config;
if (!itemConfig.IsEquip())
{
// 这里返回的是不是装备的错误码。
return 1;
}
if (mountEquipItem.Container.Config.Type != (int)ContainerType.Bag)
{
// 只有在背包里的物品才可以装备到装备栏里的错误码。
return 2;
}
var mountEquipPosition = itemConfig.Position;
// 如果在目标装备栏上有装备,那就先卸载装备。
UnMountEquip(account, (EquipPosition)mountEquipPosition, true);
// 下面要执行把装备添加到装备栏上。
// 先在背包中移除该装备,因为已经得到了装备了,所以可以直接通过物品拿到背包的容器。
var removeItem = mountEquipItem.Container.RemoveItem(mountEquipItem, ItemReason.MountEquipRemove, true, false);
if (removeItem != 0)
{
// 移除装备的时候,发生了错误,直接返回错误码。
return removeItem;
}
// 把装备添加到对应的装备栏上。
var addItem = ContainerHelper.AddItem(account, ContainerType.Equip, mountEquipItem, mountEquipPosition,
ItemReason.MountEquipAdd, true);
if (addItem != 0)
{
// 添加装备的时候,发生了错误,直接返回错误码。
return addItem;
}
// 这里要执行添加装备后因为装备有增加属性或词缀Buff所以需要在添加的时候把这些也要给添加下。
// 因为本课程胡总没有数值系统和Buff系统所以这里就不处理了。
Log.Debug($"执行了装备装备的效果逻辑。");
Log.Debug($"装载装备完成。mountEquipItem:{mountEquipItem.Id}");
// 可以合包优化下这个协议的数量,优化成一个,能节省流量。
return 0;
}
/// <summary>
/// 卸载一个装备
/// </summary>
/// <param name="account"></param>
/// <param name="equipPosition"></param>
/// <param name="isSendClient"></param>
/// <returns></returns>
public static uint UnMountEquip(Account account, EquipPosition equipPosition, bool isSendClient)
{
if (!ContainerHelper.GetItemByCell(account, ContainerType.Equip, (long)equipPosition, out var unMountEquipItem))
{
// 没有找到该位置的装备的错误码。
return 1;
}
return UnMountEquip(account, unMountEquipItem, isSendClient);
}
/// <summary>
/// 卸载一个装备
/// </summary>
/// <param name="account"></param>
/// <param name="unMountEquipItem"></param>
/// <param name="isSendClient"></param>
/// <returns></returns>
public static uint UnMountEquip(Account account, Item unMountEquipItem, bool isSendClient)
{
// 首先在装备栏容器中移除装备。
var removeItem = unMountEquipItem.Container.RemoveItem(unMountEquipItem, ItemReason.UnMountEquipRemove, isSendClient, false);
if (removeItem != 0)
{
// 移除失败了,要返回错误码,就不要执行后面的程序了。
return removeItem;
}
// 这里要执行移除装备后因为装备有增加属性或词缀Buff所以需要在移除的时候把这些也要给移除下。
// 因为本课程胡总没有数值系统和Buff系统所以这里就不处理了。
// 把移除成功的装备再次添加到背包容器中。
Log.Debug("执行了装备卸载的效果逻辑。");
return ContainerHelper.AddItem(account, ContainerType.Bag, unMountEquipItem, ItemReason.UnMountEquipAdd, isSendClient);
}
/// <summary>
/// 根据装备的位置获取装备
/// </summary>
/// <param name="account"></param>
/// <param name="equipPosition"></param>
/// <param name="item"></param>
/// <returns></returns>
public static bool GetEquipItem(Account account, EquipPosition equipPosition, out Item item)
{
return ContainerHelper.GetItemByCell(account, ContainerType.Equip, (long)equipPosition, out item);
}
/// <summary>
/// 是否是装备
/// </summary>
/// <param name="item"></param>
/// <returns></returns>
public static bool IsEquip(this Item item)
{
return item.Config.IsEquip();
}
/// <summary>
/// 获得装备所在的装备栏位置
/// </summary>
/// <param name="item"></param>
/// <returns></returns>
public static EquipPosition GetEquipPosition(this Item item)
{
return (EquipPosition)item.GetEquipPositionInt();
}
private static int GetEquipPositionInt(this Item item)
{
return item.Config.Position;
}
private static bool IsEquip(this ItemConfig itemConfig)
{
var configType = (ItemType)itemConfig.Type;
return configType == ItemType.Equip;
}
}