class Window_ShopBuy < Window_Selectable
def initialize(x, y, height, shop_goods)
super(x, y, window_width, height)
@shop_goods = shop_goods
@category = :item
@money = 0
refresh
select(0)
end
def category=(category)
return if @category == category
@category = category
refresh
self.oy = 0
end
def make_item_list
@data = []
@price = {}
categories = { :item => 0,:weapon => 1 ,:armor => 2, :key_item => 0 }
@shop_goods.each do |goods|
next unless goods[0] == categories[@category]
case goods[0]
when 0; item = $data_items[goods[1]]
when 1; item = $data_weapons[goods[1]]
when 2; item = $data_armors[goods[1]]
end
if item
next if (@category == :item && item.key_item?)
next if (@category == :key_item && !item.key_item?)
@data.push(item)
@price[item] = goods[2] == 0 ? item.price : goods[3]
end
end
end
end
class Scene_Shop < Scene_MenuBase
def start
super
create_help_window
create_gold_window
create_command_window
create_dummy_window
create_number_window
create_buy_category_window
create_category_window
create_status_window
create_buy_window
create_sell_window
end
def create_buy_window
wy = @dummy_window.y + @category_window.height
wh = @dummy_window.height - @category_window.height
@buy_window = Window_ShopBuy.new(0, wy, wh, @goods)
@buy_window.viewport = @viewport
@buy_window.help_window = @help_window
@buy_window.status_window = @status_window
@buy_window.hide
@buy_window.set_handler(:ok, method(:on_buy_ok))
@buy_window.set_handler(:cancel, method(:on_buy_cancel))
@buy_category_window.item_window = @buy_window
end
def create_status_window
wx = @number_window.width
wy = @dummy_window.y + @category_window.height
ww = Graphics.width - wx
wh = @dummy_window.height - @category_window.height
@status_window = Window_ShopStatus.new(wx, wy, ww, wh)
@status_window.viewport = @viewport
@status_window.hide
end
def create_buy_category_window
@buy_category_window = Window_ItemCategory.new
@buy_category_window.viewport = @viewport
@buy_category_window.help_window = @help_window
@buy_category_window.y = @dummy_window.y
@buy_category_window.hide.deactivate
@buy_category_window.set_handler(:ok, method(:on_buy_category_ok))
@buy_category_window.set_handler(:cancel, method(:on_buy_category_cancel))
end
def command_buy
@dummy_window.hide
@buy_window.show
@status_window.show
@buy_category_window.show.activate
end
def on_buy_cancel
@buy_category_window.activate
@buy_window.select(0)
@status_window.item = nil
@help_window.clear
end
def on_buy_category_ok
activate_buy_window
end
def on_buy_category_cancel
@command_window.activate
@dummy_window.show
@buy_category_window.hide
@buy_window.hide
@buy_window.deactivate
@status_window.hide
@status_window.item = nil
@help_window.clear
end
end