mirror of
https://github.com/Mezeporta/Erupe.git
synced 2025-12-14 16:04:38 +01:00
85 lines
2.2 KiB
Go
85 lines
2.2 KiB
Go
package channelserver
|
|
|
|
import (
|
|
"erupe-ce/internal/constant"
|
|
"erupe-ce/network/binpacket"
|
|
"erupe-ce/network/mhfpacket"
|
|
"erupe-ce/utils/byteframe"
|
|
ps "erupe-ce/utils/pascalstring"
|
|
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
// BroadcastMHF queues a MHFPacket to be sent to all sessions.
|
|
func (server *ChannelServer) BroadcastMHF(pkt mhfpacket.MHFPacket, ignoredSession *Session) {
|
|
// Broadcast the data.
|
|
server.Lock()
|
|
defer server.Unlock()
|
|
for _, session := range server.sessions {
|
|
if session == ignoredSession {
|
|
continue
|
|
}
|
|
session.QueueSendMHF(pkt)
|
|
}
|
|
}
|
|
|
|
func (server *ChannelServer) WorldcastMHF(pkt mhfpacket.MHFPacket, ignoredSession *Session, ignoredChannel *ChannelServer) {
|
|
for _, c := range server.Channels {
|
|
if c == ignoredChannel {
|
|
continue
|
|
}
|
|
c.BroadcastMHF(pkt, ignoredSession)
|
|
}
|
|
}
|
|
|
|
// BroadcastChatMessage broadcasts a simple chat message to all the sessions.
|
|
func (server *ChannelServer) BroadcastChatMessage(message string) {
|
|
bf := byteframe.NewByteFrame()
|
|
bf.SetLE()
|
|
msgBinChat := &binpacket.MsgBinChat{
|
|
Unk0: 0,
|
|
Type: 5,
|
|
Flags: 0x80,
|
|
Message: message,
|
|
SenderName: server.name,
|
|
}
|
|
msgBinChat.Build(bf)
|
|
|
|
server.BroadcastMHF(&mhfpacket.MsgSysCastedBinary{
|
|
MessageType: constant.BinaryMessageTypeChat,
|
|
RawDataPayload: bf.Data(),
|
|
}, nil)
|
|
}
|
|
|
|
func (server *ChannelServer) BroadcastRaviente(ip uint32, port uint16, stage []byte, _type uint8) {
|
|
bf := byteframe.NewByteFrame()
|
|
bf.SetLE()
|
|
bf.WriteUint16(0) // Unk
|
|
bf.WriteUint16(0x43) // Data len
|
|
bf.WriteUint16(3) // Unk len
|
|
var text string
|
|
switch _type {
|
|
case 2:
|
|
text = server.i18n.raviente.berserk
|
|
case 3:
|
|
text = server.i18n.raviente.extreme
|
|
case 4:
|
|
text = server.i18n.raviente.extremeLimited
|
|
case 5:
|
|
text = server.i18n.raviente.berserkSmall
|
|
default:
|
|
server.logger.Error("Unk raviente type", zap.Uint8("_type", _type))
|
|
}
|
|
ps.Uint16(bf, text, true)
|
|
bf.WriteBytes([]byte{0x5F, 0x53, 0x00})
|
|
bf.WriteUint32(ip) // IP address
|
|
bf.WriteUint16(port) // Port
|
|
bf.WriteUint16(0) // Unk
|
|
bf.WriteBytes(stage)
|
|
server.WorldcastMHF(&mhfpacket.MsgSysCastedBinary{
|
|
BroadcastType: constant.BroadcastTypeServer,
|
|
MessageType: constant.BinaryMessageTypeChat,
|
|
RawDataPayload: bf.Data(),
|
|
}, nil, server)
|
|
}
|