设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 286|回复: 4
打印 上一主题 下一主题

[有事请教] 请问如何在敌人行动模式中设置多个条件

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1378
在线时间
200 小时
注册时间
2023-6-10
帖子
14
跳转到指定楼层
1
发表于 2024-7-1 23:11:18 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
比如想要设计一个敌人技能它会在敌人hp<=50%,回合数为5X,并且处于特定状态的情况下才会使用。
RMMV本身引擎好像只支持一个条件判断评分。
Yep的ai核心不知道能不能实现该功能,求大佬请教,谢谢!

Lv4.逐梦者

梦石
0
星屑
10518
在线时间
6144 小时
注册时间
2015-4-26
帖子
356
4
发表于 2024-7-5 15:07:21 | 只看该作者
本帖最后由 煎蛋流Kira☆ 于 2024-7-6 07:44 编辑
uniguana 发表于 2024-7-4 21:20
感谢感谢!
我先尝试这么去做做看
就是感觉有点复杂,每个敌人都要这样处理会挺难受,


查了一下,Yanfly的插件Battle A.I. Core (YEP)可以设定敌人多个条件的行动模式,但是也有一点小问题。

Battle A.I. Core (YEP)插件地址: http://www.yanfly.moe/wiki/Battle_A.I._Core_(YEP)

如果将插件的Dynamic Actions设定为true,官方的说明是,这个选项为true时,敌人不会像默认情况下在战斗回合开始时就决定自己的行动,而是轮到这个敌人时再决定行动。所以如果把这个选项设为true,就算战斗回合开始时满足了敌人特殊行动的条件,只要轮到敌人实际行动前发生的事件使得不再满足条件(如敌人的HP临时得到恢复),敌人就不会采取特殊行动。同理,就算回合开始时不满足条件,只要轮到这个敌人时刚好满足条件,敌人就可以采取特殊行动。

敌人的备注栏写法参考:
  1. <AI Level: 100>
  2. <AI Priority>
  3. Turn % 5 == 0 +++ User HP% param <= 50% +++ Eval user.isStateAffected(11) : Skill 11, Random
  4. </AI Priority>
复制代码

同时满足回合数为5x、技能使用者HP为50%或以下、技能使用者正处于11号状态这三个条件时,使用11号技能,目标随机。(<AI Level: 100>是为了保证敌人100%会把这个规则加入到行动模式中)

虽然这种做法可以确保不会在条件不满足时采取特殊行动以及条件满足时就会采取特殊行动,但问题是,如果回合开始时不确定敌人要采取什么行动,那么要如何根据技能的速度补正等因素决定角色的行动顺序,从而得知什么时候轮到这个敌人?粗略试了一下我发现其他技能速度补正会影响轮到这个敌人行动的时间,但我并不清楚具体是如何影响的。

另外,因为敌人会灵活地根据轮到自己时的条件来采取行动,所以不会出现“本该采取某个行动但是由于当回合的某些因素而失败了”的情景。以及,Dynamic Actions的设置对所有敌人都有影响。


以上是将插件的Dynamic Actions设定为true的情况。如果将这个选项设为false,敌人将会像默认情况下在战斗回合开始时就决定自己的行动,所以就算像上面那样写出了技能的使用条件,敌人也会出现【当回合不再满足条件时敌人仍然会执行特殊行动】的问题。(另,似乎是因为决定行动的时机变了,需要将 Turn % 5 == 0 改为 Turn % 5 == 4 )

不过,可以结合Yanfly的另一个插件Skill Core (YEP)来在特定条件下禁用技能。在特殊行动所要执行的技能的备注中写入如下内容,这个技能将只能在使用者HP为50%或以下、正处于11号状态时使用(因为回合数不会被角色的行为改变,所以我没有写判定):
  1. <Custom Requirement>
  2. if ((user.hp <= user.mhp * 0.5) && (user.isStateAffected(11))) {
  3.     value = true;
  4. } else {
  5.     value = false;
  6. }
  7. </Custom Requirement>
复制代码


Skill Core (YEP)插件地址: http://www.yanfly.moe/wiki/Skill_Core_(YEP)

敌人在回合开始时已经决定使用这个技能但使用时技能不满足使用条件的话,什么都不会发生。如果想在敌人使用被禁用的技能时不是什么都不发生而是显示某些提示的话,或许可以写个插件修改系统的处理逻辑,不过我不会,所以算了。

