Project1

标题: 【VA】【原创】物品制造系统V0.1 [打印本页]

作者: asd11000    时间: 2012-5-23 23:59
标题: 【VA】【原创】物品制造系统V0.1
这个系统的功能呢。。是用已有的物品生产其他物品。。
本来我是想搞个生活技能——制药
结果发现其实也可以适用于烹饪什么的
最后就成为了生产类生活技能的集合。。武器制造是不行的。。s05s0039酱提醒我了,囧。我太挫了
因为原材料和产出物的数量是不限制的,所以其实也可以用来把某东西拆分成原材料,只要你设置原材料的数量为1,产出物多几个,就好了。。

115网盘范例下载
迅雷快传
补充:度盘下载

RUBY 代码复制
  1. #encoding:utf-8
  2. #==============================================================================
  3. #
  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. #==============================================================================
  22. # ■ Cookbook_Type
  23. #------------------------------------------------------------------------------
  24. #  食谱类型类。
  25. #==============================================================================
  26.  
  27. class Cookbook_Type
  28.   attr_reader :index
  29.   attr_reader :name
  30.   attr_reader :description
  31.   attr_reader :enabled
  32.   #--------------------------------------------------------------------------
  33.   # ● 初始化对象
  34.   #--------------------------------------------------------------------------
  35.   def initialize(index, name, description, enabled = false)
  36.     @index = index
  37.     @name = name
  38.     @description = description
  39.     @enabled = enabled
  40.   end
  41.  
  42.   def enable(en)
  43.     @enabled = en
  44.   end
  45. end
  46.  
  47. #==============================================================================
  48. # ■ Cookbook
  49. #------------------------------------------------------------------------------
  50. #  食谱类。本类在 Game_Task 类的内部使用。
  51. #   食谱属性:食谱序号,食谱名称,食谱类型,食谱介绍,原料,成品
  52. #==============================================================================
  53.  
  54. class Cookbook
  55.   attr_reader :index
  56.   attr_reader :name
  57.   attr_reader :description
  58.   attr_reader :type
  59.   attr_reader :input
  60.   attr_reader :output
  61.   attr_reader :enabled
  62.   #--------------------------------------------------------------------------
  63.   # ● 初始化对象
  64.   #--------------------------------------------------------------------------
  65.   def initialize(index, name, description, type, input, output, enabled = true)
  66.     @index = index
  67.     @name = name
  68.     @description = description
  69.     @type = type
  70.     @input = input
  71.     @output = output
  72.     @enabled = enabled
  73.   end
  74.  
  75.   def enable(en)
  76.     @enabled = en
  77.   end
  78.  
  79.   #--------------------------------------------------------------------------
  80.   # ● 查询列表中的物品
  81.   #--------------------------------------------------------------------------
  82.   def in_list?(item, list)
  83.     list.each do |arr|
  84.       return true if arr[0] == item.id
  85.     end
  86.     return false
  87.   end
  88.   #--------------------------------------------------------------------------
  89.   # ● 查询是否是材料列表中的物品
  90.   #--------------------------------------------------------------------------
  91.   def resource?(item)
  92.     in_list?(item, @input)
  93.   end
  94.   #--------------------------------------------------------------------------
  95.   # ● 查询是否是产出列表中的物品
  96.   #--------------------------------------------------------------------------
  97.   def output?(item)
  98.     in_list?(item, @output)
  99.   end
  100.   #--------------------------------------------------------------------------
  101.   # ● 查询材料需求量
  102.   #--------------------------------------------------------------------------
  103.   def amount(item, i)
  104.     if i == 0
  105.       @input.each do |arr|
  106.         return arr[1] if arr[0] == item.id
  107.       end
  108.     else
  109.       @output.each do |arr|
  110.         return arr[1] if arr[0] == item.id
  111.       end
  112.     end
  113.     return 0
  114.   end
  115.   #--------------------------------------------------------------------------
  116.   # ● 查询材料是否足够
  117.   #--------------------------------------------------------------------------
  118.   def enough?
  119.     input.each do |arr|
  120.       return false if $data_items[arr[0]] && arr[1] > $game_party.item_number($data_items[arr[0]])
  121.     end
  122.     return true
  123.   end
  124.   #--------------------------------------------------------------------------
  125.   # ● 查询某件材料是否足够
  126.   #--------------------------------------------------------------------------
  127.   def item_enough?(item)
  128.     input.each do |arr|
  129.       return false if arr[0] == item.id && arr[1] > $game_party.item_number(item)
  130.     end
  131.     return true
  132.   end
  133. end
  134.  
  135. #==============================================================================
  136. # ■ Game_Party
  137. #==============================================================================
  138.  
  139. class Game_Party < Game_Unit
  140.   #--------------------------------------------------------------------------
  141.   # ● 初始化对象
  142.   #--------------------------------------------------------------------------
  143.   alias old_init initialize
  144.   def initialize
  145.     old_init
  146.     @cook_types = []
  147.     @cookbooks = []
  148.   end
  149.   #--------------------------------------------------------------------------
  150.   # ● 添加新的食谱类型
  151.   #--------------------------------------------------------------------------
  152.   def add_cook_type(n, d, en)
  153.     @cook_types.push(Cookbook_Type.new(@cook_types.size, n, d, en)) if !have_cook_type?(n)
  154.   end
  155.   #--------------------------------------------------------------------------
  156.   # ● 添加新的食谱
  157.   #--------------------------------------------------------------------------
  158.   def add_cookbook(n, d, type, input, output, en)
  159.     if !have_cookbook?(n) && have_cook_type?(type)
  160.       @cookbooks.push(Cookbook.new(@cookbooks.size, n, d, type, input, output, en))
  161.     end
  162.   end
  163.   #--------------------------------------------------------------------------
  164.   # ● 判断名称为n的食谱类型是否存在
  165.   #--------------------------------------------------------------------------
  166.   def have_cook_type?(n)
  167.     @cook_types.each do |x|
  168.       return true if x.name == n
  169.     end
  170.     return false
  171.   end
  172.   #--------------------------------------------------------------------------
  173.   # ● 判断名称为n的食谱是否存在
  174.   #--------------------------------------------------------------------------
  175.   def have_cookbook?(n)
  176.     @cookbooks.each do |x|
  177.       return true if x.name == n
  178.     end
  179.     return false
  180.   end
  181.   #--------------------------------------------------------------------------
  182.   # ● 返回食谱类型列表
  183.   #--------------------------------------------------------------------------
  184.   def cook_types
  185.     return @cook_types
  186.   end
  187.   #--------------------------------------------------------------------------
  188.   # ● 返回食谱列表
  189.   #--------------------------------------------------------------------------
  190.   def cookbooks(type = nil)
  191.     return @cookbooks if type == nil
  192.     arr = []
  193.     @cookbooks.each do |x|
  194.       arr.push(x) if x.type == type
  195.     end
  196.     return arr
  197.   end
  198.   #--------------------------------------------------------------------------
  199.   # ● 更改序号为i的食谱类型的使用状态
  200.   #--------------------------------------------------------------------------
  201.   def set_cook_type(i, en)
  202.     @cook_types[i].enable(en)
  203.   end
  204.   #--------------------------------------------------------------------------
  205.   # ● 更改序号为i的食谱的使用状态
  206.   #--------------------------------------------------------------------------
  207.   def set_cookbook(i, en)
  208.     @cookbooks[i].enable(en)
  209.   end
  210.   #--------------------------------------------------------------------------
  211.   # ● 返回食谱类型数目
  212.   #--------------------------------------------------------------------------
  213.   def cook_types_size
  214.     return @cook_types.size
  215.   end
  216.   #--------------------------------------------------------------------------
  217.   # ● 查询名称为n的食谱类型的描述
  218.   #--------------------------------------------------------------------------
  219.   def cook_type_description(n)
  220.     @cook_types.each do |x|
  221.       return x.description if x.name == n
  222.     end
  223.     return ""
  224.   end
  225. end
  226.  
  227. #==============================================================================
  228. # ■ Scene_Cook
  229. #------------------------------------------------------------------------------
  230. #  烹饪画面
  231. #==============================================================================
  232.  
  233. class Scene_Cook < Scene_ItemBase
  234.   #--------------------------------------------------------------------------
  235.   # ● 开始处理
  236.   #--------------------------------------------------------------------------
  237.   def start
  238.     super
  239.     create_category_window
  240.     create_cookbook_window
  241.     create_description_window
  242.     create_needs_window
  243.   end
  244.   #--------------------------------------------------------------------------
  245.   # ● 生成分类窗口
  246.   #--------------------------------------------------------------------------
  247.   def create_category_window
  248.     @category_window = Window_CookCategory.new
  249.     @category_window.viewport = @viewport
  250.     @category_window.y = 0
  251.     @category_window.set_handler(:ok,     method(:on_category_ok))
  252.     @category_window.set_handler(:cancel, method(:return_scene))
  253.   end
  254.   #--------------------------------------------------------------------------
  255.   # ● 生成食谱窗口
  256.   #--------------------------------------------------------------------------
  257.   def create_cookbook_window
  258.     wy = @category_window.height
  259.     wh = Graphics.height - wy
  260.     @item_window = Window_CookList.new(0, wy, Graphics.width*0.5 , wh)
  261.     @item_window.viewport = @viewport
  262.     @item_window.set_handler(:ok,     method(:on_item_ok))
  263.     @item_window.set_handler(:cancel, method(:on_item_cancel))
  264.     @category_window.item_window = @item_window
  265.   end
  266.   #--------------------------------------------------------------------------
  267.   # ● 生成描述窗口
  268.   #--------------------------------------------------------------------------
  269.   def create_description_window
  270.     wy = @category_window.height
  271.     @help_window = Window_Description.new(Graphics.width*0.5, wy)
  272.     @help_window.viewport = @viewport
  273.     @item_window.help_window = @help_window
  274.     @category_window.help_window = @help_window
  275.   end
  276.     #--------------------------------------------------------------------------
  277.   # ● 生成材料窗口
  278.   #--------------------------------------------------------------------------
  279.   def create_needs_window
  280.     wy = @category_window.height + @help_window.height
  281.     wh = Graphics.height - wy
  282.     @needs_window = Window_NeedsList.new(Graphics.width*0.5, wy, Graphics.width*0.5 , wh)
  283.     #@item_window.viewport = @viewport
  284.     @item_window.needs_window = @needs_window
  285.  
  286.   end
  287.   #--------------------------------------------------------------------------
  288.   # ● 分类“确定”
  289.   #--------------------------------------------------------------------------
  290.   def on_category_ok
  291.     @item_window.activate
  292.     @item_window.select_last
  293.   end
  294.   #--------------------------------------------------------------------------
  295.   # ● 食谱“确定”
  296.   #--------------------------------------------------------------------------
  297.   def on_item_ok
  298.     #$game_party.last_item.object = item
  299.     cook
  300.   end
  301.   #--------------------------------------------------------------------------
  302.   # ● 食谱“取消”
  303.   #--------------------------------------------------------------------------
  304.   def on_item_cancel
  305.     @item_window.unselect
  306.     @category_window.activate
  307.   end
  308.   #--------------------------------------------------------------------------
  309.   # ● 烹饪
  310.   #--------------------------------------------------------------------------
  311.   def cook
  312.     if item.enough?
  313.       play_se_for_item
  314.       use_item
  315.       @needs_window.refresh
  316.       @item_window.refresh
  317.       activate_item_window
  318.     end
  319.   end
  320.   #--------------------------------------------------------------------------
  321.   # ● 播放制作声效
  322.   #--------------------------------------------------------------------------
  323.   def play_se_for_item
  324.     Sound.play_recovery
  325.   end
  326.   #--------------------------------------------------------------------------
  327.   # ● 使用食谱
  328.   #--------------------------------------------------------------------------
  329.   def use_item
  330.     #super
  331.     #@item_window.redraw_current_item
  332.     $data_items.each do |it|
  333.       if it && !it.name.empty?
  334.         $game_party.gain_item(it,-item.amount(it,0)) if item.resource?(it)
  335.         $game_party.gain_item(it,item.amount(it,1)) if item.output?(it)
  336.       end
  337.     end
  338.   end
  339. end
  340.  
  341.  
  342. #==============================================================================
  343. # ■ Window_CookCategory
  344. #------------------------------------------------------------------------------
  345. #  烹饪画面中,显示食谱类型的窗口。
  346. #==============================================================================
  347.  
  348. class Window_CookCategory < Window_HorzCommand
  349.   #--------------------------------------------------------------------------
  350.   # ● 定义实例变量
  351.   #--------------------------------------------------------------------------
  352.   attr_reader   :item_window
  353.   #--------------------------------------------------------------------------
  354.   # ● 初始化对象
  355.   #--------------------------------------------------------------------------
  356.   def initialize
  357.     super(0, 0)
  358.   end
  359.   #--------------------------------------------------------------------------
  360.   # ● 获取窗口的宽度
  361.   #--------------------------------------------------------------------------
  362.   def window_width
  363.     Graphics.width
  364.   end
  365.   #--------------------------------------------------------------------------
  366.   # ● 获取列数
  367.   #--------------------------------------------------------------------------
  368.   def col_max
  369.     return $game_party.cook_types_size
  370.   end
  371.   #--------------------------------------------------------------------------
  372.   # ● 更新画面
  373.   #--------------------------------------------------------------------------
  374.   def update
  375.     super
  376.     #@item_window.category = current_symbol if @item_window
  377.     @item_window.category = current_data[:name] if @item_window
  378.   end
  379.   #--------------------------------------------------------------------------
  380.   # ● 生成食谱类型列表
  381.   #--------------------------------------------------------------------------
  382.   def make_command_list
  383.     $game_party.cook_types.each do |t|
  384.       add_command(t.name, t.index, t.enabled)
  385.     end
  386.   end
  387.   #--------------------------------------------------------------------------
  388.   # ● 设置食谱列表窗口
  389.   #--------------------------------------------------------------------------
  390.   def item_window=(item_window)
  391.     @item_window = item_window
  392.     update
  393.   end
  394.   #--------------------------------------------------------------------------
  395.   # ● 更新帮助内容
  396.   #--------------------------------------------------------------------------
  397.   def update_help
  398.     @help_window.set_text($game_party.cook_type_description(current_data[:name]))
  399.   end
  400. end
  401.  
  402. #==============================================================================
  403. # ■ Window_CookList
  404. #------------------------------------------------------------------------------
  405. #  任务画面中,显示已获得任务的窗口。
  406. #==============================================================================
  407.  
  408. class Window_CookList < Window_Selectable
  409.   #--------------------------------------------------------------------------
  410.   # ● 定义实例变量
  411.   #--------------------------------------------------------------------------
  412.   attr_reader   :needs_window
  413.   #--------------------------------------------------------------------------
  414.   # ● 初始化对象
  415.   #--------------------------------------------------------------------------
  416.   def initialize(x, y, width, height)
  417.     super
  418.     @data = []
  419.     @category = $game_party.cook_types_size > 0 ? $game_party.cook_types[0].name : nil
  420.     refresh
  421.   end
  422.   #--------------------------------------------------------------------------
  423.   # ● 设置分类
  424.   #--------------------------------------------------------------------------
  425.   def category=(category)
  426.     return if @category == category
  427.     @category = category
  428.     refresh
  429.     self.oy = 0
  430.   end
  431.   #--------------------------------------------------------------------------
  432.   # ● 设置材料窗口
  433.   #--------------------------------------------------------------------------
  434.   def needs_window=(needs_window)
  435.     @needs_window = needs_window
  436.     update
  437.   end
  438.   #--------------------------------------------------------------------------
  439.   # ● 获取列数
  440.   #--------------------------------------------------------------------------
  441.   def col_max
  442.     return 1
  443.   end
  444.   #--------------------------------------------------------------------------
  445.   # ● 获取项目数
  446.   #--------------------------------------------------------------------------
  447.   def item_max
  448.     @data ? @data.size : 1
  449.   end
  450.   #--------------------------------------------------------------------------
  451.   # ● 获取食谱
  452.   #--------------------------------------------------------------------------
  453.   def item
  454.     @data && index >= 0 ? @data[index] : nil
  455.   end
  456.   #--------------------------------------------------------------------------
  457.   # ● 获取选择食谱的有效状态
  458.   #--------------------------------------------------------------------------
  459.   def current_item_enabled?
  460.     enable?(@data[index])
  461.   end
  462.   #--------------------------------------------------------------------------
  463.   # ● 查询此食谱是否可用
  464.   #--------------------------------------------------------------------------
  465.   def enable?(item)
  466.     item.enabled && item.enough?
  467.   end
  468.   #--------------------------------------------------------------------------
  469.   # ● 生成食谱列表
  470.   #--------------------------------------------------------------------------
  471.   def make_item_list
  472.     @data = $game_party.cookbooks(@category)
  473.   end
  474.   #--------------------------------------------------------------------------
  475.   # ● 返回上一个选择的位置
  476.   #--------------------------------------------------------------------------
  477.   def select_last
  478.     select(0)
  479.   end
  480.   #--------------------------------------------------------------------------
  481.   # ● 绘制项目
  482.   #--------------------------------------------------------------------------
  483.   def draw_item(index)
  484.     item = @data[index]
  485.     if item
  486.       rect = item_rect(index)
  487.       rect.width -= 4
  488.       draw_item_name(item, rect.x, rect.y, enable?(item))
  489.     end
  490.   end
  491.   #--------------------------------------------------------------------------
  492.   # ● 绘制名称
  493.   #     enabled : 有效的标志。false 的时候使用半透明效果绘制
  494.   #--------------------------------------------------------------------------
  495.   def draw_item_name(item, x, y, enabled = true, width = 300)
  496.     return unless item
  497.     text = item.name
  498.     text += "[材料不足]" if !item.enough?
  499.     change_color(normal_color, enabled)
  500.     draw_text(x, y, width, line_height, text)
  501.   end
  502.   #--------------------------------------------------------------------------
  503.   # ● 更新帮助内容
  504.   #--------------------------------------------------------------------------
  505.   def update_help
  506.     @help_window.set_item(item)
  507.   end
  508.    #--------------------------------------------------------------------------
  509.   # ● 更新食谱清单
  510.   #--------------------------------------------------------------------------
  511.   def update_needslist
  512.     @needs_window.set_item(item)
  513.   end
  514.   #--------------------------------------------------------------------------
  515.   # ● 调用帮助窗口的更新方法
  516.   #--------------------------------------------------------------------------
  517.   def call_update_help
  518.     update_help if @help_window
  519.     update_needslist if @needs_window
  520.   end
  521.   #--------------------------------------------------------------------------
  522.   # ● 刷新
  523.   #--------------------------------------------------------------------------
  524.   def refresh
  525.     make_item_list
  526.     create_contents
  527.     draw_all_items
  528.   end
  529. end
  530. #==============================================================================
  531. # ■ Window_Description
  532. #------------------------------------------------------------------------------
  533. #  显示食谱的说明的窗口
  534. #==============================================================================
  535.  
  536. class Window_Description < Window_Base
  537.   #--------------------------------------------------------------------------
  538.   # ● 初始化对象
  539.   #--------------------------------------------------------------------------
  540.   def initialize(x, y)
  541.     super(x, y, Graphics.width*0.5, fitting_height(4))
  542.   end
  543.   #--------------------------------------------------------------------------
  544.   # ● 设置内容
  545.   #--------------------------------------------------------------------------
  546.   def set_text(text)
  547.     if text != @text
  548.       @text = text
  549.       refresh
  550.     end
  551.   end
  552.   #--------------------------------------------------------------------------
  553.   # ● 清除
  554.   #--------------------------------------------------------------------------
  555.   def clear
  556.     set_text("")
  557.   end
  558.   #--------------------------------------------------------------------------
  559.   # ● 设置食谱的介绍
  560.   #--------------------------------------------------------------------------
  561.   def set_item(item)
  562.     set_text(item ? item.description : "")
  563.   end
  564.   #--------------------------------------------------------------------------
  565.   # ● 刷新
  566.   #--------------------------------------------------------------------------
  567.   def refresh
  568.     contents.clear
  569.     draw_text_ex(4, 0, @text)
  570.   end
  571. end
  572.  
  573. #==============================================================================
  574. # ■ Window_NeedsList
  575. #------------------------------------------------------------------------------
  576. #  烹饪画面中,显示食谱所需材料的窗口。
  577. #==============================================================================
  578.  
  579. class Window_NeedsList < Window_Selectable
  580.   #--------------------------------------------------------------------------
  581.   # ● 初始化对象
  582.   #--------------------------------------------------------------------------
  583.   def initialize(x, y, width, height)
  584.     super
  585.     @category = :item
  586.     @cookbook = nil
  587.     @data = []
  588.     refresh
  589.   end
  590.   #--------------------------------------------------------------------------
  591.   # ● 获取列数
  592.   #--------------------------------------------------------------------------
  593.   def col_max
  594.     return 1
  595.   end
  596.   #--------------------------------------------------------------------------
  597.   # ● 获取项目数
  598.   #--------------------------------------------------------------------------
  599.   def item_max
  600.     @data ? @data.size : 1
  601.   end
  602.   #--------------------------------------------------------------------------
  603.   # ● 获取物品
  604.   #--------------------------------------------------------------------------
  605.   def item
  606.     @data && index >= 0 ? @data[index] : nil
  607.   end
  608.   #--------------------------------------------------------------------------
  609.   # ● 查询列表中是否含有此物品
  610.   #--------------------------------------------------------------------------
  611.   def include?(item)
  612.     item.is_a?(RPG::Item) && !item.key_item?
  613.   end
  614.   #--------------------------------------------------------------------------
  615.   # ● 获取选择食谱的有效状态
  616.   #--------------------------------------------------------------------------
  617.   def current_item_enabled?
  618.     enable?(@data[index])
  619.   end
  620.   #--------------------------------------------------------------------------
  621.   # ● 查询此食谱是否可用
  622.   #--------------------------------------------------------------------------
  623.   def enable?(item)
  624.     $game_party.usable?(item) && @cookbook.item_enough?(item)
  625.   end
  626.   #--------------------------------------------------------------------------
  627.   # ● 生成物品列表
  628.   #--------------------------------------------------------------------------
  629.   def make_item_list
  630.     @data = []
  631.     return if @cookbook== nil
  632.     tmp1 = []
  633.     tmp2 = []
  634.     $data_items.each do |item|
  635.       tmp1.push([item, 0]) if item && !item.name.empty? && @cookbook.resource?(item)
  636.       tmp2.push([item, 1]) if item && !item.name.empty? && @cookbook.output?(item)
  637.     end
  638.     if tmp1.size > 0 && tmp2.size > 0
  639.       @data.push(["需要材料:",0])
  640.       @data += tmp1
  641.       @data.push(["可以获得:",1])
  642.       @data += tmp2
  643.     end
  644.   end
  645.   #--------------------------------------------------------------------------
  646.   # ● 返回上一个选择的位置
  647.   #--------------------------------------------------------------------------
  648.   def select_last
  649.     select(0)
  650.   end
  651.   #--------------------------------------------------------------------------
  652.   # ● 绘制项目
  653.   #--------------------------------------------------------------------------
  654.   def draw_item(index)
  655.     item = @data[index]
  656.     if item
  657.       rect = item_rect(index)
  658.       rect.width -= 4
  659.       if item[0].is_a?(RPG::Item)
  660.         draw_item_name(item, rect.x, rect.y, enable?(item[0]))
  661.         draw_item_number(rect, item[0])
  662.       else
  663.         draw_input_output(item, rect.x, rect.y)
  664.       end
  665.     end
  666.   end
  667.   #--------------------------------------------------------------------------
  668.   # ● 绘制物品名称
  669.   #     enabled : 有效的标志。false 的时候使用半透明效果绘制
  670.   #--------------------------------------------------------------------------
  671.   def draw_item_name(item, x, y, enabled = true, width = 172)
  672.     return unless item
  673.     text = item[0].name + "*" + String(@cookbook.amount(item[0], item[1]))
  674.     draw_icon(item[0].icon_index, x, y, enabled)
  675.     change_color(normal_color, enable?(item[0]))
  676.     draw_text(x + 24, y, width, line_height, text)
  677.   end
  678.   #--------------------------------------------------------------------------
  679.   # ● 绘制输入和产出
  680.   #--------------------------------------------------------------------------
  681.   def draw_input_output(item, x, y, enabled = false, width = 172)
  682.     return unless item
  683.     if item[1] == 0
  684.       text = "[需要]"
  685.     else
  686.       text = "[可以获得]"
  687.     end
  688.     change_color(normal_color, @cookbook.enough?)
  689.     draw_text(x , y, width, line_height, text)
  690.   end
  691.   #--------------------------------------------------------------------------
  692.   # ● 绘制物品个数
  693.   #--------------------------------------------------------------------------
  694.   def draw_item_number(rect, item)
  695.     draw_text(rect, sprintf("现有%2d", $game_party.item_number(item)), 2)
  696.   end
  697.   #--------------------------------------------------------------------------
  698.   # ● 刷新
  699.   #--------------------------------------------------------------------------
  700.   def refresh
  701.     make_item_list
  702.     create_contents
  703.     draw_all_items
  704.   end
  705.   #--------------------------------------------------------------------------
  706.   # ● 设置食谱的材料
  707.   #--------------------------------------------------------------------------
  708.   def set_item(item)
  709.     @cookbook = item
  710.     refresh
  711.   end
  712. end




