RMVX

Kylock 시간(밤낮) 시스템 VX 1.5 + RMdude 달력 모드 시스템 스크립트 오류

by 크로스vx posted Aug 12, 2014
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄
Extra Form


제가 이 스크립트를 쓰는데 저기 나온대로 $kts.hours(5)를 스크립트에 넣었는데 syntaxerror occurred while running script 오류가 뜨네요




#==============================================================================
# ■ Kylock's Time System VX 1.5(6.3.2008) + Calendar Mode (2009/2/14 by RMdude: RMdude@hotmail.com)
#     Kylock 시간(밤낮) 시스템 VX 1.5 + RMdude 달력 모드 시스템
#  Calendar Mode Version : BETA 1.00
#------------------------------------------------------------------------------
#  Original Kylock's Time System VX 1.5 Script by: Kylock
#  Calendar modification by: RMdude
#  [Note] This script is created by combining and modifying Kylock's Time system and
#              Sojabird's ten variables HUD script. I would keep Kylock's nots on script.
#              However, Sojabird's script has been extensively modified to fit the purpose
#              I also changed some variables so that you can also use Sojabird's script
#
#  원본 KTS VX 1.5 스크립트 제작: Kylock
#  달력 모드 업그레이드: RMDude
#  [알림] 이 스크립트는 Kylock의 Kylock's Time System Script 와 Sojabird 의 변수 표시 HUD
#   스크립트를 결합, 변형시켜 제작한 것입니다.
#
#==============================================================================
#    Mostly rewritten since XP version.  Cleaner code and less intrusive (more
#  compatible).  This is my comprehensive time and day/night system.  This
#  script adds a new window to the game menu, so if you use a CMS, then place
#  this script ABOVE it so that it won't mess up your CMS.  If you use a custom
#  script that makes changes to the battle background, place KTS below it so
#  that you don't get the delayed-tone effect in you battles.  Other than that,
#  there shouldn't be any other script compatibility issues.
#    I've tried to make this script as customizable as possible, the settings
#  are found immediately following this header.  Although time output to game
#  variables is optional, I strongly suggest using it so that its easier to
#  build your events based on the time in the game.
#==============================================================================
# ● Change Log
#------------------------------------------------------------------------------
#  1.0 - Original Release.
#  1.1 - Corrected tinting issue at the start of a battle.  Place this script
#          below any battle background scripts if you experience "jumpy tinting"
#  1.2 - Corrected the accuracy of $kts.stop and $kts.go
#  1.3 - $kts.stop really stops everything now.  Also added game switches for
#          even easier eventing.
#  1.4 - Fixed Battle Test compatibility (simulates normal daylight for battle
#          test instead of darkness).
#        Now switches and variables will only update when the map loads so that
#          events don't suddenly dissappear when their time is up.
#        Added $kts_anti_tone - returns an inverse tone color to allow sprites
#          to appear normally on a tinted screen.
#  1.5 - Rewrote the regexp that finds the [KTS] in the map name.  Hopefully
#          this resolves the wrong maps being tinted problem.
#==============================================================================
# ● Auto-tone Instructions
#------------------------------------------------------------------------------
#    Maps designated as outdoors are the only maps to be affected by this
#  scripts use of auto-toning.  To signify a map to be "outdoors", you must
#  include [KTS] In the name of the map.  For example, you world map could be
#  named "World Map [KTS]" or "[KTS] World Map".  Provisions are made later in
#  the script to remove [KTS] from the map name when it's read by another
#  script.  This means that "[KTS]" won't show up in your Map Name Popup
#  windows.
#  맵 이름에 [KTS]라고 들어가야만 밤낮 전환기능이 적용됩니다.
#==============================================================================
# ● Script Function Calls
#------------------------------------------------------------------------------
#    The following are script commands that can be executed by using the
#  "Script..." command in your events.
#    ● $kts.stop            - Stops time (can be used for cutscenes) 시간 정지
#    ● $kts.go              - Resumes time (don't forget to use this!) 시간 정지 해제
#    ● $kts.sec(n)          - progresses time forward (n) seconds n초 만큼 진행
#    ● $kts.min(n)          - progresses time forward (n) minutes n분 만큼 진행
#    ● $kts.hours(n)        - progresses time forward (n) hours n시간 만큼 진행
#    ● $kts.days(n)         - progresses time forward (n) days n일 만큼 진행
#    ● $kts.jump_to_hour(n) - progresses time forward TO the specified hour.
#                                            n 시로 이동
#                             Particularly useful in a situation where you
#                             want a certain event to happen at a certain time,
#                             or an Innkeeper who should wake the party up at
#                             a certain hour.  This command MAY cause your game
#                             to appear to freeze for a few seconds on slower
#                             computers.
#==============================================================================
# ● Game Database Setup
#------------------------------------------------------------------------------
#    This script, by defult, uses the following game variables and switches:
#     다음과 같은 변수 및 스위치를 사용합니다.
#  Database Variables:
#    [1] The Current Time 현재시각          [4] The Current Hour 현재 시간
#    [2] The Current Second  현재 초        [5] The Current Day 현재 일
#    [3] The Current Minute 현재 분          [6] Name of the Current Day 요일
#  Database Switches 다음 시간에 켜지는 스위치들
#    [1] ON during night hours   (2200-0400)(10pm-4am) 밤
#    [2] ON during dawn hours    (0500-0800)( 5am-8am) 새벽
#    [3] ON during daytime hours (0900-1800)( 9am-6pm) 낮
#    [4] ON during sunset hours  (1900-2100)( 7pm-9pm) 해질녘
#==============================================================================