其他的备选方案还有直接利用Skill Core (YEP)插件在一个空白的技能模板中完整写下这个特殊行动的执行内容,不过说不定修改使用被禁用技能时的处理逻辑还要简单一些。

点评

感觉应该是最优解了,这样应该就解决了,感谢大佬,麻烦您了!ovo  发表于 2024-7-5 18:32

评分

参与人数 1+1 收起 理由
uniguana + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1378
在线时间
200 小时
注册时间
2023-6-10
帖子
14
3
 楼主| 发表于 2024-7-4 21:20:43 | 只看该作者
煎蛋流Kira☆ 发表于 2024-7-3 23:53
MV本身就能做到

[fold=黑历史,已折叠,详见下方补充]

感谢感谢!
我先尝试这么去做做看
就是感觉有点复杂,每个敌人都要这样处理会挺难受,
如果有类似的插件就更好了
话说这个问题应该会比较常见啊,毕竟可能经常有处于特定状态时在指定回合使用技能这样的双条件判定设定
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
10518
在线时间
6144 小时
注册时间
2015-4-26
帖子
356
2
发表于 2024-7-3 23:53:22 | 只看该作者
本帖最后由 煎蛋流Kira☆ 于 2024-7-5 05:13 编辑

MV本身就能做到

黑历史,已折叠,详见下方补充


先前的黑历史发现了比较大的问题:在第5x-1回合满足条件后,就算一些行动导致第5x回合不再满足条件,敌人仍然会执行特殊行动,不是很符合直觉。如:第5x-1回合时,敌人的HP低于50%且进入燃烧状态,在下一回合决定自爆,但下一回合时速度较快的玩家抢先一步使用技能帮助敌人回复到100%HP且解除燃烧状态,可敌人还是自爆了。

为了解决这个问题,需要修改执行特殊行动的逻辑为:①第5x-1回合结束时,系统判定敌人是否满足执行特殊行动的条件,②若满足条件,则在第5x回合敌人增加一个特殊行动,③执行特殊行动时,根据当时敌人状态判定行动是否成功。因此不得不使用开关来进行控制。

首先是①第5x-1回合结束时,系统判定敌人是否满足执行特殊行动的条件。只需要在战斗内事件中设定为5x-1(等效于5x+4)回合结束时检查是否满足执行特殊行动的条件,若满足则打开【特殊技能条件】开关。



另,第5x回合结束时,无论是否执行特殊行动都要关闭【特殊技能条件】开关。



然后是②若满足条件,则在第5x回合敌人增加一个特殊行动。只需要在敌人行动模式中增加一个条件为【特殊技能条件】开关的【调用特殊技能】技能。



最后是③执行特殊行动时,根据当时敌人状态判定行动是否成功。因为执行特殊行动时不知道是否能成功执行,所以需要通过【调用特殊技能】这个技能来告诉系统要进行判定工作,实现的方法是用【调用特殊技能】这个空白技能通过公共事件打开【使用特殊技能】开关,从而触发战斗内事件的判定行为,再根据判定结果来决定实际执行的是哪个技能。





打开【使用特殊技能】开关后,会涉及战斗内事件的两个事件页:左边的事件页即时判定打开了【使用特殊技能】开关且满足所有条件后会成功执行特殊行动,否则失败,此外还关闭所有涉及特殊行动的开关;右边的事件页则只需要即时判定打开了【使用特殊技能】开关,执行的是特殊行动失败的内容,此外还关闭所有涉及特殊行动的开关。由于战斗内事件位于左边的事件页先执行,所以当满足特殊行动条件时,左边的事件页执行完后关闭所有涉及特殊行动的开关,便不会再执行右边的事件页;而当不满足特殊行动条件时,则不会执行左边的事件页而是执行右边的事件页。





注:示例中【指定状态】为执行特殊行动需要满足的敌人状态,【特殊技能】为此时的特殊行动,【使用特殊技能失败】为选择了执行特殊行动但不再满足条件时作为代替执行的行动,此处未列出具体内容可自由设定。

再注:用来触发判定行为的【调用特殊技能】这个技能的速度补正实际上是敌人的特殊行动的速度补正。

评分

参与人数 1+1 收起 理由
uniguana + 1 塞糖

查看全部评分

回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-23 21:46

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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