【RPGツクールMV】ランダムに表示されるスキルの作り方【自分用メモ】

2019年7月31日水曜日

RPGツクールMV メモ ランダムスキルゲームを作りたい ランダム表示スキル

t f B! P L

必要なもの

  • YEP_SkillCore
  • YEP_EquipBattleSkills
  • RPGツクールMV
  • ちょっとの知識
  • あと根気

このやり方では装備で取得しただけのスキルは判定されない(スキル画面で装備したやつのみ取得できる)ので気をつけてください!

イベント

スクリプト:console.log("ここからスキル1")
ラベル:スキル1
変数の操作:#0001 表示スキル1 = 乱数 3..10
変数の操作:#0004 取得スキルID = $gameActors.actor(1).battleSkillsRaw()
スクリプト:var SkillID = $gameVariables.value(4)
スクリプトvar ittisitayo = SkillID.some( function( value ) {
スクリプトreturn value == $gameVariables.value(1);
スクリプト});
スクリプト$gameVariables.setValue(2,ittisitayo)
スクリプト:console.log($gameVariables.value(1))
スクリプト:console.log($gameVariables.value(2))
条件分岐:スクリプト:$gameVariables.value(2) == true
スクリプト:console.log("ここからスキル2")
スクリプト:$gameVariables.setValue(2,"false")
ラベル:スキル2
変数の操作:#0003 表示スキル2 = 乱数 3..10
変数の操作:#0004 取得スキルID = $gameActors.actor(1).battleSkillsRaw()
スクリプト:var SkillID = $gameVariables.value(4)
スクリプトvar ittisitayo = SkillID.some( function( value ) {
スクリプトreturn value == $gameVariables.value(3);
スクリプト});
スクリプト$gameVariables.setValue(2,ittisitayo)
スクリプト:console.log($gameVariables.value(3))
スクリプト:console.log($gameVariables.value(2))
条件分岐:表示スキル2 = 表示スキル1
ラベルジャンプ:スキル2

分岐終了
条件分岐:スクリプト:$gameVariables.value(2) == true
スクリプト:console.log("ここからスキル3")
スクリプト:$gameVariables.setValue(2,"false")
ラベル:スキル3
変数の操作:#0005 表示スキル3 = 乱数 3..10
変数の操作:#0004 取得スキルID = $gameActors.actor(1).battleSkillsRaw()
スクリプト:var SkillID = $gameVariables.value(4)
スクリプトvar ittisitayo = SkillID.some( function( value ) {
スクリプトreturn value == $gameVariables.value(5);
スクリプト});
スクリプト$gameVariables.setValue(2,ittisitayo)
スクリプト:console.log($gameVariables.value(5))
スクリプト:console.log($gameVariables.value(2))
条件分岐:表示スキル3 = 表示スキル1
ラベルジャンプ:スキル3

分岐終了
条件分岐:表示スキル3 = 表示スキル2
ラベルジャンプ:スキル3

分岐終了
条件分岐:スクリプト:$gameVariables.value(2) == true
スクリプト:console.log("ここからスキル4")
スクリプト:$gameVariables.setValue(2,"false")
ラベル:スキル4
変数の操作:#0006 表示スキル4 = 乱数 3..10
変数の操作:#0004 取得スキルID = $gameActors.actor(1).battleSkillsRaw()
スクリプト:var SkillID = $gameVariables.value(4)
スクリプトvar ittisitayo = SkillID.some( function( value ) {
スクリプトreturn value == $gameVariables.value(6);
スクリプト});
スクリプト$gameVariables.setValue(2,ittisitayo)
スクリプト:console.log($gameVariables.value(6))
スクリプト:console.log($gameVariables.value(2))
条件分岐:表示スキル4 = 表示スキル1
ラベルジャンプ:スキル4

分岐終了
条件分岐:表示スキル4 = 表示スキル2
ラベルジャンプ:スキル4

分岐終了
条件分岐:表示スキル4 = 表示スキル3
ラベルジャンプ:スキル4

分岐終了
条件分岐:スクリプト:$gameVariables.value(2) == true

それ以外のとき
ラベルジャンプ:スキル4

分岐終了

それ以外のとき
ラベルジャンプ:スキル3

分岐終了

それ以外のとき
ラベルジャンプ:スキル2

分岐終了

それ以外のとき
ラベルジャンプ:スキル1

分岐終了
スクリプト:setSkill1 = $gameVariables.value(1)
スクリプトsetSkill2 = $gameVariables.value(3)
スクリプトsetSkill3 = $gameVariables.value(5)
スクリプトsetSkill4 = $gameVariables.value(6)
スクリプト
スクリプト$gameVariables.setValue(7,[setSkill1,setSkill2,setSkill3,setSkill4])
スクリプト:console.log($gameVariables.value(7))

多分もっとスマートな組み方がある

イベントの解説

console.log()

 F8で起動されるコンソールに特定の文字列や変数を表示してくれる。
 文字列の場合は console.log('←これで囲む→')

