骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

搜索
购买霸主CDKEY 购买战帆CDKEY
查看: 28|回复: 1

[功能与代码] 防止空手AI (ms|txt: 防止空手或无弹药而发呆卖萌的情况)

[复制链接]

8

主题

59

回帖

20

积分

随仆

Rank: 1

UID
2557955
第纳尔
134
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2015-7-9
鲜花(1) 鸡蛋(0)
发表于 9 小时前 | 显示全部楼层 |阅读模式
本帖最后由 afl001 于 2026-5-6 12:53 编辑

有至少一只空手,或持有远程武器但已经无弹药,切换盾牌和武器的AI。

一般其他ai都会附带武器切换选择,但有时却会忘记空手的情况。比如带着不能在马背上用的盾,被打下马后明明背着一面盾却不切。用完弹药发呆,也不切其他武器。一面盾被打爆了,有第二面备用盾也不切。有可切近战的投掷武器,没其他近战武器,把弹药打光也不切近战模式,等等等等。此AI就是防止这种空手导致卖萌的情况。

由于双手容易被射成刺猬,除非不得不选择双手持握武器,否则尽量切能配盾的武器,尤其是挥砍类最为优先。
空手切换一次之后就肯定不是空手了,所以理论上不会出现反复切换的情况,这个机制也会防止喧宾夺主,影响其他AI的武器选择。

这算是个普适性的AI,什么战斗场景都能加。
加在攻城战场景时,要稍微修改一下:
搜索被 "###only_in_siege###" 注释掉的行,删掉 "###only_in_siege###" 这几个字符,使这行生效,共5处。
再把修改过的代码加在攻城战场景。这些地方都是跟弹药相关的,因为攻城战守方能自动恢复弹药,情况稍有不同。

txt修改见本帖附件。
若用在公开MOD请注明一下来源。


攻城战场景(前2个场景建议必加,第3个场景可以选择加)
castle_attack_walls_belfry
castle_attack_walls_ladder
quick_battle_siege
      
