mirror of
https://github.com/EggLinks/DanhengServer-OpenSource.git
synced 2026-01-02 20:26:03 +08:00
fix: opening marked chest wont remove mark
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user