骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

搜索
购买CDKEY 小黑盒加速器
查看: 13292|回复: 11

[版主推荐] 贴近真实的领主逃回自己主城的时间机制

[复制链接]

949

主题

1万

回帖

1万

积分

侯爵[超级版主]

枢机主教

Rank: 8Rank: 8Rank: 8Rank: 8

UID
45575
第纳尔
41693
精华
20
互助
1060
荣誉
584
贡献
1796
魅力
1699
注册时间
2007-10-24

骑砍中文站APP会员勋章元老骑士勋章原版正版勋章战团正版勋章火与剑正版勋章拿破仑正版勋章维京征服正版勋章骑士美德之英勇勋章[杰出会员活跃勋章]骑士美德之大无畏勋章[杰出会员高级活跃勋章]骑士美德之仁慈勋章[杰出会员互助勋章]骑士美德之侠义勋章[杰出会员高级互助勋章]骑士美德之谦恭勋章[杰出会员财富勋章]骑士美德之公正勋章[杰出会员高级财富勋章]骑士美德之忠诚勋章[杰出会员精华勋章]骑士美德之正义勋章[杰出会员荣誉勋章]骑士美德之荣耀勋章[杰出会员高级荣誉勋章]骑士美德之圣洁勋章[杰出会员高级精华勋章]杰出汉化小组成员勋章骑士美德之慷慨勋章骑士荣誉之原版汉化勋章骑士荣誉之战团汉化勋章骑士美德之高贵勋章骑士美德之奉献勋章汉匈决战正版勋章

鲜花(2606) 鸡蛋(8)
发表于 2018-1-22 21:39:58 | 显示全部楼层 |阅读模式
本帖最后由 rubik 于 2018-1-22 22:14 编辑

很多人可能都发现了一个现象,领主战败之后,不管是哪国的,不管战败地点离自己的主城远还是近,都是同一个时刻回城。我的MOD里,这一点表现得尤其明显,领主回城多半会从城里取兵,取兵信息一下就刷屏了,各国领主的取兵信息都有。其他MOD领主回城都不取兵,较难发现,但领主同时逃回自己主城是一个不以MOD为转移的事实。原因就在module_simple_triggers.py里的下面这个触发器,时间设定上很粗糙,就是每48小时检测一次,只要同时满足两个条件(没有被俘,没有带队)的领主,到了检测的时间点,就会在这个时间点全部刷到各自的主城里面。 很显然,在家门口战败,和不远万里深入敌后战败,战败时间相差不大,在同一个检测周期内的话,所有战败领主都会是在同一个时刻逃回各自的主城,这非常不合理,对守土的一方也非常不公平。

# Respawn hero party after kingdom hero is released from captivity.
  (48,
   [
       (try_for_range, ":troop_no", active_npcs_begin, active_npcs_end),
         (troop_slot_eq, ":troop_no", slot_troop_occupation, slto_kingdom_hero),

         (str_store_troop_name, s1, ":troop_no"),

         (neg|troop_slot_ge, ":troop_no", slot_troop_prisoner_of_party, 0),
         (neg|troop_slot_ge, ":troop_no", slot_troop_leaded_party, 1),

         (store_troop_faction, ":cur_faction", ":troop_no"),
         (try_begin),
           (eq, ":cur_faction", "fac_outlaws"), #Do nothing
         (else_try),         
           (try_begin),
             (eq, "$cheat_mode", 2),
             (str_store_troop_name, s4, ":troop_no"),
             (display_message, "str_debug__attempting_to_spawn_s4"),
           (try_end),

           (call_script, "script_cf_select_random_walled_center_with_faction_and_owner_priority_no_siege", ":cur_faction", ":troop_no"),#Can fail
           (assign, ":center_no", reg0),

           (try_begin),
             (eq, "$cheat_mode", 2),            
             (str_store_party_name, s7, ":center_no"),
             (str_store_troop_name, s0, ":troop_no"),
             (display_message, "str_debug__s0_is_spawning_around_party__s7"),
           (try_end),

           (call_script, "script_create_kingdom_hero_party", ":troop_no", ":center_no"),

           (try_begin),
             (eq, "$g_there_is_no_avaliable_centers", 0),
             (party_attach_to_party, "$pout_party", ":center_no"),
           (try_end),

           #new
           #(troop_get_slot, ":party_no", ":troop_no", slot_troop_leaded_party),
                   #(call_script, "script_npc_decision_checklist_party_ai", ":troop_no"), #This handles AI for both marshal and other parties               
                   #(call_script, "script_party_set_ai_state", ":party_no", reg0, reg1),
                   #new end

           (troop_get_slot, ":party_no", ":troop_no", slot_troop_leaded_party),
           (call_script, "script_party_set_ai_state", ":party_no", spai_holding_center, ":center_no"),           

         (else_try),
           (neg|faction_slot_eq, ":cur_faction", slot_faction_state, sfs_active),
           (try_begin),
             (is_between, ":troop_no", kings_begin, kings_end),
             (troop_set_slot, ":troop_no", slot_troop_change_to_faction, "fac_commoners"),
           (else_try),
             (store_random_in_range, ":random_no", 0, 100),
             (lt, ":random_no", 10),
             (call_script, "script_cf_get_random_active_faction_except_player_faction_and_faction", ":cur_faction"),
             (troop_set_slot, ":troop_no", slot_troop_change_to_faction, reg0),
           (try_end),
         (try_end),
       (try_end),
    ]),

