Project1

标题: 如何将合成商店化? [打印本页]

作者: 三途亚梦    时间: 2014-7-31 15:47
标题: 如何将合成商店化?
呃,我之前发过一个类似的帖子,但是还是碰到了一些问题。

之前得到的解答还不大能完美的解决。

希望能有一个脚本做到,在玩家调查一个物件时打开一个列表,列表会列出所有合成配方,然后玩家选择配方后会扣除持有物,得到合成物品。

在论坛里有搜索到有类似脚本的帖子,不过我打开那些帖子游览器就整个卡住了……
作者: 三途亚梦    时间: 2014-8-6 23:12
啊啊,对了。

我通过使用两个不同的合成系统已经解决问题了。
这里是思路的原帖https://rpg.blue/forum.php?mod=v ... B%E5%95%86%E5%BA%97

在这里我把思路写出来希望能给以后碰到相似问题的人提供帮助。

思路是使用事件脚本呼出合成界面,然后添加所有的合成公式,在合成完成(即退出合成界面)后再删除全部的合成公式。
同理,在设置事件的时候只添加部分合成公式就可以限制玩家当前阶段所能合成的物品的种类。

事件设置列举是这样的


这个合成脚本我使用的是 白の魔 的
脚本也顺便附上
原址大概是翻墙才能看。
在必要的地方我做了一点翻译。

