2005.06.25 02:15

밤/낮

조회 수 174 추천 수 1 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

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

단축키

Prev이전 문서

Next다음 문서

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

>스크립트 없나요?
사용법 :

도입 후, 커스터마이즈 항목을 기호에 따라 변경해 주세요.

이벤트 커멘드 「스크립트」로
$game_system.daynight_change = (true|false)
그렇다고 하는 스크립트를 입력하면, 밤낮 변환을 제어할 수 있습니다.
(↑ true 또는 false (을)를 지정)
전투중만 밤낮 변환을 제어하는 경우는
$game_system.daynight_change_battle = (true|false)
(을)를 사용합니다.
다만, $game_system.daynight_change 하지만 false 의 경우는 전투중도 무효가 됩니다.

현재 상태는
x = now_daynight
그리고 취득할 수 있습니다. 이벤트의 조건 분기등에 사용하는 경우는
$game_variables[id] = now_daynight
(을)를 사용합니다.( id (은)는 변수 ID)
phase  내용  
0  주  
1  저녁  
2  야  
3  조  
(개조했을 경우는 변동)

x = now_daynight_name
그리고 현재 상태명(낮이나 밤등)을 취득할 수 있습니다.

여인숙의 처리등 때문에, 낮이나 밤에 수동으로 바꾸는 경우는
change_daynight(phase[, duration, pass_days])
(을)를 사용합니다.
phase (은)는 변경 후 상태(↑를 참조), duration (은)는 변경에 걸치는 시간(프레임)입니다.
(생략 하면 duration = 40 하지만 적용됩니다)
pass_days (은)는 상태 변화 후에 경과시키는 날짜를 입력합니다.
(생략 하면 날짜는 가산되지 않습니다)
이벤트등으로 날짜를 경과시키고 싶은 경우에도 사용할 수 있습니다.
<례> change_daynight(0, 0, 1) # 0 프레임으로 낮으로 이행해, 1일 경과시킨다
현재의 경과일수는
x = $game_system.daynight_pass_days
그리고 취득할 수 있습니다.(직접 고쳐 쓰는 일도 가능)

건조물의 내부에 들어갔을 때 등 , 일시적으로 통상시에 되돌리고 싶은 경우도 있습니다.
그 경우는
$game_system.daynight_change = false
$game_screen.daynight_default(0)
(을)를 실행하는 것으로, 통상의 색조에 되돌릴 수 있습니다.
반대로, 해당 장소에서 나올 때
$game_system.daynight_change = true
$game_screen.daynight_apply(0)
(을)를 실행하는 것으로, 이전 상태를 재현할 수 있습니다.
(0) 에는, 변환 시간을 프레임 단위로 지정합니다.
무리명에 [DN ...] (을)를 더하면, 적의 출현 조건을 설정할 수 있습니다.
... 에는, 그 무리를 출현시키는 상태( phase )(을)를 콤마 단락으로 입력합니다.
지정시, 수치의 전에 - (을)를 넣으면, 지정했다 phase (을)를 출현 조건으로부터 제외합니다.

「밤」마셔 출현시키는 경우:[DN 2]
「주·조」는 출현시키지 않는 경우:[DN -0,-3]
([DN-0,-3](이)나[DN -0, -3](와)과 같이, 공백을 들어갈 수 있어도 넣지 않아도 상관하지 않습니다)



#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/  ◆밤낮 변환 - KGC_DayNight◆
#_/----------------------------------------------------------------------------
#_/ 게임중에 밤낮의 개념을 작성합니다.
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

#==============================================================================
# ★ 커스터마이즈 항목 ★
#==============================================================================

module KGC
  # ◆밤낮 변환 방식
  #  0:시 사이 경과 1:보수 2:현실 시간(미묘)
  DAYNIGHT_METHOD = 1

  # ◆이벤트중은 시간을 멈춘다
  #  「시간 경과」사용시만 유효
  DAYNIGHT_EVENT_STOP = true

  # ◆일자가 바뀌는 상태
  #  여기서 지정한 상태가 되었을 때, 날짜를 가산한다。
  # 초기 상태의 경우 0:낮 1:저녁 2:야 3:조
  # ※현실 시간의 경우, 현실과 같은 날짜는 되지 않기 때문에 주의.
  DAYNIGHT_PASS_PHASE = 3

  # ◆상태 변환시의 페이드 시간【단위:프레임】
  #  생략시도 이 값을 사용합니다.
  DAYNIGHT_DURATION = 40

  # ★☆이하의 3항목은 모두 같은 개수로 해 주세요☆★
  # 처리의 형편상, 최초를 낮으로 하면 베타

  # ◆밤낮의 명칭(별로 의미는 없다)
  DAYNIGHT_NAME = ["낮", "저녁", "야", "조"]

  # ◆밤낮의 색조(잘 모르는 경우는 이대로)
  DAYNIGHT_TONE = [Tone.new(0, 0, 0),
    Tone.new(-32, -96, -96),
    Tone.new(-128, -128, -32),
    Tone.new(-48, -48, -16)]

