ゆっくりスクリプト

MHFのチャットをSoftalkに読み上げさせるスクリプトです。WSHスクリプトで作ってみたらあっさりできたので公開します。自分の環境や好みに合わせ修正して使用してください。あくまで自己責任でよろしくお願いします。You BAN
YukkuriMhf.bat
YukkuriMhf.js

YukkuriMhf.bat

cscript YukkuriMhf.js //nologo

単なる起動用のスクリプトです。ダブルクリックでコマンドプロンプトが表示され、YukkuriMhf.jsが実行されます。MHFを起動し、対象のチャットログファイルが作成されてから実行してください。チャットログファイルは適当にチャット出力すれば作成されます。プロンプトを閉じれば終了です。

YukkuriMhf.js

var shell = WScript.CreateObject("WScript.Shell");
var fso = WScript.CreateObject("Scripting.FileSystemObject");
var folder = fso.GetFolder("C:\\Program Files\\CAPCOM\\Monster Hunter Frontier Online\\チャットログ");
var file = getLatestFile(folder);
WScript.Echo(file.Name);
var stream = file.OpenAsTextStream(1);


var Log = function(){
	this.id = "";
	this.type = "";
	this.message = "";

	this.setId = function( line ){
		var value = line.match(/【ID:(\w{6}).+\((\w{1})\)】/);
		if( value != null ){
			this.id = value[1];
			this.type = value[2];
			return true;
		}
		return false;
	}

	this.setMessage = function( line ){
		var index = line.indexOf(" > ") + 3;
		if( index != -1 ){
			this.message = line.substr(index);
			return true;
		}
		return false;
	}

	this.getVoice = function(){
		return parseInt(this.id.charAt(0), 36) % 8;
	}

	this.getSpeed = function(){
		var mark = parseInt(this.id.charAt(1), 36) % 2;
		var speed = 0;

		speed += parseInt(this.id.charAt(2), 36);
		speed += parseInt(this.id.charAt(3), 36);
		speed += parseInt(this.id.charAt(4), 36);
		speed += parseInt(this.id.charAt(5), 36);
		speed %= 40;
		if( mark == 0 ){
			speed *= -1;
		}

		return 120 + speed;
	}

	this.speak = function(){
		if( "FPG".indexOf(this.type) == -1 ){
			return;
		}

		var cmd = "\"C:\\Program Files\\softalk\\SofTalk.exe\"";
		cmd += " /T:" + this.getVoice();
		cmd += " /S:" + this.getSpeed();
		cmd += " /V:25";
		cmd += " /W:" + this.message;
		shell.Run(cmd, 0, false);
	}
}

stream.ReadAll();
var log = null;
while( true ){
	if( stream.AtEndOfStream ){
		WScript.Sleep(100);
		continue;
	}

	var line = stream.ReadLine();
	if( line.replace(" ","").length != 0 ){
		if( log == null ){
			log = new Log();
			if( !log.setId(line) ){
				log = null;
			}
		}else if( log != null ){
			if( log.setMessage(line) ){
				log.speak();
				log = null;
			}
		}
	}
}


function getLatestFile( folder ){
	var files = new Enumerator(folder.Files);
	var file = null;
	var time = 0;

	for( ; !files.atEnd() ; files.moveNext() ){
		var tmpFile = files.item();
		var tmpTime = tmpFile.DateLastModified;

		if( time < tmpTime ){
			time = tmpTime;
			file = tmpFile;
		}
	}

	return file;
}

チャットログから新規チャットを取得し、Softalkに渡すスクリプトです。IDから声のタイプとスピードは算出し、幅がでるようにしています。全体チャットも含めるとうるさいので、ランドPT猟団チャットのみ出力しています。