忍者ブログ
windowsやブラウザ のゲーム作ったりとか。
RPGツクールMVやMZのイベントコマンドで使える便利なスクリプトの備忘録です。

プラグインを使わずにちょこちょこっとイベントを拡張できるので
とっても便利です。

ここにないものは、以下のサイトで調べると見つかるかもしれません。
ツクールMZスクリプトリファレンスwiki
ツクールMVスクリプトリファレンスwiki
RPGツクールMZ スクリプトリファレンス
RPGツクールMV プラグインコマンド集 リファレンス

教えてくださった皆様、ありがとうございます。

各種メニュー画面の呼び出し(参考/ツクマテ投稿記事

 セーブ画面呼び出し SceneManager.push(Scene_Save);
 ロード画面呼び出し SceneManager.push(Scene_Load);
 ステータス画面呼び出し SceneManager.push(Scene_Status);
 スキル画面呼び出し SceneManager.push(Scene_Skill);
 アイテム画面呼び出し SceneManager.push(Scene_Item);
 装備画面呼び出し SceneManager.push(Scene_Equip);
 オプション画面呼び出し SceneManager.push(Scene_Options);

 アクターを指定してステータス画面呼び出し(参考/ツクマテ投稿記事
// アクターID2番のステータス画面を開く
var actor = $gameActors.actor(2);
$gameParty.setMenuActor(actor);
SceneManager.push(Scene_Status);
アイテムの大事なもののページを開く(参考/ツクマテ投稿記事
SceneManager.push(Scene_Item);
SceneManager.update();
SceneManager._scene._categoryWindow.select(3);
SceneManager._scene.onCategoryOk();
SceneManager._scene._categoryWindow.deactivate();

オートイベントでメッセージをスキップしても移動が終わるまで待つ(参考/シロップ様)

 this.setWaitMode('route')
 会話直後に記述。

イベントの位置をリセット(参考/ツクマテ投稿記事

 $gamePlayer.requestMapReload();

画面のフェードイン・アウトを黒以外で(参考/ツクマテ投稿記事

 SceneManager._scene._spriteset._fadeSprite.setColor(255, 255, 255);
 フェードイン・アウトの直前に記述。
 255, 255, 255はRGB値で、数字を変更することで色を変えることができ
 変更した色は、メニューを開いたり、マップ移動したり
 戦闘に入ったりするなど、シーンが変わるまで維持される。

乗り物の「向き」を変更(参考/ツクマテ投稿記事

 小型船 $gameMap.boat().setDirection(2);
 大型船 $gameMap.ship().setDirection(2);
 飛行船 $gameMap.airship().setDirection(2);
 下に向けるなら2、上なら8、左なら4、右なら6

・スクリプトでSEの音量を調節(参考/ツクマテ投稿記事
◆変数の操作:#0001 SE音量 = AudioManager.seVolume(変更前の音量を取得)
◆スクリプト:ConfigManager['seVolume'] = 100;//音量を変更
◆SEの演奏:Absorb2 (90, 100, 0)
◆スクリプト:ConfigManager['seVolume'] = $gameVariables.value(1);//音量を戻す

・プレイヤーが直接入力することなく決定、キャンセルキーを入力(参考/ツクマテ投稿記事
  ◆キャンセルキーを押して離した
  スクリプト「Input._currentState['escape'] = true;」
  イベントコマンド「ウェイト(1)」
  スクリプト「Input._currentState['escape'] = false;」

 イベント例
 プレイヤーの左にこの作成したイベントがいたとして、決定ボタンを押すと
 プレイヤーは下を向き正面にいるイベントに話しかける。
 ◆移動ルートの設定:プレイヤー (ウェイト)
 :        :◇下を向く
 ◆スクリプト:Input._currentState['ok'] = true;
 ◆ウェイト:1フレーム
 ◆スクリプト:Input._currentState['ok'] = false;

 使用できるキーは、rpg_core.jsにある
 2996行目キーボードと3030行目ゲームパッドの定義

指定したSEだけ停止する(参考/ツクマテ投稿記事

例「Applause1」のみ演奏停止したい場合
コード: 全て選択
var seName = 'Applause1';
AudioManager._seBuffers.forEach(function(buffer) {
    if(buffer._url.match('/' + seName + '.')) {
        buffer.stop();
    }
});
AudioManager._seBuffers = AudioManager._seBuffers.filter(function(audio) {
    return audio.isPlaying();
});
スマホを振動させる(参考/ツクマテ投稿記事

 navigator.vibrate(2000);
 ※単位はミリ秒

マップ名の変更(参考/ツクマテ投稿記事

 変更 $dataMap.displayName = 'マップ名'
 表示 SceneManager._scene._mapNameWindow.open();
 ※情報はセーブされない、マップを移動する度リセットされる。

ダッシュの許可と禁止(参考/ツクマテ投稿記事

 許可 $dataMap.disableDashing = true;
 禁止 $dataMap.disableDashing = false;
 ※情報はセーブされない、マップを移動する度リセットされる。

戦闘イベント中にステータスウインドウを更新(参考/ツクマテ投稿記事

 SceneManager._scene.refreshStatus

フォロワーにアニメ表示(参考/ツクマテ投稿記事

 $gamePlayer.followers().follower(index).requestAnimation(id);
 indexには「フォロワーのindex」を、idにはアニメーションIDを記入

フォロワーに噴出し表示(参考/ツクマテ投稿記事
 $gamePlayer.followers().follower(n).requestBalloon(m);
 n:フォロワー番号(パーティの2番目が0、3番目が1...)、m:バルーンID

連続する変数に連番をランダムに代入(参考/ツクマテ投稿記事

var i1 = 1;     // 変数番号の最初
var i2 = 10;    // 変数番号の最後
var v1 = 1;     // 連番の開始値
var v2 = 10;    // 連番の終了値
var value = Array.apply(null,Array(v2-v1+1)).map(function(v,i){return i+v1});
for(var i=i1;i<=i2;i++){
  var v = value.splice(Math.randomInt(value.length),1)[0];
  $gameVariables.setValue(i,v);
}

プラグインで作成されたウインドウも含め画面を真っ暗に(参考/ツクマテ投稿記事

SceneManager._scene.alpha = 0;

ステータス表示を更新する(参考/ツクマテ投稿記事
SceneManager._scene._statusWindow.refresh();

同じマップの別のイベントの内容を実行(参考/公式tweet
this.character(イベントID).start();

タイマーを進める(参考/roshさんのブログ

var time = $gameTimer.seconds()*60 - 数値 ;

$gameTimer.start(time);


ピクチャーを全消し(参考/こまさん
$gameScreen.clearPictures();


イベントコマンド「条件分岐」で使える条件スクリプト


 決定キーが押された瞬間 Input.isTriggered('ok')
 (okの部分をcancel,up, down, left, right, pageup, pagedownなどに置き換え可)
マウス入力の判定(参考/ツクマテ投稿記事

 左クリック TouchInput.isTriggered();
 右クリック TouchInput.isCancelled();

今戦闘中かどうか(尾島様)

 $gameParty.inBattle()

逃走/敗北可能か(参考/ツクマテ投稿記事

 BattleManager.canEscape()
 //逃走可能
 BattleManager.canLose()
 //敗北可能

スキルが使える状態にあるか(参考/ツクマテ投稿記事

 $gameParty.members()[X].canUse($dataSkills[index])
 //indexはスキルID

他のイベントが起動中か(参考/ツクマテ投稿記事

 $gameMap.isEventRunning()
 
プレイヤーとイベントの当たり判定(参考/ツクマテ投稿記事

 this.character(0).x == this.character(-1).x && this.character(0).y == this.character(-1).y

キャラクターが移動中かどうかを判定(参考/ツクマテ投稿記事

 this.character(id).isMoving()

 移動中ならtrue、停止中ならfalse。
 idに-1でプレイヤー、0でイベント自身、1以上で対応するイベントID。
 停止中かどうかを判定する場合は、以下。

 this.character(id).isStopping()

イベントのメモ欄の文章を判定(参考/ツクマテ投稿記事

 ■イベント3番のメモ欄に あいうえお と書かれてあるかどうかを判定
 $gameMap.event(3).event().note === 'あいうえお'

 ■イベント3番のメモ欄に書かれている文章の中に あいうえお が含まれているかどうかを判定
 $gameMap.event(3).event().note.match(/あいうえお/)

 ■イベント3番のメモ欄に <ABCD> と書かれているかどうかを判定
 $gameMap.event(3).event().meta['ABCD']

 ■イベント3番のメモ欄に <ABCD:1> と書かれているかどうかを判定
 $gameMap.event(3).event().meta['ABCD'] === '1'

複数の変数を比べる(参考/ツクマテ投稿記事

◆変数#0001~#0004のいずれかが0より大きかったらOK
[1,2,3,4].some(function(id){return $gameVariables.value(id) > 0});

◆変数#0001~#0004のすべてが0より大きかったらOK
[1,2,3,4].every(function(id){return $gameVariables.value(id) > 0});

◆スイッチ#0001~#0004の全てがONならOK
[1,2,3,4].every(function(id){return $gameSwitches.value(id) > 0});

変数1が3から44の間の値のとき(参考/ツクマテ投稿記事

 3 <=$game_variables[1] &&  $game_variables[1] <=44

メッセージが表示中か(参考/ツクマテ投稿記事

$gameMessage.isBusy()

セーブデータがあるか(参考/ツクマテ投稿記事

 DataManager.isAnySavefileExists();

セーブデータ1があるか(参考/ツクマテ投稿記事

 DataManager.isThisGameFile(1);

今いるマップのメモ欄に○○という言葉が含まれているならば(参考/ツクマテ投稿記事
 !!$dataMap.note.match('○○')

今話しかけている(起動中の)イベントのメモ欄に○○という言葉が含まれているならば(参考/ツクマテ投稿記事
 !!this.character(0).event().note.match('○○')


変数1の中に特定のワードAAAが入っているか(参考/ツクマテ投稿記事

$gameVariables.value(1).indexOf('AAA') >= 0

指定番号のピクチャの存在判定(参考/トリアコンタン様)

$gameScreen.picture(1)




イベントコマンド「変数の操作」で使える情報取得スクリプト

日時の取得(尾島様)

 年   new Date().getFullYear()
 月  new Date().getMonth() + 1
 日   new Date().getDate()
 曜日   new Date().getDay()
 時   new Date().getHours()
 分   new Date().getMinutes()
 秒   new Date().getSeconds()

 曜日も数値で取得されるので、数字から文字列に変更して下さい。
 0なら日、1なら月、3なら火・・・

マウスの位置を取得(ニナと鍵守の勇者ミニゲームより)

 画面X座標 TouchInput.x
 画面Y座標 TouchInput.y
 指定位置の情報を取得するために
 マス目を割り出すには、取得した数値を48で除算。

パーティのアクターIDの取得(参考/ツクマテ投稿記事

 $gameParty.members()[i].actorId();

 「i」並び順(0~)
 エネミーのIDを取得する場合は、以下。

 $gameTroop.members()[i]._enemyId

敵グループに勝利した時の合計金額(参考/ツクマテ投稿記事

 $gameTroop.goldTotal();
 敵グループに勝利した後イベントで代入

パーティ先頭キャラの武器タイプ1にセットされている装備名を取得(参考/ツクマテ投稿記事

 $gameParty.members()[0].equips()[0].name

パーティ先頭キャラの1番目のステート名を取得(参考/ツクマテ投稿記事

 $gameParty.members()[0].states()[0].name

パーティ先頭キャラの職業を取得(参考/フォーラム投稿記事

 $gameParty.members()[0].currentClass().name

BGMを取得(参考/ツクマテ投稿記事

 AudioManager.saveBgm();

 保存したBGMを再生(コマンド「スクリプト」)
 AudioManager.replayBgm($gameVariables.value(n));
 n:保存した変数番号

装備品のIDを取得(参考/ツクマテ投稿記事

 $gameActors.actor(n)._equips[n2-1]._itemId
 nをアクターのID、n2を装備スロットの上から数えた順番

パーティ内戦闘不能人数取得(参考/ツクマテ投稿記事

 $gameParty.deadMembers().length

アクター名の文字数取得(参考/ツクマテ投稿記事

 $gameActors.actor(1) ? $gameActors.actor(1).name().length : 0

移動速度を取得(参考/ツクマテ投稿記事

 $gameVariables.setValue(1,$gamePlayer.realMoveSpeed());

<stone>とメモ欄に書いてあるアイテムの合計所持数を取得(参考/ツクマテ投稿記事

 $gameParty.items().reduce(function(a,c){return a+(c&&c.meta['stone']&&$gameParty.numItems(c)||0)},0)





ダメージ計算式基礎知識

最低でも1のダメージを与える(参考/初心者講座

 Math.max(m,1)

 mにダメージ計算式を入れる

1から a.atk * 4 までの間でランダムにダメージを与える(参考/初心者講座
 (a.atk * 4) * Math.random() + 1

動ける仲間の数を基本ダメージに(参考/初心者講座

 100 * $gameParty.movableMembers().length

残りHPが20%以下になると、威力が2倍になる(参考/ツクマテ投稿記事

 a.atk * 4 *(a.hp <= a.mhp / 5 ? 2 : 1) - b.def * 2

防御している敵には通常の2倍のダメージを与え、それ以外は通常のダメージを与える
 (参考/ツクマテ投稿記事

 a.atk * (b.isGuard() ? 4 * b.grd : 1)

敵が12番(眠り)ステートの場合ダメージが100、それ以外は1(参考/ツクマテ投稿記事

 b.isStateAffected(12) ? 100 : 1

敵が3番目のステートにかかってたら威力が2倍に、それ以外は通常の威力(参考/ツクマテ投稿記事

 a.mat * (b.isStateAffected(3) ? 2 : 1)

毒、暗闇、沈黙の場合ダメージが10000加算(参考/ツクマテ投稿記事

 a.atk * 4 - b.def * 2 + (b.isStateAffected(4) || b.isStateAffected(5) || b.isStateAffected(6) ? 10000 : 0)

毒、暗闇、沈黙の場合ダメージが2倍(参考/ツクマテ投稿記事

 (a.atk * 4 - b.def * 2) * (b.isStateAffected(4) || b.isStateAffected(5) || b.isStateAffected(6) ? 2 : 1)

敵が4番(毒)のステートでなければ毒を付加、それ以外は14番(猛毒)のステートに変更(参考/ツクマテ投稿記事

 b.isStateAffected(4) ? b.removeState(4)||b.addState(14)||0 : b.addState(4)||0

敵を決して倒すことが出来ない「みねうち」(参考/ツクマテ投稿記事

 Math.min(元々の計算式 , b.hp - 1)

相手のHPを1にする(参考/ツクマテ投稿記事

 b.hp - 1

攻撃系スキル使用時、使用者にステートを付与(参考/RPGツクールMVwiki

 a.addState(ステート番号);攻撃系スキルの計算式

 例)防御しながら通常攻撃 a.addState(2);a.atk * 4 - b.def * 2

指定IDのアクターがいれば対象に40ダメージ(参考/ツクマテ投稿記事

 $gameParty.members().contains($gameActors.actor(id)) ? 40 : 10

敵HPの下一桁が0か偶数か奇数かによってダメージをそれぞれ、0、100、5000に(参考/ツクマテ投稿記事

 if(a.hp % 10 == 0){0} else if(a.hp % 2 == 0){100} else {5000}

indexの大きいバトラーほどダメージが大きい(参考/ツクマテ投稿記事

 10 * (b.index() + 1)

クリティカル時のダメージを変更する(参考/ツクマテ投稿記事

 b.result().critical ? クリティカル時の計算式 : 通常の計算式

 ※クリティカル時の3倍ダメージ効果は適用されてしまうので、それを考えた上で式を作る

素手のダメージ(参考/ツクマテ投稿記事

 a.paramBase(2)*a.paramRate(2) * a.paramBuffRate(2)

スキルの使用者が敵か味方かで効果を分ける(参考/ツクマテ投稿記事

 BattleManager._action._subjectActorId != 0 ? (味方の場合の計算式) :(敵の場合の計算式)

攻撃と同時にmpを回復する(参考/ツクマテ投稿記事

 a.gainMp(回復値); a.atk * 4 - b.def * 2

敵からの攻撃がまずMPにダメージがいき、それが0になったら、HPの方へダメージがいく
 (参考/ツクマテ投稿記事

 if (300 > b.mp){ b.gainHp(b.mp - 300); 300;} else{300};

弱化ステート(例えば毒や麻痺など)の数に応じて威力が上昇するスキル
 (参考/ツクマテ投稿記事

 1. スキル専用の属性を一つ作成する
 2. スキルの計算式を a.atk * ((b.elementRate(x)) と設定
  →xは設定した属性IDを入れる(a.atkは例えなので、100のような固定値でもOK)。
 3. 弱化ステートの特徴に「属性x有効度〇%」を持たせる

・「このイベント」に当たるイベントを途中で別イベントに差し替え(参考/卑弥呼テクニック

 this._eventId = 別イベントのID

移動ルートに使えるスクリプト

アニメーション再生(参考/卑弥呼テクニック
 this.requestAnimation(アニメーションID);

指定したIDのイベントに近づく(参考:くらむぼん様)

 1番のイベントに一歩近づく this.moveTowardCharacter($gameMap.event(1))
 1番のイベントから一歩遠ざかる this.moveAwayFromCharacter($gameMap.event(1))
 1番のイベントの方を向く this.turnTowardCharacter($gameMap.event(1))
 1番のイベントの逆を向く this.turnAwayFromCharacter($gameMap.event(1))
 座標(変数1番,変数2番)に向かって歩く
  this.moveTowardCharacter({x: $gameVariables.value(1), y: $gameVariables.value(2)})

最短ルートで指定の場所へ移動する
 this.moveStraight(this.findDirectionTo(x,y))(参考/ツクマテ投稿記事

 this.moveTowardCharacter({x: x座標, y: y座標})(参考/ツクール公式

プレイヤーを追いかけてくる(参考/ムノクラさん)

 this.moveStraight(this.findDirectionTo($gamePlayer.x,$gamePlayer.y));

指定した座標にジャンプ(参考/ツクマテ投稿記事

 this.jump(10 - this.x, 20 - this.y)

歩行グラのアニメパターンを指定(参考/公式フォーラム
  (this._direction の値は 2の時は↓、4の時は←、6の時は→、8の時は↑)

 this._direction = 6; this._pattern = 1;

画像インデックスのみの指定(参考/ツクマテ投稿記事

 this._characterIndex = 1;

「このイベント」のセルフスイッチを操作(参考/kurauさん)

 $gameSelfSwitches.setValue([this._mapId, this._eventId , "A or B or C or D"], true or false);

「このイベント」の方向をむく(参考/砂川赳さん)

 this.turnTowardCharacter($gameMap.event($gameMap._interpreter._eventId))

表示位置をずらす(参考/あんばたー17号さん)

 this._x += 0.1

イベントが自分のIDより1つ若いイベントを追いかける(参考/ツクマテ投稿記事

const e = $gameMap.event(this._eventId - 1); if (!e.isMoving()) this.moveTowardCharacter(e)

※追尾させるイベントはすり抜けにチェックを入れる

小技
プレイヤーとイベントの距離判定(参考/ツクマテ投稿記事

var interpreter = this;
isInRange = function( chara1Id, chara2Id, range ) {
    var chara1X = interpreter.character( chara1Id ).x;
    var chara1Y = interpreter.character( chara1Id ).y;
    var chara2X = interpreter.character( chara2Id ).x;
    var chara2Y = interpreter.character( chara2Id ).y;
    return ( chara2X - range <= chara1X ) 
        && ( chara2X + range >= chara1X ) 
        && ( chara2Y - range <= chara1Y ) 
        && ( chara2Y + range >= chara1Y );
};
条件分岐にてisInRangeに下記引数を指定して実行します。
引数1:チェック対象1のイベントID
引数2:チェック対象2のイベントID
引数3:チェック範囲距離(3×3の場合は3、5×5の場合は5を指定する。)
※チェック対象にプレイヤーを指定する場合は、チェック対象1のイベントIDに-1を指定してください。

戦闘中イベントで与えたダメージをポップアップ表示(参考/ツクマテ投稿記事

//味方にポップアップ表示

this.iterateActorIndex(-1, function(Actor) {

Actor.startDamagePopup();

}.bind(this));

//敵にポップアップ表示

this.iterateEnemyIndex(-1, function(enemy) {

enemy.startDamagePopup();

}.bind(this));

拍手[17回]

PR
この記事にコメントする
name
title
color
mail
URL
comment
pass   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
secret (チェックを入れると管理人だけに表示できます)
広告枠
アクセス解析

ATOM  
ATOM 
RSS  
RSS 


ソフトウェア制作講座





Copyright ©   YUWAKA'S SOFT   All Rights Reserved
Design by MMIT / TemplateB3  Powered by NINJA TOOLS
忍者ブログ [PR]