1
0

More than 1 year has passed since last update.

RPGツクールMVの任意スクリプト実行の準備を自動化してみた

Last updated at Posted at 2021-12-26

以前、RPGツクールMVで使える自作スクリプト集を公開しましたが、
イチイチ各ゲームのHTMLファイルを編集するのは面倒だなと思って、
node.jsを用いてHTML編集を自動化しました。

さらに、nodeコマンドを毎回入力することさえも面倒なので
バッチファイルで簡単に自作スクリプトを差し込めるようにしました。

使用に必要なもの

node.js と cheerio が必要です。

cheerioはバッチファイル内でローカルインストールしますが、
何かうまくいかなかったらグローバルインストールしてみてください。

npm install -g cheerio

(windows環境でグローバルライブラリを読み込む方法がよくわからなかったのでローカルインストールしてます)

動作確認環境

  • Windows 10 Home Edition
  • node.js 12.14.0
  • npm 6.13.4
  • cheerio 1.0.0-rc.10

ダウンロード

使い方

上記リンク先に置いてある以下3点のファイルをダウンロードし、
RPGツクールMVのゲームフォルダ直下に置きます。

  • mvScriptAppender.bat -> バッチファイル。これしか使いません
  • mvScriptAppender.js -> index.htmlを上書きするスクリプト。node.js(javascript+cheerio)で作成
  • mvCustomScript.html -> 自作のRPGツクールMV用スクリプト。詳しくはこちら -> RPGツクールMVで使える自作スクリプト集

よくあるゲームフォルダ構成ならば、
以下のように Game.exe が置いてあるフォルダに置きます

また、書き込む index.html ファイルがどこにあるかを確認します。
多くのゲームは、 ./www/index.html にあります。
たまに、 ゲームフォルダ直下の ./index.html にある場合もあります

Game_boxed.exe のような形でパッケージ化されており、
index.html が見当たらないゲームもあります。
それはどうしようもないので諦めてください。
(エニグマなんとかを使ってゴニョゴニョすればなんとかなりますが、本稿と関係ない話なので割愛)

スクリーンショット 2021-12-26 191309.png

mvScriptAppender.bat をダブルクリックして実行します

スクリーンショット 2021-12-26 191410.png

任意スクリプトを書き込む index.html の置いてあるディレクトリを指定します。
何も入力せずにEnterキーを押すと、デフォルト指定の ./www/index.html に書き込みます
. を入力してEnterキーを押せば、./index.html に書き込みます
./www を入力してEnterキーを押すことでも、 ./www/index.html に書き込みます

スクリーンショット 2021-12-26 192601.png

ゲームフォルダ直下に cheerio ライブラリをローカルインストールした後、
./mvScriptAppender.js を実行して、
./mvCustomScript.html に書いてある自作スクリプトを読み込み、
./www/index.html の bodyタグ内の末尾にスクリプトを追記します。

あとは自作スクリプトのソースコードに書いてある通りで、ゲーム内でAlt+Iキーだとか、Alt+Jキーを押すとかで私の自作スクリプトが実行されます。

使用上の注意

  • バッチファイルの使用中は書き込むファイルを別のアプリケーションで開かないでください

ファイルに書き込めないため

  • バッチファイルの使用は原則、1ゲームにつき1度だけにしてください。

書き込む前の index.html の内容は保存していません。
バッチファイルを実行するたびにbodyタグ末尾にスクリプトが追記されていきます
やり直したい時は ゲームフォルダ直下に作られる node_modulesフォルダを削除し、
www/index.html に追記されたスクリプトを削除して上書き保存した後、バッチファイルを再実行してください

ソースコードの解説

mvScriptAppender.js
/**
 * RPG Tkool MV Custom Script Appender
 * Requires to use this with node.js, cheerio
 *
 * [USAGE]
 * $ node mvScriptAppender.js [OPTION]{fileDir}
 * $ node mvScriptAppender.js        -> it outputs html to "./www/index.html"
 * $ node mvScriptAppender.js .      -> it outputs html to "./index.html"
 * $ node mvScriptAppender.js ./www/ -> it outputs html to "./www/index.html"
 *
 * @author @qwe001
 * @since 2021.12.25
 */

const fileDir = process.argv[2] || "./www";

const fs = require('fs');
const cheerio = require('cheerio');

const filePath = fileDir + '/index.html'; // e.g. "./www/index.html" or "./index.html"

let html;

try {
  html = fs.readFileSync(filePath);
}
catch(err){
  if(err.code === 'ENOENT'){
    console.log('File not found. filePath:' + filePath);
    return false;
  }
  else {
    throw err;
  }
}
const $1 = cheerio.load(html);

const myHtmlPath = './mvCustomScript.html'
const myHtml = fs.readFileSync(myHtmlPath);
const $2 = cheerio.load(myHtml);

const addHtml = '<script>' + $2('script').html() + '</script>';

$1('body').append(addHtml);

const result = $1.html();

// execute overwrite index.html file
fs.writeFile(filePath, result, (err) => {
  if (err) throw err;
  console.log('overwrite index.html successfully.');
});

fs ライブラリを使ってHTMLファイルを読み込み、cheerio ライブラリを使って文字列化。
あとは cheerio ライブラリで jquery ライクな書き方が出来るので、
index.html 内の body タグの末尾に自作スクリプトをアペンドし、
fs ライブラリで index.html に上書き保存します

mvScriptAppender.bat
@echo off
cd /d %~dp0

set NODE_FILE_NAME=mvScriptAppender.js

echo %NODE_FILE_NAME%を実行します。

set /P USER_INPUT_ARGV="HTMLファイルを上書きするディレクトリを指定してください(デフォルト ./www ) :"

if "%USER_INPUT_ARGV%" equ "" set "USER_INPUT_ARGV=./www"

call npm install cheerio

node %NODE_FILE_NAME% %USER_INPUT_ARGV%

echo.
echo %NODE_FILE_NAME%の実行が完了しました。
pause

単純化すると、以下2点のコマンドを実行してるだけです

npm install cheerio
node mvScriptAppender.js ./www

cheerio ライブラリをローカルインストールしているのは、
グローバルライブラリから呼び出す方法がわからなかったためです。

NODE_PATHの変数追記とかもしましたがうまくいかず。。

ローカルインストールしなくて済めば、
オリジナルのゲームフォルダをあまり汚染しなくて済むんですけどねえ

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0