# ◆밤낮 변환 시간(다음 상태에 옮길 때까지의 기간)
# 변환 방식이 시간의 경우는 초수, 보수의 경우는 보수 그대로.
# 전투중은 변환 시간이 10배(1/10의 속도)
# 현실 시간의 경우, 다음 상태에 바꾸는 시각(24시간 방식)

  DAYNIGHT_TIME = [30, 10, 25, 10]

  # DAYNIGHT_TIME = [16, 20, 6, 10]
  # ↑현실 시간용의 샘플. 시험하는 경우는 코멘트를 해제
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

$imported["DayNight"] = true

#--------------------------------------------------------------------------
# ● 現在の状態
#--------------------------------------------------------------------------
def now_daynight
  # 現在の状態を返す
  return $game_system.daynight_phase
end
#--------------------------------------------------------------------------
# ● 状態名取得
#--------------------------------------------------------------------------
def now_daynight_name
  # 現在の状態名を返す
  return KGC::DAYNIGHT_NAME[now_daynight]
end
#--------------------------------------------------------------------------
# ● 昼夜手動切り替え
#     phase     : 切り替え後の状態INDEX
#     duration  : 切り替え時間(フレーム)  (省略時:DAYNIGHT_DURATION)
#     pass_days : 経過させる日数  (省略時:0)
#--------------------------------------------------------------------------
def change_daynight(phase, duration = KGC::DAYNIGHT_DURATION, pass_days = 0)
  # カウント初期化
  $game_system.daynight_count = 0
  # フェーズ更新
  $game_system.daynight_phase = phase
  # 手動切り替え有効
  $game_temp.manual_daynight_change = duration
  # 日数経過
  $game_system.daynight_pass_days += pass_days
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Game_Temp
#==============================================================================

class Game_Temp
  attr_accessor :manual_daynight_change
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias initialize_KGC_DayNight initialize
  def initialize
    # 元の処理を実行
    initialize_KGC_DayNight

    @manual_daynight_change = false
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Game_System
#==============================================================================

class Game_System
  attr_accessor :daynight_change, :daynight_change_battle
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias initialize_KGC_DayNight initialize
  def initialize
    # 元の処理を実行
    initialize_KGC_DayNight

    @daynight_count, @daynight_phase, @daynight_pass_days = 0, 0, 0
    @daynight_change, @daynight_change_battle = true, true
  end
  #--------------------------------------------------------------------------
  # ● 昼夜判定用カウント取得
  #--------------------------------------------------------------------------
  def daynight_count
    @daynight_count = 0 if @daynight_count == nil
    return @daynight_count
  end
  #--------------------------------------------------------------------------
  # ● 昼夜判定用カウント設定
  #--------------------------------------------------------------------------
  def daynight_count=(n)
    @daynight_count = 0 if @daynight_count == nil
    @daynight_count = n
  end
  #--------------------------------------------------------------------------
  # ● 現在の状態取得
  #--------------------------------------------------------------------------
  def daynight_phase
    @daynight_phase = 0 if @daynight_phase == nil
    return @daynight_phase
  end
  #--------------------------------------------------------------------------
  # ● 現在の状態設定
  #--------------------------------------------------------------------------
  def daynight_phase=(n)
    @daynight_phase = 0 if @daynight_phase == nil
    @daynight_phase = n
  end
  #--------------------------------------------------------------------------
  # ● 経過日数取得
  #--------------------------------------------------------------------------
  def daynight_pass_days
    @daynight_pass_days = 0 if @daynight_pass_days == nil
    return @daynight_pass_days
  end
  #--------------------------------------------------------------------------
  # ● 経過日数設定
  #--------------------------------------------------------------------------
  def daynight_pass_days=(n)
    @daynight_pass_days = 0 if @daynight_pass_days == nil
    @daynight_pass_days = n
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Game_Screen
#==============================================================================

