mud/src/mudlib/unconscious.py

40 lines
1.5 KiB
Python

"""Unconscious state recovery system."""
from mudlib.gmcp import send_char_status, send_char_vitals
from mudlib.player import players
# Recovery rate per tick (10 ticks/sec)
# 0.1 per tick = 1.0 per second recovery
RECOVERY_PER_TICK = 0.1
async def process_unconscious() -> None:
"""Process recovery for all unconscious players.
Called once per game loop tick (10 times per second).
Adds RECOVERY_PER_TICK to both PL and stamina for unconscious players.
When both PL and stamina are above 0, player regains consciousness.
"""
for player in list(players.values()):
# Check if player is unconscious (PL or stamina at or below 0)
if player.pl > 0 and player.stamina > 0:
continue
# Track whether we were unconscious at start
was_unconscious = player.posture == "unconscious"
# Recover PL if needed
if player.pl <= 0:
player.pl = min(player.pl + RECOVERY_PER_TICK, player.max_pl)
# Recover stamina if needed
if player.stamina <= 0:
player.stamina = min(player.stamina + RECOVERY_PER_TICK, player.max_stamina)
# Check if player is now conscious
if was_unconscious and player.pl > 0 and player.stamina > 0:
# Player regained consciousness
player._last_stamina_cue = 1.0 # Reset stamina cues on recovery
send_char_status(player)
send_char_vitals(player)
await player.send("You come to.\r\n")