查看: 2437|回复: 2

[已经解决] 求大神整合一下这两个脚本。

[复制链接]
梦石
0
星屑
50
在线时间
125 小时
注册时间
2006-7-19
回帖
225
发表于 2016-1-17 20:44:40 | 显示全部楼层 |阅读模式

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

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

×
第一个是 @韩云溪  大大的 任务系统 ,由@zyyczp   工藤由纪  进行过改进。
脚本代码如下:
[pre lang="ruby"]=begin
领取任务:$game_party.get_task(任意数字,任务名称,任务描述)
完成任务:$game_party.finish_task(领取任务时设定的数字)
对已有任务追加说明:$game_party.add_task(任务编号,任务追加描述)

如:
前面有事件$game_party.get_task(1,"测试","只是测试")

此时任务1的说明为

>只是测试

后面完成任务的脚本就是$game_party.finish_task(1)

追加说明$game_party.add_task(1,"真的只是测试哦")

此时任务1的说明为:
>只是测试
>真的只是测试哦

召唤任务界面:SceneManager.call(Scene_Task)

该脚本来自66rpg,发布者:韩云溪
改进:工藤由纪(论坛ID:zyyczp)
=end

#===========================================================
#●任务系统
#===========================================================
class Task
  attr_reader :desc
  attr_reader :finished
  def initialize(origin_name,desc)
    @origin_name = origin_name
    @desc = desc
    @finished = false
  end
  def name
    if @finished
      return @origin_name + "(完成)"
    else
      return @origin_name
    end
  end
  def desc=(desc)
    @desc = desc
  end
  
  def finish
    @finished = true
  end
   
end

class Game_Party < Game_Unit
  alias old_init initialize
  def initialize
    old_init
    @tasks = {}
  end
  def add_task(i,desc)
    @tasks.desc = @tasks.desc + "\n" + desc
  end
  def get_task(i,name,desc)
    @tasks=Task.new(name,desc)
  end
  def have_task?(i)
    @tasks != nil
  end
  def finish_task(i)
    @tasks.finish if have_task?(i)
  end
  def unfinished_tasks
    n = []
    for i in @tasks.values
      next if i.finished
      n.push(i)
    end
    return n
  end
  def finished_tasks
    n = []
    for i in @tasks.values
      next unless i.finished
      n.push(i)
    end
    return n
  end
end

class Window_Task_Type < Window_HorzCommand
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0)
    activate
  end
  def window_width
    return Graphics.width
  end
  def col_max
    return 3
  end
  #--------------------------------------------------------------------------
  # ● コマンドリストの作成
  #--------------------------------------------------------------------------
  def make_command_list
    add_command("未完成任务",  :unfinished_task)
    add_command("已完成任务", :finished_task)
    add_command("取消", :cancel)
  end
end

class Window_TaskLeft < Window_Selectable
  attr_reader :finished
  def initialize
    super(0,48,160,Graphics.height - 48)
    create_contents
    @finished = false
    @index = 0
    refresh
    deactivate
  end
  def set_finish(finish)
    @finished = finish
    set_item_max
  end
  def item_max
    return @item_max != nil ? @item_max : 0
  end
  def set_item_max
    if @finished
      @item_max = $game_party.finished_tasks.size
    else
      @item_max = $game_party.unfinished_tasks.size
    end
  end

  def refresh
    set_item_max
    super
  end
  #--------------------------------------------------------------------------
  # ● 項目の描画
  #--------------------------------------------------------------------------
  def draw_item(index)
    text = ""
    unless @finished
      if $game_party.unfinished_tasks[index] != nil
        text = $game_party.unfinished_tasks[index].name
      end
    else
      if $game_party.finished_tasks[index] != nil
        text = $game_party.finished_tasks[index].name  
      end
    end
    draw_text(item_rect_for_text(index), text)
  end

end