#==============================================================================
# Stores variables and user defined settings for the time system.
#==============================================================================
module KTS
  #-----------------------------------------------------------------------
  # User Definable Clock Settings
  #-----------------------------------------------------------------------
  # 현실 시간보다 몇배 빨리 타이머가 돌아갈 것인지 지정합니다.
  SPEED      = 30
  #AMPM (True: 12시간 시스템(오전 오후 구분), False: 24시간 시스템)
  AMPM       = true
  # 시작시 날짜와 시간 지정
  START_HOUR = 12
  START_DAY  = 0
 
  # designate number of days for each month 각 달의 일수
  JAN = 31
  FEB =28
  MAR = 31
  APR = 30
  MAY = 31
  JUN = 30
  JUL = 31
  AUG = 31
  SEP = 30
  OCT = 31
  NOV = 30
  DEC = 31
 
  MON1 = JAN
  MON2 = MON1 + FEB
  MON3 = MON2 + MAR
  MON4 = MON3 + APR
  MON5 = MON4 + MAY
  MON6 = MON5 + JUN
  MON7 = MON6 + JUL
  MON8 = MON7 + AUG
  MON9 = MON8 + SEP
  MON10 = MON9 + OCT
  MON11 = MON10 + NOV
  YRDY = MON11 + DEC
 
 
  WKOS = 0 # 요일 보정. 0으로 하면 일요일로 시작. 1식 더하면 각각 월화수목금토
  STYR =2014 # 시작하는 연도
    STMON = 8 # 시작 하는 달
    STDAY = 10 # 시작하는 일
 
  HUD_SWITCH = 30 # 달력 표시 스위치번호

  FILE = "Window" # 윈도우 스타일 파일이름 지정
 
  #표시 위치
  X_PLACEMENT = 2 # 왼쪽=1, 오른쪽=2
  Y_PLACEMENT = 1 # 위쪽=1, 가운데=2, 아래쪽=3
 
  WIDTH = 180 # HUD 창의 너비
   
 
  #-----------------------------------------------------------------------
  # If you want custom day names, edit away!
  #-----------------------------------------------------------------------
  # 요일 이름
  DAY_NAMES = ["일요일","월요일","화요일","수요일","목요일","금요일","토요일"]
  # 요일 약칭
  DAY_ABR = ["(일)","(월)","(화)","(수)","(목)","(금)","(토)"]
  #-----------------------------------------------------------------------
  # Settings for Time Periods
  #-----------------------------------------------------------------------
  T1 = [ 0,5 ] # 밤        # Sets time periods for tinting effects
  T2 = [ 6,8 ] # 새벽          # [Start Hour, End Hour] for time period
  T3 = [ 9,18] # 일          # Use 24-hour values for time periods
  T4 = [19,21] # 황혼
  T5 = [22,24] # 저녁        # <- Ex: Night is between 23:00 and 24:00
  #-----------------------------------------------------------------------
  # Settings for Output to Game Variables option.
  #-----------------------------------------------------------------------
  # Set this to true to output the current time to game variables.
  DATABASE_OUTPUT = true
    # Game Variable to be used for time output.
    # 각각의 요소들을 저장하는 변수를 지정합니다.
    TIME    = 100 #(Time in string format. Ex: "2:48 AM" or "02:48")
    SECONDS = 99
    MINUTES = 98
    HOURS   = 97
    DAYS    = 96
    DAYNAME = 95
    CALDAYNAME = 94
    CALENDARDAY = 93
    CALENDARMONTH = 92
    CALENDARYEAR = 91
    DATE = 90
    # Game Switches to be used for time output.
    # 가 시간대 별로 꺼지고 켜지는 스위치들
    NIGHT   = 13 # This switch is on during night hours   (2200-0400)(10pm-4am)
    DAWN    = 14 # This switch is on during dawn hours    (0500-0800)( 5am-8am)
    DAY     = 100 # This switch is on during daytime hours (0900-1800)( 9am-6pm)
    SUNSET  = 100 # This switch is on during sunset hours  (1900-2100)( 7pm-9pm)
     

  #-----------------------------------------------------------------------
  # Settings for time controlled screen toning
  #-----------------------------------------------------------------------
  # True will enable screen toning to be used by the script.
  USE_TONE = true
  # Sets the duration of tone changes (in frames)
  FADE_LENGTH = 120
  # Defines tones to be used in the corresponding time periods defined above.
  #              RED, GREEN, BLUE, GREY
  C1 = Tone.new(-187,  -119,  -17,  68)
  C2 = Tone.new(  17,   -51, -102,   0)
  C3 = Tone.new(   0,     0,    0,   0)
  C4 = Tone.new( -68,  -136,  -34,   0)
  C5 = Tone.new(-187,  -119,  -17,  68)
  # Defines anti-tones
  A1 = Tone.new( 187,   119,   17, -68)
  A2 = Tone.new( -17,    51,  102,   0)
  A3 = Tone.new(   0,     0,    0,   0)
  A4 = Tone.new(  68,   136,   34,   0)
  A5 = Tone.new( 187,   119,   17, -68)


     
