sync: main repo

This commit is contained in:
StopWuyu
2025-03-01 18:00:46 +08:00
33 changed files with 737 additions and 153 deletions

View File

@@ -1,6 +1,7 @@
using EggLink.DanhengServer.GameServer.Server.Packet.Send.Item;
using EggLink.DanhengServer.Kcp;
using EggLink.DanhengServer.Proto;
using EggLink.DanhengServer.Util;
namespace EggLink.DanhengServer.GameServer.Server.Packet.Recv.Item;
@@ -11,10 +12,15 @@ public class HandlerComposeSelectedRelicCsReq : Handler
{
var req = ComposeSelectedRelicCsReq.Parser.ParseFrom(data);
var player = connection.Player!;
var item = await player.InventoryManager!.ComposeRelic(req);
if (player.InventoryManager!.Data.RelicItems.Count >= GameConstants.INVENTORY_MAX_RELIC)
{
await connection.SendPacket(new PacketComposeSelectedRelicScRsp(req.ComposeId, Retcode.RetRelicExceedLimit));
return;
}
var item = await player.InventoryManager.ComposeRelic(req);
if (item == null)
{
await connection.SendPacket(new PacketComposeSelectedRelicScRsp());
await connection.SendPacket(new PacketComposeSelectedRelicScRsp(req.ComposeId));
return;
}

View File

@@ -10,7 +10,7 @@ public class HandlerDestroyItemCsReq : Handler
{
var req = DestroyItemCsReq.Parser.ParseFrom(data);
await connection.Player!.InventoryManager!.RemoveItem((int)req.ItemCount, (int)req.ItemCount);
await connection.Player!.InventoryManager!.RemoveItem((int)req.ItemId, (int)req.ItemCount);
await connection.SendPacket(CmdIds.DestroyItemScRsp);
}
}

View File

@@ -0,0 +1,19 @@
using EggLink.DanhengServer.Enums.Item;
using EggLink.DanhengServer.GameServer.Server.Packet.Send.Item;
using EggLink.DanhengServer.Kcp;
using EggLink.DanhengServer.Proto;
namespace EggLink.DanhengServer.GameServer.Server.Packet.Recv.Item;
[Opcode(CmdIds.DiscardRelicCsReq)]
public class HandlerDiscardRelicCsReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
var req = DiscardRelicCsReq.Parser.ParseFrom(data);
var result =
await connection.Player!.InventoryManager!.DiscardItems(req.RelicUniqueIdList, req.IsDiscard,
ItemMainTypeEnum.Relic);
await connection.SendPacket(new PacketDiscardRelicScRsp(result, req.IsDiscard));
}
}

View File

@@ -0,0 +1,19 @@
using EggLink.DanhengServer.Enums.Item;
using EggLink.DanhengServer.GameServer.Server.Packet.Send.Item;
using EggLink.DanhengServer.Kcp;
using EggLink.DanhengServer.Proto;
namespace EggLink.DanhengServer.GameServer.Server.Packet.Recv.Item;
[Opcode(CmdIds.LockEquipmentCsReq)]
public class HandlerLockEquipmentCsReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
var req = LockEquipmentCsReq.Parser.ParseFrom(data);
var result =
await connection.Player!.InventoryManager!.LockItems(req.EquipmentIdList, req.IsProtected,
ItemMainTypeEnum.Equipment);
await connection.SendPacket(new PacketLockEquipmentScRsp(result));
}
}

View File

@@ -0,0 +1,19 @@
using EggLink.DanhengServer.Enums.Item;
using EggLink.DanhengServer.GameServer.Server.Packet.Send.Item;
using EggLink.DanhengServer.Kcp;
using EggLink.DanhengServer.Proto;
namespace EggLink.DanhengServer.GameServer.Server.Packet.Recv.Item;
[Opcode(CmdIds.LockRelicCsReq)]
public class HandlerLockRelicCsReq : Handler
{
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
var req = LockRelicCsReq.Parser.ParseFrom(data);
var result =
await connection.Player!.InventoryManager!.LockItems(req.RelicUniqueIdList, req.IsProtected,
ItemMainTypeEnum.Relic);
await connection.SendPacket(new PacketLockRelicScRsp(result));
}
}

View File

@@ -10,7 +10,7 @@ public class HandlerSellItemCsReq : Handler
public override async Task OnHandle(Connection connection, byte[] header, byte[] data)
{
var req = SellItemCsReq.Parser.ParseFrom(data);
var items = await connection.Player!.InventoryManager!.SellItem(req.CostData);
var items = await connection.Player!.InventoryManager!.SellItem(req.CostData, req.ToMaterial);
await connection.SendPacket(new PacketSellItemScRsp(items));
}
}

View File

