【MZ】畑システム-実行処理作り編2-
執筆者:神凪洸
実行処理作り編では、サンプルプロジェクト内で書ききれなかった解説を
載せてるのでサンプルプロジェクトを弄りながら読むのを薦めるっす!
◆収穫
【サンプルプロジェクト コモンイベントID2】
すでに作った選択肢に中身を追加。
スクリプトコマンドで、調べた畝の作物の成長度(【配列】作物状況)に合わせて
収穫コモンイベントを呼び出す条件分岐処理を入れるっす。
予め決めているルールに従って、指定配列が1であれば普通に収穫、10であれば枯れる直前なので収穫量少なめ、11以上で作物は枯れてるので枯れ草(サンプルでは何も入手なし)となるっすよ。
【サンプルプロジェクト コモンイベントID26~30】
実際に作物を収穫する処理を作りましょう。
■作物IDを取得
スクリプト
i = $gameVariables.value(6);//配列番号の指定
sakumotu = $gameVariables.value(2)[i]//「sakumotu」という箱に指定配列(畝)に埋めた種IDを入れてるよ
sakumotu += 11;//作物ID(種ID+(作物ID-1))
ポイントヽ(`Д´)ノ
データベースの種IDと作物IDは必ず同じ順番で連番にせよ!!
サンプルプロジェクトでも説明文がありますが、ここでも改めて。
サンプルプロジェクトでは、かぶ・小麦・はくさいの3種類あります。
種データが ID1かぶの種、ID2小麦の種、ID3はくさいの種 とした場合
作物データも ID12かぶ、ID13小麦、ID14はくさい と必ず同じ順番の連番で設定してください。
収穫用スクリプトでは、種IDがnであれば作物IDはmであるという半自動的な処理によって
作物IDを取得させます。なので、データベースの設定をテキトーにしていると
ここの段階でかぶを育てていたはずなのにはくさいが収穫されたというような事態になりかねません。
IDそのものは何番から始めても構いません。
種はID5~30番まで、作物はID50~75番でもおk。
そして判定の仕方は、次のスクリプト文です。sakumotu += 11;//作物ID(作物ID-種ID))
サンプルプロジェクトでは種はID1~、作物はID12~となっているので
種IDが入っている「sakumotu」という箱に11をプラスすることで
作物IDとなります。
種ID5~30、作物ID50~であれば45をプラスになります。
■アイテム取得をスクリプトで書くのは次の通り
$gameParty.gainItem($dataItems[アイテムID], 入手数);
アイテムIDの部分に事前に取得した作物IDを入れた箱を記入します。
入手数にはお好きな正数をどうぞ。
$gameParty.gainItem($dataItems[sakumotu], 5);//作物が5個入手!
■豊作不作システム
(´・ω・`){毎回固定で収穫はイヤ。ランダム性が欲しい
(・∀・){よし、豊作不作要素を入れてみよう!
サンプルプロジェクトを見ると「作物占い」とやらの変数があり
実際にアイテムを取得する処理の前に別のスクリプト処理があるっすね。
この部分が豊作不作システム処理部分っす!
if ($gameVariables.value(19)<=1){//変数19「作物占い」が1以下なら普通の収穫量
get = Math.floor(Math.random() * 1) + 8;//(0)+8個→つまり、8個入手
}else if($gameVariables.value(19)==2){//作物占いが2なら、豊作
get = Math.floor(Math.random() * 5) + 9;//(0~4)+9個→つまり、9~13個入手
}else if($gameVariables.value(19)==3){//作物占いが3なら不作
get = Math.floor(Math.random() * 2) + 4;//(0~1)+4個→つまり、4~5個入手
}else{//作物占いが0~3以外の数値なら凶作
get = Math.floor(Math.random() * 2) + 1;//(0~1)+1個→つまり、1~2個入手
};
$gameParty.gainItem($dataItems[sakumotu], get);//作物入手
【解説】
「get」という箱に入手数(計算結果)を代入してるよ。
「Math.floor(Math.random() * n)」でランダムの数値が入る。
イベントコマンド変数の操作で言う乱数の指定になるよ。
0~4を指定する場合は、Math.floor(Math.random() * 5)になるよ。
1~4なら、Math.floor(Math.random() * 4) + 1
12~18なら、Math.floor(Math.random() * 7) + 12 となるよ。
Math.floor(Math.random() * n)は0から必ず始まるので、1以上の値から乱数指定する場合は
スタートの最小値を足してあげる必要があるっす。
0から指折り数えると0~4指定の場合は5本目の指で4が入るっすね。
これに+1をすると、1~5に変わるっす。
公式みたいに簡潔にまとめると以下の感じ。
例:12~18の数値を指定したい
12=最小値 18=最大値
Math.floor(Math.random() * ((最大値+1)-最小値)) + 最小値
なお、サンプルプロジェクト最初のMath.floor(Math.random() * 1)は
0~0を指定している事になるので
いくつプラスしてもプラスした数値に固定されるっす。
なので固定数にするならわざわざ乱数を使用せず、get = 8; でおk。
※適宜変更させやすいようにあえて乱数指定で記入しています。
■レア作物の設定
(´・ω・`){たまに違う作物も採れるようにしたい
(・∀・){よし、レア作物の要素を入れよう!
サンプルプロジェクトでは、「かぶ」と「はくさい」を収穫する時
たまに「すごいかぶ」「ビッグなはくさい」が入手できます。
確率でレア作物が手に入る!という処理も先程の乱数スクリプトを使うぞ!
最初にレア作物ゲットチャンスを作ります。
【ルール】
「get1」には乱数の結果。「get2」にはゲットチャンスの判定。0ならハズレ、1なら当たり。
「get3」で実際に入手する数が代入される。
【実行処理】
get1 = Math.floor(Math.random() * 10);
get2 = 0;//チャンス判定はここで0を代入させて、初期化しておく。
if (get1==9 || get1==2){//この場合は0~9の間で 9か2を引いたら確定
get2 = 1;//当たったから1を代入させておく
};
if ($gameVariables.value(19)<=1 && get2==1){//作物占いが1(普通)で当たりだったら
get3 = Math.floor(Math.random() * 2) + 1;//(0~1)+1個→つまり、1~2個入手
}else if($gameVariables.value(19)==2 && get2==1){//作物占いが2(豊作)で当たりだったら
get3 = Math.floor(Math.random() * 4) + 1;//(0~3)+1個→つまり、1~4個入手
}else{//それ以外、つまり不作、凶作の時はレア作物の入手不可
get3 = 0;
};
//ここからレア作物入手処理
if($gameVariables.value(2)[i]==1){//種IDが1(かぶ)だったら
$gameParty.gainItem($dataItems[24], get3);//ID24のすごいかぶ入手
}else if($gameVariables.value(2)[i]==3){//種IDが3(はくさい)だったら
$gameParty.gainItem($dataItems[25], get3);//ID25のビッグなはくさい入手
};
(´・ω・`){レア作物のデータベースは順番はテキトーでいいの?
(・∀・){イイよ!直接IDを指定してるからね!
ヽ(`Д´)ノ{ただし!!全ての作物にレア作物を設定しているなら、順番と連番は同じにして通常作物の処理と同じように組んだ方がいいぞ!!理由はわかるな?!
(´・ω・`){たしかにいちいちID入れてくのメンドイね
(・∀・){もしレア作物も多いなら、いっそ通常作物と同じように順番と連番にして
レア作物のない種IDで条件分岐させれば、簡単になるね。データベースに余裕があればの話だけどね。
◆作物データの初期化
収穫したら、その畝の作物はなくなる!
ってことで色んなデータを初期化しましょう。
処理内容はサンプルプロジェクト通りで、他にとくに言うことはない。
畝の画像指定をただの畝に戻して、各配列変数も初期数値(0)にして……
これでまた新しく、作物を育てられるぞ!
◆まとめ
(;・∀・){こ、これで畑システムの作り方がわかったでしょうか?
(´・ω・`){…………畑システムってめんどくさいんだな
2023/04/18時点では、畑システム作れる(もしくは利用できそうな)プラグイン素材は
暦システムとはリンクさせない時間経過のもので
やっぱり片手の指で足りる程度だったので、実際めんどくさいんだと思います。
ルン●ァクのように日付や天候などと紐づけたものは見つけられなかったので
そういうタイプを絶対どうしても作りたい!!って方は
この畑システム講座と日付天候システム講座とそのサンプルプロジェクトを参考に頑張ってください。
◆この畑システムの利点
因みに話。
上記の通り、暦システムと紐づけるプラグイン素材は見当たらなかったので
一日毎に作物が成長、天候の要素が加わる、独自の紐づけシステム(作物占いや連作、レア作物など)
色んな事を突っ込める拡張性高いのが、本システムの最大の利点だと思います。
殆どをスクリプトで作り上げる必要性があるので、圧倒的に上級者向けですが
プラグイン素材使うのも同じくある程度のスクリプト理解が必要なのは同じなので
自分にあったものを選択しましょう。
見つけられたプラグイン素材はこちら→MMO式採集合成システムMVMZ
合成システムも複合されているもの。無料でDLできるので、実際に触ってみて気に入ったらお布施してあげましょう。