无上祖神 发表于 2021-10-13 22:15

一些有趣的文件修改

本帖最后由 无上祖神 于 2021-10-24 15:27 编辑

工具:dnspy
打开文件:C:\Game\Mount & Blade II Bannerlord\bin\Win64_Shipping_Client中的TaleWorlds.CampaignSystem.dll和TaleWorlds.Core.dll修改方法:找到对应的方法,右键编辑方法,修改完后编译,全部修改完后Ct+sh+S保存。
一:武器修改
常言道一寸长一寸强,如果你去xml里直接修改武器长度会发现武器的速度变得非常慢,这是因为游戏中挥砍速度和操控性是由转动惯量计算的,现在我想造出很长的武器,挥砍速度和操控性也高,而且还不让别人享受这一效果。
TaleWorlds.Core.Crafting.ScaleThePiece 方法用于锻造时调整部件的比例,将array[(int)scalingPieceType].SetScale这行改为array[(int)scalingPieceType].SetScale((percentage - 90) * 25);现在比例变成了0-500%,由于AI不会锻造,只有玩家能造出超长武器。可是我材料不够了
TaleWorlds.CampaignSystem.SandBox.GameComponents.Map.DefaultSmithingModel.GetSmithingCostsForWeaponDesign方法描述了所需材料,将方法里的所有"-"改为"+",现在我们锻造生成材料了。

可是我部件没解锁
TaleWorlds.CampaignSystem.SandBox.CampaignBehaviors.CraftingCampaignBehavior.OpenNewPart方法用于解锁新部件,将if (array.Length != 0)的大括号内内容改为
if (array.Length != 0)
{
foreach (CraftingPiece craftingPiece in array)
{
if (craftingPiece != null)
{
this.OpenPart(craftingPiece);
}
}
}这样只要锻造并解锁一个部件剩下的也解锁了。可是我没体力了
TaleWorlds.CampaignSystem.SandBox.CampaignBehaviors.CraftingCampaignBehavior.SetHeroCraftingStamina方法,将语句改为
this.GetRecordForCompanion(hero).CraftingStamina = 100;即可这个武器难度有点高啊……
TaleWorlds.CampaignSystem.SandBox.GameComponents.Map.DefaultSmithingModel.CalculateWeaponDesignDifficulty方法,删掉
num += (float)this.GetCraftingPartDifficulty(weaponDesignElement.CraftingPiece);下面的那一行,难度就降下来很多武器造好了,TaleWorlds.Core.Crafting.CalculateStats方法计算武器属性,将swingspeed行改为
this._currentWeaponSwingSpeed = ((this._currentWeaponReach > 3f) ? 40f : this.CalculateSwingSpeed());handling行改为this._currentWeaponHandling = ((this._currentWeaponReach > 3f) ? 200f : ((float)this.CalculateAgility()));这样就使三米以上的武器操控性和速度都变成200。
二:部队相关:
[分享] 骑砍2 游戏数据修改简易教程 给出了部队和俘虏的修改方法,但是由于版本更新后,本来的int值变成了ExplainedNumber,所以修改方法需要变一下。
TaleWorlds.CampaignSystem.SandBox.GameComponents.Party.DefaultPartySizeLimitModel.CalculateMobilePartyMemberSizeLimit方法,在return result的前一行加一行代码:
result.Add(result.BaseNumber * 4f, null, null);这里的4即为部队容量变为五倍。修改俘虏容量同理,只不过方法变为CalculateMobilePartyPrisonerSizeLimitInternal。
现在俘虏很多,想把他们都招进来,TaleWorlds.CampaignSystem.SandBox.GameComponents.DefaultPrisonerRecruitmentCalculationModel.GetConformityChangePerHour方法给出了招募俘虏的速度,在最后一行return MBMath.Round(num)后面加上*x即可使招募速度变为x倍。

俘虏了了很多英雄能不能全招进来?
TaleWorlds.CampaignSystem.SandBox.GameComponents.DefaultPrisonerRecruitmentCalculationModel.IsPrisonerRecruitable方法中,将
if (character.isHero||!character.IsRegular || character.Tier > 6)
                        {
                              conformityNeeded = 0;
                              return false;
                        }改为<blockquote>if (!character.IsRegular || character.Tier > 6)然后将CalculateRecruitableNumber方法改为public override int CalculateRecruitableNumber(PartyBase party, CharacterObject character)
                {
                        if (party.PrisonRoster.IsEmpty<TroopRosterElement>() || party.PrisonRoster.TotalRegulars <= 0)
                        {
                              return 0;
                        }
                        if (character.IsHero)
                        {
                              return party.PrisonRoster.GetElementNumber(character);
                        }
                        int conformityNeededToRecruitPrisoner = Campaign.Current.Models.PrisonerRecruitmentCalculationModel.GetConformityNeededToRecruitPrisoner(character);
                        float num = (float)party.PrisonRoster.GetElementXp(character);
                        int elementNumber = party.PrisonRoster.GetElementNumber(character);
                        return Math.Min(MBMath.Floor(num / (float)conformityNeededToRecruitPrisoner), elementNumber);
                }即可招募英雄。如果想要把英雄招募成追随者的话可以修改TaleWorlds.CampaignSystem.SandBox.CampaignBehaviors.RecruitPrisonersCampaignBehavior.OnMainPartyPrisonerRecruited。
