Project1

标题: 再动(额外回合)系统 [打印本页]

作者: 洛林    时间: 2016-11-18 13:20
标题: 再动(额外回合)系统
本帖最后由 洛林 于 2016-11-18 13:20 编辑

再动系统令灵感来自7龙传说。是指一个角色进入额外回合。在这个回合中,你可以输入指令,控制这个角色的行动,且只有这个角色可以行动,敌人和其他角色都不能行动。之后,继续进行正常的回合。
此外,额外回合不计数,也就是说不改变总回合数,也不影响状态持续时间。

一开始以为很麻烦,结果发现很简单……

首先,标记额外回合和行动者:
JAVASCRIPT 代码复制
  1. BattleManager.IsExtraTurn = function() {
  2.     return this._extra;
  3. };
  4.  
  5. BattleManager.ExtraActor = function() {
  6.     return this._extraActor;
  7. };


额外回合中输入指令:
JAVASCRIPT 代码复制
  1. BattleManager.startInput = function() {
  2.     this._phase = 'input';
  3.     if (this.IsExtraTurn()) {
  4.         this._extraActor.makeActions();
  5.         this.clearActor();
  6.         return;
  7.     }
  8.     $gameParty.makeActions();
  9.     $gameTroop.makeActions();
  10.     this.clearActor();
  11.     if (this._surprise || !$gameParty.canInput()) {
  12.         this.startTurn();
  13.     }
  14. };


要让只有这一个单位可以行动,让GameParty只有这个角色就可以了
JAVASCRIPT 代码复制
  1. Game_Party.prototype.allMembers = function() {
  2.     if (BattleManager.IsExtraTurn()) {
  3.         return [BattleManager.ExtraActor()];
  4.     }
  5.     return this._actors.map(function(id) {
  6.         return $gameActors.actor(id);
  7.     });
  8. };


回到正常回合
JAVASCRIPT 代码复制
  1. BattleManager.endTurn = function() {
  2.     if (this.IsExtraTurn()) {
  3.         this._extra = false;
  4.         this.startTurn();
  5.         return;
  6.     }
  7.     this._phase = 'turnEnd';
  8.     this._preemptive = false;
  9.     this._surprise = false;
  10.     this.allBattleMembers().forEach(function(battler) {
  11.         battler.onTurnEnd();
  12.         this.refreshStatus();
  13.         this._logWindow.displayAutoAffectedStatus(battler);
  14.         this._logWindow.displayRegeneration(battler);
  15.     }, this);
  16. };


接口:
JAVASCRIPT 代码复制
  1. Game_BattlerBase.prototype.TakeExtraTurn = function() {
  2.     BattleManager._extra = true;
  3.     BattleManager._extraActor = this;
  4.     BattleManager.startInput();
  5. };


使用时用 Actor.TakeExtraTurn() 即可。
最后,应该和其他的和战斗过程有关的插件是不兼容的。
作者: 小叮鈴    时间: 2016-11-18 13:32
內建不就有一個額外行動階段了.......
作者: 洛林    时间: 2016-11-18 13:35
小叮鈴 发表于 2016-11-18 13:32
內建不就有一個額外行動階段了.......

没有啊,哪有额外行动阶段
作者: 枫叶的北方    时间: 2016-11-18 18:07
可能是特性里面的额外动作?但是我一直不懂那个是怎么算的,有的时候是平A有的时候是防御
作者: 洛林    时间: 2016-11-21 12:57
小叮鈴 发表于 2016-11-18 13:32
內建不就有一個額外行動階段了.......

那个完全不符合要求啊……
作者: 574656549    时间: 2020-8-3 21:27
提示: 作者被禁止或删除 内容自动屏蔽




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