class Window_TaskRight < Window_Base
  attr_reader :left_index
  def initialize
    super(160,48,Graphics.width - 160,Graphics.height - 48)
    create_contents
    @left_index = 0
    @finished = false
    refresh
  end
  def set_index(i)
    @left_index = i
    refresh
  end
  def set_finish(i)
    @finished = i
  end
  
  def refresh
    contents.clear
    draw_desc
  end
  def draw_desc
    if @finished
      if $game_party.finished_tasks[@left_index] != nil
        draw_text_ex(0,0,$game_party.finished_tasks[@left_index].desc)
      end
    else
      if $game_party.unfinished_tasks[@left_index] != nil
        draw_text_ex(0,0,$game_party.unfinished_tasks[@left_index].desc)
      end
    end
  end
  
end

class Scene_Task < Scene_Base
  def start
    super
    create_task_type_window
    create_left_window
    create_right_window
  end
  def update
    super
    if @left_window.active
      if Input.trigger?(:B)
        @left_window.deactivate
        @task_type_window.activate
      end
      if Input.trigger?(:UP) || Input.trigger?(:DOWN)
        @right_window.set_finish(@left_window.finished)
        @right_window.set_index(@left_window.index)
      end
    end
  end
  
  def terminate
    super
  end
  def create_task_type_window
    @task_type_window = Window_Task_Type.new
    @task_type_window.set_handler(:unfinished_task,method(:view_unfinished_task))
    @task_type_window.set_handler(:finished_task,method(:view_finished_task))
    @task_type_window.set_handler(:cancel,method(:return_scene))
  end
  def create_left_window
    @left_window = Window_TaskLeft.new
    @left_window.set_finish(false)
    @left_window.refresh
  end
  def create_right_window
    @right_window = Window_TaskRight.new
    @right_window.refresh
  end
  def view_unfinished_task
    @left_window.set_finish(false)
    @left_window.refresh
    @left_window.activate
    @task_type_window.deactivate
    @right_window.set_finish(false)
    @right_window.set_index(@left_window.index)
  end
  def view_finished_task
    @left_window.set_finish(true)
    @left_window.refresh
    @left_window.activate
    @task_type_window.deactivate
    @right_window.set_finish(true)
    @right_window.set_index(@left_window.index)
  end
  
end[/pre]

第二个是由 @utf-8  译成的, 物品制造的 脚本,就是可以将一种或者多种 物品 合成另一种物品。
脚本代码如下:
[pre lang="ruby"]#encoding:utf-8
#==============================================================================
# 本腳本來自www.66RPG.com,使用和轉載請保留此信息
#==============================================================================
#==============================================================================
#
#每添加一个制造的类型,最上面的类别菜单就会多一项。
#
#添加类型的方法是:
#$game_party.add_cook_type(类别名称,类别介绍, 类别状态-默认false)
#
#举例:
#$game_party.add_cook_type("制药","调配药品", true)
#
#添加配方的方法:
#$game_party.add_cookbook(配方名称, 配方介绍, 配方类别名称,材料的二维数组,产出物的二维数组,配方状态)
#
#举例:
#$game_party.add_cookbook("初级补血药水", "制作初级补血药水", "制药",[[18,2]],[[1,1]],true)
#
#调用窗口的方法:SceneManager.call(Scene_Cook)
#
#
#==============================================================================

#==============================================================================
# ■ Cookbook_Type
#------------------------------------------------------------------------------
#  食谱类型类。
#==============================================================================

class Cookbook_Type
  attr_reader :index
  attr_reader :name
  attr_reader :description
  attr_reader :enabled
  #--------------------------------------------------------------------------
  # ● 初始化对象
  #--------------------------------------------------------------------------
  def initialize(index, name, description, enabled = false)
    @index = index
    @name = name
    @description = description
    @enabled = enabled
  end
  
  def enable(en)
    @enabled = en
  end
end

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

