From fb5294e705f8d197c26b50bd81d758c2923f032e Mon Sep 17 00:00:00 2001 From: wish Date: Sun, 25 Jun 2023 12:24:20 +1000 Subject: [PATCH] decode Get/PostNotice and GemHistory --- network/mhfpacket/msg_mhf_get_notice.go | 21 ++++++++++++----- network/mhfpacket/msg_mhf_post_notice.go | 23 ++++++++++++++----- server/channelserver/handlers.go | 4 ---- server/channelserver/handlers_tower.go | 29 ++++++++++++++++-------- 4 files changed, 52 insertions(+), 25 deletions(-) diff --git a/network/mhfpacket/msg_mhf_get_notice.go b/network/mhfpacket/msg_mhf_get_notice.go index 75e18d9d5..843e71ddc 100644 --- a/network/mhfpacket/msg_mhf_get_notice.go +++ b/network/mhfpacket/msg_mhf_get_notice.go @@ -1,15 +1,20 @@ package mhfpacket -import ( - "errors" +import ( + "errors" - "erupe-ce/network/clientctx" - "erupe-ce/network" "erupe-ce/common/byteframe" + "erupe-ce/network" + "erupe-ce/network/clientctx" ) // MsgMhfGetNotice represents the MSG_MHF_GET_NOTICE -type MsgMhfGetNotice struct{} +type MsgMhfGetNotice struct { + AckHandle uint32 + Unk0 uint32 + Unk1 uint32 + Unk2 int32 +} // Opcode returns the ID associated with this packet type. func (m *MsgMhfGetNotice) Opcode() network.PacketID { @@ -18,7 +23,11 @@ func (m *MsgMhfGetNotice) Opcode() network.PacketID { // Parse parses the packet from binary func (m *MsgMhfGetNotice) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { - return errors.New("NOT IMPLEMENTED") + m.AckHandle = bf.ReadUint32() + m.Unk0 = bf.ReadUint32() + m.Unk1 = bf.ReadUint32() + m.Unk2 = bf.ReadInt32() + return nil } // Build builds a binary packet from the current data. diff --git a/network/mhfpacket/msg_mhf_post_notice.go b/network/mhfpacket/msg_mhf_post_notice.go index c599d2afc..51eb945fa 100644 --- a/network/mhfpacket/msg_mhf_post_notice.go +++ b/network/mhfpacket/msg_mhf_post_notice.go @@ -1,15 +1,21 @@ package mhfpacket -import ( - "errors" +import ( + "errors" - "erupe-ce/network/clientctx" - "erupe-ce/network" "erupe-ce/common/byteframe" + "erupe-ce/network" + "erupe-ce/network/clientctx" ) // MsgMhfPostNotice represents the MSG_MHF_POST_NOTICE -type MsgMhfPostNotice struct{} +type MsgMhfPostNotice struct { + AckHandle uint32 + Unk0 uint32 + Unk1 uint32 + Unk2 int32 + Unk3 int32 +} // Opcode returns the ID associated with this packet type. func (m *MsgMhfPostNotice) Opcode() network.PacketID { @@ -18,7 +24,12 @@ func (m *MsgMhfPostNotice) Opcode() network.PacketID { // Parse parses the packet from binary func (m *MsgMhfPostNotice) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { - return errors.New("NOT IMPLEMENTED") + m.AckHandle = bf.ReadUint32() + m.Unk0 = bf.ReadUint32() + m.Unk1 = bf.ReadUint32() + m.Unk2 = bf.ReadInt32() + m.Unk3 = bf.ReadInt32() + return nil } // Build builds a binary packet from the current data. diff --git a/server/channelserver/handlers.go b/server/channelserver/handlers.go index 614b98da1..4647b8021 100644 --- a/server/channelserver/handlers.go +++ b/server/channelserver/handlers.go @@ -1632,10 +1632,6 @@ func handleMsgMhfGetEarthValue(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfDebugPostValue(s *Session, p mhfpacket.MHFPacket) {} -func handleMsgMhfGetNotice(s *Session, p mhfpacket.MHFPacket) {} - -func handleMsgMhfPostNotice(s *Session, p mhfpacket.MHFPacket) {} - func handleMsgMhfGetRandFromTable(s *Session, p mhfpacket.MHFPacket) {} func handleMsgMhfGetSenyuDailyCount(s *Session, p mhfpacket.MHFPacket) {} diff --git a/server/channelserver/handlers_tower.go b/server/channelserver/handlers_tower.go index 7675f114e..a9bc1421c 100644 --- a/server/channelserver/handlers_tower.go +++ b/server/channelserver/handlers_tower.go @@ -3,6 +3,7 @@ package channelserver import ( "fmt" "go.uber.org/zap" + "time" "erupe-ce/common/byteframe" "erupe-ce/common/stringsupport" @@ -398,10 +399,10 @@ type GemInfo struct { } type GemHistory struct { - Unk0 uint16 - Unk1 uint16 - Unk2 uint32 - Unk3 string + Gem uint16 + Message uint16 + Timestamp time.Time + Sender string } func handleMsgMhfGetGemInfo(s *Session, p mhfpacket.MHFPacket) { @@ -424,13 +425,13 @@ func handleMsgMhfGetGemInfo(s *Session, p mhfpacket.MHFPacket) { bf.WriteUint16(info.Quantity) data = append(data, bf) } - default: + case 2: for _, history := range gemHistory { bf := byteframe.NewByteFrame() - bf.WriteUint16(history.Unk0) - bf.WriteUint16(history.Unk1) - bf.WriteUint32(history.Unk2) - bf.WriteBytes(stringsupport.PaddedString(history.Unk3, 14, true)) + bf.WriteUint16(history.Gem) + bf.WriteUint16(history.Message) + bf.WriteUint32(uint32(history.Timestamp.Unix())) + bf.WriteBytes(stringsupport.PaddedString(history.Sender, 14, true)) data = append(data, bf) } } @@ -464,3 +465,13 @@ func handleMsgMhfPostGemInfo(s *Session, p mhfpacket.MHFPacket) { } doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) } + +func handleMsgMhfGetNotice(s *Session, p mhfpacket.MHFPacket) { + pkt := p.(*mhfpacket.MsgMhfGetNotice) + doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) +} + +func handleMsgMhfPostNotice(s *Session, p mhfpacket.MHFPacket) { + pkt := p.(*mhfpacket.MsgMhfPostNotice) + doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) +}