Project1

标题: 一点小功能:依据状态的强制行动 [打印本页]

作者: X_R    时间: 2026-3-29 19:11
标题: 一点小功能:依据状态的强制行动
该插件最初是我为了解决使用Yep的Atb系统时使用无法行动类效果时出现的问题而想出的解决方法——我将行动强制变为空技能不就好了吗?
如你所见,会在行动时将拥有指定状态的对象最终输出技能强制修改为指定技能
假设有一技能92
我给某状态附加上<Force Skill: 92>
那么它就会将最后的行动输出结果强制变为92号技能

代码很简单,就是一个简单的检测+修改:
JAVASCRIPT 代码复制
  1. /*:
  2.  * @plugindesc 基于状态的强制行动
  3.  * @author X_R
  4.  * @help 对状态使用<Force Skill: X>(X为技能ID)使其在拥有状态时只能使用固定技能
  5.  * /
  6.  
  7. (function() {
  8.  
  9. function getForcedSkill(battler) {
  10.     var states = battler.states();
  11.     for (var i = 0; i < states.length; i++) {
  12.         var state = states[i];
  13.         if (state.meta["Force Skill"]) {
  14.             return Number(state.meta["Force Skill"]);
  15.         }
  16.     }
  17.     return null;
  18. }
  19.  
  20. var _startAction = BattleManager.startAction;
  21. BattleManager.startAction = function() {
  22.  
  23.     var subject = this._subject;
  24.  
  25.     if (subject) {
  26.  
  27.         var skillId = getForcedSkill(subject);
  28.  
  29.         if (skillId && !subject._forceLock) {
  30.  
  31.             subject._forceLock = true;
  32.  
  33.             var action = new Game_Action(subject);
  34.             action.setSkill(skillId);
  35.  
  36.             // 目标(自己)
  37.             action.setTarget(subject.index());
  38.  
  39.             subject._actions[0] = action;
  40.  
  41.             subject._forceLock = false;
  42.         }
  43.     }
  44.  
  45.     _startAction.call(this);
  46. };
  47.  
  48.  
  49. })();
  50.  


作者: 余杭    时间: 2026-3-30 11:35
更好的方法是把状态持续做成时间值,再定义一个回合时间
作者: X_R    时间: 2026-3-30 20:20
余杭 发表于 2026-3-30 11:35
更好的方法是把状态持续做成时间值,再定义一个回合时间

确实,不过其实本人也是由于懒得微调具体回合数所以才直接用的这个方法搭配自动行动实现233.........




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