【骑马与砍杀2:霸主】 dnSpy修改游戏数据,改变俘虏的招募速度

760次阅读
没有评论

共计 2879 个字符,预计需要花费 8 分钟才能阅读完成。

作为老汽油,从刚出第一天就开始玩,本人游戏时间得有快 700 小时了,也玩过各种各样的流派。在高难度下,除了改造人体流,野战对高级兵的消耗还是比较大的,本人就想加速俘虏中高级兵的招募速度,快速补员。要么没有符合的 mod,要么功能不喜欢,因此在这里分享一种自己修改游戏数据的方法,所用的工具是 dnSpy。

dnSpy 是一款开源的.NET 程序集反编译器和调试器,它可以用来分析和修改.NET 程序集。dnSpy 可以反编译.NET 程序集中的 IL 代码,还可以将程序集转换为 C#代码进行查看和编辑。除了反编译外,dnSpy 还支持调试.NET 程序集,包括单步调试和断点调试等功能。通过 dnSpy,用户可以深入了解.NET 程序的内部实现,并且可以对其进行修改和优化。我们这里用它来修改骑砍 2 的TaleWorlds.CampaignSystem.dll,里边有我们需要修改的数据。另外 dnSpy 也可以修改其他用 c# 或者 unity 开发的游戏文件,比如雨中冒险 2 等。

首先,安装好 dnSpy 以后,用它打开骑砍文件夹中的
Mount & Blade II Bannerlord\bin\Win64_Shipping_Client\TaleWorlds.CampaignSystem.dll(最好提前备份一份,方便反悔), 打开后如下图所示:

【骑马与砍杀 2:霸主】dnSpy 修改游戏数据,改变俘虏的招募速度

点击 TaleWorlds.CampaignSystem.GameCompnents 左侧的三角,可以看到游戏中部分模块的数据,你可以根据名称判断你是否想修改,比如 DefaultBattleRewardModel 定义了战斗后获得的奖励,包括声望,领主关系,战利品质量和数量等。这里我们要修改的是DefaultPrisonerRecruitmentCalculationModel, 从名字就可看出它是管俘虏招募计算的。

比如 GetConformityNeededToRecruitPrisoner 函数是计算俘虏士兵可以被招募的服从度,从函数可以看出这个值只跟士兵的等级有关,为(等级 +6)的平方 – 10。所以,使用 dnSpy 你也可以看到烤肉社的游戏机制设计。

public override int GetConformityNeededToRecruitPrisoner(CharacterObject character)
{return (character.Level + 6) * (character.Level + 6) - 10;
}

这里我们只修改每小时俘虏获得的服从度,右击函数名,并选择编辑方法:

【骑马与砍杀 2:霸主】dnSpy 修改游戏数据,改变俘虏的招募速度

修改其中代码如下:

public override int GetConformityChangePerHour(PartyBase party, CharacterObject troopToBoost)
{ExplainedNumber explainedNumber = new ExplainedNumber(10f, false, null);
    if (party.LeaderHero != null)
    {explainedNumber.Add((float)party.LeaderHero.GetSkillValue(DefaultSkills.Leadership) * 0.15f, null, null);
        explainedNumber.Add((float)party.LeaderHero.GetSkillValue(DefaultSkills.Charm) * 0.2f, null, null);
        explainedNumber.Add((float)party.LeaderHero.GetSkillValue(DefaultSkills.Steward) * 0.15f, null, null);
    }
    if (troopToBoost.Tier <= 3 && party.MobileParty.HasPerk(DefaultPerks.Leadership.FerventAttacker, true))
    {explainedNumber.AddFactor(DefaultPerks.Leadership.FerventAttacker.SecondaryBonus * 0.01f, null);
    }
    if (troopToBoost.Tier >= 4 && party.MobileParty.HasPerk(DefaultPerks.Leadership.StoutDefender, true))
    {explainedNumber.AddFactor(DefaultPerks.Leadership.StoutDefender.SecondaryBonus * 0.01f, null);
    }
    if (troopToBoost.Occupation != Occupation.Bandit && party.MobileParty.HasPerk(DefaultPerks.Leadership.LoyaltyAndHonor, true))
    {explainedNumber.AddFactor(DefaultPerks.Leadership.LoyaltyAndHonor.SecondaryBonus * 0.01f, null);
    }
    if (troopToBoost.IsInfantry && party.MobileParty.HasPerk(DefaultPerks.Leadership.LeadByExample, false))
    {explainedNumber.AddFactor(DefaultPerks.Leadership.LeadByExample.PrimaryBonus * 0.01f, null);
    }
    if (troopToBoost.IsRanged && party.MobileParty.HasPerk(DefaultPerks.Leadership.TrustedCommander, false))
    {explainedNumber.AddFactor(DefaultPerks.Leadership.TrustedCommander.PrimaryBonus * 0.01f, null);
    }
    if (troopToBoost.Occupation == Occupation.Bandit && party.MobileParty.HasPerk(DefaultPerks.Roguery.Promises, true))
    {explainedNumber.AddFactor(DefaultPerks.Roguery.Promises.SecondaryBonus, null);
    }
    return MathF.Round(explainedNumber.ResultNumber);
}

这里我对每个俘虏的基础服从度做了修改,让它跟部队领袖的统御、魅力、管理有关,如果你想,你也可以添加更多选项,比如角色的声望等。

修改完成后点击编译。然后没有其他修改的话就点击文件 - 保存模块,保存文件就可以了。此时再进入游戏就可以生效了,不需要重新开档。

以上就是 dnSpy 修改游戏数据的流程。

正文完
 0
评论(没有评论)