/ Mods / 592浏览

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

作为老汽油,从刚出第一天就开始玩,本人游戏时间得有快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(最好提前备份一份,方便反悔), 打开后如下图所示:

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

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

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

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

修改其中代码如下:

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修改游戏数据的流程。

Eysent
【神界原罪2】超详细Mod实例教程 03 : 故事编辑器以及Osiris脚本
【神界原罪2】超详细Mod实例教程 03 : 故事编辑器以及Osiris脚本
【神界原罪2】修复官方Mod工具The Divinity Engine 2 数据编辑器部分技能伤害来源失效BUG
【神界原罪2】修复官方Mod工具The Divinity Engine 2 数据编辑器部分技能伤害来源失效BUG
【神界原罪2】超详细MOD实例教程 02:技能常用属性详细讲解及示例
【神界原罪2】超详细MOD实例教程 02:技能常用属性详细讲解及示例
【神界原罪2】超详细Mod实例教程 01:工具基本介绍和修改技能实例
【神界原罪2】超详细Mod实例教程 01:工具基本介绍和修改技能实例
【Payday2】收获日2 Mod制作教程: CF连杀图标和连杀语音Mod
【Payday2】收获日2 Mod制作教程: CF连杀图标和连杀语音Mod
【维多利亚3】游戏数据修改,模组教程——修改单一建筑最大建筑力
【维多利亚3】游戏数据修改,模组教程——修改单一建筑最大建筑力

0

  1. This post has no comment yet

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注