From bfd26718321c12a93d3f4eb8517cb34912b8cc5b Mon Sep 17 00:00:00 2001 From: wish Date: Sat, 23 Jul 2022 12:04:59 +1000 Subject: [PATCH] parse bin chat as UTF8 --- Erupe/network/binpacket/msg_bin_chat.go | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/Erupe/network/binpacket/msg_bin_chat.go b/Erupe/network/binpacket/msg_bin_chat.go index 2b7d88b1a..44bd587ca 100644 --- a/Erupe/network/binpacket/msg_bin_chat.go +++ b/Erupe/network/binpacket/msg_bin_chat.go @@ -1,8 +1,9 @@ package binpacket import ( - "erupe-ce/network" "erupe-ce/common/byteframe" + "erupe-ce/common/stringsupport" + "erupe-ce/network" ) // ChatType represents the chat message type (Thanks to @Alice on discord for identifying these!) @@ -36,13 +37,10 @@ func (m *MsgBinChat) Parse(bf *byteframe.ByteFrame) error { m.Unk0 = bf.ReadUint8() m.Type = ChatType(bf.ReadUint8()) m.Flags = bf.ReadUint16() - senderNameSize := bf.ReadUint16() - messageSize := bf.ReadUint16() - - // TODO(Andoryuuta): Need proper shift-jis and null termination. - m.Message = string(bf.ReadBytes(uint(messageSize))[:messageSize-1]) - m.SenderName = string(bf.ReadBytes(uint(senderNameSize))[:senderNameSize-1]) - + _ = bf.ReadUint16() // lenSenderName + _ = bf.ReadUint16() // lenMessage + m.Message = stringsupport.SJISToUTF8(bf.ReadNullTerminatedBytes()) + m.SenderName = stringsupport.SJISToUTF8(bf.ReadNullTerminatedBytes()) return nil } @@ -51,10 +49,11 @@ func (m *MsgBinChat) Build(bf *byteframe.ByteFrame) error { bf.WriteUint8(m.Unk0) bf.WriteUint8(uint8(m.Type)) bf.WriteUint16(m.Flags) - bf.WriteUint16(uint16(len(m.SenderName) + 1)) - bf.WriteUint16(uint16(len(m.Message) + 1)) - bf.WriteNullTerminatedBytes([]byte(m.Message)) - bf.WriteNullTerminatedBytes([]byte(m.SenderName)) - + cMessage := stringsupport.UTF8ToSJIS(m.Message) + cSenderName := stringsupport.UTF8ToSJIS(m.SenderName) + bf.WriteUint16(uint16(len(cSenderName) + 1)) + bf.WriteUint16(uint16(len(cMessage) + 1)) + bf.WriteNullTerminatedBytes(cMessage) + bf.WriteNullTerminatedBytes(cSenderName) return nil }