以前、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
が見当たらないゲームもあります。
それはどうしようもないので諦めてください。
(エニグマなんとかを使ってゴニョゴニョすればなんとかなりますが、本稿と関係ない話なので割愛)
mvScriptAppender.bat
をダブルクリックして実行します
任意スクリプトを書き込む index.html
の置いてあるディレクトリを指定します。
何も入力せずにEnterキーを押すと、デフォルト指定の ./www/index.html
に書き込みます
.
を入力してEnterキーを押せば、./index.html
に書き込みます
./www
を入力してEnterキーを押すことでも、 ./www/index.html
に書き込みます
ゲームフォルダ直下に cheerio
ライブラリをローカルインストールした後、
./mvScriptAppender.js
を実行して、
./mvCustomScript.html
に書いてある自作スクリプトを読み込み、
./www/index.html
の bodyタグ内の末尾にスクリプトを追記します。
あとは自作スクリプトのソースコードに書いてある通りで、ゲーム内でAlt+Iキーだとか、Alt+Jキーを押すとかで私の自作スクリプトが実行されます。
使用上の注意
- バッチファイルの使用中は書き込むファイルを別のアプリケーションで開かないでください
ファイルに書き込めないため
- バッチファイルの使用は原則、1ゲームにつき1度だけにしてください。
書き込む前の index.html
の内容は保存していません。
バッチファイルを実行するたびにbodyタグ末尾にスクリプトが追記されていきます
やり直したい時は ゲームフォルダ直下に作られる node_modulesフォルダを削除し、
www/index.html
に追記されたスクリプトを削除して上書き保存した後、バッチファイルを再実行してください
ソースコードの解説
/**
* 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
に上書き保存します
@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の変数追記とかもしましたがうまくいかず。。
ローカルインストールしなくて済めば、
オリジナルのゲームフォルダをあまり汚染しなくて済むんですけどねえ