ツクールMVで倉庫内作業(岩を目的地へ運ぶ)を簡単に作れるプラグイン作った1 #ツクールMV
今回は岩を動かして全てのボタン(目的地)のところまで移動したらゲームクリア(もしくは色々なこと)になる倉庫内作業ゲーがわりかし簡単に作れるプラグインを作ったので公開してみるよ~動画だと分かり易いかも肝心のソースはこちらでhttp://strawberrygohan.com/iPhone/tkool/CarryRock.jsソースは最後に全文載せています。使い方今回は岩を全てボタンパネルの上に置くと扉が開くゲームを作ってみようと思います。図のようにマップを適当に作って岩とパネルと扉のイベントを作ります。CarryRockをプラグインに追加します。各パラメータはそのままで。各パタメータの説明StepOnNewPanelFlagNo岩を目的地(ボタンパネル)に置いた瞬間にオンになるスイッチの番号初期値は1で、1番のスイッチがtrueになります。ClearFlagNo全ての目的地(ボタンパネル)に岩を置くとオンになるスイッチの番号初期値は2で、2番のスイッチがtrueになります。RockNameここに書かれた文字をイベントのメモに入力するとそのイベントが岩扱いになる初期値は岩で、イベントのメモを岩にするとそのイベントが岩扱いになりますDestinationNameここに書かれた文字をイベントのメモに入力するとそのイベントが目的地(ボタンパネル)扱いになる初期値は目的地で、イベントのメモを岩にするとそのイベントが目的地(ボタンパネル)扱いになりますSelfSwitchSortWhenSteppingOnPanel目的地(ボタンパネル)のイベントに岩イベントを置いた時にOnとなるセルフスイッチの種類PlayerIsRockプレイヤーを目的地(ボタンパネル)に移動すると岩が置かれたのと同じように各スイッチが処理される初期値はfalseでボタンパネルにプレイヤーが移動しても何も起こらないで、まず岩イベントを作ります。岩のイベントのメモに「岩」という文字を入れますこれでプログラム上でこのイベントを岩のイベントと認識してくれます。トリガー「プレイヤーから接触」イベント内容「移動ルートの設定 このイベント:プレイヤーから遠ざかる」(あとはウェイトを入れたりSEを鳴らしたり)動かすゴール、目的地のボタンのメモに「目的地」という文字を入力します。オプションですり抜け状態にしておきます。このパネルの上に岩が乗るとセルフスイッチBがONになるので(セルフスイッチの種類はプラグイン管理で変更可能)岩が乗った時のページを追加して画像部分を押されているものに変更あとはこの岩イベントとパネルボタンイベントを適当な場所に置いたりコピー&ペーストさせて増やします。全てのパネルボタンに岩が置かれたらプラグイン管理で設定された「ClearFlagNo」に入っている数字のパラメータのスイッチがONになります。(初期値は2)扉を作ります。全てのパネルボタンに岩を置くとスイッチ番号2がONになるのでその場合、自動的に始まるで自動的に扉が開くようにしましょう。セルフスイッチをONにしてセルフスイッチONの時に画像なしのページを追加します。これでパネルボタンに岩を全て置くと自動的に扉が消えます。これだけではプラグインコマンドを一切使っていないので初期イベントと常時更新するイベントを追加します。初期イベントを作ります。トリガーは自動実行で内容はプラグインコマンド『CarryRock setData』と入力。イベントの一時消去で初期イベントを繰り返さないようにします。すみません!!これ以上書こうとするとなぜかwebが落ちるので今回はここまでです。ものすごい中途半端ですみません!!//=============================================================================// CarryRock.js//=============================================================================/*:* @plugindesc 岩を目的地に運ぶあのゲームが作れます。* 各パラメータはヘルプ参照* @author mokumoku** @param StepOnNewPanelFlagNo* @desc 新たに岩が目的地の上に移動できたらこの番号のスイッチがOnになります* @default 1** @param ClearFlagNo* @desc 全ての岩を目的地に移動できたらこの番号のスイッチがOnになります* @default 2** @param RockName* @desc イベントのメモにこの名前を入れるとそのイベントがを岩として認識* @default 岩** @param DestinationName* @desc イベントのメモにこの名前を入れるとそのイベントを移動した岩の目的地として認識* @default 目的地** @param SelfSwitchSortWhenSteppingOnPanel* @desc 目的地に岩を置いた時にOnとなるセルフスイッチの種類* @default B** @param PlayerIsRock* @desc プレイヤーを目的地に移動すると岩が置かれたのと同じように各スイッチが処理される* @default false** @help 岩を目的地に運ぶ、倉庫内作業ゲームが作れます。**目的地に岩を運んだらその目的地のセルフスイッチがOnになります。*セルフスイッチの種類はSelfSwitchSortWhenSteppingOnPanelで**岩のイベントのメモにRockNameの値(初期値は岩)にして、*目的地のイベントのメモにDestinationNameの値(初期値は目的地)にします。**岩のイベントを1つでも目的地に運ぶとStepOnNewPanelFlagNoの番号のスイッチがOn*岩のイベントを全て目的地に運ぶとClearFlagNoの番号のスイッチがOnになる。**プレイヤーが目的地に移動したら岩が目的地に移動するのと同じような処理をするには*PlayerIsRockをtrueに*/(function() { var parameters = PluginManager.parameters('CarryRock'); var stepOnNewPanelFlagNo = Number(parameters['StepOnNewPanelFlagNo'] ); var rockClearFlagNo = Number(parameters['ClearFlagNo'] ); //var rockName = String(parameters['RockName'] ); //var destinationName = String(parameters['DestinationName'] ); var rockName = String(parameters["RockName"] ); var destinationName = String(parameters["DestinationName"] ); var selfSwitchSortWhenSteppingOnPanel = String(parameters["SelfSwitchSortWhenSteppingOnPanel"] ); var playerIsRock = Boolean(parameters["PlayerIsRock"] === 'true' || false); var lockEventIDs = []; var destinationEventIDs = []; //Hook Command var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand; Game_Interpreter.prototype.pluginCommand = function (command, args) { _Game_Interpreter_pluginCommand.call(this, command, args); if (command === 'CarryRock') { if (args[0] == 'setData') { lockEventIDs = []; destinationEventIDs = []; var events = $gameMap.events(); for (var i = 0; i < events.length; i++){ if(events[i].isRock() === true){ lockEventIDs.push(i); } else if(events[i].isDestination() === true){ destinationEventIDs.push(i); } } } else if (args[0] == 'update') { // 新しく目的地に岩がつくかのスイッチをOFFに $gameSwitches.setValue(stepOnNewPanelFlagNo,false); var events = $gameMap.events(); // 岩が移動中は調査しない for (var i = 0; i < lockEventIDs.length; i++){ if( events[lockEventIDs[i]].isMoving() ){ return; } } // キャラクターが移動中も調査しない if( $gamePlayer.isMoving() ){ return; } // ここから調査する $gameSwitches.setValue(rockClearFlagNo,true); var placeNumber = $gameMap.mapId(); for (var i = 0; i < destinationEventIDs.length; i++) { var number = destinationEventIDs[i]; var dEvent = events[number]; var subFlag = $gameSelfSwitches.value([placeNumber, dEvent.eventId(), selfSwitchSortWhenSteppingOnPanel]); $gameSelfSwitches.setValue([placeNumber, dEvent.eventId(), selfSwitchSortWhenSteppingOnPanel], false); for (var j = 0; j < lockEventIDs.length; j++){ var lEvent = events[lockEventIDs[j]]; if(dEvent.x == lEvent.x && dEvent.y == lEvent.y){ $gameSelfSwitches.setValue([placeNumber, dEvent.eventId(), selfSwitchSortWhenSteppingOnPanel], true); break; } } if( playerIsRock && $gamePlayer.x == dEvent.x && $gamePlayer.y == dEvent.y ){ $gameSelfSwitches.setValue([placeNumber, dEvent.eventId(), selfSwitchSortWhenSteppingOnPanel], true); } if (!subFlag && $gameSelfSwitches.value([placeNumber, dEvent.eventId(), selfSwitchSortWhenSteppingOnPanel]) ){ $gameSwitches.setValue(stepOnNewPanelFlagNo,true); } else if (!$gameSelfSwitches.value([placeNumber, dEvent.eventId(), selfSwitchSortWhenSteppingOnPanel]) ){ $gameSwitches.setValue(rockClearFlagNo,false); } } } } }; Game_Event.prototype.isRock = function() { if (this.event().note === rockName){ return true; } return false; }; Game_Event.prototype.isDestination = function() { console.log(destinationName); if (this.event().note === destinationName){ return true; } return false; }; })();