class Cookbook
  attr_reader :index
  attr_reader :name
  attr_reader :description
  attr_reader :type
  attr_reader :input
  attr_reader :output
  attr_reader :enabled
  #--------------------------------------------------------------------------
  # ● 初始化对象
  #--------------------------------------------------------------------------
  def initialize(index, name, description, type, input, output, enabled = true)
    @index = index
    @name = name
    @description = description
    @type = type
    @input = input
    @output = output
    @enabled = enabled
  end
  
  def enable(en)
    @enabled = en
  end
  
  #--------------------------------------------------------------------------
  # ● 查询列表中的物品
  #--------------------------------------------------------------------------
  def in_list?(item, list)
    list.each do |arr|
      return true if arr[0] == item.id
    end
    return false
  end
  #--------------------------------------------------------------------------
  # ● 查询是否是材料列表中的物品
  #--------------------------------------------------------------------------
  def resource?(item)
    in_list?(item, @input)
  end
  #--------------------------------------------------------------------------
  # ● 查询是否是产出列表中的物品
  #--------------------------------------------------------------------------
  def output?(item)
    in_list?(item, @output)
  end
  #--------------------------------------------------------------------------
  # ● 查询材料需求量
  #--------------------------------------------------------------------------
  def amount(item, i)
    if i == 0
      @input.each do |arr|
        return arr[1] if arr[0] == item.id
      end
    else
      @output.each do |arr|
        return arr[1] if arr[0] == item.id
      end
    end
    return 0
  end
  #--------------------------------------------------------------------------
  # ● 查询材料是否足够
  #--------------------------------------------------------------------------
  def enough?
    input.each do |arr|
      return false if $data_items[arr[0]] && arr[1] > $game_party.item_number($data_items[arr[0]])
    end
    return true
  end
  #--------------------------------------------------------------------------
  # ● 查询某件材料是否足够
  #--------------------------------------------------------------------------
  def item_enough?(item)
    input.each do |arr|
      return false if arr[0] == item.id && arr[1] > $game_party.item_number(item)
    end
    return true
  end
end

#==============================================================================
# ■ Game_Party
#==============================================================================

class Game_Party < Game_Unit
  #--------------------------------------------------------------------------
  # ● 初始化对象
  #--------------------------------------------------------------------------
  alias old_init initialize
  def initialize
    old_init
    @cook_types = []
    @cookbooks = []
  end
  #--------------------------------------------------------------------------
  # ● 添加新的制造类型
  #--------------------------------------------------------------------------
  def add_cook_type(n, d, en)
    @cook_types.push(Cookbook_Type.new(@cook_types.size, n, d, en)) if !have_cook_type?(n)
  end
  #--------------------------------------------------------------------------
  # ● 添加新的食谱
  #--------------------------------------------------------------------------
  def add_cookbook(n, d, type, input, output, en)
    if !have_cookbook?(n) && have_cook_type?(type)
      @cookbooks.push(Cookbook.new(@cookbooks.size, n, d, type, input, output, en))
    end
  end
  #--------------------------------------------------------------------------
  # ● 判断名称为n的制造类型是否存在
  #--------------------------------------------------------------------------
  def have_cook_type?(n)
    @cook_types.each do |x|
      return true if x.name == n
    end
    return false
  end
  #--------------------------------------------------------------------------
  # ● 判断名称为n的食谱是否存在
  #--------------------------------------------------------------------------
  def have_cookbook?(n)
    @cookbooks.each do |x|
      return true if x.name == n
    end
    return false
  end
  #--------------------------------------------------------------------------
  # ● 返回制造类型列表
  #--------------------------------------------------------------------------
  def cook_types
    return @cook_types
  end
  #--------------------------------------------------------------------------
  # ● 返回食谱列表
  #--------------------------------------------------------------------------
  def cookbooks(type = nil)
    return @cookbooks if type == nil
    arr = []
    @cookbooks.each do |x|
      arr.push(x) if x.type == type
    end
    return arr
  end
  #--------------------------------------------------------------------------
  # ● 更改序号为i的制造类型的使用状态
  #--------------------------------------------------------------------------
  def set_cook_type(i, en)
    @cook_types.enable(en)
  end
  #--------------------------------------------------------------------------
  # ● 更改序号为i的食谱的使用状态
  #--------------------------------------------------------------------------
  def set_cookbook(i, en)
    @cookbooks.enable(en)
  end
  #--------------------------------------------------------------------------
  # ● 返回制造类型数目
  #--------------------------------------------------------------------------
  def cook_types_size
    return @cook_types.size
  end
  #--------------------------------------------------------------------------
  # ● 查询名称为n的制造类型的描述
  #--------------------------------------------------------------------------
  def cook_type_description(n)
    @cook_types.each do |x|
      return x.description if x.name == n
    end
    return ""
  end
