骑马与砍杀中文站论坛

标题: 领主实际属性与设定属性不一致的原因 [打印本页]

作者: rubik    时间: 2016-10-15 18:45
标题: 领主实际属性与设定属性不一致的原因
本帖最后由 rubik 于 2016-10-16 01:42 编辑

答案是:年龄。  游戏开始的时候,游戏的家族系统就会随机分配领主,夫人之间的关系,比如父子,配偶,子女,亲戚之类的关系,然后自动设定领主(包括夫人)的年龄。 问题就出在领主的年龄上。

先打开module_scripts.py,找到“init_troop_age”,这个就是设定年龄的。

        ("init_troop_age",
        [
        (store_script_param, ":troop_no", 1),
        (store_script_param, ":age", 2), #minimum 20
        
        (try_begin),
                (gt, ":age", 20),
                (troop_set_slot, ":troop_no", slot_troop_age, 20),
        (else_try),
                (troop_set_slot, ":troop_no", slot_troop_age, ":age"),
        (try_end),
        
        (store_sub, ":years_to_age", ":age", 20),
    (troop_set_age, ":troop_no", 0),
        
        (try_begin),
                (gt, ":years_to_age", 0),
                (try_for_range, ":unused", 0, ":years_to_age"),
                        (call_script, "script_age_troop_one_year", ":troop_no"),
                (try_end),
        (try_end),        
               
        ]),

看下来,也没有发现什么问题。那就继续看它引用的script,即age_troop_one_year。
        #This is probably unnecessarily complicated, but can support a multi-generational mod
        ("age_troop_one_year",
    [
        (store_script_param, ":troop_no", 1),

        (troop_get_type, ":is_female", ":troop_no"),
        
        (troop_get_slot, ":age", ":troop_no", slot_troop_age),
        (troop_get_slot, ":appearance", ":troop_no", slot_troop_age_appearance),
        
        (val_add, ":age", 1),
        (store_random_in_range, ":addition", 1, 5),

        (try_begin),
                (eq, ":is_female", 1),
#                (val_add, ":addition", 2), #the women's age slider seems to produce less change than the male one - commented out: makes women look too old.
        (try_end),
        
        (val_add, ":appearance", ":addition"),
        (try_begin),
                (gt, ":age", 45),
                (store_attribute_level, ":strength", ":troop_no", ca_strength),
                (store_attribute_level, ":agility", ":troop_no", ca_agility),
                (store_random_in_range, ":random", 0, 50), #2% loss brings it down to about 36% by age 90, but of course can be counteracted by new level gain
                (try_begin),
                        (lt, ":random", ":strength"),
                        (troop_raise_attribute, ":troop_no", ca_strength, -1),
                (try_end),
                (try_begin),
                        (lt, ":random", ":agility"),
                        (troop_raise_attribute, ":troop_no", ca_agility, -1),
                (try_end),
        (try_end),

        (val_clamp, ":appearance", 1, 100),
        
        (troop_set_slot, ":troop_no", slot_troop_age, ":age"),
        (troop_set_slot, ":troop_no", slot_troop_age_appearance, ":appearance"),
        (troop_set_age, ":troop_no", ":appearance"),
        ]),

问题的症结已经很明显展现出来了,领主的岁数大于45的时候,力量和敏捷可能会随机-1,具体的看代码里的条件。关键问题在于,age_troop_one_year不止执行一次,而是(领主年龄-20)次。 领主年龄小于等于45岁的时候,没什么问题。 大于45岁的时候,每执行一次age_troop_one_year,力量和敏捷就有可能会-1。比如某个领主50岁,则有5次机会使得力量和敏捷-1。

力量和敏捷是分开判定的,可能每次两者都-1,可能只有一者-1,也有可能两者都不-1。

总体来说,只有力量和敏捷受了影响,智力和魅力不受影响。 敏捷降低,影响不大,而力量降低则影响很大,很多盔甲和武器都是要求力量的,力量小了领主就装备不上。 于是就会看到有的领主上了战场,盔甲穿不上,就穿便装。武器拿不了,就空手上阵的。


