mirror of
https://github.com/Mezeporta/Erupe.git
synced 2025-12-14 07:55:33 +01:00
persistent BackStage
This commit is contained in:
@@ -135,7 +135,6 @@ func removeSessionFromStage(s *Session) {
|
|||||||
// Remove client from old stage.
|
// Remove client from old stage.
|
||||||
s.stage.Lock()
|
s.stage.Lock()
|
||||||
delete(s.stage.clients, s)
|
delete(s.stage.clients, s)
|
||||||
delete(s.stage.reservedClientSlots, s.charID)
|
|
||||||
|
|
||||||
// Delete old stage objects owned by the client.
|
// Delete old stage objects owned by the client.
|
||||||
s.logger.Info("Sending notification to old stage clients")
|
s.logger.Info("Sending notification to old stage clients")
|
||||||
@@ -157,6 +156,7 @@ func handleMsgSysEnterStage(s *Session, p mhfpacket.MHFPacket) {
|
|||||||
if s.stageID == "" {
|
if s.stageID == "" {
|
||||||
s.stageMoveStack.Set(pkt.StageID)
|
s.stageMoveStack.Set(pkt.StageID)
|
||||||
} else {
|
} else {
|
||||||
|
s.stage.reservedClientSlots[s.charID] = false
|
||||||
s.stageMoveStack.Push(s.stageID)
|
s.stageMoveStack.Push(s.stageID)
|
||||||
s.stageMoveStack.Lock()
|
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.
|
// Transfer back to the saved stage ID before the previous move or enter.
|
||||||
s.stageMoveStack.Unlock()
|
s.stageMoveStack.Unlock()
|
||||||
backStage, err := s.stageMoveStack.Pop()
|
backStage, err := s.stageMoveStack.Pop()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
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)
|
doStageTransfer(s, pkt.AckHandle, backStage)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user