所以我引入了一个机制,每隔4个小时,寻找一下所有领主的下落,有下落的话,就重新记录一遍领主出现在大地图上的时间和位置。 如果领主战败了,或者从监狱逃跑,或者被敌人释放,领主就会从大地图上消失,失踪了。这种情况下,领主在地图上的时间和位置就不会更新了,失踪之前记录下的时间和位置就是领主最后一次出现在在大地图上的时间和位置。 然后就可以根据领主失踪前的位置和领主主城的位置,来计算回城需要的时间,再加上失踪的时刻,就是领主最终回城的时刻。每4小时检测一次,如果当前时刻小于领主最终回城的时刻,那么就算领主满足那两个条件(没有被俘,没有带队)也不会刷出,还需要再等4个小时,再次检测,直到当前时刻大于领主回城的时刻,领主才会刷出。

整体的代码结构都修改了,那我就直接贴整段修改后的代码,用的时候直接整段替换。黑色加粗的地方是重点的地方。

  # Respawn hero party after kingdom hero is released from captivity.
  ## CC
  (4,
   [
       (try_for_range, ":troop_no", active_npcs_begin, active_npcs_end),
         (troop_slot_eq, ":troop_no", slot_troop_occupation, slto_kingdom_hero),
         (str_store_troop_name, s1, ":troop_no"),
         
         (try_begin), # can find troop's position
           (this_or_next|troop_slot_ge, ":troop_no", slot_troop_leaded_party, 1),
           (troop_slot_ge, ":troop_no", slot_troop_prisoner_of_party, 0),
           (try_begin),
             (troop_get_slot, ":party_no", ":troop_no", slot_troop_leaded_party),
             (ge, ":party_no", 1),
             (assign, ":relevant_party", ":party_no"),
           (else_try),
             (troop_get_slot, ":cur_prisoner_of_party", ":troop_no", slot_troop_prisoner_of_party),
             (ge, ":cur_prisoner_of_party", 0),
             (assign, ":relevant_party", ":cur_prisoner_of_party"),
           (try_end),
           # record last_position_game_hours and last_position_closest_center
           (store_current_hours, ":last_position_hours"),
           (troop_set_slot, ":troop_no", slot_troop_last_position_game_hours, ":last_position_hours"),
           (call_script, "script_get_closest_center", ":relevant_party"),
           (assign, ":closest_center_no", reg0),
           (troop_set_slot, ":troop_no", slot_troop_last_position_closest_center, ":closest_center_no"),

         (else_try),
           (neg|troop_slot_ge, ":troop_no", slot_troop_prisoner_of_party, 0),
           (neg|troop_slot_ge, ":troop_no", slot_troop_leaded_party, 1),

           (store_troop_faction, ":cur_faction", ":troop_no"),
           (try_begin),
             (eq, ":cur_faction", "fac_outlaws"), #Do nothing
           (else_try),         
             (try_begin),
               (eq, "$cheat_mode", 2),
               (str_store_troop_name, s4, ":troop_no"),
               (display_message, "str_debug__attempting_to_spawn_s4"),
             (try_end),
            
             (call_script, "script_cf_select_random_walled_center_with_faction_and_owner_priority_no_siege", ":cur_faction", ":troop_no"),#Can fail
             (assign, ":center_no", reg0),

             (try_begin),
               (eq, "$cheat_mode", 2),
               (str_store_party_name, s7, ":center_no"),
               (str_store_troop_name, s0, ":troop_no"),
               (display_message, "str_debug__s0_is_spawning_around_party__s7"),
             (try_end),
              
             (try_begin),
               (store_current_hours, ":cur_hours"),
               (troop_get_slot, ":last_position_closest_center", ":troop_no", slot_troop_last_position_closest_center),
               (troop_get_slot, ":last_position_hours", ":troop_no", slot_troop_last_position_game_hours),
               (store_distance_to_party_from_party, ":distance_troop_to_move", ":last_position_closest_center", ":center_no"),
               (store_div, ":need_hours", ":distance_troop_to_move", 4),
               (store_add, ":next_respawn_hours", ":last_position_hours", ":need_hours"),
               (ge, ":cur_hours", ":next_respawn_hours"),

               
               (call_script, "script_create_kingdom_hero_party", ":troop_no", ":center_no"),
               (try_begin),
                 (eq, "$g_there_is_no_avaliable_centers", 0),
                 (party_attach_to_party, "$pout_party", ":center_no"),
               (try_end),
               
               #new
               #(troop_get_slot, ":party_no", ":troop_no", slot_troop_leaded_party),
           #(call_script, "script_npc_decision_checklist_party_ai", ":troop_no"), #This handles AI for both marshal and other parties               
           #(call_script, "script_party_set_ai_state", ":party_no", reg0, reg1),
           #new end

               (troop_get_slot, ":party_no", ":troop_no", slot_troop_leaded_party),
               (call_script, "script_party_set_ai_state", ":party_no", spai_holding_center, ":center_no"),
             (try_end),
           (else_try),
             (neg|faction_slot_eq, ":cur_faction", slot_faction_state, sfs_active),
             (try_begin),
               (is_between, ":troop_no", kings_begin, kings_end),
               (troop_set_slot, ":troop_no", slot_troop_change_to_faction, "fac_commoners"),
             (else_try),
               (store_random_in_range, ":random_no", 0, 100),
               (lt, ":random_no", 10),
               (call_script, "script_cf_get_random_active_faction_except_player_faction_and_faction", ":cur_faction"),
               (troop_set_slot, ":troop_no", slot_troop_change_to_faction, reg0),
             (try_end),
           (try_end),
         (try_end),
       (try_end),
    ]),
  ## CC