非攻城战场景(前3个场景建议必加,后几个场景可以选择加)
lead_charge
village_attack_bandits
village_raid
quick_battle_battle
sneak_caught_fight
bandits_at_night
besiege_inner_battle_castle
besiege_inner_battle_town_center
castle_attack_walls_defenders_sally
bandit_lair

  1. # 防止空手AI,作者afl001,添加在 mission_templates,若用在公开MOD注明一下来源
  2.     (0.5, 0, 0, [],
  3.     [
  4.         (try_for_agents, ":agent_id"),
  5.           (assign, ":end_this_one", 0),
  6.           (agent_is_alive, ":agent_id"),
  7.           (agent_is_human, ":agent_id"),
  8.           (agent_is_non_player,":agent_id"),
  9.           (agent_get_horse, ":horse", ":agent_id"),
  10.          ###only_in_siege### (agent_get_team, ":agent_team", ":agent_id"),
  11. #------------------#
  12. #一:前置处理,弹药用光后,有多把弩/火枪,只留一把,防止无法正确判断弹药是否真的全用光
  13. #------------------#
  14.           (try_begin),
  15.            ###only_in_siege### (neq, ":agent_team", "$defender_team"),
  16.            ###only_in_siege### (neq, ":agent_team", "$defender_team_2"),
  17.             (agent_get_wielded_item, ":wielded_weapon", ":agent_id", 0),
  18.             (gt,":wielded_weapon",-1),
  19.             (item_get_type, ":wielded_type", ":wielded_weapon"),
  20.             (this_or_next|eq,":wielded_type", itp_type_crossbow),
  21.             (this_or_next|eq,":wielded_type", itp_type_pistol),
  22.             (eq,":wielded_type", itp_type_musket),
  23.             (agent_get_ammo, ":cur_ammo", ":agent_id" , 1),
  24.             (eq, ":cur_ammo", 0),
  25.             (assign, ":hold_weapon", -1),
  26.             (try_for_range,":wp_slot_1",0,3),
  27.               (agent_get_item_slot,":item_id_1",":agent_id",":wp_slot_1"),
  28.               (gt,":item_id_1",-1),
  29.               (item_get_type, ":item_type_1", ":item_id_1"),
  30.               (eq,":item_type_1",":wielded_type"),
  31.               (store_add,":‌slot_rest‌",":wp_slot_1",1),
  32.               (try_for_range,":wp_slot_2",":‌slot_rest‌",4),
  33.                 (agent_get_item_slot,":item_id_2",":agent_id",":wp_slot_2"),
  34.                 (gt,":item_id_2",-1),
  35.                 (item_get_type, ":item_type_2", ":item_id_2"),
  36.                 (eq,":item_type_2",":item_type_1"),
  37.                 (agent_get_ammo_for_slot,":slot_ammo",":agent_id",":wp_slot_2"),
  38.                 (try_begin),
  39.                   (eq,":slot_ammo",0),
  40.                   (agent_unequip_item,":agent_id",":item_id_2",":wp_slot_2"),
  41.                   (assign, ":hold_weapon", ":item_id_1"),
  42.                 (else_try),
  43.                   (agent_get_ammo_for_slot,":slot_ammo",":agent_id",":wp_slot_1"),
  44.                   (eq,":slot_ammo",0),
  45.                   (agent_unequip_item,":agent_id",":item_id_1",":wp_slot_1"),
  46.                   (assign, ":hold_weapon", ":item_id_2"),
  47.                 (try_end),
  48.               (try_end),
  49.             (try_end),
  50.             (gt, ":hold_weapon", -1),
  51.             (try_begin),
  52.               (lt, ":horse", 0),
  53.               (agent_set_wielded_item, ":agent_id", ":hold_weapon"),
  54.             (else_try),
  55.               (neg|item_has_property,":hold_weapon",itp_cant_reload_on_horseback),
  56.               (neg|item_has_property,":hold_weapon",itp_cant_use_on_horseback),
  57.               (agent_set_wielded_item, ":agent_id", ":hold_weapon"),
  58.             (try_end),
  59.             (assign, ":end_this_one", 1),
  60.           (try_end),
  61. #------------------#
  62. #二:全面判断角色的武器状态
  63. #------------------#
  64.           (eq, ":end_this_one", 0),
  65.           (assign, ":have_item_prop_two_handed", 0),
  66.           (assign, ":have_item_prop_non_two_handed", 0),
  67.           (assign, ":is_thrower", 0),
  68.           (assign, ":is_archer", 0),
  69.           (assign, ":is_crossbowman", 0),
  70.           (assign, ":is_gunshooter", 0),
  71.           (assign, ":is_hangunshooter", 0),
  72.           (assign, ":have_melee", 0),
  73.           (assign, ":have_shield", 0),
  74.           (assign, ":have_thrown", 0),
  75.           (assign, ":have_bow", 0),
  76.           (assign, ":have_crossbow", 0),
  77.           (assign, ":have_gun", 0),
  78.           (assign, ":have_handgun", 0),
  79.           (assign, ":thrown_ammo", 0),
  80.           (assign, ":bow_ammo", 0),
  81.           (assign, ":crossbow_ammo", 0),
  82.           (assign, ":gun_ammo", 0),
  83.           (try_for_range,":wp_slot",0,4),
  84.             (agent_get_item_slot,":item_id",":agent_id",":wp_slot"),
  85.             (gt,":item_id",-1),
  86.             (item_get_type, ":item_type", ":item_id"),
  87.             (try_begin),
  88.               (this_or_next|eq, ":item_type", itp_type_one_handed_wpn),
  89.               (this_or_next|eq, ":item_type", itp_type_two_handed_wpn),
  90.               (eq, ":item_type", itp_type_polearm),
  91.               (assign, ":have_melee", 1),
  92.               (try_begin),
  93.                 (item_has_property,":item_id",itp_two_handed),
  94.                 (assign, ":have_item_prop_two_handed", 1),
  95.               (try_end),
  96.               (try_begin),
  97.                 (neg|item_has_property,":item_id",itp_two_handed),
  98.                 (assign, ":have_item_prop_non_two_handed", 1),
  99.               (try_end),
  100.             (else_try),
  101.               (eq, ":item_type", itp_type_shield),
  102.               (assign, ":have_shield", 1),
  103.             (else_try),
  104.               (eq, ":item_type", itp_type_thrown),
  105.               (assign, ":have_thrown", 1),
  106.               (agent_get_ammo_for_slot,":slot_ammo",":agent_id",":wp_slot"),
  107.               (gt,":slot_ammo",-1),
  108.               (val_add, ":thrown_ammo", ":slot_ammo"),
  109.             (else_try),
  110.               (eq, ":item_type", itp_type_bow),
  111.               (assign, ":have_bow", 1),
  112.             (else_try),
  113.               (eq, ":item_type", itp_type_crossbow),
  114.               (assign, ":have_crossbow", 1),
  115.               (agent_get_ammo_for_slot,":slot_ammo",":agent_id",":wp_slot"),
  116.               (gt,":slot_ammo",-1),
  117.               (val_add, ":crossbow_ammo", ":slot_ammo"),
  118.             (else_try),
  119.               (eq,":item_type", itp_type_pistol),
  120.               (assign, ":have_gun", 1),
  121.               (assign, ":have_handgun", 1),
  122.               (agent_get_ammo_for_slot,":slot_ammo",":agent_id",":wp_slot"),
  123.               (gt,":slot_ammo",-1),
  124.               (val_add, ":gun_ammo", ":slot_ammo"),
  125.             (else_try),
  126.               (eq,":item_type", itp_type_musket),
  127.               (assign, ":have_gun", 1),
  128.               (agent_get_ammo_for_slot,":slot_ammo",":agent_id",":wp_slot"),
  129.               (gt,":slot_ammo",-1),
  130.               (val_add, ":gun_ammo", ":slot_ammo"),
  131.             (else_try),
  132.               (eq, ":item_type", itp_type_arrows),
  133.               (agent_get_ammo_for_slot,":slot_ammo",":agent_id",":wp_slot"),
  134.               (gt,":slot_ammo",-1),
  135.               (val_add, ":bow_ammo", ":slot_ammo"),
  136.             (else_try),
  137.               (eq, ":item_type", itp_type_bolts),
  138.               (agent_get_ammo_for_slot,":slot_ammo",":agent_id",":wp_slot"),
  139.               (gt,":slot_ammo",-1),
  140.               (val_add, ":crossbow_ammo", ":slot_ammo"),
  141.             (else_try),
  142.               (eq, ":item_type", itp_type_bullets),
  143.               (agent_get_ammo_for_slot,":slot_ammo",":agent_id",":wp_slot"),
  144.               (gt,":slot_ammo",-1),
  145.               (val_add, ":gun_ammo", ":slot_ammo"),
  146.             (try_end),
  147.           (try_end),
  148.           (try_begin),
  149.             (eq, ":have_thrown", 1),
  150.             (gt, ":thrown_ammo", 0),
  151.             (assign, ":is_thrower", 1),
  152.           (try_end),
  153.           (try_begin),
  154.             (eq, ":have_bow", 1),
  155.             (gt, ":bow_ammo", 0),
  156.             (assign, ":is_archer", 1),
  157.           (try_end),
  158.           (try_begin),
  159.             (eq, ":have_crossbow", 1),
  160.             (gt, ":crossbow_ammo", 0),
  161.             (assign, ":is_crossbowman", 1),
  162.           (try_end),
  163.           (try_begin),
  164.             (eq, ":have_gun", 1),
  165.             (gt, ":gun_ammo", 0),
  166.             (assign, ":is_gunshooter", 1),
  167.           (try_end),
  168.           (try_begin),
  169.             (eq, ":have_handgun", 1),
  170.             (gt, ":gun_ammo", 0),
  171.             (assign, ":is_hangunshooter", 1),
  172.           (try_end),
  173. #------------------#
  174. #三:投掷武器切近战模式的情况
  175. #投掷武器剩下1发弹药,身上无近战武器,也没有其他远程武器弹药,投掷武器有近战模式。
  176. #不再投掷,而是切换这把投掷武器的近战模式(本场战斗无法再切回来)
  177. #------------------#
  178.           (try_begin),
  179.            ###only_in_siege### (neq, ":agent_team", "$defender_team"),
  180.            ###only_in_siege### (neq, ":agent_team", "$defender_team_2"),
  181.             (eq, ":have_melee", 0),
  182.             (agent_get_wielded_item, ":wielded_weapon", ":agent_id", 0),
  183.             (gt,":wielded_weapon",-1),
  184.             (item_get_type, ":wielded_type", ":wielded_weapon"),
  185.             (eq,":wielded_type", itp_type_thrown),
  186.             (agent_get_ammo, ":cur_ammo", ":agent_id" , 1),
  187.             (eq, ":cur_ammo", 1),
  188.             (eq, ":thrown_ammo", 1),
  189.             (assign, ":is_shooter_but_throw", 0),
  190.             (try_begin),
  191.               (this_or_next|eq, ":is_archer", 1),
  192.               (this_or_next|eq, ":is_crossbowman", 1),
  193.               (eq, ":is_gunshooter", 1),
  194.               (assign, ":is_shooter_but_throw", 1),
  195.             (try_end),
  196.             (eq, ":is_shooter_but_throw", 0),
  197.             (item_has_property,":wielded_weapon",itp_next_item_as_melee),
  198.             (store_add,":hold_weapon",":wielded_weapon",1),
  199.             (gt, ":hold_weapon", 0),
  200.             (item_get_type, ":item_type", ":hold_weapon"),
  201.             (this_or_next|eq, ":item_type", itp_type_one_handed_wpn),
  202.             (this_or_next|eq, ":item_type", itp_type_two_handed_wpn),
  203.             (eq, ":item_type", itp_type_polearm),
  204.             (assign, ":continue", 0),
  205.             (try_begin),
  206.               (lt, ":horse", 0),
  207.               (assign, ":continue", 1),
  208.             (else_try),
  209.               (neg|item_has_property,":hold_weapon",itp_cant_reload_on_horseback),
  210.               (neg|item_has_property,":hold_weapon",itp_cant_use_on_horseback),
  211.               (assign, ":continue", 1),
  212.             (try_end),
  213.             (eq, ":continue", 1),
  214.             (assign, ":wielded_slot", -1),
  215.             (assign, ":try_end", 4),
  216.             (try_for_range,":wp_slot",0,":try_end"),
  217.               (agent_get_item_slot,":item_id",":agent_id",":wp_slot"),
  218.               (eq,":item_id",":wielded_weapon"),
  219.               (agent_get_ammo_for_slot,":slot_ammo",":agent_id",":wp_slot"),
  220.               (eq,":slot_ammo",1),
  221.               (assign, ":wielded_slot", ":wp_slot"),
  222.               (assign, ":try_end", 0),
  223.             (try_end),
  224.             (agent_unequip_item,":agent_id",":wielded_weapon",":wielded_slot"),
  225.             (agent_equip_item, ":agent_id", ":hold_weapon"),
  226.             (agent_set_wielded_item, ":agent_id", ":hold_weapon"),
  227.             (assign, ":end_this_one", 1),
  228.           (try_end),

  229.           (eq, ":end_this_one", 0),
  230.           (assign, ":empty_ammo_shooter", 0),
  231.           (try_begin),
  232.             (eq, ":is_thrower", 0),
  233.             (eq, ":is_archer", 0),
  234.             (eq, ":is_crossbowman", 0),
  235.             (eq, ":is_gunshooter", 0),
  236.             (this_or_next|eq, ":have_thrown", 1),
  237.             (this_or_next|eq, ":have_bow", 1),
  238.             (this_or_next|eq, ":have_crossbow", 1),
  239.             (eq, ":have_gun", 1),
  240.             (assign, ":empty_ammo_shooter", 1),
  241.           (try_end),
  242. #------------------#
  243. #四:空手或相当于空手,切不能带盾的武器的情况
  244. #远程武器弹药用光,或者任何情况导致的空手。未携带盾。或只携带了不能带盾的武器。
  245. #------------------#
  246.           (try_begin),
  247.             (eq, ":have_melee", 1),
  248.             (agent_get_wielded_item, ":wielded_weapon", ":agent_id", 0),
  249.             (this_or_next|eq, ":empty_ammo_shooter", 1),
  250.             (lt, ":wielded_weapon", 0),
  251.             (assign, ":only_two_handed", 0),
  252.             (try_begin),
  253.               (eq, ":have_item_prop_two_handed", 1),
  254.               (eq, ":have_item_prop_non_two_handed", 0),
  255.               (assign, ":only_two_handed", 1),
  256.             (try_end),
  257.             (this_or_next|eq, ":only_two_handed", 1),
  258.             (eq, ":have_shield", 0),
  259.             (assign, ":hold_weapon", -1),
  260.             (assign, ":com_damage", 0),
  261.             (try_for_range,":wp_slot",0,4),
  262.               (agent_get_item_slot,":item_id",":agent_id",":wp_slot"),
  263.               (gt, ":item_id", -1),
  264.               (this_or_next|item_has_capability, ":item_id", itcf_slashright_twohanded),
  265.               (item_has_capability, ":item_id", itcf_slashleft_twohanded),
  266.               (assign, ":continue", 0),
  267.               (try_begin),
  268.                 (lt, ":horse", 0),
  269.                 (assign, ":continue", 1),
  270.               (else_try),
  271.                 (neg|item_has_property,":item_id",itp_cant_reload_on_horseback),
  272.                 (neg|item_has_property,":item_id",itp_cant_use_on_horseback),
  273.                 (assign, ":continue", 1),
  274.               (try_end),
  275.               (eq, ":continue", 1),
  276.               (item_get_swing_damage, ":item_damage", ":item_id"),
  277.               (gt,":item_damage", 0),
  278.               (item_get_swing_damage_type, ":item_dmg_type", ":item_id"),
  279.               (try_begin),
  280.                 (eq,":item_dmg_type", 2),
  281.                 (val_mul,":item_damage", 8),
  282.                 (val_div,":item_damage", 5),
  283.               (else_try),
  284.                 (eq,":item_dmg_type", 1),
  285.                 (val_mul,":item_damage", 13),
  286.                 (val_div,":item_damage", 10),
  287.               (try_end),
  288.               (gt,":item_damage", ":com_damage"),
  289.               (assign, ":hold_weapon", ":item_id"),
  290.               (assign, ":com_damage", ":item_damage"),
  291.             (try_end),
  292.             (gt, ":hold_weapon", -1),
  293.             (agent_set_wielded_item, ":agent_id", ":hold_weapon"),
  294.             (assign, ":end_this_one", 1),
  295.           (try_end),
  296. #------------------#
  297. #五:空手或相当于空手,切盾牌的情况
  298. #左手无盾且非双手射手,右手没武器或有武器但不妨碍持盾。携带有盾,切盾。
  299. #------------------#
  300.           (eq, ":end_this_one", 0),
  301.           (try_begin),
  302.             (eq, ":have_shield", 1),
  303.             (agent_get_wielded_item, ":wielded_weapon", ":agent_id", 0),
  304.             (agent_get_wielded_item, ":wielded_shield", ":agent_id", 1),
  305.             (try_begin),
  306.               (gt,":wielded_weapon",-1),
  307.               (item_get_type, ":wielded_type", ":wielded_weapon"),
  308.             (try_end),
  309.             (assign, ":wielded_not_shield_and_range", 0),
  310.             (try_begin),
  311.               (lt, ":wielded_shield", 0),
  312.               (neq, ":wielded_type", itp_type_crossbow),
  313.               (neq, ":wielded_type", itp_type_musket),
  314.               (neq, ":wielded_type", itp_type_bow),
  315.               (assign, ":wielded_not_shield_and_range", 1),
  316.             (try_end),
  317.             (this_or_next|eq, ":empty_ammo_shooter", 1),
  318.             (eq, ":wielded_not_shield_and_range", 1),
  319.             (assign, ":wielded_wp_use_one_hand", 0),
  320.             (try_begin),
  321.               (gt, ":wielded_weapon", -1),
  322.               (neg|item_has_property,":wielded_weapon",itp_two_handed),
  323.               (assign, ":wielded_wp_use_one_hand", 1),
  324.             (try_end),
  325.             (this_or_next|eq, ":wielded_wp_use_one_hand", 1),
  326.             (lt, ":wielded_weapon", 0),
  327.             (assign, ":hold_shield", -1),
  328.             (try_for_range,":wp_slot",0,4),
  329.               (lt, ":hold_shield", 0),
  330.               (agent_get_item_slot,":item_id",":agent_id",":wp_slot"),
  331.               (gt, ":item_id", -1),
  332.               (item_get_type, ":item_type", ":item_id"),
  333.               (eq, ":item_type", itp_type_shield),
  334.               (try_begin),
  335.                 (lt, ":horse", 0),
  336.                 (assign, ":hold_shield", ":item_id"),
  337.               (else_try),
  338.                 (neg|item_has_property,":item_id",itp_cant_reload_on_horseback),
  339.                 (neg|item_has_property,":item_id",itp_cant_use_on_horseback),
  340.                 (assign, ":hold_shield", ":item_id"),
  341.               (try_end),
  342.             (try_end),
  343.             (gt, ":hold_shield", -1),
  344.             (agent_set_wielded_item, ":agent_id", ":hold_shield"),
  345.             (assign, ":end_this_one", 1),
  346.           (try_end),
  347. #------------------#
  348. #六:空手或相当于空手,切单手持握武器的情况
  349. #此时若右手仍然无武器,左手有盾。携带有可以配盾的武器。
  350. #步兵切可单手挥砍的武器,优先伤害更高的。骑兵切可马上单手用的武器,优先熟练度较高的。
  351. #------------------#
  352.           (eq, ":end_this_one", 0),
  353.           (try_begin),
  354.             (eq, ":have_item_prop_non_two_handed", 1),
  355.             (agent_get_wielded_item, ":wielded_weapon", ":agent_id", 0),
  356.             (agent_get_wielded_item, ":wielded_shield", ":agent_id", 1),
  357.             (gt, ":wielded_shield", -1),
  358.             (assign, ":empty_ammo_one_hand_shooter", 0),
  359.             (try_begin),
  360.               (eq, ":is_thrower", 0),
  361.               (eq, ":is_hangunshooter", 0),
  362.               (this_or_next|eq, ":have_thrown", 1),
  363.               (eq, ":have_handgun", 1),
  364.               (assign, ":empty_ammo_one_hand_shooter", 1),
  365.             (try_end),
  366.             (this_or_next|eq, ":empty_ammo_one_hand_shooter", 1),
  367.             (lt, ":wielded_weapon", 0),
  368.             (assign, ":hold_weapon", -1),
  369.             (assign, ":com_damage", -1),
  370.             (assign, ":com_proficiency", -1),
  371.             (try_for_range,":wp_slot",0,4),
  372.               (agent_get_item_slot,":item_id",":agent_id",":wp_slot"),
  373.               (gt, ":item_id", -1),
  374.               (neg|item_has_property,":item_id",itp_two_handed),
  375.               (item_get_type, ":item_type", ":item_id"),
  376.               (this_or_next|eq, ":item_type", itp_type_one_handed_wpn),
  377.               (this_or_next|eq, ":item_type", itp_type_two_handed_wpn),
  378.               (eq, ":item_type", itp_type_polearm),
  379.               (item_get_thrust_damage, ":item_th_dmg", ":item_id"),
  380.               (item_get_swing_damage, ":item_damage", ":item_id"),
  381.               (this_or_next|gt,":item_th_dmg", 0),
  382.               (gt,":item_damage", 0),
  383.               (try_begin),
  384.                 (lt, ":horse", 0),
  385.                 (this_or_next|item_has_capability, ":item_id", itcf_slashright_onehanded),
  386.                 (item_has_capability, ":item_id", itcf_slashleft_onehanded),
  387.                 (gt,":item_damage", 0),
  388.                 (item_get_swing_damage_type, ":item_dmg_type", ":item_id"),
  389.                 (try_begin),
  390.                   (eq,":item_dmg_type", 2),
  391.                   (val_mul,":item_damage", 8),
  392.                   (val_div,":item_damage", 5),
  393.                 (else_try),
  394.                   (eq,":item_dmg_type", 1),
  395.                   (val_mul,":item_damage", 13),
  396.                   (val_div,":item_damage", 10),
  397.                 (try_end),
  398.                 (try_begin),
  399.                   (eq, ":item_type", itp_type_two_handed_wpn),
  400.                   (val_mul,":item_damage", 7),
  401.                   (val_div,":item_damage", 10),
  402.                 (try_end),
  403.                 (gt,":item_damage", ":com_damage"),
  404.                 (assign, ":hold_weapon", ":item_id"),
  405.                 (assign, ":com_damage", ":item_damage"),
  406.               (else_try),
  407.                 (neg|item_has_property,":item_id",itp_cant_reload_on_horseback),
  408.                 (neg|item_has_property,":item_id",itp_cant_use_on_horseback),
  409.                 (agent_get_troop_id, ":troop_id", ":agent_id"),
  410.                 (try_begin),
  411.                   (eq, ":item_type", itp_type_one_handed_wpn),
  412.                   (store_proficiency_level,":item_proficiency",":troop_id", wpt_one_handed_weapon),
  413.                 (else_try),
  414.                   (eq, ":item_type", itp_type_two_handed_wpn),
  415.                   (this_or_next|item_has_capability, ":item_id", itcf_slashright_onehanded),
  416.                   (item_has_capability, ":item_id", itcf_slashleft_onehanded),
  417.                   (store_proficiency_level,":item_proficiency",":troop_id", wpt_one_handed_weapon),
  418.                 (else_try),
  419.                   (eq, ":item_type", itp_type_polearm),
  420.                   (store_proficiency_level,":item_proficiency",":troop_id", wpt_polearm),
  421.                 (try_end),
  422.                 (gt, ":item_proficiency", ":com_proficiency"),
  423.                 (assign, ":hold_weapon", ":item_id"),
  424.                 (assign, ":com_proficiency", ":item_proficiency"),
  425.               (try_end),
  426.             (try_end),
  427.             (gt, ":hold_weapon", -1),
  428.             (agent_set_wielded_item, ":agent_id", ":hold_weapon"),
  429.             (assign, ":end_this_one", 1),
  430.           (try_end),
  431. #------------------#
  432. #七:若此时仍然空手或相当于空手,兜底切换任何可以切换的近战武器。
  433. #这是最后一种情况了,虽然判断的情况比较多,其实大部分情况并不会触发。
  434. #这个AI只是补充特殊情况的切换选择,查漏补缺,所以不会太占资源。
  435. #------------------#
  436.           (eq, ":end_this_one", 0),
  437.           (try_begin),
  438.             (eq, ":have_melee", 1),
  439.             (agent_get_wielded_item, ":wielded_weapon", ":agent_id", 0),
  440.             (this_or_next|eq, ":empty_ammo_shooter", 1),
  441.             (lt, ":wielded_weapon", 0),
  442.             (assign, ":hold_weapon", -1),
  443.             (assign, ":com_damage", -1),
  444.             (try_for_range,":wp_slot",0,4),
  445.               (agent_get_item_slot,":item_id",":agent_id",":wp_slot"),
  446.               (gt, ":item_id", -1),
  447.               (item_get_type, ":item_type", ":item_id"),
  448.               (this_or_next|eq, ":item_type", itp_type_one_handed_wpn),
  449.               (this_or_next|eq, ":item_type", itp_type_two_handed_wpn),
  450.               (eq, ":item_type", itp_type_polearm),
  451.               (assign, ":continue", 0),
  452.               (try_begin),
  453.                 (lt, ":horse", 0),
  454.                 (assign, ":continue", 1),
  455.               (else_try),
  456.                 (neg|item_has_property,":item_id",itp_cant_reload_on_horseback),
  457.                 (neg|item_has_property,":item_id",itp_cant_use_on_horseback),
  458.                 (assign, ":continue", 1),
  459.               (try_end),
  460.               (eq, ":continue", 1),
  461.               (item_get_thrust_damage, ":item_th_dmg", ":item_id"),
  462.               (item_get_swing_damage, ":item_damage", ":item_id"),
  463.               (assign, ":thrust_item", 0),
  464.               (try_begin),
  465.                 (lt,":item_damage", ":item_th_dmg"),
  466.                 (assign, ":item_damage", ":item_th_dmg"),
  467.                 (assign, ":thrust_item", 1),
  468.               (try_end),
  469.               (gt,":item_damage", 0),
  470.               (try_begin),
  471.                 (eq, ":thrust_item", 1),
  472.                 (item_get_thrust_damage_type, ":item_dmg_type", ":item_id"),
  473.               (else_try),
  474.                 (item_get_swing_damage_type, ":item_dmg_type", ":item_id"),
  475.               (try_end),
  476.               (try_begin),
  477.                 (eq,":item_dmg_type", 2),
  478.                 (val_mul,":item_damage", 8),
  479.                 (val_div,":item_damage", 5),
  480.               (else_try),
  481.                 (eq,":item_dmg_type", 1),
  482.                 (val_mul,":item_damage", 13),
  483.                 (val_div,":item_damage", 10),
  484.               (try_end),
  485.               (try_begin),
  486.                 (eq, ":item_type", itp_type_two_handed_wpn),
  487.                 (this_or_next|item_has_capability, ":item_id", itcf_slashright_onehanded),
  488.                 (item_has_capability, ":item_id", itcf_slashleft_onehanded),
  489.                 (eq, ":have_shield", 1),
  490.                 (val_mul,":item_damage", 7),
  491.                 (val_div,":item_damage", 10),
  492.               (try_end),
  493.               (gt,":item_damage", ":com_damage"),
  494.               (assign, ":hold_weapon", ":item_id"),
  495.               (assign, ":com_damage", ":item_damage"),
  496.             (try_end),
  497.             (gt, ":hold_weapon", -1),
  498.             (agent_set_wielded_item, ":agent_id", ":hold_weapon"),
  499.           (try_end),
  500.         (try_end),
  501.     ]),
  502. ### 防止空手AI over
复制代码

防止空手AI-非攻城场景.txt

13.03 KB, 下载次数: 0

防止空手AI-攻城战场景.txt

13.28 KB, 下载次数: 0

8

主题

59

回帖

20

积分

随仆

Rank: 1

UID
2557955
第纳尔
134
精华
0
互助
0
荣誉
0
贡献
0
魅力
0
注册时间
2015-7-9
鲜花(1) 鸡蛋(0)
 楼主| 发表于 7 小时前 | 显示全部楼层
本帖最后由 afl001 于 2026-5-6 12:46 编辑

编译通不过的话可以把代码里的中文字符都删掉。就是用 #------------------# 框起来的部分。
您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

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

GMT+8, 2026-5-6 19:49 , Processed in 0.109603 second(s), 19 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

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