The RPG Maker Resource Kit

RMRK RPG Maker Creation => VX => VX Scripts Database => Topic started by: jet10985 on April 14, 2010, 04:04:43 AM

Title: Jet's Time System
Post by: jet10985 on April 14, 2010, 04:04:43 AM
Jet's Time System
By Jet (Obviously)


Introduction

Spoiler for:
This is my time system. It has a whole lot of features and customization options. I have obtained opinions from users like you to know what they want in a time system. This has all the features of the time system you may already use, PLUS MORE! Enjoy. =)

Features

Spoiler for:
This is the Jet Engine, an add-on for all my scripts to check if they are up-to date.

Code: [Select]
#===============================================================================
# The Jet Engine
# By Jet10985 (Jet)
# Help by: Yanfly, OriginalWij, BigEd781
#===============================================================================
# This is my handy module i use to hold my regularly used methods. It also
# Stores which of my scripts people are using. I release this to help people
# write patches for my snippets if needed or they just want my methods.
#===============================================================================
# The Jet Engine now checks all of my scripts that you are using and tells you
# if any of them are outdated.
#===============================================================================
=begin
New Methods:

active - adds a script to the hash of my scripts being used by the user
check_note_tags - checks the obj's notebox for a RegExp word. Returns true or false.
show_char - Shows a walking character sprite.
script_active? - Checks if 1 of my scripts is active in the editor.
check_tag_number - Checks the obj's notebox for a RegExp word and number. Returns the number.

=end


module JetEngine
  
  $engine_scripts = {}
  
  def self.active(name, version = true)
    $engine_scripts[name] = version unless $engine_scripts.include?(name)
  end

  def self.check_note_tags(obj, tag)
    obj.note.each_line { |notetag|
    case notetag
    when tag
      return true
    end
    }
    return false
  end
  
  def self.show_char(x, y, actor_id)
    @char = Game_Character.new
    @char.set_graphic(actor_id.character_name, actor_id.character_index)
    @char.step_anime = true
    @char.moveto(x, y)
    @sprite = Sprite_Character.new(nil, @char)
  end

  def self.script_active?(name)
    if $engine_scripts.include?(name)
      return true
    else
      return false
    end
  end
  
  def self.check_tag_number(obj, tag)
    obj.note.split(/[\r\n]+/).each { |notetag|
    case notetag
    when tag
      @result = $1.to_i
    end }
    return @result
  end
  
  def self.check_current_version
    $outdated_scripts = []
    for i in 0...$engine_scripts.keys.size - 1
      case $engine_scripts.keys[i]
      when "Run/Guard Hotkey"
        if $engine_scripts.values[i] != "v1"
          $outdated_scripts.push("Run/Guard Hotkey")
        end
      when "Run/Guard Hotkey ATB"
        if $engine_scripts.values[i] != "v1"
          $outdated_scripts.push("Run/Guard Hotkey ATB")
        end
      when "Disable Battle Commands"
        if $engine_scripts.values[i] != "v1"
          $outdated_scripts.push("Disable Battle Commands")
        end
      when "Break States"
        if $engine_scripts.values[i] != "v1.1"
          $outdated_scripts.push("Break States")
        end
      when "Immortal States"
        if $engine_scripts.values[i] != "v1"
          $outdated_scripts.push("Immortal States")
        end
      when "Percentage of Damage"
        if $engine_scripts.values[i] != "v1.1"
          $outdated_scripts.push("Percentage of Damage")
        end
      when "Blue Magic"
        if $engine_scripts.values[i] != "v1"
          $outdated_scripts.push("Blue Magic")
        end
      when "Remove Dead Actors"
        if $engine_scripts.values[i] != "v1.2"
          $outdated_scripts.push("Remove Dead Actors")
        end
      when "Change Actor Options"
        if $engine_scripts.values[i] != "v2"
          $outdated_scripts.push("Change Actor Options")
        end
      when "Set Actor Max Level"
        if $engine_scripts.values[i] != "v1.1"
          $outdated_scripts.push("Set Actor Max Level")
        end
      when "Singular EXP"
        if $engine_scripts.values[i] != "v1"
          $outdated_scripts.push("Singular EXP")
        end
      when "No Actor EXP"
        if $engine_scripts.values[i] != "v1.1"
          $outdated_scripts.push("No Actor EXP")
        end
      when "If Party Has Equipped"
        if $engine_scripts.values[i] != "v1"
          $outdated_scripts.push("If Party Has Equipped")
        end
      when "If Party Has Skill"
        if $engine_scripts.values[i] != "v1"
          $outdated_scripts.push("If Party Has Skill")
        end
      when "Level Up Items"
        if $engine_scripts.values[i] != "v1"
          $outdated_scripts.push("Level Up Items")
        end
      when "Learn A Skill Items"
        if $engine_scripts.values[i] != "v1"
          $outdated_scripts.push("Learn A Skill Items")
        end
      when "Parameter Icons"
        if $engine_scripts.values[i] != "v1"
          $outdated_scripts.push("Parameter Icons")
        end
      when "Windowskin Snippet"
        if $engine_scripts.values[i] != "v1"
          $outdated_scripts.push("Windowskin Snippet")
        end
      when "Hide Text Box"
        if $engine_scripts.values[i] != "v1"
          $outdated_scripts.push("Hide Text Box")
        end
      when "Change Windowskin"
        if $engine_scripts.values[i] != "v1"
          $outdated_scripts.push("Change Windowskin")
        end
      when "Diagonal Map Scroll"
        if $engine_scripts.values[i] != "v1.1"
          $outdated_scripts.push("Diagonal Map Scroll")
        end
      when "Item SE"
        if $engine_scripts.values[i] != "v1"
          $outdated_scripts.push("Item SE")
        end
      when "Screensaver"
        if $engine_scripts.values[i] != "v1.1"
          $outdated_scripts.push("Screensaver")
        end
      when "Pause Menu"
        if $engine_scripts.values[i] != "v1"
          $outdated_scripts.push("Pause Menu")
        end
      when "Change GameOver"
        if $engine_scripts.values[i] != "v1.1"
          $outdated_scripts.push("Change GameOver")
        end
      when "Aliased Load Menu Option"
        if $engine_scripts.values[i] != "v2"
          $outdated_scripts.push("Aliased Load Menu Option")
        end
      when "Success Bar"
        if $engine_scripts.values[i] != "v1"
          $outdated_scripts.push("Success Bar")
        end
      when "Speed Save"
        if $engine_scripts.values[i] != "v1"
          $outdated_scripts.push("Speed Save")
        end
      when "Extra Window"
        if $engine_scripts.values[i] != "v1"
          $outdated_scripts.push("Extra Window")
        end
      when "Records Window"
        if $engine_scripts.values[i] != "v1.1"
          $outdated_scripts.push("Records Window")
        end
      when "Level Up Effects"
        if $engine_scripts.values[i] != "v1"
          $outdated_scripts.push("Level Up Effects")
        end
      when "Alignment System"
        if $engine_scripts.values[i] != "v1.5"
          $outdated_scripts.push("Alignment System")
        end
      when "DayNight System"
        if $engine_scripts.values[i] != "v1.2.1"
          $outdated_scripts.push("DayNight System")
        end
      when "Cheat System"
        if $engine_scripts.values[i] != "v1.1"
          $outdated_scripts.push("Cheat System")
        end
      when "Stamina System"
        if $engine_scripts.values[i] != "v1"
          $outdated_scripts.push("Stamina System")
        end
      end
    end
  end
