TheycallmeJames 发表于 2026-3-19 03:47

通过修改sts2.dll来解放部分mod需求

由于18号更新导致MOD文件失效, 看到有人修改sts2.dll文件便能无需MOD进行简单的数值修改
所以就简单跟着AI学了一下该如何修改
首先去下载一个dnspy, 以下是我写给自己看的教程,本意是每次版本更新后我再跟着教程快速把我的需求再改一遍:

战斗金钱和战斗卡牌奖励数量:
搜“GenerateRewardsFor”,找到monster、elite、boss.
右键选编辑方法,在GoldProportion后面加上 * 5f      (每个类都有min和max这两项后面的proportion要改)
同时下面几行代码里的数字3改为4

删牌永不售罄:
搜MerchantCardRemovalEntry,然后搜SetUsed
应该能找到this.used = true
修改IL指令,将序号1里的操作码idc.i4.1通过下拉菜单,改为idc.i4.0
确认,出来以后就能看到true改为false了

价格永远75:
搜CalcCost
从几个结果中找到merchant, 进入IL指令编辑,在0x19这里改为0x00就行

火堆回血:
搜GetBaseHealAmount, 改0.3m

暂时就那么多,没有任何编程基础,改着玩。

eddlin 发表于 2026-3-19 10:51

有详细点的教程吗?看不懂

qinzhansu91 发表于 2026-3-19 12:09

谢谢分享!!!很需要这个

houzhutou 发表于 2026-3-19 16:01

大佬,GenerateRewardsFor搜不到啊

qinzhansu91 发表于 2026-3-19 16:07

求助初始能量修改应该搜什么???

wwjxxx333 发表于 2026-3-19 21:13

我问了下AI,完善了一下,但是仍然找不到第一步奖励卡牌数量怎么改。

wwjxxx333 发表于 2026-3-19 21:13

这是《杀戮尖塔2(Slay the Spire 2)》通过 dnSpy 直接修改  sts2.dll  程序集的新手教程。核心原理是用工具打开游戏的核心文件  sts2.dll ,找到控制游戏逻辑的代码片段,修改其中的数值或逻辑后重新保存,从而实现作弊效果。

 

️ 前期准备(必做)

1. 下载工具:安装 dnSpy(.NET 反编译/编辑工具,官网或第三方正规渠道下载)。
2. 定位游戏文件:
- 打开 Steam,右键点击《杀戮尖塔2》→ 管理 → 浏览本地文件。
- 进入  data_sts2_windows_x86_64  文件夹,找到 sts2.dll。
3. 备份原文件:这是最重要的一步! 复制一份  sts2.dll  到其他文件夹备份。如果改坏了,用备份还原即可。

 

详细操作步骤

1. 准备工作

- 打开 dnSpy,点击菜单栏  文件 (File)  →  打开 (Open) ,选中游戏目录里的  sts2.dll 。
- 等待 dnSpy 加载完成(左侧会出现一堆类列表)。

2. 功能一:战斗金钱/卡牌奖励翻倍

- 搜索代码:按下  Ctrl+Shift+K (打开搜索),输入  GenerateRewardsFor  并搜索。
- 定位方法:在搜索结果中,找到属于  monster 、 elite 、 boss  相关的方法(通常是  GenerateRewardsFor  方法)。
- 修改数值:
- 右键点击该方法,选择 编辑类 (Edit Class) 或 编辑方法 (Edit Method)。
- 在代码中找到  GoldProportion  相关的行。
- 在  GoldProportion  后面加上  * 5f ( f  表示这是浮点数,代表5倍)。
- 同理:如果有  CardProportion (卡牌掉落率),也可以改成  * 5f 。

3. 功能二:删牌永不售罄

- 搜索代码:按下  Ctrl+Shift+K ,输入  MerchantCardRemovalEntry  并搜索。
- 定位方法:找到其中的  SetUsed  方法或相关逻辑。
- 修改逻辑:
- 找到类似  this.used = true  的代码。
- 将  true  改为  false 。
- 这样游戏就不会标记“删牌次数已使用”,你可以无限次免费删牌。

