Project1

标题: 配方不公开的物品合成【合成系统】(XP) [打印本页]

作者: 纳尔德    时间: 2012-8-10 23:09
标题: 配方不公开的物品合成【合成系统】(XP)
本帖最后由 纳尔德 于 2012-8-12 19:30 编辑

RUBY 代码复制
  1. #==============================================================================
  2. # ★ Item_Transmute
  3. #------------------------------------------------------------------------------
  4. #  配方不公开的物品合成 
  5. #  By Summoner
  6. #==============================================================================
  7. #
  8. # 本脚本以 知识共享署名-非商业性使用 3.0 Unported 许可协议进行许可。
  9. # 详见 [url]http://creativecommons.org/licenses/by-nc/3.0/[/url]
  10. #
  11. #==============================================================================
  12. #
  13. # 这是一个配方不公开的物品合成,也就是说什么材料可以合成什么物品玩家在
  14. # 游戏中的合成界面是不能直接看到的。由于物品的合成配方不是公开的,所以
  15. # 玩家需要通过自己探索或从NPC处得到合成配方(当然看攻略也是一种可能)
  16. #
  17. # 例如M&M中的配药水,Diablo II的盒子,NWV中的铁匠铺、Wizard Lab……
  18. #
  19. # 冲突可能性:基本上是添加新的内容,冲突可能性较小
  20. #
  21. # 可扩展性:可以加强、扩展的东西应该很多。
  22. #   例如:合成需要花费GP、SP甚至XP,合成需要特定器具,合成失败受到伤害,
  23. #   某些物品的几率合成、物品图鉴等等。
  24. #
  25. #   有的东西已经注释清楚了,搞懂原理的话,根据自己需要改起来也不会很麻烦。
  26. #
  27. #   个人一下子没时间实现这些,欢迎大家多多修改分享。
  28. #
  29. # 使用方法:在事件中使用脚本$scene = Scene_Compose.new,然后等待2帧
  30. #
  31. #
  32. #==============================================================================
  33.  
  34. # 若合成失败(无匹配的配方)物品是否失去
  35. $Ingredient_Lost_When_Fail = false
  36.  
  37. # 合成成功/失败SE
  38. # 若不使用SE请设置为“""”(不含外引号)
  39. $SE_Compose_Successful = "Audio/SE/109-Heal05"
  40. $SE_Compose_Failed = "Audio/SE/117-Fire01"
  41.  
  42. #=============================================================================
  43. # ■ 配方及补充的定义
  44. #-----------------------------------------------------------------------------
  45. # Game_System
  46. #=============================================================================
  47. class Game_System
  48.   attr_accessor :formulas
  49.   attr_accessor :products
  50.   alias formulas_initialize initialize
  51.   def initialize
  52.     formulas_initialize
  53.     @formulas = []
  54.     @products = []
  55. #############################################################################
  56. #
  57. #===========================配方表===========================================   
  58. #
  59. #  配方格式
  60. #
  61. #  @formulas[i] = [[材料种类,材料编号,数量],[材料种类,材料编号,数量]……]                  
  62. #  @products[i] = [[成品种类,成品编号,数量],[成品种类,成品编号,数量]……]
  63. #  
  64. #  种类:物品 0 武器 1 防具 2
  65. #
  66. #  1.如果有两个配方材料相同,理论上会按编号较小的处理
  67. #  2.配方材料的顺序与合成是无关的(当然如果你想改成有关肯定也不会太麻烦)
  68. #  3.允许某个材料拆成多件成品(可能就不叫物品合成,应该叫物品分解了)
  69. #  4.暂时不支持多步合并为一步的合成
  70. #       例如 A + B = C,C + D = E,如果不存在A + B + D = E的配方
  71. #       A + B + D无法合成 E
  72. #
  73. #############################################################################
  74.     @formulas[0] = []
  75.     @products[0] = []
  76.     # 样例1: 回复剂x3 = 超回复剂x1
  77.     @formulas[1] = [[0,1,3]]         
  78.     @products[1] = [[0,2,1]]
  79.     @formulas[2] = [[0,2,3]]
  80.     @products[2] = [[0,3,1]]
  81.     @formulas[3] = [[0,4,3]]
  82.     @products[3] = [[0,5,1]]
  83.     @formulas[4] = [[0,5,3]]
  84.     @products[4] = [[0,6,1]]
  85.     # 样例2: 完全恢复剂x1 + 超级香水x1 = 圣灵药x1
  86.     @formulas[5] = [[0,3,1],[0,6,1]]
  87.     @products[5] = [[0,7,1]]
  88.     # 样例3: 完全恢复剂x1 + 超级香水x1 = 完全圣灵药x1
  89.     # 被样例2 被覆盖
  90.     @formulas[6] = [[0,3,1],[0,6,1]]
  91.     @products[6] = [[0,8,1]]
  92.     # 圣灵药x1 = 完全恢复剂x1 + 超级香水x1 (Item_Decompose...)
  93.     @formulas[7] = [[0,7,1]]
  94.     @products[7] = [[0,3,1],[0,6,1]]
  95.     # 样例5: 铜剑x1 + 回复剂x1 + 铜铠x1 = 密斯利尔剑x1
  96.     @formulas[8] = [[1,1,1],[0,1,1],[2,1,1]]
  97.     @products[8] = [[1,4,1]]
  98.   end
  99. end
  100.  
  101. class Game_Temp
  102.   attr_accessor :forge
  103.   alias forge_item_initialize initialize
  104.   def initialize
  105.     forge_item_initialize
  106.     # 定义合成窗口中的物品储存区
  107.     @forge = []
  108.   end
  109. end
  110.  
  111. #==============================================================================
  112. # ■ Window_ForgeCommand
  113. #------------------------------------------------------------------------------
  114. #  合成画面、选择要做的事的窗口
  115. #==============================================================================
  116.  
  117. class Window_ComposeCommand < Window_Selectable
  118.   #--------------------------------------------------------------------------
  119.   # ● 初始化对像
  120.   #--------------------------------------------------------------------------
  121.   def initialize
  122.     super(0, 64, 640, 64)
  123.     self.contents = Bitmap.new(width - 32, height - 32)
  124.     @item_max = 4
  125.     @column_max = 4
  126.     @commands = ["更改材料", "合成", "放弃合成", "离开"]
  127.     refresh
  128.     self.index = 0
  129.   end
  130.   #--------------------------------------------------------------------------
  131.   # ● 刷新
  132.   #--------------------------------------------------------------------------
  133.   def refresh
  134.     self.contents.clear
  135.     for i in 0...@item_max
  136.       draw_item(i)
  137.     end
  138.   end
  139.   #--------------------------------------------------------------------------
  140.   # ● 描绘项目
  141.   #     index : 项目编号
  142.   #--------------------------------------------------------------------------
  143.   def draw_item(index)
  144.     x = 4 + index * 160
  145.     self.contents.draw_text(x, 0, 128, 32, @commands[index])
  146.   end
  147. end
  148.  
  149. #==============================================================================
  150. # ■ Window_ForgeLeft
  151. #------------------------------------------------------------------------------
  152. #  合成画面中显示拥有的物品的窗口
  153. #==============================================================================
  154.  
  155. class Window_ComposeLeft < Window_Selectable
  156.   #--------------------------------------------------------------------------
  157.   # ● 初始化对像
  158.   #--------------------------------------------------------------------------
  159.   def initialize
  160.     super(0, 128, 320, 352)
  161.     @column_max = 1
  162.     refresh
  163.     self.index = 0
  164.   end
  165.   #--------------------------------------------------------------------------
  166.   # ● 获取物品
  167.   #--------------------------------------------------------------------------
  168.   def item
  169.     return @data[self.index]
  170.   end
  171.   #--------------------------------------------------------------------------
  172.   # ● 刷新
  173.   #--------------------------------------------------------------------------
  174.   def refresh
  175.     if self.contents != nil
  176.       self.contents.dispose
  177.       self.contents = nil
  178.     end
  179.     self.update_cursor_rect
  180.     @data = []
  181.     for i in 1...$data_items.size
  182.       if $game_party.item_number(i) > 0
  183.         @data.push($data_items[i])
  184.       end
  185.     end
  186.     for i in 1...$data_weapons.size
  187.       if $game_party.weapon_number(i) > 0
  188.         @data.push($data_weapons[i])
  189.       end
  190.     end
  191.     for i in 1...$data_armors.size
  192.       if $game_party.armor_number(i) > 0
  193.         @data.push($data_armors[i])
  194.       end
  195.     end
  196.     # 如果项目数不是 0 就生成位图、描绘全部项目
  197.     @item_max = @data.size
  198.     if @item_max > 0
  199.       self.contents = Bitmap.new(width - 32, row_max * 32)
  200.       for i in 0...@item_max
  201.         draw_item(i)
  202.       end
  203.     end
  204.   end
  205.   #--------------------------------------------------------------------------
  206.   # ● 描绘项目
  207.   #     index : 项目标号
  208.   #--------------------------------------------------------------------------
  209.   def draw_item(index)
  210.     item = @data[index]
  211.     case item
  212.     when RPG::Item
  213.       number = $game_party.item_number(item.id)
  214.     when RPG::Weapon
  215.       number = $game_party.weapon_number(item.id)
  216.     when RPG::Armor
  217.       number = $game_party.armor_number(item.id)
  218.     end
  219.     self.contents.font.color = normal_color
  220.     x = 4
  221.     y = index * 32
  222.     rect = Rect.new(x, y, self.width / @column_max - 32, 32)
  223.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  224.     bitmap = RPG::Cache.icon(item.icon_name)
  225.     opacity = self.contents.font.color == normal_color ? 255 : 128
  226.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  227.     self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  228.     self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
  229.     self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
  230.   end
  231.   #--------------------------------------------------------------------------
  232.   # ● 刷新帮助文本
  233.   #--------------------------------------------------------------------------
  234.   def update_help
  235.     @help_window.set_text(self.item == nil ? "" : self.item.description)
  236.   end
  237. end
  238.  
  239. #==============================================================================
  240. # ■ Window_ForgeRight
  241. #------------------------------------------------------------------------------
  242. #  合成画面中的合成区窗口
  243. #==============================================================================
  244.  
  245. class Window_ComposeRight < Window_Selectable
  246.   attr_accessor :forge_item
  247.   #--------------------------------------------------------------------------
  248.   # ● 初始化对像
  249.   #--------------------------------------------------------------------------
  250.   def initialize(forge_item)
  251.     super(320, 128, 320, 352)
  252.     @column_max = 1
  253.     @forge_item = []
  254.     refresh
  255.     self.index = 0
  256.   end
  257.   #--------------------------------------------------------------------------
  258.   # ● 获取物品
  259.   #--------------------------------------------------------------------------
  260.   def item
  261.     return @data[self.index]
  262.   end
  263.   #--------------------------------------------------------------------------
  264.   # ● 获取物品
  265.   #--------------------------------------------------------------------------
  266.   def item_number
  267.     return @data_number[self.index]
  268.   end
  269.   #--------------------------------------------------------------------------
  270.   # ● 刷新
  271.   #--------------------------------------------------------------------------
  272.   def refresh
  273.     if self.contents != nil
  274.       self.contents.dispose
  275.       self.contents = nil
  276.     end
  277.     @data = []
  278.     @data_number = []
  279.     @forge_item = $game_temp.forge
  280.     for item_forge in @forge_item
  281.       case item_forge[0]
  282.       when 0
  283.         item = $data_items[item_forge[1]]
  284.       when 1
  285.         item = $data_weapons[item_forge[1]]
  286.       when 2
  287.         item = $data_armors[item_forge[1]]
  288.       end
  289.       if (item != nil) and (item_forge[2] != 0)
  290.         @data.push(item)
  291.         @data_number.push(item_forge[2])
  292.       else
  293.         @data.delete(item)
  294.       end
  295.     end
  296.     # 如果项目数不是 0 就生成位图、描绘全部项目
  297.     @item_max = @data.size
  298.     if @item_max > 0
  299.       self.contents = Bitmap.new(width - 32, row_max * 32)
  300.       for i in 0...@item_max
  301.         draw_item(i)
  302.       end
  303.     end
  304.   end
  305.   #--------------------------------------------------------------------------
  306.   # ● 描绘项目
  307.   #     index : 项目标号
  308.   #--------------------------------------------------------------------------
  309.   def draw_item(index)
  310.     item = @data[index]
  311.     case item
  312.     when RPG::Item
  313.       number = $game_temp.forge[index][2]
  314.     when RPG::Weapon
  315.       number = $game_temp.forge[index][2]
  316.     when RPG::Armor
  317.       number = $game_temp.forge[index][2]
  318.     end
  319.     self.contents.font.color = normal_color
  320.     x = 4
  321.     y = index * 32
  322.     rect = Rect.new(x, y, self.width / @column_max - 32, 32)
  323.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  324.     bitmap = RPG::Cache.icon(item.icon_name)
  325.     opacity = self.contents.font.color == normal_color ? 255 : 128
  326.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  327.     self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  328.     self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
  329.     self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
  330.   end
  331.   #--------------------------------------------------------------------------
  332.   # ● 刷新帮助文本
  333.   #--------------------------------------------------------------------------
  334.   def update_help
  335.     @help_window.set_text(self.item == nil ? "" : self.item.description)
  336.   end
  337. end
  338.  
  339. #==============================================================================
  340. # ■ Scene_Compose
  341. #------------------------------------------------------------------------------
  342. #  处理物品合成画面的类
  343. #==============================================================================
  344.  
  345. class Scene_Compose
  346. #--------------------------------------------------------------------------
  347. # ● 初始化
  348. #--------------------------------------------------------------------------
  349. def initialize
  350.    # 生成帮助窗口
  351.    @help_window = Window_Help.new
  352.    # 生成命令窗口
  353.    @command_window = Window_ComposeCommand.new
  354.    @command_window.active = false
  355.    # 生成左方窗口
  356.    @item_window = Window_ComposeLeft.new
  357.    @item_window.active = true
  358.    @item_window.help_window = @help_window
  359.    # 生成右方窗口
  360.    @forge_window = Window_ComposeRight.new([])
  361.    @forge_window.active = false
  362.    @forge_window.help_window = @help_window
  363.    # 初始化配方与合成区
  364.    @formulas = $game_system.formulas
  365.    @products = $game_system.products
  366.    @forge = []
  367.    @products_temp = []      
  368. end
  369.   #--------------------------------------------------------------------------
  370.   # ● 主处理
  371.   #--------------------------------------------------------------------------
  372. def main
  373.    # 执行过渡
  374.    Graphics.transition
  375.    # 主循环
  376.    loop do
  377.      # 刷新游戏画面
  378.      Graphics.update
  379.      # 刷新输入情报
  380.      Input.update
  381.      # 刷新画面
  382.      update
  383.      # 如果画面被切换的话就中断循环
  384.      if $scene != self
  385.        break
  386.      end
  387.    end
  388.    # 准备过渡
  389.    Graphics.freeze
  390.    # 释放窗口
  391.    @help_window.dispose
  392.    @command_window.dispose
  393.    @item_window.dispose
  394.    @forge_window.dispose
  395. end
  396.   #--------------------------------------------------------------------------
  397.   # ● 刷新画面
  398.   #--------------------------------------------------------------------------
  399. def update
  400.    @help_window.update
  401.    @command_window.update
  402.    @item_window.update
  403.    @forge_window.update
  404.    if @command_window.active
  405.      update_command
  406.      return
  407.    end
  408.    if @item_window.active
  409.      update_item
  410.      return
  411.    end
  412.    if @forge_window.active
  413.      update_forge
  414.      return
  415.    end
  416.     return
  417. end
  418.   #--------------------------------------------------------------------------
  419.   # ● 刷新画面(指令窗口激活的情况下)
  420.   #--------------------------------------------------------------------------
  421.   def update_command
  422.     # 按下 B 键的情况下
  423.     if Input.trigger?(Input::B)
  424.       # 演奏取消 SE
  425.       $game_system.se_play($data_system.cancel_se)
  426.       abort
  427.       # 切换到地图画面
  428.       $scene = Scene_Map.new
  429.       return
  430.     end
  431.      # 按下 C 键的情况下
  432.     if Input.trigger?(Input::C)
  433.       # 命令窗口光标位置分支
  434.       case @command_window.index
  435.       when 0  # 更改材料
  436.         # 演奏确定 SE
  437.         $game_system.se_play($data_system.decision_se)
  438.         # 窗口状态转向物品窗口
  439.         @command_window.active = false
  440.         @item_window.active = true
  441.         @forge_window.active = false
  442.       when 1  # 合成
  443.         # 演奏确定 SE
  444.         $game_system.se_play($data_system.decision_se)
  445.         # 执行合成命令
  446.         if $game_temp.forge != []
  447.           compose
  448.         end
  449.       when 2  # 放弃合成
  450.         # 演奏确定 SE
  451.         $game_system.se_play($data_system.decision_se)
  452.         # 放弃合成
  453.         abort
  454.       when 3  # 离开
  455.         # 演奏确定 SE
  456.         $game_system.se_play($data_system.decision_se)
  457.         # 放弃合成
  458.         abort
  459.         # 切换到地图画面
  460.         $scene = Scene_Map.new
  461.       end
  462.       return
  463.     end
  464.   end
  465.   #--------------------------------------------------------------------------
  466.   # ● 刷新画面(物品窗口激活的情况下)
  467.   #--------------------------------------------------------------------------
  468.   def update_item
  469.      # 按下 B 键的情况下
  470.     if Input.trigger?(Input::B)
  471.       # 演奏取消 SE
  472.       $game_system.se_play($data_system.cancel_se)
  473.       # 切换到指令窗口
  474.       @item_window.active = false
  475.       @command_window.active = true
  476.       @help_window.set_text("")
  477.       return
  478.     end
  479.      # 按下 C 键的情况
  480.     if Input.trigger?(Input::C)
  481.       # 演奏确定 SE
  482.       $game_system.se_play($data_system.decision_se)
  483.       # 获取物品
  484.       @item = @item_window.item
  485.       # 获取物品的所持数
  486.       case @item
  487.       when RPG::Item
  488.         number = $game_party.item_number(@item.id)
  489.         typetemp = 0
  490.       when RPG::Weapon
  491.         number = $game_party.weapon_number(@item.id)
  492.         typetemp = 1
  493.       when RPG::Armor
  494.         number = $game_party.armor_number(@item.id)
  495.         typetemp = 2
  496.       end
  497.       if number != nil
  498.         # 更改合成窗口的物品
  499.         case @item
  500.         when RPG::Item
  501.           $game_party.lose_item(@item.id, 1)
  502.         when RPG::Weapon
  503.           $game_party.lose_weapon(@item.id, 1)
  504.         when RPG::Armor
  505.           $game_party.lose_armor(@item.id, 1)
  506.         end
  507.         forge_change(typetemp, @item.id, 1)
  508.         # 刷新各窗口
  509.         @item_window.update
  510.         @help_window.update
  511.         @forge_window.update
  512.         @item_window.refresh
  513.         @forge_window.refresh
  514.       end
  515.     end
  516.      # 按下 右方向键 的情况
  517.     if Input.trigger?(Input::RIGHT)
  518.       # 切换到合成窗口
  519.       @item_window.active = false
  520.       @forge_window.active = true
  521.     end
  522.   end
  523.   #--------------------------------------------------------------------------
  524.   # ● 刷新画面(合成窗口激活的情况下)
  525.   #--------------------------------------------------------------------------
  526.   def update_forge
  527.      # 按下 B 键的情况下
  528.     if Input.trigger?(Input::B)
  529.       # 演奏取消 SE
  530.       $game_system.se_play($data_system.cancel_se)
  531.       # 切换到指令窗口
  532.       @forge_window.active = false
  533.       @command_window.active = true
  534.       @help_window.set_text("")
  535.       return
  536.     end
  537.      # 按下 C 键的情况
  538.     if Input.trigger?(Input::C)
  539.      # 演奏确定 SE
  540.      $game_system.se_play($data_system.decision_se)
  541.      # 获取物品
  542.       @item = @forge_window.item
  543.       # 获取物品的所持数
  544.       case @item
  545.       when RPG::Item
  546.         number = @forge_window.item_number
  547.         typetemp = 0
  548.       when RPG::Weapon
  549.         number = @forge_window.item_number
  550.         typetemp = 1
  551.       when RPG::Armor
  552.         number = @forge_window.item_number
  553.         typetemp = 2
  554.       end
  555.      if number != nil
  556.        # 更改合成窗口的物品
  557.        case @item
  558.        when RPG::Item
  559.          $game_party.gain_item(@item.id, 1)
  560.        when RPG::Weapon
  561.          $game_party.gain_weapon(@item.id, 1)
  562.        when RPG::Armor
  563.          $game_party.gain_armor(@item.id, 1)
  564.        end
  565.        #p number
  566.        forge_change(typetemp, @item.id, -1)
  567.        # 刷新各窗口
  568.        @item_window.refresh
  569.        @forge_window.refresh
  570.        @help_window.update
  571.        @item_window.update
  572.        @forge_window.update
  573.       end
  574.     end
  575.        # 按下 左方向键 的情况下
  576.     if Input.trigger?(Input::LEFT)
  577.       # 切换到合成窗口
  578.       @forge_window.active = false
  579.       @item_window.active = true
  580.     end
  581.   end
  582.   #--------------------------------------------------------------------------
  583.   # ● 更改合成窗口物品
  584.   #--------------------------------------------------------------------------
  585.   def forge_change(type,id,number)
  586.      quantity = number
  587.      for item in $game_temp.forge
  588.        if (item[0]==type) and (item[1]==id)
  589.          item[2] = [item[2] += quantity,99].min
  590.          if item[2] == 0
  591.            $game_temp.forge.delete(item)
  592.          end
  593.          return
  594.        end
  595.      end
  596.      $game_temp.forge.push([type,id,number])
  597.   end
  598.   #--------------------------------------------------------------------------
  599.   # ● 放弃合成
  600.   #--------------------------------------------------------------------------
  601.   def abort
  602.     # 将合成窗口中的物品转移至物品窗口中
  603.     for item in $game_temp.forge
  604.       # 判断物品类型并归还
  605.       case item[0]
  606.       when 0
  607.         $game_party.gain_item(item[1], item[2])
  608.       when 1
  609.         $game_party.gain_weapon(item[1], item[2])
  610.       when 2
  611.         $game_party.gain_armor(item[1], item[2])
  612.       end
  613.     end
  614.     $game_temp.forge = []
  615.     # 刷新各窗口
  616.     @item_window.refresh
  617.     @forge_window.refresh
  618.   end
  619.   #--------------------------------------------------------------------------
  620.   # ● 检测是否有符合的配方
  621.   #--------------------------------------------------------------------------
  622. def match
  623.    match_one = false
  624.    match_this = false
  625.     # 检测每一个配方
  626.    for i in [email]0...@formulas.size[/email]
  627.      # 将合成窗口中的物品复制到合成缓存区
  628.      # 注意: 直接使用"="将传引用 导致检测配方是否匹配时合成窗口中物品被删除
  629.      @forge = $game_temp.forge.dup
  630.      # 检测这个配方中每一项材料
  631.      for ingredient in @formulas[i]
  632.        match_this = true
  633.        # 合成区中没有此项材料的情况
  634.        unless @forge.include?(ingredient)
  635.          match_this = false
  636.          break
  637.        end
  638.        # 从合成区中暂时删除这项材料
  639.        @forge.delete(ingredient)
  640.      end
  641.      if match_this == false
  642.        next
  643.      end
  644.      # 检测合成区中是否还有配方外的材料剩余
  645.      unless @forge == []
  646.        match_this = false
  647.      end
  648.      # 满足这一个配方的情况
  649.      if match_this == true
  650.        match_one = true
  651.        # 获取配方的成品
  652.        @products_temp = @products[i]
  653.        break
  654.      end
  655.    end
  656.    return match_one
  657. end
  658.   #--------------------------------------------------------------------------
  659.   # ● 合成
  660.   #--------------------------------------------------------------------------
  661. def compose
  662.    # 如果有符合的配方
  663.    if match
  664.      # 将合成窗口中的材料改变为成品
  665.      $game_temp.forge = []
  666.      for i in [email]0...@products_temp.size[/email]
  667.       forge_change(@products_temp[i][0], @products_temp[i][1], @products_temp[i][2])
  668.     end
  669.      if $SE_Compose_Successful != ""
  670.        Audio.se_play($SE_Compose_Successful)
  671.      end
  672.    # 合成失败的情况
  673.    else
  674.      if $SE_Compose_Failed != ""
  675.        Audio.se_play($SE_Compose_Failed)
  676.      end
  677.      if $Ingredient_Lost_When_Fail
  678.        $game_temp.forge = []
  679.      end
  680.    end
  681.     # 刷新各窗口
  682.    @item_window.refresh
  683.    @forge_window.refresh
  684. end
  685. end

