From a56309014b629d4c1b721ce54f8abf0b017b87aa Mon Sep 17 00:00:00 2001 From: wish Date: Fri, 19 Aug 2022 16:39:07 +1000 Subject: [PATCH] persistent BackStage --- server/channelserver/handlers_stage.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/server/channelserver/handlers_stage.go b/server/channelserver/handlers_stage.go index 4bf19d114..906480be7 100644 --- a/server/channelserver/handlers_stage.go +++ b/server/channelserver/handlers_stage.go @@ -135,7 +135,6 @@ func removeSessionFromStage(s *Session) { // Remove client from old stage. s.stage.Lock() delete(s.stage.clients, s) - delete(s.stage.reservedClientSlots, s.charID) // Delete old stage objects owned by the client. s.logger.Info("Sending notification to old stage clients") @@ -157,6 +156,7 @@ func handleMsgSysEnterStage(s *Session, p mhfpacket.MHFPacket) { if s.stageID == "" { s.stageMoveStack.Set(pkt.StageID) } else { + s.stage.reservedClientSlots[s.charID] = false s.stageMoveStack.Push(s.stageID) s.stageMoveStack.Lock() } @@ -175,11 +175,18 @@ func handleMsgSysBackStage(s *Session, p mhfpacket.MHFPacket) { // Transfer back to the saved stage ID before the previous move or enter. s.stageMoveStack.Unlock() backStage, err := s.stageMoveStack.Pop() - if err != nil { panic(err) } + if _, exists := s.stage.reservedClientSlots[s.charID]; exists { + delete(s.stage.reservedClientSlots, s.charID) + } + + if _, exists := s.server.stages[backStage].reservedClientSlots[s.charID]; exists { + delete(s.server.stages[backStage].reservedClientSlots, s.charID) + } + doStageTransfer(s, pkt.AckHandle, backStage) }