private void OnMainPartyPrisonerRecruited(FlattenedTroopRoster flattenedTroopRosters)

俘虏招完了,我们想快点升级部队
AddXpToTroopAtIndex方法控制部队经验获得。在xpAmount后面加上*x即可使经验获得变为原先的x倍
array.Xp = array.Xp + xpAmount;但是有的部队升级需要马或者战马,买不到怎么办
TaleWorlds.CampaignSystem.SandBox.GameComponents.DefaultPartyTroopUpgradeModel.DoesPartyHaveRequiredItemsForUpgrade方法改为return true;
TaleWorlds.CampaignSystem.PartyUpgrader.UpgradeReadyTroops删除下面两段,升级不再需要物品
if (party.Owner != null && party.Owner.Clan == Clan.PlayerClan && elementCopyAtIndex.Character.UpgradeTargets.UpgradeRequiresItemFromCategory != null)//本段内容全部删掉
                                                      {
                                                                flag = false;
                                                                int num5 = 0;
                                                                foreach (ItemRosterElement itemRosterElement in party.ItemRoster)
                                                                {
                                                                        if (itemRosterElement.EquipmentElement.Item.ItemCategory == characterObject.UpgradeRequiresItemFromCategory)
                                                                        {
                                                                              num5 += itemRosterElement.Amount;
                                                                              flag = true;
                                                                              if (num5 >= num3)
                                                                              {
                                                                                        break;
                                                                              }
                                                                        }
                                                                }
                                                                if (flag)
                                                                {
                                                                        num3 = Math.Min(num5, num3);
                                                                }
                                                      }if (party.Owner != null && party.Owner.Clan == Clan.PlayerClan && item.UpgradeRequiresItemFromCategory != null)//本段内容全部删掉
                                                      {
                                                                int num10 = num8;
                                                                foreach (ItemRosterElement itemRosterElement2 in party.ItemRoster)
                                                                {
                                                                        if (itemRosterElement2.EquipmentElement.Item.ItemCategory == item.UpgradeRequiresItemFromCategory)
                                                                        {
                                                                              int num11 = Math.Min(num10, itemRosterElement2.Amount);
                                                                              party.ItemRoster.AddToCounts(itemRosterElement2.EquipmentElement.Item, -num11);
                                                                              num10 -= num11;
                                                                              if (num10 == 0)
                                                                              {
                                                                                        break;
                                                                              }
                                                                        }
                                                                }
                                                      }技能升级也要跟上,TaleWorlds.CampaignSystem.HeroDeveloper.AddSkillXp方法给出了经验获得,下面代码中的两个3f即为经验获得倍数,可以自己修改需要的倍数
if (rawXp <= 0f)
                        {
                              return;
                        }
                        if (isAffectedByFocusFactor)
                        {
                              this.GainRawXp(rawXp * 3f, shouldNotify);
                        }
                        float num = rawXp * 3f * Campaign.Current.Models.GenericXpModel.GetXpMultiplier(this.Hero);每级1个专精点,0.25个属性点是不是不太够用?OnGainLevel方法给出了点数获得,将this.UnspentFocusPoints += Campaign.Current.Models.CharacterDevelopmentModel.FocusPointsPerLevel;
if (this.Hero.Level % Campaign.Current.Models.CharacterDevelopmentModel.LevelsPerAttributePoint == 0)
{
this.UnspentAttributePoints++;
}
CampaignEventDispatcher.Instance.OnHeroLevelledUp(this.Hero, shouldNotify);

改为下面的代码,即可每级获得一个属性点两个专精点this.UnspentFocusPoints += Campaign.Current.Models.CharacterDevelopmentModel.FocusPointsPerLevel * 5;
                        this.UnspentAttributePoints ++;
                        CampaignEventDispatcher.Instance.OnHeroLevelledUp(this.Hero, shouldNotify);
晚上继续更新



无上祖神 发表于 2021-10-13 22:16

明天再更新其它的内容

无上祖神 发表于 2021-10-14 09:46

部队和升级已更新

无上祖神 发表于 2021-10-20 11:36

