見出し画像

SRPG Studio プラグイン スキルの対象の条件HPを細かく設定する方法(発動型と支援)&Pluginの作り方

こんにちは熱帯魚ことRYBAです。

対象のHP条件を細かく設定したい気分!

な方向け

作り方に興味ねーよという方はPluginのところまで飛んでください。

では条件HPを細かく設定する手段を解説します。

まず判定用のクラスを作成

判定用のクラスを作ります。
汎用的に識別できるようにカスパラには

minHp : HPの下限条件
maxHp : HPの上限条件

上記2つのパラメータを設定することとします。

var RYBA = RYBA || {};
RYBA.UnitHpChecker = {
   isTargetHp:function(targetUnit, conditionParam){
       var maxHp = ParamBonus.getMhp(targetUnit);
       var currentHp = targetUnit.getHp();
       
       return this.isBaseTargetHp(maxHp, currentHp, conditionParam);
   },
   
   isBaseTargetHp:function(maxHp, currentHp, conditionParam){
       var baseHP = 100;
       baseHp = maxHp * (conditionParam.minHp / 100 );
       if (currentHp < baseHp) {
           return false;
       }
       baseHp = maxHp * (conditionParam.maxHp / 100 );
       if (currentHp > baseHp) {
           return false;
       }
       
       return true;

   }
};

まず、unitとカスパラの情報を引数とする関数です。

   isTargetHp:function(targetUnit, conditionParam){
       var maxHp = ParamBonus.getMhp(targetUnit);
       var currentHp = targetUnit.getHp();
       
       return this.isBaseTargetHp(maxHp, currentHp, conditionParam);
   }

最大HP、現在HP、カスパラの3つが引数となった関数を
別途用意してさらに呼び出しします。

   isBaseTargetHp:function(maxHp, currentHp, conditionParam){
       var baseHP = 100;
       baseHp = maxHp * (conditionParam.minHp / 100 );
       if (currentHp < baseHp) {
           return false;
       }
       baseHp = maxHp * (conditionParam.maxHp / 100 );
       if (currentHp > baseHp) {
           return false;
       }
       
       return true;

   }

今回の場合だと、再利用することはないと思いますが
細かく分けておけば何かと便利です。

これで対象のHPを判定できる関数の完成です。

判定関数を改造する

HPの判定ができるようになったら

発動型スキルの条件
支援スキルの条件

これらの関数を変更しましょう。

SkillRandomizer._isSkillInvokedInternal

この関数は発動型スキルの判定をしています。

var alias1 = SkillRandomizer._isSkillInvokedInternal;
SkillRandomizer._isSkillInvokedInternal = function(active, passive, skill) {
   var result = alias1.call(this,active,passive,skill);
   if( !result ){
       return false;
   }

   var playerHpRate = skill.custom.RYBA_CondPlayerHpRate;
	if(playerHpRate != null){
		if(!RYBA.UnitHpChecker.isTargetHp(active, playerHpRate )){
			return false;
		}
   }

	var enemyHpRate = skill.custom.RYBA_CondEnemyHpRate;
	if(enemyHpRate != null){
		if(!RYBA.UnitHpChecker.isTargetHp(passive, enemyHpRate )){
			return false;
		}
   }

   return result;
}

alias1を宣言して元の処理を完全に上書きしないように気を付けます。

元の処理を実行した後で今回の追加条件でさらに判定します。

それぞれ
発動者:RYBA_CondPlayerHpRate
相手側:RYBA_CondEnemyHpRate

でカスパラ設定するとOKな風に記述しています。

次に支援スキル

var alias2 = SupportCalculator._isSupportable;
SupportCalculator._isSupportable = function(unit, targetUnit, skill) {
	
   var result = alias2.call(this, unit, targetUnit, skill);
   if( !result ){
       return false;
   }
	if (targetUnit === null) {
       targetUnit = unit;
   }
   var enemyHpRate = skill.custom.RYBA_CondSupportHpRate;
   if(enemyHpRate != null){
       result = RYBA.UnitHpChecker.isTargetHp(targetUnit, enemyHpRate );
   }
	return result;
};

これも発動型スキルと同じように記述します。

カスパラ:RYBA_CondSupportHpRate

これで処理は完成です。

カスパラの設定方法

1.HPが50%以下の場合

{
	RYBA_CondSupportHpRate:{
		minHp:0,
		maxHp:50
	}
}

2.HPが80%以上の場合

{
	RYBA_CondSupportHpRate:{
		minHp:80,
		maxHp:100
	}
}

カスパラはこんな感じに設定します。

支援スキルか発動型スキル(自身or相手)で
RYBA_CondSupportHpRateの部分の記述を変更しましょう。

用途

公式では
2/3、1/2、1/4、1/5(非全回復・全回復)
の6パターン用意されている。
これ以外を指定したい時に使える。

また発動型スキルの場合、相手のHPしか条件に設定できないが、
味方側の残HPも条件に加えることができる

応用

実は条件を見ているところは上記の箇所なのでオリジナルな
条件を追加すればさらにカスタマイズが可能

var alias3 = SkillRandomizer._isSkillInvokedInternal;
SkillRandomizer._isSkillInvokedInternal = function(active, passive, skill) {
   var result = alias3.call(this,active,passive,skill);
   if( !result ){
       return false;
   }

    var selfMoved = skill.custom.RYBA_selfMoved;
	if(selfMoved != null){
		if(active.getMostResentMov() > 0 ){
			return selfMoved;
		}else{
			return !selfMoved;
		}
	}

   return result;
}
カスパラ例:
{ RYBA_selfMoved:true }
説明:
trueなら1マスでも移動した移動後のみ、falseなら移動しなかった場合のみ
設定しなければ今まで通り

こうしたオリジナルな発動条件を容易に追加することも可能

Plugin

まとめ

もしかしたら公式が対応してしまうかもしれませんが
一応作り方まで記載しておきました。

今後は作成方法も合わせて
Pluginをひっそりと公開していきます。

良かったらフォローお願い致します!
Twitterのほうもよろしくお願い致します!

参考までにこちらもどうぞ↓


この記事が気に入ったらサポートをしてみませんか?