每添加一个制造的类型,最上面的类别菜单就会多一项。
添加类型的方法是:$game_party.add_cook_type(类别名称,类别介绍, 类别状态-默认false)
举例:$game_party.add_cook_type("制药","调配药品", true)

添加配方的方法:$game_party.add_cookbook(配方名称, 配方介绍, 配方类别名称,材料的二维数组,产出物的二维数组,true)
举例:$game_party.add_cookbook("初级补血药水配方", "用赤血草制作初级补血药水", "制药",[[18,2],[3,4],[2,5]],[[1,1],[44,5]],true)
二维数组里面,每一个[m,n]里的m是物品id,n是需要物品的数量。理论上来说加几个不同物品都是没问题的。但是显示材料的窗口会显示不下。。

调用窗口的方法:SceneManager.call(Scene_Cook)


预计有空的时候要加上生活技能的熟练度和等级。。  
作者: 火星·奈    时间: 2012-5-24 06:51
好东西。
作者: 隐藏主角    时间: 2012-5-24 08:18
期待加上熟练度和等级出来,就先收下这个了。
作者: wyaoooo    时间: 2012-5-24 09:51
是个好东西啊!楼主继续加油啊!
作者: 墟源    时间: 2012-5-24 11:01
楼主最近发了很多好东西呢。相当支持啊
作者: Mic_洛洛    时间: 2012-5-24 12:55
本帖最后由 Mic_洛洛 于 2012-5-24 12:56 编辑

