update various packets

This commit is contained in:
wish
2022-07-29 01:39:16 +10:00
parent 4cdea9de03
commit fd061e695f
15 changed files with 144 additions and 149 deletions

View File

@@ -1,16 +1,18 @@
package mhfpacket package mhfpacket
import ( import (
"errors"
"erupe-ce/common/byteframe"
"erupe-ce/network" "erupe-ce/network"
"erupe-ce/network/clientctx" "erupe-ce/network/clientctx"
"erupe-ce/common/byteframe"
) )
// MsgMhfAddAchievement represents the MSG_MHF_ADD_ACHIEVEMENT // MsgMhfAddAchievement represents the MSG_MHF_ADD_ACHIEVEMENT
type MsgMhfAddAchievement struct { type MsgMhfAddAchievement struct {
AchievementID uint8 AchievementID uint8
Unk1 uint16 Unk1 uint16
Unk2 uint16 Unk2 uint16
} }
// Opcode returns the ID associated with this packet type. // Opcode returns the ID associated with this packet type.
@@ -23,14 +25,10 @@ func (m *MsgMhfAddAchievement) Parse(bf *byteframe.ByteFrame, ctx *clientctx.Cli
m.AchievementID = bf.ReadUint8() m.AchievementID = bf.ReadUint8()
m.Unk1 = bf.ReadUint16() m.Unk1 = bf.ReadUint16()
m.Unk2 = bf.ReadUint16() m.Unk2 = bf.ReadUint16()
// doesn't expect a response
return nil return nil
} }
// Build builds a binary packet from the current data. // Build builds a binary packet from the current data.
func (m *MsgMhfAddAchievement) Build(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { func (m *MsgMhfAddAchievement) Build(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
bf.WriteUint8(m.AchievementID) return errors.New("NOT IMPLEMENTED")
bf.WriteUint16(m.Unk1)
bf.WriteUint16(m.Unk2)
return nil
} }

View File

@@ -1,18 +1,18 @@
package mhfpacket package mhfpacket
import ( import (
"errors" "errors"
"erupe-ce/network/clientctx"
"erupe-ce/network"
"erupe-ce/common/byteframe" "erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
) )
// MsgMhfEnumerateAiroulist represents the MSG_MHF_ENUMERATE_AIROULIST // MsgMhfEnumerateAiroulist represents the MSG_MHF_ENUMERATE_AIROULIST
type MsgMhfEnumerateAiroulist struct { type MsgMhfEnumerateAiroulist struct {
AckHandle uint32 AckHandle uint32
Unk0 uint16 Unk0 uint16
Unk1 uint16 Unk1 uint16
} }
// Opcode returns the ID associated with this packet type. // Opcode returns the ID associated with this packet type.
@@ -23,8 +23,8 @@ func (m *MsgMhfEnumerateAiroulist) Opcode() network.PacketID {
// Parse parses the packet from binary // Parse parses the packet from binary
func (m *MsgMhfEnumerateAiroulist) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { func (m *MsgMhfEnumerateAiroulist) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
m.AckHandle = bf.ReadUint32() m.AckHandle = bf.ReadUint32()
m.Unk0 = bf.ReadUint16() m.Unk0 = bf.ReadUint16()
m.Unk1 = bf.ReadUint16() m.Unk1 = bf.ReadUint16()
return nil return nil
} }

View File

@@ -1,9 +1,11 @@
package mhfpacket package mhfpacket
import ( import (
"errors"
"erupe-ce/common/byteframe"
"erupe-ce/network" "erupe-ce/network"
"erupe-ce/network/clientctx" "erupe-ce/network/clientctx"
"erupe-ce/common/byteframe"
) )
// MsgMhfEnumerateGuacot represents the MSG_MHF_ENUMERATE_GUACOT // MsgMhfEnumerateGuacot represents the MSG_MHF_ENUMERATE_GUACOT
@@ -30,9 +32,5 @@ func (m *MsgMhfEnumerateGuacot) Parse(bf *byteframe.ByteFrame, ctx *clientctx.Cl
// Build builds a binary packet from the current data. // Build builds a binary packet from the current data.
func (m *MsgMhfEnumerateGuacot) Build(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { func (m *MsgMhfEnumerateGuacot) Build(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
bf.WriteUint32(m.AckHandle) return errors.New("NOT IMPLEMENTED")
bf.WriteUint16(m.Unk0)
bf.WriteUint16(m.Unk1)
bf.WriteUint16(m.Unk2)
return nil
} }

View File

@@ -1,29 +1,29 @@
package mhfpacket package mhfpacket
import ( import (
"errors" "errors"
"erupe-ce/network/clientctx"
"erupe-ce/network"
"erupe-ce/common/byteframe" "erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
) )
type EnumerateGuildType uint8 type EnumerateGuildType uint8
const ( const (
ENUMERATE_GUILD_TYPE_GUILD_NAME = 0x01 ENUMERATE_GUILD_TYPE_GUILD_NAME = 0x01
ENUMERATE_GUILD_TYPE_LEADER_NAME = 0x02 ENUMERATE_GUILD_TYPE_LEADER_NAME = 0x02
ENUMERATE_GUILD_TYPE_LEADER_ID = 0x03 ENUMERATE_GUILD_TYPE_LEADER_ID = 0x03
ENUMERATE_GUILD_TYPE_ORDER_MEMBERS = 0x04 ENUMERATE_GUILD_TYPE_ORDER_MEMBERS = 0x04
ENUMERATE_GUILD_TYPE_ORDER_REGISTRATION = 0x05 ENUMERATE_GUILD_TYPE_ORDER_REGISTRATION = 0x05
ENUMERATE_GUILD_TYPE_ORDER_RANK = 0x06 ENUMERATE_GUILD_TYPE_ORDER_RANK = 0x06
ENUMERATE_GUILD_TYPE_MOTTO = 0x07 ENUMERATE_GUILD_TYPE_MOTTO = 0x07
ENUMERATE_GUILD_TYPE_RECRUITING = 0x08 ENUMERATE_GUILD_TYPE_RECRUITING = 0x08
ENUMERATE_ALLIANCE_TYPE_ALLIANCE_NAME = 0x09 ENUMERATE_ALLIANCE_TYPE_ALLIANCE_NAME = 0x09
ENUMERATE_ALLIANCE_TYPE_LEADER_NAME = 0x0A ENUMERATE_ALLIANCE_TYPE_LEADER_NAME = 0x0A
ENUMERATE_ALLIANCE_TYPE_LEADER_ID = 0x0B ENUMERATE_ALLIANCE_TYPE_LEADER_ID = 0x0B
ENUMERATE_ALLIANCE_TYPE_ORDER_MEMBERS = 0x0C ENUMERATE_ALLIANCE_TYPE_ORDER_MEMBERS = 0x0C
ENUMERATE_ALLIANCE_TYPE_ORDER_REGISTRATION = 0x0D ENUMERATE_ALLIANCE_TYPE_ORDER_REGISTRATION = 0x0D
) )
// MsgMhfEnumerateGuild represents the MSG_MHF_ENUMERATE_GUILD // MsgMhfEnumerateGuild represents the MSG_MHF_ENUMERATE_GUILD
@@ -43,7 +43,7 @@ func (m *MsgMhfEnumerateGuild) Parse(bf *byteframe.ByteFrame, ctx *clientctx.Cli
m.AckHandle = bf.ReadUint32() m.AckHandle = bf.ReadUint32()
m.Type = EnumerateGuildType(bf.ReadUint8()) m.Type = EnumerateGuildType(bf.ReadUint8())
m.RawDataPayload = bf.DataFromCurrent() m.RawDataPayload = bf.DataFromCurrent()
bf.Seek(int64(len(bf.Data()) - 2), 0) bf.Seek(int64(len(bf.Data())-2), 0)
return nil return nil
} }

View File

@@ -1,17 +1,17 @@
package mhfpacket package mhfpacket
import ( import (
"errors" "errors"
"erupe-ce/network/clientctx"
"erupe-ce/network"
"erupe-ce/common/byteframe" "erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
) )
// MsgMhfMercenaryHuntdata represents the MSG_MHF_MERCENARY_HUNTDATA // MsgMhfMercenaryHuntdata represents the MSG_MHF_MERCENARY_HUNTDATA
type MsgMhfMercenaryHuntdata struct{ type MsgMhfMercenaryHuntdata struct {
AckHandle uint32 AckHandle uint32
Unk0 uint8 Unk0 uint8
} }
// Opcode returns the ID associated with this packet type. // Opcode returns the ID associated with this packet type.

View File

@@ -1,11 +1,11 @@
package mhfpacket package mhfpacket
import ( import (
"errors" "errors"
"erupe-ce/network/clientctx"
"erupe-ce/network"
"erupe-ce/common/byteframe" "erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
) )
// MsgMhfReadMail represents the MSG_MHF_READ_MAIL // MsgMhfReadMail represents the MSG_MHF_READ_MAIL
@@ -19,7 +19,7 @@ type MsgMhfReadMail struct {
// This is the index within the current mail list // This is the index within the current mail list
Index uint8 Index uint8
Unk0 uint16 Unk0 uint16
} }
// Opcode returns the ID associated with this packet type. // Opcode returns the ID associated with this packet type.
@@ -32,7 +32,7 @@ func (m *MsgMhfReadMail) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientCon
m.AckHandle = bf.ReadUint32() m.AckHandle = bf.ReadUint32()
m.AccIndex = bf.ReadUint8() m.AccIndex = bf.ReadUint8()
m.Index = bf.ReadUint8() m.Index = bf.ReadUint8()
m.Unk0 = bf.ReadUint16() m.Unk0 = bf.ReadUint16()
return nil return nil
} }