其中用到了两个新slot,需要在module_constants.py里面进行定义。
slot_troop_last_position_closest_center   = 406
slot_troop_last_position_game_hours     = 407

这是我MOD里的数值,具体的视自己MOD的情况而定。首先slot编号不能和已经存在的关于troop的slot冲突,其次slot的编号尽量小,这样可以使得存档更小,也使得MOD运行更流畅。

这样修改之后就合理多了。战败回城或从监狱放出或者逃走是根据距离来的,同一阵营,偏远主城的领主回城晚,前线主城的领主回城早。侵略者战败回城晚,守土者战败回城早,有利于守土者。那种大地图对角线,战败后回城的领主,可能一个星期才能回城,这比原版48小时,也就是两天要长得多。而就在城门口被击败的领主,最多4个小时就转身回城。按平均距离算,多数领主是在十几个小时回城,比原版最长48小时要短,战争节奏更加紧凑。

4个小时检测一次,间隔是比较合适的。每1小时检测一次,虽然更准,但是会消耗更多资源。检测时间间隔太长,距离相差比较大的可能都是同一时间回城,就没有区分度了。 再加上只是获取的领主失踪前,离他最近的哪一个center,而不是领主本身的位置坐标,换句话说就是获取的一个近似位置,所以这个机制也只是贴近真实,也只需要是贴近真实,不需要完全真实。

