XP 스크립트



변경된 시스템?


스샷

참부








======== 여기밑부터

#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/  ◆2000式セーブ - KGC_2000StyleSave◆
#_/----------------------------------------------------------------------------
#_/ ツクール200xのように、セーブファイル数を増やします。
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

#==============================================================================
# ★ カスタマイズ項目 ★
#==============================================================================

module KGC
  # ◆セーブファイル数(必ず 3 以上を指定)
  SAVEFILE_NUMBER = 15
  # ◆セーブファイルに描画する最大人数
  #  ≪多人数パーティ≫を導入していない場合は 4 で固定。
  SAVEFILE_ACTORS = 5
end

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

$imported = {} if $imported == nil
$imported["2000StyleSave"] = true

#==============================================================================
# ■ Window_SaveFile
#==============================================================================

class Window_SaveFile < Window_Base
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #    file_index : セーブファイルのインデックス (0~3)
  #    filename  : ファイル名
  #--------------------------------------------------------------------------
  def initialize(file_index, filename)
    super(0, 64 + file_index % KGC::SAVEFILE_NUMBER * 138, 640, 138)
    self.contents = Bitmap.new(width - 32, height - 32)
    @file_index = file_index
    @filename = "Save#{@file_index + 1}.rxdata"
    @time_stamp = Time.at(0)
    @file_exist = FileTest.exist?(@filename)
    if @file_exist
      file = File.open(@filename, "r")
      @time_stamp = file.mtime
      @characters = Marshal.load(file)
      @frame_count = Marshal.load(file)
      @game_system = Marshal.load(file)
      @game_switches = Marshal.load(file)
      @game_variables = Marshal.load(file)
      @game_self_switches = Marshal.load(file)
      @game_screen = Marshal.load(file)
      @game_actors = Marshal.load(file)
      @game_party = Marshal.load(file)
      @game_troop = Marshal.load(file)
      @game_map = Marshal.load(file)
      @total_sec = @frame_count / Graphics.frame_rate
      file.close
    end
    refresh
    @selected = false
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    # MapInfo.rxdata をロード
    mapinfo = load_data("Data/MapInfos.rxdata")
    self.contents.clear
    # ファイル番号を描画
    self.contents.font.color = normal_color
    name = "ファイル #{@file_index + 1}"
    self.contents.draw_text(4, 0, 600, 32, name)
    @name_width = contents.text_size(name).width
    # セーブファイルが存在する場合
    if @file_exist
      # キャラクターを描画
      x = 116
      actor = @characters[0]
      if actor != nil && actor.is_a?(Game_Actor)
        self.contents.font.size = 20
        draw_actor_name(actor, x, -4)
        draw_actor_level(actor, x, 20)
        draw_actor_hp(actor, x, 44)
        self.contents.font.size = 22
      end
      x = 256
      for i in 0...@characters.size
        actor = @characters[i]
        next if !actor.is_a?(Game_Actor) || actor == nil
        bitmap = RPG::Cache.battler(actor.battler_name, actor.battler_hue)
        cw = bitmap.rect.width
        ch = bitmap.rect.height
        src_rect = Rect.new(0, 0, cw, ch)
        dest_rect = Rect.new(x, 0, cw / 2, ch / 2)
        x += dest_rect.width
        self.contents.stretch_blt(dest_rect, bitmap, src_rect)
      end
      # プレイ時間を描画
      hour = @total_sec / 60 / 60
      min = @total_sec / 60 % 60
      sec = @total_sec % 60
      time_string = sprintf("%02d:%02d:%02d", hour, min, sec)
      self.contents.font.color = normal_color
      self.contents.draw_frame_text(4, 0, 600, 32, time_string, 2)
      # タイムスタンプを描画
      self.contents.font.color = normal_color
      time_string = @time_stamp.strftime("%Y/%m/%d %H:%M")
      self.contents.draw_frame_text(4, 32, 600, 32, time_string, 2)
      if $imported["PlaceMission"]
        # マップ名が無い場合
        if @game_system.place == nil || @game_system.place == ""
          # マップ名を取得
          place = mapinfo[@game_map.map_id].name
        else
          place = @game_system.place
        end
        self.contents.font.color = system_color
        cx = self.contents.text_size("セーブ場所").width
        self.contents.draw_shadow_text(4, 80, cx, 32, "セーブ場所")
        self.contents.font.color = normal_color
        self.contents.draw_shadow_text(8 + cx, 80, 596 - cx, 32, place)
      end
    end
  end
