aboutsummaryrefslogtreecommitdiff
path: root/internal/game/cmd_undig.go
diff options
context:
space:
mode:
authorhistoria <[not public]>2026-09-18 20:11:29 -0400
committerhistoria <[not public]>2026-09-18 20:11:29 -0400
commit0f812ccc307ea0550511ccced40b65dfb0cdaa91 (patch)
tree7f2f343985275a478ba7295a37fcd48871ca4956 /internal/game/cmd_undig.go
parent79764732406d6484f67d3dec045483dcb5d08c28 (diff)
downloadthehouseoficarus-0f812ccc307ea0550511ccced40b65dfb0cdaa91.tar.gz
fix: world and casino integrity fixes
Diffstat (limited to 'internal/game/cmd_undig.go')
-rw-r--r--internal/game/cmd_undig.go27
1 files changed, 16 insertions, 11 deletions
diff --git a/internal/game/cmd_undig.go b/internal/game/cmd_undig.go
index c752c86..88dd661 100644
--- a/internal/game/cmd_undig.go
+++ b/internal/game/cmd_undig.go
@@ -224,18 +224,23 @@ func (g *Game) performUndig(sess *net.Session, p *player.Player, targetID int) {
g.World.RebuildRoomIndex(g.DataDir)
- if p.RoomID == targetID {
- p.RoomID = 0
- }
-
- for _, other := range g.Hub.AllSessions() {
- if other.Player != nil && other.Player.RoomID == targetID {
- other.Player.RoomID = p.RoomID
- if g.Hub != nil {
- g.Hub.EnterRoom(other, p.RoomID)
+ // Everyone in the deleted room relocates to the admin's room. If the
+ // admin is somehow standing in the target room (0 is not a valid room),
+ // fall back to the starting room rather than teleporting players to a
+ // nonexistent room and soft-locking them.
+ destination := p.RoomID
+ if destination == targetID {
+ destination = g.StartingRoom
+ }
+
+ if g.Hub != nil {
+ for _, other := range g.Hub.AllSessions() {
+ if other.Player != nil && other.Player.RoomID == targetID {
+ other.Player.RoomID = destination
+ g.Hub.EnterRoom(other, destination)
+ other.WriteLine("The room around you dissolves. You find yourself elsewhere.")
+ g.doLook(other)
}
- other.WriteLine("The room around you dissolves. You find yourself elsewhere.")
- g.doLook(other)
}
}