RUBY 代码复制
  1. #==============================================================================
  2. # ■ RGSS3 合成 ver 1.01
  3. #------------------------------------------------------------------------------
  4. #  配布元:
  5. #     白の魔 [url]http://izumiwhite.web.fc2.com/[/url]
  6. #
  7. #  利用規約:
  8. #     RPGツクールVXの正規の登録者のみご利用になれます。
  9. #     利用報告・著作権表示とかは必要ありません。
  10. #     改造もご自由にどうぞ。
  11. #     何か問題が発生しても責任は持ちません。
  12. #==============================================================================
  13.  
  14.  
  15. #--------------------------------------------------------------------------
  16. # ★ 初期設定。
  17. #    合成レシピ等の設定
  18. #--------------------------------------------------------------------------
  19. module WD_itemsynthesis_ini
  20.  
  21.   Cost_view =  true #費用(G)の表示(合成の費用が全て0Gの場合はfalseを推奨)
  22.  
  23.   Category_i = true #カテゴリウィンドウに「アイテム」の項目を表示
  24.   Category_w = true #カテゴリウィンドウに「武器」の項目を表示
  25.   Category_a = true #カテゴリウィンドウに「防具」の項目を表示
  26.   Category_k = true #カテゴリウィンドウに「大事なもの」の項目を表示
  27.  
  28.   I_recipe = [] #この行は削除しないこと
  29.   W_recipe = [] #この行は削除しないこと
  30.   A_recipe = [] #この行は削除しないこと
  31.  
  32.   #以下、合成レシピ。
  33.   #例: I_recipe[3]  = [100, ["I",1,1], ["W",2,1], ["A",2,2], ["A",3,1]]
  34.   #と記載した場合、ID3のアイテムの合成必要は、100G。(ID为3的道具合成需要花费100G)
  35.   #必要な素材は、ID1のアイテム1個、ID2の武器1個、ID2の防具2個、ID3の防具1個(合成所需的素材为ID为1的物品1个、ID为1的武器1个、ID为2的防具2个、ID为3的防具1个)
  36.   #となる。
  37.  
  38. #这里下面几个是默认的几个公式,可以删除或者修改
  39.   #アイテムの合成レシピ
  40.   I_recipe[1]  = [10,  ["I",2,2]]
  41.   I_recipe[3]  = [100, ["I",1,1], ["I",2,1]]
  42.   I_recipe[17] = [500, ["I",1,10]]
  43.  
  44.   #武器の合成レシピ
  45.   W_recipe[3]  = [50,   ["W",1,1], ["W",2,1]]
  46.   W_recipe[6]  = [600,  ["W",3,1], ["I",17,0]]
  47.  
  48.   #防具の合成レシピ  
  49.   A_recipe[2]  = [40,   ["A",1,2]]
  50.   A_recipe[5]  = [400,  ["A",2,1], ["W",2,2], ["I",17,0]]
  51.  
  52.  
  53.  
  54. end
  55.  
  56.  
  57. #==============================================================================
  58. # ■ WD_itemsynthesis
  59. #------------------------------------------------------------------------------
  60. #  アイテム合成用の共通メソッドです。
  61. #==============================================================================
  62.  
  63. module WD_itemsynthesis
  64.   def i_recipe_switch_on(id)
  65.     $game_system.i_rcp_sw = [] if $game_system.i_rcp_sw == nil
  66.     $game_system.i_rcp_sw[id] = false if $game_system.i_rcp_sw[id] == nil
  67.     $game_system.i_rcp_sw[id] = true
  68.   end
  69.   def i_recipe_switch_off(id)
  70.     $game_system.i_rcp_sw = [] if $game_system.i_rcp_sw == nil
  71.     $game_system.i_rcp_sw[id] = false if $game_system.i_rcp_sw[id] == nil
  72.     $game_system.i_rcp_sw[id] = false
  73.   end
  74.   def i_recipe_switch_on?(id)
  75.     $game_system.i_rcp_sw = [] if $game_system.i_rcp_sw == nil
  76.     $game_system.i_rcp_sw[id] = false if $game_system.i_rcp_sw[id] == nil
  77.     return $game_system.i_rcp_sw[id]
  78.   end
  79.   def i_recipe_all_switch_on
  80.     for i in 1..$data_items.size
  81.       i_recipe_switch_on(i)
  82.     end
  83.   end
  84.   def i_recipe_all_switch_off
  85.     for i in 1..$data_items.size
  86.       i_recipe_switch_off(i)
  87.     end
  88.   end
  89.   def w_recipe_switch_on(id)
  90.     $game_system.w_rcp_sw = [] if $game_system.w_rcp_sw == nil
  91.     $game_system.w_rcp_sw[id] = false if $game_system.w_rcp_sw[id] == nil
  92.     $game_system.w_rcp_sw[id] = true
  93.   end
  94.   def w_recipe_switch_off(id)
  95.     $game_system.w_rcp_sw = [] if $game_system.w_rcp_sw == nil
  96.     $game_system.w_rcp_sw[id] = false if $game_system.w_rcp_sw[id] == nil
  97.     $game_system.w_rcp_sw[id] = false
  98.   end
  99.   def w_recipe_switch_on?(id)
  100.     $game_system.w_rcp_sw = [] if $game_system.w_rcp_sw == nil
  101.     $game_system.w_rcp_sw[id] = false if $game_system.w_rcp_sw[id] == nil
  102.     return $game_system.w_rcp_sw[id]
  103.   end
  104.   def w_recipe_all_switch_on
  105.     for i in 1..$data_weapons.size
  106.       w_recipe_switch_on(i)
  107.     end
  108.   end
  109.   def w_recipe_all_switch_off
  110.     for i in 1..$data_weapons.size
  111.       w_recipe_switch_off(i)
  112.     end
  113.   end
  114.   def a_recipe_switch_on(id)
  115.     $game_system.a_rcp_sw = [] if $game_system.a_rcp_sw == nil
  116.     $game_system.a_rcp_sw[id] = false if $game_system.a_rcp_sw[id] == nil
  117.     $game_system.a_rcp_sw[id] = true
  118.   end
  119.   def a_recipe_switch_off(id)
  120.     $game_system.a_rcp_sw = [] if $game_system.a_rcp_sw == nil
  121.     $game_system.a_rcp_sw[id] = false if $game_system.a_rcp_sw[id] == nil
  122.     $game_system.a_rcp_sw[id] = false
  123.   end
  124.   def a_recipe_switch_on?(id)
  125.     $game_system.a_rcp_sw = [] if $game_system.a_rcp_sw == nil
  126.     $game_system.a_rcp_sw[id] = false if $game_system.a_rcp_sw[id] == nil
  127.     return $game_system.a_rcp_sw[id]
  128.   end
  129.   def a_recipe_all_switch_on
  130.     for i in 1..$data_armors.size
  131.       a_recipe_switch_on(i)
  132.     end
  133.   end
  134.   def a_recipe_all_switch_off
  135.     for i in 1..$data_armors.size
  136.       a_recipe_switch_off(i)
  137.     end
  138.   end
  139.   def recipe_all_switch_on
  140.     i_recipe_all_switch_on
  141.     w_recipe_all_switch_on
  142.     a_recipe_all_switch_on
  143.   end
  144.   def recipe_all_switch_off
  145.     i_recipe_all_switch_off
  146.     w_recipe_all_switch_off
  147.     a_recipe_all_switch_off
  148.   end
  149.  
  150. end
  151.  
  152. class Game_Interpreter
  153.   include WD_itemsynthesis
  154. end
  155.  
  156. class Game_System
  157.   #--------------------------------------------------------------------------
  158.   # ● 公開インスタンス変数
  159.   #--------------------------------------------------------------------------
  160.   attr_accessor :i_rcp_sw
  161.   attr_accessor :w_rcp_sw
  162.   attr_accessor :a_rcp_sw
  163.   #--------------------------------------------------------------------------
  164.   # ● オブジェクト初期化
  165.   #--------------------------------------------------------------------------
  166.   alias wd_orig_initialize004 initialize
  167.   def initialize
  168.     wd_orig_initialize004
  169.     @i_rcp_sw = []
  170.     @w_rcp_sw = []
  171.     @a_rcp_sw = []
  172.   end
  173. end
  174.  
  175.  
  176. #==============================================================================
  177. # ■ Scene_ItemSynthesis
  178. #------------------------------------------------------------------------------
  179. #  合成画面の処理を行うクラスです。
  180. #==============================================================================
  181.  
  182. class Scene_ItemSynthesis < Scene_MenuBase
  183.   #--------------------------------------------------------------------------
  184.   # ● 開始処理
  185.   #--------------------------------------------------------------------------
  186.   def start
  187.     super
  188.  
  189.     create_help_window
  190.     create_dummy_window
  191.     create_number_window
  192.     create_status_window
  193.     create_material_window
  194.     create_list_window
  195.     create_category_window
  196.     create_gold_window
  197.     create_change_window
  198.   end
  199.   #--------------------------------------------------------------------------
  200.   # ● ゴールドウィンドウの作成
  201.   #--------------------------------------------------------------------------
  202.   def create_gold_window
  203.     @gold_window = Window_Gold.new
  204.     @gold_window.viewport = @viewport
  205.     @gold_window.x = Graphics.width - @gold_window.width
  206.     @gold_window.y = @help_window.height
  207.     @gold_window.hide
  208.   end
  209.   #--------------------------------------------------------------------------
  210.   # ● 切り替え表示ウィンドウの作成
  211.   #--------------------------------------------------------------------------
  212.   def create_change_window
  213.     wx = 0
  214.     wy = @gold_window.y
  215.     ww = Graphics.width - @gold_window.width
  216.     wh = @gold_window.height
  217.     @change_window = Window_ItemSynthesisChange.new(wx, wy, ww, wh)
  218.     @change_window.viewport = @viewport
  219.     @change_window.hide
  220.   end
  221.   #--------------------------------------------------------------------------
  222.   # ● ダミーウィンドウの作成
  223.   #--------------------------------------------------------------------------
  224.   def create_dummy_window
  225.     wy = @help_window.y + @help_window.height + 48
  226.     wh = Graphics.height - wy
  227.     @dummy_window = Window_Base.new(0, wy, Graphics.width, wh)
  228.     @dummy_window.viewport = @viewport
  229.   end
  230.   #--------------------------------------------------------------------------
  231.   # ● 個数入力ウィンドウの作成
  232.   #--------------------------------------------------------------------------
  233.   def create_number_window
  234.     wy = @dummy_window.y
  235.     wh = @dummy_window.height
  236.     @number_window = Window_ItemSynthesisNumber.new(0, wy, wh)
  237.     @number_window.viewport = @viewport
  238.     @number_window.hide
  239.     @number_window.set_handler(:ok,     method(:on_number_ok))
  240.     @number_window.set_handler(:cancel, method(:on_number_cancel))
  241.   end
  242.   #--------------------------------------------------------------------------
  243.   # ● ステータスウィンドウの作成
  244.   #--------------------------------------------------------------------------
  245.   def create_status_window
  246.     wx = @number_window.width
  247.     wy = @dummy_window.y
  248.     ww = Graphics.width - wx
  249.     wh = @dummy_window.height
  250.     @status_window = Window_ShopStatus.new(wx, wy, ww, wh)
  251.     @status_window.viewport = @viewport
  252.     @status_window.hide
  253.   end
  254.   #--------------------------------------------------------------------------
  255.   # ● 素材ウィンドウの作成
  256.   #--------------------------------------------------------------------------
  257.   def create_material_window
  258.     wx = @number_window.width
  259.     wy = @dummy_window.y
  260.     ww = Graphics.width - wx
  261.     wh = @dummy_window.height
  262.     @material_window = Window_ItemSynthesisMaterial.new(wx, wy, ww, wh)
  263.     @material_window.viewport = @viewport
  264.     @material_window.hide
  265.     @number_window.material_window = @material_window
  266.   end
  267.   #--------------------------------------------------------------------------
  268.   # ● 合成アイテムリストウィンドウの作成
  269.   #--------------------------------------------------------------------------
  270.   def create_list_window
  271.     wy = @dummy_window.y
  272.     wh = @dummy_window.height
  273.     @list_window = Window_ItemSynthesisList.new(0, wy, wh)
  274.     @list_window.viewport = @viewport
  275.     @list_window.help_window = @help_window
  276.     @list_window.status_window = @status_window
  277.     @list_window.material_window = @material_window
  278.     @list_window.hide
  279.     @list_window.set_handler(:ok,     method(:on_list_ok))
  280.     @list_window.set_handler(:cancel, method(:on_list_cancel))
  281.     @list_window.set_handler(:change_window, method(:on_change_window))   
  282.   end
  283.   #--------------------------------------------------------------------------
  284.   # ● カテゴリウィンドウの作成
  285.   #--------------------------------------------------------------------------
  286.   def create_category_window
  287.     @category_window = Window_ItemSynthesisCategory.new
  288.     @category_window.viewport = @viewport
  289.     @category_window.help_window = @help_window
  290.     @category_window.y = @help_window.height
  291.     @category_window.activate
  292.     @category_window.item_window = @list_window
  293.     @category_window.set_handler(:ok,     method(:on_category_ok))
  294.     @category_window.set_handler(:cancel, method(:return_scene))
  295.   end
  296.  
  297.   def return_scene
  298.     $game_map.autoplay
  299.     SceneManager.return
  300.   end
  301.  
  302.   #--------------------------------------------------------------------------
  303.   # ● 合成アイテムリストウィンドウのアクティブ化
  304.   #--------------------------------------------------------------------------
  305.   def activate_list_window
  306.     @list_window.money = money
  307.     @list_window.show.activate
  308.   end
  309.   #--------------------------------------------------------------------------
  310.   # ● 合成[決定]
  311.   #--------------------------------------------------------------------------
  312.   def on_list_ok
  313.     @item = @list_window.item
  314.     @list_window.hide
  315.     @number_window.set(@item, max_buy, buying_price, currency_unit)
  316.     @number_window.show.activate
  317.   end
  318.   #--------------------------------------------------------------------------
  319.   # ● 合成[キャンセル]
  320.   #--------------------------------------------------------------------------
  321.   def on_list_cancel
  322.     @category_window.activate
  323.     @category_window.show
  324.     @dummy_window.show
  325.     @list_window.hide
  326.     @status_window.hide
  327.     @status_window.item = nil
  328.     @material_window.hide
  329.     @material_window.set(nil, nil)
  330.     @gold_window.hide
  331.     @change_window.hide
  332.     @help_window.clear
  333.   end
  334.   #--------------------------------------------------------------------------
  335.   # ● 表示切替
  336.   #--------------------------------------------------------------------------
  337.   def on_change_window
  338.     if @status_window.visible
  339.       @status_window.hide
  340.       @material_window.show
  341.     else
  342.       @status_window.show
  343.       @material_window.hide
  344.     end
  345.   end
  346.   #--------------------------------------------------------------------------
  347.   # ● カテゴリ[決定]
  348.   #--------------------------------------------------------------------------
  349.   def on_category_ok
  350.     activate_list_window
  351.     @gold_window.show
  352.     @change_window.show
  353.     @material_window.show
  354.     @category_window.hide
  355.     @list_window.select(0)
  356.   end
  357.   #--------------------------------------------------------------------------
  358.   # ● 個数入力[決定]
  359.   #--------------------------------------------------------------------------
  360.   def on_number_ok
  361.     Sound.play_shop
  362.     do_syntetic(@number_window.number)
  363.     end_number_input
  364.     @gold_window.refresh
  365.   end
  366.   #--------------------------------------------------------------------------
  367.   # ● 個数入力[キャンセル]
  368.   #--------------------------------------------------------------------------
  369.   def on_number_cancel
  370.     Sound.play_cancel
  371.     end_number_input
  372.   end
  373.   #--------------------------------------------------------------------------
  374.   # ● 合成の実行
  375.   #--------------------------------------------------------------------------
  376.   def do_syntetic(number)
  377.     $game_party.lose_gold(number * buying_price)
  378.     $game_party.gain_item(@item, number)
  379.  
  380.       [url=home.php?mod=space&uid=2564094]@recipe[/url] = @list_window.recipe(@item)
  381.       for i in [email]1...@recipe.size[/email]
  382.         kind = @recipe[i][0]
  383.         id   = @recipe[i][1]
  384.         num  = @recipe[i][2]
  385.         if kind == "I"
  386.           item = $data_items[id]
  387.         elsif kind == "W"
  388.           item = $data_weapons[id]
  389.         elsif kind == "A"
  390.           item = $data_armors[id]
  391.         end
  392.         $game_party.lose_item(item, num*number)
  393.       end
  394.   end
  395.   #--------------------------------------------------------------------------
  396.   # ● 個数入力の終了
  397.   #--------------------------------------------------------------------------
  398.   def end_number_input
  399.     @number_window.hide
  400.     activate_list_window
  401.   end
  402.   #--------------------------------------------------------------------------
  403.   # ● 最大購入可能個数の取得
  404.   #--------------------------------------------------------------------------
  405.   def max_buy
  406.     max = $game_party.max_item_number(@item) - $game_party.item_number(@item)
  407.  
  408.     @recipe = @list_window.recipe(@item)
  409.       for i in [email]1...@recipe.size[/email]
  410.         kind = @recipe[i][0]
  411.         id   = @recipe[i][1]
  412.         num  = @recipe[i][2]
  413.         if kind == "I"
  414.           item = $data_items[id]
  415.         elsif kind == "W"
  416.           item = $data_weapons[id]
  417.         elsif kind == "A"
  418.           item = $data_armors[id]
  419.         end
  420.         if num > 0
  421.           max_buf = $game_party.item_number(item)/num
  422.         else
  423.           max_buf = 999
  424.         end
  425.         max = [max, max_buf].min
  426.       end
  427.  
  428.     buying_price == 0 ? max : [max, money / buying_price].min
  429.  
  430.   end
  431.   #--------------------------------------------------------------------------
  432.   # ● 所持金の取得
  433.   #--------------------------------------------------------------------------
  434.   def money
  435.     @gold_window.value
  436.   end
  437.   #--------------------------------------------------------------------------
  438.   # ● 通貨単位の取得
  439.   #--------------------------------------------------------------------------
  440.   def currency_unit
  441.     @gold_window.currency_unit
  442.   end
  443.   #--------------------------------------------------------------------------
  444.   # ● 合成費用の取得
  445.   #--------------------------------------------------------------------------
  446.   def buying_price
  447.     @list_window.price(@item)
  448.   end
  449. end
  450.  
  451.  
  452. #==============================================================================
  453. # ■ Window_ItemSynthesisList
  454. #------------------------------------------------------------------------------
  455. #  合成画面で、合成可能なアイテムの一覧を表示するウィンドウです。
  456. #==============================================================================
  457.  
  458. class Window_ItemSynthesisList < Window_Selectable
  459.   include WD_itemsynthesis
  460.   #--------------------------------------------------------------------------
  461.   # ● 公開インスタンス変数
  462.   #--------------------------------------------------------------------------
  463.   attr_reader   :status_window            # ステータスウィンドウ
  464.   #--------------------------------------------------------------------------
  465.   # ● オブジェクト初期化
  466.   #--------------------------------------------------------------------------
  467.   def initialize(x, y, height)
  468.     super(x, y, window_width, height)
  469.  
  470.     @shop_goods = []
  471.     @shop_recipes = []
  472.  
  473.     for i in 1..WD_itemsynthesis_ini::I_recipe.size
  474.       recipe = WD_itemsynthesis_ini::I_recipe[i]
  475.       if recipe
  476.         good = [0, i, recipe[0]]
  477.         if i_recipe_switch_on?(i)
  478.           @shop_goods.push(good)
  479.           @shop_recipes.push(recipe)
  480.         end
  481.       end
  482.     end
  483.     for i in 1..WD_itemsynthesis_ini::W_recipe.size
  484.       recipe = WD_itemsynthesis_ini::W_recipe[i]
  485.       if recipe
  486.         good = [1, i, recipe[0]]
  487.         if w_recipe_switch_on?(i)
  488.           @shop_goods.push(good)
  489.           @shop_recipes.push(recipe)
  490.         end
  491.       end
  492.     end
  493.     for i in 1..WD_itemsynthesis_ini::A_recipe.size
  494.       recipe = WD_itemsynthesis_ini::A_recipe[i]
  495.       if recipe
  496.         good = [2, i, recipe[0]]
  497.         if a_recipe_switch_on?(i)
  498.           @shop_goods.push(good)
  499.           @shop_recipes.push(recipe)
  500.         end
  501.       end
  502.     end
  503.  
  504.     [url=home.php?mod=space&uid=26101]@Money[/url] = 0
  505.     refresh
  506.     select(0)
  507.   end
  508.   #--------------------------------------------------------------------------
  509.   # ● ウィンドウ幅の取得
  510.   #--------------------------------------------------------------------------
  511.   def window_width
  512.     return 304
  513.   end
  514.   #--------------------------------------------------------------------------
  515.   # ● 項目数の取得
  516.   #--------------------------------------------------------------------------
  517.   def item_max
  518.     @data ? @data.size : 1
  519.   end
  520.   #--------------------------------------------------------------------------
  521.   # ● アイテムの取得
  522.   #--------------------------------------------------------------------------
  523.   def item
  524.     @data[index]
  525.   end
  526.   #--------------------------------------------------------------------------
  527.   # ● 所持金の設定
  528.   #--------------------------------------------------------------------------
  529.   def money=(money)
  530.     @money = money
  531.     refresh
  532.   end
  533.   #--------------------------------------------------------------------------
  534.   # ● 選択項目の有効状態を取得
  535.   #--------------------------------------------------------------------------
  536.   def current_item_enabled?
  537.     enable?(@data[index])
  538.   end
  539.   #--------------------------------------------------------------------------
  540.   # ● 合成費用を取得
  541.   #--------------------------------------------------------------------------
  542.   def price(item)
  543.     @price[item]
  544.   end
  545.   #--------------------------------------------------------------------------
  546.   # ● 合成可否を取得
  547.   #--------------------------------------------------------------------------
  548.   def enable?(item)
  549.     @makable[item]
  550.   end
  551.   #--------------------------------------------------------------------------
  552.   # ● レシピを取得
  553.   #--------------------------------------------------------------------------
  554.   def recipe(item)
  555.     @recipe[item]
  556.   end
  557.   #--------------------------------------------------------------------------
  558.   # ● アイテムを許可状態で表示するかどうか
  559.   #--------------------------------------------------------------------------
  560.   def have_mat?(recipe)
  561.     flag = true
  562.     if @money >= recipe[0]
  563.       for i in 1...recipe.size
  564.         kind = recipe[i][0]
  565.         id   = recipe[i][1]
  566.         num  = recipe[i][2]
  567.         if kind == "I"
  568.           item = $data_items[id]
  569.         elsif kind == "W"
  570.           item = $data_weapons[id]
  571.         elsif kind == "A"
  572.           item = $data_armors[id]
  573.         end
  574.         if $game_party.item_number(item) < [num, 1].max
  575.           flag = false
  576.         end
  577.       end
  578.     else
  579.       flag = false
  580.     end
  581.     return flag
  582.   end
  583.   #--------------------------------------------------------------------------
  584.   # ● カテゴリの設定
  585.   #--------------------------------------------------------------------------
  586.   def category=(category)
  587.     return if @category == category
  588.     @category = category
  589.     refresh
  590.   end
  591.   #--------------------------------------------------------------------------
  592.   # ● リフレッシュ
  593.   #--------------------------------------------------------------------------
  594.   def refresh
  595.     make_item_list
  596.     create_contents
  597.     draw_all_items
  598.   end
  599.   #--------------------------------------------------------------------------
  600.   # ● アイテムをリストに含めるかどうか
  601.   #--------------------------------------------------------------------------
  602.   def include?(item)
  603.     case @category
  604.     when :item
  605.       item.is_a?(RPG::Item) && !item.key_item?
  606.     when :weapon
  607.       item.is_a?(RPG::Weapon)
  608.     when :armor
  609.       item.is_a?(RPG::Armor)
  610.     when :key_item
  611.       item.is_a?(RPG::Item) && item.key_item?
  612.     else
  613.       false
  614.     end
  615.   end
  616.   #--------------------------------------------------------------------------
  617.   # ● アイテムリストの作成
  618.   #--------------------------------------------------------------------------
  619.   def make_item_list
  620.     @data = []
  621.     @price = {}
  622.     @makable = {}
  623.     @recipe = {}
  624.     for i in [email]0...@shop_goods.size[/email]
  625.       goods = @shop_goods[i]
  626.       recipe = @shop_recipes[i]
  627.       case goods[0]
  628.       when 0;  item = $data_items[goods[1]]
  629.       when 1;  item = $data_weapons[goods[1]]
  630.       when 2;  item = $data_armors[goods[1]]
  631.       end
  632.       if item
  633.         if include?(item)
  634.           @data.push(item)
  635.           @price[item] = goods[2]
  636.           @makable[item] = have_mat?(recipe)
  637.           @recipe[item] = recipe
  638.         end
  639.       end
  640.     end
  641.   end
  642.   #--------------------------------------------------------------------------
  643.   # ● 項目の描画
  644.   #--------------------------------------------------------------------------
  645.   def draw_item(index)
  646.     item = @data[index]
  647.     rect = item_rect(index)
  648.     draw_item_name(item, rect.x, rect.y, enable?(item))
  649.     rect.width -= 4
  650.     draw_text(rect, price(item), 2)  if WD_itemsynthesis_ini::Cost_view
  651.   end
  652.   #--------------------------------------------------------------------------
  653.   # ● ステータスウィンドウの設定
  654.   #--------------------------------------------------------------------------
  655.   def status_window=(status_window)
  656.     @status_window = status_window
  657.     call_update_help
  658.   end
  659.   #--------------------------------------------------------------------------
  660.   # ● 素材ウィンドウの設定
  661.   #--------------------------------------------------------------------------
  662.   def material_window=(material_window)
  663.     @material_window = material_window
  664.     call_update_help
  665.   end
  666.   #--------------------------------------------------------------------------
  667.   # ● ヘルプテキスト更新
  668.   #--------------------------------------------------------------------------
  669.   def update_help
  670.     @help_window.set_item(item) if @help_window
  671.     @status_window.item = item if @status_window
  672.     @material_window.set(item, recipe(item)) if @material_window
  673.   end
  674.   #--------------------------------------------------------------------------
  675.   # ● ←→ ボタン(表示切替)が押されたときの処理
  676.   #--------------------------------------------------------------------------
  677.   def process_change_window
  678.     Sound.play_cursor
  679.     Input.update
  680.     call_handler(:change_window)
  681.   end
  682.   #--------------------------------------------------------------------------
  683.   # ● 決定やキャンセルなどのハンドリング処理
  684.   #--------------------------------------------------------------------------
  685.   def process_handling
  686.     super
  687.     if active
  688.       return process_change_window if handle?(:change_window) && Input.trigger?(:RIGHT)
  689.       return process_change_window if handle?(:change_window) && Input.trigger?(:LEFT)
  690.     end
  691.   end
  692. end
  693.  
  694.  
  695. #==============================================================================
  696. # ■ Window_ItemSynthesisMaterial
  697. #------------------------------------------------------------------------------
  698. #  合成画面で、合成に必要な素材を表示するウィンドウです。
  699. #==============================================================================
  700.  
  701. class Window_ItemSynthesisMaterial < Window_Base
  702.   #--------------------------------------------------------------------------
  703.   # ● オブジェクト初期化
  704.   #--------------------------------------------------------------------------
  705.   def initialize(x, y, width, height)
  706.     super(x, y, width, height)
  707.     @item = nil
  708.     refresh
  709.   end
  710.   #--------------------------------------------------------------------------
  711.   # ● リフレッシュ
  712.   #--------------------------------------------------------------------------
  713.   def refresh
  714.     contents.clear
  715.     draw_possession(4, 0)
  716.     draw_material_info(0, line_height * 2)
  717.   end
  718.   #--------------------------------------------------------------------------
  719.   # ● アイテムの設定
  720.   #--------------------------------------------------------------------------
  721.   def set(item, recipe)
  722.     @item = item
  723.     @recipe = recipe
  724.     @make_number = 1
  725.     refresh
  726.   end
  727.   #--------------------------------------------------------------------------
  728.   # ● 作成個数の設定
  729.   #--------------------------------------------------------------------------
  730.   def set_num(make_number)
  731.     @make_number = make_number
  732.     refresh
  733.   end
  734.   #--------------------------------------------------------------------------
  735.   # ● 所持数の描画
  736.   #--------------------------------------------------------------------------
  737.   def draw_possession(x, y)
  738.     rect = Rect.new(x, y, contents.width - 4 - x, line_height)
  739.     change_color(system_color)
  740.     draw_text(rect, Vocab::Possession)
  741.     change_color(normal_color)
  742.     draw_text(rect, $game_party.item_number(@item), 2)
  743.   end
  744.   #--------------------------------------------------------------------------
  745.   # ● 素材情報の描画
  746.   #--------------------------------------------------------------------------
  747.   def draw_material_info(x, y)
  748.     rect = Rect.new(x, y, contents.width, line_height)
  749.     change_color(system_color)
  750.     contents.font.size = 18
  751.     draw_text(rect, "必要素材", 0)
  752.     if @recipe
  753.       for i in [email]1...@recipe.size[/email]
  754.         kind = @recipe[i][0]
  755.         id   = @recipe[i][1]
  756.         num  = @recipe[i][2]
  757.         if kind == "I"
  758.           item = $data_items[id]
  759.         elsif kind == "W"
  760.           item = $data_weapons[id]
  761.         elsif kind == "A"
  762.           item = $data_armors[id]
  763.         end
  764.         rect = Rect.new(x, y + line_height*i, contents.width, line_height)
  765.         enabled = true
  766.         enabled = false if [num*@make_number, 1].max  > $game_party.item_number(item)
  767.         draw_item_name(item, rect.x, rect.y, enabled)
  768.         change_color(normal_color, enabled)
  769.         if num > 0
  770.           draw_text(rect, "#{num*@make_number}/#{$game_party.item_number(item)}", 2)
  771.         end
  772.       end
  773.     end
  774.     change_color(normal_color)
  775.     contents.font.size = 24
  776.   end
  777. end
  778.  
  779.  
  780. #==============================================================================
  781. # ■ Window_ItemSynthesisNumber
  782. #------------------------------------------------------------------------------
  783. #  合成画面で、合成するアイテムの個数を入力するウィンドウです。
  784. #==============================================================================
  785.  
  786. class Window_ItemSynthesisNumber < Window_ShopNumber
  787.   #--------------------------------------------------------------------------
  788.   # ● リフレッシュ
  789.   #--------------------------------------------------------------------------
  790.   def refresh
  791.     contents.clear
  792.     draw_item_name(@item, 0, item_y)
  793.     draw_number
  794.     draw_total_price if WD_itemsynthesis_ini::Cost_view
  795.   end
  796.   #--------------------------------------------------------------------------
  797.   # ● オブジェクト初期化
  798.   #--------------------------------------------------------------------------
  799.   def material_window=(material_window)
  800.     @material_window = material_window
  801.     call_update_help
  802.   end
  803.   #--------------------------------------------------------------------------
  804.   # ● 作成個数の変更
  805.   #--------------------------------------------------------------------------
  806.   def change_number(amount)
  807.     @number = [[@number + amount, @max].min, 1].max
  808.     call_update_help #追加
  809.   end
  810.   #--------------------------------------------------------------------------
  811.   # ● ヘルプテキスト更新
  812.   #--------------------------------------------------------------------------
  813.   def call_update_help
  814.     @material_window.set_num(@number) if @material_window
  815.   end
  816. end
  817.  
  818.  
  819. #==============================================================================
  820. # ■ Window_ItemSynthesisCategory
  821. #------------------------------------------------------------------------------
  822. #  合成画面で、通常アイテムや装備品の分類を選択するウィンドウです。
  823. #==============================================================================
  824.  
  825. class Window_ItemSynthesisCategory < Window_ItemCategory
  826.   #--------------------------------------------------------------------------
  827.   # ● 桁数の取得
  828.   #--------------------------------------------------------------------------
  829.   def col_max
  830.     i = 0
  831.     i += 1 if WD_itemsynthesis_ini::Category_i
  832.     i += 1 if WD_itemsynthesis_ini::Category_w
  833.     i += 1 if WD_itemsynthesis_ini::Category_a
  834.     i += 1 if WD_itemsynthesis_ini::Category_k
  835.     return i
  836.   end
  837.   #--------------------------------------------------------------------------
  838.   # ● コマンドリストの作成
  839.   #--------------------------------------------------------------------------
  840.   def make_command_list
  841.     add_command(Vocab::item,     :item)     if WD_itemsynthesis_ini::Category_i
  842.     add_command(Vocab::weapon,   :weapon)   if WD_itemsynthesis_ini::Category_w
  843.     add_command(Vocab::armor,    :armor)    if WD_itemsynthesis_ini::Category_a
  844.     add_command(Vocab::key_item, :key_item) if WD_itemsynthesis_ini::Category_k
  845.   end
  846. end
  847.  
  848.  
  849. #==============================================================================
  850. # ■ Window_ItemSynthesisNumber
  851. #------------------------------------------------------------------------------
  852. #  合成画面で、切替を表示するウィンドウです。
  853. #==============================================================================
  854.  
  855. class Window_ItemSynthesisChange < Window_Base
  856.   #--------------------------------------------------------------------------
  857.   # ● オブジェクト初期化
  858.   #--------------------------------------------------------------------------
  859.   def initialize(x, y, width, height)
  860.     super(x, y, width, height)
  861.     refresh
  862.   end
  863.   #--------------------------------------------------------------------------
  864.   # ● リフレッシュ
  865.   #--------------------------------------------------------------------------
  866.   def refresh
  867.     contents.clear
  868.     text = "← → :显示转换"
  869.     draw_text(0, 0, contents_width, line_height, text, 1)
  870.   end
  871. end

作者: Baytars    时间: 2015-12-24 00:45
多谢楼主分享!
作者: Baytars    时间: 2015-12-24 00:46
确实想做一个合成系统呢
作者: 上贺茂润    时间: 2015-12-24 07:33
合成本来就是调用商店 用开关控制 开关打开是合成 关闭是商店




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1