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

Project1

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

[已经过期] 物品制造的问题

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
28 小时
注册时间
2015-1-30
帖子
41
跳转到指定楼层
1
发表于 2015-2-10 14:40:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
请问如果我想设个NPC用来合成物品要怎么做啊
需要物品合成的脚本吗   

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

2
发表于 2015-2-10 14:46:43 | 只看该作者

点评

这个网址的是事件  发表于 2015-2-14 23:52
事件  发表于 2015-2-14 23:51
要怎么做啊???  发表于 2015-2-10 16:37
直接使用合成系统的脚本···  发表于 2015-2-10 16:34
如果我想用图书馆物品制造的脚本 把他放在一个NPC上 就像商店处理一样要怎么做呢 应该要写脚本吧 怎么写呢???  发表于 2015-2-10 16:20
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
70
在线时间
1083 小时
注册时间
2013-3-29
帖子
2394
3
发表于 2015-2-14 22:33:55 | 只看该作者
物品制造系统脚本:
  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
复制代码
稍微摸索一下前面的注释应该很容易就会了
在你的那个npc事件里调用这个窗口
还有不会回复

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

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
17 小时
注册时间
2015-2-7
帖子
20
4
发表于 2015-2-15 15:04:23 | 只看该作者
做一个事件就好了。
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
599
在线时间
333 小时
注册时间
2011-11-19
帖子
194
5
发表于 2015-2-15 15:52:21 | 只看该作者
本帖最后由 q854240045 于 2015-2-15 15:54 编辑

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







方法:插入脚本后自己弄个数据库,按照游戏进程和脚本说明的方法添加制作方案。
最后新建NPC事件,编辑事件时翻到第三页最后,点击脚本,然后填入
RUBY 代码复制
  1. SceneManager.call(Scene_Cook)

这样一个制造物品的NPC就完成了,如果不需要菜单有选项直接进入的话就删除原本脚本之中的
RUBY 代码复制
  1. class Window_MenuCommand
  2.   alias_method :s20131217_add_main_commands, :add_main_commands
  3.   def add_main_commands
  4.     s20131217_add_main_commands
  5.     add_command("方技",   :cook,   main_commands_enabled)
  6.   end
  7. end

这样菜单就应该不会显示了

如果说是使用某物品制作的话,那么就是新建一个物品
仅菜单使用不消耗(除非作者您需要,改成消耗)无适用范围
效果是直接在右边公式下方的空栏处双击执行公共事件
公共事件里也就是一个脚本
RUBY 代码复制
  1. SceneManager.call(Scene_Cook)

就可以了

当然,如果NPC有几个又嫌麻烦的话,直接每个NPC执行上面那个公共事件就可以了
另外:添加方案什么的都是脚本,事件里面执行脚本


脚本很好用,用着用着就熟悉了
祝制作过程愉快!

支持《彼岸之光》系列!加油!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-2 14:31

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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