ティラノでセーブデータごとのプレイ時間を記録する実験
ゲ制
ティラノスクリプト
目次
実験 #
実験です。バグる可能性あります。バグりそうな部分あったらご指摘いただけますと嬉しいです。
使用バージョン #
ティラノスクリプトV5です。やり方的にはV4でもできるはず。
方法 #
- プレイ開始時の現在ミリ秒を取得して保存しておく。
- セーブ時に、その時点での現在ミリ秒と、プレイ開始時のミリ秒の差分をプレイミリ秒として保存する。その際現在ミリ秒は更新しておく。
- ミリ秒を時分秒に変換してゲーム変数に入れて、save.html、load.htmlに表示できるようdataに投げる。
- 以後セーブの度にセーブ時の現在ミリ秒と保存ミリ秒との差分を、保存ミリ秒に追加していくことを繰り返す。
Date.now()を使うので、正確な値とズレる可能性はアリ。
使うもの #
ゲーム変数3つ。
- 現在時刻をミリ秒で保存しておくやつ f.now_timeとか
- 正しい英語はCurrent timeらしいです
- プレイミリ秒を保存しておくやつ f.play_msとか
- プレイ時間を表示するためのやつ f.play_timeとか
初期値は全部0でOK。初期値入れなくてもまあ何とかなる。
改造するもの #
メニューのdoSave関数、セーブ・ロードのHTML。
シナリオファイル上でやること #
- ゲームスタート(はじめからを選択)直後、f.now_timeにDate.now()で現在ミリ秒を入れる。
- make.ksにも入れる。ロード時に必要なので。ロード改造してたらそこで入れてもおk。
- evalタグでもできるんじゃないかと思う。
スタート直後、make.ks #
[iscript]
f.now_time=Date.now();
[endscript]
改造 #
表示する時はミリ秒を時分秒に変換しないといけないので、以下を参考に。というかそのまま使わせてもらう。
tyrano.plugin.kag.menu.doSave #
//【改造:追加】
//★現在ミリ秒
var ed = Date.now();
//★起動後かロード後からのプレイ時間秒数
var tm = ed - that.kag.stat.f.now_time;
//★プレイミリ秒が定義されてなければそのまま代入、定義済なら加算する
if (that.kag.stat.f.play_ms === undefined) {
that.kag.stat.f.play_ms = tm;
} else {
that.kag.stat.f.play_ms += tm;
that.kag.stat.f.now_time = Date.now();
}
//★時刻計算
var h = String(Math.floor(that.kag.stat.f.play_ms / 3600000) + 100).substring(
1
);
var m = String(
Math.floor((that.kag.stat.f.play_ms - h * 3600000) / 60000) + 100
).substring(1);
var s = String(
Math.round((that.kag.stat.f.play_ms - h * 3600000 - m * 60000) / 1000) + 100
).substring(1);
that.kag.stat.f.play_time = h + ":" + m + ":" + s;
//【改造:追加ここまで】
if (this.snap == null) {
this.snapSave(this.kag.stat.current_save_str, function () {
data = that.snap;
//【改造:追加】
//★セーブ・ロード画面に表示するためのプレイ時間を保存
data.play_time = that.kag.stat.f.play_time;
//【改造:追加ここまで】
data.save_date = $.getNowDate() + " " + $.getNowTime();
array_save.data[num] = data;
元々はsnapSaveも改造してたのですが、こちらの記事でdoSaveだけで済むじゃないか!と節約できました。ありがたや。
save.html,load.html #
<span class="save_list_item_area">
<span class="save_list_item_date">{{:save_date}}</span>
{{:play_time}}
<span class="save_list_item_text">{{:title}}</span>
</span>
play_timeをねじこむ。表示が乱れるので適当にCSSかなんかで調整する。
以上 #
でできる気がします。