Top Downloads&ScreenShots 掲示板 Love Beer!! 家具MODを修正 日時を取得する練習 四季の変化 木のカタログ
休息メニューでは時間までしか表示されませんが、グローバル変数の GameHour を使えば、今何分かも表示できるMODが作れそうです。
時間が収められたグローバル変数の使い方の練習として作っているので、スクリプトばっかりです。

Download ClockandWatch (21kb)

変数をそのままメッセージボックスに表示

とりあえずグローバル変数をそのままメッセージボックスに表示させてみる。
Begin watch
if ( OnActivate )	;使用すると
	MessageBox, "%.0f-%.0f (%.0f) %.2f", Month, Day, Year, GameHour, "OK"
	;MessageBox, "メッセージ",変数名, 変数名, 変数名, 変数名, "OK"ボタン
	;%.0f :ここに小数点以下0桁の実数の値を表示する
	;「月-日 (年)時間」「OK」を表示
endif
End  watch
本当は %D で整数型の値を表示するはずだが、うまくいかなかったので、全て実数型の表示定義にして、 小数点以下を表示しないようにした。

変数を加工する

このままでは、1月を 0 としているので表示が 1 つずつずれることと、「分」が 0 から 99 まで表示されるので これを換算しなければいけない。
まずは Month の値に 1 足すようにする。
Morrowind には独自の月の名前があるが( 実験:月を表示するスクリプト)、"Last Seed"とだけ書いてあっても(私は)何月かわからない、といって日にちや時間も表示されているところに 、月の名前と数字の両方が書いてあると、今度は読み辛くなるので、今回は数字だけ表示する。
	set currentMonth to Month +1
	;グローバル変数に1足してローカル変数currentMonthに代入

"時間"と"分"を切り分ける

「分」を換算するには、GameHourから、小数点以下の部分だけを取り出さなければいけないが、実数型の変数から 整数部分だけや、小数点以下の部分だけを切り出す方法がわからなかったので、24の分岐のif文で代用する。
short currentHour	;現在の時間を代入する(整数型)
float currentMinutes	;現在の分を代入する(実数型)

	if ( GameHour < 1 )	;GameHourが1未満の時
		set currentHour to 0	;現在時間は0
		set currentMinutes to GameHour	;現在の分はGameHour
	elseif ( GameHour < 2 )
		set currentHour to 1	;現在時間は0
		set currentMinutes to ( GameHour - 1 )	;現在の分はGameHour - 1
	elseif ( GameHour < 3 )
		set currentHour to 2
		set currentMinutes to ( GameHour - 2 )
	elseif ( GameHour < 4 )
		set currentHour to 3
		set currentMinutes to ( GameHour - 3 )
	;(中略)
	elseif ( GameHour < 24 )
		set currentHour to 23
		set currentMinutes to ( GameHour - 23 )
	endif

"分"を60単位の数字に換算する

currentMinutes を60単位の数字に換算する。
0.50 が 30 と表示されるようにすればいい。
	set currentMinutes to ( currentMinutes * 60 )
currentMinutes が、1桁だと"6"のように表示されるが、これを"06"と表示させたいので、 10未満と10以上でメッセージを分ける。
	if ( currentMinutes < 10 )
	MessageBox, "%.0f-%.0f (%.0f) %.0f:0%.0f", currentMonth, Day, Year, currentHour, currentMinutes, "OK"
	activate
	else
	MessageBox, "%.0f-%.0f (%.0f) %.0f:%.0f", currentMonth, Day, Year, currentHour, currentMinutes, "OK"
これでスクリプト完成。Clockのほうも基本的には同じ内容。

スクリプト完成