end

#==============================================================================
# ■ Scene_Cook
#------------------------------------------------------------------------------
#  制造画面
#==============================================================================

class Scene_Cook < Scene_ItemBase
  #--------------------------------------------------------------------------
  # ● 开始处理
  #--------------------------------------------------------------------------
  def start
    super
    create_category_window
    create_cookbook_window
    create_description_window
    create_needs_window
  end
  #--------------------------------------------------------------------------
  # ● 生成分类窗口
  #--------------------------------------------------------------------------
  def create_category_window
    @category_window = Window_CookCategory.new
    @category_window.viewport = @viewport
    @category_window.y = 0
    @category_window.set_handler(:ok,     method(:on_category_ok))
    @category_window.set_handler(:cancel, method(:return_scene))
  end
  #--------------------------------------------------------------------------
  # ● 生成食谱窗口
  #--------------------------------------------------------------------------
  def create_cookbook_window
    wy = @category_window.height
    wh = Graphics.height - wy
    @item_window = Window_CookList.new(0, wy, Graphics.width*0.5 , wh)
    @item_window.viewport = @viewport
    @item_window.set_handler(:ok,     method(:on_item_ok))
    @item_window.set_handler(:cancel, method(:on_item_cancel))
    @category_window.item_window = @item_window
  end
  #--------------------------------------------------------------------------
  # ● 生成描述窗口
  #--------------------------------------------------------------------------
  def create_description_window
    wy = @category_window.height
    @help_window = Window_Description.new(Graphics.width*0.5, wy)
    @help_window.viewport = @viewport
    @item_window.help_window = @help_window
    @category_window.help_window = @help_window
  end
    #--------------------------------------------------------------------------
  # ● 生成材料窗口
  #--------------------------------------------------------------------------
  def create_needs_window
    wy = @category_window.height + @help_window.height
    wh = Graphics.height - wy
    @needs_window = Window_NeedsList.new(Graphics.width*0.5, wy, Graphics.width*0.5 , wh)
    #@item_window.viewport = @viewport
    @item_window.needs_window = @needs_window
   
  end
  #--------------------------------------------------------------------------
  # ● 分类“确定”
  #--------------------------------------------------------------------------
  def on_category_ok
    @item_window.activate
    @item_window.select_last
  end
  #--------------------------------------------------------------------------
  # ● 食谱“确定”
  #--------------------------------------------------------------------------
  def on_item_ok
    #$game_party.last_item.object = item
    cook
  end
  #--------------------------------------------------------------------------
  # ● 食谱“取消”
  #--------------------------------------------------------------------------
  def on_item_cancel
    @item_window.unselect
    @category_window.activate
  end
  #--------------------------------------------------------------------------
  # ● 制造
  #--------------------------------------------------------------------------
  def cook
    if item.enough?
      play_se_for_item
      use_item
      @needs_window.refresh
      @item_window.refresh
      activate_item_window
    end
  end
  #--------------------------------------------------------------------------
  # ● 播放制作声效
  #--------------------------------------------------------------------------
  def play_se_for_item
    Sound.play_recovery
  end
  #--------------------------------------------------------------------------
  # ● 使用食谱
  #--------------------------------------------------------------------------
  def use_item
    #super
    #@item_window.redraw_current_item
    $data_items.each do |it|
      if it && !it.name.empty?
        $game_party.gain_item(it,-item.amount(it,0)) if item.resource?(it)
        $game_party.gain_item(it,item.amount(it,1)) if item.output?(it)
      end
    end
  end