end

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

#==============================================================================
# ■ Scene_Title
#==============================================================================

class Scene_Title
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  alias update_KGC_2000StyleSave update
  def update
    # コンティニュー判定
    unless @continue_checked
      for i in 0...KGC::SAVEFILE_NUMBER
        if FileTest.exist?("Save#{i+1}.rxdata")
          found = true
          break
        end
      end
      # セーブファイルが見付かった場合
      if found
        # カーソルをコンティニューに合わせる
        @command_window.index = 1
      end
      @continue_checked = true
    end

    # 元の処理を実行
    update_KGC_2000StyleSave
  end
end

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

#==============================================================================
# ■ Scene_File
#------------------------------------------------------------------------------
#  セーブ画面およびロード画面のスーパークラスです。
#==============================================================================

class Scene_File
  #--------------------------------------------------------------------------
  # ● メイン処理
  #--------------------------------------------------------------------------
  def main
    # ヘルプウィンドウを作成
    @help_window = Window_Help.new
    @help_window.set_text(@help_text)
    # セーブファイルウィンドウを作成
    @savefile_windows = []
    for i in 0...KGC::SAVEFILE_NUMBER
      @savefile_windows.push(Window_SaveFile.new(i, make_filename(i)))
      @savefile_windows[i].visible = false
    end
    # ウィンドウ半透明化
    window_alpha if $imported["MenuAlter"] && KGC::MA_MENU_TRANSPARENT
    # 最後に操作したファイルを選択
    @file_index = $game_temp.last_file_index
    @savefile_windows[@file_index].selected = true
    # 初期選択ウィンドウ設定
    i = 0
    if @file_index <= KGC::SAVEFILE_NUMBER - 3
      while i <= 2
        @savefile_windows[@file_index + i].y = 138 * i + 64
        @savefile_windows[@file_index + i].visible = true
        i += 1
        @index_y = 0
      end
    else
      while i <= 2
        @savefile_windows[@file_index - 2 + i].y = 138 * i + 64
        @savefile_windows[@file_index - 2 + i].visible = true
        i += 1
        @index_y = 2
      end
    end
    # トランジション実行
    Graphics.transition
    # メインループ
    loop do
      # ゲーム画面を更新
      Graphics.update
      # 入力情報を更新
      Input.update
      # フレーム更新
      update
      # 画面が切り替わったらループを中断
      if $scene != self
        break
      end
    end
    # トランジション準備
    Graphics.freeze
    # ウィンドウを解放
    @help_window.dispose
    for i in @savefile_windows
      i.dispose
    end
    # スプライトを解放
    @spriteset.dispose if @spriteset != nil
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    # ウィンドウを更新
    @help_window.update
    for i in @savefile_windows
      i.update
    end
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      # メソッド on_decision (継承先で定義) を呼ぶ
      on_decision(make_filename(@file_index))
      $game_temp.last_file_index = @file_index
      return
    end
    # B ボタンが押された場合
    if Input.trigger?(Input::B)
      # メソッド on_cancel (継承先で定義) を呼ぶ
      on_cancel
      return
    end
    # 方向ボタンの下が押された場合
    if Input.repeat?(Input::DOWN)
      # 方向ボタンの下の押下状態がリピートでない場合か、
      # またはカーソル位置がファイル個数より前の場合
      if Input.trigger?(Input::DOWN) or @file_index < KGC::SAVEFILE_NUMBER - 1
        # カーソル SE を演奏
        $game_system.se_play($data_system.cursor_se)
        # カーソルを下に移動
        @savefile_windows[@file_index].selected = false
        @file_index = (@file_index + 1) % KGC::SAVEFILE_NUMBER
        @savefile_windows[@file_index].selected = true
        @index_y += 1
        # ウィンドウ移動
        self.move_window
        return
      end
    end
    # 方向ボタンの上が押された場合
    if Input.repeat?(Input::UP)
      # 方向ボタンの上の押下状態がリピートでない場合か、
      # またはカーソル位置が 0 より後ろの場合
      if Input.trigger?(Input::UP) or @file_index > 0
        # カーソル SE を演奏
        $game_system.se_play($data_system.cursor_se)
        # カーソルを上に移動
        @savefile_windows[@file_index].selected = false
        @file_index = (@file_index + KGC::SAVEFILE_NUMBER - 1) % KGC::SAVEFILE_NUMBER
        @savefile_windows[@file_index].selected = true
        @index_y -= 1
        # ウィンドウ移動
        self.move_window
        return
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● セーブウィンドウの移動
  #--------------------------------------------------------------------------
  def move_window
    # 普通にカーソル移動した場合
    if @index_y >= 0 && @index_y <= 2
      return
    end
    # スクロールするために全ウィンドウを消去
    for i in 0...KGC::SAVEFILE_NUMBER
      @savefile_windows[i].visible = false
    end
    i = 0
    if @index_y == 3  # 最下段で↓
      if @file_index == 0  # 最上部に移動した場合
        while i <= 2
          @savefile_windows[@file_index + i].y = 138 * i + 64
          @savefile_windows[@file_index + i].visible = true
          i += 1
        end
        @index_y = 0
      else  # 通常移動の場合
        while i <= 2
          @savefile_windows[@file_index - 2 + i].y = 138 * i + 64
          @savefile_windows[@file_index - 2 + i].visible = true
          i += 1
        end
        @index_y = 2
      end
    elsif @index_y == -1  # 最上段で↑
      if @file_index == KGC::SAVEFILE_NUMBER - 1  # 最下部に移動した場合
        while i <= 2
          @savefile_windows[@file_index - 2 + i].y = 138 * i + 64
          @savefile_windows[@file_index - 2 + i].visible = true
          i += 1
        end
        @index_y = 2
      else  # 通常移動の場合
        while i <= 2
          @savefile_windows[@file_index + i].y = 138 * i + 64
          @savefile_windows[@file_index + i].visible = true
          i += 1
        end
        @index_y = 0
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● ウィンドウ半透明化
  #--------------------------------------------------------------------------
  def window_alpha
    # [Scene_Save]で再定義
  end
