출처 : http://www.rpgmakervxace.net/topic/12848-shop-stock/
=begin #=============================================================================== Title: Shop Stock Author: Tsukihime Date: Feb 22, 2013 -------------------------------------------------------------------------------- ** Change log Feb 22, 2013 - Initial release -------------------------------------------------------------------------------- ** Terms of Use * Free to use in commercial/non-commercial projects * No real support. The script is provided as-is * Will do bug fixes, but no compatibility patches * Features may be requested but no guarantees, especially if it is non-trivial * Preserve this header -------------------------------------------------------------------------------- ** Required -Shop Manager (http://himeworks.wordpress.com/2013/02/22/shop-manager/) -------------------------------------------------------------------------------- ** Description This script adds a "stock" count to each shop good. Once a good's stock reaches 0, it will no longer be available in the shop. -------------------------------------------------------------------------------- ** Usage In your event, before the Shop Processing command, use a script call @shop_stock[id] = amount Where `id` is the ID of the shop good, which is the index they appear in the shop list. The first item has ID of 1. `amount` is how much of the item they have in stock -------------------------------------------------------------------------------- ** Developers How much stock that a shop has remaining of a shop good is stored in the "stock" attribute of that good. There are three cases stock < 0, then there is no limit stock == 0, then there is none left stock > 0, then there is that much left #=============================================================================== =end $imported = {} if $imported.nil? $imported["TH_ShopStock"] = true #=============================================================================== # ** Configuration #=============================================================================== module TH module Shop_Stock end end #=============================================================================== # ** Rest of the Script #=============================================================================== class Game_Interpreter alias :th_shop_stock_clear :clear def clear th_shop_stock_clear @shop_stock = [] end alias :th_shop_stock_setup_good :setup_good def setup_good(good, id) th_shop_stock_setup_good(good, id) stock = @shop_stock[id] return unless stock good.stock = stock end end class Game_ShopGood attr_reader :stock alias :th_shop_stock_init :initialize def initialize(*args) th_shop_stock_init(*args) @stock = -1 @unlimited = true end def stock=(amount) @stock = amount @unlimited = (amount < 0) end def unlimited? @unlimited end def increase_stock(amount) @stock += amount end def decrease_stock(amount) return if @unlimited @stock = [@stock - amount, 0].max end end class Game_Shop alias :th_shop_stock_include? :include? def include?(index) return false if stock(index) == 0 th_shop_stock_include?(index) end def stock(index) @shop_goods[index].stock end end class Window_ShopBuy < Window_Selectable alias :th_shop_stock_include? :include? def include?(shopGood) return false if shopGood.stock == 0 th_shop_stock_include?(shopGood) end alias :th_shop_stock_draw_item :draw_item def draw_item(index) th_shop_stock_draw_item(index) rect = item_rect(index) item = @data[index] shopGood = @goods[item] draw_text(rect, shopGood.stock, 1) unless shopGood.unlimited? end alias :th_shop_stock_process_ok :process_ok def process_ok unless @data[index] Sound.play_buzzer return end th_shop_stock_process_ok end end class Scene_Shop < Scene_MenuBase #-------------------------------------------------------------------------- # Get amount you could buy, compared to the amount in-stock #-------------------------------------------------------------------------- alias :th_shop_stock_max_buy :max_buy def max_buy party_max = th_shop_stock_max_buy @selected_good.unlimited? ? party_max : [party_max, @selected_good.stock].min end #-------------------------------------------------------------------------- # Decrease the amount of stock of the selected good #-------------------------------------------------------------------------- alias :th_shop_stock_do_buy :do_buy def do_buy(number) th_shop_stock_do_buy(number) @selected_good.decrease_stock(number) end end
사용법
이벤트 : 상점을했을때, 이벤트 페이지에 나열되는 목록의 맨 위부터 ID:1, ID:2, …로 명함
상점 표시 전 이벤트 - 스크립트로
@shop_stock[n] = n
괄호의 n은 물건의 아이디, =의 n은 판매가능한 물건 수를 뜻함.