ロートル元ゲーム開発者がツクールでゲームを作る|プラグインを作る(3)
さて、昨日はオレ専用カスタムプラグインの作成に成功しました。ので、今度はこれを他人様にも扱えるようにプラグインパラメータで各種設定を行えるようにしたいところです。需要があるかどうかはまったくわかりませんが、己のモチベーション維持の為に、とりあえずあることにしておきます。’
まず、プラグイン設定でパラメータを表示できるようにします。これはプラグイン冒頭のコメント部分で設定します。
// WeightRandom
/*:
* @plugindesc 重みつきランダム
* @author Tsuru
* @param ゲーム変数
* @type variable
* @desc 指定した番号のゲーム変数に釣った魚のアイテムIDが自動設定されます。
* @default 0
* @param 釣りリスト
* @type struct<Fishlist>[]
* @default []
* @desc リージョンとそこに出る魚のリストを設定します。
*/
/*~struct~Fishlist:
* @param Region
* @type number
* @default 0
* @desc 魚の出るリージョンを設定します。
*
* @param List
* @type struct<List>[]
* @default []
* @desc 魚のリストを設定します。
*/
/*~struct~List:
* @param Name
* @type string
* @desc 魚の名前を設定します。
*
* @param ID
* @type number
* @desc 魚のアイテムIDを設定します。
*
* @param Rate
* @type number
* @desc 魚の出る割合(重み)を設定します。
*/
こんな感じですね。変数の『ゲーム変数』は単純に羅列するだけで済みますが、構造体の『釣りリスト』の方は下にどんな構造を含むのか /*~struct~Fishlist: 以下で設定しておかないといけません。配列が入れ子になっているので、更にその下に /*~struct~List: で設定しておきます。何言ってるか自分でもよく分からなくなってきましたので、プラグインパラメータで実際に設定する時の画像を貼ると、こうです。
魚の名前とID、出現率が視覚的に分かりやすく設定できるようになりました。これを一匹ずつぽちぽちと設定していけば、4匹でも5匹でも配列に含めることができます。これで他人様にも分かりやすくなる筈!
さて、ここまでは簡単にできましたが、入力できるようになっただけではパラメータとして使えません。今度はこれをプラグインで読み込む為の関数が必要です。その為のコードは以下のような感じ。
var getParamString = function(paramNames) {
if (!Array.isArray(paramNames)) paramNames = [paramNames];
for (var i = 0; i < paramNames.length; i++) {
var name = PluginManager.parameters(pluginName)[paramNames[i]];
if (name) return name;
}
return '';
};
var getParamNumber = function(paramNames, min, max) {
var value = getParamString(paramNames);
if (arguments.length < 2) min = -Infinity;
if (arguments.length < 3) max = Infinity;
return (parseInt(value) || 0).clamp(min, max);
};
var convertParam = function(param) {
if(param !== undefined){
return JSON.parse(param);
}
};
var param = {};
param.getFish = getParamNumber(["ゲーム変数", 0]);
param.settings_Fishlist = getParamString("釣りリスト");
param.settings_Fishlist = convertParam(param.settings_Fishlist);
console.log(param.settings_Fishlist);
ゲーム変数の方は数字をひとつ読み込むだけなので、プラグイン最後の$gameVariables.setValue()の値だった「17」をparam.getFishに差し替えるだけで使えて簡単ですが、釣りリストの方は配列と構造体が入れ子になった複雑な構成で、ぶっちゃけ扱える自信がありません。なのでとりあえずconsole.logで読み出した配列を書き出すだけにしてみました。サンプルを起動してアジを釣り上げたのを確認し、コンソールを見てみます。
バックスラッシュだらけで何が何やらわからない……(多分JSONの仕様) というわけで、次回はこの暗号のようなリストを解読してプラグインに取りこめるようにしてみます。
コーヒー代でも投げてくれると、作者が喜びます。