@Eason_hdy

评分

参与人数 2第纳尔 +100 互助 +5 魅力 +1 收起 理由
蛋清 + 70 + 3 + 1 原创内容,值得鼓励!
小韦飞狼 + 30 + 2 您的帖子很有价值!

查看全部评分

鲜花鸡蛋

ㄡPredoome々  在2019-8-26 01:37  送朵鲜花  并说:R大R大
15653910782  在2019-5-23 10:53  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下
15653910782  在2019-5-23 10:53  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下
15653910782  在2019-5-23 10:53  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下
15653910782  在2019-5-23 10:53  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下
15653910782  在2019-5-23 10:53  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下
Eason_hdy  在2018-8-14 10:43  送朵鲜花  并说:好久没来,看到R大@我了,好激动。
y74k8  在2018-7-25 09:46  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下
13051108791  在2018-4-29 12:48  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下
erb  在2018-4-7 04:27  送朵鲜花  并说:我非常同意你的观点,送朵鲜花鼓励一下
rubik

949

主题

1万

回帖

1万

积分

侯爵[超级版主]

枢机主教

Rank: 8Rank: 8Rank: 8Rank: 8

UID
45575
第纳尔
41693
精华
20
互助
1060
荣誉
584
贡献
1796
魅力
1699
注册时间
2007-10-24

骑砍中文站APP会员勋章元老骑士勋章原版正版勋章战团正版勋章火与剑正版勋章拿破仑正版勋章维京征服正版勋章骑士美德之英勇勋章[杰出会员活跃勋章]骑士美德之大无畏勋章[杰出会员高级活跃勋章]骑士美德之仁慈勋章[杰出会员互助勋章]骑士美德之侠义勋章[杰出会员高级互助勋章]骑士美德之谦恭勋章[杰出会员财富勋章]骑士美德之公正勋章[杰出会员高级财富勋章]骑士美德之忠诚勋章[杰出会员精华勋章]骑士美德之正义勋章[杰出会员荣誉勋章]骑士美德之荣耀勋章[杰出会员高级荣誉勋章]骑士美德之圣洁勋章[杰出会员高级精华勋章]杰出汉化小组成员勋章骑士美德之慷慨勋章骑士荣誉之原版汉化勋章骑士荣誉之战团汉化勋章骑士美德之高贵勋章骑士美德之奉献勋章汉匈决战正版勋章

鲜花(2606) 鸡蛋(8)
 楼主| 发表于 2018-1-22 21:46:19 | 显示全部楼层
本帖最后由 rubik 于 2018-1-22 22:01 编辑

用到了两个slot,一个记录时间,一个记录位置。位置是二维的,一般需要两个slot,我是用离领主最近的center来近似记录领主的位置。只用记录下center的ID,一个slot就够了。领主逃回主城的速度,我设定为每小时4个单位。 区分白夜有点麻烦,按单骑的速度又太快了,还要考虑地形,绕路等因素。综合白天晚上及各种因素,再考虑游戏性,定为每小时4个单位,也就是4.0的速度。

细心的人会发现,这个触发器不光是为了处理领主回城的问题,最下面的代码还顺带处理了灭国之后,领主转投的问题。我虽然没有修改这段代码,但我修改了触发器的整体检测时间,由48小时改为4个小时。 这就意味着,领主的转投速度加快了很多倍。从代码可以看出,被灭国的领主,每个检测周期,只有10%的几率会转投其他国家,90%的几率选择继续等待。90%的等待几率,再加上48小时一次的检测频率,很可能几个月都不见某些领主成功转投其他国家,玩家都快以为这些领主完全消失了。 改成每4个小时检测一次,虽然每次的几率还是10%,但频率一高,领主也能快速成功转投其他国家了,避免玩家傻等很长时间都等不到某些领主转投。 我的MOD里有复辟,转投这一点就变得很重要,如果转投太慢了,很可能灭国的领主还没有转投成功,国家就复辟了,这些领主就不用转投了。
rubik

18

主题

1442

回帖

508

积分

皇家侍卫长[官方战队队长]

光辉骑士团[UTD]
战团ID:UTD_awe23