end

#==============================================================================
# Core Time System Engine
#==============================================================================
class Kylock_Time_System
  # sets instance variables
  def initialize
    $kts_map_data = load_data("Data/MapInfos.rvdata")
    @event_offset = (KTS::START_HOUR * 3600) + (KTS::START_DAY * 86400)
    @kts_stop = false
    $kts_event_tone = false
    $kts_battle_tone = true
    $kts_anti_tone = Tone.new(0,0,0,0)
  end
 
  # Computes current time and updates variables if used
  def update
    if !@kts_stop
      @total_seconds = (Graphics.frame_count * KTS::SPEED / 60) + @event_offset
      @seconds = (@total_seconds) % 60
      @minutes = (@total_seconds / 60) % 60
      @hours   = (@total_seconds / 3600) % 24
      @days    = (@total_seconds / 86400)
     
 # Calculate past days before game    
    @psday = KTS::STYR*365 + KTS::STDAY - KTS::START_DAY
    if KTS::STMON == 2
      @psday += KTS::MON1
    elsif KTS::STMON ==3
      @psday += KTS::MON2
    elsif KTS::STMON == 4
      @psday += KTS::MON3
       elsif KTS::STMON == 5
      @psday += KTS::MON4
       elsif KTS::STMON == 6
      @psday += KTS::MON5
       elsif KTS::STMON == 7
      @psday += KTS::MON6
       elsif KTS::STMON == 8
      @psday += KTS::MON7
       elsif KTS::STMON == 9
      @psday += KTS::MON8
       elsif KTS::STMON == 10
      @psday += KTS::MON9
       elsif KTS::STMON == 11
      @psday += KTS::MON10
       elsif KTS::STMON == 12
      @psday += KTS::MON11
    else
      @psday += 0
    end
   
 # calculate calendar    
  @yearday = @days + @psday
  @yearday %= KTS::YRDY
  @calendaryear = @days + @psday - @yearday
  @calendaryear /= KTS::YRDY
  if @yearday > KTS::MON11
    @calendarmonth = 12
    @calendarday = @yearday - KTS::MON11
  elsif @yearday > KTS::MON10
    @calendarmonth = 11
        @calendarday = @yearday - KTS::MON10
    elsif @yearday > KTS::MON9
    @calendarmonth = 10
        @calendarday = @yearday - KTS::MON9
      elsif @yearday > KTS::MON8
    @calendarmonth = 9
           @calendarday = @yearday - KTS::MON8
      elsif @yearday > KTS::MON7
    @calendarmonth = 8
    @calendarday = @yearday - KTS::MON7
      elsif @yearday > KTS::MON6
    @calendarmonth = 7
    @calendarday = @yearday - KTS::MON6
      elsif @yearday > KTS::MON5
    @calendarmonth = 6
    @calendarday = @yearday - KTS::MON5
      elsif @yearday > KTS::MON4
    @calendarmonth = 5
    @calendarday = @yearday - KTS::MON4
      elsif @yearday > KTS::MON3
    @calendarmonth = 4
    @calendarday = @yearday - KTS::MON3
      elsif @yearday > KTS::MON2
    @calendarmonth = 3
    @calendarday = @yearday - KTS::MON2
      elsif @yearday > KTS::MON1
    @calendarmonth = 2
    @calendarday = @yearday - KTS::MON1
  else
    @calendarmonth = 1
    @calendarday = @yearday
  end
 
      update_tint
      if KTS::DATABASE_OUTPUT
        $game_variables[KTS::TIME]    = getTime
        $game_variables [KTS::DATE] = getDate
        $game_variables[KTS::CALDAYNAME] = getDayNamespr
        $game_variables[KTS::DAYNAME] = getDayName
      end
    end
  end

  def update_variables
    $game_variables[KTS::SECONDS] = @seconds
    $game_variables[KTS::MINUTES] = @minutes
    $game_variables[KTS::HOURS]   = @hours
    $game_variables[KTS::DAYS]    = @days

   
    $game_variables[KTS::CALENDARDAY] = @calendarday
    $game_variables[KTS::CALENDARMONTH] = @calendarmonth
    $game_variables[KTS::CALENDARYEAR] = @calendaryear   
  end
 
  def update_switches
    if @period == 1 || @period == 5
      $game_switches[KTS::NIGHT] = true
    else
      $game_switches[KTS::NIGHT] = false
    end
    if @period == 2
      $game_switches[KTS::DAWN] = true
    else
      $game_switches[KTS::DAWN] = false
    end
    if @period == 3
      $game_switches[KTS::DAY] = true
    else
      $game_switches[KTS::DAY] = false
    end
    if @period == 4
      $game_switches[KTS::SUNSET] = true
    else
      $game_switches[KTS::SUNSET] = false
    end
  end

  def getTime
    if KTS::AMPM
      # Formats a 12-Hour Clock
      if @hours > 12
        hours1 = @hours - 12
        if hours1 > 9
          time = sprintf("오후" + " %02d시 %02d분", hours1, @minutes)
        else
          time = sprintf("오후" + " %01d시 %02d분", hours1, @minutes)
        end
      else
        if @hours > 9
          time = sprintf("오전" + " %02d시 %02d분", @hours, @minutes)
        else
          time = sprintf("오전" + " %01d시 %02d분", @hours, @minutes)
        end
      end
      return time
    else
      # Formats a 24-Hour Clock
      time = sprintf("%02d시 %02d분", @hours, @minutes)
      return time
    end
  end
 
  def getDate
      if @calendaryear >999
      date = sprintf("%04d/%02d/%02d", @calendaryear, @calendarmonth, @calendarday )
      elsif @calendaryear >99
       date = sprintf("%03d/%02d/%02d", @calendaryear, @calendarmonth, @calendarday)
      elsif @calendaryear >9
       date = sprintf("%02d/%02d/%02d", @calendaryear, @calendarmonth, @calendarday)
      else
       date = sprintf("%01d/%02d/%02d", @calendaryear, @calendarmonth, @calendarday)
       end
       return date
     end
    
 
  #-----------------------------------------------------------------------
  # Script Command Functions
  #-----------------------------------------------------------------------
  def stop
    @time_stopped = @total_seconds
    @kts_stop = true
  end
  def go
    total_seconds = (Graphics.frame_count * KTS::SPEED / 60) + @event_offset
    @event_offset -= (total_seconds - @time_stopped)
    @kts_stop = false
  end
  def sec(sec = 0)
    @event_offset += sec
  end
  def min(min = 0)
    @event_offset += min * 60
  end
  def hours(hours = 0)
    @event_offset += hours * 3600
  end
  def days(days = 0)
    @event_offset += days * 86400
  end
  def jump_to_hour(jhour = 0)
    while @hours != jhour
      @event_offset += 1
      $kts.update
    end
  end
  #-----------------------------------------------------------------------
  # Script Support/Misc Functions
  #-----------------------------------------------------------------------
  def getDayName
    weekday = @days + KTS::WKOS - KTS::START_DAY
    weekday %= KTS::DAY_NAMES.length
    return KTS::DAY_NAMES[weekday]
  end
 
