设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 461|回复: 0
打印 上一主题 下一主题

[有事请教] 请教VE_CooperationSkills 合作技插件的错误如何修复

[复制链接]

Lv4.逐梦者

梦石
0
星屑
6403
在线时间
815 小时
注册时间
2021-8-28
帖子
91
跳转到指定楼层
1
发表于 2022-1-26 23:45:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 Rose_shadows 于 2022-1-27 07:24 编辑

插件在此:

这是前置插件:
JAVASCRIPT 代码复制
  1. /*
  2.  * ==============================================================================
  3.  * ** Victor Engine MV - Basic Module
  4.  * ------------------------------------------------------------------------------
  5.  *  VE_BasicModule.js
  6.  * ==============================================================================
  7.  */
  8.  
  9. var Imported = Imported || {};
  10. Imported['VE - Basic Module'] = '1.23';
  11.  
  12. var VictorEngine = VictorEngine || {};
  13. VictorEngine.BasicModule = VictorEngine.BasicModule || {};
  14.  
  15. (function() {
  16.  
  17.     VictorEngine.BasicModule.loadDatabase = DataManager.loadDatabase;
  18.     DataManager.loadDatabase = function() {
  19.         VictorEngine.BasicModule.loadDatabase.call(this);
  20.         PluginManager.requiredPlugin.call(PluginManager, 'VE - Basic Module');
  21.     };
  22.  
  23.     PluginManager.requiredPlugin = function(name, required, version) {
  24.         VictorEngine.BasicModule.checkPlugins(name, required, version);
  25.     };
  26.  
  27. })();
  28.  
  29. /*:
  30.  * ==============================================================================
  31.  * @plugindesc v1.23 - Plugin with base code required for all Victor Engine plugins.
  32.  * @author Victor Sant
  33.  *
  34.  * @param == Trait Names ==
  35.  *
  36.  * @param Hit Rate Name
  37.  * @desc 'Hit Rate' Ex-Parameter name shown on windows.
  38.  * @default Hit
  39.  *
  40.  * @param Evasion Rate Name
  41.  * @desc 'Evasion Rate' Ex-Parameter name shown on windows.
  42.  * @default Evasion
  43.  *
  44.  * @param Critical Rate Name
  45.  * @desc 'Critical Rate' Ex-Parameter name shown on windows.
  46.  * @default Critical
  47.  *
  48.  * @param Critical Evasion Name
  49.  * @desc 'Critical Evasion' Ex-Parameter name shown on windows.
  50.  * @default C. Evasion
  51.  *
  52.  * @param Magic Evasion Name
  53.  * @desc 'Magic Evasion' Ex-Parameter name shown on windows.
  54.  * @default M. Evasion
  55.  *
  56.  * @param Magic Reflection Name
  57.  * @desc 'Magic Reflection' Ex-Parameter name shown on windows.
  58.  * @default M. Reflection
  59.  *
  60.  * @param Counter Attack Name
  61.  * @desc 'Counter Attack' Ex-Parameter name shown on windows.
  62.  * @default Counter
  63.  *
  64.  * @param HP Regeneration Name
  65.  * @desc 'HP Regeneration' Ex-Parameter name shown on windows.
  66.  * @default HP Regen
  67.  *
  68.  * @param MP Regeneration Name
  69.  * @desc 'MP Regeneration' Ex-Parameter name shown on windows.
  70.  * @default MP Regen
  71.  *
  72.  * @param TP Regeneration Name
  73.  * @desc 'TP Regeneration' Ex-Parameter name shown on windows.
  74.  * @default TP Regen
  75.  *
  76.  * @param Target Rate Name
  77.  * @desc 'Target Rate' Sp-Parameter name shown on windows.
  78.  * @default Target Rate
  79.  *
  80.  * @param Guard Rate Name
  81.  * @desc 'Guard Rate' Sp-Parameter name shown on windows.
  82.  * @default Guard Rate
  83.  *
  84.  * @param Recovery Effect Name
  85.  * @desc 'Recovery Effect' Sp-Parameter name shown on windows.
  86.  * @default Recovery
  87.  *
  88.  * @param Pharmacology Name
  89.  * @desc 'Pharmacology' Sp-Parameter name shown on windows.
  90.  * @default Pharmacology
  91.  *
  92.  * @param MP Cost Rate Name
  93.  * @desc 'MP Cost Rate' Sp-Parameter name shown on windows.
  94.  * @default MP Cost
  95.  *
  96.  * @param TP Charge Rate Name
  97.  * @desc 'TP Charge Rate' Sp-Parameter name shown on windows.
  98.  * @default TP Charge
  99.  *
  100.  * @param Physical Damage Name
  101.  * @desc 'Physical Damage' Sp-Parameter name shown on windows.
  102.  * @default Physical Damage
  103.  *
  104.  * @param Magical Damage Name
  105.  * @desc 'Magical Damage' Sp-Parameter name shown on windows.
  106.  * @default Magical Damage
  107.  *
  108.  * @param Floor Damage Name
  109.  * @desc 'Floor Damage' Sp-Parameter name shown on windows.
  110.  * @default Floor Damage
  111.  *
  112.  * @param Experience Rate Name
  113.  * @desc 'Experience Rate' Sp-Parameter name shown on windows.
  114.  * @default Exp. Rate
  115.  *
  116.  * ==============================================================================
  117.  * @help
  118.  * ==============================================================================
  119.  * Install this plugin above any other Victor Engine plugin.
  120.  * ==============================================================================
  121.  *
  122.  * ==============================================================================
  123.  *  Version History:
  124.  * ------------------------------------------------------------------------------
  125.  *  v 1.00 - 2015.11.26 > First release.
  126.  *  v 1.01 - 2015.11.29 > Added function to get database objects.
  127.  *  v 1.02 - 2015.12.07 > Added function to get multiples elements.
  128.  *                      > Added check for plugin correct order.
  129.  *  v 1.03 - 2015.12.13 > Added function to get page comments.
  130.  *  v 1.04 - 2015.12.21 > Added function to check only relevant objects.
  131.  *  v 1.05 - 2015.12.25 > Added check to wait bitmap loading.
  132.  *  v 1.06 - 2015.12.31 > Added rgb to hex and hex to rgb functions.
  133.  *                      > Added function to get plugins parameters.     
  134.  *  v 1.07 - 2016.01.07 > Fixed issue with plugin order checks.
  135.  *  v 1.08 - 2016.01.17 > Added function to get BattleLog method index.
  136.  *                      > Added function to insert methods on BattleLog.
  137.  *  v 1.09 - 2016.01.24 > Added function to set wait for animations.
  138.  *  v 1.10 - 2016.02.05 > Added function to get values from regex.
  139.  *  v 1.11 - 2016.02.10 > Added function to capitalize texts.
  140.  *                      > Added Plugin Parameter to set trait display names.
  141.  *  v 1.12 - 2016.02.18 > Added function to get parameter names.
  142.  *  v 1.13 - 2016.02.26 > Added functions to setup battler direction.
  143.  *  v 1.14 - 2016.03.15 > Added functions to check opponents.
  144.  *  v 1.15 - 2016.03.18 > Added function for compatibility with YEP.
  145.  *  v 1.16 - 2016.03.23 > Added function to replace mathods.
  146.  *                        Added functions for dynamic motions.
  147.  *  v 1.17 - 2016.04.01 > Fixed issue with battler sprite check.
  148.  *  v 1.18 - 2016.04.21 > Fixed issue with damage popup on action user.
  149.  *  v 1.19 - 2016.04.30 > Added function to get evaluated font color.
  150.  *  v 1.20 - 2016.05.12 > Added function to get width of text with escape codes.
  151.  *  v 1.21 - 2016.05.31 > Improved method stack for dynamic motions.
  152.  *                      > Added functions for compatibility with Battle Motions.
  153.  *  v 1.22 - 2016.06.26 > Added functions for escape command.
  154.  *  v 1.23 - 2017.05.25 > Added functions for damage formula.
  155.  * ===============================================================================
  156.  */
  157.  
  158. (function() {
  159.  
  160.     //=============================================================================
  161.     // Parameters
  162.     //=============================================================================
  163.  
  164.     VictorEngine.getPluginParameters = function() {
  165.         var script = document.currentScript || (function() {
  166.             var scripts = document.getElementsByTagName('script');
  167.             return scripts[scripts.length - 1];
  168.         })();
  169.         var start = script.src.lastIndexOf('/') + 1;
  170.         var end = script.src.indexOf('.js');
  171.         return PluginManager.parameters(script.src.substring(start, end));
  172.     }
  173.  
  174.     var parameters = VictorEngine.getPluginParameters();
  175.     VictorEngine.Parameters = VictorEngine.Parameters || {};
  176.     VictorEngine.Parameters.BasicModule = {};
  177.     VictorEngine.Parameters.BasicModule.hit = String(parameters["Hit Rate Name"]).trim();
  178.     VictorEngine.Parameters.BasicModule.eva = String(parameters["Evasion Rate Name"]).trim();
  179.     VictorEngine.Parameters.BasicModule.cri = String(parameters["Critical Rate Name"]).trim();
  180.     VictorEngine.Parameters.BasicModule.cev = String(parameters["Critical Evasion Name"]).trim();
  181.     VictorEngine.Parameters.BasicModule.hev = String(parameters["Magic Evasion Name"]).trim();
  182.     VictorEngine.Parameters.BasicModule.mrf = String(parameters["Magic Reflection Name"]).trim();
  183.     VictorEngine.Parameters.BasicModule.cnt = String(parameters["Counter Attack Name"]).trim();
  184.     VictorEngine.Parameters.BasicModule.hrg = String(parameters["HP Regeneration Name"]).trim();
  185.     VictorEngine.Parameters.BasicModule.mrg = String(parameters["MP Regeneration Name"]).trim();
  186.     VictorEngine.Parameters.BasicModule.trg = String(parameters["TP Regeneration Name"]).trim();
  187.     VictorEngine.Parameters.BasicModule.tgr = String(parameters["Target Rate Name"]).trim();
  188.     VictorEngine.Parameters.BasicModule.grd = String(parameters["Guard Rate Name"]).trim();
  189.     VictorEngine.Parameters.BasicModule.rec = String(parameters["Recovery Effect Name"]).trim();
  190.     VictorEngine.Parameters.BasicModule.pha = String(parameters["Pharmacology Name"]).trim();
  191.     VictorEngine.Parameters.BasicModule.mcr = String(parameters["MP Cost Rate Name"]).trim();
  192.     VictorEngine.Parameters.BasicModule.tcr = String(parameters["TP Charge Rate Name"]).trim();
  193.     VictorEngine.Parameters.BasicModule.pdr = String(parameters["Physical Damage Name"]).trim();
  194.     VictorEngine.Parameters.BasicModule.mdr = String(parameters["Magical Damage Name"]).trim();
  195.     VictorEngine.Parameters.BasicModule.fdr = String(parameters["Floor Damage"]).trim();
  196.     VictorEngine.Parameters.BasicModule.ext = String(parameters["Experience"]).trim();
  197.  
  198.     //=============================================================================
  199.     // DataManager
  200.     //=============================================================================
  201.  
  202.     VictorEngine.BasicModule.isDatabaseLoaded = DataManager.isDatabaseLoaded;
  203.     DataManager.isDatabaseLoaded = function() {
  204.         if (!VictorEngine.BasicModule.isDatabaseLoaded.call(this)) return false;
  205.         VictorEngine.loadParameters();
  206.         VictorEngine.loadNotetags();
  207.         return ImageManager.isReady();
  208.     };
  209.  
  210.     //=============================================================================
  211.     // VictorEngine
  212.     //=============================================================================
  213.  
  214.     VictorEngine.BasicModule.checkPlugins = function(name, req, ver) {
  215.         var msg = '';
  216.         this.loadedPlugins = this.loadedPlugins || {};
  217.         if (ver && req && (!Imported[req] || Number(Imported[req]) < Number(ver))) {
  218.             msg += 'The plugin ' + name + ' requires the plugin ' + req;
  219.             msg += ' v' + ver + ' or higher installed to work properly'
  220.             if (Number(Imported[req]) < Number(ver)) {
  221.                 msg += '. Your current version is v' + Imported[req];
  222.             }
  223.             msg += '. Go to [url]http://victorenginescripts.wordpress.com/'[/url]
  224.             msg += ' to download the updated plugin.';
  225.             throw msg;
  226.         } else if (!ver && req && this.loadedPlugins[req] === true) {
  227.             msg += 'The plugin ' + name + ' requires the plugin ' + req;
  228.             msg += ' to be placed bellow it. Open the Plugin Manager and place';
  229.             msg += ' the plugins in the correct order.';
  230.             throw msg;
  231.         } else if (req && Imported['VE - Basic Module'] && !this.loadedPlugins['VE - Basic Module']) {
  232.             msg += 'The plugin ' + name + ' must be placed bellow the plugin ' + req;
  233.             msg += '. Open the Plugin Manager and place';
  234.             msg += ' the plugins in the correct order.';
  235.             throw msg;
  236.         } else {
  237.             this.loadedPlugins[name] = true
  238.         }
  239.     };
  240.  
  241.     VictorEngine.loadNotetags = function() {
  242.         if (VictorEngine.BasicModule.loaded) return;
  243.         VictorEngine.BasicModule.loaded = true;
  244.         var list = [$dataActors, $dataClasses, $dataSkills, $dataItems, $dataWeapons,
  245.             $dataArmors, $dataEnemies, $dataStates
  246.         ];
  247.         list.forEach(function(objects, index) {
  248.             this.processNotetags(objects, index)
  249.         }, this);
  250.     };
  251.  
  252.     VictorEngine.processNotetags = function(objects, index) {
  253.         objects.forEach(function(data) {
  254.             if (data) {
  255.                 this.loadNotetagsValues(data, index);
  256.             }
  257.         }, this);
  258.     };
  259.  
  260.     VictorEngine.objectSelection = function(index, list) {
  261.         var objects = ['actor', 'class', 'skill', 'item', 'weapon', 'armor', 'enemy', 'state'];
  262.         return list.contains(objects[index]);
  263.     };
  264.  
  265.     VictorEngine.loadNotetagsValues = function(data, index) {};
  266.  
  267.     VictorEngine.loadParameters = function() {};
  268.  
  269.     VictorEngine.getNotesValues = function(value1, value2) {
  270.         value2 = value2 || value1;
  271.         return new RegExp('<' + value1 + '>([\\s\\S]*?)<\\/' + value2 + '>', 'gi');
  272.     };
  273.  
  274.     VictorEngine.getPageNotes = function(event) {
  275.         var result = (event instanceof Game_CommonEvent) || event.page();
  276.         if (!result || !event.list()) {
  277.             return "";
  278.         }
  279.         return event.list().reduce(function(r, cmd) {
  280.             var valid = (cmd.code === 108 || cmd.code === 408);
  281.             var comment = valid ? cmd.parameters[0] + "\r\n" : "";
  282.             return r + comment;
  283.         }, "");
  284.     };
  285.  
  286.     VictorEngine.getAllElements = function(subject, action) {
  287.         if (action.item().damage.elementId < 0) {
  288.             return subject.attackElements();
  289.         } else {
  290.             return [action.item().damage.elementId];
  291.         }
  292.     };
  293.  
  294.     VictorEngine.getAllStates = function(subject, item) {
  295.         var result;
  296.         return item.effects.reduce(function(r, effect) {
  297.             if (effect.code === 21) {
  298.                 if (effect.dataId === 0) {
  299.                     result = subject.attackStates();
  300.                 } else {
  301.                     result = [effect.dataId];
  302.                 };
  303.             } else {
  304.                 result = [];
  305.             };
  306.             return r.concat(result);
  307.         }, []);
  308.     };
  309.  
  310.     VictorEngine.getDamageFormula = function(action) {
  311.                 return action.item().damage.formula;
  312.     };
  313.  
  314.     VictorEngine.getNumberValue = function(match, type, base) {
  315.         var regex = new RegExp(type + '[ ]*:[ ]*([+-.\\d]+)', 'gi');
  316.         var value = regex.exec(match);
  317.         return value ? Number(value[1]) : base;
  318.     };
  319.  
  320.     VictorEngine.getStringValue = function(match, type, base) {
  321.         var regex = new RegExp(type + "[ ]*:[ ]*([\\w ]+)", 'gi');
  322.         var value = regex.exec(match);
  323.         return value ? value[1].trim() : base;
  324.     };
  325.  
  326.     VictorEngine.getAnyValue = function(match, type, base) {
  327.         var regex = new RegExp(type + "[ ]*:[ ]*('[^\']+'|\"[^\"]+\")", 'gi');
  328.         var value = regex.exec(match);
  329.         return value ? value[1].slice(1, -1) : base;
  330.     };
  331.  
  332.     VictorEngine.getNumberValues = function(match, type) {
  333.         var regex = new RegExp(type + '[ ]*:[ ]*((?:[+-.\\d]+[ ]*,?[ ]*)+)', 'gi');
  334.         var value = regex.exec(match);
  335.         var result = value ? value[1].match(/\d+/gi) : [];
  336.         return result.map(function(id) {
  337.             return Number(id)
  338.         });
  339.     };
  340.  
  341.     VictorEngine.getStringValues = function(match, type) {
  342.         var regex = new RegExp(type + '[ ]*:[ ]*((?:[\\w ]+[ ]*,?[ ]*)+)', 'gi');
  343.         var value = regex.exec(match);
  344.         var result = value ? value[1].match(/\d+/gi) : [];
  345.         return result.map(function(id) {
  346.             return value[1].trim()
  347.         });
  348.     };
  349.  
  350.     VictorEngine.captalizeText = function(text) {
  351.         return text.replace(/(?:^|\s)\S/g, function(a) {
  352.             return a.toUpperCase();
  353.         });
  354.     };
  355.  
  356.     VictorEngine.replaceZeros = function(text, value) {
  357.         value = value || '';
  358.         return text.replace(/\b(0(?!\b))+/g, function(a) {
  359.             return a.replace(/0/g, value);
  360.         });
  361.     };
  362.  
  363.     VictorEngine.rgbToHex = function(r, g, b) {
  364.         r = Math.floor(r).toString(16).padZero(2);
  365.         g = Math.floor(g).toString(16).padZero(2);
  366.         b = Math.floor(b).toString(16).padZero(2);
  367.         return '#' + r + g + b;
  368.     }
  369.  
  370.     VictorEngine.hexToRgb = function(hex) {
  371.         var r = parseInt(hex[1] + hex[2], 16);
  372.         var g = parseInt(hex[3] + hex[4], 16);
  373.         var b = parseInt(hex[5] + hex[6], 16);
  374.         return [r, g, b];
  375.     }
  376.  
  377.     VictorEngine.methodIndex = function(methods, name) {
  378.         for (var i = 0; i < methods.length; i++) {
  379.             if (methods[i] && methods[i].name === name) {
  380.                 return i;
  381.             }
  382.         }
  383.         return null;
  384.     }
  385.  
  386.     VictorEngine.removeMethod = function(methods, name) {
  387.         var index = this.methodIndex(methods, name);
  388.         if (index || index === 0) {
  389.             methods.splice(index, 1);
  390.         }
  391.     }
  392.  
  393.     VictorEngine.insertMethod = function(methods, index, name, params) {
  394.         if (index || index === 0) {
  395.             methods.splice(index, 0, {
  396.                 name: name,
  397.                 params: params
  398.             });
  399.         }
  400.     }
  401.  
  402.     VictorEngine.replaceMethod = function(methods, index, name, params) {
  403.         if (index || index === 0) {
  404.             methods.splice(index, 1, {
  405.                 name: name,
  406.                 params: params
  407.             });
  408.         }
  409.     }
  410.  
  411.     VictorEngine.waitAnimation = function(animationId) {
  412.         var animation = $dataAnimations[animationId];
  413.         return animation ? animation.frames.length * 4 + 1 : 0;
  414.     };
  415.  
  416.     VictorEngine.params = function() {
  417.         return ['hp', 'mp', 'atk', 'def', 'mat', 'mdf', 'agi', 'luk'];
  418.     };
  419.  
  420.     VictorEngine.xparams = function() {
  421.         return ['hit', 'eva', 'cri', 'cev', 'mev', 'mrf', 'cnt', 'hrg', 'mrg', 'trg'];
  422.     };
  423.  
  424.     VictorEngine.sparams = function() {
  425.         return ['tgr', 'grd', 'rec', 'pha', 'mcr', 'tcr', 'prd', 'mrd', 'frd', 'exr'];
  426.     };
  427.  
  428.     VictorEngine.allParams = function() {
  429.         return this.params().concat(this.xparams(), this.sparams())
  430.     };
  431.  
  432.     VictorEngine.paramName = function(paramId) {
  433.         return this.params()[paramId];
  434.     };
  435.  
  436.     VictorEngine.xparamName = function(xparamId) {
  437.         return this.xparams()[xparamId];
  438.     };
  439.  
  440.     VictorEngine.sparamName = function(sparamId) {
  441.         return this.sparams()[sparamId];
  442.     };
  443.  
  444.     VictorEngine.paramId = function(paramName) {
  445.         return this.params().indexOf(paramName.toLowerCase());
  446.     };
  447.  
  448.     VictorEngine.paramText = function(name) {
  449.         switch (name.toLowerCase()) {
  450.             case 'hit':
  451.             case 'eva':
  452.             case 'cri':
  453.             case 'cev':
  454.             case 'mev':
  455.             case 'mrf':
  456.             case 'cnt':
  457.             case 'hrg':
  458.             case 'mrg':
  459.             case 'trg':
  460.             case 'tgr':
  461.             case 'grd':
  462.             case 'rec':
  463.             case 'pha':
  464.             case 'mcr':
  465.             case 'tcr':
  466.             case 'pdr':
  467.             case 'mdr':
  468.             case 'fdr':
  469.             case 'ext':
  470.                 return this.Parameters.BasicModule[name.toLowerCase()];
  471.             case 'hp':
  472.             case 'atk':
  473.             case 'def':
  474.             case 'agi':
  475.             case 'mp':
  476.             case 'mat':
  477.             case 'mdf':
  478.             case 'luk':
  479.                 var paramId = this.params().indexOf(name.toLowerCase());
  480.                 return TextManager.param(paramId)
  481.             default:
  482.                 return this.captalizeText(name.toLowerCase());
  483.         }
  484.     };
  485.  
  486.     VictorEngine.battlerIndex = function(battler) {
  487.         if (battler && battler.isActor() && $gameParty.members().contains(battler)) {
  488.             return 1 + $gameParty.members().indexOf(battler);
  489.         } else if (battler && battler.isEnemy() && $gameTroop.members().contains(battler)) {
  490.             return 1 + $gameParty.maxBattleMembers() + $gameTroop.members().indexOf(battler);
  491.         } else {
  492.             return 0;
  493.         }
  494.     };
  495.  
  496.     VictorEngine.battleSprites = function(spriteId) {
  497.         return this._battleSprites[spriteId];
  498.     };
  499.  
  500.     VictorEngine.addBattleSprite = function(spriteId, sprite) {
  501.         this._battleSprites = this._battleSprites || {};
  502.         this._battleSprites[spriteId] = sprite;
  503.     };
  504.  
  505.     //=============================================================================
  506.     // BattleManager
  507.     //=============================================================================
  508.  
  509.     BattleManager.updateStackAction = function(index, subject, target) {
  510.         this._logWindow.saveMethodsStack(index);
  511.         this.clearTargets(target);
  512.         this.invokeAction(subject, target);
  513.         this._logWindow.restoreMethodsStack(index);
  514.     };
  515.  
  516.     BattleManager.clearTargets = function(target) {
  517.         for (var i = 0; i < this._targets.length; i++) {
  518.             if (this._targets[i] === target) {
  519.                 this._targets.splice(i, 1);
  520.                 i--;
  521.             }
  522.         }
  523.     };
  524.  
  525.     BattleManager.clearActionTargets = function() {
  526.         this._targets = [];
  527.     };
  528.  
  529.     BattleManager.prepareAction = function(subject, action, targets, skip) {
  530.         this._phase = 'action';
  531.         this._subject = subject;
  532.         this._action = action;
  533.         this._targets = targets;
  534.         if (skip) {
  535.             subject.useItem(action.item());
  536.         }
  537.         this._action.applyGlobal();
  538.         this.refreshStatus();
  539.     };
  540.  
  541.     BattleManager.startCounterAction = function(subject, target, targets, action) {
  542.         if (targets.length > 0) {
  543.             this._isCounterAttack = true;
  544.             this._counterSubject = subject;
  545.             this._counterTarget = target;
  546.             this.prepareAction(subject, action, targets);
  547.             this._logWindow.startCounterAction(subject, action, targets);
  548.         }
  549.     };
  550.  
  551.     BattleManager.averageTargetsPositions = function(targets) {
  552.         var x = targets.reduce(function(r, member) {
  553.             return r + member.screenX();
  554.         }, 0) / targets.length;
  555.         var y = targets.reduce(function(r, member) {
  556.             return r + member.screenX();
  557.         }, 0) / targets.length;
  558.         return {
  559.             x: x,
  560.             y: y
  561.         };
  562.     };
  563.  
  564.     BattleManager.isSurprise = function() {
  565.         return this._surprise;
  566.     };
  567.  
  568.     BattleManager.isPreemptive = function() {
  569.         return this._preemptive;
  570.     };
  571.  
  572.     //=============================================================================
  573.     // SceneManager
  574.     //=============================================================================
  575.  
  576.     SceneManager.sceneSpriteset = function() {
  577.         return this._scene ? this._scene._spriteset : null;
  578.     };
  579.  
  580.     //=============================================================================
  581.     // Window_Base
  582.     //=============================================================================
  583.  
  584.     Window_Base.prototype.getFontColor = function(color) {
  585.         if (color.match(/^\#[abcdef\d]{6}/i)) {
  586.             return '"' + color + '"';
  587.         } else {
  588.             return color;
  589.         }
  590.     };
  591.  
  592.     //=============================================================================
  593.     // Game_Action
  594.     //=============================================================================
  595.  
  596.     Game_Action.prototype.setEscape = function() {
  597.         var action = {
  598.             name: TextManager.escape,
  599.             speed: 9999,
  600.             escape: true
  601.         };
  602.         this._escapeAction = action;
  603.     };
  604.  
  605.     Game_Action.prototype.isEscape = function() {
  606.         return !!this._escapeAction;
  607.     };
  608.  
  609.     //=============================================================================
  610.     // Game_Unit
  611.     //=============================================================================
  612.  
  613.     Game_Unit.prototype.averageX = function() {
  614.         return this.aliveMembers().reduce(function(r, member) {
  615.             return r + member.screenX();
  616.         }, 0) / this.aliveMembers().length;
  617.     };
  618.  
  619.     Game_Unit.prototype.averageY = function() {
  620.         return this.aliveMembers().reduce(function(r, member) {
  621.             return r + member.screenY();
  622.         }, 0) / this.aliveMembers().length;
  623.     };
  624.  
  625.     //=============================================================================
  626.     // Game_Player
  627.     //=============================================================================
  628.  
  629.     Game_Player.prototype.follower = function(index) {
  630.         return index === 0 ? this : this.followers().follower(index - 1);
  631.     };
  632.  
  633.     //=============================================================================
  634.     // Game_BattlerBase
  635.     //=============================================================================
  636.  
  637.     Game_BattlerBase.prototype.screenX = function() {
  638.         return this.spriteScreenX() || this._screenX || 0;
  639.     };
  640.  
  641.     Game_BattlerBase.prototype.screenY = function() {
  642.         return this.spriteScreenY() || this._screenY || 0;
  643.     };
  644.  
  645.     Game_BattlerBase.prototype.homeX = function() {
  646.         return this.battleSprite() ? this.battleSprite().homeX() : 0;
  647.     };
  648.  
  649.     Game_BattlerBase.prototype.homeY = function() {
  650.         return this.battleSprite() ? this.battleSprite().homeY() : 0;
  651.     };
  652.  
  653.     Game_BattlerBase.prototype.spriteScreenX = function() {
  654.         return this.battleSprite() ? this.battleSprite().screenX() : 0;
  655.     };
  656.  
  657.     Game_BattlerBase.prototype.spriteScreenY = function() {
  658.         return this.battleSprite() ? this.battleSprite().screenY() : 0;
  659.     };
  660.  
  661.     Game_BattlerBase.prototype.mainSprite = function() {
  662.         return this.battleSprite() ? this.battleSprite().mainSprite() : null;
  663.     };
  664.  
  665.     Game_BattlerBase.prototype.friends = function() {
  666.         return this.isActor() ? $gameParty : $gameTroop;
  667.     };
  668.  
  669.     Game_BattlerBase.prototype.opponents = function() {
  670.         return this.isEnemy() ? $gameParty : $gameTroop;
  671.     };
  672.  
  673.     Game_BattlerBase.prototype.isOpponent = function(battler) {
  674.         return this.isEnemy() === !battler.isEnemy();
  675.     };
  676.  
  677.     Game_BattlerBase.prototype.idleMotions = function() {
  678.         return ['wait', 'idle', 'dying', 'abnormal', 'guard', 'chant', 'sleep', 'victory', 'dead'];
  679.     };
  680.  
  681.     Game_BattlerBase.prototype.isIdleMotion = function(motionType) {
  682.         return this.idleMotions().contains(motionType);
  683.     };
  684.  
  685.     Game_BattlerBase.prototype.isFacingDown = function() {
  686.         return this.battlerDirection() === 'down';
  687.     };
  688.  
  689.     Game_BattlerBase.prototype.isFacingLeft = function() {
  690.         return this.battlerDirection() === 'left';
  691.     };
  692.  
  693.     Game_BattlerBase.prototype.isFacingRight = function() {
  694.         return this.battlerDirection() === 'right';
  695.     };
  696.  
  697.     Game_BattlerBase.prototype.isFacingUp = function() {
  698.         return this.battlerDirection() === 'up';
  699.     };
  700.  
  701.     Game_BattlerBase.prototype.isFacingHorizontal = function() {
  702.         return this.isFacingLeft() || this.isFacingRight();
  703.     };
  704.  
  705.     Game_BattlerBase.prototype.isFacingVertical = function() {
  706.         return this.isFacingDown() || this.isFacingUp();
  707.     };
  708.  
  709.     Game_BattlerBase.prototype.turnDown = function() {
  710.         this._battlerDirection = 'down';
  711.     };
  712.  
  713.     Game_BattlerBase.prototype.turnLeft = function() {
  714.         this._battlerDirection = 'left';
  715.     };
  716.  
  717.     Game_BattlerBase.prototype.turnRight = function() {
  718.         this._battlerDirection = 'right';
  719.     };
  720.  
  721.     Game_BattlerBase.prototype.turnUp = function() {
  722.         this._battlerDirection = 'up';
  723.     };
  724.  
  725.     Game_BattlerBase.prototype.turnBack = function() {
  726.         if (this.isFacingLeft()) {
  727.             this.turnRight();
  728.         } else if (this.isFacingRight()) {
  729.             this.turnLeft();
  730.         }
  731.     };
  732.  
  733.     Game_BattlerBase.prototype.turnTowardCenter = function() {
  734.         this.turnTowardPosition(Graphics.boxWidth / 2, Graphics.boxHeight / 2);
  735.     };
  736.  
  737.     Game_BattlerBase.prototype.turnAwayFromCenter = function() {
  738.         this.turnAwayFromPosition(Graphics.boxWidth / 2, Graphics.boxHeight / 2);
  739.     };
  740.  
  741.     Game_BattlerBase.prototype.turnTowardOpponents = function() {
  742.         this.turnTowardPosition(this.opponents().averageX(), this.opponents().averageY());
  743.     };
  744.  
  745.     Game_BattlerBase.prototype.turnAwayFromOpponents = function() {
  746.         this.turnAwayFromPosition(this.opponents().averageX(), this.opponents().averageY);
  747.     };
  748.  
  749.     Game_BattlerBase.prototype.turnTowardTargets = function(targets) {
  750.         var position = BattleManager.averageTargetsPositions(targets);
  751.         this.turnTowardPosition(position.x, position.y);
  752.     };
  753.  
  754.     Game_BattlerBase.prototype.turnAwayFromTargets = function(targets) {
  755.         var position = BattleManager.averageTargetsPositions(targets);
  756.         this.turnAwayFromPosition(position.x, position);
  757.     };
  758.  
  759.     Game_BattlerBase.prototype.turnTowardPosition = function(positionX, positionY) {
  760.         if (this.screenX() < positionX) {
  761.             this.turnRight();
  762.         } else if (this.screenX() > positionX) {
  763.             this.turnLeft();
  764.         }
  765.     };
  766.  
  767.     Game_BattlerBase.prototype.turnAwayFromPosition = function(positionX, positionY) {
  768.         if (this.screenX() < positionX) {
  769.             this.turnLeft();
  770.         } else if (this.screenX() > positionX) {
  771.             this.turnRight();
  772.         }
  773.     };
  774.  
  775.     Game_BattlerBase.prototype.isBehind = function(target) {
  776.         return (target.isFacingRight() && this.screenX() < target.screenX()) ||
  777.             (target.isFacingLeft() && this.screenX() > target.screenX());
  778.     };
  779.  
  780.     Game_BattlerBase.prototype.isSpriteEffecting = function() {
  781.         return this.battleSprite() && this.battleSprite().isEffecting();
  782.     };
  783.  
  784.     Game_BattlerBase.prototype.isSpriteMoving = function() {
  785.         return this.battleSprite() && this.battleSprite().isMoving();
  786.     };
  787.  
  788.     Game_BattlerBase.prototype.isSpriteAnimation = function() {
  789.         return this.battleSprite() && this.battleSprite().isAnimationPlaying();
  790.     };
  791.  
  792.     Game_BattlerBase.prototype.isAnimatedBattler = function() {
  793.         return this.battleSprite() && this.battleSprite().isAnimatedBattler();
  794.     };
  795.  
  796.     Game_BattlerBase.prototype.isStaticBattler = function() {
  797.         return this.battleSprite() && this.battleSprite().isStaticBattler();
  798.     };
  799.  
  800.     Game_BattlerBase.prototype.inHomePosition = function() {
  801.         return this.battleSprite() && this.battleSprite().inHomePosition();
  802.     };
  803.  
  804.     Game_BattlerBase.prototype.notIinHomePosition = function() {
  805.         return !this.inHomePosition();
  806.     };
  807.  
  808.     Game_BattlerBase.prototype.isCounterAttack = function() {
  809.         return this._counterAttack;
  810.     };
  811.  
  812.     Game_BattlerBase.prototype.startCounterAttack = function() {
  813.         this._counterAttack = true;
  814.     };
  815.  
  816.     Game_BattlerBase.prototype.endCounterAttack = function() {
  817.         this._counterAttack = false;
  818.     };
  819.  
  820.     Game_BattlerBase.prototype.battleSprite = function() {
  821.         return VictorEngine.battleSprites(this.spriteId());
  822.     };
  823.  
  824.     Game_BattlerBase.prototype.setBattleSprite = function(sprite) {
  825.         VictorEngine.addBattleSprite(this.spriteId(), sprite);
  826.     };
  827.  
  828.     Game_BattlerBase.prototype.clearBattleSprite = function() {
  829.         VictorEngine.addBattleSprite(this.spriteId(), null);
  830.     };
  831.  
  832.     Game_BattlerBase.prototype.addNewAction = function(action) {
  833.         this._actions.unshift(action);
  834.     };
  835.  
  836.     Game_BattlerBase.prototype.startEscapeCommand = function() {
  837.         this._isEscapeCommand = true;
  838.     };
  839.     Game_BattlerBase.prototype.endEscapeCommand = function() {
  840.         this._isEscapeCommand = false;
  841.     };
  842.     Game_BattlerBase.prototype.isEscapeCommand = function() {
  843.         return this._isEscapeCommand;
  844.     };
  845.  
  846.     //=============================================================================
  847.     // Game_Battler
  848.     //=============================================================================
  849.  
  850.     VictorEngine.BasicModule.onBattleEnd = Game_Battler.prototype.onBattleEnd;
  851.     Game_Battler.prototype.onBattleEnd = function() {
  852.         VictorEngine.BasicModule.onBattleEnd.call(this);
  853.         this.clearBattleSprite();
  854.     };
  855.  
  856.     //=============================================================================
  857.     // Game_Actor
  858.     //=============================================================================
  859.  
  860.     Game_Actor.prototype.battlerDirection = function() {
  861.         return this._battlerDirection || 'left';
  862.     };
  863.  
  864.     Game_Actor.prototype.spriteId = function() {
  865.         return 'actor ' + String(this.actorId());
  866.     };
  867.  
  868.     //=============================================================================
  869.     // Game_Enemy
  870.     //=============================================================================
  871.  
  872.     Game_Enemy.prototype.battlerDirection = function() {
  873.         return this._battlerDirection || ($gameSystem.isSideView() ? 'right' : 'left');
  874.     };
  875.  
  876.     Game_Enemy.prototype.attackAnimationId1 = function() {
  877.         return 0;
  878.     };
  879.  
  880.     Game_Enemy.prototype.attackAnimationId2 = function() {
  881.         return 0;
  882.     };
  883.  
  884.     Game_Enemy.prototype.spriteId = function() {
  885.         return 'enemy ' + String(this.index());
  886.     };
  887.  
  888.     //=============================================================================
  889.     // Sprite_Battler
  890.     //=============================================================================
  891.  
  892.     Object.defineProperties(Sprite_Battler.prototype, {
  893.         z: {
  894.             get: function() {
  895.                 return 3;
  896.             },
  897.             configurable: true
  898.         },
  899.         h: {
  900.             get: function() {
  901.                 return this.spriteZ();
  902.             },
  903.             configurable: true
  904.         }
  905.     });
  906.  
  907.     Sprite_Battler.prototype.isEnemy = function() {
  908.         return this._battler && this._battler.isEnemy();
  909.     };
  910.  
  911.     Sprite_Battler.prototype.isVisible = function() {
  912.         return this.visible && this.opacity > 0;
  913.     };
  914.  
  915.     Sprite_Battler.prototype.isDamagePopup = function() {
  916.         return this._damages.length > 0;
  917.     };
  918.  
  919.     Sprite_Battler.prototype.isDisabledMotion = function() {
  920.         var motion = Sprite_Actor.MOTIONS;
  921.         return this._motion === motion['dead'] || this._motion === motion['sleep'];
  922.     };
  923.  
  924.     Sprite_Battler.prototype.isAnimatedBattler = function() {
  925.         return false;
  926.     };
  927.  
  928.     Sprite_Battler.prototype.isStaticBattler = function() {
  929.         return false;
  930.     };
  931.  
  932.     Sprite_Battler.prototype.spriteZ = function() {
  933.         return this.screenY();
  934.     };
  935.  
  936.     Sprite_Battler.prototype.screenX = function() {
  937.         return this._homeX + this._offsetX;
  938.     };
  939.  
  940.     Sprite_Battler.prototype.screenY = function() {
  941.         return this._homeY + this._offsetY;
  942.     };
  943.  
  944.     Sprite_Battler.prototype.homeX = function() {
  945.         return this._homeX;
  946.     };
  947.  
  948.     Sprite_Battler.prototype.homeY = function() {
  949.         return this._homeY;
  950.     };
  951.  
  952.     Sprite_Battler.prototype.mainSprite = function() {
  953.         return this._mainSprite;
  954.     };
  955.  
  956.     Sprite_Battler.prototype.noEntryMove = function() {
  957.         return this._battler && !this._battler.canMove();
  958.     };
  959.  
  960.     Sprite_Battler.prototype.center = function() {
  961.         var sprite = this._mainSprite ? this._mainSprite : this;
  962.         var x = sprite._frame.width / 2 || 0;
  963.         var y = sprite._frame.height / 2 || 0;
  964.         return {
  965.             x: x,
  966.             y: y
  967.         };
  968.     };
  969.  
  970.     //=============================================================================
  971.     // Sprite_Actor
  972.     //=============================================================================
  973.  
  974.     Sprite_Actor.prototype.updateBattlerDirection = function() {
  975.         if (this._battler && !this.isDisabledMotion()) {
  976.             if ((this._battler.isFacingLeft() && this.scale.x < 0) ||
  977.                 (this._battler.isFacingRight() && this.scale.x > 0)) {
  978.                 this.scale.x *= -1;
  979.             }
  980.         }
  981.     };
  982.  
  983.     //=============================================================================
  984.     // Sprite_Enemy
  985.     //=============================================================================
  986.  
  987.     Sprite_Enemy.prototype.updateBattlerDirection = function() {
  988.         if (this._battler && !this.isDisabledMotion()) {
  989.             if ((this._battler.isFacingLeft() && this.scale.x > 0) ||
  990.                 (this._battler.isFacingRight() && this.scale.x < 0)) {
  991.                 this.scale.x *= -1;
  992.             }
  993.         }
  994.     };
  995.  
  996.     Sprite_Enemy.prototype.isStaticBattler = function() {
  997.         return true;
  998.     };
  999.  
  1000.     //=============================================================================
  1001.     // Sprite_Damage
  1002.     //=============================================================================
  1003.  
  1004.     Object.defineProperties(Sprite_Damage.prototype, {
  1005.         z: {
  1006.             get: function() {
  1007.                 return 10;
  1008.             },
  1009.             configurable: true
  1010.         }
  1011.     });
  1012.  
  1013.     //=============================================================================
  1014.     // Spriteset_Battle
  1015.     //=============================================================================
  1016.  
  1017.     VictorEngine.BasicModule.setBattler = Sprite_Battler.prototype.setBattler;
  1018.     Sprite_Battler.prototype.setBattler = function(battler) {
  1019.         VictorEngine.BasicModule.setBattler.call(this, battler);
  1020.         if (battler) {
  1021.             battler.setBattleSprite(this);
  1022.         }
  1023.     };
  1024.  
  1025.     Spriteset_Battle.prototype.sortBattleSprites = function() {
  1026.         if (this._sortChildrenFrame !== Graphics.frameCount) {
  1027.             this._battleField.children.sort(this.compareBattleSprites.bind(this));
  1028.             this._sortChildrenFrame = Graphics.frameCount;
  1029.         }
  1030.     };
  1031.  
  1032.     Spriteset_Battle.prototype.compareBattleSprites = function(a, b) {
  1033.         if ((a.z || 0) !== (b.z || 0)) {
  1034.             return (a.z || 0) - (b.z || 0);
  1035.         } else if ((a.h || 0) !== (b.h || 0)) {
  1036.             return (a.h || 0) - (b.h || 0);
  1037.         } else if ((a.y || 0) !== (b.y || 0)) {
  1038.             return (a.y || 0) - (b.y || 0);
  1039.         } else {
  1040.             return a.spriteId - b.spriteId;
  1041.         }
  1042.     };
  1043.  
  1044.     //=============================================================================
  1045.     // Window_Base
  1046.     //=============================================================================
  1047.  
  1048.     Window_Base.prototype.textWidthEx = function(text) {
  1049.         if (text) {
  1050.             var state = {
  1051.                 index: 0,
  1052.                 x: 0
  1053.             };
  1054.             state.text = this.convertEscapeCharacters(text);
  1055.             while (state.index < state.text.length) {
  1056.                 this.processCharacter(state)
  1057.             };
  1058.             return state.x;
  1059.         } else {
  1060.             return 0;
  1061.         }
  1062.     };
  1063.  
  1064.     //=============================================================================
  1065.     // Window_BattleLog
  1066.     //=============================================================================
  1067.  
  1068.     Window_BattleLog.prototype.waitForBattleAnimation = function(animationId, speed) {
  1069.         var speed = Math.max(speed, 1) || 1;
  1070.         this.waitForTime(VictorEngine.waitAnimation(animationId) / speed);
  1071.     };
  1072.  
  1073.     Window_BattleLog.prototype.startCounterAction = function(subject, action, targets) {
  1074.         this.push('addText', TextManager.counterAttack.format(subject.name()));
  1075.         this.startAction(subject, action, targets);
  1076.     };
  1077.  
  1078.     Window_BattleLog.prototype.waitForTime = function(time) {
  1079.         this._waitCount = time;
  1080.     };
  1081.  
  1082.     Window_BattleLog.prototype.setupStartAction = function(subject, action, targets) {
  1083.         if (this._setupStartActionFrame !== Graphics.frameCount) {
  1084.             VictorEngine.removeMethod(this._methods, 'showAnimation');
  1085.             VictorEngine.removeMethod(this._methods, 'waitForBattleAnimation');
  1086.             this.push('prepareAction', subject, action, targets);
  1087.             this._setupStartActionFrame = Graphics.frameCount;
  1088.         }
  1089.     };
  1090.  
  1091.     Window_BattleLog.prototype.initializeMethodsStack = function() {
  1092.         this._stackWaitCount = [];
  1093.         this._stackWaitMode = [];
  1094.         this._methodsStack = [];
  1095.         this._stackIndex = 0;
  1096.     };
  1097.  
  1098.     Window_BattleLog.prototype.prepareAction = function(subject, action, targets) {
  1099.         this.uniqueTargets(targets).forEach(function(unique) {
  1100.             this._stackIndex = VictorEngine.battlerIndex(unique.target);
  1101.             this.prepareUniqueAction(subject, action, unique.target, unique.repeat)
  1102.         }, this)
  1103.         this._stackIndex = 0;
  1104.     };
  1105.  
  1106.     Window_BattleLog.prototype.prepareUniqueAction = function(subject, action, target, repeat) {
  1107.         this.prepareUniqueActionStep1(subject, action, target, repeat);
  1108.         this.prepareUniqueActionStep2(subject, action, target, repeat);
  1109.         this.prepareUniqueActionStep3(subject, action, target, repeat);
  1110.     };
  1111.  
  1112.     Window_BattleLog.prototype.prepareUniqueActionStep1 = function(subject, action, target, repeat) {
  1113.         var item = action.item();
  1114.         this.push('showAnimation', subject, [target], item.animationId);
  1115.     };
  1116.  
  1117.     Window_BattleLog.prototype.prepareUniqueActionStep2 = function(subject, action, target, repeat) {
  1118.         var item = action.item();
  1119.         var animId = this.uniqueActionAnimationId(subject, item)
  1120.         this.push('waitForBattleAnimation', animId);
  1121.     };
  1122.  
  1123.     Window_BattleLog.prototype.prepareUniqueActionStep3 = function(subject, action, target, repeat) {
  1124.         for (var i = 0; i < repeat; i++) {
  1125.             if (i > 0) {
  1126.                 this.push('waitForTime', 1);
  1127.             }
  1128.             this.push('updateStackAction', this._stackIndex, subject, target);
  1129.         }
  1130.     };
  1131.  
  1132.     Window_BattleLog.prototype.uniqueActionAnimationId = function(subject, item) {
  1133.         if (item.animationId < 0) {
  1134.             return subject.attackAnimationId1();
  1135.         } else {
  1136.             return item.animationId;
  1137.         }
  1138.     }
  1139.  
  1140.     Window_BattleLog.prototype.uniqueTargets = function(targets) {
  1141.         var repeats = [];
  1142.         targets.forEach(function(target, i) {
  1143.             var index = targets.indexOf(target);
  1144.             if (index === i) {
  1145.                 repeats[index] = {
  1146.                     target: target,
  1147.                     repeat: 1
  1148.                 };
  1149.             } else {
  1150.                 repeats[index].repeat++;
  1151.             }
  1152.         })
  1153.         return repeats.filter(function(repeat) {
  1154.             return !!repeat
  1155.         });
  1156.     }
  1157.  
  1158.     Window_BattleLog.prototype.updateMethodsStack = function() {
  1159.         var methods = this._methodsStack;
  1160.         for (var i = 0; i < methods.length; i++) {
  1161.             if (methods[i] && methods[i].length > 0) {
  1162.                 while (methods[i].length > 0 && !this.updateStackWait(i)) {
  1163.                     this.callNextStackMethod(i);
  1164.                 }
  1165.             }
  1166.         }
  1167.         if (this.isStackEmpty()) {
  1168.             this._methodsStack = [];
  1169.         }
  1170.     };
  1171.  
  1172.     Window_BattleLog.prototype.isStackEmpty = function() {
  1173.         return this._methodsStack.every(function(methods) {
  1174.             return !methods || methods.length === 0;
  1175.         })
  1176.     };
  1177.  
  1178.     Window_BattleLog.prototype.stackBattler = function(index) {
  1179.         if (index > 0) {
  1180.             var max = $gameParty.maxBattleMembers();
  1181.             if (index > max) {
  1182.                 return $gameTroop.members()[index - max - 1];
  1183.             } else {
  1184.                 return $gameParty.members()[index - 1];
  1185.             }
  1186.         } else {
  1187.             return null;
  1188.         }
  1189.     };
  1190.  
  1191.     Window_BattleLog.prototype.callNextStackMethod = function(index) {
  1192.         var method = this._methodsStack[index].shift();
  1193.         if (method.name && this[method.name]) {
  1194.             this[method.name].apply(this, method.params);
  1195.         } else {
  1196.             throw new Error('Method not found: ' + method.name);
  1197.         }
  1198.     };
  1199.  
  1200.     Window_BattleLog.prototype.saveMethodsStack = function(index) {
  1201.         this._saveStackIndex = this._stackIndex;
  1202.         this._saveMethodsStack = this._methodsStack[index].clone();
  1203.         this._stackIndex = index;
  1204.         this._methodsStack[index] = [];
  1205.     };
  1206.  
  1207.     Window_BattleLog.prototype.restoreMethodsStack = function(index) {
  1208.         this._methodsStack[index] = this._methodsStack[index].concat(this._saveMethodsStack);
  1209.         this._stackIndex = this._saveStackIndex;
  1210.     };
  1211.  
  1212.     Window_BattleLog.prototype.methodStackActive = function() {
  1213.         return this._methodsStack.length > 0;
  1214.     };
  1215.  
  1216.     Window_BattleLog.prototype.updateStackAction = function(index, subject, target) {
  1217.         BattleManager.updateStackAction(index, subject, target);
  1218.     };
  1219.  
  1220.     Window_BattleLog.prototype.pushMethodsStack = function(methodName) {
  1221.         var index = this._stackIndex || 0;
  1222.         var methodArgs = Array.prototype.slice.call(arguments, 1);
  1223.         if (methodName === 'wait') {
  1224.             methodName = 'stackWait';
  1225.             methodArgs.unshift(index);
  1226.         } else if (methodName === 'waitForTime') {
  1227.             methodName = 'stackWaitForTime';
  1228.             methodArgs.unshift(index);
  1229.         } else if (methodName === 'waitForBattleAnimation') {
  1230.             methodName = 'stackWaitFoAnimation';
  1231.             methodArgs.unshift(index);
  1232.         } else if (methodName === 'updateWaitMode') {
  1233.             methodName = 'updateStackWaitMode';
  1234.             methodArgs.unshift(index);
  1235.         } else if (methodName === 'setWaitMode') {
  1236.             methodName = 'setStackWaitMode';
  1237.             methodArgs.unshift(index);
  1238.         }
  1239.         this._methodsStack[index] = this._methodsStack[index] || [];
  1240.         this._methodsStack[index].push({
  1241.             name: methodName,
  1242.             params: methodArgs
  1243.         });
  1244.     };
  1245.  
  1246.     Window_BattleLog.prototype.updateStackWait = function(index) {
  1247.         return this.updateStackWaitCount(index) || this.updateStackWaitMode(index);
  1248.     };
  1249.  
  1250.     Window_BattleLog.prototype.updateStackWaitCount = function(index) {
  1251.         if (this._stackWaitCount[index] && this._stackWaitCount[index] > 0) {
  1252.             this._stackWaitCount[index]--;
  1253.             return true;
  1254.         }
  1255.         return false;
  1256.     };
  1257.  
  1258.     Window_BattleLog.prototype.stackWait = function(index) {
  1259.         this.stackWaitForTime(index, this.messageSpeed());
  1260.     };
  1261.  
  1262.     Window_BattleLog.prototype.stackWaitFoAnimation = function(index, animationId, speed) {
  1263.         var speed = Math.max(speed, 1) || 1;
  1264.         this.stackWaitForTime(index, VictorEngine.waitAnimation(animationId) / speed);
  1265.     };
  1266.  
  1267.     Window_BattleLog.prototype.stackWaitForTime = function(index, time) {
  1268.         this._stackWaitCount[index] = time;
  1269.     };
  1270.  
  1271.     Window_BattleLog.prototype.updateStackWaitMode = function(index) {
  1272.         var battler = this.stackBattler(index);
  1273.         var waitMode = this._stackWaitMode[index] || [];
  1274.         if (waitMode.contains('effect')) {
  1275.             var waiting = battler ? battler.isSpriteEffecting() : this._spriteset.isEffecting();
  1276.             if (waiting) {
  1277.                 return true;
  1278.             } else {
  1279.                 this.removeWaitMode(index, 'effect');
  1280.             }
  1281.         }
  1282.         if (waitMode.contains('movement')) {
  1283.             var waiting = battler ? battler.isSpriteMoving() : this._spriteset.isAnyoneMoving();
  1284.             if (waiting) {
  1285.                 return true;
  1286.             } else {
  1287.                 this.removeWaitMode(index, 'movement');
  1288.             }
  1289.         }
  1290.         this._stackWaitMode[index] = [];
  1291.         return false;
  1292.     };
  1293.  
  1294.     Window_BattleLog.prototype.setStackWaitMode = function(index, waitMode) {
  1295.         this._stackWaitMode[index] = this._stackWaitMode[index] || [];
  1296.         if (!this._stackWaitMode[index].contains(waitMode)) {
  1297.             this._stackWaitMode[index].push(waitMode);
  1298.         }
  1299.     };
  1300.  
  1301.     Window_BattleLog.prototype.removeWaitMode = function(index, waitMode) {
  1302.         this._stackWaitMode[index] = this._stackWaitMode[index] || [];
  1303.         var waitIndex = this._stackWaitMode[index].indexOf(waitMode);
  1304.         this._stackWaitMode[index].splice(waitIndex, 1);
  1305.     };
  1306.  
  1307.     Window_BattleLog.prototype.startEscape = function(subject, action) {
  1308.         subject._isEscapeCommand = true;
  1309.     };
  1310.  
  1311.     Window_BattleLog.prototype.performEscape = function(subject) {
  1312.         $gameParty._skipClear = true;
  1313.         BattleManager.processEscape();
  1314.         $gameParty._skipClear = false;
  1315.     };
  1316.  
  1317.     Window_BattleLog.prototype.setupCurrentAction = function(subject, action, targets) {};
  1318.  
  1319. })();


这是本体插件:(我自己稍微汉化了一下)
JAVASCRIPT 代码复制
  1. /*
  2. /*
  3.  * ==============================================================================
  4.  * ** Victor Engine MV - Cooperation Skills
  5.  * ------------------------------------------------------------------------------
  6.  *  CooperationSkills.js
  7.  * ==============================================================================
  8.  */
  9.  
  10. var Imported = Imported || {};
  11. Imported['VE - Cooperation Skills'] = '1.00';
  12.  
  13. var VictorEngine = VictorEngine || {};
  14. VictorEngine.CooperationSkills = VictorEngine.CooperationSkills || {};
  15.  
  16. (function() {
  17.  
  18.     VictorEngine.CooperationSkills.loadDatabase = DataManager.loadDatabase;
  19.     DataManager.loadDatabase = function() {
  20.         VictorEngine.CooperationSkills.loadDatabase.call(this);
  21.         PluginManager.requiredPlugin.call(PluginManager, 'VE - Cooperation Skills', 'VE - Basic Module', '1.22');
  22.         PluginManager.requiredPlugin.call(PluginManager, 'VE - Cooperation Skills', 'VE - Skip Battle Log');
  23.     };
  24.  
  25.     VictorEngine.CooperationSkills.requiredPlugin = PluginManager.requiredPlugin;
  26.     PluginManager.requiredPlugin = function(name, required, version) {
  27.         if (!VictorEngine.BasicModule) {
  28.             var msg = '插件 ' + name + ' 需要基础插件 ' + required;
  29.             msg += ' 版本' + version + ' 或以上才能生效。';
  30.             msg += ' 去 [url]http://victorenginescripts.wordpress.com/[/url] 下载插件。';
  31.             throw new Error(msg);
  32.         } else if (Imported.YEP_BattleEngineCore) {
  33.             var msg = '插件 ' + name + " 与";
  34.             msg += ' 插件 YEP Battle Engine Core不兼容。';
  35.             throw new Error(msg);
  36.         } else {
  37.             VictorEngine.CooperationSkills.requiredPlugin.call(this, name, required, version);
  38.         };
  39.     };
  40.  
  41. })();
  42.  
  43. /*:
  44.  * ==============================================================================
  45.  * @plugindesc v1.00 - 合作技
  46.  * 战斗者可以一同做出行动。
  47.  * @author Victor Sant
  48.  *
  49.  * ==============================================================================
  50.  * @help
  51.  * ==============================================================================
  52.  * 角色、职业、敌人、武器、防具和状态注释:
  53.  * ==============================================================================
  54.  *
  55.  * ==============================================================================
  56.  *  联合技(技能注释)
  57.  * ------------------------------------------------------------------------------
  58.  *  <unite skill: X[, X...]>
  59.  * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  60.  *  特定的角色一同发动该技能。
  61.  *    x: 角色ID
  62.  * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  63.  *  例.: <unite skill: 1, 2>
  64.  *       <unite skill: 3, 6, 4>
  65.  * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  66.  *  注:
  67.  *  - 你放置id的顺序与伤害公式相关,如果你使用插件'VE -战斗动作'的动
  68.  *    作序列。
  69.  * ==============================================================================
  70.  *
  71.  * ==============================================================================
  72.  *  融合技 (技能注释)
  73.  * ------------------------------------------------------------------------------
  74.  *  <fusion skill: X[, X...]>
  75.  * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  76.  *  当战斗人员使用同一回合列出的特定技能时,他们将加入执行该技能。
  77.  *    x : 技能ID
  78.  * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  79.  *  例: <fusion skill: 10, 12>
  80.  *       <fusion skill: 8, 8, 8>
  81.  * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  82.  *  NOTES:
  83.  *  - 你放置id的顺序与伤害公式相关,如果你使用插件'VE -战斗动作'的动
  84.  *    作序列。
  85.  *  - 多次使用相同的id意味着不止一名战士必须使用相同的技能。
  86.  * ==============================================================================
  87.  *
  88.  * ==============================================================================
  89.  *  组合技 (技能注释)
  90.  * ------------------------------------------------------------------------------
  91.  *  <combination skill: X>
  92.  * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  93.  *  要执行此技能,必须有多个战士在同一回合使用此技能。
  94.  *    x : 所需的战斗者数量
  95.  * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  96.  *  例.: <combination skill: 3>
  97.  * ==============================================================================
  98.  *
  99.  * ==============================================================================
  100.  * 另外的信息:
  101.  * ------------------------------------------------------------------------------
  102.  *  
  103.  *  合作技设置是在回合开始时完成的,即在所有输入完成之后。所以,如
  104.  *  果作为组合的一部分的战斗人员无法使用该技能,那么该组合就会失败,
  105.  *  所有参与其中的战斗人员都将失去该回合。
  106.  *
  107.  *  组合行动的时间是基于最慢的战斗者所涉及的速度。
  108.  *
  109.  * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  110.  *
  111.  *  - 联合技
  112.  *  “联合类型”要求所有角色都有技能学习和可用。当您为第一个角色选择技
  113.  *  能时,所需的所有其他角色将自动选择相同的技能。统一技能只适用于角
  114.  *  色。
  115.  *
  116.  * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  117.  *
  118.  *  - 融合技
  119.  *  “融合类型”是基于所使用的技能,如果所有所需的技能都被选中,使用这
  120.  *  些技能的战斗人员的行动将被融合技能取代。动作是在所有命令被选择后
  121.  *  ,在回合开始前设置的。战斗人员不需要学习技能就能使用。
  122.  *
  123.  * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  124.  *
  125.  *  - 组合技
  126.  *  “组合类型”是基于使用该技能的战斗人员的数量。如果达到了所需的战斗
  127.  *  人员数量,就会使用该技能。不同于联合技能,每个战士单独选择技能。
  128.  *
  129.  * ==============================================================================
  130.  *
  131.  * ==============================================================================
  132.  *  合作技和伤害公式:
  133.  * ------------------------------------------------------------------------------
  134.  *  当使用动作时,只会考虑当前激活的战斗者(即调用合作技时激活的战斗
  135.  *  者)的参数。若想在伤害公式中使用其他战斗者的参数,你可以使用 cp[X]
  136.  *  来引用参数,其中X是合作注释中战斗者的位置(对于联合技来说基于
  137.  *  角色的ID,对于融合技来说基于战斗者所使用的技能ID,对于组合技来
  138.  *  说基于选择动作的顺序)
  139.  *
  140.  *  例如,设置了以下注释:
  141.  *  <unite skill: 3, 6, 4>
  142.  *  - 使用cp[1]来引用第一个角色(角色#3)
  143.  *  - 使用cp[2]来引用第二个角色(角色#6)
  144.  *  - 使用cp[3]来引用第二个角色(角色#4)
  145.  *  
  146.  *  例如,伤害公式可以这样写:
  147.  *  (cp[1].atk + cp[2].atk + cp[3].atk) * 4 - b.def * 2
  148.  *  
  149.  * ==============================================================================
  150.  *
  151.  * ===============================================================================
  152.  *  合作技与即时战斗:
  153.  * -------------------------------------------------------------------------------
  154.  *  如果使用插件'VE - Active Time Battle',只有联合类型的合作技会
  155.  *  生效。还要注意的是,所有必要的战斗都必须让ATB栏是满的,如
  156.  *  果你使用“满等待”和“半等待”的更新模式,可能会更难设置组合,
  157.  *  因为在选择动作时ATB会被冻结。因此,建议只使用“半激活”和
  158.  *  “完全激活”模式。
  159.  
  160.  * ==============================================================================
  161.  *
  162.  * ===============================================================================
  163.  *  合作技和战斗动作:
  164.  * -------------------------------------------------------------------------------
  165.  *  If using the plugin 'VE - Battle Motions', you can use new [subject] values
  166.  *  of the motions for cooperation skills.
  167.  *
  168.  * ------------------------------------------------------------------------------
  169.  *  Here are all possible [subjects] values:
  170.  * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  171.  *   cooperation X   : the Xth battler participating on the cooperation skill.
  172.  *   all cooperation : all battlers participating on the cooperation skill.
  173.  * ------------------------------------------------------------------------------
  174.  *
  175.  * -----------------------------------------------------------------------------
  176.  *  - Motion Subjects: Combination X
  177.  * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  178.  *  This subject value will choose one of the combination battlers, based on the
  179.  *  type of cooperation and the order of the values on the notetag (similar to
  180.  *  how the damage formula choose the battlers)
  181.  *  
  182.  *  For example. you have the following notetag:
  183.  *  <unite skill: 3, 6, 4>
  184.  *  if you use motion 'move: cooperation 2, close to target, 12, 80;'
  185.  *  the second cooperation member (the actor Id 6) will move close to the target
  186.  * ==============================================================================
  187.  *
  188.  * ==============================================================================
  189.  * 兼容性:
  190.  * ------------------------------------------------------------------------------
  191.  * To be used together with this plugin, the following plugins must be placed
  192.  * bellow this plugin:
  193.  *    VE - Skip Battle Log
  194.  * ==============================================================================
  195.  *
  196.  * ==============================================================================
  197.  *  版本历史:
  198.  * ------------------------------------------------------------------------------
  199.  *  v 1.00 - 2016.07.20 > First release.
  200.  * ==============================================================================
  201.  */
  202.  
  203. (function() {
  204.  
  205.     //=============================================================================
  206.     // Parameters
  207.     //=============================================================================
  208.  
  209.     if (Imported['VE - Basic Module']) {
  210.         var parameters = VictorEngine.getPluginParameters();
  211.         VictorEngine.Parameters = VictorEngine.Parameters || {};
  212.         VictorEngine.Parameters.CooperationSkills = {};
  213.         VictorEngine.Parameters.CooperationSkills.PluginParameter = Number(parameters["Plugin Parameter"]) || 0;
  214.         VictorEngine.Parameters.CooperationSkills.PluginParameter = String(parameters["Plugin Parameter"]).trim();
  215.         VictorEngine.Parameters.CooperationSkills.PluginParameter = eval(parameters["Plugin Parameter"]);
  216.     }
  217.  
  218.     //=============================================================================
  219.     // VictorEngine
  220.     //=============================================================================
  221.  
  222.     VictorEngine.CooperationSkills.loadNotetagsValues = VictorEngine.loadNotetagsValues;
  223.     VictorEngine.loadNotetagsValues = function(data, index) {
  224.         VictorEngine.CooperationSkills.loadNotetagsValues.call(this, data, index);
  225.         if (this.objectSelection(index, ['skill'])) {
  226.             VictorEngine.CooperationSkills.loadNotes(data);
  227.         }
  228.     };
  229.  
  230.     VictorEngine.CooperationSkills.loadNotes = function(data) {
  231.         data.cooperationSkill = data.cooperationSkill || {};
  232.         this.processNotes(data);
  233.     };
  234.  
  235.     VictorEngine.CooperationSkills.processNotes = function(data, type) {
  236.         var match;
  237.         var regex1 = new RegExp('<unite skill:[ ]*((?:\\d+[ ]*,?[ ]*)+)[ ]*>', 'gi');
  238.         var regex2 = new RegExp('<fusion skill:[ ]*((?:\\d+[ ]*,?[ ]*)+)[ ]*>', 'gi');
  239.         var regex3 = new RegExp('<combination skill:[ ]*(\\d+)[ ]*>', 'gi');
  240.         while (match = regex1.exec(data.note)) {
  241.             data.cooperationSkill.unite = this.processValues(data, match);
  242.         };
  243.         while (match = regex2.exec(data.note)) {
  244.             data.cooperationSkill.fusion = this.processValues(data, match);
  245.         };
  246.         while (match = regex3.exec(data.note)) {
  247.             data.cooperationSkill.combination = Number(match[1]);
  248.         };
  249.         var skill = data.cooperationSkill;
  250.         var isUnite = skill.unite && skill.unite.length > 1;
  251.         var isFusion = skill.fusion && skill.fusion.length > 1;
  252.         var isCombination = skill.combination && skill.combination > 1;
  253.         data.isCooperation = isUnite || isFusion || isCombination;
  254.     };
  255.  
  256.     VictorEngine.CooperationSkills.processValues = function(data, match) {
  257.         return match[1].split(/[ ]*,[ ]*/gi).map(function(value) {
  258.             return Number(value);
  259.         });
  260.     };
  261.  
  262.     //=============================================================================
  263.     // BattleManager
  264.     //=============================================================================
  265.  
  266.     VictorEngine.CooperationSkills.startTurn = BattleManager.startTurn;
  267.     BattleManager.startTurn = function() {
  268.         if (!Imported['VE - Active Time Battle']) {
  269.             this.prepareCombinationActions();
  270.         }
  271.         VictorEngine.CooperationSkills.startTurn.call(this);
  272.     };
  273.  
  274.     VictorEngine.CooperationSkills.startAction = BattleManager.startAction;
  275.     BattleManager.startAction = function() {
  276.         if (Imported['VE - Active Time Battle']) {
  277.             this.setupUnionSkills();
  278.         }
  279.         VictorEngine.CooperationSkills.startAction.call(this);
  280.     };
  281.  
  282.     BattleManager.prepareCombinationActions = function() {
  283.         this.setupUnionSkills();
  284.         this.setupFusionSkills();
  285.         this.setupCombinationSkills();
  286.     };
  287.  
  288.     BattleManager.setupUnionSkills = function() {
  289.         $gameParty.members().forEach(function(member) {
  290.             if (member.uniteLeaderSkill()) {
  291.                 member.setupUniteBaltters();
  292.             }
  293.         });
  294.     };
  295.  
  296.     BattleManager.setupFusionSkills = function() {
  297.         for (var i = 1; i < $dataSkills.length; i++) {
  298.             var skill = $dataSkills[i]
  299.             if (skill.cooperationSkill.fusion) {
  300.                 this.setupFusionBattlers(skill, $gameParty.members());
  301.                 this.setupFusionBattlers(skill, $gameTroop.members());
  302.             }
  303.         };
  304.         this.allBattleMembers().forEach(function(member) {
  305.             if (member.fusionLeaderSkill()) {
  306.                 member.setupFusionBaltters();
  307.             }
  308.         });
  309.     };
  310.  
  311.     BattleManager.setupCombinationSkills = function() {
  312.         for (var i = 1; i < $dataSkills.length; i++) {
  313.             var skill = $dataSkills[i]
  314.             if (skill.cooperationSkill.combination) {
  315.                 this.setupCombinationBattlers(skill, $gameParty.members());
  316.                 this.setupCombinationBattlers(skill, $gameTroop.members());
  317.             }
  318.         };
  319.         this.allBattleMembers().forEach(function(member) {
  320.             if (member.combinationLeaderSkill()) {
  321.                 member.setupCombinationBaltters();
  322.             }
  323.         });
  324.     };
  325.  
  326.     BattleManager.setupFusionBattlers = function(skill, members) {
  327.         for (var i = 0; i < members.length; i++) {
  328.             var fusion = this.getFusionList(skill, members);
  329.             if (fusion.length === skill.cooperationSkill.fusion.length) {
  330.                 fusion[0].member.setFusionLeader(skill, fusion[0].id);
  331.                 for (var j = 1; j < fusion.length; j++) {
  332.                     fusion[j].member.setFusionMember(fusion[0].member, fusion[j].id);
  333.                 };
  334.             }
  335.         }
  336.     };
  337.  
  338.     BattleManager.getFusionList = function(skill, members) {
  339.         var fusion = [];
  340.         var skills = skill.cooperationSkill.fusion;
  341.         for (var i = 0; i < skills.length; i++) {
  342.             var id = skills[i];
  343.             var member = this.getFusionMember(members, fusion, id);
  344.             if (member) {
  345.                 fusion.push({
  346.                     member: member,
  347.                     id: id
  348.                 });
  349.             }
  350.         };
  351.         return fusion;
  352.     };
  353.  
  354.     BattleManager.getFusionMember = function(members, fusion, id) {
  355.         for (var i = 0; i < members.length; i++) {
  356.             var member = members[i];
  357.             if (this.notFusionMember(fusion, member) && member.isUsingFusion(id)) {
  358.                 return member;
  359.             }
  360.         };
  361.         return null;
  362.     };
  363.  
  364.     BattleManager.notFusionMember = function(fusions, member) {
  365.         return fusions.every(function(fusion) {
  366.             return fusion.member !== member;
  367.         })
  368.     };
  369.  
  370.     BattleManager.setupCombinationBattlers = function(skill, members) {
  371.         for (var i = 0; i < members.length; i++) {
  372.             var combination = this.getCombinationList(skill, members);
  373.             if (combination.length === skill.cooperationSkill.combination) {
  374.                 combination[0].setCombinationLeader(skill);
  375.                 for (var j = 1; j < combination.length; j++) {
  376.                     combination[j].setCombinationMember(combination[0]);
  377.                 };
  378.             }
  379.         };
  380.     };
  381.  
  382.     BattleManager.getCombinationList = function(skill, members) {
  383.         var combination = [];
  384.         var skills = skill.cooperationSkill.combination;
  385.         for (var i = 0; i < skills; i++) {
  386.             var member = this.getCombinationMember(members, combination, skill.id);
  387.             if (member) {
  388.                 combination.push(member);
  389.             }
  390.         };
  391.         return combination;
  392.     };
  393.  
  394.     BattleManager.getCombinationMember = function(members, combination, id) {
  395.         for (var i = 0; i < members.length; i++) {
  396.             var member = members[i];
  397.             if (!combination.contains(member) && member.isUsingCombination(id)) {
  398.                 return member;
  399.             }
  400.         };
  401.         return null;
  402.     };
  403.  
  404.     //=============================================================================
  405.     // Game_Action
  406.     //=============================================================================
  407.  
  408.     /* Overwritten function */
  409.     Game_Action.prototype.evalDamageFormula = function(target) {
  410.         try {
  411.             var item = this.item();
  412.             var a = this.subject();
  413.             var b = target;
  414.             var v = $gameVariables._data;
  415.             var cp = this.cooperationBattlersFormula();
  416.             var formula = VictorEngine.getDamageFormula(this);
  417.             var sign = ([3, 4].contains(item.damage.type) ? -1 : 1);
  418.             return (Math.max(eval(formula), 0) * sign) || 0;
  419.         } catch (e) {
  420.             return 0;
  421.         }
  422.     };
  423.  
  424.     VictorEngine.CooperationSkills.isValid = Game_Action.prototype.isValid;
  425.     Game_Action.prototype.isValid = function() {
  426.         return VictorEngine.CooperationSkills.isValid.call(this) && !this.subject().cooperationMember() &&
  427.             this.isCombinationOk();
  428.     };
  429.  
  430.     Game_Action.prototype.setCooperationBattlers = function() {
  431.         this._cooperationBattlers = this.cooperationActionBattlers();
  432.     };
  433.  
  434.     Game_Action.prototype.cooperationBattlers = function() {
  435.         return this._cooperationBattlers || [];
  436.     };
  437.  
  438.     Game_Action.prototype.cooperationBattlersFormula = function() {
  439.         return this.isCooperation() ? [{}].concat(this.cooperationBattlers()) : [];
  440.     };
  441.  
  442.     Game_Action.prototype.isCooperation = function() {
  443.         return this.item() && this.item().isCooperation;
  444.     };
  445.  
  446.     Game_Action.prototype.isUniteAction = function() {
  447.         return this.isCooperation() && this.item().cooperationSkill.unite;
  448.     };
  449.  
  450.     Game_Action.prototype.isFusionAction = function() {
  451.         return this.isCooperation() && this.item().cooperationSkill.fusion;
  452.     };
  453.  
  454.     Game_Action.prototype.isCombinationAction = function() {
  455.         return this.isCooperation() && this.item().cooperationSkill.combination;
  456.     };
  457.  
  458.     Game_Action.prototype.cooperationActionBattlers = function() {
  459.         if (this.isUniteAction()) {
  460.             return this.uniteActionBattlers();
  461.         } else if (this.isFusionAction()) {
  462.             return this.fusionActionBattlers();
  463.         } else if (this.isCombinationAction()) {
  464.             return this.combinationActionBattlers();
  465.         }
  466.         return [];
  467.     };
  468.  
  469.     Game_Action.prototype.cooperationLength = function() {
  470.         if (this.isUniteAction()) {
  471.             return this.item().cooperationSkill.unite.length;
  472.         } else if (this.isFusionAction()) {
  473.             return this.item().cooperationSkill.fusion.length;
  474.         } else if (this.isCombinationAction()) {
  475.             return this.item().cooperationSkill.combination;
  476.         }
  477.         return 0;
  478.     };
  479.  
  480.     Game_Action.prototype.uniteActionBattlers = function() {
  481.         return this.item().cooperationSkill.unite.map(function(id) {
  482.             return $gameActors.actor(id);
  483.         });
  484.     };
  485.  
  486.     Game_Action.prototype.fusionActionBattlers = function() {
  487.         var object = this;
  488.         var leader = this.subject();
  489.         var skills = this.item().cooperationSkill.fusion;
  490.         var fusion = [leader];
  491.         for (var i = 1; i < skills.length; i++) {
  492.             var id = skills[i];
  493.             var member = this.getFusionBattler(leader, id, fusion);
  494.             if (member) {
  495.                 fusion.push(member);
  496.             }
  497.         }
  498.         return fusion;
  499.     };
  500.  
  501.     Game_Action.prototype.getFusionBattler = function(leader, id, fusion) {
  502.         var members = BattleManager.allBattleMembers();
  503.         for (var i = 0; i < members.length; i++) {
  504.             var member = members[i];
  505.             if (member.isOriginalFusionSkill(id) && member.fusionLeader() === leader &&
  506.                 !fusion.contains(member)) {
  507.                 return member;
  508.             }
  509.         }
  510.         return null;
  511.     };
  512.  
  513.     Game_Action.prototype.combinationActionBattlers = function() {
  514.         var object = this;
  515.         var leader = this.subject();
  516.         var combination = [leader];
  517.         for (var i = 1; i < this.item().cooperationSkill.combination; i++) {
  518.             var member = this.getCombinationBattler(leader, combination);
  519.             if (member) {
  520.                 combination.push(member);
  521.             }
  522.         }
  523.         return combination;
  524.     };
  525.  
  526.     Game_Action.prototype.getCombinationBattler = function(leader, combination) {
  527.         var members = BattleManager.allBattleMembers();
  528.         for (var i = 0; i < members.length; i++) {
  529.             var member = members[i];
  530.             if (member.combinationLeader() === leader && !combination.contains(member)) {
  531.                 return member;
  532.             }
  533.         }
  534.         return null;
  535.     };
  536.  
  537.     Game_Action.prototype.isCombinationOk = function() {
  538.         if (this.isCombinationAction()) {
  539.             if (this.subject().combinationLeaderSkill()) {
  540.                 return this.combinationMembersOk();
  541.             } else {
  542.                 return false;
  543.             }
  544.         } else {
  545.             return true;
  546.         };
  547.     };
  548.  
  549.     Game_Action.prototype.combinationMembersOk = function() {
  550.         var skill = this.item();
  551.         return this.cooperationBattlers().every(function(member) {
  552.             return member.canUse(skill);
  553.         })
  554.     };
  555.  
  556.     //=============================================================================
  557.     // Game_BattlerBase
  558.     //=============================================================================
  559.  
  560.     VictorEngine.CooperationSkills.paySkillCost = Game_BattlerBase.prototype.paySkillCost;
  561.     Game_BattlerBase.prototype.paySkillCost = function(skill) {
  562.         VictorEngine.CooperationSkills.paySkillCost.call(this, skill);
  563.         if (skill.isCooperation && this.isCooperationSkill(skill)) {
  564.             var user = this;
  565.             this.cooperationBattlers(skill).forEach(function(battler) {
  566.                 if (battler !== user) {
  567.                     battler.payCooperationSkillCost(skill);
  568.                 }
  569.             });
  570.         }
  571.     };
  572.  
  573.     VictorEngine.CooperationSkills.canInput = Game_BattlerBase.prototype.canInput;
  574.     Game_BattlerBase.prototype.canInput = function() {
  575.         return VictorEngine.CooperationSkills.canInput.call(this) && !this.uniteLeader();
  576.     };
  577.  
  578.     VictorEngine.CooperationSkills.meetsSkillConditions = Game_BattlerBase.prototype.meetsSkillConditions;
  579.     Game_BattlerBase.prototype.meetsSkillConditions = function(skill) {
  580.         return (VictorEngine.CooperationSkills.meetsSkillConditions.call(this, skill) &&
  581.             this.isSkillCooperationOk(skill));
  582.     };
  583.  
  584.     Game_BattlerBase.prototype.isSkillCooperationOk = function(skill) {
  585.         return !skill.isCooperation || this.isCooperationOk(skill);
  586.     };
  587.  
  588.     Game_BattlerBase.prototype.isCooperationOk = function(skill) {
  589.         return this.isUniteOk(skill) || this.isFusionOk(skill) || this.isCombinationOk(skill);
  590.     };
  591.  
  592.     Game_BattlerBase.prototype.isUniteOk = function(skill) {
  593.         if (this.isEnemy() || !skill.cooperationSkill.unite) {
  594.             return false;
  595.         }
  596.         return this.uniteBattlers(skill).every(function(actor) {
  597.             return actor.isUniteMemberOk(skill) && !actor.isUsingNonUnite() &&
  598.                 (!Imported['VE - Active Time Battle'] || actor.atbFull());
  599.         });
  600.     };
  601.  
  602.     Game_BattlerBase.prototype.isFusionOk = function(skill) {
  603.         if (!$gameParty.inBattle() || !skill.cooperationSkill.fusion) {
  604.             return false;
  605.         }
  606.         return this.fusionBattlers(skill).every(function(actor) {
  607.             return actor.isFusionMemberOk(actor.originalFusionSkill());
  608.         });
  609.     };
  610.  
  611.     Game_BattlerBase.prototype.isCombinationOk = function(skill) {
  612.         if (!$gameParty.inBattle() || !skill.cooperationSkill.combination) {
  613.             return false;
  614.         } else {
  615.             return true;
  616.         }
  617.     };
  618.  
  619.     Game_BattlerBase.prototype.isUniteMemberOk = function(skill) {
  620.         return $gameParty.members().contains(this) && this.hasSkill(skill.id) &&
  621.             VictorEngine.CooperationSkills.meetsSkillConditions.call(this, skill);
  622.     };
  623.  
  624.     Game_BattlerBase.prototype.isFusionMemberOk = function(skill) {
  625.         return VictorEngine.CooperationSkills.meetsSkillConditions.call(this, skill);
  626.     };
  627.  
  628.     Game_BattlerBase.prototype.cooperationBattlers = function(skill) {
  629.         if (skill.cooperationSkill.unite) {
  630.             return this.uniteBattlers(skill);
  631.         } else if (skill.cooperationSkill.fusion) {
  632.             return this.fusionBattlers(skill);
  633.         } else if (skill.cooperationSkill.combination) {
  634.             return this.combinationBattlers(skill);
  635.         }
  636.         return [];
  637.     };
  638.  
  639.     Game_BattlerBase.prototype.uniteBattlers = function(skill) {
  640.         return skill.cooperationSkill.unite.map(function(id) {
  641.             return $gameActors.actor(id);
  642.         });
  643.     };
  644.  
  645.     Game_BattlerBase.prototype.fusionBattlers = function(skill) {
  646.         if (this.fusionLeaderSkill() === skill) {
  647.             return this.fusionMembersList(this);
  648.         } else if (this.fusionLeader() && this.fusionLeader().fusionLeaderSkill() === skill) {
  649.             return this.fusionMembersList(this.fusionLeader());
  650.         } else {
  651.             return [];
  652.         }
  653.     };
  654.  
  655.     Game_BattlerBase.prototype.combinationBattlers = function(skill) {
  656.         if (this.combinationLeaderSkill() === skill) {
  657.             return this.combinationMembersList(this);
  658.         } else if (this.combinationLeader() && this.combinationLeader().combinationLeaderSkill() === skill) {
  659.             return this.combinationMembersList(this.combinationLeader());
  660.         } else {
  661.             return [];
  662.         }
  663.     };
  664.  
  665.     Game_BattlerBase.prototype.fusionMembersList = function(leader) {
  666.         return BattleManager.allBattleMembers().filter(function(member) {
  667.             return member.fusionLeader() === leader || member === leader;
  668.         });
  669.     };
  670.  
  671.     Game_BattlerBase.prototype.combinationMembersList = function(leader) {
  672.         return BattleManager.allBattleMembers().filter(function(member) {
  673.             return member.combinationLeader() === leader || member === leader;
  674.         });
  675.     };
  676.  
  677.     Game_BattlerBase.prototype.cooperationMember = function() {
  678.         return this._uniteLeader || this._fusionLeader;
  679.     };
  680.  
  681.     Game_BattlerBase.prototype.cooperationLeader = function(skill) {
  682.         if (skill.cooperationSkill.unite) {
  683.             return this.uniteLeader();
  684.         } else if (skill.cooperationSkill.fusion) {
  685.             return this.fusionLeader();
  686.         } else if (skill.cooperationSkill.combination) {
  687.             return this.combinationLeader();
  688.         } else {
  689.             return null;
  690.         };
  691.     };
  692.  
  693.     Game_BattlerBase.prototype.isCooperationSkill = function(skill) {
  694.         return skill.cooperationSkill.unite || skill.cooperationSkill.fusion || skill.cooperationSkill.combination;
  695.     };
  696.  
  697.     Game_BattlerBase.prototype.payCooperationSkillCost = function(skill) {
  698.         if (skill.cooperationSkill.fusion) {
  699.             if (this.originalFusionSkill()) {
  700.                 VictorEngine.CooperationSkills.paySkillCost.call(this, this.originalFusionSkill());
  701.             }
  702.         } else {
  703.             VictorEngine.CooperationSkills.paySkillCost.call(this, skill);
  704.         }
  705.     };
  706.  
  707.     Game_BattlerBase.prototype.cooperationName = function(skill) {
  708.         var text = ''
  709.         var names = this.cooperationBattlers(skill).map(function(battler) {
  710.             return battler.name();
  711.         });
  712.         for (var i = 0; i < names.length; i++) {
  713.             var name = names[i]
  714.             if (i === 0) {
  715.                 text = name;
  716.             } else if (i > 0 && i < names.length - 1) {
  717.                 text += ', ' + name;
  718.             } else if (i === names.length - 1) {
  719.                 text += ' and ' + name;
  720.             }
  721.         }
  722.         return text;
  723.     };
  724.  
  725.     Game_BattlerBase.prototype.uniteLeader = function() {
  726.         return this._uniteLeader;
  727.     };
  728.  
  729.     Game_BattlerBase.prototype.uniteLeaderSkill = function() {
  730.         return this._uniteLeaderSkill;
  731.     };
  732.  
  733.     Game_BattlerBase.prototype.isUsingNonUnite = function() {
  734.         return this._isUsingNonUnite;
  735.     };
  736.  
  737.     Game_BattlerBase.prototype.setUniteLeader = function(leader) {
  738.         this._uniteLeader = leader;
  739.     };
  740.  
  741.     Game_BattlerBase.prototype.setUniteLeaderSkill = function(skill) {
  742.         this._uniteLeaderSkill = skill;
  743.     };
  744.  
  745.     Game_BattlerBase.prototype.setUsingNonUnite = function() {
  746.         if (this.notUsingUnite()) {
  747.             this._isUsingNonUnite = true;
  748.         }
  749.     };
  750.  
  751.     Game_BattlerBase.prototype.clearUniteSetup = function() {
  752.         this._uniteLeader = null;
  753.         this._uniteLeaderSkill = null;
  754.         this._isUsingNonUnite = false;
  755.     };
  756.  
  757.     Game_BattlerBase.prototype.notUsingUnite = function() {
  758.         return this._actions.every(function(action) {
  759.             return !action.isUniteAction();
  760.         })
  761.     };
  762.  
  763.     Game_BattlerBase.prototype.setupUniteBaltters = function() {
  764.         this._actions.forEach(function(action) {
  765.             if (action.isUniteAction()) {
  766.                 action.setCooperationBattlers();
  767.             }
  768.         })
  769.     };
  770.  
  771.     /* FUSION */
  772.     Game_BattlerBase.prototype.isUsingFusion = function(id) {
  773.         var battler = this;
  774.         return this._actions.some(function(action) {
  775.             return action.item() && action.isSkill() && action.item().id === id && !battler.originalFusionSkill();
  776.         })
  777.     };
  778.  
  779.     Game_BattlerBase.prototype.fusionLeader = function() {
  780.         return this._fusionLeader;
  781.     };
  782.  
  783.     Game_BattlerBase.prototype.fusionLeaderSkill = function() {
  784.         return this._fusionLeaderSkill;
  785.     };
  786.  
  787.     Game_BattlerBase.prototype.originalFusionSkill = function() {
  788.         return this._originalFusionSkill;
  789.     };
  790.  
  791.     Game_BattlerBase.prototype.isOriginalFusionSkill = function(id) {
  792.         return this._originalFusionSkill && this._originalFusionSkill.id === id;
  793.     };
  794.  
  795.     Game_BattlerBase.prototype.clearFusionSetup = function() {
  796.         this._fusionLeader = null;
  797.         this._fusionLeaderSkill = null;
  798.         this._originalFusionSkill = null;
  799.     };
  800.  
  801.     Game_BattlerBase.prototype.setFusionLeader = function(skill, id) {
  802.         this._fusionLeaderSkill = skill;
  803.         this.setFusionAction(skill, id);
  804.     };
  805.  
  806.     Game_BattlerBase.prototype.setFusionMember = function(leader, id) {
  807.         this._fusionLeader = leader;
  808.         this.setFusionAction(leader.fusionLeaderSkill(), id);
  809.     };
  810.  
  811.     Game_BattlerBase.prototype.setFusionAction = function(skill, id) {
  812.         var index = this.setFusionActionIndex(id);
  813.         var action = new Game_Action(this);
  814.         action.setSkill(skill.id);
  815.         action.setTarget(this._actions[index]._targetIndex);
  816.         this._actions.splice(index, 1, action);
  817.         this._originalFusionSkill = $dataSkills[id];
  818.     };
  819.  
  820.     Game_BattlerBase.prototype.setFusionActionIndex = function(id) {
  821.         for (var i = 1; i < this._actions.length; i++) {
  822.             var action = this._actions[i];
  823.             if (action.item() && action.isSkill() && action.item().id === id) {
  824.                 return i;
  825.             }
  826.         }
  827.         return 0;
  828.     };
  829.  
  830.     Game_BattlerBase.prototype.setupFusionBaltters = function() {
  831.         this._actions.forEach(function(action) {
  832.             if (action.isFusionAction()) {
  833.                 action.setCooperationBattlers();
  834.             }
  835.         })
  836.     };
  837.  
  838.     /* Combination */
  839.     Game_BattlerBase.prototype.isUsingCombination = function(id) {
  840.         var battler = this;
  841.         return this._actions.some(function(action) {
  842.             return action.item() && action.isSkill() && action.item().id === id && !battler.isCombinationSkill();
  843.         })
  844.     };
  845.  
  846.     Game_BattlerBase.prototype.combinationLeader = function() {
  847.         return this._combinationLeader;
  848.     };
  849.  
  850.     Game_BattlerBase.prototype.combinationLeaderSkill = function() {
  851.         return this._combinationLeaderSkill;
  852.     };
  853.  
  854.     Game_BattlerBase.prototype.isCombinationSkill = function() {
  855.         return this.combinationLeader() || this.combinationLeaderSkill();
  856.     };
  857.  
  858.     Game_BattlerBase.prototype.clearCombinationSetup = function() {
  859.         this._combinationLeader = null;
  860.         this._combinationLeaderSkill = null;
  861.     };
  862.  
  863.     Game_BattlerBase.prototype.setCombinationLeader = function(skill) {
  864.         this._combinationLeaderSkill = skill;
  865.     };
  866.  
  867.     Game_BattlerBase.prototype.setCombinationMember = function(leader) {
  868.         this._combinationLeader = leader;
  869.     };
  870.  
  871.     Game_BattlerBase.prototype.setupCombinationBaltters = function() {
  872.         this._actions.forEach(function(action) {
  873.             if (action.isCombinationAction()) {
  874.                 action.setCooperationBattlers();
  875.             }
  876.         })
  877.     };
  878.  
  879.     //=============================================================================
  880.     // Game_Battler
  881.     //=============================================================================
  882.  
  883.     VictorEngine.CooperationSkills.performActionStart = Game_Battler.prototype.performActionStart;
  884.     Game_Battler.prototype.performActionStart = function(action) {
  885.         if (this.uniteLeaderSkill()) {
  886.             this.clearUniteAction();
  887.         }
  888.         if (this.fusionLeaderSkill()) {
  889.             this.clearFusionAction();
  890.         }
  891.         if (this.combinationLeaderSkill()) {
  892.             this.clearCombinationAction();
  893.         }
  894.         VictorEngine.CooperationSkills.performActionStart.call(this, action);
  895.     };
  896.  
  897.     VictorEngine.CooperationSkills.onAllActionsEnd = Game_Battler.prototype.onAllActionsEnd;
  898.     Game_Battler.prototype.onAllActionsEnd = function() {
  899.         VictorEngine.CooperationSkills.onAllActionsEnd.call(this);
  900.         if (this.uniteLeaderSkill()) {
  901.             if (Imported['VE - Active Time Battle']) {
  902.                 this.resetAtbUnion();
  903.             }
  904.             this.resetUniteAction(true);
  905.         }
  906.         if (this.fusionLeaderSkill()) {
  907.             this.resetFusionAction(true);
  908.         }
  909.         if (this.combinationLeaderSkill()) {
  910.             this.resetCombinationAction(true);
  911.         }
  912.     };
  913.  
  914.     VictorEngine.CooperationSkills.speed = Game_Battler.prototype.speed;
  915.     Game_Battler.prototype.speed = function() {
  916.         var battlers = this.allCooperationBattlers()
  917.         if (this.uniteLeaderSkill() || this.fusionLeaderSkill() && battlers.length > 0) {
  918.             return this.cooperationActionSpeed(battlers);
  919.         } else if (this.uniteLeader() || this.fusionLeader()) {
  920.             return -9999;
  921.         } else {
  922.             return VictorEngine.CooperationSkills.speed.call(this);
  923.         }
  924.     };
  925.  
  926.     Game_Battler.prototype.cooperationActionSpeed = function(battlers) {
  927.         return Math.min.apply(null, battlers.map(function(member) {
  928.             return VictorEngine.CooperationSkills.speed.call(member);
  929.         })) || 0;
  930.     };
  931.  
  932.     Game_Battler.prototype.allCooperationBattlers = function() {
  933.         var battlers = []
  934.         this._actions.forEach(function(action) {
  935.             if (action.isCooperation()) {
  936.                 battlers = battlers.concat(action.cooperationBattlers());
  937.             }
  938.         })
  939.         return battlers;
  940.     };
  941.  
  942.     Game_Battler.prototype.resetUniteAction = function(turnEnd) {
  943.         var leader = this;
  944.         this.clearUniteSetup();
  945.         $gameParty.members().forEach(function(member) {
  946.             if (member.uniteLeader() === leader) {
  947.                 member.makeActions();
  948.                 member.clearUniteSetup();
  949.             }
  950.         })
  951.     };
  952.  
  953.     Game_Battler.prototype.resetFusionAction = function(turnEnd) {
  954.         var leader = this;
  955.         this.clearFusionSetup();
  956.         BattleManager.allBattleMembers().forEach(function(member) {
  957.             if (member.fusionLeader() === leader) {
  958.                 member.makeActions();
  959.                 member.clearFusionSetup();
  960.             }
  961.         })
  962.     };
  963.  
  964.     Game_Battler.prototype.resetCombinationAction = function(turnEnd) {
  965.         var leader = this;
  966.         this.clearCombinationSetup();
  967.         BattleManager.allBattleMembers().forEach(function(member) {
  968.             if (member.combinationLeader() === leader) {
  969.                 member.makeActions();
  970.                 member.clearCombinationSetup();
  971.             }
  972.         })
  973.     };
  974.  
  975.     Game_Battler.prototype.clearUniteAction = function() {
  976.         var leader = this;
  977.         BattleManager.allBattleMembers().forEach(function(member) {
  978.             if (member.uniteLeader() === leader) {
  979.                 member.clearActions();
  980.                 member.setActionState('acting');
  981.             }
  982.         })
  983.     };
  984.  
  985.     Game_Battler.prototype.clearFusionAction = function() {
  986.         var leader = this;
  987.         BattleManager.allBattleMembers().forEach(function(member) {
  988.             if (member.fusionLeader() === leader) {
  989.                 member.clearActions();
  990.                 member.setActionState('acting');
  991.             }
  992.         })
  993.     };
  994.  
  995.     Game_Battler.prototype.clearCombinationAction = function() {
  996.         var leader = this;
  997.         BattleManager.allBattleMembers().forEach(function(member) {
  998.             if (member.combinationLeader() === leader) {
  999.                 member.clearActions();
  1000.                 member.setActionState('acting');
  1001.             }
  1002.         })
  1003.     };
  1004.  
  1005.     VictorEngine.CooperationSkills.onBattleStart = Game_Battler.prototype.onBattleStart;
  1006.     Game_Battler.prototype.onBattleStart = function() {
  1007.         VictorEngine.CooperationSkills.onBattleStart.call(this);
  1008.         this.clearUniteSetup();
  1009.         this.clearFusionSetup();
  1010.         this.clearCombinationSetup();
  1011.     };
  1012.  
  1013.     VictorEngine.CooperationSkills.onTurnEnd = Game_Battler.prototype.onTurnEnd;
  1014.     Game_Battler.prototype.onTurnEnd = function() {
  1015.         VictorEngine.CooperationSkills.onTurnEnd.call(this);
  1016.         this.clearUniteSetup();
  1017.         this.clearFusionSetup();
  1018.     };
  1019.  
  1020.     VictorEngine.CooperationSkills.onBattleEnd = Game_Battler.prototype.onBattleEnd;
  1021.     Game_Battler.prototype.onBattleEnd = function() {
  1022.         VictorEngine.CooperationSkills.onBattleEnd.call(this);
  1023.         this.clearUniteSetup();
  1024.         this.clearFusionSetup();
  1025.         this.clearCombinationSetup();
  1026.     };
  1027.  
  1028.     Game_Battler.prototype.resetAtbUnion = function() {
  1029.         var leader = this;
  1030.         $gameParty.members().forEach(function(member) {
  1031.             if (member.uniteLeader() === leader) {
  1032.                 member.clearAtb();
  1033.             }
  1034.         })
  1035.     };
  1036.  
  1037.     //=============================================================================
  1038.     // Scene_Battle
  1039.     //=============================================================================
  1040.  
  1041.     VictorEngine.CooperationSkills.onSelectAction = Scene_Battle.prototype.onSelectAction;
  1042.     Scene_Battle.prototype.onSelectAction = function() {
  1043.         var action = BattleManager.inputtingAction();
  1044.         VictorEngine.CooperationSkills.onSelectAction.call(this);
  1045.         if (!action.needsSelection()) {
  1046.             this.setUniteSkill();
  1047.         }
  1048.     };
  1049.  
  1050.     VictorEngine.CooperationSkills.onActorOk = Scene_Battle.prototype.onActorOk;
  1051.     Scene_Battle.prototype.onActorOk = function() {
  1052.         this.setUniteSkill();
  1053.         VictorEngine.CooperationSkills.onActorOk.call(this);
  1054.     };
  1055.  
  1056.     VictorEngine.CooperationSkills.onEnemyOk = Scene_Battle.prototype.onEnemyOk;
  1057.     Scene_Battle.prototype.onEnemyOk = function() {
  1058.         this.setUniteSkill();
  1059.         VictorEngine.CooperationSkills.onEnemyOk.call(this);
  1060.     };
  1061.  
  1062.     VictorEngine.CooperationSkills.startActorCommandSelection = Scene_Battle.prototype.startActorCommandSelection;
  1063.     Scene_Battle.prototype.startActorCommandSelection = function() {
  1064.         var actor = BattleManager.actor();
  1065.         actor.resetUniteAction();
  1066.         VictorEngine.CooperationSkills.startActorCommandSelection.call(this);
  1067.     };
  1068.  
  1069.     Scene_Battle.prototype.setUniteSkill = function() {
  1070.         var actor = BattleManager.actor();
  1071.         if (actor && this._actorCommandWindow.currentSymbol() === 'skill') {
  1072.             var skill = this._skillWindow.item();
  1073.             if (skill.cooperationSkill.unite) {
  1074.                 this.setUniteLeader(skill);
  1075.             } else {
  1076.                 actor.setUsingNonUnite();
  1077.             }
  1078.         } else {
  1079.             if (actor) {
  1080.                 actor.setUsingNonUnite();
  1081.             }
  1082.         }
  1083.     };
  1084.  
  1085.     Scene_Battle.prototype.setUniteLeader = function(skill) {
  1086.         var leader = BattleManager.actor();
  1087.         var current = BattleManager.inputtingAction();
  1088.         return skill.cooperationSkill.unite.forEach(function(id) {
  1089.             var actor = $gameActors.actor(id);
  1090.             if (actor === leader) {
  1091.                 actor.setUniteLeaderSkill(skill);
  1092.             } else {
  1093.                 var action = new Game_Action(actor);
  1094.                 action.setSkill(skill.id);
  1095.                 action.setTarget(current._targetIndex);
  1096.                 actor._actions.push(action);
  1097.                 actor.setUniteLeader(leader);
  1098.             }
  1099.         });
  1100.     };
  1101.  
  1102.     //=============================================================================
  1103.     // Window_BattleLog
  1104.     //=============================================================================
  1105.  
  1106.     VictorEngine.CooperationSkills.startActionWindowBattleLog = Window_BattleLog.prototype.startAction;
  1107.     Window_BattleLog.prototype.startAction = function(subject, action, targets) {
  1108.         this._cooperationSkill = action;
  1109.         VictorEngine.CooperationSkills.startActionWindowBattleLog.call(this, subject, action, targets);
  1110.     };
  1111.  
  1112.     VictorEngine.CooperationSkills.performActionStartWindowBattleLog = Window_BattleLog.prototype.performActionStart;
  1113.     Window_BattleLog.prototype.performActionStart = function(subject, action) {
  1114.         VictorEngine.CooperationSkills.performActionStartWindowBattleLog.call(this, subject, action);
  1115.         if (this.isCooperationSkill(subject)) {
  1116.             this.performActionStartCooperation(subject, action);
  1117.         }
  1118.     };
  1119.  
  1120.     VictorEngine.CooperationSkills.performAction = Window_BattleLog.prototype.performAction;
  1121.     Window_BattleLog.prototype.performAction = function(subject, action, targets) {
  1122.         VictorEngine.CooperationSkills.performAction.call(this, subject, action, targets);
  1123.         if (this.isCooperationSkill(subject)) {
  1124.             this.performActionCooperation(subject, action, targets);
  1125.         }
  1126.     };
  1127.  
  1128.     VictorEngine.CooperationSkills.performActionEnd = Window_BattleLog.prototype.performActionEnd;
  1129.     Window_BattleLog.prototype.performActionEnd = function(subject, action) {
  1130.         VictorEngine.CooperationSkills.performActionEnd.call(this, subject, action);
  1131.         if (this.isCooperationSkill(subject)) {
  1132.             this.performActionEndCooperation(subject, this._cooperationSkill);
  1133.         }
  1134.     };
  1135.  
  1136.     VictorEngine.CooperationSkills.displayAction = Window_BattleLog.prototype.displayAction;
  1137.     Window_BattleLog.prototype.displayAction = function(subject, item) {
  1138.         if (DataManager.isSkill(item) && item.isCooperation) {
  1139.             var numMethods = this._methods.length;
  1140.             if (DataManager.isSkill(item)) {
  1141.                 if (item.message1) {
  1142.                     this.push('addText', subject.cooperationName(item) + item.message1.format(item.name));
  1143.                 }
  1144.                 if (item.message2) {
  1145.                     this.push('addText', item.message2.format(item.name));
  1146.                 }
  1147.             }
  1148.             if (this._methods.length === numMethods) {
  1149.                 this.push('wait');
  1150.             }
  1151.         } else {
  1152.             VictorEngine.CooperationSkills.displayAction.call(this, subject, item);
  1153.         }
  1154.     };
  1155.  
  1156.     VictorEngine.CooperationSkills.performActionAnimation = Window_BattleLog.prototype.performActionAnimation;
  1157.     Window_BattleLog.prototype.performActionAnimation = function(subject, animationId) {
  1158.         VictorEngine.CooperationSkills.performActionAnimation.call(this, subject, animationId);
  1159.         if (this.isCooperationSkill(subject)) {
  1160.             this.performActionAnimationCooperation(subject, animationId, this._cooperationSkill);
  1161.         }
  1162.     };
  1163.  
  1164.     VictorEngine.CooperationSkills.performCastAnimation = Window_BattleLog.prototype.performCastAnimation;
  1165.     Window_BattleLog.prototype.performCastAnimation = function(subject, animationId) {
  1166.         VictorEngine.CooperationSkills.performCastAnimation.call(this, subject, animationId);
  1167.         if (this.isCooperationSkill(subject)) {
  1168.             this.performCastAnimationCooperation(subject, animationId, this._cooperationSkill);
  1169.         }
  1170.     };
  1171.  
  1172.     Window_BattleLog.prototype.isCooperationSkill = function(subject) {
  1173.         return (!Imported['VE - Battle Motions'] && this._cooperationSkill &&
  1174.             subject.isCooperationSkill(this._cooperationSkill.item()));
  1175.     };
  1176.  
  1177.     Window_BattleLog.prototype.performActionStartCooperation = function(subject, action) {
  1178.         var object = this;
  1179.         BattleManager.allBattleMembers().forEach(function(member) {
  1180.             if (member.cooperationLeader(action.item()) === subject) {
  1181.                 VictorEngine.CooperationSkills.performActionStartWindowBattleLog.call(object, member, action);
  1182.             }
  1183.         })
  1184.     };
  1185.  
  1186.     Window_BattleLog.prototype.performActionCooperation = function(subject, action, targets) {
  1187.         var object = this;
  1188.         BattleManager.allBattleMembers().forEach(function(member) {
  1189.             if (member.cooperationLeader(action.item()) === subject) {
  1190.                 VictorEngine.CooperationSkills.performAction.call(object, member, action, targets);
  1191.             }
  1192.         })
  1193.     };
  1194.  
  1195.     Window_BattleLog.prototype.performActionEndCooperation = function(subject, action) {
  1196.         var object = this;
  1197.         BattleManager.allBattleMembers().forEach(function(member) {
  1198.             if (member.cooperationLeader(action.item()) === subject) {
  1199.                 VictorEngine.CooperationSkills.performActionEndWindowBattleLog.call(object, member, action);
  1200.             }
  1201.         })
  1202.     };
  1203.  
  1204.     Window_BattleLog.prototype.performActionAnimationCooperation = function(subject, animationId, action) {
  1205.         var object = this;
  1206.         BattleManager.allBattleMembers().forEach(function(member) {
  1207.             if (member.cooperationLeader(action.item()) === subject) {
  1208.                 VictorEngine.CooperationSkills.performActionAnimation.call(object, member, animationId);
  1209.             }
  1210.         })
  1211.     };
  1212.  
  1213.     Window_BattleLog.prototype.performCastAnimationCooperation = function(subject, animationId, action) {
  1214.         var object = this;
  1215.         BattleManager.allBattleMembers().forEach(function(member) {
  1216.             if (member.cooperationLeader(action.item()) === subject) {
  1217.                 VictorEngine.CooperationSkills.performCastAnimation.call(object, member, animationId);
  1218.             }
  1219.         })
  1220.     };
  1221.  
  1222.     VictorEngine.CooperationSkills.defaultMotionMovement = Window_BattleLog.prototype.defaultMotionMovement;
  1223.     Window_BattleLog.prototype.defaultMotionMovement = function(subject, action) {
  1224.         if (action.isCooperation()) {
  1225.             var motion = '';
  1226.             if (action && !action.isGuard()) {
  1227.                 for (var i = 0; i < action.cooperationLength(); i++) {
  1228.                     if (action.isStepForward()) {
  1229.                         motion += 'motion: cooperation ' + String(i + 1) + ', walk;';
  1230.                         motion += 'move: cooperation ' + String(i + 1) + ', forward, 30, 48;';
  1231.                     } else {
  1232.                         motion += 'direction: cooperation ' + String(i + 1) + ', targets;';
  1233.                         motion += 'motion: cooperation ' + String(i + 1) + ', walk;';
  1234.                         motion += 'move: cooperation ' + String(i + 1) + ', close to target, 12, 80;';
  1235.                     }
  1236.                 }
  1237.                 for (var i = 0; i < action.cooperationLength(); i++) {
  1238.                     motion += 'wait: cooperation ' + String(i + 1) + ', move;';
  1239.                     motion += 'motion: cooperation ' + String(i + 1) + ', reset;';
  1240.                 }
  1241.             }
  1242.             return motion;
  1243.         } else {
  1244.             return VictorEngine.CooperationSkills.defaultMotionMovement.call(this, subject, action);
  1245.         }
  1246.     };
  1247.  
  1248.     VictorEngine.CooperationSkills.defaultMotionExecute = Window_BattleLog.prototype.defaultMotionExecute;
  1249.     Window_BattleLog.prototype.defaultMotionExecute = function(subject, action) {
  1250.         if (action.isCooperation()) {
  1251.             var motion = '';
  1252.             motion += 'wait: all cooperation, move;';
  1253.             for (var i = 0; i < action.cooperationLength(); i++) {
  1254.                 motion += 'motion: cooperation ' + String(i + 1) + ', action;';
  1255.             }
  1256.             for (var i = 0; i < action.cooperationLength(); i++) {
  1257.                 motion += 'wait: cooperation ' + String(i + 1) + ', 8;';
  1258.             }
  1259.             motion += 'action: all targets, effect;';
  1260.             motion += 'wait: all targets, action;';
  1261.             return motion;
  1262.         } else {
  1263.             return VictorEngine.CooperationSkills.defaultMotionExecute.call(this, subject, action);
  1264.         }
  1265.     };
  1266.  
  1267.     VictorEngine.CooperationSkills.defaultMotionReturn = Window_BattleLog.prototype.defaultMotionReturn;
  1268.     Window_BattleLog.prototype.defaultMotionReturn = function(subject, action) {
  1269.         if (action.isCooperation()) {
  1270.             var motion = '';
  1271.             for (var i = 0; i < action.cooperationLength(); i++) {
  1272.                 motion += 'motion: cooperation ' + String(i + 1) + ', return;';
  1273.                 motion += 'move: cooperation ' + String(i + 1) + ', to home, 12;';
  1274.             }
  1275.             for (var i = 0; i < action.cooperationLength(); i++) {
  1276.                 motion += 'wait: cooperation ' + String(i + 1) + ', move;';
  1277.                 motion += 'motion: cooperation ' + String(i + 1) + ', reset;';
  1278.             }
  1279.             motion += 'wait: all cooperation, move;';
  1280.             return motion;
  1281.         } else {
  1282.             return VictorEngine.CooperationSkills.defaultMotionReturn.call(this, subject, action);
  1283.         }
  1284.     };
  1285.  
  1286.     VictorEngine.CooperationSkills.getMotionSubjects = Window_BattleLog.prototype.getMotionSubjects;
  1287.     Window_BattleLog.prototype.getMotionSubjects = function(type, user, targets, target, index) {
  1288.         if (this.isCooperation()) {
  1289.             type = type.toLowerCase().trim();
  1290.             var battlers = this._currentAction.action.cooperationBattlers();
  1291.             if (type === 'all cooperation') {
  1292.                 return battlers;
  1293.             }
  1294.             var match = (/cooperation[ ]*(\d+)/gi).exec(type);
  1295.             if (match) {
  1296.                 var battler = battlers[Number(match[1]) - 1]
  1297.                 return battler ? [battler] : [];
  1298.             }
  1299.         }
  1300.         return VictorEngine.CooperationSkills.getMotionSubjects.call(this, type, user, targets, target, index);
  1301.     }
  1302.  
  1303.     Window_BattleLog.prototype.isCooperation = function() {
  1304.         return this._currentAction && this._currentAction.action && this._currentAction.action.isCooperation();
  1305.     }
  1306.  
  1307. })();



在工程中,当执行完合作技后,出现了以下错误:
TypeError : Cannot read property 'call' of undefined

我在工程中只用了这两个插件,但还是得到了这个错误。我的版本是1.6.1。

(不知道为什么发不了图片和附件,见谅)

我是脚本小白,望各位大神不吝赐教,提前先谢谢各位了!!!
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-18 09:26

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表