end

class Scene_Map
  
  alias jet2011_start start
  def start
    jet2011_start
    if $BTEST
      JetEngine.check_current_version
      p $outdated_scripts unless $outdated_scripts = []
    end
  end
end

Spoiler for:
Code: [Select]
#===============================================================================
# Features
#===============================================================================
# CHECK means the script has the feature
# WIP means it is a future feature
#-------------------------------------------------------------------------------
# Thomas Edison Compat. CHECK
# Auto-Tint  CHECK
# Auto-Weather  CHECK
# Auto-Season  CHECK
# Time to variable/switch  CHECK
# Weather to switch CHECK
# Changable Days/Months  CHECK
# Military time  CHECK
# Real time option CHECK
# Resting  CHECK
# Map/Menu Windows CHECK
# Changable map encounters  WIP
# Map labels  CHECK
# Alignment System compat.  CHECK
# Tile set Changes  WIP
# Skill damage differences depending on time of day.  WIP
# Update only on Map feature.  CHECK
#===============================================================================

Script/Demo

 Download Demo Here (Might be outdated) (http://www.mediafire.com/?htzlywtj3qj)

Script:
Spoiler for:
Code: [Select]
#===============================================================================
# Time System
# By Jet10985 (Jet)
# Slight Help by: Mr. Anonymous
#===============================================================================
# This script is my time system. Time System: A system of tracking in-game "time"
# which in-turn contain more systems relating to time. Used for visual effects,
# the novelty, and eventing purposes. My Time System: see Time system +
# see ultimate.
# This script has: 50 customization option.
#===============================================================================

#===============================================================================
# Features
#===============================================================================
# CHECK means the script has the feature
# WIP means it is a future feature
#-------------------------------------------------------------------------------
# Thomas Edison Compat. CHECK
# Auto-Tint  CHECK
# Auto-Weather  CHECK
# Auto-Season  CHECK
# Time to variable/switch  CHECK
# Weather to switch CHECK
# Changable Days/Months  CHECK
# Military time  CHECK
# Real time option CHECK
# Resting  CHECK
# Map/Menu Windows CHECK
# Changable map encounters  WIP
# Map labels  CHECK
# Alignment System compat.  CHECK
# Tile set Changes  WIP
# Skill damage differences depending on time of day.  WIP
# Update only on Map feature.  CHECK
#===============================================================================

=begin

Disable auto-tint and auto-weather on maps:

In the map name ex. MAP001, add [JDN] in the name. Like so

MAP001 [JDN]


Built-in script commands:

freeze_time(option)   <--------------- Script-time command only
option = true/false. true freeze's time, false unfreeze's it.

add_time(type, amount)   <------------------- Script-time command only
type = "minute", "hour", "day", "month", "year" according to what you want to add
amount = amount of that time you want to add.

jump_to_hour(hour)    <-------------------------- Script-time command only
hour = the hour you want to jump to. Be below 25 and above 0.
--------------------------------------------------------------------------------
Compatability Instructions:

If you want compatability with Jet's Alignment system and/or Thomas Edison VX,
place this script below both of them and toggle the configuration for them below

=end

#===============================================================================
# BEGIN CONFIGURATION
#===============================================================================

module Jet_DayNight # Don't Touch.
  
#===============================================================================
# Detail Configuration
#===============================================================================

  # Use computer time or script time? false is script, true is computer.
  REAL_TIME = false
  
  # This switch will turn the script into a real time script while on.
  REAL_TIME_SWITCH = 61

  # Hour script time will start at.
  STARTING_HOUR = 1
  
  # Minute script time will start at.
  STARTING_MINUTE = 0
  
  # Day script time will start at.
  STARTING_DAY = 0
  
  # Year script time will start at.
  STARTING_YEAR = 2010
  
  # This is how many frames it takes for a Script time minute to pass.
  # 60 frames = 1 Real life second. So 120 would be 2 real life seconds, etc.
  MINUTE_LENGTH = 120
  
  # Military time or AM/PM time? false is AM/PM, true is military.
  MILITARY_TIME = false
  
  # Should time only update on the map, and no where else?
  UPDATE_ONLY_ON_MAP = true
  
  # Automaticly change seasons? (This is auto-weather as well)
  AUTO_SEASONS = true
  
  # Automaticly tint according to time of day/weather?
  AUTO_TINT = true
  
  # Allows resting? Resting is the ability to call a scene that will allow
  # the player to "rest" for a certain amount of hours. Script time only.
  ALLOW_REST = true
  
  # The button to call the resting menu.
  REST_BUTTON = Input::F5
  
  # Include a window showing time of day, month, and day name in the menu?
  MENU_TIME_WINDOW = true
  
  # Include a window showing time of day and day name on the map?
  MAP_TIME_WINDOW = true
  
  # These are the X and Y coordinates of the map time window if you choose to
  # display the window on the map.
  MAP_TIME_WINDOW_COORDS = [384, 360]
  
  # This will add compatability with Thomas Edison VX the same as if you were
  # using KGC's day/night.
  # Meaning, lights will be on during night and off during day.
  THOMAS_EDISON_COMPATABILITY = true
  
  # This will add Jet's Alignment System compatability. Meaning, if you
  # have negative alignment, dusk and night will give bonus stats, and
  # vice versa for dawn and day if you're good.
  ALIGNMENT_SYSTEM_COMPATABILITY = false
  
  # This is the positive alignment bonus in dawn/day. These are in decimals.
  # By default, all bonuses are 1.2, meaning 20% bonus.
  #               ATK  DEF  SPI  AGI
  GOOD_BONUSES = [1.2, 1.2, 1.2, 1.2]
  
  # This is the negative alignment bonus in dusk/night. These are in decimals.
  # By default, all bonuses are 1.2, meaning 20% bonus.
  #               ATK  DEF  SPI  AGI
  BAD_BONUSES = [1.2, 1.2, 1.2, 1.2]

  
#===============================================================================
# Calendar Configuration (Script time only)
#===============================================================================

  # These are the months in a 3-4 letter form that will be used.
  MONTHS = {
  
  0 => ["Jan", 31],  # month number => ["Month name", days in month],
  1 => ["Feb", 28],  # month number => ["Month name", days in month],
  2 => ["Mar", 31],  # month number => ["Month name", days in month],
  3 => ["Apr", 30],
  4 => ["May", 31],
  5 => ["June", 30],
  6 => ["July", 31],
  7 => ["Aug", 31],
  8 => ["Sept", 30],
  9 => ["Oct", 31],
  10 => ["Nov", 30],
  11 => ["Dec", 31]  }
  
  # These are the days in the month in a 3-4 letter form for window space.
  DAYS = {
  
  0 => "Sun",   # day number => day name
  1 => "Mon",   # day number => day name
  2 => "Tues",   # day number => day name
  3 => "Wed",
  4 => "Thu",
  5 => "Fri",
  6 => "Sat"  }
  
#===============================================================================
# Switches Configuration (Script time and Real time)
#===============================================================================

  # The switch that will turn on when it is Autumn.
  AUTUMN_SWITCH = 50
  
  # The switch that will turn on when it is Winter.
  WINTER_SWITCH = 51
  
  # The switch that will turn on when it is Summer.
  SUMMER_SWITCH = 52
  
  # The switch that will turn on when it is Spring.
  SPRING_SWITCH = 53
  
  # The switch that will turn on when it is Raining.
  RAIN_SWITCH = 54
  
  # The switch that will turn on when it is Snowing.
  SNOW_SWITCH = 55
  
  # The switch that will turn on when it is Stormy.
  STORM_SWITCH = 56
  
  # The switch that will turn on when it is Night.
  NIGHT_SWITCH = 57
  
  # The switch that will turn on when it is Dawn.
  DAWN_SWITCH = 58
  
  # The switch that will turn on when it is Day.
  DAY_SWITCH = 59
  
  # The switch that will turn on when it is Dusk.
  DUSK_SWITCH = 60
  
#===============================================================================
# Variable Configuration (Script time and Real time)
#===============================================================================

  # Variable hour will be stored in.
  HOUR_VARIABLE = 50
  
  # Variable minute will be stored in.
  MINUTE_VARIABLE = 51
  
  # Variable day will be stored in.
  DAY_VARIABLE = 52
  
  # Variable month will be stored in.
  MONTH_VARIABLE = 53
  
  # Variable year will be stored in.
  YEAR_VARIABLE = 54
  
#===============================================================================
# Weather Configuration (Script time and Real time)
#-------------------------------------------------------------------------------
# Seasonal Numbers:
# 0 = Winter
# 1 = Autumn
# 2 = Summer
# 3 = Spring
#===============================================================================

  # Seasons that rain will occur in randomly.
  RAIN_SEASONS = [0, 1, 3]
  
  # Seasons that snow will occur in randomly.
  SNOW_SEASONS = [0, 1]
  
  # Seasons that storms will occur in randomly.
  STORM_SEASONS = [0, 1, 3]
  
#===============================================================================
# Season Configuration (Script time only)
#===============================================================================

  # These months will be in the summer season.
  SUMMER_MONTHS = [5, 6, 7]
  
  # These months will be in the summer season.
  WINTER_MONTHS = [11, 0, 1]
  
  # These months will be in the summer season.
  AUTUMN_MONTHS = [8, 9, 10]
  
  # These months will be in the summer season.
  SPRING_MONTHS = [2, 3, 4]
  
#===============================================================================
# Tint Configuration (Hours config for Script time only, tint for both.)
#===============================================================================

  # These hours will be considered dusk.
  DUSK_HOURS = [18, 19, 20, 21]
  
  # These hours will be considered night.
  NIGHT_HOURS = [22, 23, 24, 1, 2, 3]
  
  # These hours are considered dawn.
  DAWN_HOURS = [4, 5, 6, 7]
  
  # These hours are considered day.
  DAY_HOURS = [8, 9, 10, 11, 12, 13, 14, 15, 16, 17]
  
  # This is the tint that will be applied for dusk.
  DUSK_TINT = Tone.new(17, -51, -102, 0)
  
  # This is the tint that will be applied for night.
  NIGHT_TINT = Tone.new(-187, -119, -17, 68)
  
  # This is the tint that will be applied for dawn.
  DAWN_TINT = Tone.new(17, -51, -102, 0)
  
  # This is the tint that will be applied for day.
  DAY_TINT = Tone.new(0, 0, 0, 0)
  
  # This is the amount of time it takes for tone to change from one to another.
  FADE_LENGTH = 240
  
end

#===============================================================================
# DON'T EDIT FURTHER UNLESS YOU KNOW WHAT TO DO.
#===============================================================================
class RPG::MapInfo
  
  def name
    return @name.gsub(/\[.*\]/) {""}
  end
  
  def indoors?
    return @name.scan(/\[JDN\]/).size > 0
  end
end

class Game_Time
  
  include Jet_DayNight
  
  attr_accessor :day
  attr_accessor :day_name
  attr_accessor :days_passed
  attr_accessor :month
  attr_accessor :month_name
  attr_accessor :month_day
  attr_accessor :hour
  attr_accessor :minute
  attr_accessor :second
  attr_accessor :minute_length
  attr_accessor :year
  attr_accessor :frozen_time
  attr_accessor :map_infos
  
  def initialize
    if REAL_TIME
      @day =  Time.now.strftime("%j").to_i
      @day_name = Time.now.strftime('%a')
      @month = Time.now.strftime("%m").to_i
      @month_name = Time.now.strftime("%b")
      @month_day = Time.now.strftime("%d")
      @hour = Time.now.hour
      @minute = Time.now.min
      @year = Time.now.strftime("%Y").to_i
    else
      @day =  STARTING_DAY % DAYS.keys.size
      @day_name = DAYS[@day]
      @days_passed = STARTING_DAY
      @hour = STARTING_HOUR
      @month = 0
      @minute = STARTING_MINUTE
      @second = 0
      @year = STARTING_YEAR
    end
    @frozen_time = false
    @map_infos = load_data("Data/MapInfos.rvdata")
    @minute_length = 0
  end
  
  def screen
    if $game_temp.in_battle
      return $game_troop.screen
    else
      return $game_map.screen
    end
  end

  def update_time
    @day_name = DAYS[@day]
    @map_infos = load_data("Data/MapInfos.rvdata")
    time_of_day = get_time_of_day
    unless @map_infos[$game_map.map_id].indoors?
      case time_of_day
      when "Dusk"
        if !$instant_tint
          screen.start_tone_change(DUSK_TINT, FADE_LENGTH) unless screen.tone == DUSK_TINT || !AUTO_TINT
        else
          screen.start_tone_change(DUSK_TINT, 0)
        end
      when "Night"
        if !$instant_tint
          screen.start_tone_change(NIGHT_TINT, FADE_LENGTH) unless screen.tone == NIGHT_TINT || !AUTO_TINT
        else
          screen.start_tone_change(NIGHT_TINT, 0)
        end
      when "Dawn"
        if !$instant_tint
          screen.start_tone_change(DAWN_TINT, FADE_LENGTH) unless screen.tone == DAWN_TINT || !AUTO_TINT
        else
          screen.start_tone_change(DAWN_TINT, 0)
        end
      when "Day"
        if !$instant_tint
          screen.start_tone_change(DAY_TINT, FADE_LENGTH) unless screen.tone == DAY_TINT || !AUTO_TINT
        else
          screen.start_tone_change(DAY_TINT, 0)
        end
      end
      get_weather
    end
    if REAL_TIME || $game_switches[REAL_TIME_SWITCH]
      @day =  Time.now.strftime("%j").to_i
      @day_name = Time.now.strftime('%a')
      @month = Time.now.strftime("%m").to_i
      @month_name = Time.now.strftime("%b")
      @month_day = Time.now.strftime("%d")
      @hour = Time.now.hour
      @minute = Time.now.min
      @second = Time.now.sec
      @year = Time.now.strftime("%Y").to_i
    else
      @second += 1
      @minute_length += 1 unless @frozen_time
      if @minute_length == MINUTE_LENGTH
        @minute += 1
        @minute_length = 0
      end
      if @minute == 60
        @hour += 1
        @minute = 0
      end
      if @hour == 25
        @day += 1
        @hour = 1
      end
      if @day == DAYS.keys.size
        @day = 0
        @days_passed += DAYS.keys.size
      end
      if @days_passed > MONTHS[@month][1]
        @month += 1
      end
      if @month == MONTHS.keys.size
        @year += 1
        @month = 0
        @days_passed = 0
      end
    end
    $game_variables[MINUTE_VARIABLE] = @minute
    $game_variables[HOUR_VARIABLE] = @hour
    $game_variables[YEAR_VARIABLE] = @year
    $game_variables[DAY_VARIABLE] = @day
    $game_variables[MONTH_VARIABLE] = @month
    get_season
    if @seconds == 1000
      @seconds = 0
    end
  end
  
  def get_month_data(type)
    case type
    when 0
      return @month
    when 1
      return @month_name
    when 2
      return @month_day
    end
  end
  
  def get_day_data(type)
    case type
    when 0
      return @day
    when 1
      return @day_name
    end
  end
  
  def get_time_data(type)
    case type
    when 0
      return @second
    when 1
      return @minute
    when 2
      return @hour
    when 3
      return @year
    end
  end
  
  def get_season
    if REAL_TIME
      if @month == 12 || 1 || 2
        $game_switches[AUTUMN_SWITCH] = false
        $game_switches[SPRING_SWITCH] = false
        $game_switches[SUMMER_SWITCH] = false
        $game_switches[WINTER_SWITCH] = true
        return "Winter"
      elsif @month == 3 || 4 || 5
        $game_switches[AUTUMN_SWITCH] = false
        $game_switches[SUMMER_SWITCH] = false
        $game_switches[WINTER_SWITCH] = false
        $game_switches[SPRING_SWITCH] = true
        return "Spring"
      elsif @month == 6 || 7 || 8
        $game_switches[AUTUMN_SWITCH] = false
        $game_switches[SPRING_SWITCH] = false
        $game_switches[WINTER_SWITCH] = false
        $game_switches[SUMMER_SWITCH] = true
        return "Summer"
      elsif @month == 9 || 10 || 11
        $game_switches[SPRING_SWITCH] = false
        $game_switches[SUMMER_SWITCH] = false
        $game_switches[WINTER_SWITCH] = false
        $game_switches[AUTUMN_SWITCH] = true
        return "Autumn"
      end
    else
      if SUMMER_MONTHS.include?(@month)
        $game_switches[SUMMER_SWITCH] = true
        $game_switches[AUTUMN_SWITCH] = false
        $game_switches[SPRING_SWITCH] = false
        $game_switches[WINTER_SWITCH] = false
        return "Summer"
      elsif WINTER_MONTHS.include?(@month)
        $game_switches[AUTUMN_SWITCH] = false
        $game_switches[SPRING_SWITCH] = false
        $game_switches[SUMMER_SWITCH] = false
        $game_switches[WINTER_SWITCH] = true
        return "Winter"
      elsif AUTUMN_MONTHS.include?(@month)
        $game_switches[SPRING_SWITCH] = false
        $game_switches[SUMMER_SWITCH] = false
        $game_switches[WINTER_SWITCH] = false
        $game_switches[AUTUMN_SWITCH] = true
        return "Autumn"
      elsif SPRING_MONTHS.include?(@month)
        $game_switches[AUTUMN_SWITCH] = false
        $game_switches[SUMMER_SWITCH] = false
        $game_switches[WINTER_SWITCH] = false
        $game_switches[SPRING_SWITCH] = true
        return "Spring"
      end
    end
  end
  
  def get_weather
    random_weather = get_season
    new_weather = []
    case random_weather
    when "Winter"
      new_weather.push("Clear")
      if RAIN_SEASONS.include?(0)
        new_weather.push("Rain")
      end
      if SNOW_SEASONS.include?(0)
        new_weather.push("Snow")
      end
      if STORM_SEASONS.include?(0)
        new_weather.push("Storm")
      end
      stuff = rand(new_weather.size - 1)
      @more_stuff = new_weather[stuff]
    when "Autumn"
      new_weather.push("Clear")
      if RAIN_SEASONS.include?(1)
        new_weather.push("Rain")
      end
      if SNOW_SEASONS.include?(1)
        new_weather.push("Snow")
      end
      if STORM_SEASONS.include?(1)
        new_weather.push("Storm")
      end
      stuff = rand(new_weather.size - 1)
      @more_stuff = new_weather[stuff]
    when "Summer"
      new_weather.push("Clear")
      if RAIN_SEASONS.include?(2)
        new_weather.push("Rain")
      end
      if SNOW_SEASONS.include?(2)
        new_weather.push("Snow")
      end
      if STORM_SEASONS.include?(2)
        new_weather.push("Storm")
      end
      stuff = rand(new_weather.size - 1)
      @more_stuff = new_weather[stuff]
    when "Spring"
      new_weather.push("Clear")
      if RAIN_SEASONS.include?(3)
        new_weather.push("Rain")
      end
      if SNOW_SEASONS.include?(3)
        new_weather.push("Snow")
      end
      if STORM_SEASONS.include?(3)
        new_weather.push("Storm")
      end
      stuff = rand(new_weather.size - 1)
      @more_stuff = new_weather[stuff]
    end
    case @more_stuff
    when "Clear"
      screen.weather(0, 0, 0)
      $game_switches[RAIN_SWITCH] = false
      $game_switches[STORM_SWITCH] = false
      $game_switches[SNOW_SWITCH] = false
    when "Rain"
      screen.weather(1, 4 || 5, 999)
      $game_switches[RAIN_SWITCH] = true
      $game_switches[STORM_SWITCH] = false
      $game_switches[SNOW_SWITCH] = false
    when "Storm"
      screen.weather(2, 4 || 5, 999)
      $game_switches[RAIN_SWITCH] = false
      $game_switches[STORM_SWITCH] = true
      $game_switches[SNOW_SWITCH] = false
    when "Snow"
      screen.weather(3, 4 || 5, 999)
      $game_switches[RAIN_SWITCH] = false
      $game_switches[STORM_SWITCH] = false
      $game_switches[SNOW_SWITCH] = true
    end
  end

  def get_time_of_day
    if REAL_TIME
      if (18..21) === @hour
        $game_switches[DUSK_SWITCH] = true
        $game_switches[DAWN_SWITCH] = false
        $game_switches[DAY_SWITCH] = false
        $game_switches[NIGHT_SWITCH] = false
        $light_switch = true
        return "Dusk"
      elsif (22..24) === @hour || (1..3) === @hour
        $game_switches[DUSK_SWITCH] = false
        $game_switches[DAWN_SWITCH] = false
        $game_switches[DAY_SWITCH] = false
        $game_switches[NIGHT_SWITCH] = true
        $light_switch = true
        return "Night"
      elsif (4..7) === @hour
        $game_switches[DUSK_SWITCH] = false
        $game_switches[DAWN_SWITCH] = true
        $game_switches[DAY_SWITCH] = false
        $game_switches[NIGHT_SWITCH] = false
        $light_switch = false
        return "Dawn"
      elsif (8..17) === @hour
        $game_switches[DUSK_SWITCH] = false
        $game_switches[DAWN_SWITCH] = false
        $game_switches[DAY_SWITCH] = true
        $game_switches[NIGHT_SWITCH] = false
        $light_switch = false
        return "Day"
      end
    else
      if DUSK_HOURS.include?(@hour)
        $game_switches[DUSK_SWITCH] = true
        $game_switches[DAWN_SWITCH] = false
        $game_switches[DAY_SWITCH] = false
        $game_switches[NIGHT_SWITCH] = false
        $light_switch = true
        return "Dusk"
      elsif DAWN_HOURS.include?(@hour)
        $game_switches[DUSK_SWITCH] = false
        $game_switches[DAWN_SWITCH] = true
        $game_switches[DAY_SWITCH] = false
        $game_switches[NIGHT_SWITCH] = false
        $light_switch = false
        return "Dawn"
      elsif NIGHT_HOURS.include?(@hour)
        $game_switches[DUSK_SWITCH] = false
        $game_switches[DAWN_SWITCH] = false
        $game_switches[DAY_SWITCH] = false
        $game_switches[NIGHT_SWITCH] = true
        $light_switch = true
        return "Night"
      elsif DAY_HOURS.include?(@hour)
        $game_switches[DUSK_SWITCH] = false
        $game_switches[DAWN_SWITCH] = false
        $game_switches[DAY_SWITCH] = true
        $game_switches[NIGHT_SWITCH] = false
        $light_switch = false
        return "Day"
      end
    end
  end
end

$game_time = Game_Time.new

class Window_DayNight < Window_Base
  
  include Jet_DayNight
  
  def initialize
    super(0, 360, 160, 56)
    refresh
  end
  
  def refresh
    self.contents.clear
    $game_time.update_time unless UPDATE_ONLY_ON_MAP
    if MILITARY_TIME
      if $game_time.minute < 10
        self.contents.draw_text(0, 0, 140, WLH, $game_time.day_name + "  " + $game_time.hour.to_s + ":" + 0.to_s + $game_time.minute.to_s)
      else
        self.contents.draw_text(0, 0, 140, WLH, $game_time.day_name + "  " + $game_time.hour.to_s + ":" + $game_time.minute.to_s)
      end
    else        
      if $game_time.minute < 10
        if $game_time.hour > 12
          self.contents.draw_text(0, 0, 140, WLH, $game_time.day_name + "  " + ($game_time.hour - 12).to_s + ":" + 0.to_s + $game_time.minute.to_s + " " + "PM")
        else
          self.contents.draw_text(0, 0, 140, WLH, $game_time.day_name + "  " + $game_time.hour.to_s + ":" + 0.to_s + $game_time.minute.to_s + " " + "AM")
        end
      else
        if $game_time.hour > 12
          self.contents.draw_text(0, 0, 140, WLH, $game_time.day_name + "  " + ($game_time.hour - 12).to_s + ":" + $game_time.minute.to_s + " " + "PM")
        else
          self.contents.draw_text(0, 0, 140, WLH, $game_time.day_name + "  " + $game_time.hour.to_s + ":" + $game_time.minute.to_s + " " + "AM")
        end
      end
    end
  end
  
  def update
    refresh
  end
end

class Scene_Base
  
  include Jet_DayNight
  
  alias jet8922_update update unless $@
  def update
    jet8922_update
    if UPDATE_ONLY_ON_MAP
      $game_time.update_time if $scene.is_a?(Scene_Map)
    else
      $game_time.update_time unless $scene.is_a?(Scene_Title)
    end
  end
end

class Scene_Menu
  
  alias jet3922_start start unless $@
  def start
    jet3922_start
    @time_window = Window_DayNight.new if MENU_TIME_WINDOW
    @time_window.y = 304 if MENU_TIME_WINDOW
  end
  
  alias jet3022_terminate terminate unless $@
  def terminate
    @time_window.dispose if MENU_TIME_WINDOW
    jet3022_terminate
  end
  
  alias jet3026_update update unless $@
  def update
    jet3026_update
    @time_window.update if MENU_TIME_WINDOW
  end
end

class Game_Interpreter
  
  def jump_to_hour(hour)
    if hour < 24
      if hour > 0
        $game_time.hour = hour
      else
        p "Hour must be above 0 and below 25, please edit the command."
      end
    else
      p "Hour must be above 0 and below 25, please edit the command."
    end
  end
  
  def add_time(time, amount)
    case time
    when "minute"
      loop do
        $game_time.minute += 1
        amount -= 1
        if amount == 0
          break
        end
      end
    when "hour"
      loop do
        $game_time.hour += 1
        amount -= 1
        if amount == 0
          break
        end
      end
    when "day"
      loop do
        $game_time.day += 1
        amount -= 1
        if amount == 0
          break
        end
      end
    when "month"
      loop do
        $game_time.month += 1
        amount -= 1
        if amount == 0
          break
        end
      end
    when "year"
      loop do
        $game_time.year += 1
        amount -= 1
        if amount == 0
          break
        end
      end
    end
  end
  
  def freeze_time(option)
    if option == true
      $game_time.frozen_time = true
    elsif option == false
      $game_time.frozen_time = false
    elsif
      p "The option you chose was neither true or false. Please error check and try again"
    end
  end
end

class Window_NumberInput
  
  def index=(new_index)
    @index = new_index
  end
end

class Scene_Rest < Scene_Base
  
  def start
    super
    create_menu_background
    if $game_time.frozen_time
      @notification_window = Window_Help.new
      @notification_window.y = 188
      @notification_window.set_text("Time is frozen, so you may not rest. Press enter to continue.", 1)
    else
      @number_window = Window_NumberInput.new
      @number_window.digits_max = 3
      @number_window.x = 210
      @number_window.y = 190
      @number_window.index = 2
      @number_window.active = true
      @description_window = Window_Help.new
      @description_window.set_text("How many hours would you like to rest?", 1)
      @decoration_window = Window_Base.new(210, 190, 120, 56)
    end
  end
  
  def terminate
    super
    if $game_time.frozen_time
      @notification_window.dispose
      dispose_menu_background
    else
      @number_window.dispose
      @description_window.dispose
      @decoration_window.dispose
      dispose_menu_background
    end
  end
  
  def update
    if $game_time.frozen_time
      if Input.trigger?(Input::C)
        $scene = Scene_Map.new
      end
    else
      @number_window.update
      if Input.trigger?(Input::C)
        loop do      
          $game_time.hour += 1
          $game_time.update_time
          @number_window.number -= 1
          @number_window.update
          Graphics.wait(10)
          if @number_window.number == 0
            break
          end
        $scene = Scene_Map.new
        end
      end
      if Input.trigger?(Input::B)
        $scene = Scene_Map.new
      end
    end
  end
end
      
class Scene_Map
  
  include Jet_DayNight
  
  alias jet3829_start start unless $@
  def start
    unless $game_time.map_infos[$game_map.map_id].indoors?
      $instant_tint = true
      $game_time.get_weather unless $first_weather
      $first_weather = true
    end
    @time_window = Window_DayNight.new if MAP_TIME_WINDOW
    @time_window.x = MAP_TIME_WINDOW_COORDS[0] if MAP_TIME_WINDOW
    @time_window.y = MAP_TIME_WINDOW_COORDS[1] if MAP_TIME_WINDOW
    jet3829_start
  end
  
  alias jet3023_update update unless $@
  def update
    if @message_window.openness > 0 && MAP_TIME_WINDOW
      @time_window.visible = false
    elsif MAP_TIME_WINDOW
      @time_window.visible = true
    end
    @time_window.update if MAP_TIME_WINDOW
    update_rest if ALLOW_REST
    jet3023_update
  end
  
  alias jet6454_terminate terminate unless $@
  def terminate
    @time_window.dispose if MAP_TIME_WINDOW
    jet6454_terminate
  end
  
  def update_rest
    if Input.trigger?(REST_BUTTON)
      snapshot_for_background
      $scene = Scene_Rest.new
    end
  end
end
      
class Scene_File
  
  alias jet3890_write_save_data write_save_data unless $@
  def write_save_data(file)
    jet3890_write_save_data(file)
    Marshal.dump($game_time, file)
  end
  
  alias jet5935_read_save_data read_save_data unless $@
  def read_save_data(file)
    jet5935_read_save_data(file)
    $game_time = Marshal.load(file)
  end
end

class Spriteset_Map
  
  include Jet_DayNight
  
  if THOMAS_EDISON_COMPATABILITY
    alias jet3422_update_light_effects update_light_effects unless $@
    def update_light_effects
      if $light_switch || $game_time.map_infos[$game_map.map_id].indoors?
        jet3422_update_light_effects
      else
        for effect in @light_effects
          effect.light.visible = false
        end
      end
    end
  end
end

class Game_Battler
  
  include Jet_DayNight
  
  if ALIGNMENT_SYSTEM_COMPATABILITY

    def atk
      n = [[base_atk + @atk_plus, 1].max, 999].min
      for state in states do n *= state.atk_rate / 100.0 end
      n = [[Integer(n), 1].max, 999].min
      if $game_system.alignment < 0 && $light_switch
        n *= BAD_BONUS[0]
      elsif $game_system.alignment > 0 && !$light_switch
        n *= GOOD_BONUS[0]
      end
      return n
    end

    def def
      n = [[base_def + @def_plus, 1].max, 999].min
      for state in states do n *= state.def_rate / 100.0 end
      n = [[Integer(n), 1].max, 999].min
      if $game_system.alignment < 0 && $light_switch
        n *= BAD_BONUS[1]
      elsif $game_system.alignment > 0 && !$light_switch
        n *= GOOD_BONUS[1]
      end
      return n
    end

    def spi
      n = [[base_spi + @spi_plus, 1].max, 999].min
      for state in states do n *= state.spi_rate / 100.0 end
      n = [[Integer(n), 1].max, 999].min
      if $game_system.alignment < 0 && $light_switch
        n *= BAD_BONUS[2]
      elsif $game_system.alignment > 0 && !$light_switch
        n *= GOOD_BONUS[2]
      end
      return n
    end

    def agi
      n = [[base_agi + @agi_plus, 1].max, 999].min
      for state in states do n *= state.agi_rate / 100.0 end
      n = [[Integer(n), 1].max, 999].min
      if $game_system.alignment < 0 && $light_switch
        n *= BAD_BONUS[3]
      elsif $game_system.alignment > 0 && !$light_switch
        n *= GOOD_BONUS[3]
      end
      return n
    end
  end
end

class Game_Map
  
  alias jet5044_setup setup unless $@
  def setup(*args)
    jet5044_setup(*args)
    @map_infos = load_data("Data/MapInfos.rvdata")
    if @map_infos[@map_id].indoors?
      @screen.start_tone_change(Tone.new(0, 0, 0), 0)
      @screen.weather(0, 0, 0)
    end
  end
end

unless $engine_scripts.nil?
  JetEngine.active("DayNight System", "v1.2.1")
end  

FAQ

Spoiler for:
Q: Where do I put this script?
A: Put this script in the script edition under Materials and above Main

Q: How do i edit ______?
A: Look at the script configurations first! If you are SURE the option is not there, post in this topic.

Q: Can i freeze time?
A: Yes, you can. Look in the script intructions, or download the demo.

Q: What is military time?
A: Military time is when they use a 24-hour clock. Instead of 5 PM, it'd be 17.

Q:What is the difference between real time and script time?
A: Script time is entirely created and help BY the script. Real time draws the time set on your computer.

Credit

Jet10985/Jet
Mr. Anonymous
bulletxt if used with Thomas Edison VX
Kylock
Title: Re: Jet's Time System
Post by: modern algebra on April 14, 2010, 11:53:50 AM
Looks pretty neat. Great job jet!
Title: Re: Jet's Time System
Post by: Cascading Dragon on April 14, 2010, 01:49:25 PM
You have come a long way Jet. Have you ever got that durability script to work?
Title: Re: Jet's Time System
Post by: jet10985 on April 14, 2010, 10:26:57 PM
@MA: Tahnks, that means a lot coming from you =)