Rank: 6Rank: 6

UID
2102975
第纳尔
7304
精华
0
互助
10
荣誉
2
贡献
0
魅力
73
注册时间
2014-8-1

第十一届战团中国联赛征战勋章第十一届战团中国联赛铁骨勋章第一届梦幻联赛参与勋章第十届战团中国联赛征战勋章战团正版勋章骑士美德之英勇勋章[杰出会员活跃勋章]元老骑士勋章霸主正版勋章

鲜花(76) 鸡蛋(2)
发表于 2018-1-22 23:05:53 | 显示全部楼层
本帖最后由 BattleField 于 2018-1-22 23:08 编辑
rubik 发表于 2018-1-22 21:46
用到了两个slot,一个记录时间,一个记录位置。位置是二维的,一般需要两个slot,我是用离领主最近的center ...

记录位置可以考虑将X和Y一一映射到一个对应数值上面的方法(只要值域在引擎所允许的数值范围内),也只要一个slot


进一步讲,其实只要是数学意义上数值的储存,都可以考虑这种方式。

949

主题

1万

回帖

1万

积分

侯爵[超级版主]

枢机主教

Rank: 8Rank: 8Rank: 8Rank: 8

UID
45575
第纳尔
41693
精华
20
互助
1060
荣誉
584
贡献
1796
魅力
1699
注册时间
2007-10-24

骑砍中文站APP会员勋章元老骑士勋章原版正版勋章战团正版勋章火与剑正版勋章拿破仑正版勋章维京征服正版勋章骑士美德之英勇勋章[杰出会员活跃勋章]骑士美德之大无畏勋章[杰出会员高级活跃勋章]骑士美德之仁慈勋章[杰出会员互助勋章]骑士美德之侠义勋章[杰出会员高级互助勋章]骑士美德之谦恭勋章[杰出会员财富勋章]骑士美德之公正勋章[杰出会员高级财富勋章]骑士美德之忠诚勋章[杰出会员精华勋章]骑士美德之正义勋章[杰出会员荣誉勋章]骑士美德之荣耀勋章[杰出会员高级荣誉勋章]骑士美德之圣洁勋章[杰出会员高级精华勋章]杰出汉化小组成员勋章骑士美德之慷慨勋章骑士荣誉之原版汉化勋章骑士荣誉之战团汉化勋章骑士美德之高贵勋章骑士美德之奉献勋章汉匈决战正版勋章

鲜花(2606) 鸡蛋(8)
 楼主| 发表于 2018-1-23 09:55:56 来自手机 | 显示全部楼层
的确可以用类似位运算的方法将多个数值储存在一个数值上,再通过取余数以及除后取整来把多个数值分解出来。但这个方法比较麻烦,坐标还面临负数的问题。最简洁,执行效率最高的还是准备两个slot分别记录x和y,然后把两个坐标赋到某个临时部队,再获取这个临时部队到领主主城的距离。我顶楼的方法,获取离领主最近的center,运算次数繁多,执行效率并不高。

0

主题

7

回帖

2

积分

平民

Rank: 1

UID
2849747
第纳尔
75
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2017-7-2
鲜花(0) 鸡蛋(0)
发表于 2018-1-26 14:52:26 | 显示全部楼层
支持r大!!!!

949

主题

1万

回帖

1万

积分

侯爵[超级版主]

枢机主教

Rank: 8Rank: 8Rank: 8Rank: 8

UID
45575
第纳尔
41693
精华
20
互助
1060
荣誉
584
贡献
1796
魅力
1699
注册时间
2007-10-24

骑砍中文站APP会员勋章元老骑士勋章原版正版勋章战团正版勋章火与剑正版勋章拿破仑正版勋章维京征服正版勋章骑士美德之英勇勋章[杰出会员活跃勋章]骑士美德之大无畏勋章[杰出会员高级活跃勋章]骑士美德之仁慈勋章[杰出会员互助勋章]骑士美德之侠义勋章[杰出会员高级互助勋章]骑士美德之谦恭勋章[杰出会员财富勋章]骑士美德之公正勋章[杰出会员高级财富勋章]骑士美德之忠诚勋章[杰出会员精华勋章]骑士美德之正义勋章[杰出会员荣誉勋章]骑士美德之荣耀勋章[杰出会员高级荣誉勋章]骑士美德之圣洁勋章[杰出会员高级精华勋章]杰出汉化小组成员勋章骑士美德之慷慨勋章骑士荣誉之原版汉化勋章骑士荣誉之战团汉化勋章骑士美德之高贵勋章骑士美德之奉献勋章汉匈决战正版勋章