def getDayNamespr
 weekdayspr = @days + KTS::WKOS - KTS::START_DAY
 weekdayspr %= KTS::DAY_NAMES.length
 return KTS::DAY_ABR[weekdayspr]
 end

  #-----------------------------------------------------------------------
  # Screen Tone Functions
  #-----------------------------------------------------------------------
  def update_tint(duration = KTS::FADE_LENGTH)
    return if $BTEST
    if KTS::USE_TONE && !$kts_event_tone && $kts_map_data[$game_map.map_id].outside_tint?
      if @hours >= KTS::T1[0] and @hours <= KTS::T1[1]
        @period = 1
        screen.start_tone_change(KTS::C1,duration)
        $kts_anti_tone = KTS::A1
      elsif @hours >= KTS::T2[0] and @hours <= KTS::T2[1]
        @period = 2
        screen.start_tone_change(KTS::C2,duration)
        $kts_anti_tone = KTS::A2
      elsif @hours >= KTS::T3[0] and @hours <= KTS::T3[1]
        @period = 3
        screen.start_tone_change(KTS::C3,duration)
        $kts_anti_tone = KTS::A3
      elsif @hours >= KTS::T4[0] and @hours <= KTS::T4[1]
        @period = 4
        screen.start_tone_change(KTS::C4,duration)
        $kts_anti_tone = KTS::A4
      elsif @hours >= KTS::T5[0] and @hours <= KTS::T5[1]
        @period = 5
        screen.start_tone_change(KTS::C5,duration)
        $kts_anti_tone = KTS::A5
      end
    else
      # no tone if indoors
      if !$kts_map_data[$game_map.map_id].outside_tint?
        screen.start_tone_change(Tone.new(0,0,0,0),duration)
      end
    end
  end
  def screen
    if $game_temp.in_battle
      return $game_troop.screen
    else
      return $game_map.screen
    end
  end
