Project1

标题: 求教一下战斗怎么做“抛硬币式“技能 [打印本页]

作者: haohaoniu    时间: 2024-5-14 16:06
标题: 求教一下战斗怎么做“抛硬币式“技能
就是使用A技能之后随机触发两种效果的其中一种,例如技能成功对面受伤,技能失败己方受伤。

开始想用事件做,想法是这样A技能触发公共事件,公共事件变量操作随机数1~2,判断变量=1强制战斗行动技能B,判断变量=2强制战斗行动技能C。但是这么做的话,强制战斗行动的行动主体只能指定一个角色,无法做到所有角色通用。

有没有办法可以做到这种类似抛硬币的技能?
作者: Z8K    时间: 2024-5-14 16:06
本帖最后由 Z8K 于 2024-5-19 04:45 编辑

用YEP战斗序列即可用一个技能做出来

对象为使用者 要有伤害公式 剩下自己搞

<target action>
motion item: user
action animation: user
common event: x //x填入随机变数的公共事件ID
wait for animation
if ($gameVariables.value(x) > 1)x为变数ID
  animation x: friends //x为给伤害用的动画
  action effect: friends
  add state x: user //x为状态A
else
  animation x: opponents //x为给伤害用的动画
  action effect: opponents
end
wait for animation
</target action>

實例:https://imgur.com/SUsiKwn
作者: 一只水俞    时间: 2024-5-18 18:23
强制敌人来放技能呗。
作者: haohaoniu    时间: 2024-5-19 18:39
Z8K 发表于 2024-5-19 04:24
用YEP战斗序列即可用一个技能做出来

对象为使用者 要有伤害公式 剩下自己搞

感谢大佬,实测可行。

但是我这样写战斗序列的话就报错,这是什么原因呢?


<target action>
common event: 5
wait for animation
if ($gameVariables.value(1) > 1)
if user.attackMotion() == 'thrust'
motion thrust: user
else
if user.attackMotion() == 'swing'
motion swing: user
else
motion missile: user
end
attack animation: target
wait for animation
action effect: target
else
if target.attackMotion() == 'thrust'
motion thrust: target
else
if target.attackMotion() == 'swing'
motion swing: target
else
motion missile: target
end
attack animation: user
wait for animation
action effect: user
end
</target action>

作者: Z8K    时间: 2024-5-19 20:32
本帖最后由 Z8K 于 2024-5-19 22:13 编辑
haohaoniu 发表于 2024-5-19 18:39
感谢大佬,实测可行。

但是我这样写战斗序列的话就报错,这是什么原因呢?


If else中的公式内容都是需要空两格让它可以判断出来的

尤其我看你的代码还在If else中套If else,就需要空格分的更清楚

此外 使用else且要用两种以上的else状况时除了最后一个使用else外其他要使用else if

所以你的notetag应该改成

<target action>
common event: 5
wait for animation //没动画干嘛塞这个?
if ($gameVariables.value(1) > 1)
  if user.attackMotion() == 'thrust'
    motion thrust: user
  else if user.attackMotion() == 'swing'
    motion swing: user
  else
    motion missile: user
  end
  attack animation: target
  wait for animation
  action effect: target
else
  if target.attackMotion() == 'thrust'
    motion thrust: target
  else if target.attackMotion() == 'swing'
    motion swing: target
  else
    motion missile: target
  end
  attack animation: user
  wait for animation
  action effect: user
end
</target action>
作者: haohaoniu    时间: 2024-5-19 21:44
Z8K 发表于 2024-5-19 20:32
If else中的公式内容都是需要空两格让它可以判断出来的

尤其我看你的代码还在If else中套If else,就需要 ...

可是这样之后就变成不管随到1还是2都是双方一起受伤害,是我哪里写错了吗?
作者: Z8K    时间: 2024-5-20 08:35
本帖最后由 Z8K 于 2024-5-20 08:37 编辑
haohaoniu 发表于 2024-5-19 21:44
可是这样之后就变成不管随到1还是2都是双方一起受伤害,是我哪里写错了吗? ...


应该是因为太多if else导致判定错误了

毕竟你原notetag太杂了

我帮你把
if user.attackMotion() == 'thrust'
    motion thrust: user
  else if user.attackMotion() == 'swing'
    motion swing: user
  else
    motion missile: user
  end
这部分直接去掉
改成用motion attack: user或是motion attack: target
这样其实就会读取该角色本身的普攻攻击行动

<target action> //想打敌方全体就把target改成whole
common event: 5
if ($gameVariables.value(1) > 1)
  motion attack: user
  attack animation: target
  wait for animation
  action effect: target
else
  motion attack: target
  attack animation: user
  wait for animation
  action effect: user
end
</target action> //想打敌方全体就把target改成whole
作者: haohaoniu    时间: 2024-5-20 15:12
Z8K 发表于 2024-5-20 08:35
应该是因为太多if else导致判定错误了

毕竟你原notetag太杂了

哇,非常感谢大神。以前学的时候都是教不同武器动画攻击这么写的。从来没见过有人教写motion attack。害我还以为motion attack也是不分武器动画。难怪以前写技能那么多BUG,这次受益良多。




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