@redyugi: Nope.
Title: Re: Jet's Time System
Post by: Cascading Dragon on April 16, 2010, 04:09:52 PM
Why not? If you can do this, you could do a durability script. We have faith in you. Good luck :)
Title: Re: Jet's Time System
Post by: jet10985 on April 16, 2010, 10:28:10 PM
Thanks redyugi, i appreciate the feedback and support. I really just haven't remembered that i wanted it in the first place O_O
It'll get done eventually...
Title: Re: Jet's Time System
Post by: ?????? on April 19, 2010, 02:17:35 PM
;D ;D ;D GOOD SCRIPT... ;D ;D ;D
Title: Re: Jet's Time System
Post by: ????????????? on April 20, 2010, 05:43:57 PM
I think this script is very helpful  :)
Title: Re: Jet's Time System
Post by: Skyselarke on May 29, 2010, 01:28:28 PM
Hey Jet,

I'm new to these forums (stumbled upon them by accident from rpgrevolution.net) and saw yer script.  I absolutely love it as it's a lot easier to customize and it adds weather at random.  I did however find one glitch that I thought I should mention.

When testing my game, I noticed if I press continue (loading a saved game saved after I installed the script) and for some reason need to go back and do new game, the clock stays at where it was in the saved game.  However, if I start NEW without selecting continue, then it starts at the specified time.  I don't know if this might be a problem, but I thought I would mention it just in case.