话说这脚本还是100%成功的说?
可以参考图书馆里的强化系统脚本,把成功率写进去那就更真实,更好了!
期待熟练度和等级的更新+1



作者: xuzhengchi    时间: 2012-5-24 17:38
脚本无法复制是什么情况呢?
作者: 天使喝可乐    时间: 2012-5-24 17:54
挺给力的
就是  最好把“[材料不足]”移到“需要”那栏  因为标题太长的话 “[材料不足]”加上会超出那栏吧……  标题就用透明来表示材料不足就够了
另外 说明是加在事件脚本里?如果说明过长怎么办?
最后 如果有几率就好了
作者: acn00269    时间: 2012-5-24 17:59
xuzhengchi 发表于 2012-5-24 17:38
脚本无法复制是什么情况呢?

可以复制 点脚本代码右上角COPY会弹出提示信息:点此复制到剪贴板 再点击一下就复制成功了
作者: 双黄连    时间: 2012-5-24 18:31
如果能不废存档就好了,期待改进!
作者: 冲啊小笼包    时间: 2012-5-24 19:47
收藏不解释,好东西一只!
作者: 菜鸟飞呀飞    时间: 2012-5-24 20:50
提示: 作者被禁止或删除 内容自动屏蔽
作者: 天使喝可乐    时间: 2012-5-25 10:50
本帖最后由 天使喝可乐 于 2012-5-25 10:50 编辑

