ばぐとらぶごる

開発者もすなるぶろぐといふものを、エンバグ野郎もしてみむとてするなり。

新イベントOnHourTimeSignalについて

※本記事は伺か Advent Calendar 2015の12/25の記事です。

新イベント "OnHourTimeSignal"

SSP 2.3.71で新イベント "OnHourTimeSignal" を実装しました。

詳しくはこちら↓~
http://ssp.shillest.net/ukadoc/manual/list_shiori_event.html#OnHourTimeSignal

しかし、よく見たらReference群はOnSecond/MinuteChangeと同じだし、わざわざ新イベント名をつける意味って何なの?という疑問が間違いなく出てくると思います。

今回はこのイベント新設の狙いと、今後の展開についてです。

実装目的

OnSecond/MinuteChangeの説明をよく見ると「喋れないときはNOTIFYで通知され、トークは無視される」という重要な記述があります。

この部分が大事で、今までの時報処理ではたいてい「時」が前から数値が変わったらトークとか、そういう簡易的な実装だと思いますが、その場合、最小化されていたり、passivemodeだったり、そもそも前のトークを喋っている最中だったりと、この条件設定でトークが無視される機会はたくさんあります。

それならOnSecond/MinuteChange自体をトーク可能なタイミングにずらして通知すれば良いのではないか、という案も出てきますが、時刻をきちんと通知する定期処理イベントとしての役割が失われるので、できれば避けたいところです。

結局ゴースト内部で「トークできないフラグが外れるまでトークを保留してから処理」する実装で今までなんとかしてきたのですが、これが処理のフラグ管理が面倒で…

「本体側でどうせフラグ持ってるんだからなんとかそのへんよしなにやれよ!時報だけでなんでオオゲサな処理が要るねん!」ということで、このイベント実装となりました。*1

応用

単純な時報の簡易実装目的だけではなく、日付が重要になる処理をしているゴーストでの確実な日付変更イベントなどに応用できると思います。

今後実装要望の状況によっては、日付変更専用イベントや、?時30分用も作ったほうがいいのかもしれませんが、イベント名をいっぱい作りまくると仕様に埋もれてしまいそうなので、とりあえず今はこのくらいで。*2

意見ください

他にも「今でも実装できることはできるけどちゃんと作るのは超面倒」なものがあれば、本体側の実装を検討するので、今できるからいいや…と投げるのではなく、思いついたらBTSへ。
http://ssp.shillest.net/bts/guest.cgi?project=ssp&action=top

*1:時報しゃべらないのでSSPのバグでは」という報告が複数上がってついに面倒になったからという本音は秘密である

*2:On30MinTimeSignalだのOn15MinTimeSignalだのOnDateTimeSignalだの乱立したら大惨事であります