Project1

标题: 问问,怎么让全队MP为0时触发某段剧情或者结局 [打印本页]

作者: RiJane    时间: 2026-5-19 21:57
标题: 问问,怎么让全队MP为0时触发某段剧情或者结局
如题,想做那种无论在哪张地图,只要mp归0时就触发一段剧情的效果
试过用插件让mp为0时附加状态效果,然后通过状态触发公共事件......但触发不了,遂来请教怎么做orz
作者: 灯笼菜刀王    时间: 2026-5-20 09:57
最简单的方法是建个并行处理的公共事件, 用开关a控制, 然后公共事件用 条件分歧: $gameParty.members().reduce((a, c) => Math.max(a, c.mp), 0) < 1 套起来, 满足的时候去处理, 不满足的时候关闭开关A

然后就是想办法打开开关A了,  因为MP一般情况下不会消耗, 只有打开菜单使用技能,战斗 和事件处理三种情况下会让MP归0, 那么在这些地方打开开关A即可(让AI帮你写个打开菜单、战斗结束的时候打开开关A的插件, 这种简单的脚本应该很容易吧)

当然, 想省事的话, 就一直保持并行的公共事件开启状态, 取消不满足的时候关闭开关A, 直到触发后再关闭开关A,  我个人并不建议这样做, 并行处理会影响游戏的流畅度,能少则少

如果你除了以上三种情况外, 还有其他消耗MP的情况, 比如状态持续掉MP,地形伤害掉MP什么的, 那就让并行处理持续打开吧, 笑
作者: 526396987    时间: 2026-5-20 10:25
也可以对Actor类override gainMp函数,HP、TP同理

  1. Game_Actor.prototype.gainMp = function(value) {
  2.     Game_Battler.prototype.gainMp.call(this, value);
  3.     if ($gameParty.members().every((actor) => actor.mp == 0))
  4.         $gameTemp.reserveCommonEvent(公共事件ID);
  5. };
复制代码

作者: RiJane    时间: 2026-5-24 02:19
灯笼菜刀王 发表于 2026-5-20 09:57
最简单的方法是建个并行处理的公共事件, 用开关a控制, 然后公共事件用 条件分歧: $gameParty.members().red ...

感谢大佬!!解决了!谢谢!
作者: RiJane    时间: 2026-5-24 02:20
526396987 发表于 2026-5-20 10:25
也可以对Actor类override gainMp函数,HP、TP同理

原来如此!感谢..!




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