If you come up with a fix let me know as I will be checking these forums a lot more.  They're more helpful than the rpgrevolution ones.

Sincerely,
Joshua A.

---- Edit----
Also, is there a way to have a menu option to select whether the person wants the clock displayed on the map or some kind of something?
Title: Re: Jet's Time System
Post by: Cascading Dragon on May 29, 2010, 06:29:01 PM
He hasnt' updated on here in a while. rpgmakervx.net is where he is frequently. Check there
Title: Re: Jet's Time System
Post by: Osaka on September 11, 2010, 09:57:05 PM
I guess this is the best place to ask.

I'm sure this is REALLY simple, but how do I make events based on certain times? I can't find any information on how to do it in the script files...
Title: Re: Jet's Time System
Post by: Cascading Dragon on September 11, 2010, 10:35:02 PM
The variables and switches you set up in the script. If you didn't set up variables and switches, it means you need to go through the beginning until it says
#===============================================================================
# DON'T EDIT FURTHER UNLESS YOU KNOW WHAT TO DO.
#===============================================================================
Title: Re: Jet's Time System
Post by: Osaka on September 11, 2010, 11:29:01 PM
The variables and switches you set up in the script. If you didn't set up variables and switches, it means you need to go through the beginning until it says
#===============================================================================
# DON'T EDIT FURTHER UNLESS YOU KNOW WHAT TO DO.
#===============================================================================

