diff --git a/server/channelserver/handlers_stage.go b/server/channelserver/handlers_stage.go index bc0b3689e..372b147ca 100644 --- a/server/channelserver/handlers_stage.go +++ b/server/channelserver/handlers_stage.go @@ -151,6 +151,13 @@ func removeSessionFromStage(s *Session) { func handleMsgSysEnterStage(s *Session, p mhfpacket.MHFPacket) { pkt := p.(*mhfpacket.MsgSysEnterStage) + if stage, exists := s.server.stages[pkt.StageID]; exists { + if len(stage.reservedClientSlots) == int(stage.maxPlayers) { + doAckSimpleFail(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x01}) + return + } + } + // Push our current stage ID to the movement stack before entering another one. if s.stage != nil { s.stage.Lock() diff --git a/server/channelserver/sys_stage.go b/server/channelserver/sys_stage.go index dbfcbb7c3..b0f94a09a 100644 --- a/server/channelserver/sys_stage.go +++ b/server/channelserver/sys_stage.go @@ -59,7 +59,7 @@ func NewStage(ID string) *Stage { objects: make(map[uint32]*Object), objectIndex: 0, rawBinaryData: make(map[stageBinaryKey][]byte), - maxPlayers: 4, + maxPlayers: 127, } return s }