Chill Env Sync
实时天气同步插件,可以根据真实世界的天气情况自动调整游戏内的环境效果,或基于现实时间模拟昼夜循环。
| Last updated | 20 hours ago |
| Total downloads | 4 |
| Total rating | 1 |
| Categories | Mods |
| Dependency string | Small_tailqwq-Chill_Env_Sync-1.5.3 |
| Dependants | 0 other packages depend on this package |
This mod requires the following mods to function
BepInEx-BepInExPack
BepInEx pack for Mono Unity games. Preconfigured and ready to use.
Preferred version: 5.4.2304README
Chill Env Sync(实时天气同步插件)
一个用于游戏 《放松时光:与你共享Lo-Fi故事》 的实时天气同步 BepInEx 插件,可以根据真实世界的天气情况自动调整游戏内的环境效果,或基于现实时间模拟昼夜循环。
「放松时光:与你共享Lo-Fi故事」是一个与喜欢写故事的女孩聪音一起工作的有声小说游戏。您可以自定义艺术家的原创乐曲、环境音和风景,以营造一个专注于工作的环境。在与聪音的关系加深的过程中,您可能会发现与她之间的特别联系。
所有代码均由 AI 编写,人工仅作反编译和排错处理。 这是我第一次用 AI 为 Unity 游戏做 MOD,有问题请反馈,虽然反馈了我也是再去找 AI 修就是了🫥
关联我写的第二个土豆 mod:iGPUSaviorMod
关联 BILIBILI 视频:时间、天气与土豆 (<-- 评价为:纯引流,啥干货没有)
✨ 主要功能
- 🌤️ 实时天气同步:通过心知天气 API 获取真实天气数据,自动调整游戏内环境
- 🌍 多城市支持:支持任意城市的天气查询(拼音或中文)
- 🌓 昼夜循环:根据配置的日出日落时间自动切换白天/黄昏/夜晚场景
- 🔓 解锁所有环境:自动解锁所有环境和装饰品
- 此选项不会影响存档,仅在当前游戏会话中生效
- 可选配置项
UnlockAllEnvironments:是否解锁所有环境UnlockAllDecorations: 是否解锁所有装饰品UnlockPurchasableItems:是否解锁所有游戏币解锁内容
- ⌨️ 快捷键操作:
F7- 强制刷新天气- 忽略缓存,强制从心知天气 API 获取最新的实时天气数据。
- 重置 API 慢钟计时器。
F8- 显示当前状态- 在日志中输出一条信息,没啥用
F9- 手动触发同步- 使用当前已有的天气缓存和实时的本地时间,强制重新计算并应用游戏环境
⚠️ 本项目可能有
- 💽外挂嫌疑:本插件会默认修改游戏中的环境和装饰品解锁状态,但是不会写入存档。如果你打算自己解锁,还请自己调整配置文件(详见下文)
- 💥莫名冲突:如果未来游戏更新或者 Mod 大井喷,本插件很可能与其他插件发生冲突。因为我也知道我和 AI 配合写得很烂,届时还请别抱太大修复希望
- 💸仅供学习:本插件采用了 MIT许可证,法律上来说你可以想干啥干啥,但是请不要直接拿 DLL 去卖。
- 🧷外部链接:本插件使用了第三方天气 API 服务,使用时请注意隐私和数据安全。且该第三方数据服务提供范围请以实际为准
- 😵💫粗制滥造:本插件完全由 AI 编写,可能存在各种问题和漏洞,请谨慎使用。我完全不懂 C#,那你叫我怎么办嘛
- 🧱区域限定:获取天气功能、UI 显示天气数据等功能可能只在部分地区、部分语言环境下可用,对此深感歉意。
- 🤖智械危机:使用本插件可能会加速AI统治世界的进程,后果自负。(<---这段不是我自己写的)
🎮 支持的环境类型
基础环境(互斥)
注:游戏逻辑上只能同时存在一个开启,但是实际上可以强开多个。感觉除了平滑切换场景能用上外感觉没啥必要提这一嘴
- ☀️ 白天 (Day)
- 🌅 黄昏 (Sunset)
- 🌙 夜晚 (Night)
- ☁️ 多云 (Cloudy)
降水效果
注:下列为游戏内效果,具体现实天气对应逻辑请看下文“使用方法”部分
- 🌧️ 小雨 (LightRain)
- 🌧️ 大雨 (HeavyRain)
- ⛈️ 雷雨 (ThunderRain)
- ❄️ 雪 (Snow)
风景效果
开启彩蛋功能后,系统可能会随机或者在满足特定条件后主动开启某些风景效果。
声音效果
开启彩蛋功能后,系统可能会在满足特定条件后主动开启某些声音效果。
TODO
🗒️ 本项目的未来计划和待办清单
- [x] 基础功能优化
- [x] 根据季节、天气等因素展示B类风景
- [x] 根据季节、时间等因素展示C类风景
- [x] 根据时间、季节等因素自动触发背景音乐
- [x] 代码重构,拆分为多个子模块,方便后续 AI 维护
- [x] 应付将来的游戏更新(成功活到了 ver1.1)
- [ ] 永远都修不够的 BUG
- [ ] 抽空在土豆模式中对 todo、note 等功能进行优化
📦 安装方法
前置要求
- 游戏本体
- BepInEx 5.4.23.4 (本插件基于此版本开发)
安装步骤
⚠️ 重要:必须按顺序安装!
⚠️ 重要:请在发布/releases界面下载 dll 文件
- 确保已正确安装 BepInEx 框架
- 先启动一次游戏,让 BepInEx 完成初始化
- 游戏启动后,等待加载到主界面
- 看到 BepInEx 控制台窗口出现
- 确认
BepInEx/plugins/文件夹已创建 - 退出游戏
- 将下载好的
RealTimeWeatherMod.dll放入BepInEx/plugins/目录 - 再次启动游戏,插件将自动加载
- 编辑配置文件(位于
BepInEx/config/chillwithyou.envsync.cfg) - 游戏中按
F7可以刷新配置
常见问题:
- 如果 mod 无法正常工作,请确保先让 BepInEx 初始化完成后再安装 mod!
- 如果找不到
*.dll,说明你下载的是源码(Source code),而不是发布产物(releases)
⚙️ 配置说明
首次运行后,配置文件将生成在 BepInEx/config/chillwithyou.envsync.cfg
配置项说明
[Automation]
## 启用季节性彩蛋与环境音效自动托管
EnableSeasonalEasterEggs = true
[Debug]
## 是否开启调试模式 | 非调试请勿动
EnableDebugMode = false
## 模拟天气代码
SimulatedCode = 13
## 模拟温度
SimulatedTemp = 13
## 模拟天气描述
SimulatedText = DebugWeather
[Internal]
## 上次同步日期 | 非调试请勿动
LastSunSyncDate = 2025-12-02
[TimeConfig]
## 日出时间(格式:HH:mm) | 5.1.2版本不用手动修改
Sunrise = 06:30
## 日落时间(格式:HH:mm) | 5.1.2版本不用手动修改
Sunset = 18:30
[UI]
## 是否在游戏日期栏显示实时天气和温度
ShowWeatherOnDate = true
[Unlock]
## 是否自动解锁所有环境场景 | 可能包含某些未实装的场景,谨慎开启
UnlockAllEnvironments = true
## 是否自动解锁所有装饰品 | 可能包含某些未实装的饰品,谨慎开启
UnlockAllDecorations = true
## 解锁游戏币购买内容 | 可能大幅缩短游戏寿命,谨慎开启
UnlockPurchasableItems = false
[WeatherAPI]
## 是否启用天气 API 同步 | 不开启大部分功能无法使用
EnableWeatherSync = false
## 心知天气 API Key | v5.1.2版本后,留空可直接使用内置密钥
SeniverseKey =
## 城市名称(拼音或中文,如:beijing、上海,ip 表示自动定位)
Location = beijing
[WeatherSync]
## 天气API刷新间隔(分钟) | 非调试请勿动
RefreshMinutes = 30
获取心知天气 API Key
💡 新版本内置密钥,留空也可用天气服务。自己申请也可用,看个人喜好
- 访问 心知天气开发者平台
- 注册账号并登录,转到
控制台-产品管理-免费版(如果你是试用版或者其他版本,请选择对应版本) - 在产品管理中找到 私钥,复制该密钥
- 将该私钥填入配置文件的
SeniverseKey字段,无需添加引号等特殊符号 - 设置
EnableWeatherSync = true启用天气同步 - 可按需配置刷新时间,避免API调用过于频繁
- 如有不懂之处,可以参阅 issues。
🚀 使用方法
基础使用(默认开启)
插件默认会根据配置的日出日落时间自动切换环境:
- 日出后到日落前 1 小时:白天
- 日落前 30 分钟到日落后 30 分钟:黄昏
- 其他时间:夜晚
天气同步模式(需开启)
-
按照上述方法配置好 API Key
-
插件将每隔指定时间(默认 30 分钟)自动获取天气并更新环境
-
环境映射规则:
| 环境 | 正常天气 | 恶劣天气 |
|---|---|---|
| ☀️ 白天(Day) | 日出 → 日落前30分钟 | — |
| 🌅 黄昏(Sunset) | 日落前30分钟 → 日落后30分钟 | — |
| ☁️ 多云(Cloudy) | — | 日出 → 日落后30分钟 |
| 🌙 夜晚(Night) | 日落后30分钟 → 日出 | 日落后30分钟 → 日出 |
💡 恶劣天气时,白天和黄昏时段统一显示为多云环境,黄昏效果会被跳过。夜晚环境不受天气影响,始终在日落后 30 分钟准时切入。
- 恶劣天气名单:
4, 7, 8, 9 (多云/阴天)
11, 12, 14-20 (中雨及以上, 雷暴, 冻雨)
23-25 (中雪及以上)
26-31 (沙尘/雾)
34-36 (风暴)
- 天气映射规则:
| 游戏效果代码 | 对应 API 天气 ID (参考) | 逻辑说明 |
|---|---|---|
| Snow | 20-25 (雪/雨夹雪/暴雪) | 所有的雪类,统统下雪。 |
| ThunderRain | 11, 12, 16, 17, 18 (雷/暴雨) | 雷阵雨、暴雨、特大暴雨,上强度。 |
| HeavyRain | 10, 14, 15 (阵雨/中雨/大雨) | 普通的下雨,量比较大。 |
| LightRain | 13, 19 (小雨/冻雨) | 淅淅沥沥的小雨。 |
| OFF (关闭) | 0-9, 26-39 (晴/多云/阴/雾/风) | 关键点:如果是阴天或多云,必须强制关闭所有雨雪效果! |
快捷键功能
- F7:立即强制刷新天气(跳过缓存)
- 核心目的:
- 忽略缓存,强制从心知天气 API 获取最新的实时天气数据。
- 重置 API 慢钟计时器。
- 触发行为:
- 清空计时器:重置下次自动请求 API 的倒计时。
- 强制联网:无视 CacheExpiry(60分钟缓存期),直接向 api.seniverse.com 发起 HTTP 请求。
- 数据更新:如果请求成功,会用新的天气数据覆盖内存中的 _cachedWeather。
- 自动应用:拿到新数据后,会自动调用 ApplyEnvironment 来更新游戏场景。
- 适用场景:
- 你觉得天气变了(比如窗外刚下雨了),但游戏里还是晴天(因为还在缓存期内)。
- 调试 API 连接是否正常。
- 修改了配置文件中的 Location(城市)后,想立即生效。
- 核心目的:
- F8:在日志中显示当前环境状态
- 打印一条日志
- F9:手动触发一次天气同步
- 核心目的:
- 不联网,使用当前已有的天气缓存和实时的本地时间,强制重新计算并应用游戏环境。
- 关键点:它会绕过“防抖动”检查(即 if (Current == Target) return),强制执行一次完整的环境切换流程(关灯 -> 开灯 -> 服务同步)。
- 触发行为:
-
读取缓存:直接读取内存中的 _cachedWeather(如果没缓存,只算时间)。
-
重算时间:根据当前秒数 (DateTime.Now),重新计算是白天、黄昏还是夜晚。
-
暴力执行:
-
调用 ForceActivateEnvironment。
-
强制模拟点击 MainIcon(即使它看起来是亮着的)。
-
强制调用 WindowViewService.ChangeWeatherAndTime。
-
强制写入 SaveDataManager。
-
- 适用场景:
- 修复错位:比如游戏 UI 显示是“雨天”,但画面上雨停了;或者声音还在响,但图标灭了。按 F9 可以“踢”一下游戏,让它回正。
- 日落/日出测试:当你觉得时间到了(比如17:30),但游戏没切黄昏(可能是快钟还没跳),按 F9 可以立即触发时间判断。
- 无网状态:断网时,F7 会失败,但 F9 可以用来刷新本地时间逻辑(白天/夜晚切换)。
- 核心目的:
🔧 技术细节
- 框架:BepInEx 5.x
- 目标框架:.NET Framework 4.7.2
- 使用技术/工具:
- Harmony 补丁(用于游戏功能注入)
- Unity 协程(用于异步网络请求)
- 反射(用于访问游戏内部系统)
- dnSPY
- 各种大语言模型
📝 版本历史
注:版本号为 AI 自己写的,不关我的事,我也不知道为啥它刷版本号为什么这么随意
v5.1.3-最后的两月
- 修复了由于游戏修正单词导致的 UI 层显示内容无法正确 hook 问题
- 修复了由于游戏更新时间调整方法导致时间切换不生效问题
- 修复了由于上面一堆报错导致热键不生效的问题
- 添加了对于“转换心情”中需要通过货币解锁内容物的解锁支持
- 注:此配置项默认关闭,开启此配置项可能导致游戏寿命大幅缩短
- 开启此配置项不支持热修改,请确保修改时游戏处于关闭状态或修改后重启游戏
- 此配置项不影响存档,你依旧可以在关闭解锁功能后重启手动兑换道具
- 注:此配置项默认关闭,开启此配置项可能导致游戏寿命大幅缩短
- 此版本开发时间约 4小时,部分情景可能未作细致测试,如果遇到 bug,请通过 GitHub 进行反馈。
v5.1.2-老坛酸菜版(?
- 内置了一个 KEY,当发现 KEY 异常调用时,不排除强行重置行为
- 修复了可能导致 UI 控件无法交互的问题
- 修复了背景音乐在彩蛋模式激活后无法关闭的问题
- 修复了天气开关被错误统计到脏目录的问题
b5.1.1
- 添加了一个改写上午/下午的功能,现在是凌晨、清晨、上午、中午、下午、傍晚、晚上了
b5.0.1-煮饭时间到
- 没啥变化,只是把风景啥的的枚举类丢给 Gemini 让他写上去了,这 B 这都要刷一个版本号,我服了
- 此版本应该是游戏本体下一次更新前的定稿版本了,除非有 bug 需要修复,暂时想不到新功能了。你有好的想法也可以提出来。
v5.0.0
- 什么?版本直接跳到 v5 了?你都干了些什么口牙!
- 独立组件:新建一个
SceneryAutomationSystem类(继承MonoBehaviour),挂载在Runner上,这样它有自己的Update循环,不干扰原本的天气同步逻辑 - 规则驱动:Gemini 它把“做饭声音”、“空调声音”、“樱花”、“烟花”等抽象成了
SceneryRule。这样以后我想加新彩蛋,只需要在列表里加一行配置,不用改核心代码 - 用户防打架机制 (脏标记):这是核心。通过
Hook游戏的点击事件,一旦用户手动点过某个开关,系统就把这个开关拉入“黑名单”,本局游戏不再自动接管。(<---这不是偷懒吗?) - 注:彩蛋功能的触发机制举例起来比较麻烦,有能力者可以把代码丢给 AI 或者自行分析,目前只使用了部分参数进行判断,后续游戏更新后可能会根据情况进行优化。
v4.5.0
- 添加了一个在主界面左上角日期后显示天气和温度的功能
- 添加了一个可选配置项
ShowWeatherOnDate,用于控制是否在日期后追加显示天气和温度 - 此功能需要引用
Unity.TextMeshPro.dll
v4.4.1-更好的天空
- 守护了部分人的白天或者是黄昏
- 将小雨、小雪、阵雨、阵雪这种非恶劣天气从恶劣天气名单中移除
v4.4.0
- 守护了这片夜空
- 重构了环境、风景推导逻辑,现在晚上永远只会是晚上,白天恶劣天气可能会是多云,也可能是白天和黄昏,谁知道呢
v4.3.1
- 说是优化了 v4.3.0 出现问题的原因
- 捏吗你不能修复的时候一并优化吗?
v4.3.0
- 修复了一个在多云状态下按
F9会导致所有环境被错误关闭的问题
v4.2.3-V4.2.4
- 还是没修好,Gemini 出去
v4.2.2
- 发现了一个在多云状态下按
F9会导致所有环境被错误关闭的问题 - 然后这 Gemini 没修好
v4.2.1
- 添加了一个调试模式,开始尝试调整调整天气 ID 查看对应天气切换效果(什么?你现在才开始测试?!)
- 让 Gemini 别刷版本号了
v4.2.0
- 修复了一个按
F7没反应的问题,加了个输出说是
v3.7.0-v4.1.0-外地AI刷版本号来了
- 优化
F9按键逻辑,优化日志提示 - 修复偶发日志卡死的状态,即使不影响使用
- 修复之前和AI沟通的错误:它一直以为黄昏要提前1小时切换,实际上是30分钟
- 优化切换逻辑(真是优化?)
缓存逻辑是这样的:
- 数据存储:有一个静态变量
_cachedWeather存在内存里。- 有效期:60 分钟 (
TimeSpan.FromMinutes(60)).- 快钟 (30 秒一次):
- 只读缓存。如果缓存里有数据,直接拿来用,不发网络请求(不费流量)。
- 它会利用缓存里的“晴/雨”状态,重新结合“当前每一秒的时间”来判断是否该日落了。
- 注:本来想让 AI 写定时器的,但是 AI 说不如这个,我不懂所以听他的
- 慢钟 (30 分钟一次):
- 强制更新。即使缓存没过期(60 分钟),只要到了用户设定的刷新间隔(默认 30 分钟),就会尝试发起新的 API 请求来刷新数据。
v3.6.0-不想开挂?满足你
- 增加解锁所有环境和装饰品可选配置项
v3.5.0-估摸着能跑版
- 优化按钮逻辑,采用模拟点击
MainIcon方式 - 修复环境切换可能不生效的问题
- 改进代码结构和日志输出
v3.4.x
- 修复部分天气效果无法关闭的问题
- 优化环境互斥逻辑
v3.3.0 及更早版本
- 分析源码、分析环境开关逻辑、分析景色开关逻辑
- 初始版本开发
- 谁能想到用了3个不同厂商的不同AI写了一天才写出来,我累死了
详细更新日志请查看 Git 提交记录
🐛 已知问题
- 首次加载可能需要等待 15 秒后才会进行第一次环境同步(这玩意应该不算问题吧?
男人不能说太快,所以我加了点延迟?) - F9 可能导致部分按钮 UI 异常,但是不影响游戏内容,修复优先级低
🤝 贡献
欢迎提交 Issue 和 Pull Request!
关于反馈
如需反馈问题,请先确保问题“可复现”,并开启调试日志(BepInEx/config/BepInEx.cfg 中将 Logging.Console 设置为 true)。
这时,游戏启动时会在控制台输出详细日志,有助于定位问题。
📄 许可证
本项目采用 MIT 许可证 开源。
⚠️ 重要声明:
- ✅ 可以自由使用、修改和分发
- ✅ 可以用于个人学习和研究
- 使用本软件产生的任何后果由使用者自行承担
详见 LICENSE 文件。
👨💻 作者
- GitHub: @Small-tailqwq
🙏 致谢
- BepInEx 团队
- Harmony 补丁库
- Duvet
- 心知天气 API 服务
- Google Gemini3Pro
- Github Copilot
- Claude Sonnet and Ops 4.5
- OpenAI ChatGPT5.1
- Github Copilot
免责声明:
本插件仅供学习交流使用,请勿用于商业用途。使用本插件产生的任何问题与作者无关。
本项目为粉丝自制 (Fan-made),与游戏开发商及发行商无关。
游戏《Chill with You - Lo-Fi Story》及其相关素材、商标的版权均归原作者所有。
即使生活一团糟,但也要心存希望
