//:://///////////////////////////////////////////// //:: FileName: tr_sundial //::////////////////////////////////////////////// /* This scipt was inspired by Dscaper (craig [at] derby.co.uk) and his sundial "ds_global_sdial". Its does mostly the same, meaning it shows the time in hh:mm[am/pm] style for daytime and hh[am/pm] for dawn and dusk. It will not show the time at night. But nevertheless, I rewrote the whole script and added one feature: It now adapts to the "minutes per hour" setting (=gamespeed) of the module. The original sundial didn't do that, it only displayed the correct time with the default value "2 minutes per hour". Attach to OnUsed event. */ //::////////////////////////////////////////////// //:: Created By: Tobias Riegg //:: Email: bunduki@spacerun.net //:: Thanks to Alexander Broschell for his mental support ;-) //:: Created On: 4th September 2002 //::////////////////////////////////////////////// // custom function, returns the minutes _gametime_ int GetTimeMinuteGametime(); // custom function, used to convert an integer to a two digit string string IntToStringFillUp(int number); void main() { string sResult; // check the daytime if (GetIsNight()) { sResult = "It is night, therefore you cannot tell the time."; } else { sResult = "It is now "; // Get the hour gametime int iHour = GetTimeHour(); string sMinute; string sComment; if (GetIsDawn()) { sResult += "roughly "; sComment = " You are not able to figure out the minutes, it is dawn."; } else if (GetIsDusk()) { sResult += "roughly "; sComment = " You are not able to figure out the minutes, it is dusk."; } else // Daytime { // Get the minutes gametime int iMinute = GetTimeMinuteGametime(); // a sundial is not very acurate, only 0, 15, 30, 45 minutes will be displayed: iMinute /= 15; iMinute *= 15; // this does makes sense, because of the datatype integer!!! // using custom function, this converts integer to string sMinute = IntToStringFillUp(iMinute); } // Generate AM / PM string sDesignate = "am"; if (iHour >= 13) { iHour = iHour - 12; sDesignate = "pm"; } string sHour = IntToString(iHour); // assembling everything sResult += sHour + ":" + sMinute + " " + sDesignate + "." + sComment; } // say it SpeakString(sResult,TALKVOLUME_TALK); } int GetTimeMinuteGametime() { // Get the seconds per gamehour // (default is 120, you can change it in edit -> module properties -> advanced) float fSecondsPerHour = HoursToSeconds(1); // Get the minutes and seconds passed in the current hour gametime and... int iMinute = GetTimeMinute(); int iSecond = GetTimeSecond(); // ... calculate the bygone seconds in the current hour gametime int iBygoneSeconds = iMinute*60 + iSecond; // Calculate the bygone minutes gametime in the current hour int iCurrentMinute = FloatToInt((iBygoneSeconds/fSecondsPerHour)*60); return iCurrentMinute; } string IntToStringFillUp(int iNumber) { string sNumber = IntToString(iNumber); // Append 0 if necessary if (GetStringLength(sNumber) == 1) { sNumber = "0" + sNumber; } return sNumber; }