end


#==============================================================================
# ■ Window_CookCategory
#------------------------------------------------------------------------------
#  制造画面中,显示制造类型的窗口。
#==============================================================================

class Window_CookCategory < Window_HorzCommand
  #--------------------------------------------------------------------------
  # ● 定义实例变量
  #--------------------------------------------------------------------------
  attr_reader   :item_window
  #--------------------------------------------------------------------------
  # ● 初始化对象
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0)
  end
  #--------------------------------------------------------------------------
  # ● 获取窗口的宽度
  #--------------------------------------------------------------------------
  def window_width
    Graphics.width
  end
  #--------------------------------------------------------------------------
  # ● 获取列数
  #--------------------------------------------------------------------------
  def col_max
    return $game_party.cook_types_size
  end
  #--------------------------------------------------------------------------
  # ● 更新画面
  #--------------------------------------------------------------------------
  def update
    super
    #@item_window.category = current_symbol if @item_window
    @item_window.category = current_data[:name] if @item_window
  end
  #--------------------------------------------------------------------------
  # ● 生成制造列表
  #--------------------------------------------------------------------------
  def make_command_list
    $game_party.cook_types.each do |t|
      add_command(t.name, t.index, t.enabled)
    end
  end
  #--------------------------------------------------------------------------
  # ● 设置制造列表窗口
  #--------------------------------------------------------------------------
  def item_window=(item_window)
    @item_window = item_window
    update
  end
  #--------------------------------------------------------------------------
  # ● 更新帮助内容
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text($game_party.cook_type_description(current_data[:name]))
  end
end

#==============================================================================
# ■ Window_CookList
#------------------------------------------------------------------------------
#  任务画面中,显示已获得任务的窗口。
#==============================================================================

class Window_CookList < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 定义实例变量
  #--------------------------------------------------------------------------
  attr_reader   :needs_window
  #--------------------------------------------------------------------------
  # ● 初始化对象
  #--------------------------------------------------------------------------
  def initialize(x, y, width, height)
    super
    @data = []
    @category = $game_party.cook_types_size > 0 ? $game_party.cook_types[0].name : nil
    refresh
  end
  #--------------------------------------------------------------------------
  # ● 设置分类
  #--------------------------------------------------------------------------
  def category=(category)
    return if @category == category
    @category = category
    refresh
    self.oy = 0
  end
  #--------------------------------------------------------------------------
  # ● 设置材料窗口
  #--------------------------------------------------------------------------
  def needs_window=(needs_window)
    @needs_window = needs_window
    update
  end
  #--------------------------------------------------------------------------
  # ● 获取列数
  #--------------------------------------------------------------------------
  def col_max
    return 1
  end
  #--------------------------------------------------------------------------
  # ● 获取项目数
  #--------------------------------------------------------------------------
  def item_max
    @data ? @data.size : 1
  end
  #--------------------------------------------------------------------------
  # ● 获取食谱
  #--------------------------------------------------------------------------
  def item
    @data && index >= 0 ? @data[index] : nil
  end
  #--------------------------------------------------------------------------
  # ● 获取选择食谱的有效状态
  #--------------------------------------------------------------------------
  def current_item_enabled?
    enable?(@data[index])
  end
  #--------------------------------------------------------------------------
  # ● 查询此食谱是否可用
  #--------------------------------------------------------------------------
  def enable?(item)
    item.enabled && item.enough?
  end
  #--------------------------------------------------------------------------
  # ● 生成食谱列表
  #--------------------------------------------------------------------------
  def make_item_list
    @data = $game_party.cookbooks(@category)
  end
  #--------------------------------------------------------------------------
  # ● 返回上一个选择的位置
  #--------------------------------------------------------------------------
  def select_last
    select(0)
  end
  #--------------------------------------------------------------------------
  # ● 绘制项目
  #--------------------------------------------------------------------------
  def draw_item(index)
    item = @data[index]
    if item
      rect = item_rect(index)
      rect.width -= 4
      draw_item_name(item, rect.x, rect.y, enable?(item))
    end
  end
  #--------------------------------------------------------------------------
  # ● 绘制名称
  #     enabled : 有效的标志。false 的时候使用半透明效果绘制
  #--------------------------------------------------------------------------
  def draw_item_name(item, x, y, enabled = true, width = 300)
    return unless item
    text = item.name
    text += "[材料不足]" if !item.enough?
    change_color(normal_color, enabled)
    draw_text(x, y, width, line_height, text)
  end
  #--------------------------------------------------------------------------
  # ● 更新帮助内容
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_item(item)
  end
   #--------------------------------------------------------------------------
  # ● 更新食谱清单
  #--------------------------------------------------------------------------
  def update_needslist
    @needs_window.set_item(item)
  end
  #--------------------------------------------------------------------------
  # ● 调用帮助窗口的更新方法
  #--------------------------------------------------------------------------
  def call_update_help
    update_help if @help_window
    update_needslist if @needs_window
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    make_item_list
    create_contents
    draw_all_items
  end
