pet_data/docs/SLEEP_SYSTEM.md

119 lines
3.3 KiB
Markdown
Raw Normal View History

2025-11-24 07:38:44 +00:00
# 睡眠系统文档
## 概述
睡眠系统实现了基于真实时间的自动睡眠机制,让宠物在特定时段自动进入睡眠状态。睡眠时寠物处于类似"暂停"的状态,时间和年龄继续增长,但属性衰减大幅降低。
## 睡眠时段配置
睡眠时段在 `data/pet-species.js``baseStats.sleepSchedule` 中配置:
### 夜间睡眠 (Night Sleep)
- **时间**: 21:30 - 08:00
- **自动睡眠**: 是
- **唤醒后随机再睡机率**: 30%
### 午休 (Noon Nap)
- **时间**: 12:00 - 13:00
- **自动睡眠**: 是
- **唤醒后随机再睡机率**: 30%
## 配置结构
```javascript
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`