fix: opening marked chest wont remove mark

This commit is contained in:
StopWuyu
2024-12-14 20:53:28 +08:00
parent c8112f663f
commit c22e493451
3 changed files with 44 additions and 7 deletions

View File

@@ -33,6 +33,7 @@ using EggLink.DanhengServer.GameServer.Game.Task;
using EggLink.DanhengServer.GameServer.Game.TrainParty;
using EggLink.DanhengServer.GameServer.Server;
using EggLink.DanhengServer.GameServer.Server.Packet.Send.Lineup;
using EggLink.DanhengServer.GameServer.Server.Packet.Send.MarkChest;
using EggLink.DanhengServer.GameServer.Server.Packet.Send.Player;
using EggLink.DanhengServer.GameServer.Server.Packet.Send.PlayerSync;
using EggLink.DanhengServer.GameServer.Server.Packet.Send.Scene;
@@ -457,6 +458,21 @@ public class PlayerInstance(PlayerData data)
var items = DropService.CalculateDropsFromProp(prop.PropInfo.ChestID);
await InventoryManager!.AddItems(items);
await SendPacket(new PacketOpenChestScNotify(prop.PropInfo.ChestID));
var notifyMark = false;
foreach (var markedChest in SceneData!.MarkedChestData.Values)
{
var chest = markedChest.Find(x =>
x.FloorId == SceneInstance.FloorId && x.GroupId == prop.GroupID &&
x.ConfigId == prop.PropInfo.ID);
if (chest == null) continue;
markedChest.Remove(chest);
notifyMark = true;
}
if (notifyMark)
await SendPacket(new PacketMarkChestChangedScNotify(this));
}
break;

View File

@@ -13,13 +13,7 @@ public class HandlerUpdateMarkChestCsReq : Handler
var req = UpdateMarkChestCsReq.Parser.ParseFrom(data);
var player = connection.Player!;
if (!player.SceneData!.MarkedChestData.TryGetValue((int)req.FuncId, out var markedChestData))
{
markedChestData = [];
player.SceneData!.MarkedChestData[(int)req.FuncId] = markedChestData;
}
markedChestData.Clear(); // update instead of appending
List<SceneMarkedChestData> markedChestData = [];
foreach (var markChestInfo in req.MarkChestInfoList)
{
@@ -32,6 +26,8 @@ public class HandlerUpdateMarkChestCsReq : Handler
});
}
player.SceneData!.MarkedChestData[(int)req.FuncId] = markedChestData;
await connection.SendPacket(new PacketUpdateMarkChestScRsp(req.FuncId, player));
}
}

View File

@@ -0,0 +1,25 @@
using EggLink.DanhengServer.GameServer.Game.Player;
using EggLink.DanhengServer.Kcp;
using EggLink.DanhengServer.Proto;
namespace EggLink.DanhengServer.GameServer.Server.Packet.Send.MarkChest;
public class PacketMarkChestChangedScNotify : BasePacket
{
public PacketMarkChestChangedScNotify(PlayerInstance player) : base(CmdIds.MarkChestChangedScNotify)
{
var proto = new MarkChestChangedScNotify
{
MarkChestFuncInfo =
{
player.SceneData!.MarkedChestData.Select(x => new MarkChestFuncInfo
{
FuncId = (uint)x.Key,
MarkChestInfoList = { x.Value.Select(y => y.ToProto()) }
})
}
};
SetData(proto);
}
}