end

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

#==============================================================================
# ■ Scene_Save
#==============================================================================

class Scene_Save < Scene_File
  #--------------------------------------------------------------------------
  # ● ウィンドウ半透明化
  #--------------------------------------------------------------------------
  def window_alpha
    # スプライトセット作成
    @spriteset = Spriteset_Map.new
    # 各ウィンドウを半透明化
    @help_window.back_opacity = 160
    for window in @savefile_windows
      window.back_opacity = 160
    end
  end
  #--------------------------------------------------------------------------
  # ● セーブデータの書き込み
  #    file : 書き込み用ファイルオブジェクト (オープン済み)
  #--------------------------------------------------------------------------
  def write_save_data(file)
    # セーブファイル描画用のキャラクターデータを作成
    characters = []
    max = [$game_party.actors.size,
      $imported["LargeParty"] ? KGC::SAVEFILE_ACTORS : 4].min
    for i in 0...max
      characters.push($game_party.actors[i])
    end
    # セーブファイル描画用のキャラクターデータを書き込む
    Marshal.dump(characters, file)
    # プレイ時間計測用のフレームカウントを書き込む
    Marshal.dump(Graphics.frame_count, file)
    # セーブ回数を 1 増やす
    $game_system.save_count += 1
    # マジックナンバーを保存する
    # (エディタで保存するたびにランダムな値に書き換えられる)
    $game_system.magic_number = $data_system.magic_number
    # 各種ゲームオブジェクトを書き込む
    Marshal.dump($game_system, file)
    Marshal.dump($game_switches, file)
    Marshal.dump($game_variables, file)
    Marshal.dump($game_self_switches, file)
    Marshal.dump($game_screen, file)
    Marshal.dump($game_actors, file)
    Marshal.dump($game_party, file)
    Marshal.dump($game_troop, file)
    Marshal.dump($game_map, file)
    Marshal.dump($game_player, file)
  end
