逃离疯狂帝国吧 关注:30贴子:168
  • 19回复贴,共1

简单的修改教程

只看楼主收藏回复

单机游戏是否需要修改,各位自行斟酌,本帖只做简单教学。
游戏的修改分成多种,这里介绍两三个常见的方法。
一种是即时修改,就是游戏运行时进行修改,即改即用,诸如风灵月影之类的工具就是这种,本游戏因为还处于EA阶段,游戏内数据几乎裸奔,修改非常简单,基本上就是看到一个数字然后用CE(一种修改工具,全称CheatEngine,可网上搜索下载安装)搜索这个数字,之后改变这个数字再次搜索,直到只剩下一两个结果时进行修改。此类方法在本游戏中可随便修改金币、稀有资源、箭矢、卷轴等一切可堆叠资源的数量,比如修改箭矢数量就是搜完了射一发再搜一下,循环往复直到找到最终两个数字,修改成其他你想要的数量即可(务必保证数字处在-2,147,483,648 到 2,147,483,647之间,因为这些数据大多是int类型数据,这是它的范围,在ce中int类型就是“4字节”)。
另一种常见的修改类型是存档修改,本游戏的存档位置是“C:\Users\(你的电脑用户名)\AppData\LocalLow\XperimentalZ Games”这个文件夹,其中“AppData”文件夹是隐藏文件夹,需要你打开隐藏文件夹的显示。因本游戏的存档格式为非常见格式,内容属于加密内容,因此我们暂时无法通过这种方法进行简单的修改。
还有一种常见的修改类型是直接改写游戏代码,从而达到游戏内的世界规则改变。这种方法需要有代码开发的基础,但大多数玩家不具备这种能力,因此本帖将对这种方法进行简单的教学。
需提前准备修改工具“dnSpy”(网上搜索下载安装)。
因本游戏是由经典的unity引擎开发,因此修改游戏代码便可轻车熟路的找到unity引擎开发项目的代码所在位置。游戏代码路径为“游戏目录\Escape the Mad Empire_Data\Managed”文件夹下的CoreAssembly.dll文件,使用dnSpy打开这个文件。
接下来一些简单的修改项目将在回复中进行教学。


