Implement packets & handlers for loading existing character

This commit is contained in:
Andrew Gutekanst
2020-02-03 15:25:04 -05:00
parent 773429ce15
commit f17d1db9a7
5 changed files with 76 additions and 14 deletions

View File

@@ -6,7 +6,12 @@ import (
) )
// MsgMhfEnumerateGuildMember represents the MSG_MHF_ENUMERATE_GUILD_MEMBER // MsgMhfEnumerateGuildMember represents the MSG_MHF_ENUMERATE_GUILD_MEMBER
type MsgMhfEnumerateGuildMember struct{} type MsgMhfEnumerateGuildMember struct {
AckHandle uint32
Unk0 uint16 // Hardcoed 00 01 in the binary
Unk1 uint32
Unk2 uint32
}
// Opcode returns the ID associated with this packet type. // Opcode returns the ID associated with this packet type.
func (m *MsgMhfEnumerateGuildMember) Opcode() network.PacketID { func (m *MsgMhfEnumerateGuildMember) Opcode() network.PacketID {
@@ -15,7 +20,11 @@ func (m *MsgMhfEnumerateGuildMember) Opcode() network.PacketID {
// Parse parses the packet from binary // Parse parses the packet from binary
func (m *MsgMhfEnumerateGuildMember) Parse(bf *byteframe.ByteFrame) error { func (m *MsgMhfEnumerateGuildMember) Parse(bf *byteframe.ByteFrame) error {
panic("Not implemented") m.AckHandle = bf.ReadUint32()
m.Unk0 = bf.ReadUint16()
m.Unk1 = bf.ReadUint32()
m.Unk2 = bf.ReadUint32()
return nil
} }
// Build builds a binary packet from the current data. // Build builds a binary packet from the current data.

View File

@@ -6,7 +6,10 @@ import (
) )
// MsgMhfInfoGuild represents the MSG_MHF_INFO_GUILD // MsgMhfInfoGuild represents the MSG_MHF_INFO_GUILD
type MsgMhfInfoGuild struct{} type MsgMhfInfoGuild struct {
AckHandle uint32
Unk0 uint32 // Probably a guild ID, but unverified.
}
// Opcode returns the ID associated with this packet type. // Opcode returns the ID associated with this packet type.
func (m *MsgMhfInfoGuild) Opcode() network.PacketID { func (m *MsgMhfInfoGuild) Opcode() network.PacketID {
@@ -15,7 +18,9 @@ func (m *MsgMhfInfoGuild) Opcode() network.PacketID {
// Parse parses the packet from binary // Parse parses the packet from binary
func (m *MsgMhfInfoGuild) Parse(bf *byteframe.ByteFrame) error { func (m *MsgMhfInfoGuild) Parse(bf *byteframe.ByteFrame) error {
panic("Not implemented") m.AckHandle = bf.ReadUint32()
m.Unk0 = bf.ReadUint32()
return nil
} }
// Build builds a binary packet from the current data. // Build builds a binary packet from the current data.

View File

@@ -6,7 +6,10 @@ import (
) )
// MsgMhfListMember represents the MSG_MHF_LIST_MEMBER // MsgMhfListMember represents the MSG_MHF_LIST_MEMBER
type MsgMhfListMember struct{} type MsgMhfListMember struct{
AckHandle uint32
Unk0 uint16 // Hardcoded 01 00 in the JP client.
}
// Opcode returns the ID associated with this packet type. // Opcode returns the ID associated with this packet type.
func (m *MsgMhfListMember) Opcode() network.PacketID { func (m *MsgMhfListMember) Opcode() network.PacketID {
@@ -15,7 +18,9 @@ func (m *MsgMhfListMember) Opcode() network.PacketID {
// Parse parses the packet from binary // Parse parses the packet from binary
func (m *MsgMhfListMember) Parse(bf *byteframe.ByteFrame) error { func (m *MsgMhfListMember) Parse(bf *byteframe.ByteFrame) error {
panic("Not implemented") m.AckHandle = bf.ReadUint32()
m.Unk0 = bf.ReadUint16()
return nil
} }
// Build builds a binary packet from the current data. // Build builds a binary packet from the current data.

View File

@@ -6,7 +6,12 @@ import (
) )
// MsgMhfStateFestaG represents the MSG_MHF_STATE_FESTA_G // MsgMhfStateFestaG represents the MSG_MHF_STATE_FESTA_G
type MsgMhfStateFestaG struct{} type MsgMhfStateFestaG struct{
AckHandle uint32
Unk0 uint32 // Shared ID of something.
Unk1 uint32
Unk2 uint16 // Hardcoded 0 in the binary.
}
// Opcode returns the ID associated with this packet type. // Opcode returns the ID associated with this packet type.
func (m *MsgMhfStateFestaG) Opcode() network.PacketID { func (m *MsgMhfStateFestaG) Opcode() network.PacketID {
@@ -15,7 +20,12 @@ func (m *MsgMhfStateFestaG) Opcode() network.PacketID {
// Parse parses the packet from binary // Parse parses the packet from binary
func (m *MsgMhfStateFestaG) Parse(bf *byteframe.ByteFrame) error { func (m *MsgMhfStateFestaG) Parse(bf *byteframe.ByteFrame) error {
panic("Not implemented") m.AckHandle = bf.ReadUint32()
m.Unk0 = bf.ReadUint32()
m.Unk1 = bf.ReadUint32()
m.Unk2 = bf.ReadUint16()
return nil
} }
// Build builds a binary packet from the current data. // Build builds a binary packet from the current data.

View File

@@ -655,7 +655,14 @@ func handleMsgMhfLoaddata(s *Session, p mhfpacket.MHFPacket) {
doSizedAckResp(s, pkt.AckHandle, data) doSizedAckResp(s, pkt.AckHandle, data)
} }
func handleMsgMhfListMember(s *Session, p mhfpacket.MHFPacket) {} func handleMsgMhfListMember(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfListMember)
resp := byteframe.NewByteFrame()
resp.WriteUint32(0) // Members count. (Unsure of what kind of members these actually are, guild, party, COG subscribers, etc.)
doSizedAckResp(s, pkt.AckHandle, resp.Data())
}
func handleMsgMhfOprMember(s *Session, p mhfpacket.MHFPacket) {} func handleMsgMhfOprMember(s *Session, p mhfpacket.MHFPacket) {}
@@ -757,7 +764,16 @@ func handleMsgMhfOperateGuild(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfOperateGuildMember(s *Session, p mhfpacket.MHFPacket) {} func handleMsgMhfOperateGuildMember(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfInfoGuild(s *Session, p mhfpacket.MHFPacket) {} func handleMsgMhfInfoGuild(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfInfoGuild)
// REALLY large/complex format... stubbing it out here for simplicity.
resp := byteframe.NewByteFrame()
resp.WriteUint32(0) // Count
resp.WriteUint8(0) // Unk, read if count == 0.
doSizedAckResp(s, pkt.AckHandle, resp.Data())
}
func handleMsgMhfEnumerateGuild(s *Session, p mhfpacket.MHFPacket) {} func handleMsgMhfEnumerateGuild(s *Session, p mhfpacket.MHFPacket) {}
@@ -765,7 +781,10 @@ func handleMsgMhfUpdateGuild(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfArrangeGuildMember(s *Session, p mhfpacket.MHFPacket) {} func handleMsgMhfArrangeGuildMember(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfEnumerateGuildMember(s *Session, p mhfpacket.MHFPacket) {} func handleMsgMhfEnumerateGuildMember(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfEnumerateGuildMember)
stubEnumerateNoResults(s, pkt.AckHandle)
}
func handleMsgMhfEnumerateCampaign(s *Session, p mhfpacket.MHFPacket) {} func handleMsgMhfEnumerateCampaign(s *Session, p mhfpacket.MHFPacket) {}
@@ -868,9 +887,23 @@ func handleMsgMhfChargeFesta(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfAcquireFesta(s *Session, p mhfpacket.MHFPacket) {} func handleMsgMhfAcquireFesta(s *Session, p mhfpacket.MHFPacket) {}
// state festa (U)ser
func handleMsgMhfStateFestaU(s *Session, p mhfpacket.MHFPacket) {} func handleMsgMhfStateFestaU(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgMhfStateFestaG(s *Session, p mhfpacket.MHFPacket) {} // state festa (G)uild
func handleMsgMhfStateFestaG(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfStateFestaG)
resp := byteframe.NewByteFrame()
resp.WriteUint32(0)
resp.WriteUint32(0)
resp.WriteUint32(0xFFFFFFFF)
resp.WriteUint32(0)
resp.WriteBytes([]byte{0x00, 0x00, 0x00}) // Not parsed.
resp.WriteUint8(0)
doSizedAckResp(s, pkt.AckHandle, resp.Data())
}
func handleMsgMhfEnumerateFestaMember(s *Session, p mhfpacket.MHFPacket) {} func handleMsgMhfEnumerateFestaMember(s *Session, p mhfpacket.MHFPacket) {}