鲜花(2606) 鸡蛋(8)
 楼主| 发表于 2018-1-27 10:54:34 | 显示全部楼层
本帖最后由 rubik 于 2018-1-27 11:17 编辑

更新一个用坐标x和y来记录领主位置的代码。这个更准确,执行效率更高。更准确这一点可以忽略,因为提高的准确度并不算很多。重点是执行效率,之前搜索离领主最近的center,会把所有的center都和当前的领主计算一遍距离,选出最近的一个,我的MOD里面,有140多个center,也就是要执行140多次计算距离的操作。而下面的代码,直接记录坐标,就省下了那140多次的操作。

第一处加粗的地方很重要,是设定坐标精度的。设为1,就代表直接使用坐标的整数部分。为什么要加这一行,是因为设定精度是一个全局操作,很可能在presentation里面设定为1000,查看某个presentation然后切到大地图上的时候,没有还原为1,那么代码里的坐标,就会被放大1000倍,完全就是一个错的坐标。后面加粗的两处,就是使用坐标来记录领主位置并计算距离的代码。

红色部分处于注释状态,这是我写的测试代码,输出回城之后的领主,他上次出现的时间,回城需要的时间,还有当前的时间。以判断代码是否正常运行,以及回城时间是否长得很离谱。最下面蓝色的部分是灭国后,领主转投其他阵营的几率。由于我把判定周期从48小时改为4个小时,检测频率提高了12倍,变相大大提高了转投的成功率,所以我就把这个10%改为5%。

  # Respawn hero party after kingdom hero is released from captivity.
  ## CC
  (4,
   [   (set_fixed_point_multiplier, 1),
       (try_for_range, ":troop_no", active_npcs_begin, active_npcs_end),
         (troop_slot_eq, ":troop_no", slot_troop_occupation, slto_kingdom_hero),
         (str_store_troop_name, s1, ":troop_no"),
         
         (try_begin), # can find troop's position
           (this_or_next|troop_slot_ge, ":troop_no", slot_troop_leaded_party, 1),
           (troop_slot_ge, ":troop_no", slot_troop_prisoner_of_party, 0),
           (try_begin),
             (troop_get_slot, ":party_no", ":troop_no", slot_troop_leaded_party),
             (ge, ":party_no", 1),
             (assign, ":relevant_party", ":party_no"),
           (else_try),
             (troop_get_slot, ":cur_prisoner_of_party", ":troop_no", slot_troop_prisoner_of_party),
             (ge, ":cur_prisoner_of_party", 0),
             (assign, ":relevant_party", ":cur_prisoner_of_party"),
           (try_end),
           # record last_position_game_hours and last_position_x, last_position_y
           (store_current_hours, ":last_position_hours"),
           (troop_set_slot, ":troop_no", slot_troop_last_position_hours, ":last_position_hours"),
           (party_get_position, pos1, ":relevant_party"),
           (position_get_x, ":pos_x", pos1),
           (position_get_y, ":pos_y", pos1),
           (troop_set_slot, ":troop_no", slot_troop_last_position_x, ":pos_x"),
           (troop_set_slot, ":troop_no", slot_troop_last_position_y, ":pos_y"),

         (else_try),
           (neg|troop_slot_ge, ":troop_no", slot_troop_prisoner_of_party, 0),
           (neg|troop_slot_ge, ":troop_no", slot_troop_leaded_party, 1),

           (store_troop_faction, ":cur_faction", ":troop_no"),
           (try_begin),
             (eq, ":cur_faction", "fac_outlaws"), #Do nothing
           (else_try),         
             (try_begin),
               (eq, "$cheat_mode", 2),
               (str_store_troop_name, s4, ":troop_no"),
               (display_message, "str_debug__attempting_to_spawn_s4"),
             (try_end),
            
             (call_script, "script_cf_select_random_walled_center_with_faction_and_owner_priority_no_siege", ":cur_faction", ":troop_no"),#Can fail
             (assign, ":center_no", reg0),

             (try_begin),
               (eq, "$cheat_mode", 2),
               (str_store_party_name, s7, ":center_no"),
               (str_store_troop_name, s0, ":troop_no"),
               (display_message, "str_debug__s0_is_spawning_around_party__s7"),
             (try_end),
              
             (try_begin),
               (store_current_hours, ":cur_hours"),
               (troop_get_slot, ":pos_x", ":troop_no", slot_troop_last_position_x),
               (troop_get_slot, ":pos_y", ":troop_no", slot_troop_last_position_y),
               (position_set_x, pos1, ":pos_x"),
               (position_set_y, pos1, ":pos_y"),
               (party_set_position, "p_temp_party", pos1),
               (troop_get_slot, ":last_position_hours", ":troop_no", slot_troop_last_position_hours),
               (store_distance_to_party_from_party, ":distance_troop_to_move", "p_temp_party", ":center_no"),
               (store_div, ":need_hours", ":distance_troop_to_move", 4),
               (store_add, ":next_respawn_hours", ":last_position_hours", ":need_hours"),
               (ge, ":cur_hours", ":next_respawn_hours"),

               
               # ## test
               # (try_begin),
                 # (gt, ":last_position_hours", 0),
                 # (str_store_troop_name, s0, ":troop_no"),
                 # (assign, reg3, ":last_position_hours"),
                 # (assign, reg4, ":need_hours"),
                 # (assign, reg5, ":cur_hours"),
                 # (display_message, "@{s0}, last_position_hours: {reg3}, need {reg4} hours, cur_hours: {reg5}"),
               # (try_end),
               # ## test

               
               (call_script, "script_create_kingdom_hero_party", ":troop_no", ":center_no"),
               (try_begin),
                 (eq, "$g_there_is_no_avaliable_centers", 0),
                 (party_attach_to_party, "$pout_party", ":center_no"),
               (try_end),
               
               #new
               #(troop_get_slot, ":party_no", ":troop_no", slot_troop_leaded_party),
           #(call_script, "script_npc_decision_checklist_party_ai", ":troop_no"), #This handles AI for both marshal and other parties               
           #(call_script, "script_party_set_ai_state", ":party_no", reg0, reg1),
           #new end

               (troop_get_slot, ":party_no", ":troop_no", slot_troop_leaded_party),
               (call_script, "script_party_set_ai_state", ":party_no", spai_holding_center, ":center_no"),
             (try_end),
           (else_try),
             (neg|faction_slot_eq, ":cur_faction", slot_faction_state, sfs_active),
             (try_begin),
               (is_between, ":troop_no", kings_begin, kings_end),
               (troop_set_slot, ":troop_no", slot_troop_change_to_faction, "fac_commoners"),
             (else_try),
               (store_random_in_range, ":random_no", 0, 100),
               (lt, ":random_no", 5),
               (call_script, "script_cf_get_random_active_faction_except_player_faction_and_faction", ":cur_faction"),
               (troop_set_slot, ":troop_no", slot_troop_change_to_faction, reg0),
             (try_end),
           (try_end),
         (try_end),
       (try_end),
    ]),
  ## CC