Thank you very much!
Title: Re: Jet's Time System
Post by: Wiimeiser on September 20, 2010, 02:42:29 AM
What does this mean? It's not a compatibility issue because I tried on a new project with no other scripts and got exactly the same error.
Title: Re: Jet's Time System
Post by: modern algebra on September 20, 2010, 03:08:22 AM
Try changing the line that says:
Code: [Select]
THOMAS_EDISON_COMPATABILITY = true

to:

Code: [Select]
THOMAS_EDISON_COMPATABILITY = false

See what that does for you.
Title: Re: Jet's Time System
Post by: Wiimeiser on September 20, 2010, 03:58:01 AM
That worked, thanks


Edit: How would I pause time and make custom interior lighting?
Title: Re: Jet's Time System
Post by: wsensor on September 28, 2010, 07:07:02 AM
What ever happened to time scripts that used the COMMENT text option to show up instead of requiring variables and such lol.
I really miss them... I do not think I have seen any of them for vx just the one or two on xp but its been so long since I even looked at xp and I lost so many scripts/downloaded/exclusive stuff that no longer seems to exist anymore lol.
Title: Re: Jet's Time System
Post by: krekka on November 07, 2010, 05:29:34 PM
Hey, Jet, I get this error (I know that guy posted it before but I MUST USE Thomas Edison): line 966 undefined method 'update_light_effects' for class 'Spriteset_Map'. Please help me... I will be forever grateful!
 :'(
Title: Re: Jet's Time System
Post by: DarthOctopus on February 03, 2011, 01:54:54 AM
Try putting Edison before Jet's Time System. That's what worked for me, I had the same problem.
Title: Re: Jet's Time System
Post by: Illuminatorr on February 05, 2011, 02:10:40 AM
Can you put up a new demo link please?