一些有趣的文件修改
本帖最后由 无上祖神 于 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);
晚上继续更新
明天再更新其它的内容 部队和升级已更新
没人回复,不更新了:( 还有呢,我想要修改同伴上限 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就代表部队数量变为五倍
请问家族人数有没有人口上限,怎么改家族上限呢,还有妻子上限,寿命上限,子女上限 请问怎么让玩家属性突破1000,340太少了 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 09:45
请问怎么让玩家属性突破1000,340太少了
TaleWorlds.CampaignSystem.SandBox.GameComponents.DefaultCharacterDevelopmentModel.CalculateLearningLimit限制技能上限是(属性点-1)*10+专精点*30,修改这个上限就可以
CalculateLearningRate是技能学习速度:20/(10+角色等级)*(1+0.4*属性点+专精点),修改这个能改变技能升级速度
怀念旧版本的存档修改器,比风灵月影吊 那个武器修改比例能不能改成更大的,是改后面的25吗 TaleWorlds.Core.Crafting.CalculateStats这个文件并没有找到 实在是找不到修改武器属性的文件,那个文件被隐藏了吗 hujin11 发表于 2021-10-21 17:23
大佬告知下工坊上限,竞技场经验 金币哪里修改??
还有上面部队招募速度是这样吗?
public override int ...
是这样:return MBMath.Round(num)*5;
hujin11 发表于 2021-10-21 17:23
大佬告知下工坊上限,竞技场经验 金币哪里修改??
还有上面部队招募速度是这样吗?
public override int ...
工坊上限指的是什么?竞技场没研究,等我明天看看 请问TaleWorlds.Core.Crafting.CalculateStats文件在哪 3dm_16496923 发表于 2021-10-21 20:02
请问TaleWorlds.Core.Crafting.CalculateStats文件在哪
是TaleWorlds.CampaignSystem.dll和TaleWorlds.Core.dll这两个文件,里面有TaleWorlds.Core.Crafting.CalculateStats这个命名空间
hujin11 发表于 2021-10-21 20:02
为什么不能编译!
你这个是不是用了别的mod啊,我看到了几个框架的命名空间
hujin11 发表于 2021-10-21 19:59
买工厂我只能买5个,可能和家族等级有关。
TaleWorlds.CampaignSystem.SandBox.GameComponents.DefaultWorkshopModel.GetMaxWorkshopCountForPlayer
return多少就能买多少
无上祖神 发表于 2021-10-21 21:33
是TaleWorlds.CampaignSystem.dll和TaleWorlds.Core.dll这两个文件,里面有TaleWorlds.Core.Crafting.Cal ...
可是我没找到这个文件
请问如何修改武器属性,我想修改弓弩的装填速度 3dm_16496923 发表于 2021-10-22 17:06
请问如何修改武器属性,我想修改弓弩的装填速度
C:\Game\Mount & Blade II Bannerlord\Modules\SandBoxCore\ModuleData\spitems\weapons.xml
里面是预设的各种武器数据
俘虏了了很多英雄那个参数还是有问题,根本修改不了,