详细介绍已经在代码注释上了,是一个朋友叫我代发的,他可能不能上6R,作者:Summoner
我试用过了,上面也注释的很清楚。
调用语句为:$scene = Scene_Compose.new
过后等待2帧
上图


像这样 回复剂放入3个后按合成即可,也可以放入一个圣灵药,再按合成,就分解出物品来,详细代码上注释的很清楚。
好吧,还是附上范例,其实也没什么可说的。
Item_Compose.zip (206.84 KB, 下载次数: 523)
作者: a1359478537    时间: 2012-8-11 01:03
怎么用,我是新手
作者: 1584927450    时间: 2012-8-12 19:33
额,我说LZ大哥,学会脚本不容易,现在的合成脚本系统已经够多了,您就不必枉费心思去编这种要多少有多少的合成系统了,去写点给力的脚本行吗?
作者: chd114    时间: 2012-8-29 22:06
LZ问个问题如果我想设定成虽然不知道配方但是误打误撞把配方成品做出来了,可以获得永久的配方,然后在一个显示你已经获得的配方列表中直接制作这样要怎么弄?而且配方可以在合成成功后获得与游戏中随机获得
作者: ★日渡灬星司丿    时间: 2012-8-29 23:11
肿么看不到回复?
作者: chd114    时间: 2012-8-30 15:58
★日渡灬星司丿 发表于 2012-8-29 23:11
肿么看不到回复?

看得到回复啊,是你的网速有问题或者网络延迟吧
作者: ziseyannv    时间: 2012-10-3 19:12
果断的和RTAB冲突
作者: k951636170    时间: 2012-10-3 20:24
不知我还要多久才能到这种程度

作者: qwertqq2013    时间: 2014-1-23 11:27
这个脚本我很需要,可是还不会,暗黑的那个盒子其实就是合成功能,很强大。




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