end

class Spriteset_Map
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  alias kts_initialize initialize
  def initialize
    $kts.update_switches if !@kts_stop && KTS::DATABASE_OUTPUT
    $kts.update_variables if !@kts_stop && KTS::DATABASE_OUTPUT
    kts_initialize
  end
end

#==============================================================================
# Instantly updates screen tone when a new map is loaded.
#==============================================================================
class Game_Map
  alias kts_setup setup
  def setup(map_id)
    kts_setup(map_id)
    $kts_event_tone = false
    $kts.update
    $kts.update_tint(0)
  end
end

#==============================================================================
# Instantly updates screen tone when a battle starts.
#==============================================================================
class Spriteset_Battle
  alias kts_create_battleback create_battleback
  def create_battleback
    $kts.update_tint(0)
    kts_create_battleback
  end
end

#==============================================================================
# Temporarily disables auto-toning if an event tints the screen.
#==============================================================================
class Game_Interpreter
  alias kts_Interpreter_command_223 command_223
  def command_223
    $kts_event_tone = true
    kts_Interpreter_command_223
  end
end

#==============================================================================
# Integrates the Time System into the Game System.
#==============================================================================
class Game_System
  # inits a KTS object
  alias kts_initialize initialize
  def initialize
    $kts=Kylock_Time_System.new
    kts_initialize
  end
  # Updates kts every game frame
  alias kts_update update
  def update
    $kts.update
    kts_update
  end
