pet_data/docs/SLEEP_SYSTEM.md

3.3 KiB

睡眠系统文档

概述

睡眠系统实现了基于真实时间的自动睡眠机制,让宠物在特定时段自动进入睡眠状态。睡眠时寠物处于类似"暂停"的状态,时间和年龄继续增长,但属性衰减大幅降低。

睡眠时段配置

睡眠时段在 data/pet-species.jsbaseStats.sleepSchedule 中配置:

夜间睡眠 (Night Sleep)

  • 时间: 21:30 - 08:00
  • 自动睡眠: 是
  • 唤醒后随机再睡机率: 30%

午休 (Noon Nap)

  • 时间: 12:00 - 13:00
  • 自动睡眠: 是
  • 唤醒后随机再睡机率: 30%

配置结构

sleepSchedule: {
  nightSleep: {
    startHour: 21,        // 开始小时
    startMinute: 30,      // 开始分钟
    endHour: 8,           // 结束小时
    endMinute: 0,         // 结束分钟
    autoSleep: true,      // 是否自动进入睡眠
    randomWakeChance: 0.3 // 唤醒后随机再睡的机率 (0-1)
  },
  noonNap: {
    startHour: 12,
    startMinute: 0,
    endHour: 13,
    endMinute: 0,
    autoSleep: true,
    randomWakeChance: 0.3
  }
}

睡眠机制

1. 自动进入睡眠

  • 每个 tick (3秒) 检查当前时间
  • 如果在睡眠时段且宠物未睡觉,自动进入睡眠
  • 控制台显示:😴 夜間睡眠時間,寵物自動進入睡眠

2. 自动醒来

  • 当睡眠时段结束时,自动睡眠的宠物会自动醒来
  • 控制台显示:⏰ 睡眠時間結束,寵物自動醒來

3. 手动唤醒 + 随机再睡

  • 在睡眠时段手动唤醒宠物时:
    • 有 30% 机率宠物会打个哈欠又睡着
    • 控制台显示:寵物醒來後打了個哈欠,在夜間時段又睡著了...
    • 有 70% 机率成功唤醒

4. 手动睡眠

  • 在非睡眠时段,玩家可以手动让宠物睡觉
  • 手动睡眠不受时段限制

睡眠时的状态

属性衰减

  • 饥饿衰减: 降低到 10%
  • 快乐衰减: 降低到 10%
  • 便便: 不会产生新便便
  • 年龄: 继续增长

互动限制

  • 不能餵食
  • 不能玩耍
  • 不能治療
  • 可以清理便便
  • 可以唤醒

系统暂停

  • 事件系统: 睡眠时不会触发任何随机事件
  • 战斗系统: 睡眠时无法进行战斗

实现细节

核心方法

isInSleepTime()

检查当前时间是否在睡眠时段内,返回 'nightSleep''noonNap'null

getSleepPeriod(periodName)

获取指定睡眠时段的配置。

toggleSleep()

切换睡眠状态,包含随机再睡逻辑。

状态标记

  • isSleeping: 是否在睡眠中
  • _autoSlept: 是否为自动睡眠(内部使用,用于区分自动/手动睡眠)

游戏体验

睡眠系统提供了以下游戏体验:

  1. 真实感: 宠物遵循自然的作息时间
  2. 保护机制: 夜间和午休时宠物自动进入低消耗模式
  3. 互动性: 玩家可以尝试唤醒宠物,但有机率失败
  4. 平衡性: 睡眠时不会完全暂停,只是大幅降低消耗

调整建议

可以通过修改配置来调整睡眠系统:

  • 延长/缩短睡眠时段: 修改 startHour/endHour
  • 调整唤醒难度: 修改 randomWakeChance (0 = 总是能唤醒, 1 = 总是失败)
  • 添加新的睡眠时段: 在 sleepSchedule 中添加新配置
  • 完全禁用自动睡眠: 设置 autoSleep: false