赞 | 0 |
VIP | 30 |
好人卡 | 18 |
积分 | 1 |
经验 | 6108 |
最后登录 | 2014-5-20 |
在线时间 | 92 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 92 小时
- 注册时间
- 2013-2-23
- 帖子
- 130
|
原址:http://izumiwhite.web.fc2.com/rgss3/rgss3_005.html
这个脚本能实现以出售一定数量的素材会出现新的商品,但没办法改变上限。
需要用SceneManager.call(Scene_AddShop)呼出。
30行左右是编辑区用这些代码,例子:- I_mat[2] = [["I",1,2]]
- I_mat[3] = [["I",1,1], ["I",2,1]]
复制代码 等号前面代表追加商品,等号后面为素材,参考第2个例子可以指定多个素材。最前面的"I"跟双引号中的"I"代表ITEM,可以换成W(weapon)或A(armor),分别对应新商品跟素材。
ID是道具ID,后面的N代表售出数量。
完整脚本- #==============================================================================
- # ■ RGSS3 アイテム売却による商品追加ショップ ver 1.00
- #------------------------------------------------------------------------------
- # 配布元:
- # 白の魔 http://izumiwhite.web.fc2.com/
- #
- # 利用規約:
- # RPGツクールVX Aceの正規の登録者のみご利用になれます。
- # 利用報告・著作権表示とかは必要ありません。
- # 改造もご自由にどうぞ。
- # 何か問題が発生しても責任は持ちません。
- #==============================================================================
- #--------------------------------------------------------------------------
- # ★ 初期設定。
- # 販売条件の設定
- #--------------------------------------------------------------------------
- module WD_addshop_ini
- I_mat = [] #この行は削除しないこと
- W_mat = [] #この行は削除しないこと
- A_mat = [] #この行は削除しないこと
-
- #以下、販売条件リスト。
- #例: I_mat[3] = [ ["I",1,1], ["W",2,1], ["A",2,2], ["A",3,1]]
- #と記載した場合、ID3のアイテムの販売条件は、
- #ID1のアイテム1個、ID2の武器1個、ID2の防具2個、ID3の防具1個
- #の売却となる。
-
- #アイテムの販売条件
- I_mat[2] = [["I",1,2]]
- I_mat[3] = [["I",1,1], ["I",2,1]]
- I_mat[4] = [["I",1,3]]
- #武器の販売条件
- W_mat[3] = [["W",1,1], ["W",2,1]]
- W_mat[6] = [["W",3,1], ["I",16,1]]
-
- #防具の販売条件
- A_mat[2] = [["A",1,2]]
- A_mat[5] = [["A",2,1], ["W",2,2], ["I",16,1]]
-
- end
- #==============================================================================
- # ■ WD_addshop
- #------------------------------------------------------------------------------
- # アイテム売却による商品追加ショップの共通メソッドです。
- #==============================================================================
- module WD_addshop
- def i_add_switch_on(id)
- $game_system.i_add_sw = [] if $game_system.i_add_sw == nil
- $game_system.i_add_sw[id] = false if $game_system.i_add_sw[id] == nil
- $game_system.i_add_sw[id] = true
- end
- def i_add_switch_off(id)
- $game_system.i_add_sw = [] if $game_system.i_add_sw == nil
- $game_system.i_add_sw[id] = false if $game_system.i_add_sw[id] == nil
- $game_system.i_add_sw[id] = false
- end
- def i_add_switch_on?(id)
- $game_system.i_add_sw = [] if $game_system.i_add_sw == nil
- $game_system.i_add_sw[id] = false if $game_system.i_add_sw[id] == nil
- return $game_system.i_add_sw[id]
- end
- def w_add_switch_on(id)
- $game_system.w_add_sw = [] if $game_system.w_add_sw == nil
- $game_system.w_add_sw[id] = false if $game_system.w_add_sw[id] == nil
- $game_system.w_add_sw[id] = true
- end
- def w_add_switch_off(id)
- $game_system.w_add_sw = [] if $game_system.w_add_sw == nil
- $game_system.w_add_sw[id] = false if $game_system.w_add_sw[id] == nil
- $game_system.w_add_sw[id] = false
- end
- def w_add_switch_on?(id)
- $game_system.w_add_sw = [] if $game_system.w_add_sw == nil
- $game_system.w_add_sw[id] = false if $game_system.w_add_sw[id] == nil
- return $game_system.w_add_sw[id]
- end
- def a_add_switch_on(id)
- $game_system.a_add_sw = [] if $game_system.a_add_sw == nil
- $game_system.a_add_sw[id] = false if $game_system.a_add_sw[id] == nil
- $game_system.a_add_sw[id] = true
- end
- def a_add_switch_off(id)
- $game_system.a_add_sw = [] if $game_system.a_add_sw == nil
- $game_system.a_add_sw[id] = false if $game_system.a_add_sw[id] == nil
- $game_system.a_add_sw[id] = false
- end
- def a_add_switch_on?(id)
- $game_system.a_add_sw = [] if $game_system.a_add_sw == nil
- $game_system.a_add_sw[id] = false if $game_system.a_add_sw[id] == nil
- return $game_system.a_add_sw[id]
- end
- def item_add_switch_on(item)
- if item.is_a?(RPG::Item)
- i_add_switch_on(item.id)
- end
- if item.is_a?(RPG::Weapon)
- w_add_switch_on(item.id)
- end
- if item.is_a?(RPG::Armor)
- a_add_switch_on(item.id)
- end
- end
- def item_add_switch_on?(item)
- if item.is_a?(RPG::Item)
- return i_add_switch_on?(item.id)
- end
- if item.is_a?(RPG::Weapon)
- return w_add_switch_on?(item.id)
- end
- if item.is_a?(RPG::Armor)
- return a_add_switch_on?(item.id)
- end
- end
- def i_sell_num(id)
- $game_system.i_sell_num = [] if $game_system.i_sell_num == nil
- $game_system.i_sell_num[id] = 0 if $game_system.i_sell_num[id] == nil
- return $game_system.i_sell_num[id]
- end
- def i_sell_num_puls(id, n)
- $game_system.i_sell_num = [] if $game_system.i_sell_num == nil
- $game_system.i_sell_num[id] = 0 if $game_system.i_sell_num[id] == nil
- $game_system.i_sell_num[id] += n
- end
- def w_sell_num(id)
- $game_system.w_sell_num = [] if $game_system.w_sell_num == nil
- $game_system.w_sell_num[id] = 0 if $game_system.w_sell_num[id] == nil
- return $game_system.w_sell_num[id]
- end
- def w_sell_num_puls(id, n)
- $game_system.w_sell_num = [] if $game_system.w_sell_num == nil
- $game_system.w_sell_num[id] = 0 if $game_system.w_sell_num[id] == nil
- $game_system.w_sell_num[id] += n
- end
- def a_sell_num(id)
- $game_system.a_sell_num = [] if $game_system.a_sell_num == nil
- $game_system.a_sell_num[id] = 0 if $game_system.a_sell_num[id] == nil
- return $game_system.a_sell_num[id]
- end
- def a_sell_num_puls(id, n)
- $game_system.a_sell_num = [] if $game_system.a_sell_num == nil
- $game_system.a_sell_num[id] = 0 if $game_system.a_sell_num[id] == nil
- $game_system.a_sell_num[id] += n
- end
- def item_sell_num(item)
- if item.is_a?(RPG::Item)
- return i_sell_num(item.id)
- end
- if item.is_a?(RPG::Weapon)
- return w_sell_num(item.id)
- end
- if item.is_a?(RPG::Armor)
- return a_sell_num(item.id)
- end
- end
- def item_sell_num_puls(item, n)
- if item.is_a?(RPG::Item)
- i_sell_num_puls(item.id, n)
- end
- if item.is_a?(RPG::Weapon)
- w_sell_num_puls(item.id, n)
- end
- if item.is_a?(RPG::Armor)
- a_sell_num_puls(item.id, n)
- end
- end
- end
-
- class Game_Interpreter
- include WD_addshop
- end
- class Game_System
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_accessor :i_add_sw
- attr_accessor :w_add_sw
- attr_accessor :a_add_sw
- attr_accessor :i_sell_num
- attr_accessor :w_sell_num
- attr_accessor :a_sell_num
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- alias wd_orig_initialize005 initialize
- def initialize
- wd_orig_initialize005
- @i_add_sw = []
- @w_add_sw = []
- @a_add_sw = []
- @i_sell_num = []
- @w_sell_num = []
- @a_sell_num = []
- end
- end
-
- #==============================================================================
- # ■ Scene_AddShop
- #------------------------------------------------------------------------------
- # アイテム売却による商品追加ショップの画面の処理を行うクラスです。
- #==============================================================================
- class Scene_AddShop < Scene_Shop
- include WD_addshop
- #--------------------------------------------------------------------------
- # ● 準備
- #--------------------------------------------------------------------------
- def initialize
- get_goods
- @purchase_only = false
- @add_list = []
- end
- #--------------------------------------------------------------------------
- # ● 商品の取得
- #--------------------------------------------------------------------------
- def get_goods
- @goods = []
-
- for i in 1...$data_items.size
- if i_add_switch_on?(i)
- @goods.push([0,i,0,0])
- end
- end
- for i in 1...$data_weapons.size
- if w_add_switch_on?(i)
- @goods.push([1,i,0,0])
- end
- end
- for i in 1...$data_armors.size
- if a_add_switch_on?(i)
- @goods.push([2,i,0,0])
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 開始処理
- #--------------------------------------------------------------------------
- def start
- super
- create_add_window
- end
- #--------------------------------------------------------------------------
- # ● 商品追加ウィンドウの作成
- #--------------------------------------------------------------------------
- def create_add_window
- @add_window = Window_ShopAdd.new
- @add_window.viewport = @viewport
- @add_window.set_handler(:ok, method(:on_add_ok))
- @add_window.hide.deactivate
- end
- #--------------------------------------------------------------------------
- # ● 売却ウィンドウのアクティブ化
- #--------------------------------------------------------------------------
- def activate_add_window
- @add_window.item = @add_list.shift
- @add_window.show.active
- end
- #--------------------------------------------------------------------------
- # ● 個数入力の終了
- #--------------------------------------------------------------------------
- def end_number_input
- case @command_window.current_symbol
- when :buy
- @number_window.hide
- activate_buy_window
- when :sell
- if @add_list.size > 0
- activate_add_window
- else
- @number_window.hide
- activate_sell_window
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 売却の実行
- #--------------------------------------------------------------------------
- def do_sell(number)
- super(number)
- item_sell_num_puls(@item, number)
- get_add_item_list
- end
- #--------------------------------------------------------------------------
- # ● 商品追加ウィンドウ入力時の処理
- #--------------------------------------------------------------------------
- def on_add_ok
- @add_window.hide.deactivate
- if @add_list.size > 0
- activate_add_window
- else
- @number_window.hide
- activate_sell_window
- end
- end
- #--------------------------------------------------------------------------
- # ● 追加商品のリストの取得
- #--------------------------------------------------------------------------
- def get_add_item_list
- @add_list = []
- for i in 1..WD_addshop_ini::I_mat.size
- mats = WD_addshop_ini::I_mat[i]
- if mats
- if i_add_switch_on?(i) == false
- add_flag = get_add_flag(mats)
- if add_flag
- @add_list.push($data_items[i])
- i_add_switch_on(i)
- end
- end
- end
- end
- for i in 1..WD_addshop_ini::W_mat.size
- mats = WD_addshop_ini::W_mat[i]
- if mats
- if w_add_switch_on?(i) == false
- add_flag = get_add_flag(mats)
- if add_flag
- @add_list.push($data_weapons[i])
- w_add_switch_on(i)
- end
- end
- end
- end
- for i in 1..WD_addshop_ini::A_mat.size
- mats = WD_addshop_ini::A_mat[i]
- if mats
- if a_add_switch_on?(i) == false
- add_flag = get_add_flag(mats)
- if add_flag
- @add_list.push($data_armors[i])
- a_add_switch_on(i)
- end
- end
- end
- end
- get_goods
- @buy_window.set_add_goods(@goods)
- @buy_window.refresh
- end
- #--------------------------------------------------------------------------
- # ● 商品追加フラグの取得
- #--------------------------------------------------------------------------
- def get_add_flag(mats)
- add_flag = true
- for j in 0...mats.size
- kind = mats[j][0]
- id = mats[j][1]
- num = mats[j][2]
- if kind == "I"
- item = $data_items[id]
- elsif kind == "W"
- item = $data_weapons[id]
- elsif kind == "A"
- item = $data_armors[id]
- end
- if item_sell_num(item) < num
- add_flag = false
- end
- end
- return add_flag
- end
- end
- class Window_ShopBuy < Window_Selectable
- #--------------------------------------------------------------------------
- # ● 商品の設定
- #--------------------------------------------------------------------------
- def set_add_goods(goods)
- @shop_goods = goods
- end
- end
- #==============================================================================
- # ■ Window_ShopAdd
- #------------------------------------------------------------------------------
- # 追加商品を表示するウィンドウです。
- #==============================================================================
- class Window_ShopAdd < Window_Selectable
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize
- super(170, 200, 204, 72)
- @item = nil
- refresh
- activate
- end
- #--------------------------------------------------------------------------
- # ● アイテムの設定
- #--------------------------------------------------------------------------
- def item=(item)
- return if @item == item
- @item = item
- refresh
- end
- #--------------------------------------------------------------------------
- # ● リフレッシュ
- #--------------------------------------------------------------------------
- def refresh
- contents.clear
- change_color(system_color)
- draw_text(0, 0, 180, line_height, "商品の追加")
- if @item
- draw_item_name(@item, 0, line_height, true)
- end
- end
- #--------------------------------------------------------------------------
- # ● 決定やキャンセルなどのハンドリング処理
- #--------------------------------------------------------------------------
- def process_handling
- return unless open? && visible
- return process_ok if ok_enabled? && Input.trigger?(:C)
- end
- #--------------------------------------------------------------------------
- # ● 決定ボタンが押されたときの処理
- #--------------------------------------------------------------------------
- def process_ok
- Sound.play_cursor
- Input.update
- deactivate
- call_ok_handler
- end
- end
复制代码 其实这可以用合成系统代替吧? |
评分
-
查看全部评分
|