end

#==============================================================================
# Scans Map Names for Toning
#==============================================================================
class RPG::MapInfo
  def name # Definition prevents location scripts from reading anything within
    return @name.gsub(/[.*]/) {""} # brackets, including the brackets
  end
  def original_name
    return @name
  end
  def outside_tint?
    return @name.scan(/[KTS]/).size > 0
    # old regexp: return @name.scan(/[KTS]/).size > 0
  end
end

#==============================================================================
# Sets up the time window for the menu.
#==============================================================================
class Window_KTS < Window_Base
  def initialize(x, y)
    super(x, y, 160, WLH + 32)
    refresh
  end
  def refresh
    self.contents.clear
    self.contents.draw_text(4, -6, 120, 32, $kts.getTime, 2)
  end
  def update
    super
    $kts.update
    self.contents.clear
    self.contents.draw_text(4, -6, 120, 32, $kts.getTime, 2)
  end
end

#==============================================================================
# Adds the time window to the menu.
#==============================================================================
class Scene_Menu < Scene_Base
  alias kts_start start
  def start
    kts_start
    @kts_window = Window_KTS.new(0,305)
  end
  alias kts_terminate terminate
  def terminate
    kts_terminate
    @kts_window.dispose
  end
  alias kts_update update
  def update
    kts_update
    @kts_window.update
  end
end

#==============================================================================
# Saves and Loads game time to/from save game file.
#==============================================================================
class Scene_File
  alias kts_write_save_data write_save_data
  def write_save_data(file)
    kts_write_save_data(file)
    Marshal.dump($kts, file)
  end
  alias kts_read_save_data read_save_data
  def read_save_data(file)
    kts_read_save_data(file)
    $kts = Marshal.load(file)
  end
end

 

class Window_HUD_VARS < Window_Base

  def initialize
    super(0, 0, KTS::WIDTH, 80)
    case KTS::X_PLACEMENT
      when 1
        self.x = 0
      when 2
        self.x = 544 - KTS::WIDTH
      end
    case KTS::Y_PLACEMENT
      when 1
        self.y = 0
      when 2
        self.y = 208-(80)/2
      when 3
        self.y = 416-(80)
      end
    self.windowskin = Cache.system(KTS::FILE)
    self.visible = $game_switches[KTS::HUD_SWITCH]
    refresh
  end

  def refresh
    contents.clear
    # get values
    @v1 = $game_variables[KTS::DATE]
    @v2 = $game_variables[KTS::TIME]
    @v3 = $game_variables[KTS::CALDAYNAME]
    # draw values
    contents.draw_text(0, 0, contents.width - 0, WLH, @v1, 0)
    contents.draw_text(0, 24, contents.width - 0, WLH, @v2, 2)
    contents.draw_text(0, 0, contents.width - 0, WLH, @v3, 2)
  end
 
  def update
    self.visible = $game_switches[KTS::HUD_SWITCH]
    return if !self.visible
    if @v1 != $game_variables[KTS::DATE] or
      @v2 != $game_variables[KTS::TIME] or
      @v3 != $game_variables[KTS::CALDAYNAME]
      refresh
    end
  end
end

#------------------------------------------------------------
# * Scene_Map: Attach HUD to map
#------------------------------------------------------------
class Scene_Map < Scene_Base
  alias soja_scemap_sta_hudv start
  alias soja_scemap_ter_hudv terminate
  alias soja_scemap_upd_hudv update
  def start
    soja_scemap_sta_hudv
    @soj_hudv = Window_HUD_VARS.new
  end
  def terminate
    @soj_hudv.dispose
    soja_scemap_ter_hudv
  end
  def update
    soja_scemap_upd_hudv
    @soj_hudv.update
  end
end