LR2でローカルライバルを表示させる方法について

LR2で複数プレイヤーがプレイしていて、そのプレイヤー間でスコア比較ができないかやってみた。

・LR2IRは使わない
・スコアの参照元はLR2files\Database\Score内の各スコア

LR2IRでライバルを表示させる時にLR2files\Rival内にライバルスコアが取得されているが、このDBのテーブル構成を真似てデータを作成してみたらとりあえず成功。
ただどう使ってるか分からなくて無視した箇所がいくつか。


手順としては、LR2files\Database\Score内の各スコアDBのscoreテーブルからカラム名を合わせながら必要なデータのテーブルを作成する。
具体的にはこう

sqlite_rival.query

CREATE TABLE rival as SELECT
	hash,
	clear as r_clear,
	totalnotes as r_totalnotes,
	maxcombo as r_maxcombo,
	perfect as r_perfect,
	great as r_great,
	good as r_good,
	bad as r_bad,
	poor as r_poor,
	minbp as r_minbp,
	0 as r_option,	/* 参照元がわからない */
	strftime('%s', 'now') as r_lastupdate /* 日付はとりあえず今にしておく */
FROM score;

drop table player;
drop table score;

r_optionに何が入ってるのか分からなかったのだが、いくつか覗いてみたデータではすべて0だったのでとりあえず0を入れた。*1
これでrivalテーブルが作成されるので、元からあったplayerテーブルとscoreテーブルを削除すれば完成。

後は適当にlr2folderを作成して読み込めばとりあえず表示される。
動作に問題があるかもしれないが、無理やり動かしてるので勘弁してほしい。仕様も知らないし。

lr2folderの#MAXTRACKSにはどうやらLR2IDが入るようなのだが、これはLR2IRを通してないデータなのでIDが存在しない。
特にチェックとかされてるわけではないようなので、適当な数値を入れておこう。
起動画面では6桁ほど見えているので6桁ギリギリの数値を入れておけば重複する可能性は低いかもしれない。(テスト作成したIDが70805だったのでまず重複しないだろう)
.dbファイルの名前をMAXTRACKSに入力したIDと同じにして、Rivalフォルダに投げ入れておくのを忘れないように。

あと当然だがこれは作成時のスコアのコピーなので、ライバルがスコアを更新したら再度作り直す必要がある。
一連の作業を行うバッチファイルでも書いておけばいいと思う。

rival.bat

@echo off

rem //LR2のスコアデータをライバルデータに変換します。

rem //フォルダパスを変数に格納

setlocal enabledelayedexpansion 

set dbfolder=LR2files\Database\Score\
set rival=LR2files\Rival\

rem //LR2IDが6桁あるようなので(?)ケツの方を使う
set no=999900

rem //このバッチが存在するフォルダをカレントに

pushd %0\..
cls

for %%A IN (%dbfolder%*.db) do (

	rem //ゴリ押しでLR2folderを作る
	copy /y %%A %rival%!no!.db
	sqlite3.exe %rival%!no!.db < sqlite_rival.query

	echo #COMMAND __RIVAL__> %%~nA.lr2folder
	echo #MAXTRACKS !no!>> %%~nA.lr2folder
	echo #CATEGORY ライバルフォルダ>> %%~nA.lr2folder
	echo #TITLE %%~nA>> %%~nA.lr2folder
	echo #INFORMATION_A>> %%~nA.lr2folder
	echo #INFORMATION_B>> %%~nA.lr2folder
	
	set /a no=no+1
)

exit

こんな感じに。

試すにしてもデータはバックアップを取った上で自己責任でお願いします。

*1:playerテーブルにoptionというカラムがあったが、これか? 結局何が入ってるのかは分からないが

広告を非表示にする