View File

@@ -1,18 +1,18 @@
package mhfpacket package mhfpacket
import ( import (
"errors" "errors"
"erupe-ce/network/clientctx"
"erupe-ce/network"
"erupe-ce/common/byteframe" "erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
) )
// MsgMhfReadMercenaryM represents the MSG_MHF_READ_MERCENARY_M // MsgMhfReadMercenaryM represents the MSG_MHF_READ_MERCENARY_M
type MsgMhfReadMercenaryM struct{ type MsgMhfReadMercenaryM struct {
AckHandle uint32 AckHandle uint32
CharID uint32 CharID uint32
Unk0 uint32 Unk0 uint32
} }
// Opcode returns the ID associated with this packet type. // Opcode returns the ID associated with this packet type.

View File

@@ -1,11 +1,11 @@
package mhfpacket package mhfpacket
import ( import (
"errors" "errors"
"erupe-ce/network/clientctx"
"erupe-ce/network"
"erupe-ce/common/byteframe" "erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
) )
type GuildIconMsgPart struct { type GuildIconMsgPart struct {
@@ -16,7 +16,7 @@ type GuildIconMsgPart struct {
Rotation uint8 Rotation uint8
Red uint8 Red uint8
Green uint8 Green uint8
Blue uint8 Blue uint8
PosX uint16 PosX uint16
PosY uint16 PosY uint16
} }
@@ -52,8 +52,8 @@ func (m *MsgMhfUpdateGuildIcon) Parse(bf *byteframe.ByteFrame, ctx *clientctx.Cl
Size: bf.ReadUint8(), Size: bf.ReadUint8(),
Rotation: bf.ReadUint8(), Rotation: bf.ReadUint8(),
Red: bf.ReadUint8(), Red: bf.ReadUint8(),
Green: bf.ReadUint8(), Green: bf.ReadUint8(),
Blue: bf.ReadUint8(), Blue: bf.ReadUint8(),
PosX: bf.ReadUint16(), PosX: bf.ReadUint16(),
PosY: bf.ReadUint16(), PosY: bf.ReadUint16(),
} }