end
#==============================================================================
# ■ Window_Description
#------------------------------------------------------------------------------
#  显示食谱的说明的窗口
#==============================================================================

class Window_Description < Window_Base
  #--------------------------------------------------------------------------
  # ● 初始化对象
  #--------------------------------------------------------------------------
  def initialize(x, y)
    super(x, y, Graphics.width*0.5, fitting_height(4))
  end
  #--------------------------------------------------------------------------
  # ● 设置内容
  #--------------------------------------------------------------------------
  def set_text(text)
    if text != @text
      @text = text
      refresh
    end
  end
  #--------------------------------------------------------------------------
  # ● 清除
  #--------------------------------------------------------------------------
  def clear
    set_text("")
  end
  #--------------------------------------------------------------------------
  # ● 设置食谱的介绍
  #--------------------------------------------------------------------------
  def set_item(item)
    set_text(item ? item.description : "")
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    draw_text_ex(4, 0, @text)
  end
end

#==============================================================================
# ■ Window_NeedsList
#------------------------------------------------------------------------------
#  制造画面中,显示食谱所需材料的窗口。
#==============================================================================

class Window_NeedsList < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 初始化对象
  #--------------------------------------------------------------------------
  def initialize(x, y, width, height)
    super
    @category = :item
    @cookbook = nil
    @data = []
    refresh
  end
  #--------------------------------------------------------------------------
  # ● 获取列数
  #--------------------------------------------------------------------------
  def col_max
    return 1
  end
  #--------------------------------------------------------------------------
  # ● 获取项目数
  #--------------------------------------------------------------------------
  def item_max
    @data ? @data.size : 1
  end
  #--------------------------------------------------------------------------
  # ● 获取物品
  #--------------------------------------------------------------------------
  def item
    @data && index >= 0 ? @data[index] : nil
  end
  #--------------------------------------------------------------------------
  # ● 查询列表中是否含有此物品
  #--------------------------------------------------------------------------
  def include?(item)
    item.is_a?(RPG::Item) && !item.key_item?
  end
  #--------------------------------------------------------------------------
  # ● 获取选择食谱的有效状态
  #--------------------------------------------------------------------------
  def current_item_enabled?
    enable?(@data[index])
  end
  #--------------------------------------------------------------------------
  # ● 查询此食谱是否可用
  #--------------------------------------------------------------------------
  def enable?(item)
    $game_party.usable?(item) && @cookbook.item_enough?(item)
  end
  #--------------------------------------------------------------------------
  # ● 生成物品列表
  #--------------------------------------------------------------------------
  def make_item_list
    @data = []
    return if @cookbook== nil
    tmp1 = []
    tmp2 = []
    $data_items.each do |item|
      tmp1.push([item, 0]) if item && !item.name.empty? && @cookbook.resource?(item)
      tmp2.push([item, 1]) if item && !item.name.empty? && @cookbook.output?(item)
    end
    if tmp1.size > 0 && tmp2.size > 0
      @data.push(["需要材料:",0])
      @data += tmp1
      @data.push(["可以获得:",1])
      @data += tmp2
    end
  end
  #--------------------------------------------------------------------------
  # ● 返回上一个选择的位置
  #--------------------------------------------------------------------------
  def select_last
    select(0)
  end
  #--------------------------------------------------------------------------
  # ● 绘制项目
  #--------------------------------------------------------------------------
  def draw_item(index)
    item = @data[index]
    if item
      rect = item_rect(index)
      rect.width -= 4
      if item[0].is_a?(RPG::Item)
        draw_item_name(item, rect.x, rect.y, enable?(item[0]))
        draw_item_number(rect, item[0])
      else
        draw_input_output(item, rect.x, rect.y)
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 绘制物品名称
  #     enabled : 有效的标志。false 的时候使用半透明效果绘制
  #--------------------------------------------------------------------------
  def draw_item_name(item, x, y, enabled = true, width = 172)
    return unless item
    text = item[0].name + "*" + String(@cookbook.amount(item[0], item[1]))
    draw_icon(item[0].icon_index, x, y, enabled)
    change_color(normal_color, enable?(item[0]))
    draw_text(x + 24, y, width, line_height, text)
  end
  #--------------------------------------------------------------------------
  # ● 绘制输入和产出
  #--------------------------------------------------------------------------
  def draw_input_output(item, x, y, enabled = false, width = 172)
    return unless item
    if item[1] == 0
      text = "[需要]"
    else
      text = "[可以获得]"
    end
    change_color(normal_color, @cookbook.enough?)
    draw_text(x , y, width, line_height, text)
  end
  #--------------------------------------------------------------------------
  # ● 绘制物品个数
  #--------------------------------------------------------------------------
  def draw_item_number(rect, item)
    draw_text(rect, sprintf("现有%2d", $game_party.item_number(item)), 2)
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    make_item_list
    create_contents
    draw_all_items
  end
  #--------------------------------------------------------------------------
  # ● 设置食谱的材料
  #--------------------------------------------------------------------------
  def set_item(item)
    @cookbook = item
    refresh
  end
