- 好友
- 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 切,感官上,可能没那么大,毕竟都千人战场了,很少会再去关心士兵的武器切换了。。。
|
|