设定控对说明很青睐的 而且说明确实很重要
说明过长的问题 比如,可以像XP合成脚本一样 把制造公式直接写进脚本里 而不是事件脚本  这样统一管理也方便
或者 设计一个分行合并的认证方法
比如
啊封阿尔法飞啊飞啊飞,
发哦哦法尔法尔法尔。
显示出来就是:啊封阿尔法飞啊飞啊飞发哦哦法尔法尔法尔。

作者: asd11000    时间: 2012-5-25 16:10
天使喝可乐 发表于 2012-5-25 10:50
设定控对说明很青睐的 而且说明确实很重要
说明过长的问题 比如,可以像XP合成脚本一样 把制造公式直接写进 ...

恩。。目前我还不会。。我写过的脚本已经全部都发上论坛来了。。
作者: shalicheng2    时间: 2012-5-25 17:08
好物,如果能加个在设定物品里随机的功能更好,比如白马+男人=王子Or唐僧,唐僧分解可能分出马肉或者唐僧肉
作者: 7456zll    时间: 2012-5-25 17:46
楼主你地好厉害.....
作者: poiuy12348609    时间: 2012-5-25 17:57
非常好的脚本
但是我对你的窗口比较有兴趣
作者: 7456zll    时间: 2012-5-25 18:40
同上面那位大神一样啊.....无法复制
作者: ♂雨    时间: 2012-5-25 20:04
嗯   很不错的一个VA脚本!
作者: s05s0039    时间: 2012-5-25 22:17
請問如何造武器?因為武器跟物品。。。。。不同耶= =
無法取得武器庫的id
作者: 虚幻的恋爱    时间: 2012-5-26 20:02
请楼主发一个范例,我怎么copy都不行,不过楼主的东西好啊啊啊啊啊啊啊啊啊
作者: chd114    时间: 2012-5-27 11:04
这个制作和合成差不多啊