View File

@@ -1,27 +1,27 @@
package mhfpacket package mhfpacket
import ( import (
"errors" "errors"
"erupe-ce/network/clientctx"
"erupe-ce/network"
"erupe-ce/common/byteframe" "erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
) )
type Item struct{ type Item struct {
Unk0 uint32 Unk0 uint32
ItemId uint16 ItemId uint16
Amount uint16 Amount uint16
Unk1 uint32 Unk1 uint32
} }
// MsgMhfUpdateGuildItem represents the MSG_MHF_UPDATE_GUILD_ITEM // MsgMhfUpdateGuildItem represents the MSG_MHF_UPDATE_GUILD_ITEM
type MsgMhfUpdateGuildItem struct{ type MsgMhfUpdateGuildItem struct {
AckHandle uint32 AckHandle uint32
GuildId uint32 GuildId uint32
Amount uint16 Amount uint16
Unk1 uint16 // 0x00 0x00 Unk1 uint16 // 0x00 0x00
Items []Item // Array of updated item IDs Items []Item // Array of updated item IDs
} }
// Opcode returns the ID associated with this packet type. // Opcode returns the ID associated with this packet type.
@@ -31,18 +31,18 @@ func (m *MsgMhfUpdateGuildItem) Opcode() network.PacketID {
// Parse parses the packet from binary // Parse parses the packet from binary
func (m *MsgMhfUpdateGuildItem) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { func (m *MsgMhfUpdateGuildItem) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
m.AckHandle = bf.ReadUint32() m.AckHandle = bf.ReadUint32()
m.GuildId = bf.ReadUint32() m.GuildId = bf.ReadUint32()
m.Amount = bf.ReadUint16() m.Amount = bf.ReadUint16()
m.Unk1 = bf.ReadUint16() m.Unk1 = bf.ReadUint16()
m.Items = make([]Item, int(m.Amount)) m.Items = make([]Item, int(m.Amount))
for i := 0; i < int(m.Amount); i++ { for i := 0; i < int(m.Amount); i++ {
m.Items[i].Unk0 = bf.ReadUint32() m.Items[i].Unk0 = bf.ReadUint32()
m.Items[i].ItemId = bf.ReadUint16() m.Items[i].ItemId = bf.ReadUint16()
m.Items[i].Amount = bf.ReadUint16() m.Items[i].Amount = bf.ReadUint16()
m.Items[i].Unk1 = bf.ReadUint32() m.Items[i].Unk1 = bf.ReadUint32()
} }
return nil return nil
} }

