From 85fc76edd5f977c176497202cbc48cf5999cf67b Mon Sep 17 00:00:00 2001 From: wish Date: Sun, 19 Nov 2023 02:34:02 +1100 Subject: [PATCH] update parsing of many packets --- network/mhfpacket/msg_mhf_acquire_festa.go | 25 +++---- .../mhfpacket/msg_mhf_acquire_monthly_item.go | 13 ++-- network/mhfpacket/msg_mhf_announce.go | 5 +- .../mhfpacket/msg_mhf_arrange_guild_member.go | 19 ++---- network/mhfpacket/msg_mhf_create_joint.go | 25 +++---- network/mhfpacket/msg_mhf_entry_festa.go | 22 +++--- .../msg_mhf_enumerate_festa_member.go | 18 ++--- network/mhfpacket/msg_mhf_enumerate_guacot.go | 5 +- network/mhfpacket/msg_mhf_enumerate_guild.go | 18 +++-- .../mhfpacket/msg_mhf_enumerate_guild_item.go | 16 ++--- .../msg_mhf_enumerate_guild_member.go | 21 +++--- network/mhfpacket/msg_mhf_enumerate_house.go | 3 +- .../mhfpacket/msg_mhf_enumerate_inv_guild.go | 16 ++++- .../msg_mhf_exchange_weekly_stamp.go | 3 +- network/mhfpacket/msg_mhf_info_joint.go | 3 +- .../mhfpacket/msg_mhf_load_guild_cooking.go | 14 ++-- network/mhfpacket/msg_mhf_load_house.go | 5 +- .../mhfpacket/msg_mhf_operate_guild_member.go | 4 +- network/mhfpacket/msg_mhf_operate_joint.go | 8 ++- network/mhfpacket/msg_mhf_opr_member.go | 31 +++++---- network/mhfpacket/msg_mhf_register_event.go | 7 +- .../msg_mhf_set_guild_manage_right.go | 3 +- network/mhfpacket/msg_mhf_stampcard_stamp.go | 2 +- network/mhfpacket/msg_mhf_state_festa_g.go | 12 ++-- network/mhfpacket/msg_mhf_state_festa_u.go | 22 +++--- network/mhfpacket/msg_mhf_transfer_item.go | 15 +++-- network/mhfpacket/msg_mhf_transit_message.go | 3 +- .../mhfpacket/msg_mhf_update_guild_item.go | 4 +- network/mhfpacket/msg_mhf_use_gacha_point.go | 22 +++--- network/mhfpacket/msg_mhf_vote_festa.go | 4 +- .../msg_sys_create_acquire_semaphore.go | 5 +- network/mhfpacket/msg_sys_create_semaphore.go | 16 +++-- network/mhfpacket/msg_sys_enumerate_client.go | 5 +- network/mhfpacket/msg_sys_get_stage_binary.go | 5 +- network/mhfpacket/msg_sys_load_register.go | 4 +- network/mhfpacket/msg_sys_login.go | 26 ++++--- network/mhfpacket/msg_sys_operate_register.go | 2 +- network/mhfpacket/msg_sys_set_stage_binary.go | 7 +- .../mhfpacket/msg_sys_wait_stage_binary.go | 5 +- server/channelserver/handlers.go | 2 +- server/channelserver/handlers_clients.go | 67 +++++++++---------- server/channelserver/handlers_guild.go | 33 +++++---- .../channelserver/handlers_guild_alliance.go | 3 +- server/channelserver/handlers_register.go | 2 +- 44 files changed, 272 insertions(+), 278 deletions(-) diff --git a/network/mhfpacket/msg_mhf_acquire_festa.go b/network/mhfpacket/msg_mhf_acquire_festa.go index 30e75d7a4..87cf758f0 100644 --- a/network/mhfpacket/msg_mhf_acquire_festa.go +++ b/network/mhfpacket/msg_mhf_acquire_festa.go @@ -1,19 +1,19 @@ package mhfpacket import ( - "errors" + "errors" - "erupe-ce/network/clientctx" - "erupe-ce/network" "erupe-ce/common/byteframe" + "erupe-ce/network" + "erupe-ce/network/clientctx" ) // MsgMhfAcquireFesta represents the MSG_MHF_ACQUIRE_FESTA type MsgMhfAcquireFesta struct { - AckHandle uint32 - FestaID uint32 - GuildID uint32 - Unk uint16 + AckHandle uint32 + FestaID uint32 + GuildID uint32 + Unk uint8 } // Opcode returns the ID associated with this packet type. @@ -23,11 +23,12 @@ func (m *MsgMhfAcquireFesta) Opcode() network.PacketID { // Parse parses the packet from binary func (m *MsgMhfAcquireFesta) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { - m.AckHandle = bf.ReadUint32() - m.FestaID = bf.ReadUint32() - m.GuildID = bf.ReadUint32() - m.Unk = bf.ReadUint16() - return nil + m.AckHandle = bf.ReadUint32() + m.FestaID = bf.ReadUint32() + m.GuildID = bf.ReadUint32() + m.Unk = bf.ReadUint8() + bf.ReadUint8() // Zeroed + return nil } // Build builds a binary packet from the current data. diff --git a/network/mhfpacket/msg_mhf_acquire_monthly_item.go b/network/mhfpacket/msg_mhf_acquire_monthly_item.go index acc10b42a..d64288f9f 100644 --- a/network/mhfpacket/msg_mhf_acquire_monthly_item.go +++ b/network/mhfpacket/msg_mhf_acquire_monthly_item.go @@ -11,9 +11,9 @@ import ( // MsgMhfAcquireMonthlyItem represents the MSG_MHF_ACQUIRE_MONTHLY_ITEM type MsgMhfAcquireMonthlyItem struct { AckHandle uint32 - Unk0 uint16 - Unk1 uint16 - Unk2 uint32 + Unk0 uint8 + Unk1 uint8 + Unk2 uint16 Unk3 uint32 } @@ -25,10 +25,11 @@ func (m *MsgMhfAcquireMonthlyItem) Opcode() network.PacketID { // Parse parses the packet from binary func (m *MsgMhfAcquireMonthlyItem) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { m.AckHandle = bf.ReadUint32() - m.Unk0 = bf.ReadUint16() - m.Unk1 = bf.ReadUint16() - m.Unk2 = bf.ReadUint32() + m.Unk0 = bf.ReadUint8() + m.Unk1 = bf.ReadUint8() + m.Unk2 = bf.ReadUint16() m.Unk3 = bf.ReadUint32() + bf.ReadUint32() // Zeroed return nil } diff --git a/network/mhfpacket/msg_mhf_announce.go b/network/mhfpacket/msg_mhf_announce.go index c4c9deb7f..2b1d9ea76 100644 --- a/network/mhfpacket/msg_mhf_announce.go +++ b/network/mhfpacket/msg_mhf_announce.go @@ -14,7 +14,7 @@ type MsgMhfAnnounce struct { IPAddress uint32 Port uint16 StageID []byte - Type uint8 + Data *byteframe.ByteFrame } // Opcode returns the ID associated with this packet type. @@ -31,8 +31,7 @@ func (m *MsgMhfAnnounce) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientCon _ = bf.ReadUint8() _ = bf.ReadUint8() m.StageID = bf.ReadBytes(32) - _ = bf.ReadUint32() - m.Type = bf.ReadUint8() + m.Data = byteframe.NewByteFrameFromBytes(bf.ReadBytes(uint(bf.ReadUint32()))) return nil } diff --git a/network/mhfpacket/msg_mhf_arrange_guild_member.go b/network/mhfpacket/msg_mhf_arrange_guild_member.go index 3bd4e73f0..066735a10 100644 --- a/network/mhfpacket/msg_mhf_arrange_guild_member.go +++ b/network/mhfpacket/msg_mhf_arrange_guild_member.go @@ -1,9 +1,10 @@ package mhfpacket import ( + "errors" + "erupe-ce/common/byteframe" "erupe-ce/network" "erupe-ce/network/clientctx" - "erupe-ce/common/byteframe" ) // MsgMhfArrangeGuildMember represents the MSG_MHF_ARRANGE_GUILD_MEMBER @@ -22,11 +23,11 @@ func (m *MsgMhfArrangeGuildMember) Opcode() network.PacketID { func (m *MsgMhfArrangeGuildMember) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { m.AckHandle = bf.ReadUint32() m.GuildID = bf.ReadUint32() - charCount := bf.ReadUint16() - + bf.ReadUint8() // Zeroed + charCount := int(bf.ReadUint8()) m.CharIDs = make([]uint32, charCount) - for i := uint16(0); i < charCount; i++ { + for i := 0; i < charCount; i++ { m.CharIDs[i] = bf.ReadUint32() } @@ -35,13 +36,5 @@ func (m *MsgMhfArrangeGuildMember) Parse(bf *byteframe.ByteFrame, ctx *clientctx // Build builds a binary packet from the current data. func (m *MsgMhfArrangeGuildMember) Build(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { - bf.WriteUint32(m.AckHandle) - bf.WriteUint32(m.GuildID) - bf.WriteUint16(uint16(len(m.CharIDs))) - - for _, charID := range m.CharIDs { - bf.WriteUint32(charID) - } - - return nil + return errors.New("NOT IMPLEMENTED") } diff --git a/network/mhfpacket/msg_mhf_create_joint.go b/network/mhfpacket/msg_mhf_create_joint.go index 1a969fc4a..5a9a9f5fd 100644 --- a/network/mhfpacket/msg_mhf_create_joint.go +++ b/network/mhfpacket/msg_mhf_create_joint.go @@ -1,19 +1,19 @@ package mhfpacket import ( - "errors" + "errors" - "erupe-ce/network/clientctx" - "erupe-ce/common/stringsupport" - "erupe-ce/network" "erupe-ce/common/byteframe" + "erupe-ce/common/stringsupport" + "erupe-ce/network" + "erupe-ce/network/clientctx" ) // MsgMhfCreateJoint represents the MSG_MHF_CREATE_JOINT type MsgMhfCreateJoint struct { - AckHandle uint32 - GuildID uint32 - Name string + AckHandle uint32 + GuildID uint32 + Name string } // Opcode returns the ID associated with this packet type. @@ -23,11 +23,12 @@ func (m *MsgMhfCreateJoint) Opcode() network.PacketID { // Parse parses the packet from binary func (m *MsgMhfCreateJoint) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { - m.AckHandle = bf.ReadUint32() - m.GuildID = bf.ReadUint32() - _ = bf.ReadUint32() // len - m.Name = stringsupport.SJISToUTF8(bf.ReadNullTerminatedBytes()) - return nil + m.AckHandle = bf.ReadUint32() + m.GuildID = bf.ReadUint32() + bf.ReadUint16() // Zeroed + bf.ReadUint16() // Name length + m.Name = stringsupport.SJISToUTF8(bf.ReadNullTerminatedBytes()) + return nil } // Build builds a binary packet from the current data. diff --git a/network/mhfpacket/msg_mhf_entry_festa.go b/network/mhfpacket/msg_mhf_entry_festa.go index 9572cede6..de46b2d0e 100644 --- a/network/mhfpacket/msg_mhf_entry_festa.go +++ b/network/mhfpacket/msg_mhf_entry_festa.go @@ -1,18 +1,18 @@ package mhfpacket import ( - "errors" + "errors" - "erupe-ce/network/clientctx" - "erupe-ce/network" "erupe-ce/common/byteframe" + "erupe-ce/network" + "erupe-ce/network/clientctx" ) // MsgMhfEntryFesta represents the MSG_MHF_ENTRY_FESTA type MsgMhfEntryFesta struct { - AckHandle uint32 - FestaID uint32 - GuildID uint32 + AckHandle uint32 + FestaID uint32 + GuildID uint32 } // Opcode returns the ID associated with this packet type. @@ -22,11 +22,11 @@ func (m *MsgMhfEntryFesta) Opcode() network.PacketID { // Parse parses the packet from binary func (m *MsgMhfEntryFesta) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { - m.AckHandle = bf.ReadUint32() - m.FestaID = bf.ReadUint32() - m.GuildID = bf.ReadUint32() - _ = bf.ReadUint16() // Always 0 - return nil + m.AckHandle = bf.ReadUint32() + m.FestaID = bf.ReadUint32() + m.GuildID = bf.ReadUint32() + bf.ReadUint16() // Zeroed + return nil } // Build builds a binary packet from the current data. diff --git a/network/mhfpacket/msg_mhf_enumerate_festa_member.go b/network/mhfpacket/msg_mhf_enumerate_festa_member.go index f0b5cc478..4b90589a9 100644 --- a/network/mhfpacket/msg_mhf_enumerate_festa_member.go +++ b/network/mhfpacket/msg_mhf_enumerate_festa_member.go @@ -1,18 +1,18 @@ package mhfpacket import ( - "errors" + "errors" - "erupe-ce/network/clientctx" - "erupe-ce/network" "erupe-ce/common/byteframe" + "erupe-ce/network" + "erupe-ce/network/clientctx" ) // MsgMhfEnumerateFestaMember represents the MSG_MHF_ENUMERATE_FESTA_MEMBER type MsgMhfEnumerateFestaMember struct { - AckHandle uint32 - FestaID uint32 - GuildID uint32 + AckHandle uint32 + FestaID uint32 + GuildID uint32 } // Opcode returns the ID associated with this packet type. @@ -22,11 +22,11 @@ func (m *MsgMhfEnumerateFestaMember) Opcode() network.PacketID { // Parse parses the packet from binary func (m *MsgMhfEnumerateFestaMember) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { - m.AckHandle = bf.ReadUint32() + m.AckHandle = bf.ReadUint32() m.FestaID = bf.ReadUint32() m.GuildID = bf.ReadUint32() - _ = bf.ReadUint16() // Hardcoded 0 in the binary. - return nil + bf.ReadUint16() // Zeroed + return nil } // Build builds a binary packet from the current data. diff --git a/network/mhfpacket/msg_mhf_enumerate_guacot.go b/network/mhfpacket/msg_mhf_enumerate_guacot.go index 2f970f938..71cae7adf 100644 --- a/network/mhfpacket/msg_mhf_enumerate_guacot.go +++ b/network/mhfpacket/msg_mhf_enumerate_guacot.go @@ -10,8 +10,7 @@ import ( // MsgMhfEnumerateGuacot represents the MSG_MHF_ENUMERATE_GUACOT type MsgMhfEnumerateGuacot struct { AckHandle uint32 - Unk0 uint32 // Hardcoded 0 in binary - Unk1 uint16 // Hardcoded 0 in binary + Unk0 uint32 } // Opcode returns the ID associated with this packet type. @@ -23,7 +22,7 @@ func (m *MsgMhfEnumerateGuacot) Opcode() network.PacketID { func (m *MsgMhfEnumerateGuacot) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { m.AckHandle = bf.ReadUint32() m.Unk0 = bf.ReadUint32() - m.Unk1 = bf.ReadUint16() + bf.ReadUint16() // Zeroed return nil } diff --git a/network/mhfpacket/msg_mhf_enumerate_guild.go b/network/mhfpacket/msg_mhf_enumerate_guild.go index f90a7cc7b..61ead7870 100644 --- a/network/mhfpacket/msg_mhf_enumerate_guild.go +++ b/network/mhfpacket/msg_mhf_enumerate_guild.go @@ -2,9 +2,7 @@ package mhfpacket import ( "errors" - "erupe-ce/common/bfutil" "erupe-ce/common/byteframe" - "erupe-ce/common/stringsupport" "erupe-ce/network" "erupe-ce/network/clientctx" ) @@ -34,8 +32,8 @@ type MsgMhfEnumerateGuild struct { Type EnumerateGuildType Page uint8 Sorting bool - Data1 []byte - Data2 string + Data1 *byteframe.ByteFrame + Data2 *byteframe.ByteFrame } // Opcode returns the ID associated with this packet type. @@ -49,12 +47,12 @@ func (m *MsgMhfEnumerateGuild) Parse(bf *byteframe.ByteFrame, ctx *clientctx.Cli m.Type = EnumerateGuildType(bf.ReadUint8()) m.Page = bf.ReadUint8() m.Sorting = bf.ReadBool() - _ = bf.ReadBytes(1) - m.Data1 = bf.ReadBytes(4) - _ = bf.ReadBytes(2) - lenData2 := uint(bf.ReadUint8()) - _ = bf.ReadBytes(1) - m.Data2 = stringsupport.SJISToUTF8(bfutil.UpToNull(bf.ReadBytes(lenData2))) + bf.ReadUint8() // Zeroed + m.Data1 = byteframe.NewByteFrameFromBytes(bf.ReadBytes(4)) + bf.ReadUint16() // Zeroed + dataLen := uint(bf.ReadUint8()) + bf.ReadUint8() // Zeroed + m.Data2 = byteframe.NewByteFrameFromBytes(bf.ReadBytes(dataLen)) return nil } diff --git a/network/mhfpacket/msg_mhf_enumerate_guild_item.go b/network/mhfpacket/msg_mhf_enumerate_guild_item.go index 4f538ca5d..6d3516371 100644 --- a/network/mhfpacket/msg_mhf_enumerate_guild_item.go +++ b/network/mhfpacket/msg_mhf_enumerate_guild_item.go @@ -1,18 +1,17 @@ package mhfpacket import ( - "errors" + "errors" - "erupe-ce/network/clientctx" - "erupe-ce/network" "erupe-ce/common/byteframe" + "erupe-ce/network" + "erupe-ce/network/clientctx" ) // MsgMhfEnumerateGuildItem represents the MSG_MHF_ENUMERATE_GUILD_ITEM type MsgMhfEnumerateGuildItem struct { AckHandle uint32 - GuildId uint32 - Unk0 uint16 + GuildID uint32 } // Opcode returns the ID associated with this packet type. @@ -22,9 +21,10 @@ func (m *MsgMhfEnumerateGuildItem) Opcode() network.PacketID { // Parse parses the packet from binary func (m *MsgMhfEnumerateGuildItem) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { - m.AckHandle = bf.ReadUint32() - m.GuildId = bf.ReadUint32() - m.Unk0 = bf.ReadUint16() + m.AckHandle = bf.ReadUint32() + m.GuildID = bf.ReadUint32() + bf.ReadUint8() // Zeroed + bf.ReadUint8() // Zeroed return nil } diff --git a/network/mhfpacket/msg_mhf_enumerate_guild_member.go b/network/mhfpacket/msg_mhf_enumerate_guild_member.go index f15de35f6..e90c431f2 100644 --- a/network/mhfpacket/msg_mhf_enumerate_guild_member.go +++ b/network/mhfpacket/msg_mhf_enumerate_guild_member.go @@ -1,17 +1,17 @@ package mhfpacket import ( + "errors" + "erupe-ce/common/byteframe" "erupe-ce/network" "erupe-ce/network/clientctx" - "erupe-ce/common/byteframe" ) // MsgMhfEnumerateGuildMember represents the MSG_MHF_ENUMERATE_GUILD_MEMBER type MsgMhfEnumerateGuildMember struct { - AckHandle uint32 - Unk0 uint16 // Hardcoded 00 01 in the binary - Unk1 uint32 // Alliance related - GuildID uint32 + AckHandle uint32 + AllianceID uint32 + GuildID uint32 } // Opcode returns the ID associated with this packet type. @@ -22,17 +22,14 @@ func (m *MsgMhfEnumerateGuildMember) Opcode() network.PacketID { // Parse parses the packet from binary func (m *MsgMhfEnumerateGuildMember) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { m.AckHandle = bf.ReadUint32() - m.Unk0 = bf.ReadUint16() - m.Unk1 = bf.ReadUint32() + bf.ReadUint8() // Zeroed + bf.ReadUint8() // Always 1 + m.AllianceID = bf.ReadUint32() m.GuildID = bf.ReadUint32() return nil } // Build builds a binary packet from the current data. func (m *MsgMhfEnumerateGuildMember) Build(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { - bf.WriteUint32(m.AckHandle) - bf.WriteUint16(m.Unk0) - bf.WriteUint32(m.Unk1) - bf.WriteUint32(m.GuildID) - return nil + return errors.New("NOT IMPLEMENTED") } diff --git a/network/mhfpacket/msg_mhf_enumerate_house.go b/network/mhfpacket/msg_mhf_enumerate_house.go index da6a25de7..41f57323a 100644 --- a/network/mhfpacket/msg_mhf_enumerate_house.go +++ b/network/mhfpacket/msg_mhf_enumerate_house.go @@ -14,7 +14,6 @@ type MsgMhfEnumerateHouse struct { AckHandle uint32 CharID uint32 Method uint8 - Unk uint16 Name string } @@ -28,7 +27,7 @@ func (m *MsgMhfEnumerateHouse) Parse(bf *byteframe.ByteFrame, ctx *clientctx.Cli m.AckHandle = bf.ReadUint32() m.CharID = bf.ReadUint32() m.Method = bf.ReadUint8() - m.Unk = bf.ReadUint16() + bf.ReadUint16() // Zeroed lenName := bf.ReadUint8() if lenName > 0 { m.Name = stringsupport.SJISToUTF8(bf.ReadNullTerminatedBytes()) diff --git a/network/mhfpacket/msg_mhf_enumerate_inv_guild.go b/network/mhfpacket/msg_mhf_enumerate_inv_guild.go index cf2057bed..994c374d8 100644 --- a/network/mhfpacket/msg_mhf_enumerate_inv_guild.go +++ b/network/mhfpacket/msg_mhf_enumerate_inv_guild.go @@ -10,8 +10,13 @@ import ( // MsgMhfEnumerateInvGuild represents the MSG_MHF_ENUMERATE_INV_GUILD type MsgMhfEnumerateInvGuild struct { - AckHandle uint32 - Unk []byte + AckHandle uint32 + Unk uint32 + Operation uint8 + ActiveHours uint8 + DaysActive uint8 + PlayStyle uint8 + GuildRequest uint8 } // Opcode returns the ID associated with this packet type. @@ -22,7 +27,12 @@ func (m *MsgMhfEnumerateInvGuild) Opcode() network.PacketID { // Parse parses the packet from binary func (m *MsgMhfEnumerateInvGuild) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { m.AckHandle = bf.ReadUint32() - m.Unk = bf.ReadBytes(9) + m.Unk = bf.ReadUint32() + m.Operation = bf.ReadUint8() + m.ActiveHours = bf.ReadUint8() + m.DaysActive = bf.ReadUint8() + m.PlayStyle = bf.ReadUint8() + m.GuildRequest = bf.ReadUint8() return nil } diff --git a/network/mhfpacket/msg_mhf_exchange_weekly_stamp.go b/network/mhfpacket/msg_mhf_exchange_weekly_stamp.go index 918a870ac..829bb6fb2 100644 --- a/network/mhfpacket/msg_mhf_exchange_weekly_stamp.go +++ b/network/mhfpacket/msg_mhf_exchange_weekly_stamp.go @@ -13,7 +13,6 @@ type MsgMhfExchangeWeeklyStamp struct { AckHandle uint32 StampType string Unk1 uint8 - Unk2 uint16 } // Opcode returns the ID associated with this packet type. @@ -32,7 +31,7 @@ func (m *MsgMhfExchangeWeeklyStamp) Parse(bf *byteframe.ByteFrame, ctx *clientct m.StampType = "ex" } m.Unk1 = bf.ReadUint8() - m.Unk2 = bf.ReadUint16() + bf.ReadUint16() // Zeroed return nil } diff --git a/network/mhfpacket/msg_mhf_info_joint.go b/network/mhfpacket/msg_mhf_info_joint.go index 17e468c7c..c349c9768 100644 --- a/network/mhfpacket/msg_mhf_info_joint.go +++ b/network/mhfpacket/msg_mhf_info_joint.go @@ -12,7 +12,6 @@ import ( type MsgMhfInfoJoint struct { AckHandle uint32 AllianceID uint32 - Unk uint32 } // Opcode returns the ID associated with this packet type. @@ -24,7 +23,7 @@ func (m *MsgMhfInfoJoint) Opcode() network.PacketID { func (m *MsgMhfInfoJoint) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { m.AckHandle = bf.ReadUint32() m.AllianceID = bf.ReadUint32() - m.Unk = bf.ReadUint32() + bf.ReadUint32() // Zeroed return nil } diff --git a/network/mhfpacket/msg_mhf_load_guild_cooking.go b/network/mhfpacket/msg_mhf_load_guild_cooking.go index 515187bc2..0e293c073 100644 --- a/network/mhfpacket/msg_mhf_load_guild_cooking.go +++ b/network/mhfpacket/msg_mhf_load_guild_cooking.go @@ -1,17 +1,17 @@ package mhfpacket import ( - "errors" + "errors" - "erupe-ce/network/clientctx" - "erupe-ce/network" "erupe-ce/common/byteframe" + "erupe-ce/network" + "erupe-ce/network/clientctx" ) // MsgMhfLoadGuildCooking represents the MSG_MHF_LOAD_GUILD_COOKING -type MsgMhfLoadGuildCooking struct{ - AckHandle uint32 - MaxMeals uint8 +type MsgMhfLoadGuildCooking struct { + AckHandle uint32 + MaxMeals uint8 } // Opcode returns the ID associated with this packet type. @@ -22,7 +22,7 @@ func (m *MsgMhfLoadGuildCooking) Opcode() network.PacketID { // Parse parses the packet from binary func (m *MsgMhfLoadGuildCooking) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { m.AckHandle = bf.ReadUint32() - _ = bf.ReadUint8() + m.MaxMeals = bf.ReadUint8() return nil } diff --git a/network/mhfpacket/msg_mhf_load_house.go b/network/mhfpacket/msg_mhf_load_house.go index a012b2f1c..138c8af22 100644 --- a/network/mhfpacket/msg_mhf_load_house.go +++ b/network/mhfpacket/msg_mhf_load_house.go @@ -16,7 +16,6 @@ type MsgMhfLoadHouse struct { Destination uint8 // False if already in hosts My Series, in case host updates PW CheckPass bool - Unk3 uint16 // Hardcoded 0 in binary Password string } @@ -31,8 +30,8 @@ func (m *MsgMhfLoadHouse) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientCo m.CharID = bf.ReadUint32() m.Destination = bf.ReadUint8() m.CheckPass = bf.ReadBool() - _ = bf.ReadUint16() - _ = bf.ReadUint8() // Password length + bf.ReadUint16() // Zeroed + bf.ReadUint8() // Password length m.Password = stringsupport.SJISToUTF8(bf.ReadNullTerminatedBytes()) return nil } diff --git a/network/mhfpacket/msg_mhf_operate_guild_member.go b/network/mhfpacket/msg_mhf_operate_guild_member.go index 7aed7a21d..8daf82dc5 100644 --- a/network/mhfpacket/msg_mhf_operate_guild_member.go +++ b/network/mhfpacket/msg_mhf_operate_guild_member.go @@ -23,7 +23,6 @@ type MsgMhfOperateGuildMember struct { GuildID uint32 CharID uint32 Action uint8 - Unk []byte } // Opcode returns the ID associated with this packet type. @@ -37,7 +36,8 @@ func (m *MsgMhfOperateGuildMember) Parse(bf *byteframe.ByteFrame, ctx *clientctx m.GuildID = bf.ReadUint32() m.CharID = bf.ReadUint32() m.Action = bf.ReadUint8() - m.Unk = bf.ReadBytes(3) + bf.ReadUint8() // Zeroed + bf.ReadUint16() // Zeroed return nil } diff --git a/network/mhfpacket/msg_mhf_operate_joint.go b/network/mhfpacket/msg_mhf_operate_joint.go index 1fa360d01..eccb3139d 100644 --- a/network/mhfpacket/msg_mhf_operate_joint.go +++ b/network/mhfpacket/msg_mhf_operate_joint.go @@ -22,7 +22,8 @@ type MsgMhfOperateJoint struct { AllianceID uint32 GuildID uint32 Action OperateJointAction - UnkData *byteframe.ByteFrame + Data1 *byteframe.ByteFrame + Data2 *byteframe.ByteFrame } // Opcode returns the ID associated with this packet type. @@ -36,8 +37,9 @@ func (m *MsgMhfOperateJoint) Parse(bf *byteframe.ByteFrame, ctx *clientctx.Clien m.AllianceID = bf.ReadUint32() m.GuildID = bf.ReadUint32() m.Action = OperateJointAction(bf.ReadUint8()) - m.UnkData = byteframe.NewByteFrameFromBytes(bf.DataFromCurrent()) - bf.Seek(int64(len(bf.Data())-2), 0) + dataLen := uint(bf.ReadUint8()) + m.Data1 = byteframe.NewByteFrameFromBytes(bf.ReadBytes(4)) + m.Data2 = byteframe.NewByteFrameFromBytes(bf.ReadBytes(dataLen)) return nil } diff --git a/network/mhfpacket/msg_mhf_opr_member.go b/network/mhfpacket/msg_mhf_opr_member.go index 32641cb39..b0dceaba5 100644 --- a/network/mhfpacket/msg_mhf_opr_member.go +++ b/network/mhfpacket/msg_mhf_opr_member.go @@ -1,20 +1,20 @@ package mhfpacket import ( - "errors" + "errors" - "erupe-ce/network/clientctx" - "erupe-ce/network" "erupe-ce/common/byteframe" + "erupe-ce/network" + "erupe-ce/network/clientctx" ) // MsgMhfOprMember represents the MSG_MHF_OPR_MEMBER type MsgMhfOprMember struct { - AckHandle uint32 - Blacklist bool - Operation bool - Unk uint16 - CharID uint32 + AckHandle uint32 + Blacklist bool + Operation bool + Unk uint16 + CharIDs []uint32 } // Opcode returns the ID associated with this packet type. @@ -24,12 +24,15 @@ func (m *MsgMhfOprMember) Opcode() network.PacketID { // Parse parses the packet from binary func (m *MsgMhfOprMember) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { - m.AckHandle = bf.ReadUint32() - m.Blacklist = bf.ReadBool() - m.Operation = bf.ReadBool() - m.Unk = bf.ReadUint16() - m.CharID = bf.ReadUint32() - return nil + m.AckHandle = bf.ReadUint32() + m.Blacklist = bf.ReadBool() + m.Operation = bf.ReadBool() + bf.ReadUint8() + chars := int(bf.ReadUint8()) + for i := 0; i < chars; i++ { + m.CharIDs = append(m.CharIDs, bf.ReadUint32()) + } + return nil } // Build builds a binary packet from the current data. diff --git a/network/mhfpacket/msg_mhf_register_event.go b/network/mhfpacket/msg_mhf_register_event.go index 956c4a399..46afb1a2e 100644 --- a/network/mhfpacket/msg_mhf_register_event.go +++ b/network/mhfpacket/msg_mhf_register_event.go @@ -12,8 +12,7 @@ type MsgMhfRegisterEvent struct { Unk0 uint16 WorldID uint16 LandID uint16 - Unk3 uint8 - Unk4 uint8 + Unk1 bool } // Opcode returns the ID associated with this packet type. @@ -27,8 +26,8 @@ func (m *MsgMhfRegisterEvent) Parse(bf *byteframe.ByteFrame, ctx *clientctx.Clie m.Unk0 = bf.ReadUint16() m.WorldID = bf.ReadUint16() m.LandID = bf.ReadUint16() - m.Unk3 = bf.ReadUint8() - m.Unk4 = bf.ReadUint8() + m.Unk1 = bf.ReadBool() + bf.ReadUint8() // Zeroed return nil } diff --git a/network/mhfpacket/msg_mhf_set_guild_manage_right.go b/network/mhfpacket/msg_mhf_set_guild_manage_right.go index 3feed2654..9eb2d8b21 100644 --- a/network/mhfpacket/msg_mhf_set_guild_manage_right.go +++ b/network/mhfpacket/msg_mhf_set_guild_manage_right.go @@ -13,7 +13,6 @@ type MsgMhfSetGuildManageRight struct { AckHandle uint32 CharID uint32 Allowed bool - Unk []byte } // Opcode returns the ID associated with this packet type. @@ -26,7 +25,7 @@ func (m *MsgMhfSetGuildManageRight) Parse(bf *byteframe.ByteFrame, ctx *clientct m.AckHandle = bf.ReadUint32() m.CharID = bf.ReadUint32() m.Allowed = bf.ReadBool() - m.Unk = bf.ReadBytes(3) + bf.ReadBytes(3) // Zeroed return nil } diff --git a/network/mhfpacket/msg_mhf_stampcard_stamp.go b/network/mhfpacket/msg_mhf_stampcard_stamp.go index 5ac650ad2..f9da9612e 100644 --- a/network/mhfpacket/msg_mhf_stampcard_stamp.go +++ b/network/mhfpacket/msg_mhf_stampcard_stamp.go @@ -34,7 +34,7 @@ func (m *MsgMhfStampcardStamp) Parse(bf *byteframe.ByteFrame, ctx *clientctx.Cli m.HR = bf.ReadUint16() m.GR = bf.ReadUint16() m.Stamps = bf.ReadUint16() - _ = bf.ReadUint16() + bf.ReadUint16() // Zeroed if _config.ErupeConfig.RealClientMode > _config.Z1 { m.Reward1 = uint16(bf.ReadUint32()) m.Reward2 = uint16(bf.ReadUint32()) diff --git a/network/mhfpacket/msg_mhf_state_festa_g.go b/network/mhfpacket/msg_mhf_state_festa_g.go index 86c6526bf..e356b98be 100644 --- a/network/mhfpacket/msg_mhf_state_festa_g.go +++ b/network/mhfpacket/msg_mhf_state_festa_g.go @@ -1,18 +1,18 @@ package mhfpacket import ( - "errors" + "errors" - "erupe-ce/network/clientctx" - "erupe-ce/network" "erupe-ce/common/byteframe" + "erupe-ce/network" + "erupe-ce/network/clientctx" ) // MsgMhfStateFestaG represents the MSG_MHF_STATE_FESTA_G type MsgMhfStateFestaG struct { AckHandle uint32 - FestaID uint32 - GuildID uint32 + FestaID uint32 + GuildID uint32 } // Opcode returns the ID associated with this packet type. @@ -25,7 +25,7 @@ func (m *MsgMhfStateFestaG) Parse(bf *byteframe.ByteFrame, ctx *clientctx.Client m.AckHandle = bf.ReadUint32() m.FestaID = bf.ReadUint32() m.GuildID = bf.ReadUint32() - _ = bf.ReadUint16() // Hardcoded 0 in the binary. + bf.ReadUint16() // Zeroed return nil } diff --git a/network/mhfpacket/msg_mhf_state_festa_u.go b/network/mhfpacket/msg_mhf_state_festa_u.go index ef76498bd..013966dba 100644 --- a/network/mhfpacket/msg_mhf_state_festa_u.go +++ b/network/mhfpacket/msg_mhf_state_festa_u.go @@ -1,18 +1,18 @@ package mhfpacket import ( - "errors" + "errors" - "erupe-ce/network/clientctx" - "erupe-ce/network" "erupe-ce/common/byteframe" + "erupe-ce/network" + "erupe-ce/network/clientctx" ) // MsgMhfStateFestaU represents the MSG_MHF_STATE_FESTA_U type MsgMhfStateFestaU struct { - AckHandle uint32 - FestaID uint32 - GuildID uint32 + AckHandle uint32 + FestaID uint32 + GuildID uint32 } // Opcode returns the ID associated with this packet type. @@ -22,11 +22,11 @@ func (m *MsgMhfStateFestaU) Opcode() network.PacketID { // Parse parses the packet from binary func (m *MsgMhfStateFestaU) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { - m.AckHandle = bf.ReadUint32() - m.FestaID = bf.ReadUint32() - m.GuildID = bf.ReadUint32() - _ = bf.ReadUint16() // Hardcoded 0 in the binary. - return nil + m.AckHandle = bf.ReadUint32() + m.FestaID = bf.ReadUint32() + m.GuildID = bf.ReadUint32() + bf.ReadUint16() // Zeroed + return nil } // Build builds a binary packet from the current data. diff --git a/network/mhfpacket/msg_mhf_transfer_item.go b/network/mhfpacket/msg_mhf_transfer_item.go index e3c2cc67c..69dfdb13f 100644 --- a/network/mhfpacket/msg_mhf_transfer_item.go +++ b/network/mhfpacket/msg_mhf_transfer_item.go @@ -1,11 +1,11 @@ package mhfpacket -import ( - "errors" +import ( + "errors" - "erupe-ce/network/clientctx" - "erupe-ce/network" "erupe-ce/common/byteframe" + "erupe-ce/network" + "erupe-ce/network/clientctx" ) // MsgMhfTransferItem represents the MSG_MHF_TRANSFER_ITEM @@ -15,8 +15,8 @@ type MsgMhfTransferItem struct { // correlate with any item IDs that would make sense to get after quests so // I have no idea what this actually does Unk0 uint32 - Unk1 uint16 // Hardcoded - Unk2 uint16 // Hardcoded + Unk1 uint8 + Unk2 uint16 } // Opcode returns the ID associated with this packet type. @@ -28,7 +28,8 @@ func (m *MsgMhfTransferItem) Opcode() network.PacketID { func (m *MsgMhfTransferItem) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { m.AckHandle = bf.ReadUint32() m.Unk0 = bf.ReadUint32() - m.Unk1 = bf.ReadUint16() + m.Unk1 = bf.ReadUint8() + bf.ReadUint8() // Zeroed m.Unk2 = bf.ReadUint16() return nil } diff --git a/network/mhfpacket/msg_mhf_transit_message.go b/network/mhfpacket/msg_mhf_transit_message.go index 1d15c6d42..1442af08d 100644 --- a/network/mhfpacket/msg_mhf_transit_message.go +++ b/network/mhfpacket/msg_mhf_transit_message.go @@ -12,7 +12,6 @@ import ( type MsgMhfTransitMessage struct { AckHandle uint32 Unk0 uint8 - Unk1 uint8 SearchType uint16 MessageData []byte } @@ -26,7 +25,7 @@ func (m *MsgMhfTransitMessage) Opcode() network.PacketID { func (m *MsgMhfTransitMessage) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { m.AckHandle = bf.ReadUint32() m.Unk0 = bf.ReadUint8() - m.Unk1 = bf.ReadUint8() + bf.ReadUint8() // Zeroed m.SearchType = bf.ReadUint16() m.MessageData = bf.ReadBytes(uint(bf.ReadUint16())) return nil diff --git a/network/mhfpacket/msg_mhf_update_guild_item.go b/network/mhfpacket/msg_mhf_update_guild_item.go index dbea591ea..ddd7ef6e5 100644 --- a/network/mhfpacket/msg_mhf_update_guild_item.go +++ b/network/mhfpacket/msg_mhf_update_guild_item.go @@ -18,7 +18,7 @@ type Item struct { // MsgMhfUpdateGuildItem represents the MSG_MHF_UPDATE_GUILD_ITEM type MsgMhfUpdateGuildItem struct { AckHandle uint32 - GuildId uint32 + GuildID uint32 Items []Item } @@ -30,7 +30,7 @@ func (m *MsgMhfUpdateGuildItem) Opcode() network.PacketID { // Parse parses the packet from binary func (m *MsgMhfUpdateGuildItem) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { m.AckHandle = bf.ReadUint32() - m.GuildId = bf.ReadUint32() + m.GuildID = bf.ReadUint32() itemCount := int(bf.ReadUint16()) bf.ReadUint8() // Zeroed bf.ReadUint8() // Zeroed diff --git a/network/mhfpacket/msg_mhf_use_gacha_point.go b/network/mhfpacket/msg_mhf_use_gacha_point.go index 33a4ef143..5245b5eaf 100644 --- a/network/mhfpacket/msg_mhf_use_gacha_point.go +++ b/network/mhfpacket/msg_mhf_use_gacha_point.go @@ -1,19 +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" ) // MsgMhfUseGachaPoint represents the MSG_MHF_USE_GACHA_POINT -type MsgMhfUseGachaPoint struct{ - AckHandle uint32 - Unk0 uint16 // padding? - TrialCoins uint32 - PremiumCoins uint32 +type MsgMhfUseGachaPoint struct { + AckHandle uint32 + Unk0 uint8 + Unk1 uint8 + TrialCoins uint32 + PremiumCoins uint32 } // Opcode returns the ID associated with this packet type. @@ -24,7 +25,8 @@ func (m *MsgMhfUseGachaPoint) Opcode() network.PacketID { // Parse parses the packet from binary func (m *MsgMhfUseGachaPoint) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { m.AckHandle = bf.ReadUint32() - m.Unk0 = bf.ReadUint16() + m.Unk0 = bf.ReadUint8() + m.Unk1 = bf.ReadUint8() m.TrialCoins = bf.ReadUint32() m.PremiumCoins = bf.ReadUint32() return nil diff --git a/network/mhfpacket/msg_mhf_vote_festa.go b/network/mhfpacket/msg_mhf_vote_festa.go index b3c05d5fd..201c1b5ac 100644 --- a/network/mhfpacket/msg_mhf_vote_festa.go +++ b/network/mhfpacket/msg_mhf_vote_festa.go @@ -11,7 +11,7 @@ import ( // MsgMhfVoteFesta represents the MSG_MHF_VOTE_FESTA type MsgMhfVoteFesta struct { AckHandle uint32 - Unk uint32 + FestaID uint32 GuildID uint32 TrialID uint32 } @@ -24,7 +24,7 @@ func (m *MsgMhfVoteFesta) Opcode() network.PacketID { // Parse parses the packet from binary func (m *MsgMhfVoteFesta) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { m.AckHandle = bf.ReadUint32() - m.Unk = bf.ReadUint32() + m.FestaID = bf.ReadUint32() m.GuildID = bf.ReadUint32() m.TrialID = bf.ReadUint32() return nil diff --git a/network/mhfpacket/msg_sys_create_acquire_semaphore.go b/network/mhfpacket/msg_sys_create_acquire_semaphore.go index 694aaaeed..9e22c50e7 100644 --- a/network/mhfpacket/msg_sys_create_acquire_semaphore.go +++ b/network/mhfpacket/msg_sys_create_acquire_semaphore.go @@ -2,7 +2,6 @@ package mhfpacket import ( "errors" - "erupe-ce/common/bfutil" "erupe-ce/common/byteframe" _config "erupe-ce/config" "erupe-ce/network" @@ -29,8 +28,8 @@ func (m *MsgSysCreateAcquireSemaphore) Parse(bf *byteframe.ByteFrame, ctx *clien if _config.ErupeConfig.RealClientMode >= _config.S7 { // Assuming this was added with Ravi? m.PlayerCount = bf.ReadUint8() } - SemaphoreIDLength := bf.ReadUint8() - m.SemaphoreID = string(bfutil.UpToNull(bf.ReadBytes(uint(SemaphoreIDLength)))) + bf.ReadUint8() // SemaphoreID length + m.SemaphoreID = string(bf.ReadNullTerminatedBytes()) return nil } diff --git a/network/mhfpacket/msg_sys_create_semaphore.go b/network/mhfpacket/msg_sys_create_semaphore.go index 361802e05..c9b29d2ab 100644 --- a/network/mhfpacket/msg_sys_create_semaphore.go +++ b/network/mhfpacket/msg_sys_create_semaphore.go @@ -2,6 +2,7 @@ package mhfpacket import ( "errors" + _config "erupe-ce/config" "erupe-ce/common/byteframe" "erupe-ce/network" @@ -10,10 +11,10 @@ import ( // MsgSysCreateSemaphore represents the MSG_SYS_CREATE_SEMAPHORE type MsgSysCreateSemaphore struct { - AckHandle uint32 - Unk0 uint16 - DataSize uint16 - RawDataPayload []byte + AckHandle uint32 + Unk0 uint16 + PlayerCount uint8 + SemaphoreID string } // Opcode returns the ID associated with this packet type. @@ -25,8 +26,11 @@ func (m *MsgSysCreateSemaphore) Opcode() network.PacketID { func (m *MsgSysCreateSemaphore) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { m.AckHandle = bf.ReadUint32() m.Unk0 = bf.ReadUint16() - m.DataSize = bf.ReadUint16() - m.RawDataPayload = bf.ReadBytes(uint(m.DataSize)) + if _config.ErupeConfig.RealClientMode >= _config.S7 { // Assuming this was added with Ravi? + m.PlayerCount = bf.ReadUint8() + } + bf.ReadUint8() // SemaphoreID length + m.SemaphoreID = string(bf.ReadNullTerminatedBytes()) return nil } diff --git a/network/mhfpacket/msg_sys_enumerate_client.go b/network/mhfpacket/msg_sys_enumerate_client.go index 5318549a6..06764d65b 100644 --- a/network/mhfpacket/msg_sys_enumerate_client.go +++ b/network/mhfpacket/msg_sys_enumerate_client.go @@ -3,7 +3,6 @@ package mhfpacket import ( "errors" - "erupe-ce/common/bfutil" "erupe-ce/common/byteframe" "erupe-ce/network" "erupe-ce/network/clientctx" @@ -27,8 +26,8 @@ func (m *MsgSysEnumerateClient) Parse(bf *byteframe.ByteFrame, ctx *clientctx.Cl m.AckHandle = bf.ReadUint32() m.Unk0 = bf.ReadUint8() m.Get = bf.ReadUint8() - stageIDLength := bf.ReadUint8() - m.StageID = string(bfutil.UpToNull(bf.ReadBytes(uint(stageIDLength)))) + bf.ReadUint8() // StageID length + m.StageID = string(bf.ReadNullTerminatedBytes()) return nil } diff --git a/network/mhfpacket/msg_sys_get_stage_binary.go b/network/mhfpacket/msg_sys_get_stage_binary.go index 336f563d5..c2da50122 100644 --- a/network/mhfpacket/msg_sys_get_stage_binary.go +++ b/network/mhfpacket/msg_sys_get_stage_binary.go @@ -2,7 +2,6 @@ package mhfpacket import ( "erupe-ce/common/byteframe" - "erupe-ce/common/bfutil" "erupe-ce/network" "erupe-ce/network/clientctx" ) @@ -27,8 +26,8 @@ func (m *MsgSysGetStageBinary) Parse(bf *byteframe.ByteFrame, ctx *clientctx.Cli m.BinaryType0 = bf.ReadUint8() m.BinaryType1 = bf.ReadUint8() m.Unk0 = bf.ReadUint32() - stageIDLength := bf.ReadUint8() - m.StageID = string(bfutil.UpToNull(bf.ReadBytes(uint(stageIDLength)))) + bf.ReadUint8() // StageID length + m.StageID = string(bf.ReadNullTerminatedBytes()) return nil } diff --git a/network/mhfpacket/msg_sys_load_register.go b/network/mhfpacket/msg_sys_load_register.go index 7e1ac5950..edf4eafb4 100644 --- a/network/mhfpacket/msg_sys_load_register.go +++ b/network/mhfpacket/msg_sys_load_register.go @@ -24,8 +24,8 @@ func (m *MsgSysLoadRegister) Parse(bf *byteframe.ByteFrame, ctx *clientctx.Clien m.AckHandle = bf.ReadUint32() m.RegisterID = bf.ReadUint32() m.Values = bf.ReadUint8() - _ = bf.ReadUint8() - _ = bf.ReadUint16() + bf.ReadUint8() // Zeroed + bf.ReadUint16() // Zeroed return nil } diff --git a/network/mhfpacket/msg_sys_login.go b/network/mhfpacket/msg_sys_login.go index fc881b991..5f8a7c7cc 100644 --- a/network/mhfpacket/msg_sys_login.go +++ b/network/mhfpacket/msg_sys_login.go @@ -1,24 +1,22 @@ package mhfpacket import ( - "errors" + "errors" - "erupe-ce/network/clientctx" - "erupe-ce/network" "erupe-ce/common/byteframe" + "erupe-ce/network" + "erupe-ce/network/clientctx" ) // MsgSysLogin represents the MSG_SYS_LOGIN type MsgSysLogin struct { - AckHandle uint32 - CharID0 uint32 - LoginTokenNumber uint32 - HardcodedZero0 uint16 - RequestVersion uint16 - CharID1 uint32 - HardcodedZero1 uint16 - LoginTokenStringLength uint16 // Hardcoded to 0x11 - LoginTokenString string + AckHandle uint32 + CharID0 uint32 + LoginTokenNumber uint32 + HardcodedZero0 uint16 + RequestVersion uint16 + CharID1 uint32 + LoginTokenString string } // Opcode returns the ID associated with this packet type. @@ -34,8 +32,8 @@ func (m *MsgSysLogin) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContex m.HardcodedZero0 = bf.ReadUint16() m.RequestVersion = bf.ReadUint16() m.CharID1 = bf.ReadUint32() - m.HardcodedZero1 = bf.ReadUint16() - m.LoginTokenStringLength = bf.ReadUint16() + bf.ReadUint16() // Zeroed + bf.ReadUint16() // Always 11 m.LoginTokenString = string(bf.ReadNullTerminatedBytes()) return nil } diff --git a/network/mhfpacket/msg_sys_operate_register.go b/network/mhfpacket/msg_sys_operate_register.go index 6978609b1..75946d340 100644 --- a/network/mhfpacket/msg_sys_operate_register.go +++ b/network/mhfpacket/msg_sys_operate_register.go @@ -23,7 +23,7 @@ func (m *MsgSysOperateRegister) Opcode() network.PacketID { func (m *MsgSysOperateRegister) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { m.AckHandle = bf.ReadUint32() m.SemaphoreID = bf.ReadUint32() - _ = bf.ReadUint16() + bf.ReadUint16() // Zeroed dataSize := bf.ReadUint16() m.RawDataPayload = bf.ReadBytes(uint(dataSize)) return nil diff --git a/network/mhfpacket/msg_sys_set_stage_binary.go b/network/mhfpacket/msg_sys_set_stage_binary.go index eecee64a1..79832c7bb 100644 --- a/network/mhfpacket/msg_sys_set_stage_binary.go +++ b/network/mhfpacket/msg_sys_set_stage_binary.go @@ -2,7 +2,6 @@ package mhfpacket import ( "erupe-ce/common/byteframe" - "erupe-ce/common/bfutil" "erupe-ce/network" "erupe-ce/network/clientctx" ) @@ -24,9 +23,9 @@ func (m *MsgSysSetStageBinary) Opcode() network.PacketID { func (m *MsgSysSetStageBinary) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { m.BinaryType0 = bf.ReadUint8() m.BinaryType1 = bf.ReadUint8() - stageIDLength := bf.ReadUint8() // <= 0x20 - dataSize := bf.ReadUint16() // <= 0x400 - m.StageID = string(bfutil.UpToNull(bf.ReadBytes(uint(stageIDLength)))) + bf.ReadUint8() // StageID length <= 0x20 + dataSize := bf.ReadUint16() // <= 0x400 + m.StageID = string(bf.ReadNullTerminatedBytes()) m.RawDataPayload = bf.ReadBytes(uint(dataSize)) return nil } diff --git a/network/mhfpacket/msg_sys_wait_stage_binary.go b/network/mhfpacket/msg_sys_wait_stage_binary.go index 2a443cc72..5127e53de 100644 --- a/network/mhfpacket/msg_sys_wait_stage_binary.go +++ b/network/mhfpacket/msg_sys_wait_stage_binary.go @@ -2,7 +2,6 @@ package mhfpacket import ( "erupe-ce/common/byteframe" - "erupe-ce/common/bfutil" "erupe-ce/network" "erupe-ce/network/clientctx" ) @@ -27,8 +26,8 @@ func (m *MsgSysWaitStageBinary) Parse(bf *byteframe.ByteFrame, ctx *clientctx.Cl m.BinaryType0 = bf.ReadUint8() m.BinaryType1 = bf.ReadUint8() m.Unk0 = bf.ReadUint32() - stageIDLength := bf.ReadUint8() - m.StageID = string(bfutil.UpToNull(bf.ReadBytes(uint(stageIDLength)))) + bf.ReadUint8() // StageID length + m.StageID = string(bf.ReadNullTerminatedBytes()) return nil } diff --git a/server/channelserver/handlers.go b/server/channelserver/handlers.go index 057881723..154dbc100 100644 --- a/server/channelserver/handlers.go +++ b/server/channelserver/handlers.go @@ -611,7 +611,7 @@ func handleMsgMhfServerCommand(s *Session, p mhfpacket.MHFPacket) {} func handleMsgMhfAnnounce(s *Session, p mhfpacket.MHFPacket) { pkt := p.(*mhfpacket.MsgMhfAnnounce) - s.server.BroadcastRaviente(pkt.IPAddress, pkt.Port, pkt.StageID, pkt.Type) + s.server.BroadcastRaviente(pkt.IPAddress, pkt.Port, pkt.StageID, pkt.Data.ReadUint8()) doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) } diff --git a/server/channelserver/handlers_clients.go b/server/channelserver/handlers_clients.go index 12e8540b3..e1d2c4a49 100644 --- a/server/channelserver/handlers_clients.go +++ b/server/channelserver/handlers_clients.go @@ -60,20 +60,19 @@ func handleMsgMhfListMember(s *Session, p mhfpacket.MHFPacket) { resp := byteframe.NewByteFrame() resp.WriteUint32(0) // Blacklist count err := s.server.db.QueryRow("SELECT blocked FROM characters WHERE id=$1", s.charID).Scan(&csv) - if err != nil { - panic(err) - } - cids := stringsupport.CSVElems(csv) - for _, cid := range cids { - var name string - err = s.server.db.QueryRow("SELECT name FROM characters WHERE id=$1", cid).Scan(&name) - if err != nil { - continue + if err == nil { + cids := stringsupport.CSVElems(csv) + for _, cid := range cids { + var name string + err = s.server.db.QueryRow("SELECT name FROM characters WHERE id=$1", cid).Scan(&name) + if err != nil { + continue + } + count++ + resp.WriteUint32(uint32(cid)) + resp.WriteUint32(16) + resp.WriteBytes(stringsupport.PaddedString(name, 16, true)) } - count++ - resp.WriteUint32(uint32(cid)) - resp.WriteUint32(16) - resp.WriteBytes(stringsupport.PaddedString(name, 16, true)) } resp.Seek(0, 0) resp.WriteUint32(count) @@ -83,28 +82,28 @@ func handleMsgMhfListMember(s *Session, p mhfpacket.MHFPacket) { func handleMsgMhfOprMember(s *Session, p mhfpacket.MHFPacket) { pkt := p.(*mhfpacket.MsgMhfOprMember) var csv string - if pkt.Blacklist { - err := s.server.db.QueryRow("SELECT blocked FROM characters WHERE id=$1", s.charID).Scan(&csv) - if err != nil { - panic(err) + for _, cid := range pkt.CharIDs { + if pkt.Blacklist { + err := s.server.db.QueryRow("SELECT blocked FROM characters WHERE id=$1", s.charID).Scan(&csv) + if err == nil { + if pkt.Operation { + csv = stringsupport.CSVRemove(csv, int(cid)) + } else { + csv = stringsupport.CSVAdd(csv, int(cid)) + } + s.server.db.Exec("UPDATE characters SET blocked=$1 WHERE id=$2", csv, s.charID) + } + } else { // Friendlist + err := s.server.db.QueryRow("SELECT friends FROM characters WHERE id=$1", s.charID).Scan(&csv) + if err == nil { + if pkt.Operation { + csv = stringsupport.CSVRemove(csv, int(cid)) + } else { + csv = stringsupport.CSVAdd(csv, int(cid)) + } + s.server.db.Exec("UPDATE characters SET friends=$1 WHERE id=$2", csv, s.charID) + } } - if pkt.Operation { - csv = stringsupport.CSVRemove(csv, int(pkt.CharID)) - } else { - csv = stringsupport.CSVAdd(csv, int(pkt.CharID)) - } - s.server.db.Exec("UPDATE characters SET blocked=$1 WHERE id=$2", csv, s.charID) - } else { // Friendlist - err := s.server.db.QueryRow("SELECT friends FROM characters WHERE id=$1", s.charID).Scan(&csv) - if err != nil { - panic(err) - } - if pkt.Operation { - csv = stringsupport.CSVRemove(csv, int(pkt.CharID)) - } else { - csv = stringsupport.CSVAdd(csv, int(pkt.CharID)) - } - s.server.db.Exec("UPDATE characters SET friends=$1 WHERE id=$2", csv, s.charID) } doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) } diff --git a/server/channelserver/handlers_guild.go b/server/channelserver/handlers_guild.go index cf190aa45..48d2bbadf 100644 --- a/server/channelserver/handlers_guild.go +++ b/server/channelserver/handlers_guild.go @@ -1147,7 +1147,6 @@ func handleMsgMhfEnumerateGuild(s *Session, p mhfpacket.MHFPacket) { var alliances []*GuildAlliance var rows *sqlx.Rows var err error - bf := byteframe.NewByteFrameFromBytes(pkt.Data1) if pkt.Type <= 8 { var tempGuilds []*Guild @@ -1164,20 +1163,20 @@ func handleMsgMhfEnumerateGuild(s *Session, p mhfpacket.MHFPacket) { switch pkt.Type { case mhfpacket.ENUMERATE_GUILD_TYPE_GUILD_NAME: for _, guild := range tempGuilds { - if strings.Contains(guild.Name, pkt.Data2) { + if strings.Contains(guild.Name, stringsupport.SJISToUTF8(pkt.Data2.ReadNullTerminatedBytes())) { guilds = append(guilds, guild) } } case mhfpacket.ENUMERATE_GUILD_TYPE_LEADER_NAME: for _, guild := range tempGuilds { - if strings.Contains(guild.LeaderName, pkt.Data2) { + if strings.Contains(guild.LeaderName, stringsupport.SJISToUTF8(pkt.Data2.ReadNullTerminatedBytes())) { guilds = append(guilds, guild) } } case mhfpacket.ENUMERATE_GUILD_TYPE_LEADER_ID: - ID := bf.ReadUint32() + CID := pkt.Data1.ReadUint32() for _, guild := range tempGuilds { - if guild.LeaderCharID == ID { + if guild.LeaderCharID == CID { guilds = append(guilds, guild) } } @@ -1215,15 +1214,15 @@ func handleMsgMhfEnumerateGuild(s *Session, p mhfpacket.MHFPacket) { } guilds = tempGuilds case mhfpacket.ENUMERATE_GUILD_TYPE_MOTTO: - mainMotto := uint8(bf.ReadUint16()) - subMotto := uint8(bf.ReadUint16()) + mainMotto := uint8(pkt.Data1.ReadUint16()) + subMotto := uint8(pkt.Data1.ReadUint16()) for _, guild := range tempGuilds { if guild.MainMotto == mainMotto && guild.SubMotto == subMotto { guilds = append(guilds, guild) } } case mhfpacket.ENUMERATE_GUILD_TYPE_RECRUITING: - recruitingMotto := uint8(bf.ReadUint16()) + recruitingMotto := uint8(pkt.Data1.ReadUint16()) for _, guild := range tempGuilds { if guild.MainMotto == recruitingMotto { guilds = append(guilds, guild) @@ -1244,20 +1243,20 @@ func handleMsgMhfEnumerateGuild(s *Session, p mhfpacket.MHFPacket) { switch pkt.Type { case mhfpacket.ENUMERATE_ALLIANCE_TYPE_ALLIANCE_NAME: for _, alliance := range tempAlliances { - if strings.Contains(alliance.Name, pkt.Data2) { + if strings.Contains(alliance.Name, stringsupport.SJISToUTF8(pkt.Data2.ReadNullTerminatedBytes())) { alliances = append(alliances, alliance) } } case mhfpacket.ENUMERATE_ALLIANCE_TYPE_LEADER_NAME: for _, alliance := range tempAlliances { - if strings.Contains(alliance.ParentGuild.LeaderName, pkt.Data2) { + if strings.Contains(alliance.ParentGuild.LeaderName, stringsupport.SJISToUTF8(pkt.Data2.ReadNullTerminatedBytes())) { alliances = append(alliances, alliance) } } case mhfpacket.ENUMERATE_ALLIANCE_TYPE_LEADER_ID: - ID := bf.ReadUint32() + CID := pkt.Data1.ReadUint32() for _, alliance := range tempAlliances { - if alliance.ParentGuild.LeaderCharID == ID { + if alliance.ParentGuild.LeaderCharID == CID { alliances = append(alliances, alliance) } } @@ -1291,7 +1290,7 @@ func handleMsgMhfEnumerateGuild(s *Session, p mhfpacket.MHFPacket) { return } - bf = byteframe.NewByteFrame() + bf := byteframe.NewByteFrame() if pkt.Type > 8 { hasNextPage := false @@ -1436,7 +1435,7 @@ func handleMsgMhfEnumerateGuildMember(s *Session, p mhfpacket.MHFPacket) { for _, member := range guildMembers { bf.WriteUint32(member.CharID) bf.WriteUint16(member.HRP) - if s.server.erupeConfig.RealClientMode > _config.G7 { + if s.server.erupeConfig.RealClientMode >= _config.G10 { bf.WriteUint16(member.GR) } if s.server.erupeConfig.RealClientMode < _config.ZZ { @@ -1558,7 +1557,7 @@ func handleMsgMhfEnumerateGuildItem(s *Session, p mhfpacket.MHFPacket) { pkt := p.(*mhfpacket.MsgMhfEnumerateGuildItem) var boxContents []byte bf := byteframe.NewByteFrame() - err := s.server.db.QueryRow("SELECT item_box FROM guilds WHERE id = $1", int(pkt.GuildId)).Scan(&boxContents) + err := s.server.db.QueryRow("SELECT item_box FROM guilds WHERE id = $1", pkt.GuildID).Scan(&boxContents) if err != nil { s.logger.Error("Failed to get guild item box contents from db", zap.Error(err)) bf.WriteBytes(make([]byte, 4)) @@ -1592,7 +1591,7 @@ func handleMsgMhfUpdateGuildItem(s *Session, p mhfpacket.MHFPacket) { // Get item cache from DB var boxContents []byte var oldItems []Item - err := s.server.db.QueryRow("SELECT item_box FROM guilds WHERE id = $1", int(pkt.GuildId)).Scan(&boxContents) + err := s.server.db.QueryRow("SELECT item_box FROM guilds WHERE id = $1", pkt.GuildID).Scan(&boxContents) if err != nil { s.logger.Error("Failed to get guild item box contents from db", zap.Error(err)) doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) @@ -1642,7 +1641,7 @@ func handleMsgMhfUpdateGuildItem(s *Session, p mhfpacket.MHFPacket) { } // Upload new item cache - _, err = s.server.db.Exec("UPDATE guilds SET item_box = $1 WHERE id = $2", bf.Data(), int(pkt.GuildId)) + _, err = s.server.db.Exec("UPDATE guilds SET item_box = $1 WHERE id = $2", bf.Data(), pkt.GuildID) if err != nil { s.logger.Error("Failed to update guild item box contents in db", zap.Error(err)) } diff --git a/server/channelserver/handlers_guild_alliance.go b/server/channelserver/handlers_guild_alliance.go index f27d67026..39dbe13f6 100644 --- a/server/channelserver/handlers_guild_alliance.go +++ b/server/channelserver/handlers_guild_alliance.go @@ -162,8 +162,7 @@ func handleMsgMhfOperateJoint(s *Session, p mhfpacket.MHFPacket) { } case mhfpacket.OPERATE_JOINT_KICK: if alliance.ParentGuild.LeaderCharID == s.charID { - _ = pkt.UnkData.ReadUint8() - kickedGuildID := pkt.UnkData.ReadUint32() + kickedGuildID := pkt.Data1.ReadUint32() if kickedGuildID == alliance.SubGuild1ID && alliance.SubGuild2ID > 0 { s.server.db.Exec(`UPDATE guild_alliances SET sub1_id = sub2_id, sub2_id = NULL WHERE id = $1`, alliance.ID) } else if kickedGuildID == alliance.SubGuild1ID && alliance.SubGuild2ID == 0 { diff --git a/server/channelserver/handlers_register.go b/server/channelserver/handlers_register.go index 6a74358aa..3d47c3633 100644 --- a/server/channelserver/handlers_register.go +++ b/server/channelserver/handlers_register.go @@ -10,7 +10,7 @@ func handleMsgMhfRegisterEvent(s *Session, p mhfpacket.MHFPacket) { pkt := p.(*mhfpacket.MsgMhfRegisterEvent) bf := byteframe.NewByteFrame() // Some kind of check if there's already a session - if pkt.Unk3 > 0 && s.server.getRaviSemaphore() == nil { + if pkt.Unk1 && s.server.getRaviSemaphore() == nil { doAckSimpleSucceed(s, pkt.AckHandle, make([]byte, 4)) return }