作者: rubik    时间: 2016-10-15 18:55
本帖最后由 rubik 于 2016-10-15 22:49 编辑

具体的例子看这个帖子:
http://bbs.mountblade.com.cn/thread-470724-1-1.html
比较极端,某个领主的力量被扣得只剩6点了。 第一是因为年龄大,第二是运气太背,每次随机的时候都扣了力量,扣了10次力量。

那个帖子里板凳和报纸上的代码都可以作废了。因为我当时并没有搞清楚是什么原因,以为是属性总和不变,几个属性随机分配。现在看来不是,而是智力和魅力没变,力量和敏捷随机减少。不要急着注释相关的代码,毕竟人超过一定岁数,力量和敏捷下降也是很正常的事情。我们要做的是避免降得太离谱了。 至于怎么降低随机减力量和敏捷的影响,可以在age_troop_one_year里加一些限制,比如力量降低到多少,就不能再降了。敏捷方面可以不管。

我的做法是,力量和敏捷,一次只判定一种,避免力量和敏捷同时降低。而且这种判定有偏向,1/3的机会判定为力量,2/3判定为敏捷。判定为某一种之后,再结合原有的条件,决定是否-1。 一般领主都是15~20点力量,随机数的范围是0-50,降属性的几率为30%~40%。
作者: sunary100    时间: 2016-10-15 22:42
领主的力量属性应该不算太低,现在游戏中力量好像就15的要求以领主的属性应该不会低于这个数吧
作者: rubik    时间: 2016-10-15 22:46
本帖最后由 rubik 于 2016-10-15 22:47 编辑
sunary100 发表于 2016-10-15 22:42
领主的力量属性应该不算太低,现在游戏中力量好像就15的要求以领主的属性应该不会低于这个数吧

你没看完全文吧。 开局的时候,游戏会根据领主的年龄,随机降低力量和敏捷。沙发那个帖子里就有例子,我亲自遇到,有个年纪大的领主从16力量,被扣得只剩6力量。
作者: sunary100    时间: 2016-10-15 22:55
rubik 发表于 2016-10-15 22:46
你没看完全文吧。 开局的时候,游戏会根据领主的年龄,随机降低力量和敏捷。沙发那个帖子里就有例子,我亲 ...

我看全了,只是没有想到会扣那么多
作者: yk199810    时间: 2016-10-16 13:24
这扣的太可怕了
作者: 古月一江    时间: 2016-11-1 09:33
我的做法是,力量和敏捷,一次只判定一种,避免力量和敏捷同时降低。而且这种判定有偏向,1/3的机会判定为力量,2/3判定为敏捷。判定为某一种之后,再结合原有的条件,决定是否-1。 一般领主都是15~20点力量,随机数的范围是0-50,降属性的几率为30%~40%。

我感觉
(store_random_in_range, ":random", 0, 50), 改成
(store_random_in_range, ":random", 10, 50), 即可。
作者: hushuailiner2    时间: 2016-11-12 19:50
又学会一招!!!
作者: 如何救个命    时间: 2016-11-12 22:14
前段时间学习mod制作基础时候看的那个教程里面有写到设定的兵种会随机加其赋予等级-1的技能点,但是我在游戏里新建了一个npc,却和py代码里设定的一样的属性和技能点,一直好奇为什么原作者会写这个注意,今天看到这样的研究感到很有意思。
收藏了,以后慢慢看,很久远前的一份讲spot的还没看完呢。
支持楼主,加油。
作者: M3小蘑菇    时间: 2016-11-30 23:23
貌似有子女的领主年龄普遍偏大啊,最大的开局就有六十多岁,无子女的领主也有可能开局就三十多岁了
作者: mouse911    时间: 2016-11-30 23:38
原来骑砍的年龄还是有用处的啊




欢迎光临 骑马与砍杀中文站论坛 (https://bbs.mountblade.com.cn/) Powered by Discuz! X3.4