View File

@@ -1,18 +1,18 @@
package mhfpacket package mhfpacket
import ( import (
"errors" "errors"
"erupe-ce/network/clientctx"
"erupe-ce/network"
"erupe-ce/common/byteframe" "erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
) )
// MsgMhfUpdateGuildMessageBoard represents the MSG_MHF_UPDATE_GUILD_MESSAGE_BOARD // MsgMhfUpdateGuildMessageBoard represents the MSG_MHF_UPDATE_GUILD_MESSAGE_BOARD
type MsgMhfUpdateGuildMessageBoard struct { type MsgMhfUpdateGuildMessageBoard struct {
AckHandle uint32 AckHandle uint32
MessageOp uint32 MessageOp uint32
Request []byte Request []byte
} }
// Opcode returns the ID associated with this packet type. // Opcode returns the ID associated with this packet type.
@@ -22,12 +22,12 @@ func (m *MsgMhfUpdateGuildMessageBoard) Opcode() network.PacketID {
// Parse parses the packet from binary // Parse parses the packet from binary
func (m *MsgMhfUpdateGuildMessageBoard) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { func (m *MsgMhfUpdateGuildMessageBoard) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
m.AckHandle = bf.ReadUint32() m.AckHandle = bf.ReadUint32()
m.MessageOp = bf.ReadUint32() m.MessageOp = bf.ReadUint32()
if m.MessageOp != 5 { if m.MessageOp != 5 {
m.Request = bf.DataFromCurrent() m.Request = bf.DataFromCurrent()
bf.Seek(int64(len(bf.Data()) - 2), 0) bf.Seek(int64(len(bf.Data())-2), 0)
} }
return nil return nil
} }

View File

@@ -1,17 +1,17 @@
package mhfpacket package mhfpacket
import ( import (
"errors" "errors"
"erupe-ce/network/clientctx"
"erupe-ce/network"
"erupe-ce/common/byteframe" "erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
) )
// MsgMhfUpdateInterior represents the MSG_MHF_UPDATE_INTERIOR // MsgMhfUpdateInterior represents the MSG_MHF_UPDATE_INTERIOR
type MsgMhfUpdateInterior struct { type MsgMhfUpdateInterior struct {
AckHandle uint32 AckHandle uint32
InteriorData []byte InteriorData []byte
} }
// Opcode returns the ID associated with this packet type. // Opcode returns the ID associated with this packet type.
@@ -21,9 +21,9 @@ func (m *MsgMhfUpdateInterior) Opcode() network.PacketID {
// Parse parses the packet from binary // Parse parses the packet from binary
func (m *MsgMhfUpdateInterior) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { func (m *MsgMhfUpdateInterior) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
m.AckHandle = bf.ReadUint32() m.AckHandle = bf.ReadUint32()
m.InteriorData = bf.ReadBytes(20) m.InteriorData = bf.ReadBytes(20)
return nil return nil
} }
// Build builds a binary packet from the current data. // Build builds a binary packet from the current data.

