- 好友
 - 0
  
- 在线时间
 - 114 小时
  
- 最后登录
 - 2025-8-17
  
 
 
 
 
平民 
  
 
- UID
 - 650235
  
- 第纳尔
 - 228 
  
- 精华
 - 0
  
- 互助
 - 0 
  
- 荣誉
 - 0 
  
- 贡献
 - 0 
  
- 魅力
 - 2 
  
- 注册时间
 - 2012-2-7
  
 
  鲜花( 2)   鸡蛋( 0)  
 | 
 
 本帖最后由 aliang227 于 2025-9-15 02:42 编辑  
版主提示:此修改仅适用于16th北半球,其他MOD并不通用,请谨慎修改  
 
【魔改系列】八个帖子收尾,后会有期 
 
 
【魔改系列】内置的npc跑路?让更多npc加入队伍 
https://bbs.mountblade.com.cn/thread-2112291-1-1.html 
 
 
 
【魔改系列】领主带兵能力提升 
https://bbs.mountblade.com.cn/thread-2111976-1-1.html 
 
 
 
【魔改系列】君主自动花钱买关系 
https://bbs.mountblade.com.cn/thread-2111973-1-1.html 
 
 
 
 
【魔改系列】每个城堡刷出巡逻队 
https://bbs.mountblade.com.cn/thread-2111925-1-1.html 
 
 
 
 
【魔改系列】分封制变为封建制的税收制度补丁 
https://bbs.mountblade.com.cn/thread-2102924-1-1.html 
 
 
 
 
【魔改系列】战斗结束重新计算领主声望 
https://bbs.mountblade.com.cn/thread-2102923-1-1.html 
 
 
 
 
【魔改系列】战场人数调大,千人团战时切换武器卡顿优化 
https://bbs.mountblade.com.cn/thread-2112284-1-1.html 
 
 
【魔改系列】战场人数调大,千人团战时匹配敌人的卡顿优化 
https://bbs.mountblade.com.cn/thread-2112275-1-1.html 
 
 
 
 
【魔改系列】加了不少功能,能比较方便大家使用的,也放到论坛的,其他的改造量太大,就没办法了  
 
战场人数,经过这段时间优化 现在也开到千人团战,用上wse2 dx9渲染  也不卡顿了 
 
目前战团的优化就接近尾声了,后面玩玩其他游戏(骑砍还是很经典游戏,还会回来的) 
 
所有把上一个帖子的提到的ai切换武器的优化也贴出来,有始有终了。。 
 
【魔改系列】战场人数调大,千人团战时匹配敌人的卡顿优化 
 
这个就只放源码了,我本地的mod,经过大量改造,各种txt已经和原版差距不小了,没办法提供txt版本了 
 
 
 
module_mission_templates.py 中 agent_weapons_fix 方法,有一段是关于是战斗时切换武器 
 
每秒遍历所有单位,判断该单位周围是否有敌人 
 
这就是一个agents嵌套,改造思路,会有一定程度失真, 
 
将所有单位划分到一个个 500×500的网格内  (网格越小,越精确,我选的500,16th北半球的坐标范围应该是100w×100w ?) 
 
每秒遍历所有单位,获取该单位在哪个网格内,直接读取该网格是否有敌人 
 
这样1k*1k 就变成了 1k+1k 
 
