#============================================================================== # 銀行システム 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 |