Script Request Template
New script or a combination of scripts (if that's possible.)
Script Title:
Pokemon Banking System
RMXP or RMVX:
XP
Detailed Description:
I am making a Pokemon game and I would like to include banks. I have found a banking script that I really like but it doesn't work with the game like I want it to. In the Pokemon Essentials Starter Kit (what I'm using) when you go to a mart the menu just kinda slides on to the screen (It's hard to explain) anyway I would like the bank to have the same template: show the money in corner and the options in the menu.
Am I making sense?
I would like the player to Be able to deposit, withdraw, gain interest and if not to much trouble loans (with interest?) and savings bonds (maybe?)
Mart and Bank Scripts:
This is the Mart script I am using and once again would like the bank to work kinda the same way.
And this is the bank script I've been trying to get working:
So if anyone could make me a new script, or can somehow combine the 2, i would love you forever!
New script or a combination of scripts (if that's possible.)
Script Title:
Pokemon Banking System
RMXP or RMVX:
XP
Detailed Description:
I am making a Pokemon game and I would like to include banks. I have found a banking script that I really like but it doesn't work with the game like I want it to. In the Pokemon Essentials Starter Kit (what I'm using) when you go to a mart the menu just kinda slides on to the screen (It's hard to explain) anyway I would like the bank to have the same template: show the money in corner and the options in the menu.
Am I making sense?
I would like the player to Be able to deposit, withdraw, gain interest and if not to much trouble loans (with interest?) and savings bonds (maybe?)
Mart and Bank Scripts:
This is the Mart script I am using and once again would like the bank to work kinda the same way.
Code:
class Window_PokemonMart < SpriteWindow_Selectable
attr_reader :baseColor
attr_reader :shadowColor
def initialize(stock,x,y,width,height)
super(x,y,width,height)
@stock=stock
self.windowskin=nil
@selarrow=BitmapCache.load_bitmap("Graphics/Pictures/selarrow.png")
@uparrow=AnimatedSprite.create("Graphics/Pictures/uparrow.png",8,2,@viewport)
@downarrow=AnimatedSprite.create("Graphics/Pictures/downarrow.png",8,2,@viewport)
@uparrow.play
@downarrow.play
@index=0
@baseColor=Color.new(72,72,72)
@shadowColor=Color.new(208,208,208)
refresh
end
def dispose
@selarrow.dispose
@uparrow.dispose
@downarrow.dispose
super
end
def color=(value)
super
@uparrow.color=self.color
@downarrow.color=self.color
end
def baseColor=(value)
@baseColor=value
refresh
end
def shadowColor=(value)
@shadowColor=value
refresh
end
def item
return self.index>=@stock.length ? 0 : @stock[self.index]
end
def refresh
thispocket=@stock
@item_max=thispocket.length+1
dwidth=self.width-32
dheight=self.height-32
if !self.contents || self.contents.height<dheight || self.contents.width<dwidth
self.contents.dispose if self.contents
self.contents=Bitmap.new([1,dwidth].max,[1,dheight].max)
pbSetSystemFont(self.contents)
end
@uparrow.x=self.x+(self.width/2)-(@uparrow.framewidth/2)
@downarrow.x=self.x+(self.width/2)-(@downarrow.framewidth/2)
@uparrow.y=self.y
@downarrow.y=self.y+self.height-@downarrow.frameheight
@uparrow.visible=(self.top_row!=0 && @item_max > self.page_item_max)
@downarrow.visible=(self.top_row+self.page_item_max<@item_max && @item_max > self.page_item_max)
@uparrow.viewport=self.viewport
@downarrow.viewport=self.viewport
contentsWidth=self.contents.width
ypos=0
trans=Color.new(0,0,0,0)
self.contents.clear
for i in 0..thispocket.length
if i<self.top_row || i>self.top_row+self.page_row_max
next
end
textpos=[]
if i==thispocket.length
self.contents.blt(0,ypos,@selarrow,@selarrow.rect) if self.index==i
textpos.push([_INTL("CANCEL"),16,ypos,false,self.baseColor,self.shadowColor])
else
item=thispocket[i]
itemname=PBItems.getName(item)
if $ItemData[item][ITEMPOCKET]==3
machine=$ItemData[item][ITEMMACHINE]
itemname=_INTL("{1} {2}",itemname,PBMoves.getName(machine))
end
price=Kernel.pbGetPrice(item)
qty=_ISPRINTF("${1:d}",price)
sizeQty=self.contents.text_size(qty).width
xQty=contentsWidth-sizeQty-2
pbCopyBitmap(self.contents,@selarrow,0,ypos) if self.index==i
textpos.push([itemname,16,ypos,false,self.baseColor,self.shadowColor])
textpos.push([qty,xQty,ypos,false,self.baseColor,self.shadowColor])
end
pbDrawTextPositions(self.contents,textpos)
ypos+=32
end
end
def update
oldindex=self.index
super
@uparrow.update
@downarrow.update
refresh if self.index!=oldindex
end
end
def pbGetPrice(item)
return $ItemData[item][ITEMPRICE]
end
class PokemonMartScene
def update
pbUpdateSpriteHash(@sprites)
end
def pbChooseNumber(helptext,item,maximum)
curnumber=1
ret=0
helpwindow=@sprites["helpwindow"]
itemprice=pbGetPrice(item)
itemprice/=2 if !@buying
pbDisplay(helptext,true)
using(numwindow=Window_UnformattedTextPokemon.new("")){ # Showing number of items
qty=$PokemonBag.pbQuantity(item)
using(inbagwindow=Window_UnformattedTextPokemon.new("")){ # Showing quantity in bag
pbPrepareWindow(numwindow)
pbPrepareWindow(inbagwindow)
numwindow.viewport=@viewport
inbagwindow.visible=@buying
numwindow.resizeToFit(_INTL("x000 $000000"),480)
inbagwindow.viewport=@viewport
inbagwindow.text=_ISPRINTF("IN BAG: {1:d}",qty)
inbagwindow.resizeToFit(inbagwindow.text,480)
numwindow.text=_ISPRINTF("x{1:03d} ${2:d}",curnumber,curnumber*itemprice)
pbBottomRight(numwindow)
numwindow.y-=helpwindow.height
pbBottomLeft(inbagwindow)
inbagwindow.y-=helpwindow.height
loop do
Graphics.update
Input.update
numwindow.update
helpwindow.update
if Input.repeat?(Input::LEFT)
curnumber-=10
curnumber=1 if curnumber<1
numwindow.text=_ISPRINTF("x{1:03d} ${2:d}",curnumber,curnumber*itemprice)
elsif Input.repeat?(Input::RIGHT)
curnumber+=10
curnumber=maximum if curnumber>maximum
numwindow.text=_ISPRINTF("x{1:03d} ${2:d}",curnumber,curnumber*itemprice)
elsif Input.repeat?(Input::UP)
curnumber+=1
curnumber=1 if curnumber>maximum
numwindow.text=_ISPRINTF("x{1:03d} ${2:d}",curnumber,curnumber*itemprice)
elsif Input.repeat?(Input::DOWN)
curnumber-=1
curnumber=maximum if curnumber<1
numwindow.text=_ISPRINTF("x{1:03d} ${2:d}",curnumber,curnumber*itemprice)
elsif Input.trigger?(Input::C)
ret=curnumber
break
elsif Input.trigger?(Input::B)
ret=0
break
end
end
}
}
helpwindow.visible=false
return ret
end
def pbPrepareWindow(window)
window.visible=true
window.letterbyletter=false
window.baseColor=Color.new(72,72,72)
window.shadowColor=Color.new(208,208,208)
end
def pbStartBuyScene(stock)
# Scroll right before showing screen
pbScrollMap(6,5,5)
@viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
@viewport.z=99999
@stock=stock
@sprites={}
@sprites["background"]=SpriteWrapper.new(@viewport)
@sprites["background"].bitmap=BitmapCache.load_bitmap("Graphics/Pictures/martscreen.png")
@sprites["icon"]=IconSprite.new(16,Graphics.height-72,@viewport)
@sprites["itemwindow"]=Window_PokemonMart.new(stock,160,0,304,224)
@sprites["itemwindow"].viewport=@viewport
@sprites["itemwindow"].index=0
@sprites["itemwindow"].refresh
@sprites["itemtextwindow"]=Window_UnformattedTextPokemon.new("")
pbPrepareWindow(@sprites["itemtextwindow"])
@sprites["itemtextwindow"].x=64
@sprites["itemtextwindow"].y=208
@sprites["itemtextwindow"].width=Graphics.width-64
@sprites["itemtextwindow"].height=128
@sprites["itemtextwindow"].baseColor=Color.new(31*8,31*8,31*8)
@sprites["itemtextwindow"].shadowColor=Color.new(12*8,12*8,12*8)
@sprites["itemtextwindow"].visible=true
@sprites["itemtextwindow"].viewport=@viewport
@sprites["itemtextwindow"].windowskin=nil
@sprites["helpwindow"]=Window_AdvancedTextPokemon.new("")
pbPrepareWindow(@sprites["helpwindow"])
@sprites["helpwindow"].visible=false
@sprites["helpwindow"].viewport=@viewport
pbBottomLeftLines(@sprites["helpwindow"],1)
@sprites["moneywindow"]=Window_UnformattedTextPokemon.new("")
pbPrepareWindow(@sprites["moneywindow"])
@sprites["moneywindow"].visible=true
@sprites["moneywindow"].viewport=@viewport
@sprites["moneywindow"].x=0
@sprites["moneywindow"].y=0
@sprites["moneywindow"].width=160
@sprites["moneywindow"].height=96
@buying=true
pbRefresh
Graphics.frame_reset
end
def pbStartSellScene(bag)
@subscene=PokemonBag_Scene.new
@subscene.pbStartScene(bag)
@viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
@viewport.z=99999
@sprites={}
@sprites["helpwindow"]=Window_AdvancedTextPokemon.new("")
pbPrepareWindow(@sprites["helpwindow"])
@sprites["helpwindow"].visible=false
@sprites["helpwindow"].viewport=@viewport
pbBottomLeftLines(@sprites["helpwindow"],1)
@sprites["moneywindow"]=Window_UnformattedTextPokemon.new("")
pbPrepareWindow(@sprites["moneywindow"])
@sprites["moneywindow"].visible=false
@sprites["moneywindow"].viewport=@viewport
@sprites["moneywindow"].x=0
@sprites["moneywindow"].y=0
@sprites["moneywindow"].width=160
@sprites["moneywindow"].height=96
@buying=false
pbRefresh
end
def pbShowMoney
pbRefresh
@sprites["moneywindow"].visible=true
end
def pbHideMoney
pbRefresh
@sprites["moneywindow"].visible=false
end
def pbEndBuyScene
pbDisposeSpriteHash(@sprites)
@viewport.dispose
# Scroll left after showing screen
pbScrollMap(4,5,5)
end
def pbEndSellScene
pbDisposeSpriteHash(@sprites)
@subscene.pbEndScene
@viewport.dispose
end
def pbDisplay(msg,brief=false)
cw=@sprites["helpwindow"]
cw.letterbyletter=true
cw.text=msg
pbBottomLeftLines(cw,2)
cw.visible=true
i=0
Audio.se_play(pbGetDecisionSE)
loop do
Graphics.update
Input.update
cw.update
if brief && !cw.busy?
return
end
if i==0 && !cw.busy?
pbRefresh
end
if Input.trigger?(Input::C) && cw.busy?
cw.resume
end
if i==60
return
end
i+=1 if !cw.busy?
end
end
def pbDisplayPaused(msg)
cw=@sprites["helpwindow"]
cw.letterbyletter=true
cw.text=msg
pbBottomLeftLines(cw,2)
cw.visible=true
i=0
Audio.se_play(pbGetDecisionSE)
loop do
Graphics.update
Input.update
wasbusy=cw.busy?
cw.update
if !cw.busy? && wasbusy
pbRefresh
end
if Input.trigger?(Input::C) && cw.resume && !cw.busy?
@sprites["helpwindow"].visible=false
return
end
end
end
def pbConfirm(msg)
dw=@sprites["helpwindow"]
dw.letterbyletter=true
dw.text=msg
dw.visible=true
pbBottomLeftLines(dw,2)
commands=[_INTL("YES"),_INTL("NO")]
cw = Window_CommandPokemon.new(commands)
cw.viewport=@viewport
pbBottomRight(cw)
cw.y-=dw.height
cw.index=0
Audio.se_play(pbGetDecisionSE)
loop do
cw.visible=!dw.busy?
Graphics.update
Input.update
cw.update
dw.update
if Input.trigger?(Input::B) && dw.resume && !dw.busy?
cw.dispose
@sprites["helpwindow"].visible=false
return false
end
if Input.trigger?(Input::C) && dw.resume && !dw.busy?
cw.dispose
@sprites["helpwindow"].visible=false
return (cw.index==0)?true:false
end
end
end
def pbRefresh
if @buying
itemwindow=@sprites["itemwindow"]
filename=sprintf("Graphics/Icons/item%03d.png",itemwindow.item)
@sprites["icon"].setBitmap(filename)
@sprites["itemtextwindow"].text=(itemwindow.item==0) ? _INTL("Quit shopping.") :
pbGetMessage(MessageTypes::ItemDescriptions,itemwindow.item)
itemwindow.refresh
end
@sprites["moneywindow"].text=_INTL("MONEY:\r\n${1}",$Trainer.money)
end
def pbChooseBuyItem
itemwindow=@sprites["itemwindow"]
@sprites["helpwindow"].visible=false
pbRefresh
loop do
Graphics.update
Input.update
olditem=itemwindow.item
self.update
if itemwindow.item!=olditem
filename=sprintf("Graphics/Icons/item%03d.png",itemwindow.item)
@sprites["icon"].setBitmap(filename)
@sprites["itemtextwindow"].text=(itemwindow.item==0) ? _INTL("Quit shopping.") :
pbGetMessage(MessageTypes::ItemDescriptions,itemwindow.item)
end
if Input.trigger?(Input::B)
return 0
end
if Input.trigger?(Input::C)
if itemwindow.index<@stock.length
pbRefresh
return @stock[itemwindow.index]
else
return 0
end
end
end
end
def pbChooseSellItem
return @subscene.pbChooseItem
end
end
class PokemonMartScreen
def initialize(scene,stock)
@scene=scene
@stock=stock
end
def pbConfirm(msg)
return @scene.pbConfirm(msg)
end
def pbDisplay(msg)
return @scene.pbDisplay(msg)
end
def pbDisplayPaused(msg)
return @scene.pbDisplayPaused(msg)
end
def pbBuyScreen
@scene.pbStartBuyScene(@stock)
item=0
loop do
item=@scene.pbChooseBuyItem
break if item==0
itemname=PBItems.getName(item)
price=Kernel.pbGetPrice(item)
if $Trainer.money<price
pbDisplayPaused(_INTL("You don't have enough money."))
next
end
maxafford=(price<=0) ? 99 : $Trainer.money/price
maxafford=99 if maxafford>99
quantity=@scene.pbChooseNumber(_INTL("{1}? Certainly.\r\nHow many would you like?",itemname),item,maxafford)
if quantity==0
next
end
price*=quantity
if !pbConfirm(_INTL("{1}, and you want {2}.\r\nThat will be ${3}. OK?",itemname,quantity,price))
next
end
if $Trainer.money<price
pbDisplayPaused(_INTL("You don't have enough money."))
next
end
added=0
quantity.times do
if !$PokemonBag.pbStoreItem(item)
break
end
added+=1
end
if added!=quantity
added.times do
if !$PokemonBag.pbDeleteItem(item)
raise _INTL("Failed to delete stored items")
end
end
pbDisplayPaused(_INTL("You have no more room in the Bag."))
else
$Trainer.money-=price
$Trainer.money=0 if $Trainer.money<0
pbDisplayPaused(_INTL("Here you are!\r\nThank you!"))
if quantity>=10 && isConst?(item,PBItems,:POKéBALL) && hasConst?(PBItems,:PREMIERBALL)
if $PokemonBag.pbStoreItem(PBItems::PREMIERBALL)
pbDisplayPaused(_INTL("I'll throw in a Premier Ball, too."))
end
end
end
end
@scene.pbEndBuyScene
end
def pbSellScreen
item=@scene.pbStartSellScene($PokemonBag)
loop do
item=@scene.pbChooseSellItem
break if item==0
itemname=PBItems.getName(item)
price=Kernel.pbGetPrice(item)
if price==0
pbDisplayPaused(_INTL("{1}? Oh, no.\r\nI can't buy that.",itemname))
next
end
qty=$PokemonBag.pbQuantity(item)
next if qty==0
@scene.pbShowMoney
if qty>1
qty=@scene.pbChooseNumber(
_INTL("{1}? How many would you like to sell?",itemname),
item,qty)
end
if qty==0
@scene.pbHideMoney
next
end
price/=2
price*=qty
if pbConfirm(_INTL("I can pay ${1}. Would that be OK?",price))
$Trainer.money+=price
$Trainer.money=999999 if $Trainer.money>999999
qty.times do
$PokemonBag.pbDeleteItem(item)
end
pbDisplayPaused(_INTL("Turned over the {1} and received ${2}.",itemname,price))
end
@scene.pbHideMoney
end
@scene.pbEndSellScene
end
end
def pbPokemonMart(stock,speech=nil)
cmd=Kernel.pbMessage(
speech ? speech : _INTL("Welcome!\r\nHow may I serve you?"),
[_INTL("BUY"),_INTL("SELL"),_INTL("QUIT")],3)
loop do
case cmd
when 0# Buy
scene=PokemonMartScene.new
screen=PokemonMartScreen.new(scene,stock)
screen.pbBuyScreen
when 1 # Sell
pbFadeOutIn(99999){
scene=PokemonMartScene.new
screen=PokemonMartScreen.new(scene,stock)
screen.pbSellScreen
}
when 2
Kernel.pbMessage(_INTL("Please come again!"))
break
end
cmd=Kernel.pbMessage(
_INTL("Is there anything else I can help you with?"),
[_INTL("BUY"),_INTL("SELL"),_INTL("QUIT")],3)
end
Input.update
end
And this is the bank script I've been trying to get working:
Code:
#==============================================================================
# Banking System
#--------------------------------------------------------------------------
# Created By SephirothSpawn (12.03.05)
# Last Updated: 12.03.05
#==============================================================================
#==============================================================================
# ** Scene_Title
#==============================================================================
class Scene_Title
#--------------------------------------------------------------------------
# * Alias Command: New Game
#--------------------------------------------------------------------------
alias bank_command_new_game command_new_game
#--------------------------------------------------------------------------
# * Command: New Game
#--------------------------------------------------------------------------
def command_new_game
$game_bank = Game_BankSystem.new
bank_command_new_game
end
end
#==============================================================================
# ** Window_RefreshCommand
#==============================================================================
class Window_RefreshCommand < Window_Selectable
#--------------------------------------------------------------------------
# * Object Initialization
# width : window width
# commands : command text string array
#--------------------------------------------------------------------------
def initialize(width, commands)
# Compute window height from command quantity
super(0, 0, width, commands.size * 32 + 32)
@item_max = commands.size
@commands = commands
refresh
self.index = 0
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh(commands = @commands)
@commands = commands
@item_max = commands.size
if self.contents != nil
self.contents.dispose
self.contents = nil
end
self.contents = Bitmap.new(width - 32, @item_max * 32)
for i in 0...@item_max
draw_item(i, normal_color)
end
end
#--------------------------------------------------------------------------
# * Draw Item
# index : item number
# color : text color
#--------------------------------------------------------------------------
def draw_item(index, color)
self.contents.font.color = color
self.contents.draw_text(0, 32 * index, self.contents.width - 8, 32, @commands[index], 1)
end
#--------------------------------------------------------------------------
# * Disable Item
# index : item number
#--------------------------------------------------------------------------
def disable_item(index)
draw_item(index, disabled_color)
end
#--------------------------------------------------------------------------
# * Undisable Item
# index : item number
#--------------------------------------------------------------------------
def disable_item(index)
draw_item(index, normal_color)
end
end
#==============================================================================
# ** Game_BankSystem
#==============================================================================
class Game_BankSystem
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :account_balance
attr_accessor :interest_rate
attr_accessor :saving_bonds
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
@account_balance = 0
@interest_rate = 1
@saving_bonds = []
@last_interest_time = 0
end
#--------------------------------------------------------------------------
# * Update
#--------------------------------------------------------------------------
def update
# Updates Deposited Amount
interest_time = (Graphics.frame_count / Graphics.frame_rate - @last_interest_time) / 3600.0
interest_amt = (@account_balance * @interest_rate / 100.0 * interest_time).to_i
if interest_amt > 0
@last_interest_time = Graphics.frame_count / Graphics.frame_rate
@account_balance += interest_amt
# Refreshes Data Windows
$scene.refresh_windows
end
end
#--------------------------------------------------------------------------
# * Deposit
#--------------------------------------------------------------------------
def deposit(amount)
$game_party.lose_gold(amount)
@account_balance += amount
end
#--------------------------------------------------------------------------
# * Withdraw
#--------------------------------------------------------------------------
def withdraw(amount)
@account_balance -= amount
$game_party.gain_gold(amount)
end
#--------------------------------------------------------------------------
# * Add Savings Bond
#--------------------------------------------------------------------------
def add_bond(bond)
@saving_bonds.push(bond)
@saving_bonds.sort! {|a, b| a.name <=> b.name}
end
end
#==============================================================================
# ** Savings_Bond
#==============================================================================
class Savings_Bond
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :name
attr_accessor :cost
attr_accessor :interest_rate
attr_accessor :length
attr_accessor :time_bought
attr_accessor :time_finished
attr_accessor :mature_value
#--------------------------------------------------------------------------
# * Object Initialization
# name : Savings Bond Name
# cost : Savings Bond Cost
# interest_rate : Savings Bond Interest Rate (In Percent)
# length : Length of Hours until Mature
#--------------------------------------------------------------------------
def initialize(name, cost, interest_rate, length)
@name = name
@cost = cost
@interest_rate = interest_rate
@length = length
@mature_value = (@cost * (1+ @interest_rate / 100.0)).to_i
end
#--------------------------------------------------------------------------
# * Set Times
#--------------------------------------------------------------------------
def set_times
@time_bought = Graphics.frame_count / Graphics.frame_rate
@time_finished = @time_bought + @length * 3600
end
#--------------------------------------------------------------------------
# * Make Time to HH:MM:SS
#--------------------------------------------------------------------------
def return_time(time)
hours = time / 60 / 60
minutes = time / 60 % 60
seconds = time % 60
return sprintf("%02d:%02d:%02d", hours, minutes, seconds)
end
end
#==============================================================================
# ** Window_BankNumber
#==============================================================================
class Window_BankNumber < Window_Base
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(640, 272, 240, 192)
self.opacity = 175
self.contents = Bitmap.new(width - 32, height - 32)
end
#--------------------------------------------------------------------------
# * Refresh
# money : Gold being...
# type : Deposit or Withdraw
#--------------------------------------------------------------------------
def refresh(money, type)
contents.clear
# Deposit or Withdraw
contents.font.color = system_color
contents.draw_text(0, 0, contents.width, 24, "Amount to #{type}", 1)
if type == "Deposit"
# Draws Game Party Gold
contents.draw_text(4, 48, contents.width, 24, "Current #{$data_system.words.gold}:")
contents.font.color = normal_color
contents.draw_text(-4, 48, contents.width, 24, $game_party.gold.to_s, 2)
else
# Draws Account Balance
contents.draw_text(4, 48, contents.width, 24, "Account Balance:")
contents.font.color = normal_color
contents.draw_text(-4, 48, contents.width, 24, $game_bank.account_balance.to_s, 2)
end
# Draws Money Being Deposited or Withdrawn
contents.font.color = system_color
contents.draw_text(4, 72, contents.width, 24, "#{type} Amount:")
contents.font.color = normal_color
contents.draw_text(-4, 72, contents.width, 24, "- #{money}", 2)
# Draws Line
line = ""
while contents.text_size(line).width < contents.width
line += "-"
end
contents.draw_text(0, 96, contents.width, 24, line, 2)
# Draws Game Party Gold Amont
contents.font.color = system_color
contents.draw_text(4, 112, contents.width, 32, "#{$data_system.words.gold} After:")
amount = $game_party.gold
amount += type == "Deposit" ? -money : money
contents.font.color = normal_color
contents.draw_text(-4, 112, contents.width, 32, amount.to_s, 2)
# Draws Deposit Amont
amount = $game_bank.account_balance
amount += type == "Deposit" ? money : -money
contents.font.color = system_color
contents.draw_text(4, 136, contents.width, 32, "Balance After:")
contents.font.color = normal_color
contents.draw_text(-4, 136, contents.width, 32, amount.to_s, 2)
end
end
#==============================================================================
# ** Window_BankBio
#==============================================================================
class Window_BankBio < Window_Base
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(-240, 272, 240, 192)
self.opacity = 175
self.contents = Bitmap.new(width - 32, height - 32)
refresh
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
contents.clear
# Deposit or Withdraw
contents.font.color = system_color
# Draws Actor Name in Postition 1
contents.font.color = normal_color
contents.draw_text(0, 0, contents.width, 24, "#{$game_party.actors[0].name}", 1)
# Draws Game Party Gold
contents.font.color = system_color
contents.draw_text(4, 32, contents.width, 24, "Current #{$data_system.words.gold}:")
contents.font.color = normal_color
contents.draw_text(-4, 32, contents.width, 24, $game_party.gold.to_s, 2)
# Draws Account Balance
contents.font.color = system_color
contents.draw_text(4, 56, contents.width, 24, "Account Balance:")
contents.font.color = normal_color
contents.draw_text(-4, 56, contents.width, 24, $game_bank.account_balance.to_s, 2)
# Draws Number of Savings Bond's
contents.font.color = system_color
contents.draw_text(4, 80, contents.width, 24, "Bonds Owned:")
contents.font.color = normal_color
contents.draw_text(-4, 80, contents.width, 24, $game_bank.saving_bonds.size.to_s, 2)
# Draws Value of Savings Bond's
value = 0
$game_bank.saving_bonds.each { |x| value += x.mature_value}
contents.font.color = system_color
contents.draw_text(4, 104, contents.width, 24, "Bonds Value:")
contents.font.color = normal_color
contents.draw_text(-4, 104, contents.width, 24, value.to_s, 2)
# Draws Current Interest Rate
contents.font.color = system_color
contents.draw_text(4, 136, contents.width, 24, "Interest Rate:")
contents.font.color = normal_color
contents.draw_text(-4, 136, contents.width, 24, "#{$game_bank.interest_rate} %", 2)
end
end
#==============================================================================
# ** Window_Bond
#==============================================================================
class Window_Bond < Window_Base
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(-240, 264, 240, 200)
self.opacity = 175
self.contents = Bitmap.new(width - 32, height - 32)
end
#--------------------------------------------------------------------------
# * Refresh
# bond : Savings Bond
#--------------------------------------------------------------------------
def refresh(bond, bought = false)
contents.clear
unless bond == nil
# Draws Bond Name
contents.font.color = system_color
contents.draw_text(0, 0, contents.width, 24, bond.name, 1)
# Draws Bond Cost
contents.font.color = system_color
contents.draw_text(4, 24, contents.width, 24, "Bond Cost:")
contents.font.color = normal_color
contents.draw_text(-4, 24, contents.width, 24, bond.cost.to_s, 2)
# Draws Bond Mature Value
contents.font.color = system_color
contents.draw_text(4, 48, contents.width, 24, "Mature Value:")
contents.font.color = normal_color
contents.draw_text(-4, 48, contents.width, 24, "#{bond.mature_value}", 2)
# Draws Bond Interest Rate
contents.font.color = system_color
contents.draw_text(4, 72, contents.width, 24, "Interest Rate:")
contents.font.color = normal_color
contents.draw_text(-4, 72, contents.width, 24, "#{bond.interest_rate} %", 2)
# Draws Length until Maturity
contents.font.color = system_color
contents.draw_text(4, 96, contents.width, 24, "Maturity Time:")
contents.font.color = normal_color
contents.draw_text(-4, 96, contents.width, 24, "#{bond.length} Hours", 2)
# Display only if Purchased CD
if bought
# Draws Time Bought
contents.font.color = system_color
contents.draw_text(4, 120, contents.width, 24, "Time Bought:")
contents.font.color = normal_color
contents.draw_text(-4, 120, contents.width, 24, bond.return_time(bond.time_bought), 2)
# Draws Time Finished
contents.font.color = system_color
contents.draw_text(4, 144, contents.width, 24, "Time Finished:")
contents.font.color = normal_color
contents.draw_text(-4, 144, contents.width, 24, bond.return_time(bond.time_finished), 2)
end
end
end
end
#==============================================================================
# ** Scene_Bank
#==============================================================================
class Scene_Bank
#--------------------------------------------------------------------------
# * Object Initialization
# interest rate : Changes Current Interest Rate (Leave 0 for no Change)
# bonds : Avaliable CD's For Purchasing
#--------------------------------------------------------------------------
def initialize(interest_rate = $game_bank.interest_rate,
bonds = [ Savings_Bond.new("CD-7", 100, 7.5, 7), Savings_Bond.new("CD-14", 500, 15, 14)])
$game_bank.interest_rate = interest_rate unless interest_rate == 0
@bonds = bonds
end
#--------------------------------------------------------------------------
# * Main Processing
#--------------------------------------------------------------------------
def main
# Current Phase
@phase = -1
# Refreshing Variables
@amount, @depositing = 0, true
@current_bond, @bond_bought = nil, false
# Make sprite set
@spriteset = Spriteset_Map.new
# Help Window
@help_window = Window_Help.new
@help_window.y, @help_window.opacity = -64, 175
@help_window.set_text("Welcome to the Bank", 1)
# Bank Bio
@bank_bio_window = Window_BankBio.new
# Avaliable Bond Information Display Window
@av_bond_display_window = Window_Bond.new
# Owned Bond Information Display Window
@own_bond_display_window = Window_Bond.new
# Main Command
@main_command = Window_RefreshCommand.new(180, [
"Deposit #{g_word = $data_system.words.gold}",
"Withdraw #{g_word}", "Purchase Bond", "Get Mature Bond", "Exit"])
@main_command.x, @main_command.y, @main_command.opacity = 644, 272, 175
@main_command.active = false
# Bank Number Window
@bank_number_window = Window_BankNumber.new
# Avaliable Bonds Command
commands = []
@bonds.each {|x| commands.push(x.name)}; commands.push("Back")
@av_bond_command = Window_RefreshCommand.new(180, commands)
@av_bond_command.x, @av_bond_command.y = 644, 272
@av_bond_command.height, @av_bond_command.opacity = 192, 175
@av_bond_command.active = false
# CD's Have
@own_bond_command = Window_RefreshCommand.new(180, get_cd_list)
@own_bond_command.x, @own_bond_command.y = 644, 272
@own_bond_command.height, @own_bond_command.opacity = 192, 175
@own_bond_command.active = false
# Scene Objects
@objects = [@spriteset, @help_window, @bank_bio_window, @av_bond_display_window,
@own_bond_display_window, @main_command, @bank_number_window,
@av_bond_command, @own_bond_command]
# Execute transition
Graphics.transition
# Main loop
while $scene == self
# Update game screen
Graphics.update
# Update input information
Input.update
# Update Objects
@objects.each {|x| x.update}
# Updates Bank System
$game_bank.update
# Frame update
update
end
# Prepare for transition
Graphics.freeze
# Dispose of windows
@objects.each {|x| x.dispose}
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
# Splits Phases Up
case @phase
when -1 # Intro Phase
intro_update
when 0 # Main Phase
main_update
when 1 # Deposit or Withdraw Phase
account_update
when 2 # Buy CD Phase
buy_bond_update
when 3 # Get Mature CD Phse
get_bond_update
when 99 # Exit Phase
exit_update
end
end
#--------------------------------------------------------------------------
# * Intro Update
#--------------------------------------------------------------------------
def intro_update
# Moves Window Down
@help_window.y += 4 if @help_window.y < 0
if @help_window.y == 0
# Input Processing
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
# Returns to Scene
@phase = 99
elsif Input.trigger?(Input::C)
$game_system.se_play($data_system.decision_se)
# Switchs to Main Phase
@phase = 0
end
end
end
#--------------------------------------------------------------------------
# * Main Update
#--------------------------------------------------------------------------
def main_update
# Turns On Main Command
@main_command.active = true
# Turns Off Other Command Windows
@av_bond_command.active = @own_bond_command.active = false
# Moves In Active Windows
@bank_bio_window.z = @main_command.z = 9999
@bank_bio_window.x += 32 if @bank_bio_window.x < 16
@main_command.x -= 25 if @main_command.x > 444
# Moves Out Inactive Windows
@av_bond_display_window.x -= 32 if @av_bond_display_window.x > - 240
[@av_bond_display_window, @own_bond_display_window, @bank_number_window,
@av_bond_command, @own_bond_command].each {|window| window.z = 9995}
[@av_bond_command, @own_bond_command].each {|command|
command.x += 25 if command.x < 644}
@own_bond_display_window.x -= 25 if @own_bond_display_window.x > - 240
@bank_number_window.x += 32 if @bank_number_window.x < 640
# Sets Help Window
case @main_command.index
when 0; @help_window.set_text("Deposit Money Into your Account", 1)
when 1; @help_window.set_text("Withdraw Money From your Account", 1)
when 2; @help_window.set_text("Purchase a Savings Bond", 1)
when 3; @help_window.set_text("Take Out Mature Savings Bond", 1)
when 4; @help_window.set_text("Exit Bank", 1)
end
# Input Processing
if Input.trigger?(Input::B) # Returns to Map
$game_system.se_play($data_system.cancel_se)
@phase = 99
elsif Input.trigger?(Input::C)
$game_system.se_play($data_system.decision_se)
case @main_command.index
when 0 # Deposit
@amount, @depositing = 0, true
refresh_windows
@help_window.set_text("Deposit #{@amount} #{$data_system.words.gold}", 1)
@phase = 1
when 1 # Withdraw
@amount, @depositing = 0, false
refresh_windows
@help_window.set_text("Withdraw #{@amount} #{$data_system.words.gold}", 1)
@phase = 1
when 2 # Buy CD
@current_bond = @bonds[@av_bond_command.index]
@bond_bought = false
refresh_windows
@phase = 2
when 3 # Get CD
@current_bond = $game_bank.saving_bonds[@own_bond_command.index]
@bond_bought = true
refresh_windows
@phase = 3
when 4 # Exit Bank
@phase = 99
end
end
end
#--------------------------------------------------------------------------
# * Accpunt Update
#--------------------------------------------------------------------------
def account_update
# Turns Off Command Windows
@main_command.active = @av_bond_command.active = @own_bond_command.active = false
# Moves In Active Windows
@bank_bio_window.z = @bank_number_window.z = 9999
@bank_bio_window.x += 32 if @bank_bio_window.x < 16
@bank_number_window.x -= 32 if @bank_number_window.x > 384
# Moves Out Inactive Windows
@av_bond_display_window.z = @own_bond_display_window.z =
@main_command.z = @av_bond_command.z = @own_bond_command.z = 9995
@av_bond_display_window.x -= 32 if @av_bond_display_window.x > - 240
[@own_bond_display_window].each {|window| window.x -= 25 if window.x > - 240}
[@main_command, @av_bond_command, @own_bond_command].each {|command|
command.x += 25 if command.x < 644}
# Input Processing
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
@phase = 0
elsif Input.trigger?(Input::C)
$game_system.se_play($data_system.shop_se)
if @depositing
$game_bank.deposit(@amount)
refresh_windows
@phase = 0
else
$game_bank.withdraw(@amount)
refresh_windows
@phase = 0
end
elsif Input.repeat?(Input::LEFT) && Input.press?(Input::LEFT)
if @amount > 0
$game_system.se_play($data_system.cursor_se)
@amount -= 1
refresh_windows
@help_window.set_text("#{@depositing ? 'Deposit' : 'Withdraw'} #{@amount} #{$data_system.words.gold}", 1)
else
$game_system.se_play($data_system.buzzer_se)
end
elsif Input.repeat?(Input::RIGHT) && Input.press?(Input::RIGHT)
if @depositing
if @amount < $game_party.gold
$game_system.se_play($data_system.cursor_se)
@amount += 1
refresh_windows
@help_window.set_text("#{@depositing ? 'Deposit' : 'Withdraw'} #{@amount} #{$data_system.words.gold}", 1)
else
$game_system.se_play($data_system.buzzer_se)
end
else
if @amount < $game_bank.account_balance
$game_system.se_play($data_system.cursor_se)
@amount += 1
refresh_windows
@help_window.set_text("#{@depositing ? 'Deposit' : 'Withdraw'} #{@amount} #{$data_system.words.gold}", 1)
else
$game_system.se_play($data_system.buzzer_se)
end
end
elsif Input.repeat?(Input::UP) && Input.press?(Input::UP)
if @amount == 0
$game_system.se_play($data_system.buzzer_se)
else
$game_system.se_play($data_system.cursor_se)
@amount > 10 ? @amount -= 10 : @amount = 0
refresh_windows
@help_window.set_text("#{@depositing ? 'Deposit' : 'Withdraw'} #{@amount} #{$data_system.words.gold}", 1)
end
elsif Input.repeat?(Input::DOWN) && Input.press?(Input::DOWN)
if @depositing
if @amount < $game_party.gold
$game_system.se_play($data_system.cursor_se)
@amount < $game_party.gold - 10 ? @amount += 10 : @amount = $game_party.gold
refresh_windows
@help_window.set_text("#{@depositing ? 'Deposit' : 'Withdraw'} #{@amount} #{$data_system.words.gold}", 1)
else
$game_system.se_play($data_system.buzzer_se)
end
else
if @amount < $game_bank.account_balance
$game_system.se_play($data_system.cursor_se)
@amount < $game_bank.account_balance - 10 ? @amount += 10 : @amount = $game_bank.account_balance
refresh_windows
@help_window.set_text("#{@depositing ? 'Deposit' : 'Withdraw'} #{@amount} #{$data_system.words.gold}", 1)
else
$game_system.se_play($data_system.buzzer_se)
end
end
elsif Input.repeat?(Input::L) && Input.press?(Input::L)
if @amount == 0
$game_system.se_play($data_system.buzzer_se)
else
$game_system.se_play($data_system.cursor_se)
@amount > 100 ? @amount -= 100 : @amount = 0
refresh_windows
@help_window.set_text("#{@depositing ? 'Deposit' : 'Withdraw'} #{@amount} #{$data_system.words.gold}", 1)
end
elsif Input.repeat?(Input::R) && Input.press?(Input::R)
if @depositing
if @amount < $game_party.gold
$game_system.se_play($data_system.cursor_se)
@amount < $game_party.gold - 100 ? @amount += 100 : @amount = $game_party.gold
refresh_windows
@help_window.set_text("#{@depositing ? 'Deposit' : 'Withdraw'} #{@amount} #{$data_system.words.gold}", 1)
else
$game_system.se_play($data_system.buzzer_se)
end
else
if @amount < $game_bank.account_balance
$game_system.se_play($data_system.cursor_se)
@amount < $game_bank.account_balance - 100 ? @amount += 100 : @amount = $game_bank.account_balance
refresh_windows
@help_window.set_text("#{@depositing ? 'Deposit' : 'Withdraw'} #{@amount} #{$data_system.words.gold}", 1)
else
$game_system.se_play($data_system.buzzer_se)
end
end
end
end
#--------------------------------------------------------------------------
# * Buy Bond Update
#--------------------------------------------------------------------------
def buy_bond_update
# Turns On Avaliable Bond Window
@av_bond_command.active = true
# Turns Off Other Command Windows
@main_command.active = @own_bond_command.active = false
# Moves In Active Windows
@av_bond_display_window.z = @av_bond_command.z = 9999
@av_bond_display_window.x += 32 if @av_bond_display_window.x < 16
@av_bond_command.x -= 25 if @av_bond_command.x > 444
# Moves Out Inactive Windows
[@bank_bio_window, @bank_number_window, @own_bond_display_window,
@main_command, @own_bond_command].each {|window| window.z = 9995}
@bank_bio_window.x -= 32 if @bank_bio_window.x > - 240
@bank_number_window.x += 32 if @bank_number_window.x < 640
@own_bond_display_window.x -= 25 if @own_bond_display_window.x > - 240
[@main_command, @own_bond_command].each {|command| command.x += 25 if command.x < 644}
# Input Processing
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
@phase = 0
elsif Input.trigger?(Input::C)
if @av_bond_command.index == @bonds.size
$game_system.se_play($data_system.cancel_se)
@phase = 0
else
current_bond = @bonds[@av_bond_command.index].dup
if current_bond.cost > $game_party.gold
$game_system.se_play($data_system.buzzer_se)
else
$game_system.se_play($data_system.decision_se)
$game_party.lose_gold(current_bond.cost)
current_bond.set_times
$game_bank.add_bond(current_bond)
refresh_windows
@phase = 0
end
end
# Updates Current Bond
elsif Input.trigger?(Input::UP) or Input.trigger?(Input::DOWN)
@current_bond = @bonds[@av_bond_command.index]
refresh_windows
end
end
#--------------------------------------------------------------------------
# * Get Bond Update
#--------------------------------------------------------------------------
def get_bond_update
# Turns On Avaliable Bond Window
@own_bond_command.active = true
# Turns Off Other Command Windows
@main_command.active = @av_bond_command.active = false
# Moves In Active Windows
[@own_bond_display_window, @own_bond_command].each {|window| window.z = 9999}
@own_bond_display_window.x += 32 if @own_bond_display_window.x < 16
@own_bond_command.x -= 25 if @own_bond_command.x > 444
# Moves Out Inactive Windows
[@bank_bio_window, @av_bond_display_window, @main_command, @bank_number_window,
@av_bond_command].each {|window| window.z = 9995}
[@bank_bio_window, @av_bond_display_window].each {|window|
window.x -= 32 if window.x > - 240}
[@main_command, @av_bond_command].each {|window|
window.x += 25 if window.x < 640}
@bank_number_window.x += 32 if @bank_number_window.x < 640
# Input Processing
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
@phase = 0
elsif Input.trigger?(Input::C)
if @own_bond_command.index == $game_bank.saving_bonds.size
$game_system.se_play($data_system.cancel_se)
@phase = 0
else
current_bond = $game_bank.saving_bonds[@own_bond_command.index]
if current_bond.time_finished > Graphics.frame_count / Graphics.frame_rate
$game_system.se_play($data_system.buzzer_se)
@help_window.set_text("Savings Bond Not Mature Yet!", 1)
else
$game_system.se_play($data_system.decision_se)
$game_party.gain_gold(current_bond.mature_value)
$game_bank.saving_bonds.delete_at[@own_bond_command.index]
refresh_windows
@phase = 0
end
end
elsif Input.trigger?(Input::UP) or Input.trigger?(Input::DOWN)
@current_bond = $game_bank.saving_bonds[@own_bond_command.index]
refresh_windows
end
end
#--------------------------------------------------------------------------
# * Exit Update
#--------------------------------------------------------------------------
def exit_update
# Moves Out Windows
@help_window.y -= 4 if @help_window.y > - 64
[@bank_bio_window, @av_bond_display_window].each {|window| window.x -= 32 if window.x > - 240}
[@own_bond_display_window].each {|window| window.x -= 25 if window.x > - 240}
[@main_command, @bank_number_window, @av_bond_command,
@own_bond_command].each {|window| window.x += 25 if window.x < 640}
# Checks To Make Sure All Windows Are Out
if @help_window.y <= - 64 && @bank_bio_window.x <= - 240 && @av_bond_display_window.x <= - 240 &&
@own_bond_display_window.x <= - 240 && @main_command.x >= 644 &&
@bank_number_window.x >= 640 && @av_bond_command.x >= 640 && @own_bond_command.x >= 640
$scene = Scene_Map.new
end
end
#--------------------------------------------------------------------------
# * Get CD List
#--------------------------------------------------------------------------
def get_cd_list
commands = []
$game_bank.saving_bonds.each {|x| commands.push(x.name)}
commands.push("Back")
return commands
end
#--------------------------------------------------------------------------
# * Refresh Windows
#--------------------------------------------------------------------------
def refresh_windows
@bank_bio_window.refresh
@av_bond_display_window.refresh(@current_bond, @bond_bought)
@own_bond_display_window.refresh(@current_bond, @bond_bought)
@bank_number_window.refresh(@amount, @depositing ? "Deposit" : "Withdraw")
@own_bond_command.refresh(get_cd_list)
end
end
So if anyone could make me a new script, or can somehow combine the 2, i would love you forever!