end

#==============================================================================
# 本腳本來自www.66RPG.com,使用和轉載請保留此信息
#==============================================================================


# add by Sion 2013.12.17
# 作者修改了原范例的菜单,但是在原系统脚本里改的。
# 整理出来写在这里, 不需要改菜单的同学把这些删掉就可以。
class Scene_Menu
  def command_cook
    SceneManager.call(Scene_Cook)
  end
  alias_method :s20131217_create_command_window, :create_command_window
  def create_command_window
    s20131217_create_command_window
    @command_window.set_handler(:cook, method(:command_cook))
  end
end
class Window_MenuCommand
  alias_method :s20131217_add_main_commands, :add_main_commands
  def add_main_commands
    s20131217_add_main_commands
    add_command("制造",   :cook,   main_commands_enabled)
  end
end[/pre]



通过我的寻找,发现两套脚本应该是运用了 同一个“add”之类的函数,才造成的,但本人脚本功底实在渣的没办法。即便找到问题所在,也无法解决。烦请大大们整合一下。(我尝试过搜索另一套VA任务系统来使用,发现另一套直接诸多报错,漏洞百出。而又找不到第三套任务系统,所以只能来麻烦各位了。)

无限の剣制

梦石
0
星屑
10450
在线时间
5019 小时
注册时间
2013-2-28
回帖
4942

开拓者贵宾