‘‘──chd114于2012-6-1 17:41补充以下内容:

实现什么功能就是什么功能···
’’
作者: 562305484    时间: 2012-6-9 11:35
本人看了范例还是没明白怎么使用,都是使用脚本的功能么,添加配方类型的是在备注还是在脚本里改啊,


‘‘──562305484于2012-6-9 11:42补充以下内容:

窗口调用时用脚本调用么
’’
作者: asd11000    时间: 2012-6-9 17:24
本帖最后由 asd11000 于 2012-6-9 17:24 编辑
562305484 发表于 2012-6-9 11:35
本人看了范例还是没明白怎么使用,都是使用脚本的功能么,添加配方类型的是在备注还是在脚本里改啊,


事件里有一个添加脚本的,就在那里写。你看范例里的事件定义
作者: 562305484    时间: 2012-6-9 17:52
asd11000 发表于 2012-6-9 17:24
事件里有一个添加脚本的,就在那里写。你看范例里的事件定义

怎么调用菜单,我用脚本报错啊
作者: asd11000    时间: 2012-6-10 17:19
562305484 发表于 2012-6-9 17:52
怎么调用菜单,我用脚本报错啊

范例报错还是怎么?
你把错误发上来啊
作者: 562305484    时间: 2012-6-10 19:57
asd11000 发表于 2012-6-10 17:19
范例报错还是怎么?
你把错误发上来啊

