stage improvements

This commit is contained in:
wish
2022-08-05 16:38:42 +10:00
parent 56841a5ab3
commit 09812fa81b
2 changed files with 23 additions and 21 deletions

View File

@@ -2,17 +2,17 @@ package mhfpacket
import (
"errors"
"erupe-ce/common/stringsupport"
"erupe-ce/network/clientctx"
"erupe-ce/network"
"erupe-ce/common/byteframe"
"erupe-ce/network"
"erupe-ce/network/clientctx"
)
// MsgSysEnumerateStage represents the MSG_SYS_ENUMERATE_STAGE
type MsgSysEnumerateStage struct {
AckHandle uint32
Unk0 uint8 // Hardcoded 1 in the binary
StageIDLength uint8
StageID string // NULL terminated string.
}
@@ -25,8 +25,8 @@ func (m *MsgSysEnumerateStage) Opcode() network.PacketID {
func (m *MsgSysEnumerateStage) Parse(bf *byteframe.ByteFrame, ctx *clientctx.ClientContext) error {
m.AckHandle = bf.ReadUint32()
m.Unk0 = bf.ReadUint8()
m.StageIDLength = bf.ReadUint8()
m.StageID = string(bf.ReadBytes(uint(m.StageIDLength)))
bf.ReadUint8()
m.StageID = stringsupport.SJISToUTF8(bf.ReadNullTerminatedBytes())
return nil
}

View File

@@ -2,6 +2,7 @@ package channelserver
import (
"fmt"
"strings"
"time"
"erupe-ce/common/byteframe"
@@ -198,10 +199,12 @@ func handleMsgSysLeaveStage(s *Session, p mhfpacket.MHFPacket) {}
func handleMsgSysLockStage(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgSysLockStage)
// TODO(Andoryuuta): What does this packet _actually_ do?
// I think this is supposed to mark a stage as no longer able to accept client reservations
doAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00})
}
func handleMsgSysUnlockStage(s *Session, p mhfpacket.MHFPacket) {
if s.reservationStage != nil {
s.reservationStage.RLock()
defer s.reservationStage.RUnlock()
@@ -210,12 +213,12 @@ func handleMsgSysUnlockStage(s *Session, p mhfpacket.MHFPacket) {
session.QueueSendMHF(&mhfpacket.MsgSysStageDestruct{})
}
s.server.Lock()
defer s.server.Unlock()
delete(s.server.stages, s.reservationStage.id)
}
destructEmptyStages(s)
}
func handleMsgSysReserveStage(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgSysReserveStage)
if stage, exists := s.server.stages[pkt.StageID]; exists {
@@ -366,8 +369,7 @@ func handleMsgSysEnumerateStage(s *Session, p mhfpacket.MHFPacket) {
continue
}
// Check for valid stage type
if sid[3:5] != "Qs" && sid[3:5] != "Ms" && sid[3:5] != "Ls" {
if !strings.Contains(stage.id, pkt.StageID) {
continue
}