19 May 2009

System Time/Date Script

RMXP and RMVX has a built-in Time function that allows the display of the current date and time (based on the system clock). I found this by accident while sifting through the Help file - actually while searching for Bitmap and Sprite management - and after some experimentation discovered how to place it in windows.

To use it, there are two functions to be aware of:

Time.now

This reads the current time and date from the system clock.

strftime("%I:%M:%S %p")

This converts the time into a string, using the time of day (in 12-hour format), minutes and seconds, as well as showing AM/PM.

So to add the time and date, we can add the following:

t = Time.now
time = t.strftime("%I:%M:%S %p")
date = t.strftime("%a, %d %b, %Y")

What this will do is store the time/date stamp format into variables and convert them to strings so that they can then be "drawn" in a window.

In RMXP, the following script can be used to replace the default. In RMVX, create a new script called Window_PlayTime:
#=================================================================
# ** Window_PlayTime
#-----------------------------------------------------------------
#  This window displays play time on the menu screen.
#=================================================================
class Window_PlayTime < Window_Base
  #---------------------------------------------------------------
  # * Object Initialization
  #---------------------------------------------------------------
  def initialize
    super(0, 0, 160, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    refresh
  end
  #---------------------------------------------------------------
  # * Refresh
  #---------------------------------------------------------------
  def refresh
    self.contents.clear
    self.contents.font.size = 16
    t = Time.now
    time = t.strftime("%I:%M:%S %p")
    date = t.strftime("%a, %d %b, %Y")
    self.contents.font.color = normal_color
    self.contents.draw_text(0, -2, 140, WLH, date, 1)
    self.contents.draw_text(0, 14, 140, WLH, time, 1)
  end
  #---------------------------------------------------------------
  # * Frame Update
  #---------------------------------------------------------------
  def update
    super
    if Graphics.frame_count / Graphics.frame_rate != @total_sec
      refresh
    end
  end
end
RMXP will display the replacement time/date in the default "Play Time" window on the menu status.

To make this work in RMVX, add the following to Scene_Menu:

In the start definition routine, add

@window_playtime = Window_PlayTime.new
@window_playtime.x = X
@window_playtime.y = Y

where X and Y are the x- and y-coordinates for the window placement.

Add the following to the terminate definition routine:

@window_playtime.dispose

This is to ensure that the window doesn't stay onscreen when the status menu has been exited.

And finally, add the following to the update definition routine:

@window_playtime.update

This is to ensure that the time refreshes every second while on the status menu.

The resultant "Play Time" window should now contain the current time and date, thus:

Tue, 19 May, 2009
12:33:22 PM

And that's it, but the strftime element does have a number of different format options, which I'll detail in the next entry.
Related Posts with Thumbnails
Template Design "Perfect World" by SkinCorner