4. 功能三:价格永远75(商人删牌费)

- 搜索代码:按下  Ctrl+Shift+K ,在  MerchantCardRemovalEntry  类下,找到  CalcCost  方法。
- 修改IL代码:
- 右键点击  CalcCost  方法,选择 编辑 IL (Edit IL)。
- 在IL代码列表中,找到操作码为  ldc.r4 (或  ldc.m )的行。
- 找到数值为  75  或  25  的行,右键选择 编辑 (Edit)。
- 将数值改为你想要的固定价格(比如直接把75改成你想要的任意数字)。

5. 功能四:火堆回血修改

- 搜索代码:按下  Ctrl+Shift+K ,输入  GetBaseHealAmount  并搜索。
- 修改数值:
- 找到该方法,右键编辑。
- 将返回值  0.3f  改为你想要的回血比例(比如  1.0f  代表回满血, 2.0f  代表回2倍血量)。

 

保存修改

- 所有修改完成后,点击菜单栏  文件 (File)  → 保存全部 (Save All)。
- dnSpy 会重新编译并保存修改后的  sts2.dll 。
- 回到游戏,重启游戏即可生效。

ruhua2295210 发表于 2026-3-20 20:49

编辑方法我什么都不改点编辑都报错,下面的IL指令的倒是改成功了

道士 发表于 2026-3-20 20:58

ruhua2295210 发表于 2026-3-20 20:49
编辑方法我什么都不改点编辑都报错,下面的IL指令的倒是改成功了

不加F就可以

道士 发表于 2026-3-20 20:59

ruhua2295210 发表于 2026-3-20 20:49
编辑方法我什么都不改点编辑都报错,下面的IL指令的倒是改成功了

switch (room.RoomType)
{
    case RoomType.Monster:
      if (combatRoom.GoldProportion > 0f)
      {
            int minGold = (int)Math.Round((double)((float)(combatRoom.Encounter.MinGoldReward * 10) * combatRoom.GoldProportion));
            int maxGold = (int)Math.Round((double)((float)(combatRoom.Encounter.MaxGoldReward * 10) * combatRoom.GoldProportion));
            list.Add(new GoldReward(minGold, maxGold, player, false));
      }
      this.RollForPotionAndAddTo(list, player, room.RoomType);
      list.Add(new CardReward(CardCreationOptions.ForRoom(player, room.RoomType), 3, player));
      break;
    case RoomType.Elite:
      list.Add(new GoldReward(combatRoom.Encounter.MinGoldReward * 10, combatRoom.Encounter.MaxGoldReward * 10, player, false));
      this.RollForPotionAndAddTo(list, player, room.RoomType);
      list.Add(new CardReward(CardCreationOptions.ForRoom(player, room.RoomType), 3, player));
      list.Add(new RelicReward(player));
      break;
    case RoomType.Boss:
      list.Add(new GoldReward(combatRoom.Encounter.MinGoldReward * 10, combatRoom.Encounter.MaxGoldReward * 10, player, false));
      this.RollForPotionAndAddTo(list, player, room.RoomType);
      list.Add(new CardReward(CardCreationOptions.ForRoom(player, room.RoomType), 3, player));
      break;
}

ruhua2295210 发表于 2026-3-20 21:13

道士 发表于 2026-3-20 20:58
不加F就可以

啥也没改点编译就这种报错

ruhua2295210 发表于 2026-3-20 23:18

ruhua2295210 发表于 2026-3-20 21:13
啥也没改点编译就这种报错
解决了,是下的版本问题,下了个旧版本的dnspy就好了

a963504653 发表于 2026-3-21 00:42

qinzhansu91 发表于 2026-3-19 16:07
求助初始能量修改应该搜什么???

MegaCrit.Sts2.Core.Models   ------》》》CharaterModel
修改以下方法
public virtual int MaxEnergy
      {
            get
            {
                return 3;
            }
      }

mmmmmmiku 发表于 2026-3-21 11:14

牛的学到了
页: [1]
查看完整版本: 通过修改sts2.dll来解放部分mod需求