不是范例是我自己的工程等会发图
作者: 7456zll    时间: 2012-6-11 18:22
好像不需要密码啊.....


‘‘──7456zll于2012-6-11 18:41补充以下内容:

哎呀不好意思...同时看着两个贴搞混了
’’
作者: 蝶恋西风    时间: 2012-6-11 21:08
好东西 LZ加油
作者: soulbreaker96    时间: 2012-6-25 22:05
它说,
stack level too deep
肿么办
作者: 魔潘安    时间: 2012-6-26 22:52
請務必加強到能夠製作武器房具>"<~
麻煩您了~由衷感謝!!
作者: a2219119    时间: 2012-7-6 01:49
LZ添加在哪行?我不懂,教教我,急需要!谢谢!
作者: a2219119    时间: 2012-7-6 01:52
或者QQ联系教我, QQ:596275553.(请不要透露给人家)
作者: UdlDruid    时间: 2012-7-7 09:42
直接黑了不久行了,加什么“材料不足”~

嘛。。。

那窗口还挺好看的呢~
作者: 荷包PIG蛋    时间: 2012-7-12 11:18
这帖子再不顶又要沉了。。。。
楼主的成功率制作的如何了???
真的很期待。。。
作者: m_m    时间: 2012-7-21 06:16
学习了...拿去研究...
作者: 快快の飘过    时间: 2012-7-21 21:55
我想问这脚本是不是不能和其他脚本一起用啊?
表示我用这脚本和其他脚本一起用就各种报错。。。
作者: Xnan    时间: 2012-7-24 10:27
是想你的窗口皮肤。。。。
作者: asd11000    时间: 2012-7-25 10:28
快快の飘过 发表于 2012-7-21 21:55
我想问这脚本是不是不能和其他脚本一起用啊?
表示我用这脚本和其他脚本一起用就各种报错。。。 ...

