感谢大佬分享!
我之前在对泡菜进行修修补补,发现十兵卫的 暗黑年代 版本中对英雄NPC加入了这个骑射AI,效果非常夸张。
后来我在翻看代码的时候发现了点问题,测了下确实存在,于是修改了下。
我对武器选择方面进行了一些优化,
* 除了弓和火器,现在还可以支持弩的运作。
* 如果给NPC多类不同的远程武器(弓、弩、火器),现在 NPC全都会使用,而非 只使用最后一把+用完后卡AI。武器顺序越靠前越优先选择。
* 对于弩与火器的弹药计算,会包括已上膛的弹药。
* 若给予两把相同id的远程武器,会在使用完 后备弹药+上膛弹药 后,丢弃该武器,转而使用第二把武器(毕竟还有第二把武器的上膛弹药)。
- 丢弃的原因在于,使用相同id的武器 默认会选第一把 而选不到第二把。
* 调整 对于骑马的敌人靠近后,近距离武器的选择。会选 单手、双手、长杆 与 投掷 。若投掷武器没有剩余弹药了,则不会被选择。武器顺序越靠前越优先选择。
具体代码如下:(从第14行开始替换,至第48行,包括这两行)
此外,还需要将 第311行 与 第323行 两处的 【eq, ":ammo", 0】 替换为 【gt, ":ranged_weapon", -1】 。
- (assign,":melee_weapon",-1),
- (assign,":ranged_weapon",-1),
- (try_begin),
- (agent_slot_eq,":agent_no",15,0),
- (agent_get_team,":team_no",":agent_no"),
- # (neg|teams_are_enemies,":team_no", ":team_player"),
- (gt,":horse_no",-1),
- (try_for_range,":item",0,4),
- (agent_get_item_slot,":item_weapon",":agent_no",":item"),
- (gt,":item_weapon",0),
- (neg|item_has_property,":item_weapon",itp_cant_reload_on_horseback),
- (neg|item_has_property,":item_weapon",itp_cant_use_on_horseback),
- (item_get_type,":item_weapon_type",":item_weapon"),
- (try_begin),
- (eq,":melee_weapon",-1),
- (this_or_next|eq,":item_weapon_type",2),
- (this_or_next|eq,":item_weapon_type",3),
- (eq,":item_weapon_type",4),
- (assign,":melee_weapon",":item_weapon"),
- (else_try),
- (eq,":melee_weapon",-1),
- (eq,":item_weapon_type",10),
- (1825,":temp",":agent_no",":item"),
- (gt,":temp",0),
- (assign,":melee_weapon",":item_weapon"),
- (else_try),
- (eq,":ranged_weapon",-1),
- (try_begin),
- (eq,":item_weapon_type",8),
- (assign,":ammo",0),
- (try_for_range,":item_2",0,4),
- (agent_get_item_slot,":item_weapon_2",":agent_no",":item_2"),
- (gt,":item_weapon_2",0),
- (item_get_type,":item_weapon_type_2",":item_weapon_2"),
- (eq,":item_weapon_type_2",5),
- (agent_get_item_cur_ammo,":temp",":agent_no",":item_2"),
- (val_add,":ammo",":temp"),
- (try_end),
- (else_try),
- (eq,":item_weapon_type",9),
- (agent_get_item_cur_ammo,":ammo",":agent_no",":item"),
- (try_for_range,":item_2",0,4),
- (agent_get_item_slot,":item_weapon_2",":agent_no",":item_2"),
- (gt,":item_weapon_2",0),
- (item_get_type,":item_weapon_type_2",":item_weapon_2"),
- (eq,":item_weapon_type_2",6),
- (agent_get_item_cur_ammo,":temp",":agent_no",":item_2"),
- (val_add,":ammo",":temp"),
- (try_end),
- (else_try),
- (this_or_next|eq,":item_weapon_type",16),
- (eq,":item_weapon_type",17),
- (agent_get_item_cur_ammo,":ammo",":agent_no",":item"),
- (try_for_range,":item_2",0,4),
- (agent_get_item_slot,":item_weapon_2",":agent_no",":item_2"),
- (gt,":item_weapon_2",0),
- (item_get_type,":item_weapon_type_2",":item_weapon_2"),
- (eq,":item_weapon_type_2",18),
- (agent_get_item_cur_ammo,":temp",":agent_no",":item_2"),
- (val_add,":ammo",":temp"),
- (try_end),
- (else_try),
- (assign,":ammo",-1),
- (try_end),
- (try_begin),
- (gt,":ammo",0),
- (assign,":ranged_weapon",":item_weapon"),
- (else_try),
- (eq,":ammo",0),
- (store_add,":temp",":item",1),
- (assign,":ammo",4),
- (try_for_range,":item_2",":temp",":ammo"),
- (agent_get_item_slot,":item_weapon_2",":agent_no",":item_2"),
- (eq,":item_weapon_2",":item_weapon"),
- (agent_unequip_item,":agent_no",":item_weapon",":temp"),
- (assign,":ammo",0),
- (try_end),
- (try_end),
- (try_end),
- (try_end),
- (gt,":ranged_weapon",-1),
复制代码
|