diff options
| author | historia <[not public]> | 2026-06-10 01:48:28 -0400 |
|---|---|---|
| committer | historia <[not public]> | 2026-06-10 01:48:28 -0400 |
| commit | a226d72e51eecb768b13600303f73483118d9104 (patch) | |
| tree | 458d15ef049732c15dacc591a830d3beddbedfde /internal/game/cmd_quit.go | |
| parent | 6a0f3d7a252de4b1741cfe5e1c561412c602becc (diff) | |
| download | thehouseoficarus-a226d72e51eecb768b13600303f73483118d9104.tar.gz | |
feat: implemented janky object interaction model
Diffstat (limited to 'internal/game/cmd_quit.go')
| -rw-r--r-- | internal/game/cmd_quit.go | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/internal/game/cmd_quit.go b/internal/game/cmd_quit.go new file mode 100644 index 0000000..a720bff --- /dev/null +++ b/internal/game/cmd_quit.go @@ -0,0 +1,53 @@ +package game + +import ( + "thirdcollapse/internal/combat" + "thirdcollapse/internal/net" + "thirdcollapse/internal/player" +) + +func (g *Game) doQuit(sess *net.Session) { + p := sess.Player.(*player.Player) + + if combat.GetCombat(p.Name) != nil { + sess.WriteLine("You can't rest during combat!") + return + } + + g.cancelRest(p.Name) + + ticksLeft := 10 + id := g.Ticks.Subscribe(1, func() bool { + switch ticksLeft { + case 10: + sess.WriteLine("You sit down to rest...") + case 6: + sess.WriteLine("You catch your breath...") + case 3: + sess.WriteLine("You close your eyes...") + case 0: + g.cancelRest(p.Name) + g.AccountStore.SaveCharacter(p) + g.charsMu.Lock() + delete(g.loggedInChars, p.Name) + g.charsMu.Unlock() + if g.Hub != nil { + g.Hub.LeaveRoom(sess) + } + sess.Player = nil + sess.State = net.StateMenu + g.showMenu(sess) + return false + } + ticksLeft-- + return true + }) + g.restTimers[p.Name] = id +} + +func (g *Game) cancelRest(playerName string) { + if id, ok := g.restTimers[playerName]; ok { + g.Ticks.Unsubscribe(id) + delete(g.restTimers, playerName) + } +} |