class Game_Screen
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias initialize_KGC_DayNight initialize
  def initialize
    # 元の処理を実行
    initialize_KGC_DayNight

    # とりあえず現在の状態に設定
    @tone = KGC::DAYNIGHT_TONE[$game_system.daynight_phase].clone
    # 移動判定用座標
    @x, @y = 0, 0
    # フレーム更新用カウント初期化
    @frame_count = Graphics.frame_count
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  alias update_KGC_DayNight update
  def update
    # 元の処理を実行
    update_KGC_DayNight

    # 昼夜切り替え判定
    if (!$game_temp.in_battle && $game_system.daynight_change) ||
        ($game_temp.in_battle && $game_system.daynight_change &&
        $game_system.daynight_change_battle)
      case KGC::DAYNIGHT_METHOD
      when 0  # 時間判定
        # カウント増加量計算
        inc_count = Graphics.frame_count - @frame_count
        # 加算量がおかしい場合は戻る
        if inc_count >= 100
          @frame_count = Graphics.frame_count
          return
        end
        # イベント中は戻る
        if KGC::DAYNIGHT_EVENT_STOP && $game_system.map_interpreter.running?
          @frame_count = Graphics.frame_count
          return
        end
        # カウント加算
        if $game_temp.in_battle
          inc_count /= 10.0
          $game_system.daynight_count += inc_count
        else
          $game_system.daynight_count += inc_count
        end
        # カウントを戻す
        @frame_count = Graphics.frame_count
        # 状態移行判定
        count = $game_system.daynight_count / Graphics.frame_rate
        if count >= KGC::DAYNIGHT_TIME[$game_system.daynight_phase]
          # 次の状態へ移行
          $game_system.daynight_count = 0
          $game_system.daynight_phase += 1
          # 最後の状態に達した場合
          if $game_system.daynight_phase >= KGC::DAYNIGHT_TONE.size
            # 最初の状態に戻す
            $game_system.daynight_phase = 0
          end
          # 日数経過判定
          if $game_system.daynight_phase == KGC::DAYNIGHT_PASS_PHASE
            $game_system.daynight_pass_days += 1
          end
          # 色調切り替え
          start_tone_change(KGC::DAYNIGHT_TONE[$game_system.daynight_phase],
            KGC::DAYNIGHT_DURATION)
        end
      when 1  # 歩数判定
        # 移動判定
        if @x != $game_player.x || @y != $game_player.y
          # 座標更新
          @x = $game_player.x
          @y = $game_player.y
          # カウント加算
          $game_system.daynight_count += 1
          # 状態移行判定
          count = $game_system.daynight_count
          if count >= KGC::DAYNIGHT_TIME[$game_system.daynight_phase]
            # 次の状態へ移行
            $game_system.daynight_count = 0
            $game_system.daynight_phase += 1
            # 最後の状態に達した場合
            if $game_system.daynight_phase >= KGC::DAYNIGHT_TONE.size
              # 最初の状態に戻す
              $game_system.daynight_phase = 0
            end
            # 日数経過判定
            if $game_system.daynight_phase == KGC::DAYNIGHT_PASS_PHASE
              $game_system.daynight_pass_days += 1
            end
            # 色調切り替え
            start_tone_change(KGC::DAYNIGHT_TONE[$game_system.daynight_phase],
              KGC::DAYNIGHT_DURATION)
          end
        end
      when 2  # 現実時間
        # 現在の時間を取得
        time = Time.now
        # 状態移行判定
        time1 = KGC::DAYNIGHT_TIME[$game_system.daynight_phase]
        time2 = KGC::DAYNIGHT_TIME[$game_system.daynight_phase - 1]
        if time2 != nil && time2 > time1
          change = time.hour < time2 && time.hour >= time1
        else
          change = time.hour >= time1
        end
        if change
          # 次の状態へ移行
          $game_system.daynight_count = 0
          $game_system.daynight_phase += 1
          # 最後の状態に達した場合
          if $game_system.daynight_phase >= KGC::DAYNIGHT_TONE.size
            # 最初の状態に戻す
            $game_system.daynight_phase = 0
          end
          # 日数経過判定
          if $game_system.daynight_phase == KGC::DAYNIGHT_PASS_PHASE
            $game_system.daynight_pass_days += 1
          end
          # 色調切り替え
          start_tone_change(KGC::DAYNIGHT_TONE[$game_system.daynight_phase],
            KGC::DAYNIGHT_DURATION)
        end
      end
    end
    # 手動切り替えが行われた場合
    if $game_temp.manual_daynight_change != nil
      # 色調切り替え
      start_tone_change(KGC::DAYNIGHT_TONE[$game_system.daynight_phase],
        KGC::DAYNIGHT_DURATION)
      # 手動切り替え解除
      $game_temp.manual_daynight_change = nil
    end
  end
  #--------------------------------------------------------------------------
  # ● デフォルトの状態(0, 0, 0)に戻す
  #     duration : 切り替え時間(フレーム)  (省略時:40)
  #--------------------------------------------------------------------------
  def daynight_default(duration = KGC::DAYNIGHT_DURATION)
    start_tone_change(Tone.new(0, 0, 0), duration)
  end
  #--------------------------------------------------------------------------
  # ● 現在の状態を適用
  #     duration : 切り替え時間(フレーム)  (省略時:40)
  #--------------------------------------------------------------------------
  def daynight_apply(duration = KGC::DAYNIGHT_DURATION)
    start_tone_change(KGC::DAYNIGHT_TONE[$game_system.daynight_phase], duration)
  end