贴子原创声明
IP属地:安徽1楼2025-10-18 14:48回复
    1.商店购买不扣钱反而倒贴钱
    重要提醒!进行任何文件修改前,务必将原文件复制备份到其他地方,防止修改出错后无法复原!
    用dnSpy打开CoreAssembly.dll文件后,可以看到如下场景:

    一个个展开,然后展开“ { } _ ”这一栏,就可以看到游戏代码的各程序集了。
    我们需要修改商店的购买逻辑,那就得找到shop相关的内容,下拉找到ShopInventory这一项,这是商店与仓库进行交互的代码集。展开这一项,我们可以看到有如下方法函数:

    其中最下面的那个英文引起了我们的注意,略懂英文的小伙伴一眼就可以看出,这是移除金币的意思,意思就是商店购买东西后需要移除金币,走的就是这个方法函数,点击它,就可以看到如下代码:

    眼尖的小伙伴就能看出来,有两个地方进行了对金币的处理,第一个地方是直接“增加了一个负金币值”,要想做到不扣钱反而倒贴,那么只需要删除这个负号即可。右键代码处,选择“编辑方法”

    进入编辑状态,删除那个负号,之后点击右下角“编译”

    自此这一处就算编辑好了。回到上一次发现这个负号的地方,我们发现还有一个方法函数也进行了金币的处理,此时我们直接点击那个橙色的“RemoveGold”函数,即可跳转到此函数的代码。
    我们注意到这个函数里还有一个负号,这里的“-=”的意思可以这么理解:a -= b,就是 a = a - b,拿a - b之后的结果来覆盖了a,此时我们可以把这个“-=”改成“+=”(a+=b意思就是a=a+b),这样就可以做到不仅不扣钱反而倒贴钱的效果了。
    修改编译以后,我们选择左上角“文件”-“保存模块”

    之后弹窗选择确定即可保存成功。自此,我们的目的已经达到,重启游戏后进商店购买东西,会发现钱反而增加了。


    IP属地:安徽2楼2025-10-18 15:28
    回复
      2026-02-06 08:44:40
      广告
      不感兴趣
      开通SVIP免广告
      2.技能无CD
      重要提醒!进行任何文件修改前,务必将原文件复制备份到其他地方,防止修改出错后无法复原!
      从本次教学开始,一些简单的操作将不再配图进行详细介绍,诸如如何进入编辑模式等。
      按上条教程,展开“ { } _ ”这一栏,找到技能的程序集“Skill”,打开找到“StartCooldown”方法函数,这是技能释放后开始进行冷却计数的程序。程序如下图:

      可以看出,有两处需要修改,第一个地方是将“是否处于cd状态”改为“是”(true),我们需要将这个“true”改成“false”,也就是“否”的意思;接下来第二处那行代码是进行一系列复杂的cd开启逻辑执行,我们不需要知道它是如何运作的,我们只需删除这一行,让它没法运作就可以达到我们的目的了。
      修改完成后保存,重启游戏下地牢放技能,我们会发现技能没有cd了,但是有“公共CD”1秒,这个公共CD不属于本次修改的“技能cd”,想要修改则需要另找代码修改,此处就不做赘述了。


      IP属地:安徽3楼2025-10-18 15:44
      回复
        牛逼膜拜大佬、如何修改属性啊 命中的问题,。 人物属性咋改, 别的游戏都能自选, 这个非得刷 好累


        IP属地:湖北4楼2025-10-19 16:45
        回复
          我修改了编译不了,修改失败,上面那个无CD


          IP属地:湖北5楼2025-10-19 17:03
          收起回复
            3.去除地牢全队总等级21级限制
            重要提醒!进行任何文件修改前,务必将原文件复制备份到其他地方,防止修改出错后无法复原!
            依旧是“ { } _ ”这一栏展开,找到 MissionPanel 下的 MaxPartyLevelFor 方法

            可以看到这里有两个判断,一个是单纯的21级判断,一个是刚开局时的等级限制,这里可以把两个数字都改成自己想要的,注意只改数字,数字后面的“f”千万不要动。
            改完以后编译保存重启游戏,可以看到显示我们等级超了,但是我们依旧可以进地牢


            IP属地:安徽6楼2025-10-21 10:28
            回复
              4.伪无限能量(使用消耗品不消耗能量)
              重要提醒!进行任何文件修改前,务必将原文件复制备份到其他地方,防止修改出错后无法复原!
              依旧是“ { } _ ”这一栏展开,找到 CharacterEnergy 下的 SpendEnergy 方法

              可以看到在最后进行扣除能量时有个“-=”,直接把“-=”改成“+=”即可。
              改完以后编译保存重启游戏,下地城就可以随便放卷轴和喝药了。


              IP属地:安徽7楼2025-10-21 10:35
              回复
                我用了别的修改。修改无限附魔。 等级越高 怪物的等级越高。你21级,怪物就出现9级国王精英,然后被我控制永久BB, 最高难度的BOSS那个骨龙 攻防40+ 。如果你的命中不够那命中率就11%
                慢慢摩吧。不过傀儡控制1大堆国王精英。就是有点卡。


                IP属地:湖北8楼2025-10-22 10:51
                回复
                  2026-02-06 08:38:40
                  广告
                  不感兴趣
                  开通SVIP免广告
                  你好楼主,我想请问一下我也是修改不了程序代码,改不了等级限制里面的21和4,我是有什么地方没打开还是怎么了?麻烦解答一下,谢谢


                  IP属地:重庆来自Android客户端9楼2025-11-20 12:35
                  回复
                    楼主没事了,已经改好了,谢谢您的帮助


                    IP属地:重庆来自Android客户端10楼2025-11-20 12:36
                    回复
                      想要解绑装备无消耗怎么修改


                      IP属地:广东11楼2025-12-18 10:42
                      收起回复
                        不稳定性怎么改


                        IP属地:广东12楼2026-01-11 07:43
                        回复
                          修改技能加点无需技能点:
                          修改SkillUpgrades代码为下面的代码:
                          using System;
                          using System.Collections.Generic;
                          using UnityEngine;
                          public class SkillUpgrades
                          {
                          public SkillUpgrades(Skill skillRef)
                          {
                          this.SkillRef = skillRef;
                          this.RefreshCosts();
                          }
                          public void RefreshCosts()
                          {
                          // 移除技能点消耗,设置为0
                          this.CostPerChargeUpgrade.Clear();
                          this.CostPerChargeUpgrade.Add(new Costs(0, 0, 0, 0, 0, 0, 0, 0));
                          this.CostPerChargeUpgrade.Add(new Costs(0, 0, 0, 0, 0, 0, 0, 0));
                          this.InfoPerCooldownUpgrade.Clear();
                          this.InfoPerCooldownUpgrade.Add((new Costs(0, 0, 0, 0, 0, 0, 0, 0), 0.1f));
                          this.InfoPerCooldownUpgrade.Add((new Costs(0, 0, 0, 0, 0, 0, 0, 0), 0.1f));
                          }
                          public void AddUpgrade(SkillUpgrade upgrade)
                          {
                          upgrade.Grade = this.SkillUpgradeList.Count + 1;
                          this.SkillUpgradeList.Add(upgrade);
                          }
                          public void LevelTo(int level)
                          {
                          level = Mathf.Min(this.SkillUpgradeList.Count, level);
                          for (int i = this.CurrentUpgradeLevel; i < level; i++)
                          {
                          this.SkillUpgradeList[i].UpgradeEffect();
                          }
                          this.CurrentUpgradeLevel = level;
                          }
                          public bool HasMoreChargeUpgrades()
                          {
                          this.RefreshCosts();
                          return this.CostPerChargeUpgrade.Count > this.CurrentChargeUpgradeLevel;
                          }
                          public bool HasMoreCooldownUpgrades()
                          {
                          this.RefreshCosts();
                          return this.InfoPerCooldownUpgrade.Count > this.CurrentCooldownUpgradeLevel;
                          }
                          public Costs NextChargeUpgradeCost()
                          {
                          if (this.HasMoreChargeUpgrades())
                          {
                          return this.CostPerChargeUpgrade[this.CurrentChargeUpgradeLevel];
                          }
                          return default(Costs);
                          }
                          // 使用命名元组语法,移除 TupleElementNames 属性
                          public (Costs costs, float cdReduction) NextCooldownUpgradeCost()
                          {
                          if (this.HasMoreCooldownUpgrades())
                          {
                          var upgradeInfo = this.InfoPerCooldownUpgrade[this.CurrentCooldownUpgradeLevel];
                          return (upgradeInfo.Item1, upgradeInfo.Item2);
                          }
                          return default;
                          }
                          public void IncreaseChargeUpgrade()
                          {
                          this.SkillRef.AddMaxCharge(1, true);
                          this.CurrentChargeUpgradeLevel++;
                          }
                          public void IncreaseCooldownUpgrade()
                          {
                          if (this.HasMoreCooldownUpgrades())
                          {
                          var upgradeInfo = this.InfoPerCooldownUpgrade[this.CurrentCooldownUpgradeLevel];
                          this.SkillRef.ReduceCooldown(upgradeInfo.Item2);
                          this.CurrentCooldownUpgradeLevel++;
                          }
                          }
                          // 修改为不消耗技能点
                          public static Costs CostForUpgrade(int grade, int skLevel, float multiplier = 1f)
                          {
                          // 移除技能点消耗,只返回0技能点的Costs
                          return new Costs(0, 0, 0, 0, 0, 0, 0, 0);
                          }
                          public void SetCooldownUpgradeLevel(int cooldownUpgradeLevel)
                          {
                          for (int i = 0; i < cooldownUpgradeLevel; i++)
                          {
                          this.IncreaseCooldownUpgrade();
                          }
                          }
                          public float NextCooldownReduction()
                          {
                          if (this.HasMoreCooldownUpgrades())
                          {
                          return this.InfoPerCooldownUpgrade[this.CurrentCooldownUpgradeLevel].Item2;
                          }
                          return 0f;
                          }
                          public float NextTotalCooldownReduction()
                          {
                          float num = 0f;
                          int num2 = 0;
                          while (num2 <= this.CurrentCooldownUpgradeLevel && num2 < this.InfoPerCooldownUpgrade.Count)
                          {
                          num += this.InfoPerCooldownUpgrade[num2].Item2;
                          num2++;
                          }
                          return num;
                          }
                          public Skill SkillRef;
                          public List<SkillUpgrade> SkillUpgradeList = new List<SkillUpgrade>();
                          public int CurrentUpgradeLevel;
                          public List<Costs> CostPerChargeUpgrade = new List<Costs>();
                          public int CurrentChargeUpgradeLevel;
                          // 修改为使用C# 7.0+的元组语法,移除 TupleElementNames 属性
                          public List<(Costs costs, float cdReduction)> InfoPerCooldownUpgrade = new List<(Costs costs, float cdReduction)>();
                          public int CurrentCooldownUpgradeLevel;
                          }


                          IP属地:四川14楼2026-01-12 19:51
                          收起回复