銀行システム in VXA



ありそうでなかった銀行のスクリプト

SceneManager.call(Scene_Bank_Sys)
にてシーンが移動します。

$game_message.bank_main_name = [数値]
$game_message.bank_sub_name  = [支店名]
を先に実行することで銀行の名称や支店名を変更することが可能です

ミニゲーム用共通処理モジュール in VXAが必要です。

変更点
まだなし

#==============================================================================
# 銀行システム in VX Ace By 貪藻矢射妥←
#------------------------------------------------------------------------------
# まぁ、銀行です。
# 
# SceneManager.call(Scene_Bank_Sys)
# にて銀行に移ります。
# $game_message.bank_main_name = [数値]
# $game_message.bank_sub_name  = [支店名]
# を先に実行することで銀行の名称や支店名を変更することが可能です
# 
# 預金してから一定時間たつと利子がついたりします。
# ※しかし、あくまで銀行を呼び出したときだけ利子が加算されるので、ゲームの
#  最中にどんだけ利子が増えたカナ〜とか確認できないという・・・
# 
# ※ちなみに利子は振り込んでから基本で2時間で金利分加算されます。
#  →カスタマイズポイントで変更可能
#  (流石に1年で利子がいくら・・・とかだと・・・そんなにゲームプレイする人
#   いないし・・・)
# 
# ※ちなみに、預金開始時刻とは現在時刻を入手しているのではなく、預金を開始した
#  時のプレイタイムを入手しています。
#==============================================================================
# 変更履歴
# まだなし

$OuterFlgs = {} if $OuterFlgs == nil
$OuterFlgs["Bank_Sys"] = true

module BANK
  # 金利
  BANK_RATE = 0.13
  # 入出力用桁数
  BANK_MAX_DIG = 8
  # 銀行で預金できる最大金額
  MAX_BANK_GOLD = 9999999999999
  # 金利分増える時間
  # 0にしちゃダメです。また『.0』は必須
  RATE_TIME = 2.0
  
  # 各種エラーメッセージ
  BANK_ERR_ZERO  = "金額を設定してください!!"
  BANK_ERR_UPPER = "金額が%sを上回ってます!!"
  BANK_ERR_HOLD  = "所持限界金額を上回ります!!"
  
  #--------------------------------------------------------------------------
  # ● 利息計算用モジュール
  #--------------------------------------------------------------------------
  def gold_plus
    if $game_system.root_time2 == nil
      $game_system.root_time2 = $game_system.root_time
    end
    if $game_system.bank_gold != 0
      gold_tmp = $game_system.bank_gold
      base_time = 3600 * RATE_TIME
      time = ($game_system.absolute_time - $game_system.root_time2) / base_time
      if time > 1.0
        $game_system.bank_gold += Integer(time * BANK_RATE * gold_tmp)
        $game_system.bank_gold = [$game_system.bank_gold, MAX_BANK_GOLD].min
        $game_system.root_time2 = $game_system.absolute_time
      end
    end
  end
end

class Game_System
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :bank_gold                # 預かり総金額
  attr_accessor :absolute_time            # ゲームの絶対時間
  attr_accessor :root_time                # 利子計算用時間
  attr_accessor :root_time2               # 利子計算用時間の退避
end

class Window_Time_Bank_Sys < Window_Bet_Gold
  #--------------------------------------------------------------------------
  # ● 時間取得
  #--------------------------------------------------------------------------
  def get_sec
    $game_system.absolute_time = Graphics.frame_count / Graphics.frame_rate
  end
end

class Window_Bank_Main_Bank_Sys < Window_Base
  include BANK
  include TITLE_BM
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(0, 48, 384, 272 + 8 - 48)
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh(text)
    contents.clear
    
    root_color = contents.font.color
    x_plus  = 92
    x_plus2 = 172
    
    contents.font.color = system_color
    draw_text(48,            0, 160, line_height, "只今のお預かり")
    contents.font.color = normal_color
    draw_text(48,           24, 160, line_height, text.to_s, 2)
    
    contents.font.color = system_color
    draw_text(48 + x_plus2, 24, 160, line_height, Vocab::currency_unit)
    draw_text(48,           78, 160, line_height, "金利(/" + RATE_TIME.to_s + "h)")
    contents.font.color = normal_color
    draw_text(48,           96, 160, line_height, BANK_RATE.to_s, 2)
    contents.font.color = system_color
    draw_text(48 + x_plus2, 96, 160, line_height, "%")
    
    if $game_system.bank_gold != 0
      hour = $game_system.root_time / 60 / 60
      min =  $game_system.root_time / 60 % 60
      sec =  $game_system.root_time % 60
      text = sprintf("%02d : %02d : %02d", hour, min, sec)
    else
      $game_system.root_time2 = nil
      text = "-"
    end
    
    draw_text(48,           144, 160, line_height, "預金開始時刻")
    contents.font.color = normal_color
    draw_text(48 + x_plus,  144, 160, line_height, text, 2)
    
    contents.font.color = root_color
  end
  #--------------------------------------------------------------------------
  # ● 入金
  #--------------------------------------------------------------------------
  def gold_in(bet)
    if $game_system.bank_gold == 0
      $game_system.root_time = $game_system.absolute_time
    end
    $game_system.bank_gold += bet
    $game_party.lose_gold(bet)
  end
  #--------------------------------------------------------------------------
  # ● 出金
  #--------------------------------------------------------------------------
  def gold_out(bet)
    $game_system.bank_gold -= bet
    $game_party.gain_gold(bet)
  end