下面放源码,回复可见防止沉贴。。 
 
 
module_scripts.py 最后面增加以下几个函数 
 
 
("ll_init_battle_pos", 
    [ 
     # reset 
      (try_for_range, ":index", 1000, 3000), 
        (troop_set_slot,"trp_castle_1_seneschal",":index",0), 
        (troop_set_slot,"trp_castle_2_seneschal",":index",0), 
        (troop_set_slot,"trp_castle_3_seneschal",":index",0), 
        (troop_set_slot,"trp_castle_4_seneschal",":index",0), 
      (try_end), 
 
      (try_for_agents, ":agent_no"), 
        (agent_is_alive, ":agent_no"), 
        (agent_is_human, ":agent_no"), 
        (agent_get_position, pos63, ":agent_no"), 
        (position_get_x, ":valuex", pos63), 
        (position_get_y, ":valuey", pos63), 
        # (assign, reg91,":valuex"), 
        # (assign, reg92,":valuey"), 
        # (assign, reg93,inspect.currentframe().f_lineno), 
        # (display_message, "str_zlp_debug"), 
        (val_div, ":valuex", 500), 
        (val_div, ":valuey", 500), 
 
        (val_add, ":valuex", 1000), 
        (val_add, ":valuey", 1000), 
       
        (try_begin), 
          (agent_is_ally, ":agent_no"), 
          (troop_set_slot,"trp_castle_1_seneschal",":valuex",1), 
          (troop_set_slot,"trp_castle_2_seneschal",":valuey",1), 
        (else_try), 
          (troop_set_slot,"trp_castle_3_seneschal",":valuex",1), 
          (troop_set_slot,"trp_castle_4_seneschal",":valuey",1), 
        (try_end), 
       
        # (assign, reg91,":valuex"), 
        # (assign, reg92,":valuey"), 
        # (assign, reg93,inspect.currentframe().f_lineno), 
        # (display_message, "str_zlp_debug"), 
      (try_end), 
   
  ]), 
 
   ("cf_ll_cf_agent_check_no_enemies_nearby", 
    [ 
     (store_script_param, ":agent_no", 1), 
 
 
      (agent_get_position, pos63, ":agent_no"), 
      (position_get_x, ":valuex", pos63), 
      (position_get_y, ":valuey", pos63), 
 
      (val_div, ":valuex", 500), 
      (val_div, ":valuey", 500), 
 
      (val_add, ":valuex", 1000), 
      (val_add, ":valuey", 1000), 
       
      (try_begin), 
        (neg|agent_is_ally, ":agent_no"), 
        (troop_get_slot,":has_enemy_x","trp_castle_1_seneschal",":valuex"), 
        (troop_get_slot,":has_enemy_y","trp_castle_2_seneschal",":valuey"), 
      (else_try), 
        (troop_get_slot,":has_enemy_x","trp_castle_3_seneschal",":valuex"), 
        (troop_get_slot,":has_enemy_y","trp_castle_4_seneschal",":valuey"), 
      (try_end), 
 
      (eq, ":has_enemy_y", 0), 
      (eq, ":has_enemy_x", 0), 
  ]), 
  ("cf_ll_cf_agent_check_enemies_nearby", 
    [ 
     (store_script_param, ":agent_no", 1), 
 
      (agent_get_position, pos63, ":agent_no"), 
      (position_get_x, ":valuex", pos63), 
      (position_get_y, ":valuey", pos63), 
       
      (val_div, ":valuex", 500), 
      (val_div, ":valuey", 500), 
 
      (val_add, ":valuex", 1000), 
      (val_add, ":valuey", 1000), 
       
      (try_begin), 
        (neg|agent_is_ally, ":agent_no"), 
        (troop_get_slot,":has_enemy_x","trp_castle_1_seneschal",":valuex"), 
        (troop_get_slot,":has_enemy_y","trp_castle_2_seneschal",":valuey"), 
      (else_try), 
        (troop_get_slot,":has_enemy_x","trp_castle_3_seneschal",":valuex"), 
        (troop_get_slot,":has_enemy_y","trp_castle_4_seneschal",":valuey"), 
      (try_end), 
 
      (eq, ":has_enemy_y", 1), 
      (eq, ":has_enemy_x", 1), 
  ]), 
 
  ("ll_agent_get_num_enemies_nearby", 
    [ 
     (store_script_param, ":agent_no", 1), 
 
      (agent_get_position, pos63, ":agent_no"), 
      (position_get_x, ":valuex", pos63), 
      (position_get_y, ":valuey", pos63), 
       
      (val_div, ":valuex", 500), 
      (val_div, ":valuey", 500), 
 
      (val_add, ":valuex", 1000), 
      (val_add, ":valuey", 1000), 
       
      (try_begin), 
        (neg|agent_is_ally, ":agent_no"), 
        (troop_get_slot,":has_enemy_x","trp_castle_1_seneschal",":valuex"), 
        (troop_get_slot,":has_enemy_y","trp_castle_2_seneschal",":valuey"), 
      (else_try), 
        (troop_get_slot,":has_enemy_x","trp_castle_3_seneschal",":valuex"), 
        (troop_get_slot,":has_enemy_y","trp_castle_4_seneschal",":valuey"), 
      (try_end), 
 
      (try_begin), 
        (eq, ":has_enemy_y", 1), 
        (eq, ":has_enemy_x", 1), 
        (assign, reg0, 1), 
      (else_try), 
        (assign, reg0, 0), 
      (try_end), 
  ]), 
 
 
 
module_mission_templates.py 中找到 agent_weapons_fix 
第一行代码先调用一次 
-  (call_script, "script_ll_init_battle_pos"),
 
  复制代码 
 
然后把修改调用的方法  
cf_agent_check_no_enemies_nearby => cf_ll_cf_agent_check_no_enemies_nearby 
cf_agent_check_enemies_nearby => cf_ll_cf_agent_check_enemies_nearby 
agent_get_num_enemies_nearby => ll_agent_get_num_enemies_nearby 
 
 
 
 
 
还是那句话,,不会编译源码的,,可以把定时时间拉长,,,效果咋样。。不太清楚,不过哪怕卡一点,也想开大团,总比1s好点。。 
我觉得1s切,和10s 切,感官上,可能没那么大,毕竟都千人战场了,很少会再去关心士兵的武器切换了。。。 
 
 
 
 
 
 
 
 |   
 
 
 
 |