没人回复,不更新了:(

3dm_16496923 发表于 2021-10-20 18:26

还有呢,我想要修改同伴上限

无上祖神 发表于 2021-10-20 21:15

3dm_16496923 发表于 2021-10-20 18:26
还有呢,我想要修改同伴上限

同伴上限在TaleWorlds.CampaignSystem.SandBox.GameComponents.DefaultClanTierModel.GetCompanionLimitFromTier
把return改成想要的同伴上限即可,也可以return clanTier * 5,这样上限就是家族等级*5
它上面还有一个GetPartyLimitForTier,是部队支数上限,在return MathF.Round(explainedNumber.ResultNumber);上面加一行explainedNumber.Add(explainedNumber.ResultNumber * 4f, null, null);,这里*4f就代表部队数量变为五倍

3dm_16496923 发表于 2021-10-21 09:24

请问家族人数有没有人口上限,怎么改家族上限呢,还有妻子上限,寿命上限,子女上限

3dm_16496923 发表于 2021-10-21 09:45

请问怎么让玩家属性突破1000,340太少了

无上祖神 发表于 2021-10-21 11:59

3dm_16496923 发表于 2021-10-21 09:24
请问家族人数有没有人口上限,怎么改家族上限呢,还有妻子上限,寿命上限,子女上限 ...

妻子上限要改的东西太多,不如直接弄一个mod,寿命的话TaleWorlds.CampaignSystem.SandBox.GameComponents.DefaultAgeModel是年龄模块,BecomeOldAge开始衰老,MaxAge最大寿命。或者想改死亡可能性的话就是TaleWorlds.CampaignSystem.SandBox.GameComponents.Map.DefaultHeroDeathProbabilityCalculationModel.CalculateHeroDeathProbabilityInternal。

3dm_16496923 发表于 2021-10-21 12:05

那怎么修改玩家属性上限呢

无上祖神 发表于 2021-10-21 12:23

3dm_16496923 发表于 2021-10-21 09:45
请问怎么让玩家属性突破1000,340太少了

TaleWorlds.CampaignSystem.SandBox.GameComponents.DefaultCharacterDevelopmentModel.CalculateLearningLimit限制技能上限是(属性点-1)*10+专精点*30,修改这个上限就可以
CalculateLearningRate是技能学习速度:20/(10+角色等级)*(1+0.4*属性点+专精点),修改这个能改变技能升级速度

goat-newbie 发表于 2021-10-21 13:03

怀念旧版本的存档修改器,比风灵月影吊

3dm_16496923 发表于 2021-10-21 14:00

那个武器修改比例能不能改成更大的,是改后面的25吗

3dm_16496923 发表于 2021-10-21 14:19

TaleWorlds.Core.Crafting.CalculateStats这个文件并没有找到

3dm_16496923 发表于 2021-10-21 15:09

实在是找不到修改武器属性的文件,那个文件被隐藏了吗

hujin11 发表于 2021-10-21 17:23

无上祖神 发表于 2021-10-21 19:55

hujin11 发表于 2021-10-21 17:23
大佬告知下工坊上限,竞技场经验 金币哪里修改??
还有上面部队招募速度是这样吗?
public override int ...

是这样:return MBMath.Round(num)*5;


无上祖神 发表于 2021-10-21 19:55

hujin11 发表于 2021-10-21 17:23
大佬告知下工坊上限,竞技场经验 金币哪里修改??
还有上面部队招募速度是这样吗?
public override int ...

工坊上限指的是什么?竞技场没研究,等我明天看看

hujin11 发表于 2021-10-21 19:59

3dm_16496923 发表于 2021-10-21 20:02

请问TaleWorlds.Core.Crafting.CalculateStats文件在哪

hujin11 发表于 2021-10-21 20:02

无上祖神 发表于 2021-10-21 21:33

3dm_16496923 发表于 2021-10-21 20:02
请问TaleWorlds.Core.Crafting.CalculateStats文件在哪

是TaleWorlds.CampaignSystem.dll和TaleWorlds.Core.dll这两个文件,里面有TaleWorlds.Core.Crafting.CalculateStats这个命名空间

无上祖神 发表于 2021-10-21 21:34

hujin11 发表于 2021-10-21 20:02
为什么不能编译!

你这个是不是用了别的mod啊,我看到了几个框架的命名空间

无上祖神 发表于 2021-10-21 21:41

hujin11 发表于 2021-10-21 19:59
买工厂我只能买5个,可能和家族等级有关。

TaleWorlds.CampaignSystem.SandBox.GameComponents.DefaultWorkshopModel.GetMaxWorkshopCountForPlayer
return多少就能买多少

3dm_16496923 发表于 2021-10-21 23:12

无上祖神 发表于 2021-10-21 21:33
是TaleWorlds.CampaignSystem.dll和TaleWorlds.Core.dll这两个文件,里面有TaleWorlds.Core.Crafting.Cal ...

可是我没找到这个文件

hujin11 发表于 2021-10-22 12:33

hujin11 发表于 2021-10-22 12:35

3dm_16496923 发表于 2021-10-22 17:06

请问如何修改武器属性,我想修改弓弩的装填速度

无上祖神 发表于 2021-10-22 20:33

3dm_16496923 发表于 2021-10-22 17:06
请问如何修改武器属性,我想修改弓弩的装填速度

C:\Game\Mount & Blade II Bannerlord\Modules\SandBoxCore\ModuleData\spitems\weapons.xml
里面是预设的各种武器数据

luoqi611 发表于 2021-10-22 23:54

俘虏了了很多英雄那个参数还是有问题,根本修改不了,
页: [1] 2 3
查看完整版本: 一些有趣的文件修改