【邪道】利用游戏特性解锁想要完成的成就/增加经验值、点数、时间

0 点赞
放松时光:与你共享Lo-Fi故事
转载

由于本游戏部分成就随机性极强,可能运行100小时也不一定能出,所以这里稍微写一个指南,顺便也解析了一点小功能。 警告 再次强调本指南只是为了让那些无法完成部分成就的玩家也能全成就。 修改游戏代码自然有一定风险,虽然从代码上并没看到有检测,也没有带VAC封禁,但笔者无法保证100%的安全性,希望悉知。 前言 通过【验证游戏完整性】便可恢复修改之前的样子。 本方法与我之前写的指南《【邪道】强制让鮟鱇鱼以及DLC中的鹿角人静止不动/灭绝》,方法与逻辑上完全一致。步骤均为反编译-定位跳成就的代码-修改代码,打包回去,思路请见隔壁指南,这里只说本游戏怎么改。操作:用dnSpy打开Assembly-CSharp.dll,并找到AchievementService这个类,Assembly-CSharp.dll位于游戏目录下的Chill With You_Data/Managed文件夹里。

找到第92行的这个方法OnExitCallTalk,右键“编辑方法”,选用其他方法也行,这里选择该方法是因为这个是结束通话就会触发一次。

填入你想要完成的成就,比如我下图演示的是【夏日超频驾驶】这个成就,你就填入this.ProceedOnlyOnce(AchievementCategory.PUBLISH_SUMMERTIME_OVERDRIVE);

编译,左上角点击按钮【文件】-【保存模块】-【确定】

登录游戏后,直接点击右下角结束通话,即可解锁对应成就。

所有成就的名称均在Bulbul.Achievements的枚举值【成就分类】下,如图所示

知道名字就好办了,想要完成哪个成就,就填哪个成就的名字, this.ProceedOnlyOnce(AchievementCategory.成就名); 比如我想完成【好烫】,看英文知成就名为DRINK_HOT,所以像如下这样填写 this.ProceedOnlyOnce(AchievementCategory.DRINK_HOT); 比如我想完成【没睡……我没在睡哦?】,看英文知成就名为WAKE_UP_HEROINE,所以像如下这样填写 this.ProceedOnlyOnce(AchievementCategory.WAKE_UP_HEROINE); 增加小时数/经验值/钱(point) 增加经验值和POINT依旧是在Bulbul命名空间下可以找到PlayerLevelService类下第40行有一个方法叫做AddExp,如下所示,可知调用该方法需要传入一个float类型的经验值, public void AddExp(float exp) { this._isCurrentLevelUpDirection = true; this._onAddExp.OnNext(exp); } 直接分析该方法的被使用:可以找到番茄钟被完成时的调用方法(该方法在PomodoroService类下)

如红框部分所示: 获取当前专注工作的秒数 根据专注工作的秒数计算经验值 根据专注工作的秒数计算点数 添加经验值 添加点数思路1:利用添加经验值和添加点数来添加经验值和点数 关于加钱,在public partial class AchievementService : IDisposable{}开头加上 [注入] private PlayerPointService _pointService; 之后在OnExitCallTalk(){}里加上 _pointService.AddPoint(10000000); 我们可以在任何可以触发的地方加上这一段,比如上面说的达成成就的地方 [注入] private PlayerLevelService _pointService; this._playerLevelService.AddExp((float)100000); [注入] private PlayerPointService _pointService; this._playerPointService.AddPoint(100000000); 或者就在这里每次完成番茄钟的地方,直接赋予一个我们想要加的定值: this._playerLevelService.AddExp((float)100000); this._playerPointService.AddPoint(100000);

思路2:利用计算公式来直接升级和给固定数量的点数。由经验计算公式CalculateExpFromWorkTime可知,当工作时间大于一定值的时候,获取经验有上限。而当你的等级为1级的时候,不管算出来的经验是否满足升级条件,都一定会升级,代码如下:if (SaveDataManager.Instance.LevelData.CurrentLevel == 1 && num4 < (double)SaveDataManager.Instance.LevelData.NextLevelNecessaryExp){num4 = (double)SaveDataManager.Instance.LevelData.NextLevelNecessaryExp;}那就好办了,直接删去这个if条件,只要运行番茄钟,结束就一定会升级,改动如图所示,在PomodoroService类的807行CalculateExpFromWorkTime方法中。

计算钱的CalculatePointFromWorkTime方法同理,直接在return之前将num3赋值为你想要的钱数即可

增加番茄钟成就时间同理,可在任何可触发的地方添加以下两行代码进行触发: 引用自 maozhu12:关于100小时成就时间,往OnExitCallTalk(){}里添加: SaveDataManager.Instance.PlayerData.PomodoroTotalWorkSeconds += 370000.0; SaveDataManager.Instance.SavePlayerData(); 或者在每次完成番茄钟的地方,将第351行 SaveDataManager.Instance.PlayerData.PomodoroTotalWorkSeconds += (double)((float)currentWorkSeconds); 修改为 SaveDataManager.Instance.PlayerData.PomodoroTotalWorkSeconds += 370000.0; 实际上番茄钟时间成就名就是AchievementCategory.POMODORO_WORK_HOURS_COUNT