Begin watch
short currentMonth
short currentHour
float currentMinutes
if ( OnActivate )
	if ( GameHour < 1 )
		set currentHour to 0
		set currentMinutes to GameHour 
	elseif ( GameHour < 2 )
		set currentHour to 1
		set currentMinutes to ( GameHour - 1 )
	elseif ( GameHour < 3 )
		set currentHour to 2
		set currentMinutes to ( GameHour - 2 )
	elseif ( GameHour < 4 )
		set currentHour to 3
		set currentMinutes to ( GameHour - 3 )
	elseif ( GameHour < 5 )
		set currentHour to 4
		set currentMinutes to ( GameHour - 4 )
	elseif ( GameHour < 6 )
		set currentHour to 5
		set currentMinutes to ( GameHour - 5 )
	elseif ( GameHour < 7 )
		set currentHour to 6
		set currentMinutes to ( GameHour - 6 )
	elseif ( GameHour < 8 )
		set currentHour to 7
		set currentMinutes to ( GameHour - 7 )
	elseif ( GameHour < 9 )
		set currentHour to 8
		set currentMinutes to ( GameHour - 8 )
	elseif ( GameHour < 10 )
		set currentHour to 9
		set currentMinutes to ( GameHour - 9 )
	elseif ( GameHour < 11 )
		set currentHour to 10
		set currentMinutes to ( GameHour - 10 )
	elseif ( GameHour < 12 )
		set currentHour to 11
		set currentMinutes to ( GameHour - 11 )
	elseif ( GameHour < 13 )
		set currentHour to 12
		set currentMinutes to ( GameHour - 12 )
	elseif ( GameHour < 14 )
		set currentHour to 13
		set currentMinutes to ( GameHour - 13 )
	elseif ( GameHour < 15 )
		set currentHour to 14
		set currentMinutes to ( GameHour - 14 )
	elseif ( GameHour < 16 )
		set currentHour to 15
		set currentMinutes to ( GameHour - 15 )
	elseif ( GameHour < 17 )
		set currentHour to 16
		set currentMinutes to ( GameHour - 16 )
	elseif ( GameHour < 18 )
		set currentHour to 17
		set currentMinutes to ( GameHour - 17 )
	elseif ( GameHour < 19 )
		set currentHour to 18
		set currentMinutes to ( GameHour - 18 )
	elseif ( GameHour < 20 )
		set currentHour to 19
		set currentMinutes to ( GameHour - 19 )
	elseif ( GameHour < 21 )
		set currentHour to 20
		set currentMinutes to ( GameHour - 20 )
	elseif ( GameHour < 22 )
		set currentHour to 21
		set currentMinutes to ( GameHour - 21 )
	elseif ( GameHour < 23 )
		set currentHour to 22
		set currentMinutes to ( GameHour - 22 )
	elseif ( GameHour < 24 )
		set currentHour to 23
		set currentMinutes to ( GameHour - 23 )
	endif
	set currentMonth to Month +1
	set currentMinutes to ( currentMinutes * 60 )
	if ( currentMinutes < 10 )
	MessageBox, "%.0f-%.0f (%.0f) %.0f:0%.0f", currentMonth, Day, Year, currentHour, currentMinutes, "OK"
	activate ;日時を表示してからアイテムを拾うための"使用する"関数 Watch のみ
	else
	MessageBox, "%.0f-%.0f (%.0f) %.0f:%.0f", currentMonth, Day, Year, currentHour, currentMinutes, "OK"
	activate
	endif

	set currentMonth to 0	;初期化
	set currentHour to 0
	set currentMinutes to 0
endif
End  watch
このスクリプトを、Grand Soul Gem のテクスチャを(2分ぐらいで作って)張り替えた物に設定して、 MORROWIND COUNCIL - JAPANさんにUPしました。 が、後でMorrowind Summitさんを見てみたら、 時計のMODが 2つあって、そのうち 1つは時間、分も表示されるものでした。

せっかくなので、そのMODを参考にして改良して、テクスチャも少しはマシなものに換えたいと思います。 (月齢とか表示させたら時計らしくなるかな)
Top Downloads&ScreenShots 掲示板 Love Beer!! 家具MODを修正 日時を取得する練習 四季の変化 木のカタログ