Project1

标题: 请问在YEP动作序列中如何用脚本判定命中敌人与否? [打印本页]

作者: 526396987    时间: 2018-11-7 18:08
标题: 请问在YEP动作序列中如何用脚本判定命中敌人与否?
各位好!


我的想法是利用if语句在YEP的action sequense中加入对技能命中的判定,如果为true,则执行×××action,反之则执行×××action,但是不知道具体的语法是什么,还请各位指点!谢谢!


当然,通过判定伤害似乎也能达到相同的效果,例如damage > 0 可以看成是技能命中了,如果各位能指教一下能达成这种判定的任意方法,感激不尽!





作者: yang1zhi    时间: 2018-11-7 19:38
YEP我不知道。
我提供你默认是怎么算的。
//true为MISS
    result.missed = (result.used && Math.random() >= this.itemHit(target));
//true为闪避
    result.evaded = (!result.missed && Math.random() < this.itemEva(target));
作者: qq1065526265    时间: 2018-11-7 20:09
if !target.result().missed&&!target.result().evaded
这句后面可以写命中之后的动作
作者: yang1zhi    时间: 2018-11-8 13:03
本帖最后由 yang1zhi 于 2018-11-8 13:05 编辑

if (result.evaded) {
执行
}
//当这次攻击是闪避的时候,就执行下面内容

if (result.missed) {
执行
}

//当这次攻击是未命中就执行下面内容


