Project1

标题: (已解决)请问类似狂暴技能(自己掉hp给敌人重创... [打印本页]

作者: douqunbo    时间: 2016-9-11 13:05
标题: (已解决)请问类似狂暴技能(自己掉hp给敌人重创...
本帖最后由 douqunbo 于 2016-9-11 23:11 编辑

如题,技能设置中只有消耗 mp tp 并没有消耗hp这一项,请教下有没有什么插件或者 自带的注释命令可以实现 消耗HP 这个功能?
作者: lirn    时间: 2016-9-11 14:01
找YEP插件,我记得有消耗HP的
作者: 玄天    时间: 2016-9-11 14:34
ひきも記的这个插件不仅能做到你要的效果,还能做类似乾坤一掷的那种『以本伤人』的技能效果。
具体用法就是在技能的注释栏里输入相应的代码(见代码中『メモ欄タグ(スキル)』一处)

JAVASCRIPT 代码复制下载
  1. //=============================================================================
  2. // TMVplugin - スキルコスト拡張
  3. // 作者: tomoaky ([url]http://hikimoki.sakura.ne.jp/[/url])
  4. // Version: 0.22b
  5. // 最終更新日: 2016/06/13
  6. //=============================================================================
  7.  
  8. /*:
  9.  * @plugindesc MPやTPの代わりにHPやアイテムを消費するスキルを
  10.  * 設定できるようになります。
  11.  *
  12.  * @author tomoaky ([url]http://hikimoki.sakura.ne.jp/[/url])
  13.  *
  14.  * @param hpVNumberId
  15.  * @desc スキル使用時にコスト消費前の残りHPを代入する変数番号。
  16.  * 初期値: 0 ( 1 以上を指定すると有効になります)
  17.  * @default 0
  18.  *
  19.  * @param mpVNumberId
  20.  * @desc スキル使用時にコスト消費前の残りMPを代入する変数番号。
  21.  * 初期値: 0 ( 1 以上を指定すると有効になります)
  22.  * @default 0
  23.  *
  24.  * @param ignoreEnemyItemCost
  25.  * @desc 敵がスキルを使用する際にアイテムコストを無視するかどうか
  26.  * 初期値: 1 ( 0 = パーティのアイテムを消費 / 1 = 無視)
  27.  * @default 1
  28.  *
  29.  * @help
  30.  * 使い方:
  31.  *   スキルのメモ欄にタグを書き込むことでコストを追加できます。
  32.  *
  33.  *   データベースで 消耗しない に設定したアイテムをコストとした場合、
  34.  *   スキル使用時に必要だが消費はしないという扱いになります。
  35.  *
  36.  *   HPをコストとして設定した場合、残りHPがコストと同値では
  37.  *   使用できません。ただし、スキルに hpCostNoSafety タグがある場合は
  38.  *   残りHPがコスト以下でもスキルが使用できます。
  39.  *   当然使用したアクターは戦闘不能になります。
  40.  *
  41.  *   経験値をコストとして設定し、一緒に expCostNoLevelDown タグを
  42.  *   設定している場合、コストの支払いによってレベルが下がる状況では
  43.  *   スキルの使用ができなくなります。
  44.  *
  45.  * プラグインパラメータ:
  46.  *   コスト消費前の残りHP(MP)を指定した変数に代入し、これにより
  47.  *   消費したHP(MP)の量をダメージ計算式に反映させることができます。
  48.  *   hpVNumberId の値を 1 にすると、ゲーム変数1番にコスト消費前の
  49.  *   残りHPが代入されます。ダメージ計算式に $gameVariables.value(1) と
  50.  *   書けばゲーム変数1番の値を参照することができます。
  51.  *
  52.  * メモ欄タグ(スキル):
  53.  *   <hpCost:10>          # スキルのコストとしてHP10を設定
  54.  *   <hpRateCost:50>      # スキルのコストとして最大HPの50%を設定
  55.  *   <hpCRateCost:25>     # スキルのコストとして残りHPの25%を設定
  56.  *   <hpCostNoSafety>     # HPコスト支払いによる戦闘不能を許可する
  57.  *   <mpRateCost:100>     # スキルのコストとして最大MPの100%を設定
  58.  *   <mpCRateCost:50>     # スキルのコストとして残りMPの50%を設定
  59.  *   <mpCostNoMcr>        # MPコストから特徴『MP消費率』の効果を除外
  60.  *   <itemCost:I1*2>      # スキルのコストとしてアイテム1番2個を設定
  61.  *   <itemCost:W2*1>      # スキルのコストとして武器2番1個を設定
  62.  *   <itemCost:A5*1>      # スキルのコストとして防具5番1個を設定
  63.  *   <expCost:50>         # スキルのコストとして経験値50を設定
  64.  *   <expCostNoLevelDown> # 経験値コストによるレベルダウンを禁止
  65.  *   <goldCost:100>       # スキルのコストとしてお金100Gを設定
  66.  *   <vnCost:3*1>         # スキルのコストとしてゲーム変数3番の値1を設定
  67.  *
  68.  * vnCostタグの特殊な使い方:
  69.  *   メモ欄タグ vnCost のみ制御文字を利用して変数の中身をパラメータとして
  70.  *   設定することができます。
  71.  *   <vnCost:\V[14]*\V[15]>
  72.  *   たとえば上記のようなタグがついたスキルを使用する際に、変数14番の
  73.  *   値が 16 、変数15番の値が 3 だった場合は、変数16番の値を3消費
  74.  *   することになります。
  75.  *
  76.  * プラグインコマンドはありません。
  77.  *
  78.  */
  79.  
  80. var Imported = Imported || {};
  81. Imported.TMSkillCostEx = true;
  82.  
  83. (function() {
  84.  
  85.   var parameters = PluginManager.parameters('TMSkillCostEx');
  86.   var hpVNumberId = +parameters['hpVNumberId'];
  87.   var mpVNumberId = +parameters['mpVNumberId'];
  88.   var ignoreEnemyItemCost = parameters['ignoreEnemyItemCost'] === '1' ? true : false;
  89.  
  90.   //-----------------------------------------------------------------------------
  91.   // Game_BattleBase
  92.   //
  93.  
  94.   Game_BattlerBase.prototype.skillHpCost = function(skill) {
  95.     var result = 0;
  96.     if (skill.meta.hpCost) {
  97.       result += +skill.meta.hpCost;
  98.     }
  99.     if (skill.meta.hpRateCost) {
  100.       result += +skill.meta.hpRateCost * this.mhp / 100;
  101.     }
  102.     if (skill.meta.hpCRateCost) {
  103.       result += +skill.meta.hpCRateCost * this._hp / 100;
  104.     }
  105.     return Math.floor(result);
  106.   };
  107.  
  108.   Game_BattlerBase.prototype.skillMpCost = function(skill) {
  109.     var result = skill.mpCost;
  110.     if (skill.meta.mpRateCost) {
  111.       result += +skill.meta.mpRateCost * this.mmp / 100;
  112.     }
  113.     if (skill.meta.mpCRateCost) {
  114.       result += +skill.meta.mpCRateCost * this._mp / 100;
  115.     }
  116.     if (!skill.meta.mpCostNoMcr) {
  117.       result *= this.mcr;
  118.     }
  119.     return Math.floor(result);
  120.   };
  121.  
  122.   Game_BattlerBase.prototype.skillItemCost = function(skill) {
  123.     if (!this.isActor() && ignoreEnemyItemCost) {
  124.       return null;
  125.     }
  126.     if (skill.meta.itemCost) {
  127.       var re = /(i|w|a)(\d+)\*(\d+)/i;
  128.       var match = re.exec(skill.meta.itemCost);
  129.       if (match) {
  130.         var itemCost = {};
  131.         var s = match[1].toUpperCase();
  132.         if (s === 'I') {
  133.           itemCost.item = $dataItems[+match[2]];
  134.         } else if (s === 'W') {
  135.           itemCost.item = $dataWeapons[+match[2]];
  136.         } else {
  137.           itemCost.item = $dataArmors[+match[2]];
  138.         }
  139.         itemCost.num = +match[3];
  140.         return itemCost;
  141.       }
  142.     }
  143.     return null;
  144.   };
  145.  
  146.   Game_BattlerBase.prototype.skillExpCost = function(skill) {
  147.     return !this.isEnemy() && skill.meta.expCost ? +skill.meta.expCost : 0;
  148.   };
  149.  
  150.   Game_BattlerBase.prototype.skillGoldCost = function(skill) {
  151.     return !this.isEnemy() && skill.meta.goldCost ? +skill.meta.goldCost : 0;
  152.   };
  153.  
  154.   Game_BattlerBase.prototype.skillVNumberCost = function(skill) {
  155.     if (skill.meta.vnCost) {
  156.       var result = {};
  157.       var vnCost = skill.meta.vnCost.split('*');
  158.       var re = /\\V\[(\d+)\]/i;
  159.       var match = re.exec(vnCost[0]);
  160.       result.index = match ? $gameVariables.value(+match[1]) : +vnCost[0];
  161.       var match = re.exec(vnCost[1]);
  162.       result.num = match ? $gameVariables.value(+match[1]) : +vnCost[1];
  163.       return result;
  164.     }
  165.     return null;
  166.   };
  167.  
  168.   var _Game_BattleBase_canPaySkillCost = Game_BattlerBase.prototype.canPaySkillCost;
  169.   Game_BattlerBase.prototype.canPaySkillCost = function(skill) {
  170.     if (!this.canPaySkillHpCost(skill) ||
  171.         !this.canPaySkillItemCost(skill) ||
  172.         !this.canPaySkillExpCost(skill) ||
  173.         !this.canPaySkillGoldCost(skill) ||
  174.         !this.canPaySkillVNumberCost(skill)) {
  175.       return false;
  176.     }
  177.     return _Game_BattleBase_canPaySkillCost.call(this, skill);
  178.   };
  179.  
  180.   Game_BattlerBase.prototype.canPaySkillHpCost = function(skill) {
  181.     return skill.meta.hpCostNoSafety || this._hp > this.skillHpCost(skill);
  182.   };
  183.  
  184.   Game_BattlerBase.prototype.canPaySkillItemCost = function(skill) {
  185.     var itemCost = this.skillItemCost(skill);
  186.     return !itemCost || $gameParty.numItems(itemCost.item) >= itemCost.num;
  187.   };
  188.  
  189.   Game_BattlerBase.prototype.canPaySkillExpCost = function(skill) {
  190.     var expCost = this.skillExpCost(skill);
  191.     return expCost === 0 || (this.currentExp() >= expCost &&
  192.            (!skill.meta.expCostNoLevelDown || this.currentExp() - expCost >=
  193.            this.currentLevelExp()));
  194.   };
  195.  
  196.   Game_BattlerBase.prototype.canPaySkillGoldCost = function(skill) {
  197.     return $gameParty.gold() >= this.skillGoldCost(skill);
  198.   };
  199.  
  200.   Game_BattlerBase.prototype.canPaySkillVNumberCost = function(skill) {
  201.     var vnCost = this.skillVNumberCost(skill);
  202.     return !vnCost || $gameVariables.value(vnCost.index) >= vnCost.num;
  203.   };
  204.  
  205.   var _Game_BattleBase_paySkillCost = Game_BattlerBase.prototype.paySkillCost;
  206.   Game_BattlerBase.prototype.paySkillCost = function(skill) {
  207.     if (hpVNumberId > 0) $gameVariables.setValue(hpVNumberId, this._hp);
  208.     if (mpVNumberId > 0) $gameVariables.setValue(mpVNumberId, this._mp);
  209.     this._hp -= Math.min(this.skillHpCost(skill), this._hp);
  210.     var itemCost = this.skillItemCost(skill);
  211.     if (itemCost && this.isItemCostValid(itemCost.item)) {
  212.       $gameParty.loseItem(itemCost.item, itemCost.num, false)
  213.     }
  214.     var expCost = this.skillExpCost(skill);
  215.     if (expCost) {
  216.       var newExp = this.currentExp() - expCost;
  217.       this.changeExp(newExp, this.shouldDisplayLevelUp());
  218.     }
  219.     $gameParty.loseGold(this.skillGoldCost(skill));
  220.     var vnCost = this.skillVNumberCost(skill);
  221.     if (vnCost) {
  222.       var n = $gameVariables.value(vnCost.index) - vnCost.num;
  223.       $gameVariables.setValue(vnCost.index, n);
  224.     }
  225.     _Game_BattleBase_paySkillCost.call(this, skill);
  226.   };
  227.  
  228.   Game_BattlerBase.prototype.isItemCostValid = function(item) {
  229.     return !DataManager.isItem(item) || item.consumable;
  230.   };
  231.  
  232. })();

作者: ZERO_0_Lin    时间: 2016-9-11 14:34
用事件好了O(∩_∩)O
作者: yakumo_17    时间: 2016-9-11 16:38
玄天 发表于 2016-9-11 14:34
ひきも記的这个插件不仅能做到你要的效果,还能做类似乾坤一掷的那种『以本伤人』的技能效果。
具体用法就 ...

3q  有不少需要的功能
作者: xiawen19930525    时间: 2016-9-17 21:03
谢谢,已经学习




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