The RPG Maker Resource Kit

RMRK RPG Maker Creation => XP => XP Scripts Database => Topic started by: Leon_Westbrooke on January 24, 2008, 09:47:32 PM

Title: [RMXP] New Shop Interface
Post by: Leon_Westbrooke on January 24, 2008, 09:47:32 PM
New Shop Interface by Leon_Westbrooke
Version: 1.1
Type: Shopping System

Introduction
This script is for all of those who want a new way of looking at the shopping menu.

Features


Screenshots
Spoiler for screenshots:
(https://rmrk.net/proxy.php?request=http%3A%2F%2Fi50.photobucket.com%2Falbums%2Ff310%2Fvirtuouspaladin9%2Fshop1.png&hash=18a357672ae920ce27c6be68b74dbd1bfbabf55d)
(https://rmrk.net/proxy.php?request=http%3A%2F%2Fi50.photobucket.com%2Falbums%2Ff310%2Fvirtuouspaladin9%2Fshop2.png&hash=f9fde88a6ceb31a9e2bac0f6ea16d029ae6d7c36)

Script
Place the script below all defaults, but above main:
Spoiler for Leon's Shopping System Script:
Code: [Select]
#===============================================================================
#  Leon's Shopping System
#-------------------------------------------------------------------------------
#  3/10/2007
#  v. 1.0
#-------------------------------------------------------------------------------
#  Instructions:
# Place above main, and below the other default scripts.
#   (Yes, that is all of the instructions)
#
#  Features:
# Replaces the default shop system.
#
#===============================================================================


#===============================================================================
#  Window_Shop_Info
#===============================================================================
class Window_Shop_Info < Window_Base
  def initialize
super(160, 0, 480, 64)
self.contents = Bitmap.new(width - 32, height - 32)
refresh
  end
 
  def refresh(selection = 0)
self.contents.clear
if selection == 0
  self.contents.draw_text(0, 0, 448, 32, "Buy, sell, or leave?", 1)
else
  self.contents.draw_text(0, 0, 448, 32, "Press 'Z' for character compatabilitiy.", 1)
end
  end
end
#===============================================================================
#  END Window_Shop_Info
#===============================================================================


#===============================================================================
#  Window_Shop_Option
#===============================================================================
class Window_Shop_Option < Window_Selectable
  def initialize
super(0, 0, 160, 128)
@option = ["Buy", "Sell", "Leave"]
@item_max = @option.size
self.contents = Bitmap.new(width - 32, height - 32)
self.index = 0
self.active = true
refresh
  end
 
  def refresh
self.contents.clear
for i in 0...@option.size
  y = i * 32
  self.contents.draw_text(0, y, 128, 32, @option[i], 1)
end
  end
end
#===============================================================================
#  END Window_Shop_Option
#===============================================================================


#===============================================================================
#  Window_Shop_Gold
#===============================================================================
class Window_Shop_Gold < Window_Base
  def initialize
super(0, 128, 160, 64)
self.contents = Bitmap.new(width - 32, height - 32)
refresh
  end
 
  def refresh
self.contents.clear
self.contents.font.color = system_color
self.contents.draw_text(0, 0, 60, 32, $data_system.words.gold + ":")
self.contents.font.color = normal_color
self.contents.draw_text(0, 0, 128, 32, $game_party.gold.to_s, 2)
  end
end
#===============================================================================
#  END Window_Shop_Gold
#===============================================================================


#===============================================================================
#  Window_Shop_Own
#===============================================================================
class Window_Shop_Own < Window_Base
  def initialize
super(0, 192, 160, 64)
self.contents = Bitmap.new(width - 32, height - 32)
item = nil
refresh(item)
  end
 
  def refresh(item)
self.contents.clear
self.contents.font.color = system_color
self.contents.draw_text(0, 0, 48, 32, "Own:")
if item == nil
  return
end
self.contents.font.color = normal_color
case item
when RPG::Item
  number = $game_party.item_number(item.id)
when RPG::Weapon
  number = $game_party.weapon_number(item.id)
when RPG::Armor
  number = $game_party.armor_number(item.id)
end
self.contents.draw_text(0, 0, 128, 32, number.to_s, 2)
  end
end
#===============================================================================
#  END Window_Shop_Own
#===============================================================================


#===============================================================================
#  Window_Shop_List
#===============================================================================
class Window_Shop_List < Window_Selectable
  def initialize(shop_goods)
super(160, 64, 480, 192)
self.contents = Bitmap.new(width - 32, height - 32)
self.active = false
self.index = 0
self.visible = false
@shop_goods = shop_goods
@sell = false
  end
 
  def item
if @data != nil
  return @data[index]
end
  end
 
  def refresh
@sell = false
@option_index = nil
if self.contents != nil
  self.contents.dispose
  self.contents = nil
end
@data = []
for goods_item in @shop_goods
  case goods_item[0]
  when 0
item = $data_items[goods_item[1]]
  when 1
item = $data_weapons[goods_item[1]]
  when 2
item = $data_armors[goods_item[1]]
  end
  if item != nil
@data.push(item)
  end
end
@item_max = @data.size
if @item_max > 0
  self.contents = Bitmap.new(width - 32, row_max * 32)
  for i in 0...@item_max
draw_item(i)
  end
end
  end
 
  def refresh_sell(option_index)
@sell = true
@option_index = option_index
if self.contents != nil
  self.contents.dispose
  self.contents = nil
end
@data = []
for i in 1...$data_items.size
  if $game_party.item_number(i) > 0
@data.push($data_items[i])
  end
end
for i in 1...$data_weapons.size
  if $game_party.weapon_number(i) > 0
@data.push($data_weapons[i])
  end
end
for i in 1...$data_armors.size
  if $game_party.armor_number(i) > 0
@data.push($data_armors[i])
  end
end
@item_max = @data.size
if @item_max > 0
  self.contents = Bitmap.new(width - 32, row_max * 32)
  for i in 0...@item_max
draw_item(i)
  end
end
  end
 
  def draw_item(index)
item = @data[index]
case item
when RPG::Item
  number = $game_party.item_number(item.id)
when RPG::Weapon
  number = $game_party.weapon_number(item.id)
when RPG::Armor
  number = $game_party.armor_number(item.id)
end
if @option_index == nil
  if item.price <= $game_party.gold and number < 99
self.contents.font.color = normal_color
  else
self.contents.font.color = disabled_color
  end
else
  self.contents.font.color = normal_color
end
x = 4
y = index * 32
if item.price == 0
  self.contents.font.color = disabled_color
else
  self.contents.font.color = normal_color
end
if @sell == false
  if item.price <= $game_party.gold and number < 99
self.contents.font.color = normal_color
  else
self.contents.font.color = disabled_color
  end
end
rect = Rect.new(x, y, self.width - 32, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
bitmap = RPG::Cache.icon(item.icon_name)
opacity = self.contents.font.color == normal_color ? 255 : 128
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
if @option_index == nil
  self.contents.draw_text(x + 350, y, 88, 32, item.price.to_s, 2)
else
  item_price = (item.price / 2).round
  self.contents.draw_text(x + 350, y, 88, 32, item_price.to_s, 2)
end
  end
end
#===============================================================================
#  END Window_Shop_List
#===============================================================================


#===============================================================================
#  Window_Shop_Description_Item
#===============================================================================
class Window_Shop_Description_Item < Window_Base
  def initialize
super(90, 256, 460, 192)
self.contents = Bitmap.new(width - 32, height - 32)
self.visible = false
item = nil
refresh(item)
  end
 
  def refresh(item)
self.contents.clear
if item == nil
  return
end
bitmap = RPG::Cache.icon(item.icon_name)
opacity = self.contents.font.color == normal_color ? 255 : 128
self.contents.blt(0, 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
self.contents.draw_text(28, 0, 120, 32, item.name)
self.contents.draw_text(0, 32, 428, 32, item.description)
self.contents.font.color = system_color
self.contents.draw_text(0, 64, 120, 32, "Range:")
self.contents.draw_text(0, 96, 140, 32, "% HP Recovered:")
self.contents.draw_text(0, 128, 140, 32, "% SP Recovered:")
self.contents.draw_text(230, 96, 120, 32, "HP Recovered:")
self.contents.draw_text(230, 128, 120, 32, "SP Recovered:")
self.contents.font.color = normal_color
self.contents.draw_text(150, 96, 90, 32, item.recover_hp_rate.to_s)
self.contents.draw_text(150, 128, 90, 32, item.recover_sp_rate.to_s)
self.contents.draw_text(360, 96, 90, 32, item.recover_hp.to_s)
self.contents.draw_text(360, 128, 90, 32, item.recover_sp.to_s)
case item.scope
when 0
  self.contents.draw_text(70, 64, 120, 32, "None")
when 1
  self.contents.draw_text(70, 64, 120, 32, "One Enemy")
when 2
  self.contents.draw_text(70, 64, 120, 32, "All Enemies")
when 3
  self.contents.draw_text(70, 64, 120, 32, "One Ally")
when 4
  self.contents.draw_text(70, 64, 120, 32, "All Allies")
when 5
  self.contents.draw_text(70, 64, 120, 32, "One Dead Ally")
when 6
  self.contents.draw_text(70, 64, 120, 32, "All Dead Allies")
when 7
  self.contents.draw_text(70, 64, 120, 32, "User")
end
  end
end
#===============================================================================
#  END Window_Shop_Description_Item
#===============================================================================


#===============================================================================
#  Window_Shop_Description_Equipment
#===============================================================================
class Window_Shop_Description_Equipment < Window_Base
  def initialize
super(0, 256, 640, 224)
self.contents = Bitmap.new(width - 32, height - 32)
self.visible = false
item = nil
refresh(item)
  end
 
  def refresh(item)
self.contents.clear
if item == nil
  return
end
bitmap = RPG::Cache.icon(item.icon_name)
opacity = self.contents.font.color == normal_color ? 255 : 128
self.contents.blt(0, 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
self.contents.draw_text(28, 0, 120, 32, item.name)
self.contents.draw_text(0, 32, 460, 32, item.description)
self.contents.font.color = system_color
if item.is_a?(RPG::Weapon)
  self.contents.draw_text(0, 64, 75, 32, "Attack:")
  self.contents.draw_text(0, 96, 120, 32, "Phys. Def:")
  self.contents.draw_text(0, 128, 120, 32, "Mag. Def:")
  self.contents.draw_text(165, 64, 120, 32, "Str:")
  self.contents.draw_text(165, 96, 120, 32, "Dex:")
  self.contents.draw_text(165, 128, 120, 32, "Agi:")
  self.contents.draw_text(165, 160, 120, 32, "Int:")
  self.contents.draw_text(290, 64, 120, 32, "Elements:")
  self.contents.draw_text(470, 64, 120, 32, "Inflicts:")
else
  self.contents.draw_text(0, 64, 120, 32, "Phys. Def:")
  self.contents.draw_text(0, 96, 120, 32, "Mag. Def:")
  self.contents.draw_text(0, 128, 120, 32, "Evade:")
  self.contents.draw_text(0, 160, 120, 32, "Auto:")
  self.contents.draw_text(165, 64, 120, 32, "Str:")
  self.contents.draw_text(165, 96, 120, 32, "Dex:")
  self.contents.draw_text(165, 128, 120, 32, "Agi:")
  self.contents.draw_text(165, 160, 120, 32, "Int:")
  self.contents.draw_text(370, 64, 120, 32, "Guards Against:")
end
self.contents.font.color = normal_color
if item.is_a?(RPG::Weapon)
  self.contents.draw_text(60, 64, 75, 32, item.atk.to_s)
  self.contents.draw_text(90, 96, 75, 32, item.pdef.to_s)
  self.contents.draw_text(90, 128, 75, 32, item.mdef.to_s)
  self.contents.draw_text(195, 64, 50, 32, item.str_plus.to_s, 2)
  self.contents.draw_text(195, 96, 50, 32, item.dex_plus.to_s, 2)
  self.contents.draw_text(195, 128, 50, 32, item.agi_plus.to_s, 2)
  self.contents.draw_text(195, 160, 50, 32, item.int_plus.to_s, 2)
  self.contents.font.size = 14
  for i in 0...item.element_set.size
x = 265 + i % 2 * 75
y = 80 + i / 2 * 14
self.contents.draw_text(x, y, 120, 32, $data_system.elements[item.element_set[i]])
  end
  for i in 0...item.plus_state_set.size
x = 445 + i % 2 * 75
y = 80 + i / 2 * 14
self.contents.draw_text(x, y, 120, 32, $data_states[item.plus_state_set[i]].name)
  end
else
  self.contents.draw_text(90, 64, 75, 32, item.pdef.to_s)
  self.contents.draw_text(90, 96, 75, 32, item.mdef.to_s)
  self.contents.draw_text(60, 128, 75, 32, item.eva.to_s)
  if $data_states[item.auto_state_id] != nil
self.contents.draw_text(55, 160, 75, 32, $data_states[item.auto_state_id].name)
  end
  self.contents.draw_text(195, 64, 50, 32, item.str_plus.to_s, 2)
  self.contents.draw_text(195, 96, 50, 32, item.dex_plus.to_s, 2)
  self.contents.draw_text(195, 128, 50, 32, item.agi_plus.to_s, 2)
  self.contents.draw_text(195, 160, 50, 32, item.int_plus.to_s, 2)
  self.contents.font.size = 14
  @defense = []
  for i in 0...item.guard_element_set.size
@defense.push($data_system.elements[item.guard_element_set[i]])
  end
  for i in 0...item.guard_state_set.size
@defense.push($data_states[item.guard_state_set[i]].name)
  end
  for i in 0...@defense.size
x = 265 + i % 4 * 80
y = 80 + i / 4 * 14
self.contents.draw_text(x + 15, y, 85, 32, @defense[i])
  end
end
self.contents.font.size = 22
  end
end
#===============================================================================
#  END Window_Shop_Description_Equipment
#===============================================================================


#===============================================================================
#  Window_Shop_Actors
#===============================================================================
class Window_Shop_Actors < Window_Base
  def initialize
super(84, 32, 472, 416)
self.contents = Bitmap.new(width - 32, height - 32)
self.visible = false
self.active = false
self.z += 100
item = nil
refresh(item)
  end
 
  def refresh(item)
self.contents.clear
if item == nil
  return
end
for i in 0...$game_party.actors.size
  x = i%2 * 236
  y = i/2 * 192
  draw_actor_graphic($game_party.actors[i], x + 16, y + 48)
  draw_actor_name($game_party.actors[i], x + 48, y + 8)
  pdef1 = item.pdef
  mdef1 = item.mdef
  str1 = item.str_plus
  dex1 = item.dex_plus
  agi1 = item.agi_plus
  int1 = item.int_plus
  atk2 = 0
  eva2 = 0
  pdef2 = 0
  mdef2 = 0
  str2 = 0
  dex2 = 0
  agi2 = 0
  int2 = 0
  if item.is_a?(RPG::Weapon)
if $data_weapons[$game_party.actors[i].weapon_id] != nil
  atk1 = item.atk
  atk2 = $data_weapons[$game_party.actors[i].weapon_id].atk
  pdef2 = $data_weapons[$game_party.actors[i].weapon_id].pdef
  mdef2 = $data_weapons[$game_party.actors[i].weapon_id].mdef
  str2 = $data_weapons[$game_party.actors[i].weapon_id].str_plus
  dex2 = $data_weapons[$game_party.actors[i].weapon_id].dex_plus
  agi2 = $data_weapons[$game_party.actors[i].weapon_id].agi_plus
  int2 = $data_weapons[$game_party.actors[i].weapon_id].int_plus
end
  else
eva1 = item.eva
case item.kind
when 0
if $data_armors[$game_party.actors[i].armor1_id] != nil
  eva2 = $data_armors[$game_party.actors[i].armor1_id].eva
  pdef2 = $data_armors[$game_party.actors[i].armor1_id].pdef
  mdef2 = $data_armors[$game_party.actors[i].armor1_id].mdef
  str2 = $data_armors[$game_party.actors[i].armor1_id].str_plus
  dex2 = $data_armors[$game_party.actors[i].armor1_id].dex_plus
  agi2 = $data_armors[$game_party.actors[i].armor1_id].agi_plus
  int2 = $data_armors[$game_party.actors[i].armor1_id].int_plus
end
when 1
if $data_armors[$game_party.actors[i].armor2_id] != nil
  eva2 = $data_armors[$game_party.actors[i].armor2_id].eva
  pdef2 = $data_armors[$game_party.actors[i].armor2_id].pdef
  mdef2 = $data_armors[$game_party.actors[i].armor2_id].mdef
  str2 = $data_armors[$game_party.actors[i].armor2_id].str_plus
  dex2 = $data_armors[$game_party.actors[i].armor2_id].dex_plus
  agi2 = $data_armors[$game_party.actors[i].armor2_id].agi_plus
  int2 = $data_armors[$game_party.actors[i].armor2_id].int_plus
end
when 2
if $data_armors[$game_party.actors[i].armor3_id] != nil
  eva2 = $data_armors[$game_party.actors[i].armor3_id].eva
  pdef2 = $data_armors[$game_party.actors[i].armor3_id].pdef
  mdef2 = $data_armors[$game_party.actors[i].armor3_id].mdef
  str2 = $data_armors[$game_party.actors[i].armor3_id].str_plus
  dex2 = $data_armors[$game_party.actors[i].armor3_id].dex_plus
  agi2 = $data_armors[$game_party.actors[i].armor3_id].agi_plus
  int2 = $data_armors[$game_party.actors[i].armor3_id].int_plus
end
when 3
if $data_armors[$game_party.actors[i].armor4_id] != nil
  eva2 = $data_armors[$game_party.actors[i].armor4_id].eva
  pdef2 = $data_armors[$game_party.actors[i].armor4_id].pdef
  mdef2 = $data_armors[$game_party.actors[i].armor4_id].mdef
  str2 = $data_armors[$game_party.actors[i].armor4_id].str_plus
  dex2 = $data_armors[$game_party.actors[i].armor4_id].dex_plus
  agi2 = $data_armors[$game_party.actors[i].armor4_id].agi_plus
  int2 = $data_armors[$game_party.actors[i].armor4_id].int_plus
end
end
  end
  color1 = Color.new(25, 210, 25, 255)
  color2 = Color.new(210, 25, 25, 255)
  if $game_party.actors[i].equippable?(item)
self.contents.font.color = normal_color
# PDEF
if (pdef1 - pdef2) > 0
  self.contents.font.color = color1
elsif (pdef1 - pdef2) < 0
  self.contents.font.color = color2
else
  self.contents.font.color = normal_color
end
self.contents.draw_text(x + 25, y + 80, 70, 32, (pdef1 - pdef2).to_s, 2)
# MDEF
if (mdef1 - mdef2) > 0
  self.contents.font.color = color1
elsif (mdef1 - mdef2) < 0
  self.contents.font.color = color2
else
  self.contents.font.color = normal_color
end
self.contents.draw_text(x + 25, y + 112, 70, 32, (mdef1 - mdef2).to_s, 2)
# STR
if (str1 - str2) > 0
  self.contents.font.color = color1
elsif (str1 - str2) < 0
  self.contents.font.color = color2
else
  self.contents.font.color = normal_color
end
self.contents.draw_text(x + 125, y + 48, 70, 32, (str1 - str2).to_s, 2)
# DEX
if (dex1 - dex2) > 0
  self.contents.font.color = color1
elsif (dex1 - dex2) < 0
  self.contents.font.color = color2
else
  self.contents.font.color = normal_color
end
self.contents.draw_text(x + 125, y + 80, 70, 32, (dex1 - dex2).to_s, 2)
# AGI
if (agi1 - agi2) > 0
  self.contents.font.color = color1
elsif (agi1 - agi2) < 0
  self.contents.font.color = color2
else
  self.contents.font.color = normal_color
end
self.contents.draw_text(x + 125, y + 112, 70, 32, (agi1 - agi2).to_s, 2)
# INT
if (int1 - int2) > 0
  self.contents.font.color = color1
elsif (int1 - int2) < 0
  self.contents.font.color = color2
else
  self.contents.font.color = normal_color
end
self.contents.draw_text(x + 125, y + 144, 70, 32, (int1 - int2).to_s, 2)
if item.is_a?(RPG::Weapon)
  self.contents.font.color = system_color
  self.contents.draw_text(x, y + 48, 80, 32, "Atk:")
  self.contents.draw_text(x, y + 80, 80, 32, "Pdef:")
  self.contents.draw_text(x, y + 112, 80, 32, "Mdef:")
  self.contents.draw_text(x + 110, y + 48, 80, 32, "Str:")
  self.contents.draw_text(x + 110, y + 80, 80, 32, "Dex:")
  self.contents.draw_text(x + 110, y + 112, 80, 32, "Agi:")
  self.contents.draw_text(x + 110, y + 144, 80, 32, "Int:")
  self.contents.font.color = normal_color
  #  ATTACK
  if (atk1 - atk2) > 0
self.contents.font.color = color1
  elsif (atk1 - atk2) < 0
self.contents.font.color = color2
  else
self.contents.font.color = normal_color
  end
  self.contents.draw_text(x + 25, y + 48, 70, 32, (atk1 - atk2).to_s, 2)
  #  ELSE if armor...
else
  self.contents.font.color = system_color
  self.contents.draw_text(x, y + 48, 80, 32, "Eva:")
  self.contents.draw_text(x, y + 80, 80, 32, "Pdef:")
  self.contents.draw_text(x, y + 112, 80, 32, "Mdef:")
  self.contents.draw_text(x + 110, y + 48, 80, 32, "Str:")
  self.contents.draw_text(x + 110, y + 80, 80, 32, "Dex:")
  self.contents.draw_text(x + 110, y + 112, 80, 32, "Agi:")
  self.contents.draw_text(x + 110, y + 144, 80, 32, "Int:")
  self.contents.font.color = normal_color
  if (eva1 - eva2) > 0
self.contents.font.color = color1
  elsif (eva1 - eva2) < 0
self.contents.font.color = color2
  else
self.contents.font.color = normal_color
  end
  self.contents.draw_text(x + 25, y + 48, 70, 32, (eva1 - eva2).to_s, 2)
end
  else
self.contents.font.color = disabled_color
self.contents.draw_text(x + 10, y + 80, 120, 32, "Cannot Equip")
self.contents.font.color = normal_color
  end
end
  end
end
#===============================================================================
#  END Window_Shop_Actors
#===============================================================================


#===============================================================================
#  Window_Shop_Amount
#===============================================================================
class Window_Shop_Amount < Window_Selectable
 
  attr_accessor :amount
 
  def initialize
super(80, 208, 480, 96)
@item_max = 1
self.contents = Bitmap.new(width - 32, height - 32)
self.visible = false
self.z += 100
@amount = 1
item = $data_items[1]
option_index = 0
refresh(item, option_index)
  end
 
  def refresh(item, option_index)
self.contents.clear
if item == nil
  return
end
if option_index == nil
  return
end
if option_index == 0
  self.contents.font.color = system_color
  self.contents.draw_text(0, 0, 200, 32, "How many?")
  self.contents.font.color = normal_color
  if $game_party.gold < (@amount * item.price)
self.contents.font.color = disabled_color
  end
  bitmap = RPG::Cache.icon(item.icon_name)
  opacity = self.contents.font.color == normal_color ? 255 : 128
  self.contents.blt(0, 36, bitmap, Rect.new(0, 0, 24, 24), opacity)
  self.contents.draw_text(28, 32, 120, 32, item.name)
  self.contents.draw_text(335, 32, 10, 32, "x")
  self.contents.draw_text(280, 32, 30, 32, @amount.to_s, 2)
  self.cursor_rect.set(284, 32, 32, 32)
  self.contents.draw_text(370, 32, 70, 32, (@amount * item.price).to_s, 2)
else
  self.contents.font.color = system_color
  self.contents.draw_text(0, 0, 200, 32, "How many?")
  self.contents.font.color = normal_color
  bitmap = RPG::Cache.icon(item.icon_name)
  opacity = self.contents.font.color == normal_color ? 255 : 128
  self.contents.blt(0, 36, bitmap, Rect.new(0, 0, 24, 24), opacity)
  self.contents.draw_text(28, 32, 120, 32, item.name)
  self.contents.draw_text(335, 32, 10, 32, "x")
  self.contents.draw_text(280, 32, 30, 32, @amount.to_s, 2)
  self.cursor_rect.set(284, 32, 32, 32)
  self.contents.draw_text(370, 32, 70, 32, (@amount * (item.price / 2)).to_s, 2)
end
  end
end
#===============================================================================
#  END Window_Shop_Amount
#===============================================================================


#===============================================================================
#  Scene_Shop
#===============================================================================
class Scene_Shop
  def main
@counter = 0
@info_window = Window_Shop_Info.new
@option_window = Window_Shop_Option.new
@gold_window = Window_Shop_Gold.new
@own_window = Window_Shop_Own.new
@list_window = Window_Shop_List.new($game_temp.shop_goods)
@desc_item_window = Window_Shop_Description_Item.new
@desc_equip_window = Window_Shop_Description_Equipment.new
@actor_window = Window_Shop_Actors.new
@amount_window = Window_Shop_Amount.new

Graphics.transition
loop do
  Graphics.update
  Input.update
  update
  if $scene != self
break
  end
end
Graphics.freeze

@info_window.dispose
@option_window.dispose
@gold_window.dispose
@own_window.dispose
@list_window.dispose
@desc_item_window.dispose
@desc_equip_window.dispose
@actor_window.dispose
@amount_window.dispose
  end
 
  def update
@info_window.update
@option_window.update
@gold_window.update
@own_window.update
@list_window.update
@desc_item_window.update
@desc_equip_window.update
@actor_window.update
@amount_window.update

if @option_window.active
  update_option
  return
end

if @list_window.active
  update_list
  return
end

if @actor_window.visible
  update_actors
  return
end

if @amount_window.active and @option_window.index == 0
  update_amount
  return
end

if @amount_window.active and @option_window.index == 1
  update_sell
  return
end
  end
 
  def update_option
@info_window.refresh(0)
if Input.trigger?(Input::B)
  $game_system.se_play($data_system.cancel_se)
  $scene = Scene_Map.new
  return
end
if Input.trigger?(Input::C)
  case @option_window.index
  when 0
$game_system.se_play($data_system.decision_se)
@list_window.refresh
@option_window.active = false
@list_window.visible = true
@list_window.active = true
@list_window.index = 0
  when 1
$game_system.se_play($data_system.decision_se)
@list_window.refresh_sell(@option_window.index)
@option_window.active = false
@list_window.visible = true
@list_window.active = true
@list_window.index = 0
  when 2
$game_system.se_play($data_system.cancel_se)
$scene = Scene_Map.new
return
  end
end
  end
 
  def update_list
@info_window.refresh(1)
@item = @list_window.item
if @counter != 1
  if @item.is_a?(RPG::Item)
@desc_item_window.refresh(@item)
@counter = 1
  else
@desc_equip_window.refresh(@item)
@counter = 1
  end
end
@own_window.refresh(@list_window.item)
if Input.trigger?(Input::UP) or Input.trigger?(Input::DOWN) or Input.repeat?(Input::UP) or Input.repeat?(Input::DOWN)
  @counter = 0
end
if @item.is_a?(RPG::Item)
  if @counter != 1
@desc_item_window.refresh(@item)
@counter = 1
  end
  @desc_item_window.visible = true
  @desc_equip_window.visible = false
else
  if @counter != 1
@desc_equip_window.refresh(@item)
@counter = 1
  end
  @desc_item_window.visible = false
  @desc_equip_window.visible = true
end
if Input.trigger?(Input::B)
  @counter = 0
  $game_system.se_play($data_system.cancel_se)
  @desc_item_window.visible = false
  @desc_equip_window.visible = false
  @desc_item_window.refresh(nil)
  @desc_equip_window.refresh(nil)
  @option_window.active = true
  @list_window.visible = false
  @list_window.active = false
  @own_window.refresh(nil)
  return
end
if Input.trigger?(Input::A)
  unless @item.is_a?(RPG::Item)
$game_system.se_play($data_system.decision_se)
@actor_window.refresh(@item)
@actor_window.visible = true
@list_window.active = false
return
  else
$game_system.se_play($data_system.buzzer_se)
  end
end
if Input.trigger?(Input::C)
  if @item == nil or @item.id == 0 or @item.price == 0
$game_system.se_play($data_system.buzzer_se)
return
  end
  if @option_window.index == 0
case @item
when RPG::Item
  if $game_party.item_number(@item.id) >= 99
$game_system.se_play($data_system.buzzer_se)
return
  end
when RPG::Weapon
if $game_party.weapon_number(@item.id) >= 99
$game_system.se_play($data_system.buzzer_se)
return
  end
when RPG::Armor
  if $game_party.armor_number(@item.id) >= 99
$game_system.se_play($data_system.buzzer_se)
return
  end
end
  end
  $game_system.se_play($data_system.decision_se)
  @amount_window.visible = true
  @amount_window.active = true
  @list_window.active = false
  return
end
  end
 
  def update_actors
if Input.trigger?(Input::B)
  $game_system.se_play($data_system.cancel_se)
  @actor_window.visible = false
  @list_window.active = true
end
  end
 
  def update_amount
@amount_window.refresh(@item, @option_window.index)
if Input.trigger?(Input::B)
  $game_system.se_play($data_system.cancel_se)
  @amount_window.amount = 1
  @amount_window.visible = false
  @amount_window.active = false
  @list_window.active = true
  return
end
if Input.trigger?(Input::C)
  if $game_party.gold >= (@amount_window.amount * @item.price)
$game_system.se_play($data_system.decision_se)
$game_party.lose_gold(@amount_window.amount * @item.price)
case @item
when RPG::Item
  $game_party.gain_item(@item.id, @amount_window.amount)
when RPG::Weapon
  $game_party.gain_weapon(@item.id, @amount_window.amount)
when RPG::Armor
  $game_party.gain_armor(@item.id, @amount_window.amount)
end
@gold_window.refresh
@amount_window.amount = 1
@amount_window.visible = false
@amount_window.active = false
@list_window.active = true
@list_window.refresh
return
  else
$game_system.se_play($data_system.buzzer_se)
  end
end
if Input.trigger?(Input::LEFT)
  $game_system.se_play($data_system.cursor_se)
  @amount_window.amount -= 1
  if @amount_window.amount == 0
@amount_window.amount = 1
  end
  return
end
if Input.trigger?(Input::RIGHT)
  $game_system.se_play($data_system.cursor_se)
  @amount_window.amount += 1
  case @item
  when RPG::Item
if ($game_party.item_number(@item.id) + @amount_window.amount) > 99
  @amount_window.amount = (99 - $game_party.item_number(@item.id))
end
  when RPG::Weapon
if ($game_party.weapon_number(@item.id) + @amount_window.amount) > 99
  @amount_window.amount = (99 - $game_party.weapon_number(@item.id))
end
  when RPG::Armor
if ($game_party.armor_number(@item.id) + @amount_window.amount) > 99
  @amount_window.amount = (99 - $game_party.armor_number(@item.id))
end
  end
  return
end
if Input.trigger?(Input::UP)
  $game_system.se_play($data_system.cursor_se)
  @amount_window.amount += 10
  case @item
  when RPG::Item
if ($game_party.item_number(@item.id) + @amount_window.amount) > 99
  @amount_window.amount = (99 - $game_party.item_number(@item.id))
end
  when RPG::Weapon
if ($game_party.weapon_number(@item.id) + @amount_window.amount) > 99
  @amount_window.amount = (99 - $game_party.weapon_number(@item.id))
end
  when RPG::Armor
if ($game_party.armor_number(@item.id) + @amount_window.amount) > 99
  @amount_window.amount = (99 - $game_party.armor_number(@item.id))
end
  end
  return
end
if Input.trigger?(Input::DOWN)
  $game_system.se_play($data_system.cursor_se)
  @amount_window.amount -= 10
  if @amount_window.amount < 1
@amount_window.amount = 1
  end
  return
end
  end
 
  def update_sell
@amount_window.refresh(@item, @option_window.index)
if Input.trigger?(Input::B)
  $game_system.se_play($data_system.cancel_se)
  @amount_window.amount = 1
  @amount_window.visible = false
  @amount_window.active = false
  @list_window.active = true
  return
end
if Input.trigger?(Input::C)
  if @item.price == 0
$game_system.se_play($data_system.buzzer_se)
return
  end
  $game_system.se_play($data_system.decision_se)
  case @item
  when RPG::Item
$game_party.gain_gold(@amount_window.amount * (@item.price / 2))
$game_party.lose_item(@item.id, @amount_window.amount)
  when RPG::Weapon
$game_party.gain_gold(@amount_window.amount * (@item.price / 2))
$game_party.lose_weapon(@item.id, @amount_window.amount)
  when RPG::Armor
$game_party.gain_gold(@amount_window.amount * (@item.price / 2))
$game_party.lose_armor(@item.id, @amount_window.amount)
  end
  @gold_window.refresh
  @amount_window.amount = 1
  @amount_window.visible = false
  @amount_window.active = false
  @list_window.active = true
  @list_window.refresh_sell(@option_window.index)
  @desc_equip_window.refresh(nil)
  @desc_item_window.refresh(nil)
end
if Input.trigger?(Input::LEFT)
  $game_system.se_play($data_system.cursor_se)
  @amount_window.amount -= 1
  if @amount_window.amount < 1
@amount_window.amount = 1
  end
end
if Input.trigger?(Input::RIGHT)
  $game_system.se_play($data_system.cursor_se)
  case @item
  when RPG::Item
@amount_window.amount += 1
if @amount_window.amount > $game_party.item_number(@item.id)
  @amount_window.amount = $game_party.item_number(@item.id)
end
  when RPG::Weapon
@amount_window.amount += 1
if @amount_window.amount > $game_party.weapon_number(@item.id)
  @amount_window.amount = $game_party.weapon_number(@item.id)
end
  when RPG::Armor
@amount_window.amount += 1
if @amount_window.amount > $game_party.armor_number(@item.id)
  @amount_window.amount = $game_party.armor_number(@item.id)
end
  end
end
if Input.trigger?(Input::UP)
  $game_system.se_play($data_system.cursor_se)
  case @item
  when RPG::Item
@amount_window.amount += 10
if @amount_window.amount > $game_party.item_number(@item.id)
  @amount_window.amount = $game_party.item_number(@item.id)
end
  when RPG::Weapon
@amount_window.amount += 10
if @amount_window.amount > $game_party.weapon_number(@item.id)
  @amount_window.amount = $game_party.weapon_number(@item.id)
end
  when RPG::Armor
@amount_window.amount += 10
if @amount_window.amount > $game_party.armor_number(@item.id)
  @amount_window.amount = $game_party.armor_number(@item.id)
end
  end
end
if Input.trigger?(Input::DOWN)
  $game_system.se_play($data_system.cursor_se)
  @amount_window.amount -= 10
  if @amount_window.amount < 1
@amount_window.amount = 1
  end
end
  end
 
end



Instructions
Please look in-script.

Compatibility
There are no known compatability issues.

Credits and Thanks
The only person to really credit is me.
Title: Re: [RMXP] New Shop Interface
Post by: Kokowam on January 24, 2008, 09:53:05 PM
Haha, looks nice :) Why'd I laugh? Idk.
Title: Re: [RMXP] New Shop Interface
Post by: modern algebra on January 24, 2008, 10:14:59 PM
Very nice design. Good job.
Title: Re: [RMXP] New Shop Interface
Post by: Erk64 on February 01, 2008, 05:42:06 PM
It won't work for me. I get a syntax error on line 439.
Title: Re: [RMXP] New Shop Interface
Post by: modern algebra on February 01, 2008, 05:57:25 PM
Hmm, yeah, looks like the code is corrupted. I'll put it in a code box and you should be fine.

EDIT::
Done, now just copy and paste it again.
Title: Re: [RMXP] New Shop Interface
Post by: Erk64 on February 01, 2008, 06:03:16 PM
Okay, that's better. It works now. Thanks!
Title: Re: [RMXP] New Shop Interface
Post by: Leon_Westbrooke on February 02, 2008, 02:42:26 AM
Small bug fixed:

Fixed Bug:
  -If you had the exact amount as an item in the shop, it would be greyed out, but you could buy it.
Title: Re: [RMXP] New Shop Interface
Post by: Sx2 on April 02, 2008, 11:08:26 PM
dude this is sweet it much better than defualt

you rock!!
Title: Re: [RMXP] New Shop Interface
Post by: Kumaru on June 11, 2008, 02:02:08 AM
ok i downloaded the script but...there's no font in the windows. help please?
Title: Re: [RMXP] New Shop Interface
Post by: jackmesser on October 12, 2008, 10:38:29 AM
I have the same problem as Kumaru. theres no text in the box's but otherwise it works, any fix's? thanks

Jack/
~Zushau~
Title: Re: [RMXP] New Shop Interface
Post by: modern algebra on October 12, 2008, 03:13:36 PM
Works fine for me. I'm guessing you are using PK. In which case Blizzard has a global font fix somewhere. Try his site: http://forum.chaos-project.com/
Title: Re: [RMXP] New Shop Interface
Post by: jackmesser on October 13, 2008, 05:01:39 PM
Works fine for me. I'm guessing you are using PK. In which case Blizzard has a global font fix somewhere. Try his site: http://forum.chaos-project.com/

Yeah ive jsut recently "got" rpgmaker XP and well it works, i have a feeling that it doesnt work on PK unless u download the font, http://forum.chaos-project.com/
Title: Re: [RMXP] New Shop Interface
Post by: modern algebra on October 13, 2008, 07:42:32 PM
There's no special font defined in the script though. I suspect the problem has to do with $defaultfontface - a global variable set in PK but not in regular.
Title: Re: [RMXP] New Shop Interface
Post by: tSwitch on October 14, 2008, 02:51:23 PM
the ultimate font override in tons of addons should solve the problem
some scripts have issues with text showing, such as CMS and etc...
Title: Re: [RMXP] New Shop Interface
Post by: pookinator on October 24, 2008, 10:08:38 PM
Great script, looks much better than original in rmxp.  :)
Title: Re: [RMXP] New Shop Interface
Post by: Snailer on December 07, 2008, 09:30:18 PM
Really cool thanks a bunch!