闪避的计算公式里写着,必须命中才会计算闪避公式
作者: yang1zhi    时间: 2018-11-8 15:00
Game_Action.prototype.apply = function(target) {
    var result = target.result();
    this.subject().clearResult();
    result.clear();
    result.used = this.testApply(target);
    result.missed = (result.used && Math.random() >= this.itemHit(target));
    result.evaded = (!result.missed && Math.random() < this.itemEva(target));
    result.physical = this.isPhysical();
    result.drain = this.isDrain();

作者: 526396987    时间: 2018-11-8 15:21
yang1zhi 发表于 2018-11-8 15:00
Game_Action.prototype.apply = function(target) {
    var result = target.result();
    this.subject( ...

谢谢帮忙!请问插件里的这个代码 是调用了原来objects.js里的函数吗?
Yanfly.BEC.Game_Action_apply = Game_Action.prototype.apply;
Game_Action.prototype.apply = function(target) {
    target._result = null;
    target._result = new Game_ActionResult();
    this.subject()._result = null;
    this.subject()._result = new Game_ActionResult();
作者: yang1zhi    时间: 2018-11-8 15:30
我不知道有没有覆盖原文,你可以在原文中添加console.log(1)没执行到就是被覆盖了。

写了Yanfly.BEC.Game_Action_apply = Game_Action.prototype.apply;
再函数里写上Yanfly.BEC.Game_Action_apply,应该就是继承原函数了。
写在Yanfly.BEC.Game_Action_apply上面的是在原函数之前执行
写在Yanfly.BEC.Game_Action_apply下面的是在原函数之后执行
作者: soulsaga    时间: 2018-11-8 15:43
全てのポップアップ(ダメージ表示)が再生し終わるまで待機        wait for popups
不知MISS会如何..
作者: 526396987    时间: 2018-11-8 17:43
soulsaga 发表于 2018-11-8 15:43
全てのポップアップ(ダメージ表示)が再生し終わるまで待機        wait for popups
不知MISS会如何.. ...

真的谢谢!但是这个判定就是不起作用,头疼。。。
············
wait for popups
  if !target.result().missed && !target.result().evaded
    change variable 20 = Math.random()*10
    if $gameVariables.value(20) >= 0 && $gameVariables.value(20) < 3
        add state 1: target
    if $gameVariables.value(20) >= 3 && $gameVariables.value(20) < 6
        add state 2: target
    if $gameVariables.value(20) >= 6 && $gameVariables.value(20) < 10
        add state 3: target
end
作者: qq1065526265    时间: 2018-11-8 19:47
526396987 发表于 2018-11-8 17:43
真的谢谢!但是这个判定就是不起作用,头疼。。。
············
wait for popups

你具体想怎么写?攻击之后如果命中就有几率附加某一个状态?说详细点
作者: 526396987    时间: 2018-11-8 20:24
qq1065526265 发表于 2018-11-8 19:47
你具体想怎么写?攻击之后如果命中就有几率附加某一个状态?说详细点

命中之后随机附加一个状态,无论是什么状态,附加几率都是100%,
打个比方,如果命中目标,25%概率附加中毒,25%概率附加混乱,25%附加睡眠,25%附加失明,4个状态里随机附加一个,但是不会什么状态都不附加。
然而关键问题就是,用了yep的action sequence,目标闪避了攻击,状态也会附加。。。。
作者: yang1zhi    时间: 2018-11-8 20:52
本帖最后由 yang1zhi 于 2018-11-8 21:30 编辑
526396987 发表于 2018-11-8 20:24
命中之后随机附加一个状态,无论是什么状态,附加几率都是100%,
打个比方,如果命中目标,25%概率附加中 ...


你要命中后执行,你直接写在
JAVASCRIPT 代码复制
  1. if (result.i s H i t ()) {

里面就可以了啊。
这里面就是命中后执行的内容。
伤害也是在这里面计算的
作者: soulsaga    时间: 2018-11-8 20:57
yang1zhi 发表于 2018-11-8 20:52
你要命中后执行,你直接写在
if (result.idear()) {
里面就可以了啊。


问一下大神..
if $gameVariables.value(20) >= 0 && $gameVariables.value(20) < 3
        add state 1: target
    if $gameVariables.value(20) >= 3 && $gameVariables.value(20) < 6
        add state 2: target
    if $gameVariables.value(20) >= 6 && $gameVariables.value(20) < 10
        add state 3: target
end

我不熟YEP的序列插件..这样写是不是要符合这3行条件才会执行?
作者: yang1zhi    时间: 2018-11-8 21:14
本帖最后由 yang1zhi 于 2018-11-8 21:16 编辑
soulsaga 发表于 2018-11-8 20:57
问一下大神..
if $gameVariables.value(20) >= 0 && $gameVariables.value(20) < 3
        add state 1: ...


我不是大神,我没用过YEP。
js应该是没有end的,
用小括号,大括号表示。
没带大括号的大概是执行下面一句的内容。
第二句就不算了
作者: 526396987    时间: 2018-11-8 22:17
yang1zhi 发表于 2018-11-8 20:52
你要命中后执行,你直接写在
if (result.i s H i t ()) {[/pre]
里面就可以了啊。

感谢大佬!这样就没问题了
真的困扰了很久,一开始没想到直接在插件中修改,谢谢大佬指点啦

1.png (47.85 KB, 下载次数: 34)

1.png

2.png (179.24 KB, 下载次数: 31)

2.png

3.png (181.13 KB, 下载次数: 35)

3.png

作者: qq1065526265    时间: 2018-11-8 23:23
本帖最后由 qq1065526265 于 2018-11-24 19:06 编辑
526396987 发表于 2018-11-8 20:24
命中之后随机附加一个状态,无论是什么状态,附加几率都是100%,
打个比方,如果命中目标,25%概率附加中 ...


我不会代码所以自己乱写了个不过没什么问题的
<Target Action>
MOTION SWING: user
action animation
wait for animation
action effect
death break
if target.result().missed&&!target.result().evaded
else
change variable 100 = Math.floor(Math.random()*4)
if $gameVariables.value(100) == 0
common event: 1
else
if $gameVariables.value(100) == 1
common event: 2
else
if $gameVariables.value(100) == 2
common event: 3
else
if $gameVariables.value(100) == 3
common event: 4
end
</Target Action>
你把common event这些改为附加状态就行
记得游戏里面把变量100弄出来留空




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1