メインコンテンツへスキップ
  1. SOroom/

ティラノでセーブデータごとのプレイ時間を記録する実験

ゲ制 ティラノスクリプト
目次

実験 #

実験です。バグる可能性あります。バグりそうな部分あったらご指摘いただけますと嬉しいです。

使用バージョン #

ティラノスクリプトV5です。やり方的にはV4でもできるはず。

方法 #

  1. プレイ開始時の現在ミリ秒を取得して保存しておく。
  2. セーブ時に、その時点での現在ミリ秒と、プレイ開始時のミリ秒の差分をプレイミリ秒として保存する。その際現在ミリ秒は更新しておく。
  3. ミリ秒を時分秒に変換してゲーム変数に入れて、save.html、load.htmlに表示できるようdataに投げる。
  4. 以後セーブの度にセーブ時の現在ミリ秒と保存ミリ秒との差分を、保存ミリ秒に追加していくことを繰り返す。

Date.now()を使うので、正確な値とズレる可能性はアリ。

使うもの #

ゲーム変数3つ。

  1. 現在時刻をミリ秒で保存しておくやつ f.now_timeとか
    • 正しい英語はCurrent timeらしいです
  2. プレイミリ秒を保存しておくやつ f.play_msとか
  3. プレイ時間を表示するためのやつ 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かなんかで調整する。

以上 #

でできる気がします。