ゴーストのトーク内に「昨日の年月日」の情報を表示させるための関数式【伺か・里々忘備録】

ゴーストのトーク内に「昨日の年月日」の情報を表示させるための関数式 里々の記述

ゴーストに昨日の日付という概念を教えてあげるための記述の紹介です。

日付だけに限らず、「前日の年月日」の情報を教えてくれるようになります。
もちろん、トークの条件分岐としても昨日という条件を設定できるようになります。

なお、うるう年には対応していません。

ここで紹介している記述は、里々の栞を使って伺かを作っている人向けです。

「昨日の年月日」の情報を表示させる記述

記述の紹介の前に、この記述を使ってできるようになることを確認しておきます。
できるようになることは、以下のことです。

  • ゴーストのトーク内に昨日の年月日を表示させる
  • 昨日の年月日を条件分岐の中に組み込めるようになる

(昨日年)(昨日月)(昨日日)などと書くと、昨日の日付情報が表示されるようになります。

いわゆる、里々で使われる(現在年)(現在月)(現在日)の「昨日の日付」バージョンを自分で作るといったイメージです。

まとめて昨日の日付の情報を表示させたい場合は「$昨日の年月日=(昨日年)年(昨日月)月(昨日日)日」などと変数にまとめ込んでお使いください。
変数にまとめ込むことで、(昨日の年月日)と書くだけで年月日情報を教えてくれるようになります。

なお、うるう年(2月29日)には対応していません。
うるう年にも対応できたら、また修正した記述をこちらに掲載します。

記述の書き方

以下の記述を、お好きなdic内に貼り付けてください。

@昨日の日付を算出する
(
set,昨日年,(現在年))(
set,昨日月,(現在月))(
set,昨日日,(calc,(現在日)-1))(
when,(昨日日)==0,(set,昨日月,(calc,(現在月)-1)),)(
when,(昨日月)==0,(set,昨日年,(calc,(現在年)-1)),)(
when,(昨日月)==0,(set,昨日月,12),)(
when,(昨日日)==0,(set,昨日日,(switch、(現在月)、
1、31、
2、31、
3、28、
4、31、
5、30、
6、31、
7、30、
8、31、
9、31、
10、30、
11、31、
12、30)),)(set,昨日年,(han2zen,(昨日年),数字))(set,昨日月,(han2zen,(昨日月),数字))(set,昨日日,(han2zen,(昨日日),数字))

ちなみに、カッコ()の位置がまばらで整理したくなる気持ちもあるかもしれませんが、いじりかたがよくわからない場合はこのままにしておくことがオススメです。