View File

@@ -1,19 +1,19 @@
package mhfpacket package mhfpacket
import ( import (
"errors" "errors"
"erupe-ce/network/clientctx"
"erupe-ce/network"
"erupe-ce/common/byteframe" "erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
) )
// MsgMhfVoteFesta represents the MSG_MHF_VOTE_FESTA // MsgMhfVoteFesta represents the MSG_MHF_VOTE_FESTA
type MsgMhfVoteFesta struct { type MsgMhfVoteFesta struct {
AckHandle uint32 AckHandle uint32
Unk uint32 Unk uint32
GuildID uint32 GuildID uint32
TrialID uint32 TrialID uint32
} }
// Opcode returns the ID associated with this packet type. // Opcode returns the ID associated with this packet type.
@@ -23,11 +23,11 @@ func (m *MsgMhfVoteFesta) Opcode() network.PacketID {
// Parse parses the packet from binary // Parse parses the packet from binary
func (m *MsgMhfVoteFesta) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { func (m *MsgMhfVoteFesta) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
m.AckHandle = bf.ReadUint32() m.AckHandle = bf.ReadUint32()
m.Unk = bf.ReadUint32() m.Unk = bf.ReadUint32()
m.GuildID = bf.ReadUint32() m.GuildID = bf.ReadUint32()
m.TrialID = bf.ReadUint32() m.TrialID = bf.ReadUint32()
return nil return nil
} }
// Build builds a binary packet from the current data. // Build builds a binary packet from the current data.

View File