変数の操作:#0001 表示スキル1 = 乱数 3..10


 その名の通り変数の操作。ここでは変数1番に乱数を突っ込んでる。これが基本の組み方。表示したいスキルの数だけ変数を確保する

変数の操作:#0004 取得スキルID = $gameActors.actor(1).battleSkillsRaw()

 これはアクター1番のスキルの取得しているスキル(厳密に言えばプラグインで装備しているスキル)の一覧を配列にして変数4番に突っ込んでいる。アクター1番以外を指定したいときは

$gameActors.actor(1)

のactor(1)の1を好きなアクターIDにすればいい。

スクリプト:var SkillID = $gameVariables.value(4) ~ $gameVariables.setValue(2,ittisitayo)

スクリプト:var SkillID = $gameVariables.value(4)
スクリプトvar ittisitayo = SkillID.some( function( value ) {
スクリプトreturn value == $gameVariables.value(1);
スクリプト});
スクリプト$gameVariables.setValue(2,ittisitayo)

 var SkillIDで取得している配列を突っ込んだ変数4番をスクリプト内で使えるように。
 var ittisitayo(変数名のセンスがないのはご容赦)では変数1番で引いた乱数が取得しているスキル(装備していて使えるスキルかどうか)を判定してtrueかfalse(0)を返している。

$gameVariables.setValue(2,ittisitayo)

 はぶっちゃけいらないんですが、エラーが起きた時にわかりやすいので入れてます。
 変数2番に変数 ittisitayo の結果(trueだったらtrueの文字列、falseだったら0を)突っ込んでます。


上記のを表示したいスキルの数分作ります

 元のやつだとなんか条件分岐して次に進めてますが、条件分岐は重複してないか判定のみに使えばいいです。つまり条件分岐で進める必要ないです……

二個目以降の冒頭と最後に付け加えるもの

冒頭

スクリプト:console.log("ここからスキル2") ← これいらない
スクリプト:$gameVariables.setValue(2,"false") ← これは初期化のためにやってるけどいらないかいるのかわからない
ラベル:スキル2 ←これいる

最後

条件分岐:表示スキル2 = 表示スキル1 ← 重複してるか判定、重複してなかったら(falseだったら)次の処理に
ラベルジャンプ:スキル2 ← 冒頭に貼ったラベル「スキル2」に飛ぶ

分岐終了
↑重複判定はこれまでに出てきたスキルの数だけ増やす

イベントの最後(全て終わったあと)に

スクリプト:setSkill1 = $gameVariables.value(1)
スクリプトsetSkill2 = $gameVariables.value(3)
スクリプトsetSkill3 = $gameVariables.value(5)
スクリプトsetSkill4 = $gameVariables.value(6)
スクリプト
スクリプト$gameVariables.setValue(7,[setSkill1,setSkill2,setSkill3,setSkill4])
スクリプト:console.log($gameVariables.value(7))

 変数7番に今まで出た乱数を突っ込んで配列化します。こうすることでスキルのメモ欄で行う変数との一致処理が楽になります。

ランダム表示したり非表示にしたりしたいスキルのメモ欄

<Custom Show Eval>
var Skillserch = $gameVariables.value(7)
var serchresult = Skillserch.some( function( value ) {
return value == 8 ;
});
if ( serchresult == true) {
visible = true;
} else {
visible = false;
}
</Custom Show Eval>

 変数7番を使って、スキル8番を非表示にしたりしなかったりしたいならこれコピペでOK。
 スキル8番以外を指定したいときはコピペして
return value == 8 ;
 の8を好きなスキルのIDにすればいい。
 内容的には配列の中から一致するものを探してtrueかfalseを返しています。

ただこのままだと


 こんな風に非表示にしたはずのスキルが表示(グレーアウトされてるとは言え)されて、さらに装備してる数だけ行が増える。(スキルウィンドウが下にあるのはYEPBattleEngineCore入れてるせいです、後のスクショでは真ん中のウィンドウになってる)


それを防ぐためにjsを直接いじる(バグが起きても責任は取れません)


まず表示の処理をデフォルトにする

YEP_EquipBattleSkillsの
// Window_ActorCommand
を全部消します。

次に黒いスロットを消す

YEP_EquipBattleSkillsの
Yanfly.EBS.Window_SkillList_drawItem
から
Window_SkillList.prototype.isBattleSkillEnabled
までを消す

かなり力技ですが、これでこうなります。


(ウィンドウが真ん中に戻ってるのはYEPBattleEngineCoreをいじったからです)
黒いスロットも半透明になってただけの選択できないスキルも消えてだいぶスッキリしましたね。これで混乱も防げます。


ここからは個人的な日記


 あとはスキルに対応して画像を表示したらだいぶカードゲーム感増すと思うので頑張っていきます……

このブログを検索

ブログ アーカイブ

人気の投稿

Translate

QooQ