diff options
Diffstat (limited to 'internal/game/sys_escape_test.go')
| -rw-r--r-- | internal/game/sys_escape_test.go | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/internal/game/sys_escape_test.go b/internal/game/sys_escape_test.go index 1fce4f4..61b50cd 100644 --- a/internal/game/sys_escape_test.go +++ b/internal/game/sys_escape_test.go @@ -89,7 +89,7 @@ func TestBeginEscapeMoveWithEnergy(t *testing.T) { p.EscapeTarget = 10 p.EscapeIsWalk = false - g.beginEscapeMove(p) + g.beginEscapeMove(escapeTestSession(p), p) if p.EscapeDir != "" { t.Error("beginEscapeMove should clear EscapeDir") @@ -114,7 +114,7 @@ func TestBeginEscapeMoveWithoutEnergy(t *testing.T) { p.EscapeTarget = 5 p.EscapeIsWalk = false - g.beginEscapeMove(p) + g.beginEscapeMove(escapeTestSession(p), p) if p.MoveTicks != 2 { t.Errorf("expected MoveTicks=2 without energy, got %d", p.MoveTicks) @@ -487,3 +487,28 @@ func TestEndCombatDoesNotFireEscapeIfMobAlive(t *testing.T) { t.Error("MoveDirection should NOT be set when escape not fired") } } + +// TestBeginEscapeMoveGodModeCompletesInstantMove pins the regression where a +// player who stashed a flee and then gained GodMode (or a Cape of Agility) +// before the escape gate fired was left with MoveTicks==0 and never moved. +func TestBeginEscapeMoveGodModeCompletesInstantMove(t *testing.T) { + h := newHarness(t) + h.seedAccount("godflee") + h.seedCharacter("godflee", "godflee") + sess, _ := h.connect("godflee") + p := sess.Player + p.RoomID = 1 + p.GodMode = true + p.EscapeDir = "north" + p.EscapeTarget = 2 + + h.g.RunOnOwner(func() { h.g.beginEscapeMove(sess, p) }) + + if p.RoomID != 2 { + t.Fatalf("0-tick (god) escape move should complete immediately: room=%d want 2", p.RoomID) + } + if p.MoveTicks != 0 || p.MoveDirection != "" || p.EscapeDir != "" { + t.Fatalf("move state should be cleared after instant escape: MoveTicks=%d MoveDirection=%q EscapeDir=%q", + p.MoveTicks, p.MoveDirection, p.EscapeDir) + } +} |