发表于 2016-1-18 11:50:19 | 显示全部楼层
这两个脚本个人感觉就是【糟糕】。有不少新人玩VA的时候被他们坑过
  1. #encoding:utf-8
  2. #==============================================================================
  3. # 本腳本來自[url]www.66RPG.com[/url],使用和轉載請保留此信息
  4. #==============================================================================
  5. #==============================================================================
  6. #
  7. #每添加一个制造的类型,最上面的类别菜单就会多一项。
  8. #
  9. #添加类型的方法是:
  10. #$game_party.add_cook_type(类别名称,类别介绍, 类别状态-默认false)
  11. #
  12. #举例:
  13. #$game_party.add_cook_type("制药","调配药品", true)
  14. #
  15. #添加配方的方法:
  16. #$game_party.add_cookbook(配方名称, 配方介绍, 配方类别名称,材料的二维数组,产出物的二维数组,配方状态)
  17. #
  18. #举例:
  19. #$game_party.add_cookbook("初级补血药水", "制作初级补血药水", "制药",[[18,2]],[[1,1]],true)
  20. #
  21. #调用窗口的方法:SceneManager.call(Scene_Cook)
  22. #
  23. #
  24. #==============================================================================

  25. #==============================================================================
  26. # ■ Cookbook_Type
  27. #------------------------------------------------------------------------------
  28. #  食谱类型类。
  29. #==============================================================================

  30. class Cookbook_Type
  31.   attr_reader :index
  32.   attr_reader :name
  33.   attr_reader :description
  34.   attr_reader :enabled
  35.   #--------------------------------------------------------------------------
  36.   # ● 初始化对象
  37.   #--------------------------------------------------------------------------
  38.   def initialize(index, name, description, enabled = false)
  39.     @index = index
  40.     @name = name
  41.     @description = description
  42.     @enabled = enabled
  43.   end

  44.   def enable(en)
  45.     @enabled = en
  46.   end
  47. end

  48. #==============================================================================
  49. # ■ Cookbook
  50. #------------------------------------------------------------------------------
  51. #  食谱类。本类在 Game_Task 类的内部使用。
  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.   def enable(en)
  75.     @enabled = en
  76.   end

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

  132. #==============================================================================
  133. # ■ Game_Party
  134. #==============================================================================

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

  222. #==============================================================================
  223. # ■ Scene_Cook
  224. #------------------------------------------------------------------------------
  225. #  制造画面
  226. #==============================================================================

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

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


  333. #==============================================================================
  334. # ■ Window_CookCategory
  335. #------------------------------------------------------------------------------
  336. #  制造画面中,显示制造类型的窗口。
  337. #==============================================================================

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

  391. #==============================================================================
  392. # ■ Window_CookList
  393. #------------------------------------------------------------------------------
  394. #  任务画面中,显示已获得任务的窗口。
  395. #==============================================================================

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

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

  559. #==============================================================================
  560. # ■ Window_NeedsList
  561. #------------------------------------------------------------------------------
  562. #  制造画面中,显示食谱所需材料的窗口。
  563. #==============================================================================

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

  698. #==============================================================================
  699. # 本腳本來自[url]www.66RPG.com[/url],使用和轉載請保留此信息
  700. #==============================================================================


  701. # add by Sion 2013.12.17
  702. # 作者修改了原范例的菜单,但是在原系统脚本里改的。
  703. # 整理出来写在这里, 不需要改菜单的同学把这些删掉就可以。
  704. class Scene_Menu
  705.   def command_cook
  706.     SceneManager.call(Scene_Cook)
  707.   end
  708.   alias_method :s20131217_create_command_window, :create_command_window
  709.   def create_command_window
  710.     s20131217_create_command_window
  711.     @command_window.set_handler(:cook, method(:command_cook))
  712.   end
  713. end
  714. class Window_MenuCommand
  715.   alias_method :s20131217_add_main_commands, :add_main_commands
  716.   def add_main_commands
  717.     s20131217_add_main_commands
  718.     add_command("制造",   :cook,   main_commands_enabled)
  719.   end
  720. end
复制代码
下面那个换成这样的,未测试

点评

简单测试了下,完全能用。 多谢啦!  发表于 2016-1-18 21:22

评分

参与人数 1星屑 +10 收起 理由
天涯孤客 + 10 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
50
在线时间
26 小时
注册时间
2008-7-6
回帖
18
发表于 2016-3-28 14:45:51 | 显示全部楼层
挖个坟 0。0 这个已经不知道是多少年前自己整合的东西来着~
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部