你可以看看两个脚本里面的class有没有名字一样的,如果有的话,看看这两个class里有没有def 名字一样的,有的话就得把两个def合起来,不然会出问题。
作者: 黄威华    时间: 2012-7-25 11:15
我用的时候为什么140行发生了错误啊
作者: jackp1212    时间: 2012-7-31 09:37
好脚本。谢谢楼主,淡淡的问下,怎么调用制造窗口啊。Scene_Menu里面也添加了    SceneManager.call(Scene_Cook)  就死调用不了窗口,求赐教{:4_149:}{:4_149:}{:4_149:}
作者: 咚小黑    时间: 2012-7-31 19:23
强大的功能,就是操作比较麻烦,改成备注更好
作者: 1035041075    时间: 2012-8-2 15:34
好脚本,我喜欢
作者: 1035041075    时间: 2012-8-2 17:08
5555555 刚刚接触 RPG MAKER
不会用脚本!
作者: 亡羊补刀    时间: 2012-8-3 09:42
115盘要求手机绑定,下载不能鸟~~~
作者: ♂雨    时间: 2012-8-3 12:22
LZ,不能下载喔
作者: 1035041075    时间: 2012-8-3 15:32
范例怎么下载呀
作者: 1035041075    时间: 2012-8-3 16:18
巨伤心、怎么下范例,我不会用呀。
作者: asd11000    时间: 2012-8-14 22:14
本帖最后由 asd11000 于 2012-8-14 22:29 编辑

@♂雨
@1035041075
下载地址更新到了I ASK。
等待审核ING
115的加了好友就能下载了
作者: 公牛大冒险    时间: 2012-8-14 23:05
楼主啊  技能熟练度和等级研发出来了没- -在等这个呢……
作者: 1243852    时间: 2012-8-15 00:23
115关了分享很久了,请楼主换一下吧,能用迅雷快传么?
作者: asd11000    时间: 2012-8-19 22:45
1243852 发表于 2012-8-15 00:23
115关了分享很久了,请楼主换一下吧,能用迅雷快传么?

http://kuai.xunlei.com/d/JVYWNSMJXRVF
作者: viva0072008    时间: 2012-8-19 23:58
我是脚本盲,可不可以请LZ加个判定,就是产出物达到该物品的所持数上限的时候,不可以合成。因为我用了单个物品所持数量限制这个剧本,所以问题尤为特出,当达到所持上限的时候还是可以合成,而且没有提示,当然合出来的东西也拿不着,就是单纯消耗材料……
作者: 小驴生制作组    时间: 2012-8-21 12:37

????????
作者: 200928326    时间: 2012-8-22 20:25
问一下,这个脚本适用于XP的么 = =
作者: asd11000    时间: 2012-9-8 02:24
200928326 发表于 2012-8-22 20:25
问一下,这个脚本适用于XP的么 = =

不适用。VA的。


‘‘──asd11000于2012-9-8 02:24补充以下内容:

谢谢提醒。。这算个bug
’’
作者: 1032103505    时间: 2012-10-9 10:07
本帖最后由 1032103505 于 2012-10-9 17:07 编辑

很可惜,与我的脚本整合包冲突{我以@狱冥幻翼整合的rmva脚本整合(共整合34个脚本)为基础增加其他脚本以插件脚本开始一共80个}我使用锻造脚本
作者: 夕阳幻光    时间: 2012-12-5 11:43
求楼主范例发邮箱,下不了,[email protected]楼主大神
作者: 夕阳幻光    时间: 2012-12-8 16:05
请问这个边框是怎么弄得啊
作者: duyingit    时间: 2013-2-3 00:47
{:2_270:}楼主,文件错误啊,打不开,还有就是,为什么我复制粘贴脚本之后测试游戏却打不开了??
作者: 我是老A    时间: 2013-2-15 16:43
请教一下,什么是“二维数组”?
作者: 450403113    时间: 2013-3-1 19:13
好东西,发现图书馆里的东西都是好东西。
作者: tomy30f    时间: 2013-3-10 21:51
加油!!!
期待大大你會寫到加生活的熟練度


作者: Baby丶小CC    时间: 2013-5-11 09:37
坑求什么叫物品的ID
代码在(=@__@=)哪里?
作者: 抖S的二二    时间: 2013-7-22 06:39
  期待加入成功率,  现在成功率都是100%.
