119 lines
3.3 KiB
Markdown
119 lines
3.3 KiB
Markdown
|
|
# 睡眠系统文档
|
||
|
|
|
||
|
|
## 概述
|
||
|
|
|
||
|
|
睡眠系统实现了基于真实时间的自动睡眠机制,让宠物在特定时段自动进入睡眠状态。睡眠时寠物处于类似"暂停"的状态,时间和年龄继续增长,但属性衰减大幅降低。
|
||
|
|
|
||
|
|
## 睡眠时段配置
|
||
|
|
|
||
|
|
睡眠时段在 `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`
|