というのも、カッコの終わり「)」とカッコの始まり「(」が改行で挟まれてしまうと、「ひとかたまりの記述」として呼び出されなくなってしまうので、記述が機能しなくなるからです。

いじり方を把握している方は、お好きにカスタマイズしてお使いください。

OnBootに追記する

上記の記述がコピペできたら、(昨日の日付を算出する)と書いて呼び出すことで「昨日の日付」が算出されるようになります。
なので、例えば*OnBootなんかに(昨日の日付を算出する)という記述を仕込んでおけば、ゴースト起動時に自動的に「昨日の日付」が算出されるようになるというわけです。

辞書内のどこにも*OnBootの記述がないよという場合は、以下のものをコピペしてお使いいただけます。

*OnBoot
(昨日の日付を算出する)
>起動のトーク

なお上記の*OnBootは、あくまでも一例です。
*OnBootの記述が制作中のゴーストの辞書内にある場合は、その中に(昨日の日付を算出する)という1行を加えていただければ大丈夫です。

もちろん、OnBoot内に仕込まなくても、トーク内に(昨日の日付を算出する)と書くことでその場で「昨日の日付」を算出することができるようになります。

試しにどんな風に動くかやってみたい場合は、後述の「動作確認をする」で紹介している記述を試しに使ってみてください。

なお、上記の記述内の「現在日時を取得するための変数」の文字部分をいじって、そこにお好きな数字を入れるなどしてテストをすることで、元から使われている「現在年月日を格納する変数」をいじることなく動作確認することができます。
例えば、(現在年)の変数を(テスト現在年)のように変える、ということです。

他の場所でも多用している現在年月日の変数をいじるのは不安、という場合には、このように変数を書き換えて動作確認をしてみてくださいませ。

動作確認をする

上記の記述をdic内に貼り付けできたら、試しに以下の記述をどこかに貼り付けて動かしてみましょう。

*昨日の日付表示テスト
$現在年=2022
$現在月=2
$現在日=1
:今日は(現在年)年(現在月)月(現在日)日だよ。
(昨日の日付を算出する)
昨日は(昨日年)年(昨日月)月(昨日日)日だね。

「昨日の日付表示テスト」はどこからかつなげてきてあげてください。
つつきメニューとか、*0headつつかれとか、どこでもお好きなように。

また、下記の数字部分をいじくることで、ちゃんと「昨日の年月日」が表示されるか否かの実験ができます。

$現在年=2022
$現在月=2
$現在日=1

たとえば、現在月・現在日の両方に「1」と書いた場合は、ちゃんと昨日の日付として「2021年12月31日だね」と表示されるはずです。

動作確認ができた後

なお、これは動作確認をするための記述です。

なので、ちゃんと日付が表示されることが確認できたら、上記の「$」記号から始まる3行は以下のステップを踏んでから削除しておいてください。

  1. 現在年・月・日に正しい年月日を再び格納する
  2. 「$」記号から始まる3行を削除する

特に、現在年月日の変数をほかの場所で使っている、多用している場合には、この現在年月日に現在の正しい年月日を格納しなおしてから削除することは忘れずに行っておきたいところです。

条件式に組み込む場合

上記の記述を使ってなにができるのさ?という話なのですが、正直、「昨日の年月日」の情報を表示できるようになる、という点以外にはあまり大きな利点もありません。
というのも、「前日に何かをしたかどうか?」という条件分岐は、里々wikiにあるユリウス日や日付取得系のSAORIなどを使用して行うことができるからです。

とはいえ、先程紹介した記述を使っても、「前日に何かをしたかどうか?」の条件分岐を組むことはできます。

例えば、「1日おきにしかおやつをあげれない」という遊びをしたい時は、こんな感じに条件分岐を書くことができます。

#あらかじめ、以下のように、OnBootに(昨日の日付を算出する)を仕込んでおく
*OnBoot
(昨日の日付を算出する)
>起動のトーク

*0headつつき
:なあに?

_おやつ

*おやつ
>昨日もおやつを食べた【タブ】(おやつを食べた日)==(昨日日)
$おやつを食べた日=(現在日)
:今日のおやつはラムネバーだよ!
もきゅもきゅ

*昨日もおやつを食べた
:昨日もおやつを食べたよ!
ふとっちゃうでしょ!

ただ、冒頭でも書いた通り、うるう年には対応していません。
なので、今年がうるう年で、今日の日付が3月1日だった場合、本当ならば昨日は2月29日であるべきなのに、(昨日日)という変数の中に入ってる数字は「28」になってしまいます。

昨日の日付を表示させる程度であればいいかもしれないですが、上記のように何かしらの条件式に組み込むことはおすすめしません。

条件式には、「前日にやったかどうか?」を正確に判断できるユリウス日の計算かSAORIを使うった方が正確なのでオススメです。

記述の解説

自分が絶対あとで忘れるに違いないので、覚えているうちに解説を残しておきます。

「前の月の最終日」を定義

数字が羅列している丸カッコの中では何をしているのかというと、ここで「前の月の最終日」を定義しています。
例えば、今が6月であれば、前の月は5月です。5月の最終日は31日なので、「6、31、」と書いてそのことを定義しています。

つまり、もっと分かりやすく言うと「今が6月の時に”5月の最終日”を表示させたい時は、31って数字を表示してね!」という指示をしているのが丸カッコの中、というわけです。

そして、以下の部分を元に、前日の月と、さらに前日の年号の情報を出しています。

set,昨日日,(calc,(現在日)-1)

仕組みを説明しておくと、「昨日の日付」が「0」になってしまった時。
つまり、今日の日付が1日であるとき、「昨日の月」の変数には「現在の月-1」の数字を入れてね、という指示を出しています。

「昨日の年」に関しても同じです。「昨日の月」が0になってしまった時、「昨日の月」には12という数字を入れて、「昨日の年」には「今年の年号-1」の計算をして出た数字を入れといてね、と書いてあります。

「半角数字→全角数字」に変換

下記の部分は「半角数字→全角数字」に変換を行っているだけです。

(set,昨日年,(han2zen,(昨日年),数字))(set,昨日月,(han2zen,(昨日月),数字))(set,昨日日,(han2zen,(昨日日),数字))

というのも、set関数(set,変数名,値)を使うと、計算結果は必ず半角数字で返されてしまう仕様だからです。
この点に関して公式の仕様書を確認したい場合は、里々wikiのset関数のページも合わせてどうぞ。

別に半角のままでもいいのですが、これら(現在年)(現在月)(現在日)で表示される数字は全角で表示されます。
なので、どうせなら統一したいと思って、半角→全角の変換を挟んでいます。

コメント

タイトルとURLをコピーしました