luistop12Jue Dic 06, 2012 4:39 pm
SUPER MODERADOR
les traigo el sistema de tiendas de mog hunter
ASI
como notan les digo que las imagenes de la derecha son personalizables
es decir que si quieres que tu personaje tenga nombre debes ponerlo así, si se llama Yivo la imagen se llamara Yivo_name
deben poner estas imagenes en graphic\Menu si no está la crean
y esta en graphic\system
script
CREDITOS:moghunter[center]
ASI
como notan les digo que las imagenes de la derecha son personalizables
es decir que si quieres que tu personaje tenga nombre debes ponerlo así, si se llama Yivo la imagen se llamara Yivo_name
deben poner estas imagenes en graphic\Menu si no está la crean
- Spoiler:
y esta en graphic\system
- Spoiler:
script
- Código:
#==============================================================================
# MOG VX - Scene Shop V1.2
#==============================================================================
# By Moghunter
# http://www.atelier-rgss.com/
#==============================================================================
# Menu com layout em imagens.
# Para customizar basta mudar as imagens, criando seus próprios layouts.
#==============================================================================
# 1 - Crie uma pasta com o nome MENUS. (GRAPHICS/MENUS)
# 2 - Deverão conter as seguintes imagens nesta pasta.
#
# Background
# Item_Back
# Shop_Par_Text
# Shop_Possession
# Shop_Status_Back
# Shop01
# Shop02
# Shop03
# Shop04
#
# 3 - Será necessário ter a seguinte imagem na pasta System.
#
# Number_01
#
# 4 - Opcional, você poderá criar os nomes dos personagems em pictures, para
# isso crie uma imagem com o nome do personagem e nomeie da seguinte forma
#
# Nome_do_personagem + _name.png
#
# Exemplo - Ralph_name.png
# Grave a imagem na pasta GRAPHICS/MENUS
#
#==============================================================================
module MOG_SCENE_SHOP
#Texto da janela de ajuda de compras.
BUY_TEXT = "Comprar Itens."
#Texto da janela de ajuda de vendas.
SELL_TEXT = "Vender Itens"
#Velocidade de movimento das janelas.
SLIDE_SPEED = 20
#Delizar a imagem de fundo.
SLIDE_BACKGROUND = true
end
#==============================================================================
# ■ Cache
#==============================================================================
module Cache
#--------------------------------------------------------------------------
# Menu
#--------------------------------------------------------------------------
def self.menu(filename)
load_bitmap("Graphics/Menus/", filename)
end
end
#==============================================================================
# ■ Window_Base
#==============================================================================
class Window_Base < Window
#--------------------------------------------------------------------------
# ● draw_picture_number(x,y,value,file_name,align, space, frame_max ,frame_index)
#--------------------------------------------------------------------------
# X - Posição na horizontal
# Y - Posição na vertical
# VALUE - Valor Numérico
# FILE_NAME - Nome do arquivo
# ALIGN - Centralizar 0 - Esquerda 1- Centro 2 - Direita
# SPACE - Espaço entre os números.
# FRAME_MAX - Quantidade de quadros(Linhas) que a imagem vai ter.
# FRAME_INDEX - Definição do quadro a ser utilizado.
#--------------------------------------------------------------------------
def draw_picture_number(x,y,value, file_name,align = 0, space = 0, frame_max = 1,frame_index = 0)
number_image = Cache.system(file_name)
frame_max = 1 if frame_max < 1
frame_index = frame_max if frame_index > frame_max
align = 2 if align > 2
cw = number_image.width / 10
ch = number_image.height / frame_max
h = ch * frame_index
number = value.abs.to_s.split(//)
case align
when 0
plus_x = (-cw + space) * number.size
when 1
plus_x = (-cw + space) * number.size
plus_x /= 2
when 2
plus_x = 0
end
for r in 0..number.size - 1
number_abs = number[r].to_i
number_rect = Rect.new(cw * number_abs, h, cw, ch)
self.contents.blt(plus_x + x + ((cw - space) * r), y , number_image, number_rect)
end
end
#--------------------------------------------------------------------------
# * draw_actor_face_shop
#--------------------------------------------------------------------------
def draw_actor_face_shop(actor, x, y, size = 96)
draw_face_shop(actor.face_name, actor.face_index, x, y, size)
end
#--------------------------------------------------------------------------
# * draw_face_shop
#--------------------------------------------------------------------------
def draw_face_shop(face_name, face_index, x, y, size = 32)
bitmap = Cache.face(face_name)
rx = face_index % 4 * 96 + (96 - size) / 2
ry = face_index / 4 * 96 + (96 - size) / 2
rect = Rect.new(rx,ry + 20, 96,32)
bitmap.stretch_blt( bitmap.rect, bitmap, bitmap.rect)
self.contents.blt(x, y, bitmap, rect)
bitmap.dispose
end
#--------------------------------------------------------------------------
# * draw_possession
#--------------------------------------------------------------------------
def draw_possession(x,y)
image = Cache.menu("Shop_Possession")
cw = image.width
ch = image.height
src_rect = Rect.new(0, 0, cw, ch)
self.contents.blt(x , y , image, src_rect)
image.dispose
end
#--------------------------------------------------------------------------
# * draw_status_back
#--------------------------------------------------------------------------
def draw_status_back(x,y)
image = Cache.menu("Shop_Status_Back")
cw = image.width
ch = image.height
src_rect = Rect.new(0, 0, cw, ch)
self.contents.blt(x , y , image, src_rect)
image.dispose
end
#--------------------------------------------------------------------------
# * image_name_exist?
#--------------------------------------------------------------------------
def image_name_exist?(actor)
Cache.menu(actor.name + "_Name") rescue return false
end
#--------------------------------------------------------------------------
# * Draw_Name_Menu
#--------------------------------------------------------------------------
def draw_actor_name_menu(actor,x,y)
if image_name_exist?(actor)
image_name = actor.name + "_Name"
image = Cache.menu(image_name)
cw = image.width
ch = image.height
src_rect = Rect.new(0, 0, cw, ch)
self.contents.blt(x , y , image, src_rect)
image.dispose
else
self.contents.font.name = "Georgia"
self.contents.font.bold = true
self.contents.font.size = 18
self.contents.font.color = Color.new(255,255,255,255)
self.contents.draw_text(x, y, 108, WLH, actor.name)
end
end
#--------------------------------------------------------------------------
# * draw_item_back
#--------------------------------------------------------------------------
def draw_item_back(x,y,type)
if type == 1
image = Cache.menu("Item_Back2")
else
image = Cache.menu("Item_Back")
end
cw = image.width
ch = image.height
src_rect = Rect.new(0, 0, cw, ch)
self.contents.blt(x , y , image, src_rect)
image.dispose
end
#--------------------------------------------------------------------------
# * draw_parameter_text
#--------------------------------------------------------------------------
def draw_parameter_text(x,y)
image = Cache.menu("Shop_Par_Text")
cw = image.width
ch = image.height
src_rect = Rect.new(0, 0, cw, ch)
self.contents.blt(x , y , image, src_rect)
image.dispose
end
#--------------------------------------------------------------------------
# * Draw Item Name 2
#--------------------------------------------------------------------------
def draw_item_name_menu(item, x, y, size = 172 ,align = 0,enabled = true)
if item != nil
draw_icon(item.icon_index, x, y, enabled)
self.contents.font.color = normal_color
self.contents.font.color.alpha = enabled ? 255 : 128
self.contents.draw_text(x + 24, y, size, WLH, item.name,align)
end
end
end
#==============================================================================
# ■ Window_Help
#==============================================================================
class Window_Help < Window_Base
attr_accessor :text
end
#==============================================================================
# ■ Window_ShopBuy
#==============================================================================
class Window_ShopBuy < Window_Selectable
#--------------------------------------------------------------------------
# ● initialize
#--------------------------------------------------------------------------
def initialize(x, y)
super(x, y, 284, 296)
@shop_goods = $game_temp.shop_goods
refresh
self.opacity = 0
self.index = 0
end
#--------------------------------------------------------------------------
# ● item
#--------------------------------------------------------------------------
def item
return @data[self.index]
end
#--------------------------------------------------------------------------
# ● refresh
#--------------------------------------------------------------------------
def refresh
@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
create_contents
for i in 0...@item_max
draw_item(i)
end
end
#--------------------------------------------------------------------------
# ● draw_item
#--------------------------------------------------------------------------
def draw_item(index)
item = @data[index]
number = $game_party.item_number(item)
enabled = (item.price <= $game_party.gold and number < 99)
rect = item_rect(index)
self.contents.clear_rect(rect)
self.contents.font.name = "Georgia"
self.contents.font.bold = true
self.contents.font.size = 18
draw_item_back(rect.x,rect.y,0)
draw_item_name_menu(item, rect.x , rect.y, 120,0,enabled)
rect.width -= 4
file_name = "Number_01"
draw_picture_number(rect.x + 250 ,rect.y ,item.price,file_name,0,0,3,0)
end
#--------------------------------------------------------------------------
# ● update_help
#--------------------------------------------------------------------------
def update_help
@help_window.set_text(item == nil ? "" : item.description)
end
end
#==============================================================================
# ■ Window_Item_Shop
#==============================================================================
class Window_Item_Shop < Window_Selectable
#--------------------------------------------------------------------------
# ● initialize
#--------------------------------------------------------------------------
def initialize(x, y, width, height)
super(x, y, width, height)
@column_max = 2
self.index = 0
refresh
end
#--------------------------------------------------------------------------
# ● item
#--------------------------------------------------------------------------
def item
return @data[self.index]
end
#--------------------------------------------------------------------------
# ● include
#--------------------------------------------------------------------------
def include?(item)
return false if item == nil
if $game_temp.in_battle
return false unless item.is_a?(RPG::Item)
end
return true
end
#--------------------------------------------------------------------------
# ● enable
#--------------------------------------------------------------------------
def enable?(item)
return $game_party.item_can_use?(item)
end
#--------------------------------------------------------------------------
# ● refresh
#--------------------------------------------------------------------------
def refresh
@data = []
for item in $game_party.items
next unless include?(item)
@data.push(item)
if item.is_a?(RPG::Item) and item.id == $game_party.last_item_id
self.index = @data.size - 1
end
end
@data.push(nil) if include?(nil)
@item_max = @data.size
create_contents
for i in 0...@item_max
draw_item(i)
end
end
#--------------------------------------------------------------------------
# ● draw_item
#--------------------------------------------------------------------------
def draw_item(index)
rect = item_rect(index)
self.contents.clear_rect(rect)
self.contents.font.name = "Georgia"
self.contents.font.bold = true
self.contents.font.size = 18
item = @data[index]
if item != nil
number = $game_party.item_number(item)
enabled = enable?(item)
rect.width -= 4
draw_item_back(rect.x,rect.y,0)
draw_item_name(item, rect.x, rect.y, enabled)
file_name = "Number_01"
draw_picture_number(rect.x + 247,rect.y,number,file_name,0,0,3,0)
end
end
#--------------------------------------------------------------------------
# ● update_help
#--------------------------------------------------------------------------
def update_help
@help_window.set_text(item == nil ? "" : item.description)
end
end
#==============================================================================
# ■ Window_ShopSell
#==============================================================================
class Window_ShopSell < Window_Item_Shop
#--------------------------------------------------------------------------
# ● initialize
#--------------------------------------------------------------------------
def initialize(x, y, width, height)
super(x, y, width, height)
self.opacity = 0
end
#--------------------------------------------------------------------------
# ● include?
#--------------------------------------------------------------------------
def include?(item)
return item != nil
end
#--------------------------------------------------------------------------
# ● enable?
#--------------------------------------------------------------------------
def enable?(item)
return (item.price > 0)
end
end
#==============================================================================
# ■ Window_ShopNumber
#==============================================================================
class Window_ShopNumber < Window_Base
#--------------------------------------------------------------------------
# ● initialize
#--------------------------------------------------------------------------
def initialize(x, y)
super(x, y, 310, 225)
@item = nil
@max = 1
@price = 0
@number = 1
self.opacity = 0
end
#--------------------------------------------------------------------------
# ● set
#--------------------------------------------------------------------------
def set(item, max, price)
@item = item
@max = max
@price = price
@number = 1
refresh
end
#--------------------------------------------------------------------------
# ● number
#--------------------------------------------------------------------------
def number
return @number
end
#--------------------------------------------------------------------------
# ● refresh
#--------------------------------------------------------------------------
def refresh
y = 96
self.contents.clear
self.contents.font.name = "Georgia"
self.contents.font.bold = true
self.contents.font.size = 18
draw_item_name(@item, 0, y)
self.contents.font.color = normal_color
self.contents.draw_text(212, y, 20, WLH, "×")
file_name = "Number_01"
draw_picture_number(280 ,y ,@number,file_name,0,0,3,0)
self.cursor_rect.set(244, y, 34, WLH)
valor = @price * @number
draw_picture_number(280 ,y + 32,valor,file_name,0,0,3,0)
end
#--------------------------------------------------------------------------
# ● update
#--------------------------------------------------------------------------
def update
super
if self.active
last_number = @number
if Input.repeat?(Input::RIGHT) and @number < @max
@number += 1
end
if Input.repeat?(Input::LEFT) and @number > 1
@number -= 1
end
if Input.repeat?(Input::UP) and @number < @max
@number = [@number + 10, @max].min
end
if Input.repeat?(Input::DOWN) and @number > 1
@number = [@number - 10, 1].max
end
if @number != last_number
Sound.play_cursor
refresh
end
end
end
end
#==============================================================================
# ■ Window_ShopStatus
#==============================================================================
class Window_ShopStatus < Window_Base
#--------------------------------------------------------------------------
# ● initialize
#--------------------------------------------------------------------------
def initialize(x, y)
super(x, y, 280, 380)
@item = nil
self.opacity = 0
refresh
end
#--------------------------------------------------------------------------
# ● refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
if @item != nil
number = $game_party.item_number(@item)
self.contents.font.color = normal_color
file_name = "Number_01"
draw_picture_number(204,0,number,file_name,0,0,3,0)
draw_possession(60,0)
for actor in $game_party.members
x = 4
y = 35 + (75 * actor.index)
draw_actor_parameter_change(actor, x, y)
end
end
end
#--------------------------------------------------------------------------
# ● draw_actor_parameter_change
#--------------------------------------------------------------------------
def draw_actor_parameter_change(actor, x, y)
return if @item.is_a?(RPG::Item)
enabled = actor.equippable?(@item)
return if enabled == false
self.contents.font.color = normal_color
self.contents.font.color.alpha = enabled ? 255 : 128
self.contents.font.name = "Georgia"
self.contents.font.bold = true
self.contents.font.size = 18
draw_status_back(x ,y )
draw_actor_name_menu(actor,x ,y )
draw_actor_face_shop(actor,x + 125 ,y )
if @item.is_a?(RPG::Weapon)
item1 = weaker_weapon(actor)
elsif actor.two_swords_style and @item.kind == 0
item1 = nil
else
item1 = actor.equips[1 + @item.kind]
end
x2 = 60
y2 = 48
draw_parameter_text(x,y + 48)
if enabled
file_name = "Number_01"
#ATK --------------------------------------------------------
atk1 = item1 == nil ? 0 : item1.atk
atk2 = @item == nil ? 0 : @item.atk
change = atk2 - atk1
if atk1 == atk2
draw_picture_number(x + 45,y + y2,change,file_name,1,8,3,0)
elsif atk1 > atk2
draw_picture_number(x + 45,y + y2,change,file_name,1,8,3,2)
else
draw_picture_number(x + 45 ,y + y2,change,file_name,1,8,3,1)
end
#DEF --------------------------------------------------------
def1 = item1 == nil ? 0 : item1.def
def2 = @item == nil ? 0 : @item.def
change = def2 - def1
if def1 == def2
draw_picture_number(x + 45 + x2 * 1,y + y2,change,file_name,1,8,3,0)
elsif def1 > def2
draw_picture_number(x + 45 + x2 * 1,y + y2,change,file_name,1,8,3,2)
else
draw_picture_number(x + 45 + x2 * 1,y + y2,change,file_name,1,8,3,1)
end
#MAG --------------------------------------------------------
spi1 = item1 == nil ? 0 : item1.spi
spi2 = @item == nil ? 0 : @item.spi
change = spi2 - spi1
if spi1 == spi2
draw_picture_number(x + 45 + x2 * 2,y + y2,change,file_name,1,8,3,0)
elsif spi1 > spi2
draw_picture_number(x + 45 + x2 * 2,y + y2,change,file_name,1,8,3,2)
else
draw_picture_number(x + 45 + x2 * 2,y + y2,change,file_name,1,8,3,1)
end
#AGI --------------------------------------------------------
agi1 = item1 == nil ? 0 : item1.agi
agi2 = @item == nil ? 0 : @item.agi
change = agi2 - agi1
if agi1 == agi2
draw_picture_number(x + 45 + x2 * 3,y + y2,change,file_name,1,8,3,0)
elsif agi1 > agi2
draw_picture_number(x + 45 + x2 * 3,y + y2,change,file_name,1,8,3,2)
else
draw_picture_number(x + 45 + x2 * 3,y + y2,change,file_name,1,8,3,1)
end
end
draw_item_name(item1, x + 15, y + WLH, enabled)
end
#--------------------------------------------------------------------------
# ● weaker_weapon
#--------------------------------------------------------------------------
def weaker_weapon(actor)
if actor.two_swords_style
weapon1 = actor.weapons[0]
weapon2 = actor.weapons[1]
if weapon1 == nil or weapon2 == nil
return nil
elsif weapon1.atk < weapon2.atk
return weapon1
else
return weapon2
end
else
return actor.weapons[0]
end
end
#--------------------------------------------------------------------------
# ● item
#--------------------------------------------------------------------------
def item=(item)
if @item != item
@item = item
refresh
end
end
end
#==============================================================================
# ■ Scene_Shop
#==============================================================================
class Scene_Shop < Scene_Base
include MOG_SCENE_SHOP
#--------------------------------------------------------------------------
# ● Start
#--------------------------------------------------------------------------
def start
super
# create_menu_background
create_command_window
@help_window = Window_Help.new
@help_window.y = 410
@help_window_time = 0
@help_window.opacity = 0
@help_text = @help_window.text
@buy_window = Window_ShopBuy.new(0, 80)
@buy_window.active = false
@buy_window_slide = false
@buy_window.visible = false
@buy_window.help_window = @help_window
@sell_window = Window_ShopSell.new(-20, 80, 570, 225)
@sell_window.active = false
@sell_window_slide = false
@sell_window.visible = false
@sell_window.help_window = @help_window
@number_window = Window_ShopNumber.new(0, 75)
@number_window.active = false
@number_window.visible = false
@number_window_slide = false
@status_window = Window_ShopStatus.new(304, 32)
@status_window.visible = false
@status_window_slide = false
@help_window.contents_opacity = 255
create_layout
command_refresh
end
#--------------------------------------------------------------------------
# ● Create_layout
#--------------------------------------------------------------------------
def create_layout
@menu_back = Plane.new
@menu_back.bitmap = Cache.menu("Background")
#LAYOUT 1 ----------------------
@menu_layout1 = Sprite.new
@menu_layout1.bitmap = Cache.menu("Shop01")
@menu_layout1.oy = 48
#LAYOUT 2 ---------------------
@menu_image = Cache.menu("Shop02")
@menu_bitmap = Bitmap.new(@menu_image.width,@menu_image.height)
@menu_width = @menu_image.width
@menu_height = @menu_image.height / 2
@menu_src_rect = Rect.new(0, @command_index * @menu_height, @menu_width, @menu_height)
@menu_bitmap.blt(0,0, @menu_image, @menu_src_rect)
@menu_layout2 = Sprite.new
@menu_layout2.bitmap = @menu_bitmap
@menu_layout2.oy = 48
#LAYOUT 3 ----------------------
@menu_layout3 = Sprite.new
@menu_layout3.bitmap = Cache.menu("Shop03")
@menu_layout3.oy = -48 - 318
#LAYOUT 4 ----------------------
@menu_layout4 = Sprite.new
@menu_layout4.bitmap = Cache.menu("Shop04")
@menu_layout4.opacity = 0
end
#--------------------------------------------------------------------------
# ● Pre Terminate
#--------------------------------------------------------------------------
def pre_terminate
super
for i in 0..15
@menu_back.ox += 1
@menu_layout1.oy += 4
@menu_layout2.oy += 4
@buy_window.x -= 12
@sell_window.x -= 12
@menu_layout3.oy -= 4
@help_window.oy += 4
@help_window.visible = false
@menu_layout1.opacity -= 14
@menu_layout2.opacity -= 14
@menu_layout3.opacity -= 14
@menu_layout4.opacity -= 14
@command_window.visible = false
@help_window.contents_opacity -= 14
@sell_window.contents_opacity -= 14
@buy_window.contents_opacity -= 14
@gold.update_dispose
Graphics.update
end
end
#--------------------------------------------------------------------------
# ● Terminate
#--------------------------------------------------------------------------
def terminate
super
dispose_command_window
@help_window.dispose
@buy_window.dispose
@sell_window.dispose
@number_window.dispose
@status_window.dispose
@menu_back.bitmap.dispose
@menu_back.dispose
@menu_layout1.bitmap.dispose
@menu_layout1.dispose
@menu_bitmap.dispose
@menu_layout2.bitmap.dispose
@menu_layout2.dispose
@menu_layout3.bitmap.dispose
@menu_layout3.dispose
@menu_layout4.bitmap.dispose
@menu_layout4.dispose
end
#--------------------------------------------------------------------------
# ● update
#--------------------------------------------------------------------------
def update
super
@menu_back.ox += 1 if SLIDE_BACKGROUND == true
update_slide
update_menu_background
@help_window.update
@command_window.update
@buy_window.update
@sell_window.update
@number_window.update
@status_window.update
update_text_slide
update_buy_slide
update_sell_slide
update_number_slide
update_status_slide
command_refresh if @command_index != @command_window.index
text_refresh if @help_text != @help_window.text
if @command_window.active
update_command_selection
elsif @buy_window.active
update_buy_selection
elsif @sell_window.active
update_sell_selection
elsif @number_window.active
update_number_input
end
end
#--------------------------------------------------------------------------
# ● update_text_slide
#-------------------------------------------------------------------------
def update_text_slide
@help_window_time -= 1 if @help_window_time > 0
@help_window.contents_opacity += 10 if @help_window.contents_opacity < 255
case @help_window_time
when 11..20
@help_window.x -= 3
when 1..10
@help_window.x += 3
end
end
#--------------------------------------------------------------------------
# ● update_status_slide
#--------------------------------------------------------------------------
def update_status_slide
if @status_window_slide == true
if @status_window.x > 274
@status_window.x -= SLIDE_SPEED
@status_window.contents_opacity += 15
@status_window.visible = true
else
@status_window.x = 274
@status_window.contents_opacity = 255
end
else
if @status_window.x < 454
@status_window.x += SLIDE_SPEED
@status_window.contents_opacity -= 15
else
@status_window.x = 454
@status_window.contents_opacity = 0
@status_window.visible = false
end
end
end
#--------------------------------------------------------------------------
# ● update_number_slide
#--------------------------------------------------------------------------
def update_number_slide
if @number_window_slide == true
if @number_window.x < 0
@number_window.x += SLIDE_SPEED
@number_window.contents_opacity += 15
@number_window.visible = true
else
@number_window.x = 0
@number_window.contents_opacity = 255
end
else
if @number_window.x > -150
@number_window.x -= SLIDE_SPEED
@number_window.contents_opacity -= 15
else
@number_window.x = -150
@number_window.contents_opacity = 0
@number_window.visible = false
end
end
end
#--------------------------------------------------------------------------
# ● update_buy_slide
#--------------------------------------------------------------------------
def update_buy_slide
if @buy_window_slide == true
if @buy_window.x < 0
@buy_window.x += SLIDE_SPEED
@buy_window.contents_opacity += 15
@buy_window.visible = true
else
@buy_window.x = 0
@buy_window.contents_opacity = 255
end
else
if @buy_window.x > -150
@buy_window.x -= SLIDE_SPEED
@buy_window.contents_opacity -= 15
else
@buy_window.x = -150
@buy_window.contents_opacity = 0
@buy_window.visible = false
end
end
end
#--------------------------------------------------------------------------
# ● update_buy_slide
#--------------------------------------------------------------------------
def update_sell_slide
if @sell_window_slide == true
if @sell_window.x < -10
@sell_window.x += SLIDE_SPEED
@sell_window.contents_opacity += 15
@sell_window.visible = true
else
@sell_window.x = -10
@sell_window.contents_opacity = 255
end
else
if @sell_window.x > -150
@sell_window.x -= SLIDE_SPEED
@sell_window.contents_opacity -= 15
else
@sell_window.x = -150
@sell_window.contents_opacity = 0
@sell_window.visible = false
end
end
end
#--------------------------------------------------------------------------
# ● text_refresh
#-------------------------------------------------------------------------
def text_refresh
@help_text = @help_window.text
@help_window.contents_opacity = 0
@help_window_time = 20
@help_window.x = 0
end
#--------------------------------------------------------------------------
# ● command_refresh
#--------------------------------------------------------------------------
def command_refresh
@command_index = @command_window.index
@menu_layout2.bitmap.clear
if @command_index == 0
@help_window.set_text(BUY_TEXT)
else
@help_window.set_text(SELL_TEXT)
end
@menu_src_rect = Rect.new(0, @command_index * @menu_height, @menu_width, @menu_height)
@menu_bitmap.blt(0,0, @menu_image, @menu_src_rect)
end
#--------------------------------------------------------------------------
# ● create_command_window
#--------------------------------------------------------------------------
def create_command_window
s1 = ""
s2 = ""
@command_window = Window_Command.new(400, [s1, s2], 3)
@command_window.x = 244
@command_window.y = 0
@command_window.opacity = 0
@command_window.contents_opacity = 0
@command_index = @command_window.index
if $game_temp.shop_purchase_only
@command_window.draw_item(1, false)
end
end
#--------------------------------------------------------------------------
# ● dispose_command_window
#--------------------------------------------------------------------------
def dispose_command_window
@command_window.dispose
end
#--------------------------------------------------------------------------
# ● update_slide
#--------------------------------------------------------------------------
def update_slide
@menu_layout4.opacity += 5
@menu_layout1.opacity += 10
@menu_layout2.opacity += 10
@menu_layout3.opacity += 10
#layout 1
if @menu_layout1.oy > 0
@menu_layout2.oy -= 4
@menu_layout1.oy -= 4
else
@menu_layout1.oy = 0
@menu_layout2.oy = 0
end
#Layout 3
if @menu_layout3.oy < -318
@menu_layout3.oy += 4
@help_window.y -=4
else
@menu_layout3.oy = -318
@help_window.y = 372
end
end
#--------------------------------------------------------------------------
# ● update_command_selection
#--------------------------------------------------------------------------
def update_command_selection
if Input.trigger?(Input::B)
Sound.play_cancel
@status_window.item = nil
$scene = Scene_Map.new
elsif Input.trigger?(Input::C)
case @command_window.index
when 0
Sound.play_decision
@command_window.active = false
@buy_window.active = true
@buy_window_slide = true
@buy_window.refresh
@status_window_slide = true
when 1
if $game_temp.shop_purchase_only
Sound.play_buzzer
else
Sound.play_decision
@command_window.active = false
@sell_window.active = true
@sell_window_slide = true
@sell_window.refresh
end
end
end
end
#--------------------------------------------------------------------------
# ● update_buy_selection
#--------------------------------------------------------------------------
def update_buy_selection
@status_window.item = @buy_window.item
if Input.trigger?(Input::B)
Sound.play_cancel
@command_window.active = true
@buy_window.active = false
@buy_window_slide = false
@status_window_slide = false
@help_window.set_text("")
command_refresh
return
end
if Input.trigger?(Input::C)
@item = @buy_window.item
number = $game_party.item_number(@item)
if @item == nil or @item.price > $game_party.gold or number == 99
Sound.play_buzzer
else
Sound.play_decision
max = @item.price == 0 ? 99 : $game_party.gold / @item.price
max = [max, 99 - number].min
@buy_window.active = false
@buy_window_slide = false
@number_window.set(@item, max, @item.price)
@number_window.active = true
@number_window_slide = true
end
end
end
#--------------------------------------------------------------------------
# ● update_sell_selection
#--------------------------------------------------------------------------
def update_sell_selection
if Input.trigger?(Input::B)
Sound.play_cancel
@command_window.active = true
@sell_window.active = false
@sell_window_slide = false
@status_window.item = nil
@help_window.set_text("")
command_refresh
elsif Input.trigger?(Input::C)
@item = @sell_window.item
@status_window.item = @item
if @item == nil or @item.price == 0
Sound.play_buzzer
else
Sound.play_decision
max = $game_party.item_number(@item)
@sell_window.active = false
@sell_window_slide = false
@number_window.set(@item, max, @item.price / 2)
@number_window.active = true
@number_window_slide = true
@status_window_slide = true
end
end
end
#--------------------------------------------------------------------------
# ● update_number_input
#--------------------------------------------------------------------------
def update_number_input
if Input.trigger?(Input::B)
cancel_number_input
elsif Input.trigger?(Input::C)
decide_number_input
end
end
#--------------------------------------------------------------------------
# ● cancel_number_input
#--------------------------------------------------------------------------
def cancel_number_input
Sound.play_cancel
@number_window.active = false
@number_window_slide = false
case @command_window.index
when 0
@buy_window.active = true
@buy_window_slide = true
when 1
@sell_window.active = true
@sell_window_slide = true
@status_window_slide = false
end
end
#--------------------------------------------------------------------------
# ● decide_number_input
#--------------------------------------------------------------------------
def decide_number_input
Sound.play_shop
@number_window.active = false
@number_window_slide = false
case @command_window.index
when 0
$game_party.lose_gold(@number_window.number * @item.price)
$game_party.gain_item(@item, @number_window.number)
@buy_window.refresh
@status_window.refresh
@buy_window.active = true
@buy_window_slide = true
when 1
$game_party.gain_gold(@number_window.number * (@item.price / 2))
$game_party.lose_item(@item, @number_window.number)
@sell_window.refresh
@status_window.refresh
@sell_window.active = true
@sell_window_slide = true
@status_window_slide = false
end
end
end
#===============================================================================
# Gold_Sprite
#===============================================================================
class Gold_Sprite < Sprite
include MOG_SCENE_SHOP
#--------------------------------------------------------------------------
# Initialize
#--------------------------------------------------------------------------
def initialize
super
create_sprite
end
#--------------------------------------------------------------------------
# * create_sprite
#--------------------------------------------------------------------------
def create_sprite
@gold = $game_party.gold
@gold_old = @gold
@gold_ref = @gold_old
@gold_refresh = false
@gold_number_image = Cache.system("Number_01")
@gold_number_bitmap = Bitmap.new(@gold_number_image.width,@gold_number_image.height)
@gold_number_sprite = Sprite.new
@gold_number_sprite.bitmap = @gold_number_bitmap
@gold_number_sprite.z = 1012
@gold_number_sprite.opacity = 0
@gold_number_sprite.x = 60
@gold_number_sprite.y = 53 + 48
@gold_im_cw = @gold_number_image.width / 10
@gold_im_ch = @gold_number_image.height / 3
@gold_number_text = @gold.abs.to_s.split(//)
for r in 0..@gold_number_text.size - 1
@gold_number_abs = @gold_number_text[r].to_i
@gold_src_rect = Rect.new(@gold_im_cw * @gold_number_abs, 0, @gold_im_cw, @gold_im_ch)
@gold_number_bitmap.blt(0 + ((@gold_im_cw - 5) * r), 2, @gold_number_image, @gold_src_rect)
end
end
#--------------------------------------------------------------------------
# * dispose
#--------------------------------------------------------------------------
def dispose
@gold_number_sprite.bitmap.dispose
@gold_number_sprite.dispose
@gold_number_bitmap.dispose
super
end
#--------------------------------------------------------------------------
# * Update Dispose
#--------------------------------------------------------------------------
def update_dispose
@gold_number_sprite.oy += 4
@gold_number_sprite.opacity -= 14
end
#--------------------------------------------------------------------------
# * update
#--------------------------------------------------------------------------
def update
super
update_slide
gold_number_down if @gold > $game_party.gold
gold_number_up if @gold < $game_party.gold
gold_number_update if @gold_refresh == true
end
#--------------------------------------------------------------------------
# * update_slide
#--------------------------------------------------------------------------
def update_slide
if @gold_number_sprite.oy < 48
@gold_number_sprite.oy += 4
@gold_number_sprite.opacity += 25
end
end
#--------------------------------------------------------------------------
# * gold_number_up
#--------------------------------------------------------------------------
def gold_number_up
@gold_refresh = true
@gold_ref = 20 * (@gold - @gold_old) / 100
@gold_ref = 1 if @gold_ref < 1
@gold += @gold_ref
if @gold >= $game_party.gold
@gold_old = $game_party.gold
@gold = $game_party.gold
@gold_ref = 0
end
end
#--------------------------------------------------------------------------
# * gold_number_down
#--------------------------------------------------------------------------
def gold_number_down
@gold_refresh = true
@gold_ref = 10 * (@gold_old - @gold) / 100
@gold_ref = 1 if @gold_ref < 1
@gold -= @gold_ref
if @gold <= $game_party.gold
@gold_old = $game_party.gold
@gold = $game_party.gold
@gold_ref = 0
end
end
#--------------------------------------------------------------------------
# * gold_number_update
#--------------------------------------------------------------------------
def gold_number_update
@gold_number_sprite.bitmap.clear
@gold_number_text = @gold.abs.to_s.split(//)
for r in 0..@gold_number_text.size - 1
@gold_number_abs = @gold_number_text[r].to_i
@gold_src_rect = Rect.new(@gold_im_cw * @gold_number_abs, 0, @gold_im_cw, @gold_im_ch)
@gold_number_bitmap.blt(0 + ((@gold_im_cw - 5) * r), 2, @gold_number_image, @gold_src_rect)
end
@gold_refresh = false if @gold == $game_party.gold
end
end
#===============================================================================
# Scene_Shop
#===============================================================================
class Scene_Shop < Scene_Base
#--------------------------------------------------------------------------
# * start
#--------------------------------------------------------------------------
alias mog_gold_start start
def start
mog_gold_start
create_gold
end
#--------------------------------------------------------------------------
# * create_gold
#--------------------------------------------------------------------------
def create_gold
@gold = Gold_Sprite.new
end
#--------------------------------------------------------------------------
# * terminate
#--------------------------------------------------------------------------
alias mog_gold_terminate terminate
def terminate
mog_gold_terminate
@gold.dispose
end
#--------------------------------------------------------------------------
# * update
#--------------------------------------------------------------------------
alias mog_gold_update update
def update
mog_gold_update
@gold.update
end
end
$mog_rgssvx_scene_shop = true
CREDITOS:moghunter[center]