Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

Bank for Pokemon!

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.
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!
 

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top