前言
我大概是写完了那个同步SMTC的mod,接下来就是用DOTween加动效还有一些细节修改就好了
那么我要实现我第二个目标了,就是Todo的同步
鉴权问题
既然要同步我们游戏肯定得获取Token去操作
那方案有几种
- 拉起浏览器,用户授权 mod拿到refresh token
- 或者Device Code Flow让用户输代码授权
第一种方式实现有点复杂,因为我们得在mod内部启动一个httplistener去监听Oauth的回调地址
第二种简单一点但是我觉得很不健康也不够易用 所以我还是打算拉起浏览器
开始坐牢
微软现在的模型不是单一的GPG Key或者Access Token
而是OAuth授权并获取Refresh Token,用Refresh Token获取Access Token,然后用Access Token去获取Todo数据
也就是说我得先创建App拿到ClientID才能去走OAuth的模型
Azure Portal申请
第一步就卡住了,微软死活不给我创建Azure账号
后面交了工单结果有人专门联系我去一对一处理 微软牛逼 我不骂你了
不管怎么说我们得先创建一个App 在Microsoft Entra里面

然后拿到ClientID再去研究怎么写代码

Api处理
微软其实有提供SDK去干这些,但mod加这么大的SDK估计又要出一堆兼容性问题
而且手动构建http url也不算麻烦 就自己维护好了
到时候应该会写个库丢出来
我在思考的是如何实现更新后迅速同步到游戏中
微软本来的Todo是基于Windows Push Notification Services实现动态更新的
游戏做不到,而且官方自己应用的Api Key限流应该很高 几秒一次轮询都没问题
所以游戏的话方法不多 我暂时打算还是30秒一次查询
游戏逆向
有UE之后找类就好找很多了,游戏和这个有关的大概是这几个类:
- FacilityTodo
- TodoListUI
- TodoListData
- TodoData
- 管理Todo持久化数据的 SaveDataManager
和音乐播放器设计其实如出一辙了
FacilityTodo这个类负责初始化UI以及管理数据
主要也是对着这个类做手脚
剩下的基本就是写代码
碎碎念
我看到别人给游戏做的mod里面被塞满了功能我其实不是特别理解
比如同步天气为什么要带一个全解锁的功能呢
就算不分两个repo起码分成两个dll吧
还有比如让游戏支持flac的同时为啥要顺便加上wallpaper engine支持
模块化设计呢 functional programing呢
总不能写mod也和微信一样想着包揽万象吧
当然别人怎么写是别人的事 我fork就是了 单纯吐槽一下