骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

搜索
购买CDKEY 衣谷三国
查看: 5633|回复: 2

[讨论] 抛砖引玉:针对村子头人权望的一些探讨,修改

[复制链接]

1

主题

28

回帖

9

积分

平民

Rank: 1

UID
457843
第纳尔
240
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2011-6-26
鲜花(2) 鸡蛋(0)
发表于 2020-12-10 01:10:42 | 显示全部楼层 |阅读模式
本帖最后由 guojiye 于 2020-12-10 08:03 编辑

村庄头人的权望是出产贵族兵的基本要求。对于觉得抓强盗转换贵族/打了mod无法通过抓强盗来获得贵族兵来源的玩家来说,村庄头人是唯一的指望。所以权望的变动是中后期的核心竞争力之一。

头人影响力的变动会受到以下的影响(查看talewords.campaignsystem.dll读出来的):1.任务成功/失败
2.每日变动(CalculateDailyPowerChangeForHero 用dnspy或者类似软件直接搜这个关键词就行)

对村子头人来说,每日变动有以下几个因素组成:
1. 自然衰减(超过100后)。公式为(权望-100)/500
2. 每日自然+0.1
3. 如果头人支持的是统治家族,每日+1

所以简单可以看出:如果头人支持的是别的家族,那么影响力预期是150。支持统治家族则可以轻松超过200。所以“让头人支持统治家族”应该是玩家后期想要村庄出产贵族兵的主要目的。否则就只能疯狂刷任务了。

然而骑砍论坛的开发者也承认,虽然经过1.5.4的修正,在dailytick里会正确检查头人支持情况,不会只在开局时随机分配了。但即使100好感度,让头人转而支持玩家也是几乎不可能的任务。十几年大概有两三个这个比例。同样查看代码Taleworlds.CampaignSystem.Sandbox.CampaignBehaviors可知,头人支持变动有且只有两个原因:
1. 对于有支持者的头人,如果和支持者家族关系小于25,概率(25-关系)/500取消支持。如果关系小于0则直接取消。
2. 对于无支持者的头人,对于所有关系过50的家族过一遍,(关系-50)/2000的概率选择支持该家族。

结果就是:对于已经有支持者(大部分/绝大部分)的村子头人,无论玩家和其关系再好,只要头人和支持者关系超过25,那么无论如何也不会转为支持玩家/统治者家族。
在假设ai领主和头人关系增减只有任务(每次进出村子有大概0.1这样的概率完成任务)以及烧村的情况下,这解释了玩家为什么极难获得领地里支持玩家的头人,进而获得贵族村的情况。
using System;
using System.Collections.Generic;
using TaleWorlds.CampaignSystem.Actions;
using TaleWorlds.Core;
using MountAndBlade.CampaignBehaviors;
using TaleWorlds.Library;
using TaleWorlds.ObjectSystem;

namespace TaleWorlds.CampaignSystem.SandBox.CampaignBehaviors
{
        // Token: 0x020002A7 RID: 679
        public partial class UrbanCharactersCampaignBehavior : CampaignBehaviorBase
        {
                // Token: 0x06002838 RID: 10296 RVA: 0x000BDA18 File Offset: 0x000BBC18
                private void UpdateNotableSupport(Hero notable)
                {
                        if (notable.SupporterOf == null)
                        {
                                using (List<Clan>.Enumerator enumerator = Clan.All.GetEnumerator())
                                {
                                        while (enumerator.MoveNext())
                                        {
                                                Clan clan = enumerator.Current;
                                                int relation = notable.GetRelation(clan.Leader);
                                                if (relation > 50)
                                                {
                                                        float num = (float)(relation - 50) / 2000f;
                                                        if (MBRandom.RandomFloat < num)
                                                        {
                                                                notable.SupporterOf = clan;
                                                        }
                                                }
                                        }
                                        return;
                                }
                        }
                        int relation2 = notable.GetRelation(notable.SupporterOf.Leader);
                        if (relation2 < 0)
                        {
                                notable.SupporterOf = null;
                                return;
                        }
                        if (relation2 < 25)
                        {
                                float num2 = (float)(25 - relation2) / 500f;
                                if (MBRandom.RandomFloat < num2)
                                {
                                        notable.SupporterOf = null;
                                }
                        }                        if (notable.CurrentSettlement != null && notable.SupporterOf != notable.CurrentSettlement.OwnerClan)
                        {
                                int relation3 = notable.GetRelation(notable.CurrentSettlement.OwnerClan.Leader);
                                if (relation3 > 80)
                                        {
                                                float num = (float)(relation3 - 80) / 2000f;
                                                if (MBRandom.RandomFloat < num)
                                                {
                                                        notable.SupporterOf = notable.CurrentSettlement.OwnerClan;
                                                }
                                        }
                        }
                }
        }
}





中间的relation3字段就是我添加的。relation和relation2字段是原有的,未变动。以大概100-200天为预期可以将和统治者关系好(超过80)的头人争取过来。经测试可以达成预期(调大概率测的)
由于本人不会做成mod只能通过改dll的办法来实现。在此把自己的折腾经历说一下,方便有类似烦恼的玩家。也欢迎有大佬探讨/指点/把这个变成mod。


鲜花鸡蛋

laxm  在2021-2-2 00:12  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下
您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

Archiver|手机版|小黑屋|骑马与砍杀中文站

GMT+8, 2025-9-4 02:55 , Processed in 0.060041 second(s), 22 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表