end

class Window_Gold_Change_Bank_Sys < Window_Base
  include TITLE_BM
  include MINI_GAME
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(384, 144, 160, 48)
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh(text)
    contents.clear
    
    root_color = contents.font.color
    contents.font.color = system_color
    draw_text(POS_MINI, text.to_s, 1)
    
    contents.font.color = root_color
  end
end

class Game_Message
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :bank_main_name           # 銀行の名前の変数
  attr_accessor :bank_sub_name            # 支部の名前
end

class Scene_Bank_Sys < Scene_Minigame_Base
  include BM
  include BANK
  include MINI_GAME
  # 数値入力用定数
  BANK_WIN_SHOW = "show"
  BANK_WIN_HIDE = "hide"
  #--------------------------------------------------------------------------
  # ● 銀行初期化
  #--------------------------------------------------------------------------
  def bank_sys_init
    @change_gold = 0
    
    if $game_system.bank_gold == nil
      $game_system.bank_gold = 0
    end
  end
  #--------------------------------------------------------------------------
  # ● 開始処理
  #--------------------------------------------------------------------------
  def start
    super
    
    bank_sys_init
    
    # ウィンドウを作成
    @bottomkeyhelp_window = Window_BottomKeyHelp.new
    
    @title_window = Window_Title_Root.new
    
    @bank_main_window = Window_Bank_Main_Bank_Sys.new
    @bank_main_window.refresh($game_system.bank_gold)
    @bank_main_window.activate
    
    @info_window = Window_Info_Space.new
    @info_window.y -= 48
    
    @gold_info_window = Window_Info_Gold.new
    
    @gold_window = Window_Gold.new
    @gold_window.x = 384
    @gold_window.y =  96
    
    @time_window = Window_Time_Bank_Sys.new
    @time_window.hide
    @time_window.deactivate
    @time_window.get_sec
    
    @gold_change_info_window = Window_Gold_Change_Bank_Sys.new
    @gold_change_info_window.hide
    
    @value_window_r = Window_Base.new(544 / 2 - 240 / 2, 160, 240, 64)
    @value_window_r.windowskin = nil
    @value_window_r.hide
    $game_message.num_input_digits_max  = MAX_DIG
    
    @value_window_in = Window_NumberInput_XP.new(@value_window_r)
    @value_window_in.start
    @value_window_in.hide
    @value_window_in.deactivate
    
    @value_window_out = Window_NumberInput_XP.new(@value_window_r)
    @value_window_out.start
    @value_window_out.hide
    @value_window_out.deactivate
    
    set_keyhelp1
    
    make_bank_name
  end
  #--------------------------------------------------------------------------
  # ● 銀行名称設定
  #--------------------------------------------------------------------------
  def make_bank_name
    case $game_message.bank_main_name
    when 0
      bank_name = "ばんく おぶ わぁるど・"
    when 1
      bank_name = "ばんく おぶ のいえ・"
    else
      bank_name = "盗怪銀行・"
    end
    
    if $game_message.bank_sub_name == nil
      $game_message.bank_sub_name = "せるだぁる本店"
    end
    @title_window.refresh(bank_name + $game_message.bank_sub_name)
  end
  #--------------------------------------------------------------------------
  # ● バリューウィンドウ(in)操作
  #--------------------------------------------------------------------------
  def mod_value_window_in(flg)
    case flg
    when BANK_WIN_SHOW
      @value_window_in.show
      @value_window_in.activate
      @value_window_r.show
      @gold_change_info_window.show
      @gold_change_info_window.refresh("振り込み")
      @bank_main_window.deactivate
    when BANK_WIN_HIDE
      @value_window_in.hide
      @value_window_in.deactivate
      @value_window_r.hide
      @gold_change_info_window.hide
      @bank_main_window.activate
    else
      msgbox("不正な操作種別" + flg.to_s)
      exit
    end
  end
  #--------------------------------------------------------------------------
  # ● バリューウィンドウ(out)操作
  #--------------------------------------------------------------------------
  def mod_value_window_out(flg)
    case flg
    when BANK_WIN_SHOW
      @value_window_out.show
      @value_window_out.activate
      @value_window_r.show
      @gold_change_info_window.show
      @gold_change_info_window.refresh("引き落とし")
      @bank_main_window.deactivate
    when BANK_WIN_HIDE
      @value_window_out.hide
      @value_window_out.deactivate
      @value_window_r.hide
      @gold_change_info_window.hide
      @bank_main_window.activate
    else
      msgbox("不正な操作種別" + flg.to_s)
      exit
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新(基本)
  #--------------------------------------------------------------------------
  def update_basic
    super
    @time_window.get_sec
    gold_plus
    @bank_main_window.refresh($game_system.bank_gold)
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    super
    if @bank_main_window.active
      update_main
    end
    if @value_window_in.active
      update_value_in
    end
    if @value_window_out.active
      update_value_out
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (メインウィンドウがアクティブの場合)
  #--------------------------------------------------------------------------
  def update_main
    # B ボタンが押された場合
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      Sound.play_cancel
      #$game_system.windowskin_name = WINDOW_SKIN_ROOT
      return_scene
      return
    end
    # A ボタンが押された場合
    if Input.trigger?(:A)
      # 決定 SE を演奏
      Sound.play_ok
      gold_plus
      
      mod_value_window_in(BANK_WIN_SHOW)
      
      @value_window_in.number = @change_gold
      
      set_keyhelp2
      return
    end
    # X ボタンが押された場合
    if Input.trigger?(:X)
      # 決定 SE を演奏
      Sound.play_ok
      gold_plus
      
      mod_value_window_out(BANK_WIN_SHOW)
      
      @value_window_out.number = @change_gold
      
      set_keyhelp2
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (バリューウィンドウ(in)がアクティブの場合)
  #--------------------------------------------------------------------------
  def update_value_in
    # C ボタンが押された場合
    if Input.trigger?(:C)
      if @change_gold > $game_party.gold
        # エラー SE を演奏
        ERROR_SE.play
        text = sprintf(BANK_ERR_UPPER, "所持金")
        @info_window.refresh(text)
      elsif @change_gold == 0
        # エラー SE を演奏
        ERROR_SE.play
        @info_window.refresh(BANK_ERR_ZERO)
      else
        # 決定 SE を演奏
        Sound.play_ok
        @info_window.refresh("")
        
        mod_value_window_in(BANK_WIN_HIDE)
        
        @bank_main_window.gold_in(@change_gold)
        @gold_window.refresh
        @change_gold = 0
        set_keyhelp1
      return
      end
    end
    # B ボタンが押された場合
    if Input.trigger?(:B)
      # キャンセル SE を演奏
      Sound.play_cancel
      
      mod_value_window_in(BANK_WIN_HIDE)
      
      @change_gold = 0
      set_keyhelp1
      return
    end
    @change_gold = @value_window_in.number
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (バリューウィンドウ(out)がアクティブの場合)
  #--------------------------------------------------------------------------
  def update_value_out
    # C ボタンが押された場合
    if Input.trigger?(:C)
      if @change_gold > $game_system.bank_gold
        # エラー SE を演奏
        ERROR_SE.play
        text = sprintf(BANK_ERR_UPPER, "口座総額")
        @info_window.refresh(text)
      elsif @change_gold + $game_party.gold > MAX_GOLD
        # エラー SE を演奏
        ERROR_SE.play
        @info_window.refresh(BANK_ERR_HOLD)
      elsif @change_gold == 0
        # エラー SE を演奏
        ERROR_SE.play
        @info_window.refresh(BANK_ERR_ZERO)
      else
        # 決定 SE を演奏
        Sound.play_ok
        @info_window.refresh("")
        
        mod_value_window_out(BANK_WIN_HIDE)
        
        @bank_main_window.gold_out(@change_gold)
        @gold_window.refresh
        @change_gold = 0
        set_keyhelp1
      return
      end
    end
    # B ボタンが押された場合
    if Input.trigger?(:B)
      # キャンセル SE を演奏
      Sound.play_cancel
      
      mod_value_window_out(BANK_WIN_HIDE)
      
      @change_gold = 0
      set_keyhelp1
      return
    end
    @change_gold = @value_window_out.number
  end
  #--------------------------------------------------------------------------
  # ○ キーヘルプを設定
  #--------------------------------------------------------------------------
  def set_keyhelp1
    @bottomkeyhelp_window.clear
    @bottomkeyhelp_window.set_bottom_help({"B"=>"キャンセル", 
                                           "A"=>"振り込み", 
                                           "X"=>"引き落とし"})
  end
  #--------------------------------------------------------------------------
  # ○ キーヘルプを設定 2
  #--------------------------------------------------------------------------
  def set_keyhelp2
    @bottomkeyhelp_window.clear
    @bottomkeyhelp_window.set_bottom_help({"矢印"=>"金額操作", 
                                           "C"   =>"決定", 
                                           "B"   =>"キャンセル"})
  end
end
こんな感じになります。

戻る