end

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

#==============================================================================
# ■ Scene_Load
#------------------------------------------------------------------------------
#  ロード画面の処理を行うクラスです。
#==============================================================================

class Scene_Load < Scene_File
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    # テンポラリオブジェクトを再作成
    $game_temp = Game_Temp.new
    # タイムスタンプが最新のファイルを選択
    $game_temp.last_file_index = 0
    latest_time = Time.at(0)
    for i in 0...KGC::SAVEFILE_NUMBER
      filename = make_filename(i)
      if FileTest.exist?(filename)
        file = File.open(filename, "r")
        if file.mtime > latest_time
          latest_time = file.mtime
          $game_temp.last_file_index = i
        end
        file.close
      end
    end
    super("どのファイルをロードしますか?")
  end
end

Who's 백호

?

이상혁입니다.

http://elab.kr

Atachment
첨부 '1'

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 습작 2012.12.24 6153
34 저장 Inn & Save Point System by SephirothSpawn (SDK호환) 1 file 백호 2009.02.22 810
33 저장 SG_Automatic Save 백호 2009.02.22 970
» 저장 [KGC] 스크립트 저장된 리셋 불어오기 [스샷첨부] 1 file 백호 2009.02.22 1052
31 저장 SG_Broken Save File Fix by sandgolem (SDK호환) 1 백호 2009.02.22 1068
30 저장 Law's Custom Save System by The Law G14 & Night Runner 1 file Alkaid 2013.02.18 1073
29 저장 [KCG] 2 Pane Save Scene 번역본 백호 2009.02.22 1118
28 저장 [KCG] 2 Pane Save Scene file 백호 2009.02.22 1127
27 저장 StupidStormy36's Custom Save System 3 Alkaid 2010.10.05 1199
26 저장 Advanced Save Menu 편집 20101006 Edition (SDK2용) 1 Alkaid 2010.10.06 1217
25 저장 Advanced Save Menu 편집한 것. (SDK2용) Alkaid 2010.09.11 1219
24 저장 StupidStormy36's Custom Save System 2010-10-06(05?) Edition 1 Alkaid 2010.10.07 1247
23 저장 Advanced Save Menu 편집 20101005 Edition (SDK2용) 3 Alkaid 2010.10.05 1293
22 저장 Woratana's Neo Save System for RMXP by LiTTleDRAgo 5 Alkaid 2013.01.19 1398
21 저장 오류 수정한 자동세이브 2 백호 2009.02.22 1403
20 저장 [신기술 체험] 데이터 저장 6 file 백호 2009.02.22 1420
19 저장 자동 세이브 스크립트 4 WMN 2008.03.17 1470
18 저장 키라링님이 올리신 [KGC_2PaneSave] 번역 1 무뇌인 2010.08.18 1471
17 저장 세이브 슬롯 갯수 증가와 세이브 덮어씌울 때 확인 by RPG Advocate 5 백호 2009.02.22 1505
16 저장 Advanced Save System Edit (현재 맵을 보여주지 않음) file 백호 2009.02.22 1557
15 저장 Chaos Project Save Layout 1.4 by Fantasist, Blizzard file Alkaid 2010.10.08 1558
Board Pagination Prev 1 2 Next
/ 2