用到的3个新slot。
slot_troop_last_position_hours       = 406
slot_troop_last_position_x           = 407
slot_troop_last_position_y           = 408
rubik

24

主题

3560

回帖

1095

积分

骑士

Rank: 4Rank: 4

UID
2781503
第纳尔
9816
精华
0
互助
4
荣誉
0
贡献
0
魅力
59
注册时间
2016-11-27

骑砍中文站APP会员勋章骑士美德之英勇勋章[杰出会员活跃勋章]霸主正版勋章元老骑士勋章战团正版勋章

鲜花(96) 鸡蛋(1)
发表于 2018-2-1 08:05:52 来自手机 | 显示全部楼层
领军者会引入这个机制吗

18

主题

39

回帖

17

积分

随仆

Rank: 1

UID
5336
第纳尔
713
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2007-2-1
鲜花(2) 鸡蛋(0)
发表于 2018-3-12 14:56:37 | 显示全部楼层
真是猛啊。工鞥合理。

15

主题

134

回帖

45

积分

扈从

Rank: 2Rank: 2

UID
2882878
第纳尔
404
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2017-10-9
鲜花(3) 鸡蛋(1)
发表于 2018-4-10 19:06:56 | 显示全部楼层
在下感慨良多。。 唯有用 666666666 来表达我的心情。

