查看: 4070|回复: 5

[已经解决] (已解决)请问类似狂暴技能(自己掉hp给敌人重创...

[复制链接]
梦石
0
星屑
1321
在线时间
157 小时
注册时间
2006-2-12
回帖
157
发表于 2016-9-11 13:05:10 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 douqunbo 于 2016-9-11 23:11 编辑

如题,技能设置中只有消耗 mp tp 并没有消耗hp这一项,请教下有没有什么插件或者 自带的注释命令可以实现 消耗HP 这个功能?
梦石
0
星屑
50
在线时间
1019 小时
注册时间
2012-4-25
回帖
693
发表于 2016-9-11 14:01:46 | 显示全部楼层
找YEP插件,我记得有消耗HP的
回复

使用道具 举报

梦石
0
星屑
311
在线时间
204 小时
注册时间
2007-2-4
回帖
1772
发表于 2016-9-11 14:34:25 | 显示全部楼层
ひきも記的这个插件不仅能做到你要的效果,还能做类似乾坤一掷的那种『以本伤人』的技能效果。
具体用法就是在技能的注释栏里输入相应的代码(见代码中『メモ欄タグ(スキル)』一处)

[pre lang="javascript" file="TMSkillCostEx.js"]//=============================================================================
// TMVplugin - スキルコスト拡張
// 作者: tomoaky (http://hikimoki.sakura.ne.jp/)
// Version: 0.22b
// 最終更新日: 2016/06/13
//=============================================================================

/*:
* @plugindesc MPやTPの代わりにHPやアイテムを消費するスキルを
* 設定できるようになります。
*
* @author tomoaky (http://hikimoki.sakura.ne.jp/)
*
* @param hpVNumberId
* @desc スキル使用時にコスト消費前の残りHPを代入する変数番号。
* 初期値: 0 ( 1 以上を指定すると有効になります)
* @default 0
*
* @param mpVNumberId
* @desc スキル使用時にコスト消費前の残りMPを代入する変数番号。
* 初期値: 0 ( 1 以上を指定すると有効になります)
* @default 0
*
* @param ignoreEnemyItemCost
* @desc 敵がスキルを使用する際にアイテムコストを無視するかどうか
* 初期値: 1 ( 0 = パーティのアイテムを消費 / 1 = 無視)
* @default 1
*
* @help
* 使い方:
*   スキルのメモ欄にタグを書き込むことでコストを追加できます。
*
*   データベースで 消耗しない に設定したアイテムをコストとした場合、
*   スキル使用時に必要だが消費はしないという扱いになります。
*
*   HPをコストとして設定した場合、残りHPがコストと同値では
*   使用できません。ただし、スキルに hpCostNoSafety タグがある場合は
*   残りHPがコスト以下でもスキルが使用できます。
*   当然使用したアクターは戦闘不能になります。
*
*   経験値をコストとして設定し、一緒に expCostNoLevelDown タグを
*   設定している場合、コストの支払いによってレベルが下がる状況では
*   スキルの使用ができなくなります。
*
* プラグインパラメータ:
*   コスト消費前の残りHP(MP)を指定した変数に代入し、これにより
*   消費したHP(MP)の量をダメージ計算式に反映させることができます。
*   hpVNumberId の値を 1 にすると、ゲーム変数1番にコスト消費前の
*   残りHPが代入されます。ダメージ計算式に $gameVariables.value(1) と
*   書けばゲーム変数1番の値を参照することができます。
*
* メモ欄タグ(スキル):
*   <hpCost:10>          # スキルのコストとしてHP10を設定
*   <hpRateCost:50>      # スキルのコストとして最大HPの50%を設定
*   <hpCRateCost:25>     # スキルのコストとして残りHPの25%を設定
*   <hpCostNoSafety>     # HPコスト支払いによる戦闘不能を許可する
*   <mpRateCost:100>     # スキルのコストとして最大MPの100%を設定
*   <mpCRateCost:50>     # スキルのコストとして残りMPの50%を設定
*   <mpCostNoMcr>        # MPコストから特徴『MP消費率』の効果を除外
*   <itemCost:I1*2>      # スキルのコストとしてアイテム1番2個を設定
*   <itemCost:W2*1>      # スキルのコストとして武器2番1個を設定
*   <itemCost:A5*1>      # スキルのコストとして防具5番1個を設定
*   <expCost:50>         # スキルのコストとして経験値50を設定
*   <expCostNoLevelDown> # 経験値コストによるレベルダウンを禁止
*   <goldCost:100>       # スキルのコストとしてお金100Gを設定
*   <vnCost:3*1>         # スキルのコストとしてゲーム変数3番の値1を設定
*
* vnCostタグの特殊な使い方:
*   メモ欄タグ vnCost のみ制御文字を利用して変数の中身をパラメータとして
*   設定することができます。
*   <vnCost:\V[14]*\V[15]>
*   たとえば上記のようなタグがついたスキルを使用する際に、変数14番の
*   値が 16 、変数15番の値が 3 だった場合は、変数16番の値を3消費
*   することになります。
*
* プラグインコマンドはありません。
*
*/

var Imported = Imported || {};
Imported.TMSkillCostEx = true;

(function() {

  var parameters = PluginManager.parameters('TMSkillCostEx');
  var hpVNumberId = +parameters['hpVNumberId'];
  var mpVNumberId = +parameters['mpVNumberId'];
  var ignoreEnemyItemCost = parameters['ignoreEnemyItemCost'] === '1' ? true : false;
  
  //-----------------------------------------------------------------------------
  // Game_BattleBase
  //

  Game_BattlerBase.prototype.skillHpCost = function(skill) {
    var result = 0;
    if (skill.meta.hpCost) {
      result += +skill.meta.hpCost;
    }
    if (skill.meta.hpRateCost) {
      result += +skill.meta.hpRateCost * this.mhp / 100;
    }
    if (skill.meta.hpCRateCost) {
      result += +skill.meta.hpCRateCost * this._hp / 100;
    }
    return Math.floor(result);
  };
  
  Game_BattlerBase.prototype.skillMpCost = function(skill) {
    var result = skill.mpCost;
    if (skill.meta.mpRateCost) {
      result += +skill.meta.mpRateCost * this.mmp / 100;
    }
    if (skill.meta.mpCRateCost) {
      result += +skill.meta.mpCRateCost * this._mp / 100;
    }
    if (!skill.meta.mpCostNoMcr) {
      result *= this.mcr;
    }
    return Math.floor(result);
  };

  Game_BattlerBase.prototype.skillItemCost = function(skill) {
    if (!this.isActor() && ignoreEnemyItemCost) {
      return null;
    }
    if (skill.meta.itemCost) {
      var re = /(i|w|a)(\d+)\*(\d+)/i;
      var match = re.exec(skill.meta.itemCost);
      if (match) {
        var itemCost = {};
        var s = match[1].toUpperCase();
        if (s === 'I') {
          itemCost.item = $dataItems[+match[2]];
        } else if (s === 'W') {
          itemCost.item = $dataWeapons[+match[2]];
        } else {
          itemCost.item = $dataArmors[+match[2]];
        }
        itemCost.num = +match[3];
        return itemCost;
      }
    }
    return null;
  };

  Game_BattlerBase.prototype.skillExpCost = function(skill) {
    return !this.isEnemy() && skill.meta.expCost ? +skill.meta.expCost : 0;
  };
  
  Game_BattlerBase.prototype.skillGoldCost = function(skill) {
    return !this.isEnemy() && skill.meta.goldCost ? +skill.meta.goldCost : 0;
  };
  
  Game_BattlerBase.prototype.skillVNumberCost = function(skill) {
    if (skill.meta.vnCost) {
      var result = {};
      var vnCost = skill.meta.vnCost.split('*');
      var re = /\\V\[(\d+)\]/i;
      var match = re.exec(vnCost[0]);
      result.index = match ? $gameVariables.value(+match[1]) : +vnCost[0];
      var match = re.exec(vnCost[1]);
      result.num = match ? $gameVariables.value(+match[1]) : +vnCost[1];
      return result;
    }
    return null;
  };

  var _Game_BattleBase_canPaySkillCost = Game_BattlerBase.prototype.canPaySkillCost;
  Game_BattlerBase.prototype.canPaySkillCost = function(skill) {
    if (!this.canPaySkillHpCost(skill) ||
        !this.canPaySkillItemCost(skill) ||
        !this.canPaySkillExpCost(skill) ||
        !this.canPaySkillGoldCost(skill) ||
        !this.canPaySkillVNumberCost(skill)) {
      return false;
    }
    return _Game_BattleBase_canPaySkillCost.call(this, skill);
  };

  Game_BattlerBase.prototype.canPaySkillHpCost = function(skill) {
    return skill.meta.hpCostNoSafety || this._hp > this.skillHpCost(skill);
  };
  
  Game_BattlerBase.prototype.canPaySkillItemCost = function(skill) {
    var itemCost = this.skillItemCost(skill);
    return !itemCost || $gameParty.numItems(itemCost.item) >= itemCost.num;
  };
  
  Game_BattlerBase.prototype.canPaySkillExpCost = function(skill) {
    var expCost = this.skillExpCost(skill);
    return expCost === 0 || (this.currentExp() >= expCost &&
           (!skill.meta.expCostNoLevelDown || this.currentExp() - expCost >=
           this.currentLevelExp()));
  };
  
  Game_BattlerBase.prototype.canPaySkillGoldCost = function(skill) {
    return $gameParty.gold() >= this.skillGoldCost(skill);
  };
  
  Game_BattlerBase.prototype.canPaySkillVNumberCost = function(skill) {
    var vnCost = this.skillVNumberCost(skill);
    return !vnCost || $gameVariables.value(vnCost.index) >= vnCost.num;
  };
  
  var _Game_BattleBase_paySkillCost = Game_BattlerBase.prototype.paySkillCost;
  Game_BattlerBase.prototype.paySkillCost = function(skill) {
    if (hpVNumberId > 0) $gameVariables.setValue(hpVNumberId, this._hp);
    if (mpVNumberId > 0) $gameVariables.setValue(mpVNumberId, this._mp);
    this._hp -= Math.min(this.skillHpCost(skill), this._hp);
    var itemCost = this.skillItemCost(skill);
    if (itemCost && this.isItemCostValid(itemCost.item)) {
      $gameParty.loseItem(itemCost.item, itemCost.num, false)
    }
    var expCost = this.skillExpCost(skill);
    if (expCost) {
      var newExp = this.currentExp() - expCost;
      this.changeExp(newExp, this.shouldDisplayLevelUp());
    }
    $gameParty.loseGold(this.skillGoldCost(skill));
    var vnCost = this.skillVNumberCost(skill);
    if (vnCost) {
      var n = $gameVariables.value(vnCost.index) - vnCost.num;
      $gameVariables.setValue(vnCost.index, n);
    }
    _Game_BattleBase_paySkillCost.call(this, skill);
  };
  
  Game_BattlerBase.prototype.isItemCostValid = function(item) {
    return !DataManager.isItem(item) || item.consumable;
  };

})();[/pre]
新しい誕生祝いだッ!
回复

使用道具 举报

梦石
0
星屑
50
在线时间
11 小时
注册时间
2015-12-20
回帖
6
发表于 2016-9-11 14:34:27 | 显示全部楼层
用事件好了O(∩_∩)O
回复

使用道具 举报

梦石
0
星屑
685
在线时间
1 小时
注册时间
2016-9-11
回帖
1
发表于 2016-9-11 16:38:28 | 显示全部楼层
玄天 发表于 2016-9-11 14:34
ひきも記的这个插件不仅能做到你要的效果,还能做类似乾坤一掷的那种『以本伤人』的技能效果。
具体用法就 ...

3q  有不少需要的功能
回复

使用道具 举报

梦石
0
星屑
65
在线时间
8 小时
注册时间
2016-9-17
回帖
4
发表于 2016-9-17 21:03:10 | 显示全部楼层
谢谢,已经学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部