Main Menu
  • Welcome to The RPG Maker Resource Kit.

Jet's Time System

Started by jet10985, April 14, 2010, 04:04:43 AM

0 Members and 2 Guests are viewing this topic.

jet10985

Jet's Time System
By Jet (Obviously)


Introduction

[spoiler]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. =)[/spoiler]

Features

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

#===============================================================================
# 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]

[spoiler]#===============================================================================
# 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
#===============================================================================
[/spoiler]

Script/Demo

Download Demo Here (Might be outdated)

Script:
[spoiler]
#===============================================================================
# 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  
[/spoiler]

FAQ

[spoiler]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.[/spoiler]

Credit

Jet10985/Jet
Mr. Anonymous
bulletxt if used with Thomas Edison VX
Kylock



modern algebra

Looks pretty neat. Great job jet!

Cascading Dragon

You have come a long way Jet. Have you ever got that durability script to work?

jet10985

@MA: Tahnks, that means a lot coming from you =)

@redyugi: Nope.



Cascading Dragon

Why not? If you can do this, you could do a durability script. We have faith in you. Good luck :)

jet10985

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...



??????

遠い銀河からのスーパー戦士。
本は、セバスチャンです。
これは強力で、手に負えない。
彼の物理レベルのスキルは驚嘆です。[/b]

?????????????

I think this script is very helpful  :)

Skyselarke

#8
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?
If you add me to Yahoo, make sure you mention who you are or expect hell!
-------

Cascading Dragon

He hasnt' updated on here in a while. rpgmakervx.net is where he is frequently. Check there

Osaka

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...

Cascading Dragon

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.
#===============================================================================

Osaka

Quote from: redyugi 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.
#===============================================================================

Thank you very much!

Wiimeiser

#13
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.

modern algebra

Try changing the line that says:

THOMAS_EDISON_COMPATABILITY = true


to:


THOMAS_EDISON_COMPATABILITY = false


See what that does for you.

Wiimeiser

#15
That worked, thanks


Edit: How would I pause time and make custom interior lighting?

wsensor

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.

krekka

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!
:'(

DarthOctopus

Try putting Edison before Jet's Time System. That's what worked for me, I had the same problem.

Illuminatorr

Can you put up a new demo link please?

I am but a humble student of life. Come, let me show you what I've learned!