设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2349|回复: 4
打印 上一主题 下一主题

[已经解决] 请问有VA的合成系统吗?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
719
在线时间
7 小时
注册时间
2015-7-5
帖子
3
跳转到指定楼层
1
发表于 2015-7-6 11:14:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
有看到VX的和XP的,就是没看到VA的,请问有吗?0v0
求一个~~~~(ΦωΦ)

Lv4.逐梦者 (版主)

无限の剣制

梦石
0
星屑
10074
在线时间
5020 小时
注册时间
2013-2-28
帖子
5030

开拓者贵宾

2
发表于 2015-7-6 11:27:21 | 只看该作者

点评

谢谢!  发表于 2015-7-6 17:37

评分

参与人数 1星屑 +132 收起 理由
taroxd + 132 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
70
在线时间
1083 小时
注册时间
2013-3-29
帖子
2394
3
发表于 2015-7-6 11:36:12 | 只看该作者
①:
  1. #==============================================================================
  2. # ■ RGSS3 アイテム合成 ver 1.02
  3. #------------------------------------------------------------------------------
  4. #  配布元:
  5. #     白の魔 http://izumiwhite.web.fc2.com/
  6. #
  7. #  利用規約:
  8. #     RPGツクールVX Aceの正規の登録者のみご利用になれます。
  9. #     利用報告・著作権表示とかは必要ありません。
  10. #     改造もご自由にどうぞ。
  11. #     何か問題が発生しても責任は持ちません。
  12. #==============================================================================


  13. #--------------------------------------------------------------------------
  14. # ★ 初期設定。
  15. #    合成レシピ等の設定
  16. #--------------------------------------------------------------------------
  17. module WD_itemsynthesis_ini
  18.   
  19.   Cost_view =  true #費用(G)の表示(合成の費用が全て0Gの場合はfalseを推奨)
  20.   
  21.   Category_i = false #カテゴリウィンドウに「アイテム」の項目を表示
  22.   Category_w = true #カテゴリウィンドウに「武器」の項目を表示
  23.   Category_a = false #カテゴリウィンドウに「防具」の項目を表示
  24.   Category_k = false #カテゴリウィンドウに「大事なもの」の項目を表示
  25.   
  26.   I_recipe = [] #この行は削除しないこと
  27.   W_recipe = [] #この行は削除しないこと
  28.   A_recipe = [] #この行は削除しないこと
  29.   
  30.   #以下、合成レシピ。
  31.   #例: I_recipe[3]  = [100, ["I",1,1], ["W",2,1], ["A",2,2], ["A",3,1]]
  32.   #と記載した場合、ID3のアイテムの合成必要は、100G。
  33.   #必要な素材は、ID1のアイテム1個、ID2の武器1個、ID2の防具2個、ID3の防具1個
  34.   #となる。
  35.   
  36.   #アイテムの合成レシピ
  37.   I_recipe[3]  = [10,  ["I",1,2]]
  38.   #I_recipe[3]  = [100, ["I",1,1], ["I",2,1]]
  39.   #I_recipe[17] = [500, ["I",1,10]]

  40.   #武器の合成レシピ
  41.   W_recipe[3]  = [150,   ["I",2,1], ["W",2,1]]
  42.   W_recipe[6]  = [150,   ["I",2,1], ["W",5,1]]
  43.   #W_recipe[6]  = [600,  ["W",3,1], ["I",17,0]]
  44.   
  45.   #防具の合成レシピ  
  46.   A_recipe[2]  = [40,   ["A",1,2]]
  47.   #A_recipe[5]  = [400,  ["A",2,1], ["W",2,2], ["I",17,0]]
  48.   
  49. end


  50. #==============================================================================
  51. # ■ WD_itemsynthesis
  52. #------------------------------------------------------------------------------
  53. #  アイテム合成用の共通メソッドです。
  54. #==============================================================================

  55. module WD_itemsynthesis
  56.   def i_recipe_switch_on(id)
  57.     $game_system.i_rcp_sw = [] if $game_system.i_rcp_sw == nil
  58.     $game_system.i_rcp_sw[id] = false if $game_system.i_rcp_sw[id] == nil
  59.     $game_system.i_rcp_sw[id] = true
  60.   end
  61.   def i_recipe_switch_off(id)
  62.     $game_system.i_rcp_sw = [] if $game_system.i_rcp_sw == nil
  63.     $game_system.i_rcp_sw[id] = false if $game_system.i_rcp_sw[id] == nil
  64.     $game_system.i_rcp_sw[id] = false
  65.   end
  66.   def i_recipe_switch_on?(id)
  67.     $game_system.i_rcp_sw = [] if $game_system.i_rcp_sw == nil
  68.     $game_system.i_rcp_sw[id] = false if $game_system.i_rcp_sw[id] == nil
  69.     return $game_system.i_rcp_sw[id]
  70.   end
  71.   def i_recipe_all_switch_on
  72.     for i in 1..$data_items.size
  73.       i_recipe_switch_on(i)
  74.     end
  75.   end
  76.   def i_recipe_all_switch_off
  77.     for i in 1..$data_items.size
  78.       i_recipe_switch_off(i)
  79.     end
  80.   end
  81.   def w_recipe_switch_on(id)
  82.     $game_system.w_rcp_sw = [] if $game_system.w_rcp_sw == nil
  83.     $game_system.w_rcp_sw[id] = false if $game_system.w_rcp_sw[id] == nil
  84.     $game_system.w_rcp_sw[id] = true
  85.   end
  86.   def w_recipe_switch_off(id)
  87.     $game_system.w_rcp_sw = [] if $game_system.w_rcp_sw == nil
  88.     $game_system.w_rcp_sw[id] = false if $game_system.w_rcp_sw[id] == nil
  89.     $game_system.w_rcp_sw[id] = false
  90.   end
  91.   def w_recipe_switch_on?(id)
  92.     $game_system.w_rcp_sw = [] if $game_system.w_rcp_sw == nil
  93.     $game_system.w_rcp_sw[id] = false if $game_system.w_rcp_sw[id] == nil
  94.     return $game_system.w_rcp_sw[id]
  95.   end
  96.   def w_recipe_all_switch_on
  97.     for i in 1..$data_weapons.size
  98.       w_recipe_switch_on(i)
  99.     end
  100.   end
  101.   def w_recipe_all_switch_off
  102.     for i in 1..$data_weapons.size
  103.       w_recipe_switch_off(i)
  104.     end
  105.   end
  106.   def a_recipe_switch_on(id)
  107.     $game_system.a_rcp_sw = [] if $game_system.a_rcp_sw == nil
  108.     $game_system.a_rcp_sw[id] = false if $game_system.a_rcp_sw[id] == nil
  109.     $game_system.a_rcp_sw[id] = true
  110.   end
  111.   def a_recipe_switch_off(id)
  112.     $game_system.a_rcp_sw = [] if $game_system.a_rcp_sw == nil
  113.     $game_system.a_rcp_sw[id] = false if $game_system.a_rcp_sw[id] == nil
  114.     $game_system.a_rcp_sw[id] = false
  115.   end
  116.   def a_recipe_switch_on?(id)
  117.     $game_system.a_rcp_sw = [] if $game_system.a_rcp_sw == nil
  118.     $game_system.a_rcp_sw[id] = false if $game_system.a_rcp_sw[id] == nil
  119.     return $game_system.a_rcp_sw[id]
  120.   end
  121.   def a_recipe_all_switch_on
  122.     for i in 1..$data_armors.size
  123.       a_recipe_switch_on(i)
  124.     end
  125.   end
  126.   def a_recipe_all_switch_off
  127.     for i in 1..$data_armors.size
  128.       a_recipe_switch_off(i)
  129.     end
  130.   end
  131.   def recipe_all_switch_on
  132.     i_recipe_all_switch_on
  133.     w_recipe_all_switch_on
  134.     a_recipe_all_switch_on
  135.   end
  136.   def recipe_all_switch_off
  137.     i_recipe_all_switch_off
  138.     w_recipe_all_switch_off
  139.     a_recipe_all_switch_off
  140.   end

  141. end

  142. class Game_Interpreter
  143.   include WD_itemsynthesis
  144. end

  145. class Game_System
  146.   #--------------------------------------------------------------------------
  147.   # ● 公開インスタンス変数
  148.   #--------------------------------------------------------------------------
  149.   attr_accessor :i_rcp_sw
  150.   attr_accessor :w_rcp_sw
  151.   attr_accessor :a_rcp_sw
  152.   #--------------------------------------------------------------------------
  153.   # ● オブジェクト初期化
  154.   #--------------------------------------------------------------------------
  155.   alias wd_orig_initialize004 initialize
  156.   def initialize
  157.     wd_orig_initialize004
  158.     @i_rcp_sw = []
  159.     @w_rcp_sw = []
  160.     @a_rcp_sw = []
  161.   end
  162. end


  163. #==============================================================================
  164. # ■ Scene_ItemSynthesis
  165. #------------------------------------------------------------------------------
  166. #  合成画面の処理を行うクラスです。
  167. #==============================================================================

  168. class Scene_ItemSynthesis < Scene_MenuBase
  169.   #--------------------------------------------------------------------------
  170.   # ● 開始処理
  171.   #--------------------------------------------------------------------------
  172.   def start
  173.     super
  174.     create_help_window
  175.     create_dummy_window
  176.     create_number_window
  177.     create_status_window
  178.     create_material_window
  179.     create_list_window
  180.     create_category_window
  181.     create_gold_window
  182.     create_change_window
  183.   end
  184.   def create_background
  185.     @background_sprite = Spriteset_Map.new
  186.   end
  187.   #--------------------------------------------------------------------------
  188.   # ● ゴールドウィンドウの作成
  189.   #--------------------------------------------------------------------------
  190.   def create_gold_window
  191.     @gold_window = Window_Gold.new
  192.     @gold_window.viewport = @viewport
  193.     @gold_window.x = Graphics.width - @gold_window.width
  194.     @gold_window.y = @help_window.height
  195.     @gold_window.hide
  196.   end
  197.   #--------------------------------------------------------------------------
  198.   # ● 切り替え表示ウィンドウの作成
  199.   #--------------------------------------------------------------------------
  200.   def create_change_window
  201.     wx = 0
  202.     wy = @gold_window.y
  203.     ww = Graphics.width - @gold_window.width
  204.     wh = @gold_window.height
  205.     @change_window = Window_ItemSynthesisChange.new(wx, wy, ww, wh)
  206.     @change_window.viewport = @viewport
  207.     @change_window.hide
  208.   end
  209.   #--------------------------------------------------------------------------
  210.   # ● ダミーウィンドウの作成
  211.   #--------------------------------------------------------------------------
  212.   def create_dummy_window
  213.     wy = @help_window.y + @help_window.height + 48
  214.     wh = Graphics.height - wy
  215.     @dummy_window = Window_Base.new(0, wy, Graphics.width, wh)
  216.     @dummy_window.viewport = @viewport
  217.   end
  218.   #--------------------------------------------------------------------------
  219.   # ● 個数入力ウィンドウの作成
  220.   #--------------------------------------------------------------------------
  221.   def create_number_window
  222.     wy = @dummy_window.y
  223.     wh = @dummy_window.height
  224.     @number_window = Window_ItemSynthesisNumber.new(0, wy, wh)
  225.     @number_window.viewport = @viewport
  226.     @number_window.hide
  227.     @number_window.set_handler(:ok,     method(:on_number_ok))
  228.     @number_window.set_handler(:cancel, method(:on_number_cancel))
  229.   end
  230.   #--------------------------------------------------------------------------
  231.   # ● ステータスウィンドウの作成
  232.   #--------------------------------------------------------------------------
  233.   def create_status_window
  234.     wx = @number_window.width
  235.     wy = @dummy_window.y
  236.     ww = Graphics.width - wx
  237.     wh = @dummy_window.height
  238.     @status_window = Window_ShopStatus.new(wx, wy, ww, wh)
  239.     @status_window.viewport = @viewport
  240.     @status_window.hide
  241.   end
  242.   #--------------------------------------------------------------------------
  243.   # ● 素材ウィンドウの作成
  244.   #--------------------------------------------------------------------------
  245.   def create_material_window
  246.     wx = @number_window.width
  247.     wy = @dummy_window.y
  248.     ww = Graphics.width - wx
  249.     wh = @dummy_window.height
  250.     @material_window = Window_ItemSynthesisMaterial.new(wx, wy, ww, wh)
  251.     @material_window.viewport = @viewport
  252.     @material_window.hide
  253.     @number_window.material_window = @material_window
  254.   end
  255.   #--------------------------------------------------------------------------
  256.   # ● 合成アイテムリストウィンドウの作成
  257.   #--------------------------------------------------------------------------
  258.   def create_list_window
  259.     wy = @dummy_window.y
  260.     wh = @dummy_window.height
  261.     @list_window = Window_ItemSynthesisList.new(0, wy, wh)
  262.     @list_window.viewport = @viewport
  263.     @list_window.help_window = @help_window
  264.     @list_window.status_window = @status_window
  265.     @list_window.material_window = @material_window
  266.     @list_window.hide
  267.     @list_window.set_handler(:ok,     method(:on_list_ok))
  268.     @list_window.set_handler(:cancel, method(:on_list_cancel))
  269.     @list_window.set_handler(:change_window, method(:on_change_window))   
  270.   end
  271.   #--------------------------------------------------------------------------
  272.   # ● カテゴリウィンドウの作成
  273.   #--------------------------------------------------------------------------
  274.   def create_category_window
  275.     @category_window = Window_ItemSynthesisCategory.new
  276.     @category_window.viewport = @viewport
  277.     @category_window.help_window = @help_window
  278.     @category_window.y = @help_window.height
  279.     @category_window.activate
  280.     @category_window.item_window = @list_window
  281.     @category_window.set_handler(:ok,     method(:on_category_ok))
  282.     @category_window.set_handler(:cancel, method(:return_scene))
  283.   end
  284.   #--------------------------------------------------------------------------
  285.   # ● 合成アイテムリストウィンドウのアクティブ化
  286.   #--------------------------------------------------------------------------
  287.   def activate_list_window
  288.     @list_window.money = money
  289.     @list_window.show.activate
  290.   end
  291.   #--------------------------------------------------------------------------
  292.   # ● 合成[決定]
  293.   #--------------------------------------------------------------------------
  294.   def on_list_ok
  295.     @item = @list_window.item
  296.     @list_window.hide
  297.     @number_window.set(@item, max_buy, buying_price, currency_unit)
  298.     @number_window.show.activate
  299.   end
  300.   #--------------------------------------------------------------------------
  301.   # ● 合成[キャンセル]
  302.   #--------------------------------------------------------------------------
  303.   def on_list_cancel
  304.     @category_window.activate
  305.     @category_window.show
  306.     @dummy_window.show
  307.     @list_window.hide
  308.     @status_window.hide
  309.     @status_window.item = nil
  310.     @material_window.hide
  311.     @material_window.set(nil, nil)
  312.     @gold_window.hide
  313.     @change_window.hide
  314.     @help_window.clear
  315.   end
  316.   #--------------------------------------------------------------------------
  317.   # ● 表示切替
  318.   #--------------------------------------------------------------------------
  319.   def on_change_window
  320.     if @status_window.visible
  321.       @status_window.hide
  322.       @material_window.show
  323.     else
  324.       @status_window.show
  325.       @material_window.hide
  326.     end
  327.   end
  328.   #--------------------------------------------------------------------------
  329.   # ● カテゴリ[決定]
  330.   #--------------------------------------------------------------------------
  331.   def on_category_ok
  332.     activate_list_window
  333.     @gold_window.show
  334.     @change_window.show
  335.     @material_window.show
  336.     @category_window.hide
  337.     @list_window.select(0)
  338.   end
  339.   #--------------------------------------------------------------------------
  340.   # ● 個数入力[決定]
  341.   #--------------------------------------------------------------------------
  342.   def on_number_ok
  343.     Sound.play_shop
  344.     do_syntetic(@number_window.number)
  345.     end_number_input
  346.     @gold_window.refresh
  347.   end
  348.   #--------------------------------------------------------------------------
  349.   # ● 個数入力[キャンセル]
  350.   #--------------------------------------------------------------------------
  351.   def on_number_cancel
  352.     Sound.play_cancel
  353.     end_number_input
  354.   end
  355.   #--------------------------------------------------------------------------
  356.   # ● 合成の実行
  357.   #--------------------------------------------------------------------------
  358.   def do_syntetic(number)
  359.     $game_party.lose_gold(number * buying_price)
  360.     $game_party.gain_item(@item, number)
  361.    
  362.       @recipe = @list_window.recipe(@item)
  363.       for i in [email protected]
  364.         kind = @recipe[i][0]
  365.         id   = @recipe[i][1]
  366.         num  = @recipe[i][2]
  367.         if kind == "I"
  368.           item = $data_items[id]
  369.         elsif kind == "W"
  370.           item = $data_weapons[id]
  371.         elsif kind == "A"
  372.           item = $data_armors[id]
  373.         end
  374.         $game_party.lose_item(item, num*number)
  375.       end
  376.   end
  377.   #--------------------------------------------------------------------------
  378.   # ● 個数入力の終了
  379.   #--------------------------------------------------------------------------
  380.   def end_number_input
  381.     @number_window.hide
  382.     activate_list_window
  383.   end
  384.   #--------------------------------------------------------------------------
  385.   # ● 最大購入可能個数の取得
  386.   #--------------------------------------------------------------------------
  387.   def max_buy
  388.     max = $game_party.max_item_number(@item) - $game_party.item_number(@item)
  389.    
  390.     @recipe = @list_window.recipe(@item)
  391.       for i in [email protected]
  392.         kind = @recipe[i][0]
  393.         id   = @recipe[i][1]
  394.         num  = @recipe[i][2]
  395.         if kind == "I"
  396.           item = $data_items[id]
  397.         elsif kind == "W"
  398.           item = $data_weapons[id]
  399.         elsif kind == "A"
  400.           item = $data_armors[id]
  401.         end
  402.         if num > 0
  403.           max_buf = $game_party.item_number(item)/num
  404.         else
  405.           max_buf = 999
  406.         end
  407.         max = [max, max_buf].min
  408.       end
  409.       
  410.     buying_price == 0 ? max : [max, money / buying_price].min

  411.   end
  412.   #--------------------------------------------------------------------------
  413.   # ● 所持金の取得
  414.   #--------------------------------------------------------------------------
  415.   def money
  416.     @gold_window.value
  417.   end
  418.   #--------------------------------------------------------------------------
  419.   # ● 通貨単位の取得
  420.   #--------------------------------------------------------------------------
  421.   def currency_unit
  422.     @gold_window.currency_unit
  423.   end
  424.   #--------------------------------------------------------------------------
  425.   # ● 合成費用の取得
  426.   #--------------------------------------------------------------------------
  427.   def buying_price
  428.     @list_window.price(@item)
  429.   end
  430. end


  431. #==============================================================================
  432. # ■ Window_ItemSynthesisList
  433. #------------------------------------------------------------------------------
  434. #  合成画面で、合成可能なアイテムの一覧を表示するウィンドウです。
  435. #==============================================================================

  436. class Window_ItemSynthesisList < Window_Selectable
  437.   include WD_itemsynthesis
  438.   #--------------------------------------------------------------------------
  439.   # ● 公開インスタンス変数
  440.   #--------------------------------------------------------------------------
  441.   attr_reader   :status_window            # ステータスウィンドウ
  442.   #--------------------------------------------------------------------------
  443.   # ● オブジェクト初期化
  444.   #--------------------------------------------------------------------------
  445.   def initialize(x, y, height)
  446.     super(x, y, window_width, height)
  447.    
  448.     @shop_goods = []
  449.     @shop_recipes = []
  450.    
  451.     for i in 1..WD_itemsynthesis_ini::I_recipe.size
  452.       recipe = WD_itemsynthesis_ini::I_recipe[i]
  453.       if recipe
  454.         good = [0, i, recipe[0]]
  455.         if i_recipe_switch_on?(i)
  456.           @shop_goods.push(good)
  457.           @shop_recipes.push(recipe)
  458.         end
  459.       end
  460.     end
  461.     for i in 1..WD_itemsynthesis_ini::W_recipe.size
  462.       recipe = WD_itemsynthesis_ini::W_recipe[i]
  463.       if recipe
  464.         good = [1, i, recipe[0]]
  465.         if w_recipe_switch_on?(i)
  466.           @shop_goods.push(good)
  467.           @shop_recipes.push(recipe)
  468.         end
  469.       end
  470.     end
  471.     for i in 1..WD_itemsynthesis_ini::A_recipe.size
  472.       recipe = WD_itemsynthesis_ini::A_recipe[i]
  473.       if recipe
  474.         good = [2, i, recipe[0]]
  475.         if a_recipe_switch_on?(i)
  476.           @shop_goods.push(good)
  477.           @shop_recipes.push(recipe)
  478.         end
  479.       end
  480.     end
  481.    
  482.     @money = 0
  483.     refresh
  484.     select(0)
  485.   end
  486.   #--------------------------------------------------------------------------
  487.   # ● ウィンドウ幅の取得
  488.   #--------------------------------------------------------------------------
  489.   def window_width
  490.     return 304
  491.   end
  492.   #--------------------------------------------------------------------------
  493.   # ● 項目数の取得
  494.   #--------------------------------------------------------------------------
  495.   def item_max
  496.     @data ? @data.size : 1
  497.   end
  498.   #--------------------------------------------------------------------------
  499.   # ● アイテムの取得
  500.   #--------------------------------------------------------------------------
  501.   def item
  502.     @data[index]
  503.   end
  504.   #--------------------------------------------------------------------------
  505.   # ● 所持金の設定
  506.   #--------------------------------------------------------------------------
  507.   def money=(money)
  508.     @money = money
  509.     refresh
  510.   end
  511.   #--------------------------------------------------------------------------
  512.   # ● 選択項目の有効状態を取得
  513.   #--------------------------------------------------------------------------
  514.   def current_item_enabled?
  515.     enable?(@data[index])
  516.   end
  517.   #--------------------------------------------------------------------------
  518.   # ● 合成費用を取得
  519.   #--------------------------------------------------------------------------
  520.   def price(item)
  521.     @price[item]
  522.   end
  523.   #--------------------------------------------------------------------------
  524.   # ● 合成可否を取得
  525.   #--------------------------------------------------------------------------
  526.   def enable?(item)
  527.     @makable[item]
  528.   end
  529.   #--------------------------------------------------------------------------
  530.   # ● レシピを取得
  531.   #--------------------------------------------------------------------------
  532.   def recipe(item)
  533.     @recipe[item]
  534.   end
  535.   #--------------------------------------------------------------------------
  536.   # ● アイテムを許可状態で表示するかどうか
  537.   #--------------------------------------------------------------------------
  538.   def have_mat?(recipe)
  539.     flag = true
  540.     if @money >= recipe[0]
  541.       for i in 1...recipe.size
  542.         kind = recipe[i][0]
  543.         id   = recipe[i][1]
  544.         num  = recipe[i][2]
  545.         if kind == "I"
  546.           item = $data_items[id]
  547.         elsif kind == "W"
  548.           item = $data_weapons[id]
  549.         elsif kind == "A"
  550.           item = $data_armors[id]
  551.         end
  552.         if $game_party.item_number(item) < [num, 1].max
  553.           flag = false
  554.         end
  555.       end
  556.     else
  557.       flag = false
  558.     end
  559.     return flag
  560.   end
  561.   #--------------------------------------------------------------------------
  562.   # ● カテゴリの設定
  563.   #--------------------------------------------------------------------------
  564.   def category=(category)
  565.     return if @category == category
  566.     @category = category
  567.     refresh
  568.   end
  569.   #--------------------------------------------------------------------------
  570.   # ● リフレッシュ
  571.   #--------------------------------------------------------------------------
  572.   def refresh
  573.     make_item_list
  574.     create_contents
  575.     draw_all_items
  576.   end
  577.   #--------------------------------------------------------------------------
  578.   # ● アイテムをリストに含めるかどうか
  579.   #--------------------------------------------------------------------------
  580.   def include?(item)
  581.     case @category
  582.     when :item
  583.       item.is_a?(RPG::Item) && !item.key_item?
  584.     when :weapon
  585.       item.is_a?(RPG::Weapon)
  586.     when :armor
  587.       item.is_a?(RPG::Armor)
  588.     when :key_item
  589.       item.is_a?(RPG::Item) && item.key_item?
  590.     else
  591.       false
  592.     end
  593.   end
  594.   #--------------------------------------------------------------------------
  595.   # ● アイテムリストの作成
  596.   #--------------------------------------------------------------------------
  597.   def make_item_list
  598.     @data = []
  599.     @price = {}
  600.     @makable = {}
  601.     @recipe = {}
  602.     for i in 0...@shop_goods.size
  603.       goods = @shop_goods[i]
  604.       recipe = @shop_recipes[i]
  605.       case goods[0]
  606.       when 0;  item = $data_items[goods[1]]
  607.       when 1;  item = $data_weapons[goods[1]]
  608.       when 2;  item = $data_armors[goods[1]]
  609.       end
  610.       if item
  611.         if include?(item)
  612.           @data.push(item)
  613.           @price[item] = goods[2]
  614.           @makable[item] = have_mat?(recipe)
  615.           @recipe[item] = recipe
  616.         end
  617.       end
  618.     end
  619.   end
  620.   #--------------------------------------------------------------------------
  621.   # ● 項目の描画
  622.   #--------------------------------------------------------------------------
  623.   def draw_item(index)
  624.     item = @data[index]
  625.     rect = item_rect(index)
  626.     draw_item_name(item, rect.x, rect.y, enable?(item))
  627.     rect.width -= 4
  628.     draw_text(rect, price(item), 2)  if WD_itemsynthesis_ini::Cost_view
  629.   end
  630.   #--------------------------------------------------------------------------
  631.   # ● ステータスウィンドウの設定
  632.   #--------------------------------------------------------------------------
  633.   def status_window=(status_window)
  634.     @status_window = status_window
  635.     call_update_help
  636.   end
  637.   #--------------------------------------------------------------------------
  638.   # ● 素材ウィンドウの設定
  639.   #--------------------------------------------------------------------------
  640.   def material_window=(material_window)
  641.     @material_window = material_window
  642.     call_update_help
  643.   end
  644.   #--------------------------------------------------------------------------
  645.   # ● ヘルプテキスト更新
  646.   #--------------------------------------------------------------------------
  647.   def update_help
  648.     @help_window.set_item(item) if @help_window
  649.     @status_window.item = item if @status_window
  650.     @material_window.set(item, recipe(item)) if @material_window
  651.   end
  652.   #--------------------------------------------------------------------------
  653.   # ● ←→ ボタン(表示切替)が押されたときの処理
  654.   #--------------------------------------------------------------------------
  655.   def process_change_window
  656.     Sound.play_cursor
  657.     Input.update
  658.     call_handler(:change_window)
  659.   end
  660.   #--------------------------------------------------------------------------
  661.   # ● 決定やキャンセルなどのハンドリング処理
  662.   #--------------------------------------------------------------------------
  663.   def process_handling
  664.     super
  665.     if active
  666.       return process_change_window if handle?(:change_window) && Input.trigger?(:X)
  667.       return process_change_window if handle?(:change_window) && Input.trigger?(:Y)
  668.     end
  669.   end
  670. end


  671. #==============================================================================
  672. # ■ Window_ItemSynthesisMaterial
  673. #------------------------------------------------------------------------------
  674. #  合成画面で、合成に必要な素材を表示するウィンドウです。
  675. #==============================================================================

  676. class Window_ItemSynthesisMaterial < Window_Base
  677.   #--------------------------------------------------------------------------
  678.   # ● オブジェクト初期化
  679.   #--------------------------------------------------------------------------
  680.   def initialize(x, y, width, height)
  681.     super(x, y, width, height)
  682.     @item = nil
  683.     refresh
  684.   end
  685.   #--------------------------------------------------------------------------
  686.   # ● リフレッシュ
  687.   #--------------------------------------------------------------------------
  688.   def refresh
  689.     contents.clear
  690.     draw_possession(4, 0)
  691.     draw_material_info(0, line_height * 2)
  692.   end
  693.   #--------------------------------------------------------------------------
  694.   # ● アイテムの設定
  695.   #--------------------------------------------------------------------------
  696.   def set(item, recipe)
  697.     @item = item
  698.     @recipe = recipe
  699.     @make_number = 1
  700.     refresh
  701.   end
  702.   #--------------------------------------------------------------------------
  703.   # ● 作成個数の設定
  704.   #--------------------------------------------------------------------------
  705.   def set_num(make_number)
  706.     @make_number = make_number
  707.     refresh
  708.   end
  709.   #--------------------------------------------------------------------------
  710.   # ● 所持数の描画
  711.   #--------------------------------------------------------------------------
  712.   def draw_possession(x, y)
  713.     rect = Rect.new(x, y, contents.width - 4 - x, line_height)
  714.     change_color(system_color)
  715.     draw_text(rect, Vocab::Possession)
  716.     change_color(normal_color)
  717.     draw_text(rect, $game_party.item_number(@item), 2)
  718.   end
  719.   #--------------------------------------------------------------------------
  720.   # ● 素材情報の描画
  721.   #--------------------------------------------------------------------------
  722.   def draw_material_info(x, y)
  723.     rect = Rect.new(x, y, contents.width, line_height)
  724.     change_color(system_color)
  725.     contents.font.size = 18
  726.     draw_text(rect, "需要材料", 0)
  727.     if @recipe
  728.       for i in [email protected]
  729.         kind = @recipe[i][0]
  730.         id   = @recipe[i][1]
  731.         num  = @recipe[i][2]
  732.         if kind == "I"
  733.           item = $data_items[id]
  734.         elsif kind == "W"
  735.           item = $data_weapons[id]
  736.         elsif kind == "A"
  737.           item = $data_armors[id]
  738.         end
  739.         rect = Rect.new(x, y + line_height*i, contents.width, line_height)
  740.         enabled = true
  741.         enabled = false if [num*@make_number, 1].max  > $game_party.item_number(item)
  742.         draw_item_name(item, rect.x, rect.y, enabled)
  743.         change_color(normal_color, enabled)
  744.         if num > 0
  745.           draw_text(rect, "#{num*@make_number}/#{$game_party.item_number(item)}", 2)
  746.         end
  747.       end
  748.     end
  749.     change_color(normal_color)
  750.     contents.font.size = 24
  751.   end
  752. end


  753. #==============================================================================
  754. # ■ Window_ItemSynthesisNumber
  755. #------------------------------------------------------------------------------
  756. #  合成画面で、合成するアイテムの個数を入力するウィンドウです。
  757. #==============================================================================

  758. class Window_ItemSynthesisNumber < Window_ShopNumber
  759.   #--------------------------------------------------------------------------
  760.   # ● リフレッシュ
  761.   #--------------------------------------------------------------------------
  762.   def refresh
  763.     contents.clear
  764.     draw_item_name(@item, 0, item_y)
  765.     draw_number
  766.     draw_total_price if WD_itemsynthesis_ini::Cost_view
  767.   end
  768.   #--------------------------------------------------------------------------
  769.   # ● オブジェクト初期化
  770.   #--------------------------------------------------------------------------
  771.   def material_window=(material_window)
  772.     @material_window = material_window
  773.     call_update_help
  774.   end
  775.   #--------------------------------------------------------------------------
  776.   # ● 作成個数の変更
  777.   #--------------------------------------------------------------------------
  778.   def change_number(amount)
  779.     @number = [[@number + amount, @max].min, 1].max
  780.     call_update_help #追加
  781.   end
  782.   #--------------------------------------------------------------------------
  783.   # ● ヘルプテキスト更新
  784.   #--------------------------------------------------------------------------
  785.   def call_update_help
  786.     @material_window.set_num(@number) if @material_window
  787.   end
  788. end


  789. #==============================================================================
  790. # ■ Window_ItemSynthesisCategory
  791. #------------------------------------------------------------------------------
  792. #  合成画面で、通常アイテムや装備品の分類を選択するウィンドウです。
  793. #==============================================================================

  794. class Window_ItemSynthesisCategory < Window_ItemCategory
  795.   #--------------------------------------------------------------------------
  796.   # ● 桁数の取得
  797.   #--------------------------------------------------------------------------
  798.   def col_max
  799.     i = 0
  800.     i += 1 if WD_itemsynthesis_ini::Category_i
  801.     i += 1 if WD_itemsynthesis_ini::Category_w
  802.     i += 1 if WD_itemsynthesis_ini::Category_a
  803.     i += 1 if WD_itemsynthesis_ini::Category_k
  804.     return i
  805.   end
  806.   #--------------------------------------------------------------------------
  807.   # ● コマンドリストの作成
  808.   #--------------------------------------------------------------------------
  809.   def make_command_list
  810.     add_command(Vocab::item,     :item)     if WD_itemsynthesis_ini::Category_i
  811.     add_command("强化",   :weapon)   if WD_itemsynthesis_ini::Category_w
  812.     add_command(Vocab::armor,    :armor)    if WD_itemsynthesis_ini::Category_a
  813.     add_command(Vocab::key_item, :key_item) if WD_itemsynthesis_ini::Category_k
  814.   end
  815. end


  816. #==============================================================================
  817. # ■ Window_ItemSynthesisNumber
  818. #------------------------------------------------------------------------------
  819. #  合成画面で、切替を表示するウィンドウです。
  820. #==============================================================================

  821. class Window_ItemSynthesisChange < Window_Base
  822.   #--------------------------------------------------------------------------
  823.   # ● オブジェクト初期化
  824.   #--------------------------------------------------------------------------
  825.   def initialize(x, y, width, height)
  826.     super(x, y, width, height)
  827.     refresh
  828.   end
  829.   #--------------------------------------------------------------------------
  830.   # ● リフレッシュ
  831.   #--------------------------------------------------------------------------
  832.   def refresh
  833.     contents.clear
  834.     text = "X:返回列表"
  835.     draw_text(0, 0, contents_width, line_height, text, 1)
  836.   end
  837. end

