on:○○で「毎日何時に〜〜が起きる」を作れるようになるやつ  ※エクセルをマクロで投げ出した程度の知能で書いたので、用語用法が変だったりしたらすまない ●おおざっぱな内容 このゲームは毎日定期的に○○が起きるようにしたい場合、 大抵はon:changedayが使われますが、それだと深夜0時のタイミングしか使えません。 深夜0時になると動物が一斉に沸いて、植物が一斉に育って、鳥の糞が一斉に降ってくる、 そんな状態なわけですが、そこを改良する方法を考えました。 on:changeday と同じように各所で使えて、タイミングも深夜0時だけでなく自由に決められます。 個人的には、これで鳥の糞とか動物スポーンの時間を分散して、 深夜0時になった瞬間ちょっと固まるのが軽減できたらいいなと思うんだけど、まだ試してません。 むしろ逆に重くなっちゃうのかもしれませんが、動作することだけは確認しました。 -----units.infのPlayerのところへコピペ---------- on:load { local $checktime,$nowhour,$nowtime,$oldhour,$oldtime,$over,$cttmp; $oldhour=hour(); $oldtime=((day()*24)+hour()); if ($checktime!=1) {event "checktime";} } on:checktime { $checktime=1; $nowhour=hour(); $nowtime=((day()*24)+hour()); timer "self",5000,1,"checktime"; if ($nowtime>$oldtime){ event "$nowhour","global"; $cttmp=$nowtime; $cttmp-=$oldtime; $over=$oldhour; $over+=100; loop("count",$cttmp) { $over+=1; if ($over>123) {$over-=24;} event "$over","global"; } } $oldhour=$nowhour; $oldtime=$nowtime; } ------ここまで--------- ●仕様 5秒ごとに現在時間をチェックして、変動を察知するとその時間ごとのイベントを起こす指令を出します。 誤差が±5秒程度あり、時間が変わった直後でまだチェックされてないという数秒間を突いてセーブ→ロードした場合、 その時間起こるべきイベントが起きない不具合がありますが、仕様です。 その時間に寝ていた場合は無視される「起きていれば発動」タイプと、 起きたときにまとめて発動する「寝過ごしても発動」タイプの2種類から使えます on:* (0〜23)   起きていれば発動(指定したい時間をそのまま入れたらOK) on:* (100〜123)  寝過ごしても発動(指定したい時間に100を足せばOK) ●使用例 上のやつをちゃんとコピペしたら、こういうことができるようになるよ! っていうのを紹介したいと思ったんだけど、例2のニワトリはextensionMOD前提でしたね、ごめんなさい。 例1 起きていれば発動のタイプ ---units.infのplayerのところへコピペ---------- on:12 { process "vomiting",1000; play "vomit.wav"; vomit 1; } ------ここまで--------- 動作:毎日12時になると吐く。その時間は寝ていて14時に起きた場合は吐かない 例2 寝過ごしても発動のタイプ ----units_ext.infのchickenのところへコピペ------------ on:108 { if (lives("self")==1) { create "item",505,getx("self"),getz("self"); } } --------ここまで-------------- 動作:ニワトリが毎日8時になると卵を産む。その時間は寝ていて10時に起きちゃっても産む たとえば、 早朝にだけ小鳥のさえずりとかコケコッコーとかの鳴き声を出したいなら前者を使ったらいいし、 全自動お料理マシーンが勝手に朝食用意してくれてるようにしたいって場合は後者を使ったらいいんじゃない? ●動作確認版 読んでもいったい何やってるのかわかんなかったら、 代わりに下のを入れて時間が経つのを眺めたり睡眠してみたりすればちょっとはわかると思う 確認用のメッセージやイベントが入ってる、製作段階で使ってたやつです -----units.infのplayerのところへコピペ------------ on:load { local $checktime,$nowhour,$nowtime,$oldhour,$oldtime,$over,$cttmp; $oldhour=hour(); $oldtime=((day()*24)+hour()); if ($checktime!=1) {event "checktime";} } on:checktime { $checktime=1; $nowhour=hour(); $nowtime=((day()*24)+hour()); msg "now checktime $nowhour",3; timer "self",5000,1,"checktime"; if ($nowtime>$oldtime){ event "$nowhour","global"; $cttmp=$nowtime; $cttmp-=$oldtime; $over=$oldhour; $over+=100; loop("count",$cttmp) { $over+=1; if ($over>123) {$over-=24;} event "$over","global"; } } $oldhour=$nowhour; $oldtime=$nowtime; } on:0 { msg "0 oclock",4; } on:1 { msg "1 oclock",4; } on:2 { msg "2 oclock",4; } on:3 { msg "3 oclock",4; } on:4 { msg "4 oclock",4; } on:5 { msg "5 oclock",4; } on:6 { msg "6 oclock",4; } on:7 { msg "7 oclock",4; } on:8 { msg "8 oclock",4; } on:9 { msg "9 oclock",4; } on:10 { msg "10 oclock",4; } on:11 { msg "11 oclock",4; } on:12 { msg "12 oclock",4; } on:13 { msg "13 oclock",4; } on:14 { msg "14 oclock",4; } on:15 { msg "15 oclock",4; } on:16 { msg "16 oclock",4; } on:17 { msg "17 oclock",4; } on:18 { msg "18 oclock",4; } on:19 { msg "19 oclock",4; } on:20 { msg "20 oclock",4; } on:21 { msg "21 oclock",4; } on:22 { msg "22 oclock",4; } on:23 { msg "23 oclock",4; } on:100 { msg "0 over",5; } on:101 { msg "1 over",5; } on:102 { msg "2 over",5; } on:103 { msg "3 over",5; } on:104 { msg "4 over",5; } on:105 { msg "5 over",5; } on:106 { msg "6 over",5; } on:107 { msg "7 over",5; } on:108 { msg "8 over",5; } on:109 { msg "9 over",5; } on:110 { msg "10 over",5; } on:111 { msg "11 over",5; } on:112 { msg "12 over",5; } on:113 { msg "13 over",5; } on:114 { msg "14 over",5; } on:115 { msg "15 over",5; } on:116 { msg "16 over",5; } on:117 { msg "17 over",5; } on:118 { msg "18 over",5; } on:119 { msg "19 over",5; } on:120 { msg "20 over",5; } on:121 { msg "21 over",5; } on:122 { msg "22 over",5; } on:123 { msg "23 over",5; } ----------ここまで---------------