提交示例代码

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,137 @@
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;
}
}