作者: 29162535ck    时间: 2013-7-23 20:12
添加類型和配方是要加在腳本中的**阿?我接觸腳本沒多久,有哪位大大可以交一下的?
作者: guojunling400    时间: 2014-5-6 10:21
看起来好厉害啊
作者: 夜貓學長    时间: 2015-1-19 20:09
樓主這個怎麼用不到  難道是因爲遊戲標題麼

QQ图片20150119200646.jpg (20.65 KB, 下载次数: 17)

QQ图片20150119200646.jpg

作者: 夜貓學長    时间: 2015-1-20 09:29
@david_ng223  實在是看不懂  
作者: david_ng223    时间: 2015-1-20 09:53
提示: 作者被禁止或删除 内容自动屏蔽
作者: 夜貓學長    时间: 2015-1-20 12:07
david_ng223 发表于 2015-1-20 09:53
就是把第36行的改成而已

第66行也要改,同上

按照你說的修改了 接着出現了圖片上的這個  @david_ng223

QQ图片20150120120327.jpg (11.77 KB, 下载次数: 17)

QQ图片20150120120327.jpg

作者: 1193489221    时间: 2015-4-25 11:47
挺实用的 支持楼主 发了很多好东西呢
作者: xiaorang    时间: 2015-5-1 10:47
用这个系统,貌似可以制作真实的化学实验呢?
作者: 792708308    时间: 2015-6-6 05:13
请问为什么我显示stack level too deep
作者: 1243852    时间: 2015-6-8 16:06



这算是什么错误?

这是我的脚本文件:
脚本.zip (228.08 KB, 下载次数: 67)
作者: 450403113    时间: 2015-7-23 13:51
1243852 发表于 2015-6-8 16:06
这算是什么错误?

这是我的脚本文件:

这个脚本与任务系统脚本是冲突的,把任务的删掉就可以解决。
作者: 450403113    时间: 2015-7-26 13:29
1243852 发表于 2015-6-8 16:06
这算是什么错误?

这是我的脚本文件:

用这个任务脚本,不会冲突 VA任务系统.rar (1.43 MB, 下载次数: 100)
作者: K先生的猫    时间: 2015-7-28 12:28
450403113 发表于 2015-7-26 13:29
用这个任务脚本,不会冲突

不好意思,借楼问一下,这个任务脚本,要怎么添加任务啊?
作者: 暗影邪神    时间: 2016-4-2 23:33
按照说明设置了一下,一打开“制作”就会立即崩溃,然后就说多少行出现了什么问题,可惜看不懂!是什么问题呢?
作者: 咖啡狐.麟音    时间: 2016-5-9 19:04
已下载,感谢分享。
作者: a422740205    时间: 2016-5-17 18:05
这个怎么删除添加错的配方?
作者: h2195458940    时间: 2016-8-7 18:26
我看到了分解系统进来了,额
可以像DNF那样把装备分解成晶块什么的吗??、
作者: xxyzx    时间: 2016-8-9 17:28
求助QAQ
复制范例里的脚本进去了,打开菜单尝试进入制造界面就变成这个样子了……

360反馈意见截图16171117108148128.png (9.85 KB, 下载次数: 35)

360反馈意见截图16171117108148128.png

作者: 若得若失    时间: 2016-10-6 00:13
s05s0039 发表于 2012-5-25 22:17
請問如何造武器?因為武器跟物品。。。。。不同耶= =
無法取得武器庫的id ...

哎呀,要是能做成武器或者护具就太好了,可以变成锻造系统了。
正缺这个脚本,请问有制作装备的功能了吗?
作者: brackwind    时间: 2016-12-21 22:51
請問如果配方多到超過視窗大小後,剩下的配方會不能顯示還是只要往下移動就能看到了?

另外能限制配方的數量嗎?例如每種配方只能持有一個
作者: brackwind    时间: 2016-12-23 22:00
我要執行時出現問題訊息
說這個腳本的36行發生SyntaxError
unexpected tIDENTIFIER,expection ']'
請問這要怎麼解決?

作者: asdxjp233    时间: 2016-12-23 22:47
连贴了你...
作者: brackwind    时间: 2017-1-2 11:07
您好,現在使用腳本時換成別的問題發生
我在菜單裡選擇製造時出現錯誤訊息
好像是跟腳本Window_Selectable的這部分有關:
# ● 获取项目的宽度
  #--------------------------------------------------------------------------
  def item_width
    (width - standard_padding * 2 + spacing) / col_max - spacing     ←有問題的部分
  end

請問該怎麼解決?
作者: brackwind    时间: 2017-3-4 21:45
我把腳本套入自己製作的遊戲,結果在執行想測試這個功能時出現錯誤訊息
說Window_Selectable第50行有錯誤什麼的

def item_width
    (width - standard_padding * 2 + spacing) / col_max - spacing   ←就是這一行
  end

請問這要怎麼解決?
作者: mononobe123    时间: 2019-2-23 17:16
怎麽用……脚本是寫在哪的?
【$game_party.add_cook_type("制药","调配药品", true)】的脚本寫在哪
作者: 213blackcat    时间: 2020-2-25 14:09
谢谢楼主!太有用啦!
作者: samnle    时间: 2021-3-21 02:43
这个只要一个合成,删到哪里?

作者: 和啊啊啊    时间: 2022-1-13 21:02
大佬 我找到了 好像是和你自己上一个 任务系统 冲突了




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