复制代码
②:
  1. #encoding:utf-8
  2. #==============================================================================
  3. #BY:asd11000
  4. #每添加一个制造的类型,最上面的类别菜单就会多一项。
  5. #
  6. #添加类型的方法是:
  7. #$game_party.add_cook_type(类别名称,类别介绍, 类别状态-默认false)
  8. #
  9. #举例:
  10. #$game_party.add_cook_type("制药","调配药品", true)
  11. #
  12. #添加配方的方法:
  13. #$game_party.add_cookbook(配方名称, 配方介绍, 配方类别名称,材料的二维数组,产出物的二维数组,配方状态默认为true)
  14. #
  15. #举例:
  16. #$game_party.add_cookbook("初级补血药水", "制作初级补血药水", "制药",[[18,2],[3,4],[2,5]],[[1,1],[44,5]],true)
  17. #
  18. #调用窗口的方法:SceneManager.call(Scene_Cook)
  19. #==============================================================================

  20. #==============================================================================
  21. # ■ Cookbook_Type
  22. #------------------------------------------------------------------------------
  23. #  食谱类型类。
  24. #==============================================================================

  25. class Cookbook_Type
  26.   attr_reader :index
  27.   attr_reader :name
  28.   attr_reader :description
  29.   attr_reader :enabled
  30.   #--------------------------------------------------------------------------
  31.   # ● 初始化对象
  32.   #--------------------------------------------------------------------------
  33.   def initialize(index, name, description, enabled = false)
  34.     @Index = index
  35.     @name = name
  36.     @description = description
  37.     @enabled = enabled
  38.   end

  39.   def enable(en)
  40.     @enabled = en
  41.   end
  42. end

  43. #==============================================================================
  44. # ■ Cookbook
  45. #------------------------------------------------------------------------------
  46. #  食谱类。本类在 Game_Task 类的内部使用。
  47. #   食谱属性:食谱序号,食谱名称,食谱类型,食谱介绍,原料,成品
  48. #==============================================================================

  49. class Cookbook
  50.   attr_reader :index
  51.   attr_reader :name
  52.   attr_reader :description
  53.   attr_reader :type
  54.   attr_reader :input
  55.   attr_reader :output
  56.   attr_reader :enabled
  57.   #--------------------------------------------------------------------------
  58.   # ● 初始化对象
  59.   #--------------------------------------------------------------------------
  60.   def initialize(index, name, description, type, input, output, enabled = true)
  61.     @Index = index
  62.     @name = name
  63.     @description = description
  64.     @type = type
  65.     @input = input
  66.     @output = output
  67.     @enabled = enabled
  68.   end

  69.   def enable(en)
  70.     @enabled = en
  71.   end

  72.   #--------------------------------------------------------------------------
  73.   # ● 查询列表中的物品
  74.   #--------------------------------------------------------------------------
  75.   def in_list?(item, list)
  76.     list.each do |arr|
  77.       return true if arr[0] == item.id
  78.     end
  79.     return false
  80.   end
  81.   #--------------------------------------------------------------------------
  82.   # ● 查询是否是材料列表中的物品
  83.   #--------------------------------------------------------------------------
  84.   def resource?(item)
  85.     in_list?(item, @input)
  86.   end
  87.   #--------------------------------------------------------------------------
  88.   # ● 查询是否是产出列表中的物品
  89.   #--------------------------------------------------------------------------
  90.   def output?(item)
  91.     in_list?(item, @output)
  92.   end
  93.   #--------------------------------------------------------------------------
  94.   # ● 查询材料需求量
  95.   #--------------------------------------------------------------------------
  96.   def amount(item, i)
  97.     if i == 0
  98.       @input.each do |arr|
  99.         return arr[1] if arr[0] == item.id
  100.       end
  101.     else
  102.       @output.each do |arr|
  103.         return arr[1] if arr[0] == item.id
  104.       end
  105.     end
  106.     return 0
  107.   end
  108.   #--------------------------------------------------------------------------
  109.   # ● 查询材料是否足够
  110.   #--------------------------------------------------------------------------
  111.   def enough?
  112.     input.each do |arr|
  113.       return false if $data_items[arr[0]] && arr[1] > $game_party.item_number($data_items[arr[0]])
  114.     end
  115.     return true
  116.   end
  117.   #--------------------------------------------------------------------------
  118.   # ● 查询某件材料是否足够
  119.   #--------------------------------------------------------------------------
  120.   def item_enough?(item)
  121.     input.each do |arr|
  122.       return false if arr[0] == item.id && arr[1] > $game_party.item_number(item)
  123.     end
  124.     return true
  125.   end
  126. end

  127. #==============================================================================
  128. # ■ Game_Party
  129. #==============================================================================

  130. class Game_Party < Game_Unit
  131.   #--------------------------------------------------------------------------
  132.   # ● 初始化对象
  133.   #--------------------------------------------------------------------------
  134.   alias old_old_init initialize
  135.   def initialize
  136.     old_old_init
  137.     @cook_types = []
  138.     @cookbooks = []
  139.   end
  140.   #--------------------------------------------------------------------------
  141.   # ● 添加新的食谱类型
  142.   #--------------------------------------------------------------------------
  143.   def add_cook_type(n, d, en)
  144.     @cook_types.push(Cookbook_Type.new(@cook_types.size, n, d, en)) if !have_cook_type?(n)
  145.   end
  146.   #--------------------------------------------------------------------------
  147.   # ● 添加新的食谱
  148.   #--------------------------------------------------------------------------
  149.   def add_cookbook(n, d, type, input, output, en)
  150.     if !have_cookbook?(n) && have_cook_type?(type)
  151.       @cookbooks.push(Cookbook.new(@cookbooks.size, n, d, type, input, output, en))
  152.     end
  153.   end
  154.   #--------------------------------------------------------------------------
  155.   # ● 判断名称为n的食谱类型是否存在
  156.   #--------------------------------------------------------------------------
  157.   def have_cook_type?(n)
  158.     @cook_types.each do |x|
  159.       return true if x.name == n
  160.     end
  161.     return false
  162.   end
  163.   #--------------------------------------------------------------------------
  164.   # ● 判断名称为n的食谱是否存在
  165.   #--------------------------------------------------------------------------
  166.   def have_cookbook?(n)
  167.     @cookbooks.each do |x|
  168.       return true if x.name == n
  169.     end
  170.     return false
  171.   end
  172.   #--------------------------------------------------------------------------
  173.   # ● 返回食谱类型列表
  174.   #--------------------------------------------------------------------------
  175.   def cook_types
  176.     return @cook_types
  177.   end
  178.   #--------------------------------------------------------------------------
  179.   # ● 返回食谱列表
  180.   #--------------------------------------------------------------------------
  181.   def cookbooks(type = nil)
  182.     return @cookbooks if type == nil
  183.     arr = []
  184.     @cookbooks.each do |x|
  185.       arr.push(x) if x.type == type
  186.     end
  187.     return arr
  188.   end
  189.   #--------------------------------------------------------------------------
  190.   # ● 更改序号为i的食谱类型的使用状态
  191.   #--------------------------------------------------------------------------
  192.   def set_cook_type(i, en)
  193.     @cook_types[i].enable(en)
  194.   end
  195.   #--------------------------------------------------------------------------
  196.   # ● 更改序号为i的食谱的使用状态
  197.   #--------------------------------------------------------------------------
  198.   def set_cookbook(i, en)
  199.     @cookbooks[i].enable(en)
  200.   end
  201.   #--------------------------------------------------------------------------
  202.   # ● 返回食谱类型数目
  203.   #--------------------------------------------------------------------------
  204.   def cook_types_size
  205.     return @cook_types.size
  206.   end
  207.   #--------------------------------------------------------------------------
  208.   # ● 查询名称为n的食谱类型的描述
  209.   #--------------------------------------------------------------------------
  210.   def cook_type_description(n)
  211.     @cook_types.each do |x|
  212.       return x.description if x.name == n
  213.     end
  214.     return ""
  215.   end
  216. end

  217. #==============================================================================
  218. # ■ Scene_Cook
  219. #------------------------------------------------------------------------------
  220. #  烹饪画面
  221. #==============================================================================

  222. class Scene_Cook < Scene_ItemBase
  223.   #--------------------------------------------------------------------------
  224.   # ● 开始处理
  225.   #--------------------------------------------------------------------------
  226.   def start
  227.     super
  228.     create_category_window
  229.     create_cookbook_window
  230.     create_description_window
  231.     create_needs_window
  232.   end
  233.   #--------------------------------------------------------------------------
  234.   # ● 生成分类窗口
  235.   #--------------------------------------------------------------------------
  236.   def create_category_window
  237.     @category_window = Window_CookCategory.new
  238.     @category_window.viewport = @viewport
  239.     @category_window.y = 0
  240.     @category_window.set_handler(:ok,     method(:on_category_ok))
  241.     @category_window.set_handler(:cancel, method(:return_scene))
  242.   end
  243.   #--------------------------------------------------------------------------
  244.   # ● 生成食谱窗口
  245.   #--------------------------------------------------------------------------
  246.   def create_cookbook_window
  247.     wy = @category_window.height
  248.     wh = Graphics.height - wy
  249.     @item_window = Window_CookList.new(0, wy, Graphics.width*0.5 , wh)
  250.     @item_window.viewport = @viewport
  251.     @item_window.set_handler(:ok,     method(:on_item_ok))
  252.     @item_window.set_handler(:cancel, method(:on_item_cancel))
  253.     @category_window.item_window = @item_window
  254.   end
  255.   #--------------------------------------------------------------------------
  256.   # ● 生成描述窗口
  257.   #--------------------------------------------------------------------------
  258.   def create_description_window
  259.     wy = @category_window.height
  260.     @help_window = Window_Description.new(Graphics.width*0.5, wy)
  261.     @help_window.viewport = @viewport
  262.     @item_window.help_window = @help_window
  263.     @category_window.help_window = @help_window
  264.   end
  265.     #--------------------------------------------------------------------------
  266.   # ● 生成材料窗口
  267.   #--------------------------------------------------------------------------
  268.   def create_needs_window
  269.     wy = @category_window.height + @help_window.height
  270.     wh = Graphics.height - wy
  271.     @needs_window = Window_NeedsList.new(Graphics.width*0.5, wy, Graphics.width*0.5 , wh)
  272.     #@item_window.viewport = @viewport
  273.     @item_window.needs_window = @needs_window

  274.   end
  275.   #--------------------------------------------------------------------------
  276.   # ● 分类“确定”
  277.   #--------------------------------------------------------------------------
  278.   def on_category_ok
  279.     @item_window.activate
  280.     @item_window.select_last
  281.   end
  282.   #--------------------------------------------------------------------------
  283.   # ● 食谱“确定”
  284.   #--------------------------------------------------------------------------
  285.   def on_item_ok
  286.     #$game_party.last_item.object = item
  287.     cook
  288.   end
  289.   #--------------------------------------------------------------------------
  290.   # ● 食谱“取消”
  291.   #--------------------------------------------------------------------------
  292.   def on_item_cancel
  293.     @item_window.unselect
  294.     @category_window.activate
  295.   end
  296.   #--------------------------------------------------------------------------
  297.   # ● 烹饪
  298.   #--------------------------------------------------------------------------
  299.   def cook
  300.     if item.enough?
  301.       play_se_for_item
  302.       use_item
  303.       @needs_window.refresh
  304.       @item_window.refresh
  305.       activate_item_window
  306.     end
  307.   end
  308.   #--------------------------------------------------------------------------
  309.   # ● 播放制作声效
  310.   #--------------------------------------------------------------------------
  311.   def play_se_for_item
  312.     Sound.play_recovery
  313.   end
  314.   #--------------------------------------------------------------------------
  315.   # ● 使用食谱
  316.   #--------------------------------------------------------------------------
  317.   def use_item
  318.     #super
  319.     #@item_window.redraw_current_item
  320.     $data_items.each do |it|
  321.       if it && !it.name.empty?
  322.         $game_party.gain_item(it,-item.amount(it,0)) if item.resource?(it)
  323.         $game_party.gain_item(it,item.amount(it,1)) if item.output?(it)
  324.       end
  325.     end
  326.   end
  327. end


  328. #==============================================================================
  329. # ■ Window_CookCategory
  330. #------------------------------------------------------------------------------
  331. #  烹饪画面中,显示食谱类型的窗口。
  332. #==============================================================================

  333. class Window_CookCategory < Window_HorzCommand
  334.   #--------------------------------------------------------------------------
  335.   # ● 定义实例变量
  336.   #--------------------------------------------------------------------------
  337.   attr_reader   :item_window
  338.   #--------------------------------------------------------------------------
  339.   # ● 初始化对象
  340.   #--------------------------------------------------------------------------
  341.   def initialize
  342.     super(0, 0)
  343.   end
  344.   #--------------------------------------------------------------------------
  345.   # ● 获取窗口的宽度
  346.   #--------------------------------------------------------------------------
  347.   def window_width
  348.     Graphics.width
  349.   end
  350.   #--------------------------------------------------------------------------
  351.   # ● 获取列数
  352.   #--------------------------------------------------------------------------
  353.   def col_max
  354.     return $game_party.cook_types_size
  355.   end
  356.   #--------------------------------------------------------------------------
  357.   # ● 更新画面
  358.   #--------------------------------------------------------------------------
  359.   def update
  360.     super
  361.     #@item_window.category = current_symbol if @item_window
  362.     @item_window.category = current_data[:name] if @item_window
  363.   end
  364.   #--------------------------------------------------------------------------
  365.   # ● 生成食谱类型列表
  366.   #--------------------------------------------------------------------------
  367.   def make_command_list
  368.     $game_party.cook_types.each do |t|
  369.       add_command(t.name, t.index, t.enabled)
  370.     end
  371.   end
  372.   #--------------------------------------------------------------------------
  373.   # ● 设置食谱列表窗口
  374.   #--------------------------------------------------------------------------
  375.   def item_window=(item_window)
  376.     @item_window = item_window
  377.     update
  378.   end
  379.   #--------------------------------------------------------------------------
  380.   # ● 更新帮助内容
  381.   #--------------------------------------------------------------------------
  382.   def update_help
  383.     @help_window.set_text($game_party.cook_type_description(current_data[:name]))
  384.   end
  385. end

  386. #==============================================================================
  387. # ■ Window_CookList
  388. #------------------------------------------------------------------------------
  389. #  任务画面中,显示已获得任务的窗口。
  390. #==============================================================================

  391. class Window_CookList < Window_Selectable
  392.   #--------------------------------------------------------------------------
  393.   # ● 定义实例变量
  394.   #--------------------------------------------------------------------------
  395.   attr_reader   :needs_window
  396.   #--------------------------------------------------------------------------
  397.   # ● 初始化对象
  398.   #--------------------------------------------------------------------------
  399.   def initialize(x, y, width, height)
  400.     super
  401.     @data = []
  402.     @category = $game_party.cook_types_size > 0 ? $game_party.cook_types[0].name : nil
  403.     refresh
  404.   end
  405.   #--------------------------------------------------------------------------
  406.   # ● 设置分类
  407.   #--------------------------------------------------------------------------
  408.   def category=(category)
  409.     return if @category == category
  410.     @category = category
  411.     refresh
  412.     self.oy = 0
  413.   end
  414.   #--------------------------------------------------------------------------
  415.   # ● 设置材料窗口
  416.   #--------------------------------------------------------------------------
  417.   def needs_window=(needs_window)
  418.     @needs_window = needs_window
  419.     update
  420.   end
  421.   #--------------------------------------------------------------------------
  422.   # ● 获取列数
  423.   #--------------------------------------------------------------------------
  424.   def col_max
  425.     return 1
  426.   end
  427.   #--------------------------------------------------------------------------
  428.   # ● 获取项目数
  429.   #--------------------------------------------------------------------------
  430.   def item_max
  431.     @data ? @data.size : 1
  432.   end
  433.   #--------------------------------------------------------------------------
  434.   # ● 获取食谱
  435.   #--------------------------------------------------------------------------
  436.   def item
  437.     @data && index >= 0 ? @data[index] : nil
  438.   end
  439.   #--------------------------------------------------------------------------
  440.   # ● 获取选择食谱的有效状态
  441.   #--------------------------------------------------------------------------
  442.   def current_item_enabled?
  443.     enable?(@data[index])
  444.   end
  445.   #--------------------------------------------------------------------------
  446.   # ● 查询此食谱是否可用
  447.   #--------------------------------------------------------------------------
  448.   def enable?(item)
  449.     item.enabled && item.enough?
  450.   end
  451.   #--------------------------------------------------------------------------
  452.   # ● 生成食谱列表
  453.   #--------------------------------------------------------------------------
  454.   def make_item_list
  455.     @data = $game_party.cookbooks(@category)
  456.   end
  457.   #--------------------------------------------------------------------------
  458.   # ● 返回上一个选择的位置
  459.   #--------------------------------------------------------------------------
  460.   def select_last
  461.     select(0)
  462.   end
  463.   #--------------------------------------------------------------------------
  464.   # ● 绘制项目
  465.   #--------------------------------------------------------------------------
  466.   def draw_item(index)
  467.     item = @data[index]
  468.     if item
  469.       rect = item_rect(index)
  470.       rect.width -= 4
  471.       draw_item_name(item, rect.x, rect.y, enable?(item))
  472.     end
  473.   end
  474.   #--------------------------------------------------------------------------
  475.   # ● 绘制名称
  476.   #     enabled : 有效的标志。false 的时候使用半透明效果绘制
  477.   #--------------------------------------------------------------------------
  478.   def draw_item_name(item, x, y, enabled = true, width = 300)
  479.     return unless item
  480.     text = item.name
  481.     text += "[材料不足]" if !item.enough?
  482.     change_color(normal_color, enabled)
  483.     draw_text(x, y, width, line_height, text)
  484.   end
  485.   #--------------------------------------------------------------------------
  486.   # ● 更新帮助内容
  487.   #--------------------------------------------------------------------------
  488.   def update_help
  489.     @help_window.set_item(item)
  490.   end
  491.    #--------------------------------------------------------------------------
  492.   # ● 更新食谱清单
  493.   #--------------------------------------------------------------------------
  494.   def update_needslist
  495.     @needs_window.set_item(item)
  496.   end
  497.   #--------------------------------------------------------------------------
  498.   # ● 调用帮助窗口的更新方法
  499.   #--------------------------------------------------------------------------
  500.   def call_update_help
  501.     update_help if @help_window
  502.     update_needslist if @needs_window
  503.   end
  504.   #--------------------------------------------------------------------------
  505.   # ● 刷新
  506.   #--------------------------------------------------------------------------
  507.   def refresh
  508.     make_item_list
  509.     create_contents
  510.     draw_all_items
  511.   end
  512. end
  513. #==============================================================================
  514. # ■ Window_Description
  515. #------------------------------------------------------------------------------
  516. #  显示食谱的说明的窗口
  517. #==============================================================================

  518. class Window_Description < Window_Base
  519.   #--------------------------------------------------------------------------
  520.   # ● 初始化对象
  521.   #--------------------------------------------------------------------------
  522.   def initialize(x, y)
  523.     super(x, y, Graphics.width*0.5, fitting_height(4))
  524.   end
  525.   #--------------------------------------------------------------------------
  526.   # ● 设置内容
  527.   #--------------------------------------------------------------------------
  528.   def set_text(text)
  529.     if text != @text
  530.       @text = text
  531.       refresh
  532.     end
  533.   end
  534.   #--------------------------------------------------------------------------
  535.   # ● 清除
  536.   #--------------------------------------------------------------------------
  537.   def clear
  538.     set_text("")
  539.   end
  540.   #--------------------------------------------------------------------------
  541.   # ● 设置食谱的介绍
  542.   #--------------------------------------------------------------------------
  543.   def set_item(item)
  544.     set_text(item ? item.description : "")
  545.   end
  546.   #--------------------------------------------------------------------------
  547.   # ● 刷新
  548.   #--------------------------------------------------------------------------
  549.   def refresh
  550.     contents.clear
  551.     draw_text_ex(4, 0, @text)
  552.   end
  553. end

  554. #==============================================================================
  555. # ■ Window_NeedsList
  556. #------------------------------------------------------------------------------
  557. #  烹饪画面中,显示食谱所需材料的窗口。
  558. #==============================================================================

  559. class Window_NeedsList < Window_Selectable
  560.   #--------------------------------------------------------------------------
  561.   # ● 初始化对象
  562.   #--------------------------------------------------------------------------
  563.   def initialize(x, y, width, height)
  564.     super
  565.     @category = :item
  566.     @cookbook = nil
  567.     @data = []
  568.     refresh
  569.   end
  570.   #--------------------------------------------------------------------------
  571.   # ● 获取列数
  572.   #--------------------------------------------------------------------------
  573.   def col_max
  574.     return 1
  575.   end
  576.   #--------------------------------------------------------------------------
  577.   # ● 获取项目数
  578.   #--------------------------------------------------------------------------
  579.   def item_max
  580.     @data ? @data.size : 1
  581.   end
  582.   #--------------------------------------------------------------------------
  583.   # ● 获取物品
  584.   #--------------------------------------------------------------------------
  585.   def item
  586.     @data && index >= 0 ? @data[index] : nil
  587.   end
  588.   #--------------------------------------------------------------------------
  589.   # ● 查询列表中是否含有此物品
  590.   #--------------------------------------------------------------------------
  591.   def include?(item)
  592.     item.is_a?(RPG::Item) && !item.key_item?
  593.   end
  594.   #--------------------------------------------------------------------------
  595.   # ● 获取选择食谱的有效状态
  596.   #--------------------------------------------------------------------------
  597.   def current_item_enabled?
  598.     enable?(@data[index])
  599.   end
  600.   #--------------------------------------------------------------------------
  601.   # ● 查询此食谱是否可用
  602.   #--------------------------------------------------------------------------
  603.   def enable?(item)
  604.     $game_party.usable?(item) && @cookbook.item_enough?(item)
  605.   end
  606.   #--------------------------------------------------------------------------
  607.   # ● 生成物品列表
  608.   #--------------------------------------------------------------------------
  609.   def make_item_list
  610.     @data = []
  611.     return if @cookbook== nil
  612.     tmp1 = []
  613.     tmp2 = []
  614.     $data_items.each do |item|
  615.       tmp1.push([item, 0]) if item && !item.name.empty? && @cookbook.resource?(item)
  616.       tmp2.push([item, 1]) if item && !item.name.empty? && @cookbook.output?(item)
  617.     end
  618.     if tmp1.size > 0 && tmp2.size > 0
  619.       @data.push(["需要材料:",0])
  620.       @data += tmp1
  621.       @data.push(["可以获得:",1])
  622.       @data += tmp2
  623.     end
  624.   end
  625.   #--------------------------------------------------------------------------
  626.   # ● 返回上一个选择的位置
  627.   #--------------------------------------------------------------------------
  628.   def select_last
  629.     select(0)
  630.   end
  631.   #--------------------------------------------------------------------------
  632.   # ● 绘制项目
  633.   #--------------------------------------------------------------------------
  634.   def draw_item(index)
  635.     item = @data[index]
  636.     if item
  637.       rect = item_rect(index)
  638.       rect.width -= 4
  639.       if item[0].is_a?(RPG::Item)
  640.         draw_item_name(item, rect.x, rect.y, enable?(item[0]))
  641.         draw_item_number(rect, item[0])
  642.       else
  643.         draw_input_output(item, rect.x, rect.y)
  644.       end
  645.     end
  646.   end
  647.   #--------------------------------------------------------------------------
  648.   # ● 绘制物品名称
  649.   #     enabled : 有效的标志。false 的时候使用半透明效果绘制
  650.   #--------------------------------------------------------------------------
  651.   def draw_item_name(item, x, y, enabled = true, width = 172)
  652.     return unless item
  653.     text = item[0].name + "*" + String(@cookbook.amount(item[0], item[1]))
  654.     draw_icon(item[0].icon_index, x, y, enabled)
  655.     change_color(normal_color, enable?(item[0]))
  656.     draw_text(x + 24, y, width, line_height, text)
  657.   end
  658.   #--------------------------------------------------------------------------
  659.   # ● 绘制输入和产出
  660.   #--------------------------------------------------------------------------
  661.   def draw_input_output(item, x, y, enabled = false, width = 172)
  662.     return unless item
  663.     if item[1] == 0
  664.       text = "[需要]"
  665.     else
  666.       text = "[可以获得]"
  667.     end
  668.     change_color(normal_color, @cookbook.enough?)
  669.     draw_text(x , y, width, line_height, text)
  670.   end
  671.   #--------------------------------------------------------------------------
  672.   # ● 绘制物品个数
  673.   #--------------------------------------------------------------------------
  674.   def draw_item_number(rect, item)
  675.     draw_text(rect, sprintf("现有%2d", $game_party.item_number(item)), 2)
  676.   end
  677.   #--------------------------------------------------------------------------
  678.   # ● 刷新
  679.   #--------------------------------------------------------------------------
  680.   def refresh
  681.     make_item_list
  682.     create_contents
  683.     draw_all_items
  684.   end
  685.   #--------------------------------------------------------------------------
  686.   # ● 设置食谱的材料
  687.   #--------------------------------------------------------------------------
  688.   def set_item(item)
  689.     @cookbook = item
  690.     refresh
  691.   end
  692. end
复制代码

点评

利用規約: RPGツクールVX Aceの正規の登録者のみご利用になれます。 这句实在太亮眼了,用的时候注意一下吧  发表于 2015-7-6 13:02

坑的进度如上                                                                                                        点击↑
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
719
在线时间
7 小时
注册时间
2015-7-5
帖子
3
4
 楼主| 发表于 2015-7-6 11:48:08 | 只看该作者
VIPArcher 发表于 2015-7-6 11:27
https://rpg.blue/home.php?mod=space&uid=291206&do=blog&id=12220

呃,有点看不太懂呢。
左上角的是自己拥有的物品吗?
那么右上角是什么呢
还有左下角和右下角是什么?0v0

点评

合成材料1,2,3,4,当然你要两个物品合成一个物品或者五个物品合成一个物品也可以,请参考脚本说明  发表于 2015-7-6 12:25
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1240
在线时间
284 小时
注册时间
2015-2-17
帖子
75
5
发表于 2015-10-13 00:54:44 | 只看该作者
為什麼用了之後圖片的CG圖跑不出來
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-16 23:56

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表