end


#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Game_Map
#==============================================================================

class Game_Map
  #--------------------------------------------------------------------------
  # ● エンカウントリストの取得
  #--------------------------------------------------------------------------
  alias encounter_list_KGC_DayNight encounter_list
  def encounter_list
    # 元の処理を実行
    list = encounter_list_KGC_DayNight.dup

    # 出現条件判定
    list.each_index do |i|
      appear = false
      troop = $data_troops[list[i]]
      # 出現条件が無い場合は次へ
      next unless troop.name =~ /[DN((?:[ ]*[-]?d+(?:,[ ]*)?)+)]/i
      # 出現条件を適用
      for dn in $1.split(/,/)
        dn.gsub!(/[ ]/) {""}
        appear |= dn[0, 1] == "-" ? $game_system.daynight_phase != dn.to_i.abs :
          $game_system.daynight_phase == dn.to_i
      end
      list[i] = nil unless appear
    end
    return list.compact
  end
end

?

List of Articles
번호 제목 글쓴이 날짜 조회 수
8827 저번 글들과, 이전 글에 대해 묻고 싶습니다. idtptkd 2005.05.17 1314
8826 이전 작가들은 어떻게 되는 건가요? 아렉스 2005.05.17 1091
8825 이전 작가들은 어떻게 되는 건가요? 영원전설 2005.05.18 1152
8824 프루티룹스 질문... 신승일 2005.05.18 1472
8823 창작글만 있는데 감상문 같은 건 쓸수 없나요? 다르칸 2005.05.18 994
8822 창작글만 있는데 감상문 같은 건 쓸수 없나요? 아렉스 2005.05.18 1031
8821 창작글만 있는데 감상문 같은 건 쓸수 없나요? 천무 2005.05.18 820
8820 창작글만 있는데 감상문 같은 건 쓸수 없나요? 『水』신교 2005.05.18 869
8819 rpg만들기 2000에서 신규프로젝트가 만들어지지 않아요;; 밀크마스터 2005.05.18 1166
8818 rpg만들기 2000에서 신규프로젝트가 만들어지지 않아요;; 나랑놀자 2005.05.18 1111
8817 rpg만들기 2000에서 신규프로젝트가 만들어지지 않아요;; 셉티찡 2005.05.18 1170
8816 릴레이 소설 말인데요... 외로운갈매기 2005.05.18 675
8815 이전의 창작글 게시판의 글은 어케되나요? 천무 2005.05.18 471
8814 이전의 창작글 게시판의 글은 어케되나요? Sir_아사히 2005.05.19 563
8813 윈도우 98에서는 rpgxp안돌아가요 ? 바람을 가르는 자 2005.05.19 767
8812 윈도우 98에서는 rpgxp안돌아가요 ? 미칼렌 2005.05.19 927
8811 패치 요청... Norid 2005.05.19 454
8810 rpg만들기 2000에서 신규프로젝트가 만들어지지 않아요;; black-angel 2005.05.19 1147
8809 [RPG XP] 게임 테스트 오류. 살려주세요// Norid 2005.05.19 939
8808 릴레이소설 사래신장전 완결했는데요.. 적랑 2005.05.20 648
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 442 Next
/ 442


[개인정보취급방침] | [이용약관] | [제휴문의] | [후원창구] | [인디사이드연혁]

Copyright © 1999 - 2016 INdiSide.com/(주)씨엘쓰리디 All Rights Reserved.
인디사이드 운영자 : 천무(이지선) | kernys(김원배) | 사신지(김병국)