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