作为老汽油,从刚出第一天就开始玩,本人游戏时间得有快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修改游戏数据的流程。
0