Код:
#==============================================================================
# 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
Социальные закладки