#author("2023-11-22T17:30:12+09:00","default:post","post") *起動時のトークを前回からの期間に応じて変える [#v220760f] 「久しぶりに起動した時のトーク内容を変えたい」~ 「一週間以上間を空けて起動した時のトーク内容を変えたい」~ といったアクションをさせたい時のTIPS。~ 動作のテストをしたい時はPC内蔵時計の時刻を変更しましょう。 ---- #contents ---- ~ *基準となる時間を設定する [#zdacc966] 里々では起動していない間の時間を算出するための基準がないので、まずこの基準を作る所から始めましょう。~ 基準を作る方法は色々あるので、好みで選択してください。~ こうして得た基準値を、終了時に記録 → 次の起動時に差を計算することで経過日数を得ることができます。 **ユリウス日を使う方法 [#v844442c] -参考 --里々で年月日からユリウス日を計算するスクリプト https://umihotaru.hateblo.jp/entries/2010/12/20 --ぽな氏による修正版 https://ponapalt.hatenablog.com/entry/20140517/1400291141 @ユリウス日での経過日数 (calc, 365*(ユリウス日要素)+(ユリウス日要素)/4 +3059*((if,(A1)>2,-2,10)+(A1))/100 +(ユリウス日要素)/400 -(ユリウス日要素)/100 +(A2)+1721089) @ユリウス日要素 ((A0)-(if,(A1)>2,0,1)) *起動 $終了日からの経過日数=(call,ユリウス日での経過日数,(現在年),(現在月),(現在日))-(終了ユリウス日) >一年以上経ってから起動【タブ】(終了日からの経過日数)>=365 >一月以上経ってから起動【タブ】(終了日からの経過日数)>=30 :こんにちは。 *一月以上経ってから起動 :こんにちは、お久しぶりです。 *一年以上経ってから起動 :お久しぶりです。私の事覚えてます? *OnSatoriClose $終了ユリウス日【タブ】(call,ユリウス日での経過日数,(現在年),(現在月),(現在日)) #satori_conf.txtに存在する「*初期化」に1行追加 *初期化 $終了ユリウス日【タブ】(call,ユリウス日での経過日数,(現在年),(現在月),(現在日)) **フェアフィールドの公式を使う方法 [#c2c1bbe9] ユリウス日同様、正確な日数を算出出来ます。 -参考 --日数差を取得する https://earlduant.blog.fc2.com/blog-entry-357.html @グレゴリオ暦での経過日数 (calc, 365*(A0)+(A0)/4-(A0)/100+(A0)/400 +306*(calc,(A1)+1)/10+(A2)-428) *OnSatoriLoad $終了日からの経過日数=(call,グレゴリオ暦での経過日数,(現在年),(現在月),(現在日))-(終了日) *起動 >一年以上経ってから起動【タブ】(終了日からの経過日数)>=365 >一月以上経ってから起動【タブ】(終了日からの経過日数)>=30 :こんにちは。 *OnSatoriClose $終了日=(call,グレゴリオ暦での経過日数,(現在年),(現在月),(現在日)) #satori_conf.txtに存在する「*初期化」に1行追加 *初期化 $終了日=(call,グレゴリオ暦での経過日数,(現在年),(現在月),(現在日)) **SAORIを使う方法 [#w2efcb70] SAORIを使う方はこちら。 ***YAYAをSAORIとして使う [#jc65d5ef] [[SAORI/YAYA]]のページを参照。 ***華和梨をSAORIとして使う [#f8b50935] [[SAORI/華和梨]]のページを参照。 ***time_check.dllを使う [#u3c3e01b] 入手先 → [[梨野:http://www.junkyard.jp/nasino/index.shtml]]~ あらかじめ「saori」フォルダにtime_check.dllを入れ、satori_conf.txtの「@SAORI」項目に time_check,saori/time_check.dll の一行を追加しておいてください。 *起動 $終了から経過日数=(time_check、how_many_days、(終了年)、(終了月)、(終了日))*-1 >一年以上経ってから起動【タブ】(終了から経過日数)>=365 >一月以上経ってから起動【タブ】(終了から経過日数)>=30 :こんにちは。 *一月以上経ってから起動 :こんにちは。 (終了日からの経過日数)日ぶりですね。 *一年以上経ってから起動 $終了日からの経過年数=(終了日からの経過日数)/365 :(終了日からの経過年数)年ぶりですね。 私の事覚えてます? *OnSatoriClose $終了年【タブ】(現在年) $終了月【タブ】(現在月) $終了日【タブ】(現在日) 現在日から過去の日に向かって数えているためhow_many_daysで取得される数値の先頭に「-」が付いています。~ 「*」は掛け算、「/」は割り算。~ 「術師の隠れ里」さんの ユリウス日の計算スクリプト (ssu.dllのcalc使用)を使用しても同じ事ができます。 ~ **日数だけでなく時間単位、分単位で起動トークを分けたい [#b69dfdac] 上記の値は日数基準なので、&color(red){前回の終了から「30分以内に起動したとき」「6時間以内に起動したとき」};といったケースには対応できません。~ その場合は、この基準数値をもう少し分解していく必要があります。 理論上は基準値を24倍して(現在時)を足せば「時」が基準に、~ さらに60倍して(現在分)を足せば「分」に……といった風にはなります。~ しかし、実際には里々が扱える数値には限界があるため、''基準数値の元の数値が大きい場合は対応できません''。~ 上記の例では「ユリウス日」「グレゴリオ暦での経過日数」は現時点で前者は7桁、後者は6桁の数字を持っているので、里々の2,147,483,647~-2,147,483,648(=確実なのは9桁まで)に×24だの×60だのやっていればあっという間に限界を超えてしまいます。~ 確実に分単位まで比較したい場合、使いたい情報に応じて終了時の時分秒を別の変数に記録しておき、差を終了日からの経過日数に格納してから分単位に分解加算するという手もありますが、かなり複雑になるのであまりおすすめしません。~ ***基準値の整形 [#o3113b8c] 一つの解決策として、「ユリウス日での経過日数」「グレゴリオ暦での経過日数」の結果を里々で扱える範囲に落とし込む、という手段があります。~ 下記の例として前者は-2460000、後者は-738000してから時間と分の計算を行います。 @ユリウス日での経過時 (calc,(( 365*(ユリウス日要素)+(ユリウス日要素)/4 +3059*((if,(A1)>2,-2,10)+(A1))/100 +(ユリウス日要素)/400 -(ユリウス日要素)/100 +(A2)+1721089 )-2460000)*24+(現在時) ) @ユリウス日での経過分 (calc,((( 365*(ユリウス日要素)+(ユリウス日要素)/4 +3059*((if,(A1)>2,-2,10)+(A1))/100 +(ユリウス日要素)/400 -(ユリウス日要素)/100 +(A2)+1721089 )-2460000)*24+(現在時))*60+(現在分) ) @グレゴリオ暦での経過時 (calc,(( 365*(A0)+(A0)/4-(A0)/100+(A0)/400 +306*(calc,(A1)+1)/10+(A2)-428 )-738000)*24+(現在時) ) @グレゴリオ暦での経過分 (calc,((( 365*(A0)+(A0)/4-(A0)/100+(A0)/400 +306*(calc,(A1)+1)/10+(A2)-428 )-738000)*24+(現在時))*60+(現在分) )