@@ -1,18 +1,17 @@
package mhfpacket package mhfpacket
import ( import (
"errors" "errors"
"erupe-ce/network/clientctx"
"erupe-ce/common/bfutil"
"erupe-ce/network"
"erupe-ce/common/byteframe" "erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
) )
// MsgSysCheckSemaphore represents the MSG_SYS_CHECK_SEMAPHORE // MsgSysCheckSemaphore represents the MSG_SYS_CHECK_SEMAPHORE
type MsgSysCheckSemaphore struct{ type MsgSysCheckSemaphore struct {
AckHandle uint32 AckHandle uint32
StageID string SemaphoreID string
} }
// Opcode returns the ID associated with this packet type. // Opcode returns the ID associated with this packet type.
@@ -31,4 +30,4 @@ func (m *MsgSysCheckSemaphore) Parse(bf *byteframe.ByteFrame, ctx *clientctx.Cli
// Build builds a binary packet from the current data. // Build builds a binary packet from the current data.
func (m *MsgSysCheckSemaphore) Build(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error { func (m *MsgSysCheckSemaphore) Build(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
return errors.New("NOT IMPLEMENTED") return errors.New("NOT IMPLEMENTED")
} }

View File

@@ -134,7 +134,7 @@ func handleMsgSysCheckSemaphore(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgSysCheckSemaphore) pkt := p.(*mhfpacket.MsgSysCheckSemaphore)
resp := []byte{0x00, 0x00, 0x00, 0x00} resp := []byte{0x00, 0x00, 0x00, 0x00}
s.server.semaphoreLock.Lock() s.server.semaphoreLock.Lock()
if _, exists := s.server.semaphore[pkt.StageID]; exists { if _, exists := s.server.semaphore[pkt.SemaphoreID]; exists {
resp = []byte{0x00, 0x00, 0x00, 0x01} resp = []byte{0x00, 0x00, 0x00, 0x01}
} }
s.server.semaphoreLock.Unlock() s.server.semaphoreLock.Unlock()

View File

@@ -5,8 +5,8 @@ import (
"net" "net"
"sync" "sync"
ps "erupe-ce/common/pascalstring"
"erupe-ce/common/byteframe" "erupe-ce/common/byteframe"
ps "erupe-ce/common/pascalstring"
"erupe-ce/config" "erupe-ce/config"
"erupe-ce/network/binpacket" "erupe-ce/network/binpacket"
"erupe-ce/network/mhfpacket" "erupe-ce/network/mhfpacket"
@@ -19,17 +19,17 @@ type StageIdType = string
const ( const (
// GlobalStage is the stage that is used for all users. // GlobalStage is the stage that is used for all users.
MezeportaStageId StageIdType = "sl1Ns200p0a0u0" MezeportaStageId StageIdType = "sl1Ns200p0a0u0"
GuildHallLv1StageId StageIdType = "sl1Ns202p0a0u0" GuildHallLv1StageId StageIdType = "sl1Ns202p0a0u0"
GuildHallLv2StageId StageIdType = "sl1Ns203p0a0u0" GuildHallLv2StageId StageIdType = "sl1Ns203p0a0u0"
GuildHallLv3StageId StageIdType = "sl1Ns204p0a0u0" GuildHallLv3StageId StageIdType = "sl1Ns204p0a0u0"
PugiFarmStageId StageIdType = "sl1Ns205p0a0u0" PugiFarmStageId StageIdType = "sl1Ns205p0a0u0"
RastaBarStageId StageIdType = "sl1Ns211p0a0u0" RastaBarStageId StageIdType = "sl1Ns211p0a0u0"
PalloneCaravanStageId StageIdType = "sl1Ns260p0a0u0" PalloneCaravanStageId StageIdType = "sl1Ns260p0a0u0"
GookFarmStageId StageIdType = "sl1Ns265p0a0u0" GookFarmStageId StageIdType = "sl1Ns265p0a0u0"
DivaFountainStageId StageIdType = "sl2Ns379p0a0u0" DivaFountainStageId StageIdType = "sl2Ns379p0a0u0"
DivaHallStageId StageIdType = "sl1Ns445p0a0u0" DivaHallStageId StageIdType = "sl1Ns445p0a0u0"
MezFesStageId StageIdType = "sl1Ns462p0a0u0" MezFesStageId StageIdType = "sl1Ns462p0a0u0"
) )
// Config struct allows configuring the server. // Config struct allows configuring the server.
@@ -335,9 +335,9 @@ func (s *Server) BroadcastChatMessage(message string) {
func (s *Server) BroadcastRaviente(ip uint32, port uint16, stage []byte, _type uint8) { func (s *Server) BroadcastRaviente(ip uint32, port uint16, stage []byte, _type uint8) {
bf := byteframe.NewByteFrame() bf := byteframe.NewByteFrame()
bf.SetLE() bf.SetLE()
bf.WriteUint16(0) // Unk bf.WriteUint16(0) // Unk
bf.WriteUint16(0x43) // Data len bf.WriteUint16(0x43) // Data len
bf.WriteUint16(3) // Unk len bf.WriteUint16(3) // Unk len
var text string var text string
switch _type { switch _type {
case 2: case 2:
@@ -351,15 +351,15 @@ func (s *Server) BroadcastRaviente(ip uint32, port uint16, stage []byte, _type u
} }
ps.Uint16(bf, text, false) ps.Uint16(bf, text, false)
bf.WriteBytes([]byte{0x5F, 0x53, 0x00}) bf.WriteBytes([]byte{0x5F, 0x53, 0x00})
bf.WriteUint32(ip) // IP address bf.WriteUint32(ip) // IP address
bf.WriteUint16(port) // Port bf.WriteUint16(port) // Port
bf.WriteUint16(0) // Unk bf.WriteUint16(0) // Unk
bf.WriteNullTerminatedBytes(stage) bf.WriteNullTerminatedBytes(stage)
bf.WriteBytes(make([]byte, 17)) bf.WriteBytes(make([]byte, 17))
s.WorldcastMHF(&mhfpacket.MsgSysCastedBinary{ s.WorldcastMHF(&mhfpacket.MsgSysCastedBinary{
CharID: 0x00000000, CharID: 0x00000000,
BroadcastType: BroadcastTypeSemaphore, BroadcastType: BroadcastTypeSemaphore,
MessageType: BinaryMessageTypeChat, MessageType: BinaryMessageTypeChat,
RawDataPayload: bf.Data(), RawDataPayload: bf.Data(),
}, nil) }, nil)
} }