949

主题

1万

回帖

1万

积分

侯爵[超级版主]

枢机主教

Rank: 8Rank: 8Rank: 8Rank: 8

UID
45575
第纳尔
41693
精华
20
互助
1060
荣誉
584
贡献
1796
魅力
1699
注册时间
2007-10-24

骑砍中文站APP会员勋章元老骑士勋章原版正版勋章战团正版勋章火与剑正版勋章拿破仑正版勋章维京征服正版勋章骑士美德之英勇勋章[杰出会员活跃勋章]骑士美德之大无畏勋章[杰出会员高级活跃勋章]骑士美德之仁慈勋章[杰出会员互助勋章]骑士美德之侠义勋章[杰出会员高级互助勋章]骑士美德之谦恭勋章[杰出会员财富勋章]骑士美德之公正勋章[杰出会员高级财富勋章]骑士美德之忠诚勋章[杰出会员精华勋章]骑士美德之正义勋章[杰出会员荣誉勋章]骑士美德之荣耀勋章[杰出会员高级荣誉勋章]骑士美德之圣洁勋章[杰出会员高级精华勋章]杰出汉化小组成员勋章骑士美德之慷慨勋章骑士荣誉之原版汉化勋章骑士荣誉之战团汉化勋章骑士美德之高贵勋章骑士美德之奉献勋章汉匈决战正版勋章

鲜花(2606) 鸡蛋(8)
 楼主| 发表于 2018-4-29 18:30:34 | 显示全部楼层
我测试过了,效果很好。我用萨兰德的加米耶德堡,快速耗死了萨兰德。 具体就是先占领加米耶德堡,然后守城击败来攻的集团军,萨兰德由于是本土作战,战败后基本上几个小时就都回城了,不到一天时间,又拉了一队集团军来攻城。连续守城三次,击败三波集团军,不到10天,萨兰德就被极大削弱了。然后斯瓦迪亚和罗多克联合攻城拔寨,中途萨兰德出现叛乱,最后萨兰德极速灭亡。

就以前的情况来讲,玩家多半也是采取这个战略,但效果不好。原因就四个字:动态平衡。 一个国家的实力不是恒定的,而是处于一种动态平衡的状态,一方面对外战争会损耗国力,一方面随着时间推移国力慢慢增长。以前领主回城慢,给了各城以充分的征兵时间,国力较容易补充。而一旦国力消耗的速度明显快于恢复速度,国家就会快速灭亡。所以领主本土作战快速回城取兵是一把双刃剑,一方面可以快速集结兵力反扑,收回失地,另外一方面,如果连续多次攻一个城失败,就会加速国力的消耗,导致快速灭亡。
rubik

79

主题

4988

回帖

1671

积分

骑士长

暴风骑士团[SK]
战团ID:生锈的奥利奥

Rank: 5Rank: 5Rank: 5

UID
2127474
第纳尔
1808
精华
0
互助
20
荣誉
5
贡献
10
魅力
270
注册时间
2014-8-17

有生之年勋章战团正版勋章拿破仑正版勋章骑士美德之英勇勋章[杰出会员活跃勋章]骑砍中文站微博会员勋章骑友真人秀Ⅱ勋章汉匈决战正版勋章骑士美德之大无畏勋章[杰出会员高级活跃勋章]元老骑士勋章

鲜花(698) 鸡蛋(159)
发表于 2018-5-4 13:02:07 | 显示全部楼层
支持一下  领军者下版本加入吗

点评

1.439里面已经加入了。  发表于 2018-5-4 23:30
您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

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

GMT+8, 2024-4-19 12:57 , Processed in 0.138077 second(s), 32 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

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