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のほうもよろしくお願い致します!
参考までにこちらもどうぞ↓
この記事が気に入ったらサポートをしてみませんか?