40 lines
1.5 KiB
Python
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")
|