@@ -1,4 +1,5 @@
using EggLink.DanhengServer.GameServer.Server.Packet.Send.MatchThreeModule;
using EggLink.DanhengServer.Enums.Mission;
using EggLink.DanhengServer.GameServer.Server.Packet.Send.MatchThreeModule;
using EggLink.DanhengServer.Kcp;
using EggLink.DanhengServer.Proto;
@@ -11,6 +12,8 @@ public class HandlerMatchThreeLevelEndCsReq : Handler
{
var req = MatchThreeLevelEndCsReq.Parser.ParseFrom(data);
await connection.Player!.MissionManager!.HandleFinishType(MissionFinishTypeEnum.MatchThreeFinishLevel, req);
await connection.SendPacket(new PacketMatchThreeLevelEndScRsp(req.LevelId, req.ModeId));
}
}

View File

@@ -0,0 +1,29 @@
using EggLink.DanhengServer.GameServer.Server.Packet.Send.Player;
using EggLink.DanhengServer.Kcp;
using EggLink.DanhengServer.Proto;
namespace EggLink.DanhengServer.GameServer.Server.Packet.Recv.Player;
[Opcode(CmdIds.ReserveStaminaExchangeCsReq)]
public class HandlerReserveStaminaExchangeCsReq : Handler
{
public async override Task OnHandle(Connection connection, byte[] header, byte[] data)
{
var req = ReserveStaminaExchangeCsReq.Parser.ParseFrom(data);
var player = connection.Player;
if (player == null) return;
var amount = req.Num;
if (amount <= 0 || player.Data.StaminaReserve < amount)
{
await connection.SendPacket(new PacketReserveStaminaExchangeScRsp(0));
}
else
{
player.Data.StaminaReserve -= amount;
player.Data.Stamina += (int)amount;
await connection.SendPacket(new PacketStaminaInfoScNotify(player));
await connection.SendPacket(new PacketReserveStaminaExchangeScRsp(amount));
}
}
}

View File

@@ -6,16 +6,28 @@ namespace EggLink.DanhengServer.GameServer.Server.Packet.Send.Item;
public class PacketComposeSelectedRelicScRsp : BasePacket
{
public PacketComposeSelectedRelicScRsp() : base(CmdIds.ComposeSelectedRelicScRsp)
public PacketComposeSelectedRelicScRsp(uint composeId) : base(CmdIds.ComposeSelectedRelicScRsp)
{
var proto = new ComposeSelectedRelicScRsp
{
ComposeId = composeId,
Retcode = 1
};
SetData(proto);
}
public PacketComposeSelectedRelicScRsp(uint composeId, Retcode retcode) : base(CmdIds.ComposeSelectedRelicScRsp)
{
var proto = new ComposeSelectedRelicScRsp
{
ComposeId = composeId,
Retcode = (uint)retcode
};
SetData(proto);
}
public PacketComposeSelectedRelicScRsp(uint composeId, ItemData item)
: base(CmdIds.ComposeSelectedRelicScRsp)
{

View File

@@ -0,0 +1,17 @@
using EggLink.DanhengServer.Kcp;
using EggLink.DanhengServer.Proto;
namespace EggLink.DanhengServer.GameServer.Server.Packet.Send.Item;
public class PacketDiscardRelicScRsp : BasePacket
{
public PacketDiscardRelicScRsp(bool success, bool isDiscard) : base(CmdIds.DiscardRelicScRsp)
{
DiscardRelicScRsp proto = new();
if (success) proto.IsDiscard = isDiscard;
else proto.Retcode = (uint)Retcode.RetFail;
SetData(proto);
}
}

View File

@@ -0,0 +1,16 @@
using EggLink.DanhengServer.Kcp;
using EggLink.DanhengServer.Proto;
namespace EggLink.DanhengServer.GameServer.Server.Packet.Send.Item;
public class PacketLockEquipmentScRsp : BasePacket
{
public PacketLockEquipmentScRsp(bool success) : base(CmdIds.LockEquipmentScRsp)
{
LockEquipmentScRsp proto = new();
if (!success) proto.Retcode = (uint)Retcode.RetFail;
SetData(proto);
}
}

View File

@@ -0,0 +1,16 @@
using EggLink.DanhengServer.Kcp;
using EggLink.DanhengServer.Proto;
namespace EggLink.DanhengServer.GameServer.Server.Packet.Send.Item;
public class PacketLockRelicScRsp : BasePacket
{
public PacketLockRelicScRsp(bool success) : base(CmdIds.LockRelicScRsp)
{
LockRelicScRsp proto = new();
if (!success) proto.Retcode = (uint)Retcode.RetFail;
SetData(proto);
}
}

View File

@@ -0,0 +1,17 @@
using EggLink.DanhengServer.Kcp;
using EggLink.DanhengServer.Proto;
namespace EggLink.DanhengServer.GameServer.Server.Packet.Send.Player;
public class PacketReserveStaminaExchangeScRsp : BasePacket
{
public PacketReserveStaminaExchangeScRsp(uint amount) : base(CmdIds.ReserveStaminaExchangeScRsp)
{
var proto = new ReserveStaminaExchangeScRsp();
if (amount > 0) proto.Num = amount;
else proto.Retcode = (uint)Retcode.RetFail;
SetData(proto);
}
}