说到“随机释放技能的AI”,就需要说魔兽的一个Bug了
[trigger]Bug
事件
单位 - 任意单位 被攻击
条件
(被攻击单位) 等于 步兵 0003 <预设>
(攻击单位) 等于 血魔法师 0000 <预设>
动作
单位 - 对 血魔法师 0000 <预设> 发布 人族血魔法师 - 虚无 命令到目标: 步兵 0001 <预设>
[/trigger]
如果在单位攻击的时候命令它对攻击目标之外的单位释放技能,该单位就会一直卡在那里
“原地不停地做准备释放技能的动作,不移动,不攻击,不释放技能”
不过你的地图 不一定是因为这个Bug才发生了Bug...
单位释放不同技能也是会打断当前的动作的
[trigger]Test
事件
单位 - 山丘之王 0000 <预设> 接受伤害
条件
动作
单位 - 对 山丘之王 0000 <预设> 发布 人族山丘之王 - 风暴之锤 命令到目标: (伤害来源)
[/trigger]
如果山丘之王只会这一个技能的话,是不会有问题的...因为相同的命令不会打断单位当前动作
[trigger]Bug
事件
单位 - 山丘之王 0000 <预设> 被攻击
条件
动作
如果所有条件成立则做动作1,否则做动作2
If - 条件
B 等于 TRUE
Then - 动作
单位 - 对 山丘之王 0000 <预设> 发布 人族山丘之王 - 风暴之锤 命令到目标: (攻击单位)
设置 B = FALSE
Else - 动作
单位 - 对 山丘之王 0000 <预设> 发布 人族山丘之王 - 雷霆一击 命令
设置 B = TRUE
[/trigger]
不过如果是不同的技能的话,英雄就会一直卡在那里了,因为它不知道到底要使用哪个技能...
那么,为了防止单位重复执行命令,你需要加入限制条件,判断单位当前的命令是不是释放技能
[trigger]Test
事件
单位 - 山丘之王 0000 <预设> 接受伤害
条件
((触发单位) 的当前命令ID.) 不等于 (转换 thunderbolt 为命令ID)
动作
单位 - 对 山丘之王 0000 <预设> 发布 人族山丘之王 - 雷霆一击 命令
[/trigger]
比如这样,就是让单位只会在没有释放“thunderbolt ”(风暴之锤)的时候才释放“雷霆一击”
“攻击命令”也是同理,限制Boss只会在“没有释放技能”的时候才攻击,可以避免攻击命令打断技能的释放
那么,如何判断技能是否在CD当中,以及命令的发布是否成功呢?
答:你需要使用自定义代码
利用IssueTargetOrder函数的返回值,就可以获得命令是否发布成功,也就能知道技能是否能够使用了(CD,耗魔,目标状态等)
[trigger]Bug
事件
单位 - 山丘之王 0000 <预设> 被攻击
条件
动作
自定义代码: if(IssueTargetOrder( gg_unit_Hmkg_0000, "thunderbolt", GetAttacker() ))then
自定义代码: call DisplayTextToPlayer(GetLocalPlayer(),0,0,"S")
自定义代码: else
自定义代码: call DisplayTextToPlayer(GetLocalPlayer(),0,0,"CD")
自定义代码: endif
[/trigger]
这样...没CD的时候会输出“S”,有CD的时候会输出“CD”
总之,想要编一个AI你需要理清你的逻辑
如果出现问题了的话,那么不是遇到Bug,就是你的逻辑混乱了 |