| 
 
| 赞 | 0 |  
| VIP | 0 |  
| 好人卡 | 1 |  
| 积分 | 1 |  
| 经验 | 2248 |  
| 最后登录 | 2018-3-19 |  
| 在线时间 | 79 小时 |  
 Lv1.梦旅人 
	梦石0 星屑70 在线时间79 小时注册时间2012-9-30帖子34 | 
| 
嗯,又是我{:2_285:}
x
加入我们,或者,欢迎回来。您需要 登录 才可以下载或查看,没有帐号?注册会员  
 
 module Sword#=======================================#★ 魔劍工舖 - 合成系統 1.07# [url]http://blog.yam.com/a870053jjkj/[/url]#=======================================  Sword4_Message, Sword4_Help, Sword4_Synthesize = [], [], [[], [], []]#========================================begin● 設置方法呼叫方法(全部):$scene = Sword_Synthesize.new呼叫方法(物品):$scene = Sword_Synthesize.new(0)呼叫方法(武器):$scene = Sword_Synthesize.new(1)呼叫方法(防具):$scene = Sword_Synthesize.new(2)習得公開:$game_party.sword_synthesize[種類][編號] = true習得隱藏:$game_party.sword_synthesize[種類][編號] = false遺忘合成:$game_party.sword_synthesize[種類][編號] = nil全部公開:$game_party.sword_synthesize(true)全部隱藏:$game_party.sword_synthesize(false)全部遺忘:$game_party.sword_synthesize(nil)機率加乘變量:$game_party.synthesize_multiply[種類][編號]=end#=======================================#● 使用者自定設置Sword4_Width = 180 # 設定合成選項的寬度,相對的合成內容寬度也會更動Sword4_NoCommand = '?????' # 習得卻未合成過的選項文字,''表示道具名稱Sword4_Whether = '是否要消耗材料並合成道具?' # 合成提示文字,''為不提示Sword4_Wait1 = 30 # 設定合成中的等待時間,每40約為1秒Sword4_Wait2 = 30 # 設定成功或完成的訊息等待時間,每40約為1秒Sword4_Roll = 3 # 設定材料5個以上時,滾動效果的速度Sword4_Probability1 = 1 # 設定增加成功率的合成結果,0為失敗;1為成功;2是都可Sword4_Probability2 = 1 # 設定每合成增加成功機率的數值,因Sword4_Probability1而定Sword4_SE = '122-Ice03' # 開始合成時演奏SE檔名或動畫編號,''或0為不演奏Sword4_Picture = '049-Skill06' # 當習得未合成時的圖示,XP用字串、VX用數值Sword4_Menu = 0 # 關閉合成返回設定,0為地圖;1以上選單,並指著指定的選項#--------------------------------------------------------------#○ 合成提示窗口設定# Sword4_Message[不必更改] = [紅, 綠, 藍, '文字內容']Sword4_Message[0] = [255, 255, 255, '開始合成中...'] # 正在合成中Sword4_Message[1] = [255, 0, 0, '合成失敗']# 合成失敗Sword4_Message[2] = [255, 255, 0, '合成成功']# 合成成功Sword4_Message[3] = [255, 0, 0, '材料不足'] # 材料不足#--------------------------------------------------------------#○ 說明窗口顯示設定# Sword4_Help[不必更改] = ['文字內容', 靠邊位置]# 靠邊位置:0為靠左邊顯示、1為中央顯示、2為靠右邊顯示Sword4_Help[0] = ['合成系統', 0] # 顯示所有物品、武器、防具時Sword4_Help[1] = ['物品合成', 0] # 只顯示物品時Sword4_Help[2] = ['武器合成', 0] # 只顯示武器時Sword4_Help[3] = ['防具合成', 0] # 只顯示防具時#--------------------------------------------------------------#○ 合成資料表# Sword4_Synthesize[合成種類][合成編號] = [{物品}, {武器}, {防具}, 成功率]# 合成種類:0為物品、1為武器、2為防具# 物品、武器、防具:「編號=>數量」,每個相同種類材料必須用小逗號分開Sword4_Synthesize[0][3] = [{1=>5, 2=>2}, {}, {}, 100]Sword4_Synthesize[0][6] = [{4=>5, 5=>2}, {}, {}, 80]Sword4_Synthesize[1][4] = [{}, {1=>3}, {}, 70]Sword4_Synthesize[1][8] = [{}, {5=>2, 6=>8}, {4=>1}, 70]Sword4_Synthesize[2][4] = [{}, {}, {1=>6, 2=>3, 3=>1}, 65]#=======================================  $Sword ? $Sword[4] = true : $Sword = {4=>true} # 腳本使用標誌  ($Sword_VX = false ; RPG::Weather rescue $Sword_VX = true) if $Sword_VX == nilend#=======================================#■ 處理同伴的類別class Game_Party  include Sword  attr_writer    :sword_synthesize # 合成狀態數據  attr_accessor :synthesize_multiply # 機率加乘數值  #-------------------------------------------------------------  #● 初始化物件  alias sword4_initialize initialize  def initialize    sword4_initialize    @sword_synthesize = [Array.new($data_items.size + 1){nil},     Array.new($data_weapons.size + 1){nil}, Array.new($data_armors.size + 1){nil}]    @synthesize_multiply = [Array.new($data_items.size + 1){0},     Array.new($data_weapons.size + 1){0}, Array.new($data_armors.size + 1){0}]  end  #-------------------------------------------------------------  #● 讀取與全部修改的方法  def sword_synthesize(number = 0)    return @sword_synthesize if number == 0 # 傳回值    (0..2).each{|i| (1...Sword4_Synthesize[i].size).each{|ii|    next unless Sword4_Synthesize[i][ii] ; @sword_synthesize[i][ii] = number}}  endend#=======================================#■ 合成系統窗口class WSword_Synthesize < Window_Base  include Sword  attr_accessor :max_oy  # 目前位圖Y座標  #-------------------------------------------------------------  #● 初始化物件  def initialize    @xpvx = $Sword_VX ? [Graphics.width, Graphics.height, WLH + 32] : [640, 480, 64]     super(Sword4_Width, @xpvx[2], @xpvx[0] - Sword4_Width, @xpvx[1] - @xpvx[2])    self.contents = Bitmap.new(1, 1) ; refresh  end  #-------------------------------------------------------------  #● 更新內容(成品資料)  def refresh(itema = nil)    self.contents.clear ; return unless itema # 清除窗口內容    case itema[0] # 道具種類分歧    when 0 ; item = $data_items[itema[1]] # 物品      # [HP恢復量, SP(MP)恢復量, X, X, HP恢復率, SP(MP)恢復率, X]      words = $Sword_VX ? [$data_system.terms.hp + '恢復量',       $data_system.terms.mp + '恢復量', '', '', $data_system.terms.hp + '恢復率',       $data_system.terms.mp + '恢復率', ''] : [$data_system.words.hp + '恢復量',       $data_system.words.sp + '恢復量', '', '', $data_system.words.hp + '恢復率',       $data_system.words.sp + '恢復率', '']      if $game_party.sword_synthesize[0][itema[1]] # 公開顯示的情況        amounts = $Sword_VX ? [item.hp_recovery.to_s, item.mp_recovery.to_s, '', '',         item.hp_recovery_rate.to_s, item.mp_recovery_rate.to_s, ''] : [item.recover_hp.to_s,         item.recover_sp.to_s, '', '', item.recover_hp_rate.to_s, item.recover_sp_rate.to_s, '']        if item.parameter_type > 0 # 有設定增加能力值的場合          words[3] = ($Sword_VX ? [$data_system.terms.hp, $data_system.terms.mp,           $data_system.terms.atk, $data_system.terms.def, $data_system.terms.spi,           $data_system.terms.agi] : [$data_system.words.hp, $data_system.words.sp,           $data_system.words.str, $data_system.words.dex, $data_system.words.agi,           $data_system.words.int])[item.parameter_type - 1] + '上限'          amounts[3] = item.parameter_points.to_s        end      else ; amounts = ['??', '??', '', '', '??', '??', ''] # 未公開的場合      end      number = $Sword_VX ? $game_party.item_number(item) :       $game_party.item_number(item.id) # 持有數量    when 1 ; item = $data_weapons[itema[1]] # 武器      # [攻擊, 物防(防禦), 魔防(X), 力量(命中), 靈巧(精神), 速度(敏捷), 魔力(X)]      words = $Sword_VX ? [$data_system.terms.atk, $data_system.terms.def, '', '命中率',       $data_system.terms.spi, $data_system.terms.agi, ''] : [$data_system.words.atk,       $data_system.words.pdef, $data_system.words.mdef, $data_system.words.str,       $data_system.words.dex, $data_system.words.agi, $data_system.words.int]      if $game_party.sword_synthesize[1][itema[1]] # 公開顯示的情況        amounts = $Sword_VX ? [item.atk.to_s, item.def.to_s, '', item.hit.to_s + '%', item.spi.to_s,         item.agi.to_s, ''] : [item.atk.to_s, item.pdef.to_s, item.mdef.to_s, item.str_plus.to_s,         item.dex_plus.to_s, item.agi_plus.to_s, item.int_plus.to_s]      else ; amounts = ['??'] * 7 # 未公開的場合      end      number = $Sword_VX ? $game_party.item_number(item) :       $game_party.weapon_number(item.id) # 持有數量    when 2 ; item = $data_armors[itema[1]] # 防具      # [物防(攻擊), 魔防(防禦), 迴避(X), 力量(迴避), 靈巧(精神), 速度(敏捷), 魔力(X)]      words = $Sword_VX ? [$data_system.terms.atk, $data_system.terms.def, '', '回避率',      $data_system.terms.spi, $data_system.terms.agi, ''] : [$data_system.words.pdef,      $data_system.words.mdef, '回避', $data_system.words.str, $data_system.words.dex,       $data_system.words.agi, $data_system.words.int]      if $game_party.sword_synthesize[2][itema[1]] # 公開顯示的情況        amounts = $Sword_VX ? [item.atk.to_s, item.def.to_s, '', item.eva.to_s + '%',         item.spi.to_s, item.agi.to_s, ''] : [item.pdef.to_s, item.mdef.to_s, item.eva.to_s,         item.str_plus.to_s, item.dex_plus.to_s, item.agi_plus.to_s, item.int_plus.to_s]      else ; amounts = ['??'] * 7 # 未公開的場合      end      number = $Sword_VX ? $game_party.item_number(item) :       $game_party.armor_number(item.id) # 持有數量    end    by, y, x, self.oy = 8, 32, Font.default_size * 5, 0 # 位圖行, 描繪Y, 描繪X, 起始位置    by += self.contents.text_size($game_party.sword_synthesize[itema[0]][itema[1]] ?     item.description : '????????????').width / (self.width - 32) # 說明換行    (0..2).each{|i| by += Sword4_Synthesize[itema[0]][itema[1]][i].size} rescueraise("合成資料不存在,Sword4_Synthesize[#{itema[0]}][#{itema[1]}]未設置") # Error    by -= 1 if $Sword_VX or itema[0] == 0    self.contents = Bitmap.new(self.width - 32, by * 32) # 重新產生位圖    @max_oy = [by * 32 - (@xpvx[1] - @xpvx[2]) + 32, 0].max # 滾動限制    self.contents.font.color = normal_color # 數值和內容    if $game_party.sword_synthesize[itema[0]][itema[1]] # 公開顯示的情況      $Sword_VX ? draw_icon(item.icon_index, 0, 0, true) : # 圖標      contents.blt(0, 0, RPG::Cache.icon(item.icon_name), Rect.new(0 , 0, 24, 24))      contents.draw_text(28, 0, 640, 32, item.name) # 名稱      contents.draw_text(0, 0, self.width - 40, 32, number.to_s, 2) # 持有數      xx = 0      item.description.scan(/./).each{|c| cx = self.contents.text_size(c).width      (xx = 0 ; y += 32) if xx + cx > self.width - 32      contents.draw_text(xx, y, cx, 32, c) ; xx += cx}  # 說明    else # 隱藏顯示的場合      $Sword_VX ? draw_icon(Sword4_Picture, 0, 0, true) : # 圖標      contents.blt(0, 0, RPG::Cache.icon(Sword4_Picture), Rect.new(0 , 0, 24, 24))      contents.draw_text(28, 0, 640, 32, Sword4_NoCommand.empty? ?       item.name : Sword4_NoCommand) # 名稱      contents.draw_text(0, 0, self.width - 40, 32, '??', 2) # 持有數      contents.draw_text(0, 32, 640, 32, '????????????') # 說明    end    probability = [[Sword4_Synthesize[itema[0]][itema[1]][3] +     $game_party.synthesize_multiply[itema[0]][itema[1]], 100].min, 0].max.to_s + '%'    contents.draw_text(x, y + 32, 640, 32, probability) # 成功率    contents.draw_text(x, y + 64, 640, 32, amounts[0])    contents.draw_text(x, y + 96, 640, 32, amounts[1])    contents.draw_text(x, y + 128, 640, 32, amounts[2])    contents.draw_text(self.width / 2 + x, y + 32, 640, 32, amounts[3])    contents.draw_text(self.width / 2 + x, y + 64, 640, 32, amounts[4])    contents.draw_text(self.width / 2 + x, y + 96, 640, 32, amounts[5])    contents.draw_text(self.width / 2 + x, y + 128, 640, 32, amounts[6])    sequence, yy = [Sword4_Synthesize[itema[0]][itema[1]][0].keys.sort,     Sword4_Synthesize[itema[0]][itema[1]][1].keys.sort,     Sword4_Synthesize[itema[0]][itema[1]][2].keys.sort], 7 + y / 32    yyy = 6 ; (yy -= 1 ; yyy = 5) if $Sword_VX or itema[0] == 0    (0...sequence.size).each{|i| sequence[i].each{|ii|     stuff(i, ii, itema[1], yy, itema[0]) ; yy += 1}}    self.contents.font.color = system_color # 用語    contents.draw_text(0, 0, self.width - 64, 32, '持有數:', 2)    contents.draw_text(0, y + 32, 640, 32, '成功率')    contents.draw_text(0, y + 64, 640, 32, words[0])    contents.draw_text(0, y + 96, 640, 32, words[1])    contents.draw_text(0, y + 128, 640, 32, words[2])    contents.draw_text(self.width / 2, y + 32, 640, 32, words[3])    contents.draw_text(self.width / 2, y + 64, 640, 32, words[4])    contents.draw_text(self.width / 2, y + 96, 640, 32, words[5])    contents.draw_text(self.width / 2, y + 128, 640, 32, words[6])    contents.draw_text(0, (yyy + y / 32) * 32, 640, 32, '所需道具')    contents.draw_text(0, (yyy + y / 32) * 32, self.width - 138, 32, '持有數', 2)    contents.draw_text(0, (yyy + y / 32) * 32, self.width - 42, 32, '所需數', 2)    (0..7).each do |i| # 產生「:」      next if i == 3 or i == 7 if $Sword_VX      next if [3, (item.parameter_type > 0 and $game_party.sword_synthesize[0][itema[1]]) ?       nil : 4, 7].include?(i) if itema[0] == 0 # 物品的場合,忽略不必描繪的部份      if i > 3 ; i -= 4        contents.draw_text(self.width / 2 + Font.default_size * 4, 32 * i + 32 + y, 640, 32, ':')      else ; contents.draw_text(Font.default_size * 4, 32 * i + 32 + y, 640, 32, ':')      end    end  end  #-------------------------------------------------------------  #● 所需材料的內容  def stuff(kind, i, item, y, kind2)    # 所需數    Sword4_Synthesize[kind2][item][kind][i] > 9 ?     a = 64 : a = 69    self.contents.draw_text(0, y * 32, @xpvx[0] - Sword4_Width - a, 32,     Sword4_Synthesize[kind2][item][kind][i].to_s, 2)    # 圖示與持有數    case kind    when 0 # 物品(材料)      if $Sword_VX        draw_icon($data_items[i].icon_index, 0, y * 32, true)        items = $game_party.item_number($data_items[i])      else        self.contents.blt(0, y * 32, RPG::Cache.icon(        $data_items[i].icon_name), Rect.new(0 , 0, 24, 24))        items = $game_party.item_number(i)      end      items >= Sword4_Synthesize[kind2][item][0][i] ?      color = normal_color : color = Color.new(255, 64, 0)      self.contents.draw_text(28, y * 32, 640, 32, $data_items[i].name)      # 持有數      self.contents.font.color = color      items > 9 ? a = 160 : a = 165      self.contents.draw_text(0, y * 32,       @xpvx[0] - Sword4_Width - a, 32, items.to_s, 2)      self.contents.font.color = normal_color    when 1 # 武器(材料)      if $Sword_VX        weapon = $game_party.item_number($data_weapons[i])        draw_icon($data_weapons[i].icon_index, 0, y * 32, true)      else        weapon = $game_party.weapon_number(i)        self.contents.blt(0, y * 32, RPG::Cache.icon(        $data_weapons[i].icon_name), Rect.new(0 , 0, 24, 24))      end      weapon >= Sword4_Synthesize[kind2][item][1][i] ?      color = normal_color : color = Color.new(255, 64, 0)      self.contents.draw_text(28, y * 32, 640, 32, $data_weapons[i].name)      # 持有數      self.contents.font.color = color      weapon > 9 ? a = 160 : a = 165      self.contents.draw_text(0, y * 32,       @xpvx[0] - Sword4_Width - a, 32, weapon.to_s, 2)      self.contents.font.color = normal_color    when 2 # 防具(材料)      if $Sword_VX        draw_icon($data_armors[i].icon_index, 0, y * 32, true)        armors = $game_party.item_number($data_armors[i])      else        self.contents.blt(0, y * 32, RPG::Cache.icon(        $data_armors[i].icon_name), Rect.new(0 , 0, 24, 24))        armors = $game_party.armor_number(i)      end      armors >= Sword4_Synthesize[kind2][item][2][i] ?      color = normal_color : color = Color.new(255, 64, 0)      self.contents.draw_text(28, y * 32, 640, 32, $data_armors[i].name)      # 持有數      self.contents.font.color = color      armors > 9 ? a = 160 : a = 165      self.contents.draw_text(0, y * 32,       @xpvx[0] - Sword4_Width - a, 32, armors.to_s, 2)      self.contents.font.color = normal_color    end  endend#=======================================#■ 是否合成提示窗口class WSword_SynthesizeONOFF < Window_Base  include Sword # 連接自定設置  attr_accessor  :index # 游標位置  #-------------------------------------------------------------  #● 初始化物件  def initialize    @xpvx = $Sword_VX ? [Graphics.width, Graphics.height] : [640, 480]    contents = Bitmap.new(@xpvx[0], 32)    @width = contents.text_size(Sword4_Whether).width    @width = 32 if @width  == 0    super((@xpvx[0] - @width) / 2 - 32, (@xpvx[1] - (Font.default_size + 10)*4)/2,     @width + 32, (Font.default_size + 10) * 4)    self.contents = Bitmap.new(width - 32, height - 32)    self.z, @index = 400, 1    refresh  end  #-------------------------------------------------------------  #● 更新內容  def refresh    self.contents.draw_text(0, 0, 640, 32, Sword4_Whether)    self.contents.draw_text(0, 32, @width, 32, '是', 1)    self.contents.draw_text(0, 64, @width, 32, '否', 1)    self.cursor_rect.set(@width / 2 - (Font.default_size * 5 / 2),     @index * 32 + 32, Font.default_size * 5, 32)  end  #-------------------------------------------------------------  #● 更新游標  def update_cursor_rect    $Sword_VX ? Sound.play_cursor : $game_system.se_play($data_system.cursor_se)    @index == 0 ? @index = 1 : @index = 0    self.cursor_rect.set(@width / 2 - (Font.default_size * 5 / 2),     @index * 32 + 32, Font.default_size * 5, 32)  endend#=======================================#■ 合成狀況窗口class WSword_SynthesizeState < Window_Base  include Sword # 連接自定設置  #-------------------------------------------------------------  #● 初始化物件  def initialize    @xpvx = $Sword_VX ? [Graphics.width, Graphics.height] : [640, 480]    super(0, (@xpvx[1] - Font.default_size + 10) / 2 - 32, 64, Font.default_size + 42)    self.contents = Bitmap.new(width - 32, height - 32)    self.z = 410    refresh  end  #-------------------------------------------------------------  #● 更新內容  def refresh(help = nil, color = nil)    return if help == nil    self.contents.clear    self.x = (@xpvx[0] - contents.text_size(help).width) / 2 - 32    self.width = contents.text_size(help).width + 32    self.contents = Bitmap.new(self.width - 32, self.height - 32)    self.contents.font.color = color    self.contents.draw_text(0, 0, self.width, 32, help)  endend#=======================================#■ 合成系統畫面class Sword_Synthesize  include Sword # 連接自定設置  #-------------------------------------------------------------  #● 初始化物件  def initialize(item = nil) ; @item = item ; end  #-------------------------------------------------------------  #● 主處理  def main    @help_window = Window_Help.new # 產生幫助窗口    a = @item == nil ? Sword4_Help[0][0] : Sword4_Help[@item + 1][0]    b = @item == nil ? Sword4_Help[0][1] : Sword4_Help[@item + 1][1]    @help_window.set_text(a, b)    @synthesizestate_wsword = WSword_SynthesizeState.new # 產生合成狀態窗口    @synthesizestate_wsword.visible = false    command    @synthesize_wsword = WSword_Synthesize.new # 產生合成內容窗口    @synthesize_wsword.refresh(@command[1][@command_window.index])    @synthesizeonoff_wsword = WSword_SynthesizeONOFF.new    @synthesizeonoff_wsword.active = false    @synthesizeonoff_wsword.visible = false    Graphics.transition    loop{Graphics.update ; Input.update ; update ; break if $scene != self}    Graphics.freeze    @help_window.dispose ; @command_window.dispose ; @synthesize_wsword.dispose    @synthesizeonoff_wsword.dispose ; @synthesizestate_wsword.dispose  end  #-------------------------------------------------------------  #● 更新  def update    @command_window.update ; @synthesizeonoff_wsword.update    if @command_window.active #○ 當選項窗口活動時      if Input.repeat?(Input::UP) or Input.repeat?(Input::DOWN) # 更新合成內容        @synthesize_wsword.refresh(@command[1][@command_window.index])      elsif Input.press?(Input::LEFT) and @synthesize_wsword.oy > 0 # 向下滾動內容        return if @command[1].empty?        @synthesize_wsword.oy -= Sword4_Roll        @synthesize_wsword.oy = 0 if @synthesize_wsword.oy < 0      elsif Input.press?(Input::RIGHT) # 向上滾動內容        return if @command[1].empty?        if @synthesize_wsword.oy < @synthesize_wsword.max_oy          @synthesize_wsword.oy += Sword4_Roll          @synthesize_wsword.oy = @synthesize_wsword.max_oy if           @synthesize_wsword.oy > @synthesize_wsword.max_oy        end      elsif Input.repeat?(Input::B) # 回到地圖        $Sword_VX ? Sound.play_cancel : $game_system.se_play($data_system.cancel_se)        $scene = Sword4_Menu > 0 ? Scene_Menu.new(Sword4_Menu - 1) : Scene_Map.new      elsif Input.repeat?(Input::C) # 合成物品        # 無法合成的場合        if @command[1][@command_window.index] == false or @no          $Sword_VX ? Sound.play_buzzer : $game_system.se_play($data_system.buzzer_se)          return        end        # 開始合成        success  = true # 用來記錄是否可合成        a = @command[1][@command_window.index]        eval("a = Sword4_Synthesize[#{a[0]}][#{a[1]}]")        # 判斷是否有足夠的材料        for i in 0..2          for ii in a[i]            if $Sword_VX              success = $game_party.item_number($data_items[ii[0]]) >= ii[1] if i == 0              success = $game_party.item_number($data_weapons[ii[0]]) >= ii[1] if i == 1              success = $game_party.item_number($data_armors[ii[0]]) >= ii[1] if i == 2            else              success = $game_party.item_number(ii[0]) >= ii[1] if i == 0              success = $game_party.weapon_number(ii[0]) >= ii[1] if i == 1              success = $game_party.armor_number(ii[0]) >= ii[1] if i == 2            end            # 當其中1個材料不符合的情況            unless success              $Sword_VX ? Sound.play_buzzer : $game_system.se_play($data_system.buzzer_se)               unless Sword4_Message[3][3] == '' # 沒設定訊息的情況下                color = Sword4_Message[3]                @synthesizestate_wsword.visible = true                @synthesizestate_wsword.refresh(                Sword4_Message[3][3], Color.new(color[0], color[1], color[2]))                for i in 1..Sword4_Wait2                  @command_window.update                  @synthesizeonoff_wsword.update                  Graphics.update                end                @synthesizestate_wsword.visible = false              end              return            end          end        end        # 開始活動是否合成選項窗口,不需提示就跳過        @synthesizeonoff_wsword.active = true        unless Sword4_Whether == ''          @synthesizeonoff_wsword.update_cursor_rect if @synthesizeonoff_wsword.index == 0          $Sword_VX ? Sound.play_decision : $game_system.se_play($data_system.decision_se)          @synthesizeonoff_wsword.visible = true          @command_window.active = false        end        return      end    end    #○ 當是否合成選項窗口活動時    if @synthesizeonoff_wsword.active      if Input.repeat?(Input::C) or Sword4_Whether == ''        @synthesizeonoff_wsword.index = 0 if Sword4_Whether == ''        if @synthesizeonoff_wsword.index == 0          # 合成開始,開始消耗材料          ac = @command[1][@command_window.index] ; a = nil ; multiply = nil          eval("multiply = $game_party.synthesize_multiply[#{ac[0]}][#{ac[1]}]          a = Sword4_Synthesize[#{ac[0]}][#{ac[1]}]")          (0..2).each do |i| a[i].each do |ii|            if $Sword_VX              items = $game_party.item_number($data_items[ii[0]])              weapons = $game_party.item_number($data_weapons[ii[0]])              armors = $game_party.item_number($data_armors[ii[0]])              if items >= ii[1] and i == 0 ; $game_party.lose_item($data_items[ii[0]], ii[1])              elsif weapons >= ii[1] and i == 1 ; $game_party.lose_item($data_weapons[ii[0]], ii[1])              elsif armors >= ii[1] and i == 2 ; $game_party.lose_item($data_armors[ii[0]], ii[1])              end            else              items = $game_party.item_number(ii[0])              weapons = $game_party.weapon_number(ii[0])              armors = $game_party.armor_number(ii[0])              if items >= ii[1] and i == 0 ; $game_party.lose_item(ii[0], ii[1])              elsif weapons >= ii[1] and i == 1 ; $game_party.lose_weapon(ii[0], ii[1])              elsif armors >= ii[1] and i == 2 ; $game_party.lose_armor(ii[0], ii[1])              end            end          end ; end          # 結束活動是否合成選項窗口          @synthesizeonoff_wsword.visible = false          @synthesizeonoff_wsword.active = false          @command_window.active = true          # 顯示合成狀態          unless Sword4_Message[0][3] == ''            @synthesizestate_wsword.visible = true            color = Sword4_Message[0]            @synthesizestate_wsword.refresh(            Sword4_Message[0][3], Color.new(color[0], color[1], color[2]))          end          # 演奏合成SE          if Sword4_SE == '' or Sword4_SE == 0 ; 0 # 不演奏SE          elsif Sword4_SE.is_a?(Integer) # 指定動畫SE            searr = []            (0...$data_animations[Sword4_SE].timings.size).each{|i|            searr.push($data_animations[Sword4_SE].timings[i].frame)}            (0...$data_animations[Sword4_SE].frame_max).each do |i|              tim = $Sword_VX ? 3 : 2              tim.times {@command_window.update ; @synthesizeonoff_wsword.update               Graphics.update} # 更新畫面與窗口              ii = searr.index(i)              next unless ii              se = $data_animations[Sword4_SE].timings[ii].se              next if se.name == ''              Audio.se_play("Audio/SE/#{se.name}", se.volume, se.pitch)            end          elsif Sword4_SE.is_a?(String) ; Audio.se_play("Audio/SE/#{Sword4_SE}") # 指定SE          end          (1..Sword4_Wait1).each do |i| # 合成延遲時間            break if Sword4_SE.is_a?(Integer)            @command_window.update            @synthesizeonoff_wsword.update            Graphics.update          end          # 是否合成成功          @synthesizestate_wsword.visible = false          if a[3] + multiply > rand(100) # 計算合成機率與合成成功時的場合            eval("$game_party.synthesize_multiply[#{ac[0]}][#{ac[1]}] +=             #{Sword4_Probability2}") if [1, 2].include?(Sword4_Probability1)            unless Sword4_Message[2][3] == ''              color = Sword4_Message[2]              @synthesizestate_wsword.visible = true              @synthesizestate_wsword.refresh(              Sword4_Message[2][3], Color.new(color[0], color[1], color[2]))            end            a = @command[1][@command_window.index]            # 如果是未合成物品,切換到已合成過            unless $game_party.sword_synthesize[a[0]][a[1]]              $game_party.sword_synthesize[a[0]][a[1]] = true              command(@command_window.index)            end            # 獲取合成的物品            if $Sword_VX              b = @command[1][@command_window.index][1]              case @command[1][@command_window.index][0] # 依道具種類決定執行內容              when 0 ; $game_party.gain_item($data_items[b], 1)              when 1 ; $game_party.gain_item($data_weapons[b], 1)              when 2 ; $game_party.gain_item($data_armors[b], 1)              end            else              case @command[1][@command_window.index][0]              when 0; $game_party.gain_item(@command[1][@command_window.index][1], 1)              when 1;$game_party.gain_weapon(@command[1][@command_window.index][1],1)              when 2; $game_party.gain_armor(@command[1][@command_window.index][1],1)              end            end          else # 合成失敗時            eval("$game_party.synthesize_multiply[#{ac[0]}][#{ac[1]}] +=             #{Sword4_Probability2}") if [0, 2].include?(Sword4_Probability1)            unless Sword4_Message[1][3] == ''              color = Sword4_Message[1]              @synthesizestate_wsword.visible = true               @synthesizestate_wsword.refresh(              Sword4_Message[1][3], Color.new(color[0], color[1], color[2]))            end          end          @synthesize_wsword.refresh(@command[1][@command_window.index])          # 合成訊息時間          for i in 1..Sword4_Wait2            break if Sword4_Message[0][3] == ''            break if Sword4_Message[1][3] == ''            break if Sword4_Message[2][3] == ''            @command_window.update            @synthesizeonoff_wsword.update            Graphics.update          end        else # 選擇否的情況          $Sword_VX ? Sound.play_cancel : $game_system.se_play($data_system.cancel_se)        end        # 結束活動是否合成選項窗口        @synthesizeonoff_wsword.visible = false        @synthesizeonoff_wsword.active = false        @command_window.active = true        @synthesizestate_wsword.visible = false      elsif Input.repeat?(Input::UP) or Input.repeat?(Input::DOWN) # 更新游標        @synthesizeonoff_wsword.update_cursor_rect      end    end  end  #-------------------------------------------------------------  #● 選項的方法  def command(index = 0)    @command_window.dispose if @command_window # 該窗口存在就釋放該窗口    @command = [[], []] # [[道具名稱數組], [道具類型與編號數組]]    # 設定選項文字    for i in 0..2      next unless @item == i unless @item == nil # 不符合顯示標準移到下次      for ii in 1...$game_party.sword_synthesize[i].size        if $game_party.sword_synthesize[i][ii]          case i # 依照道具種類決定執行內容          when 0 ; @command[0].push($data_items[ii].name) ; @command[1].push([0, ii])          when 1 ; @command[0].push($data_weapons[ii].name) ; @command[1].push([1, ii])          when 2 ; @command[0].push($data_armors[ii].name) ; @command[1].push([2, ii])          end        elsif $game_party.sword_synthesize[i][ii] == false          if Sword4_NoCommand == '' # 未合成過的道具用該道具名稱            case i # 依照道具種類決定執行內容            when 0 ; @command[0].push($data_items[ii].name)            when 1 ; @command[0].push($data_weapons[ii].name)            when 2 ; @command[0].push($data_armors[ii].name)            end          else ; @command[0].push(Sword4_NoCommand) # 直接指定未合過的選項文字          end          case i # 依照道具種類決定執行內容          when 0 ; @command[1].push([0, ii, false])          when 1 ; @command[1].push([1, ii, false])          when 2 ; @command[1].push([2, ii, false])          end        end      end    end    @no = true if @command[0].empty?    @command[0] = [' '] if @command[0].empty?    # 產生選項窗口    @command_window = Window_Command.new(Sword4_Width, @command[0])    if $Sword_VX ; @command_window.y = 56 ; @command_window.height = 360    else ; @command_window.y = 64 ; @command_window.height = 416    end    @command_window.index = index    # 無效的顏色    (0...@command[1].size).each{|i|    if $Sword_VX ; @command_window.draw_item(i, false) if @command[1][i][2] == false    else ; @command_window.disable_item(i) if @command[1][i][2] == false    end}  endend
module Sword 
#======================================= 
#★ 魔劍工舖 - 合成系統 1.07 
# [url]http://blog.yam.com/a870053jjkj/[/url] 
#======================================= 
  Sword4_Message, Sword4_Help, Sword4_Synthesize = [], [], [[], [], []] 
#======================================= 
=begin 
● 設置方法 
呼叫方法(全部):$scene = Sword_Synthesize.new 
呼叫方法(物品):$scene = Sword_Synthesize.new(0) 
呼叫方法(武器):$scene = Sword_Synthesize.new(1) 
呼叫方法(防具):$scene = Sword_Synthesize.new(2) 
習得公開:$game_party.sword_synthesize[種類][編號] = true 
習得隱藏:$game_party.sword_synthesize[種類][編號] = false 
遺忘合成:$game_party.sword_synthesize[種類][編號] = nil 
全部公開:$game_party.sword_synthesize(true) 
全部隱藏:$game_party.sword_synthesize(false) 
全部遺忘:$game_party.sword_synthesize(nil) 
機率加乘變量:$game_party.synthesize_multiply[種類][編號] 
=end 
#======================================= 
#● 使用者自定設置 
Sword4_Width = 180 # 設定合成選項的寬度,相對的合成內容寬度也會更動 
Sword4_NoCommand = '?????' # 習得卻未合成過的選項文字,''表示道具名稱 
Sword4_Whether = '是否要消耗材料並合成道具?' # 合成提示文字,''為不提示 
Sword4_Wait1 = 30 # 設定合成中的等待時間,每40約為1秒 
Sword4_Wait2 = 30 # 設定成功或完成的訊息等待時間,每40約為1秒 
Sword4_Roll = 3 # 設定材料5個以上時,滾動效果的速度 
Sword4_Probability1 = 1 # 設定增加成功率的合成結果,0為失敗;1為成功;2是都可 
Sword4_Probability2 = 1 # 設定每合成增加成功機率的數值,因Sword4_Probability1而定 
Sword4_SE = '122-Ice03' # 開始合成時演奏SE檔名或動畫編號,''或0為不演奏 
Sword4_Picture = '049-Skill06' # 當習得未合成時的圖示,XP用字串、VX用數值 
Sword4_Menu = 0 # 關閉合成返回設定,0為地圖;1以上選單,並指著指定的選項 
#-------------------------------------------------------------- 
#○ 合成提示窗口設定 
# Sword4_Message[不必更改] = [紅, 綠, 藍, '文字內容'] 
Sword4_Message[0] = [255, 255, 255, '開始合成中...'] # 正在合成中 
Sword4_Message[1] = [255, 0, 0, '合成失敗']# 合成失敗 
Sword4_Message[2] = [255, 255, 0, '合成成功']# 合成成功 
Sword4_Message[3] = [255, 0, 0, '材料不足'] # 材料不足 
#-------------------------------------------------------------- 
#○ 說明窗口顯示設定 
# Sword4_Help[不必更改] = ['文字內容', 靠邊位置] 
# 靠邊位置:0為靠左邊顯示、1為中央顯示、2為靠右邊顯示 
Sword4_Help[0] = ['合成系統', 0] # 顯示所有物品、武器、防具時 
Sword4_Help[1] = ['物品合成', 0] # 只顯示物品時 
Sword4_Help[2] = ['武器合成', 0] # 只顯示武器時 
Sword4_Help[3] = ['防具合成', 0] # 只顯示防具時 
#-------------------------------------------------------------- 
#○ 合成資料表 
# Sword4_Synthesize[合成種類][合成編號] = [{物品}, {武器}, {防具}, 成功率] 
# 合成種類:0為物品、1為武器、2為防具 
# 物品、武器、防具:「編號=>數量」,每個相同種類材料必須用小逗號分開 
Sword4_Synthesize[0][3] = [{1=>5, 2=>2}, {}, {}, 100] 
Sword4_Synthesize[0][6] = [{4=>5, 5=>2}, {}, {}, 80] 
Sword4_Synthesize[1][4] = [{}, {1=>3}, {}, 70] 
Sword4_Synthesize[1][8] = [{}, {5=>2, 6=>8}, {4=>1}, 70] 
Sword4_Synthesize[2][4] = [{}, {}, {1=>6, 2=>3, 3=>1}, 65] 
#======================================= 
  $Sword ? $Sword[4] = true : $Sword = {4=>true} # 腳本使用標誌 
  ($Sword_VX = false ; RPG::Weather rescue $Sword_VX = true) if $Sword_VX == nil 
end 
#======================================= 
#■ 處理同伴的類別 
class Game_Party 
  include Sword 
  attr_writer    :sword_synthesize # 合成狀態數據 
  attr_accessor :synthesize_multiply # 機率加乘數值 
  #------------------------------------------------------------- 
  #● 初始化物件 
  alias sword4_initialize initialize 
  def initialize 
    sword4_initialize 
    @sword_synthesize = [Array.new($data_items.size + 1){nil},  
    Array.new($data_weapons.size + 1){nil}, Array.new($data_armors.size + 1){nil}] 
    @synthesize_multiply = [Array.new($data_items.size + 1){0},  
    Array.new($data_weapons.size + 1){0}, Array.new($data_armors.size + 1){0}] 
  end 
  #------------------------------------------------------------- 
  #● 讀取與全部修改的方法 
  def sword_synthesize(number = 0) 
    return @sword_synthesize if number == 0 # 傳回值 
    (0..2).each{|i| (1...Sword4_Synthesize[i].size).each{|ii| 
    next unless Sword4_Synthesize[i][ii] ; @sword_synthesize[i][ii] = number}} 
  end 
end 
#======================================= 
#■ 合成系統窗口 
class WSword_Synthesize < Window_Base 
  include Sword 
  attr_accessor :max_oy  # 目前位圖Y座標 
  #------------------------------------------------------------- 
  #● 初始化物件 
  def initialize 
    @xpvx = $Sword_VX ? [Graphics.width, Graphics.height, WLH + 32] : [640, 480, 64]  
    super(Sword4_Width, @xpvx[2], @xpvx[0] - Sword4_Width, @xpvx[1] - @xpvx[2]) 
    self.contents = Bitmap.new(1, 1) ; refresh 
  end 
  #------------------------------------------------------------- 
  #● 更新內容(成品資料) 
  def refresh(itema = nil) 
    self.contents.clear ; return unless itema # 清除窗口內容 
    case itema[0] # 道具種類分歧 
    when 0 ; item = $data_items[itema[1]] # 物品 
      # [HP恢復量, SP(MP)恢復量, X, X, HP恢復率, SP(MP)恢復率, X] 
      words = $Sword_VX ? [$data_system.terms.hp + '恢復量',  
      $data_system.terms.mp + '恢復量', '', '', $data_system.terms.hp + '恢復率',  
      $data_system.terms.mp + '恢復率', ''] : [$data_system.words.hp + '恢復量',  
      $data_system.words.sp + '恢復量', '', '', $data_system.words.hp + '恢復率',  
      $data_system.words.sp + '恢復率', ''] 
      if $game_party.sword_synthesize[0][itema[1]] # 公開顯示的情況 
        amounts = $Sword_VX ? [item.hp_recovery.to_s, item.mp_recovery.to_s, '', '',  
        item.hp_recovery_rate.to_s, item.mp_recovery_rate.to_s, ''] : [item.recover_hp.to_s,  
        item.recover_sp.to_s, '', '', item.recover_hp_rate.to_s, item.recover_sp_rate.to_s, ''] 
        if item.parameter_type > 0 # 有設定增加能力值的場合 
          words[3] = ($Sword_VX ? [$data_system.terms.hp, $data_system.terms.mp,  
          $data_system.terms.atk, $data_system.terms.def, $data_system.terms.spi,  
          $data_system.terms.agi] : [$data_system.words.hp, $data_system.words.sp,  
          $data_system.words.str, $data_system.words.dex, $data_system.words.agi,  
          $data_system.words.int])[item.parameter_type - 1] + '上限' 
          amounts[3] = item.parameter_points.to_s 
        end 
      else ; amounts = ['??', '??', '', '', '??', '??', ''] # 未公開的場合 
      end 
      number = $Sword_VX ? $game_party.item_number(item) :  
      $game_party.item_number(item.id) # 持有數量 
    when 1 ; item = $data_weapons[itema[1]] # 武器 
      # [攻擊, 物防(防禦), 魔防(X), 力量(命中), 靈巧(精神), 速度(敏捷), 魔力(X)] 
      words = $Sword_VX ? [$data_system.terms.atk, $data_system.terms.def, '', '命中率',  
      $data_system.terms.spi, $data_system.terms.agi, ''] : [$data_system.words.atk,  
      $data_system.words.pdef, $data_system.words.mdef, $data_system.words.str,  
      $data_system.words.dex, $data_system.words.agi, $data_system.words.int] 
      if $game_party.sword_synthesize[1][itema[1]] # 公開顯示的情況 
        amounts = $Sword_VX ? [item.atk.to_s, item.def.to_s, '', item.hit.to_s + '%', item.spi.to_s,  
        item.agi.to_s, ''] : [item.atk.to_s, item.pdef.to_s, item.mdef.to_s, item.str_plus.to_s,  
        item.dex_plus.to_s, item.agi_plus.to_s, item.int_plus.to_s] 
      else ; amounts = ['??'] * 7 # 未公開的場合 
      end 
      number = $Sword_VX ? $game_party.item_number(item) :  
      $game_party.weapon_number(item.id) # 持有數量 
    when 2 ; item = $data_armors[itema[1]] # 防具 
      # [物防(攻擊), 魔防(防禦), 迴避(X), 力量(迴避), 靈巧(精神), 速度(敏捷), 魔力(X)] 
      words = $Sword_VX ? [$data_system.terms.atk, $data_system.terms.def, '', '回避率', 
      $data_system.terms.spi, $data_system.terms.agi, ''] : [$data_system.words.pdef, 
      $data_system.words.mdef, '回避', $data_system.words.str, $data_system.words.dex,  
      $data_system.words.agi, $data_system.words.int] 
      if $game_party.sword_synthesize[2][itema[1]] # 公開顯示的情況 
        amounts = $Sword_VX ? [item.atk.to_s, item.def.to_s, '', item.eva.to_s + '%',  
        item.spi.to_s, item.agi.to_s, ''] : [item.pdef.to_s, item.mdef.to_s, item.eva.to_s,  
        item.str_plus.to_s, item.dex_plus.to_s, item.agi_plus.to_s, item.int_plus.to_s] 
      else ; amounts = ['??'] * 7 # 未公開的場合 
      end 
      number = $Sword_VX ? $game_party.item_number(item) :  
      $game_party.armor_number(item.id) # 持有數量 
    end 
    by, y, x, self.oy = 8, 32, Font.default_size * 5, 0 # 位圖行, 描繪Y, 描繪X, 起始位置 
    by += self.contents.text_size($game_party.sword_synthesize[itema[0]][itema[1]] ?  
    item.description : '????????????').width / (self.width - 32) # 說明換行 
    (0..2).each{|i| by += Sword4_Synthesize[itema[0]][itema[1]][i].size} rescue 
raise("合成資料不存在,Sword4_Synthesize[#{itema[0]}][#{itema[1]}]未設置") # Error 
    by -= 1 if $Sword_VX or itema[0] == 0 
    self.contents = Bitmap.new(self.width - 32, by * 32) # 重新產生位圖 
    @max_oy = [by * 32 - (@xpvx[1] - @xpvx[2]) + 32, 0].max # 滾動限制 
    self.contents.font.color = normal_color # 數值和內容 
    if $game_party.sword_synthesize[itema[0]][itema[1]] # 公開顯示的情況 
      $Sword_VX ? draw_icon(item.icon_index, 0, 0, true) : # 圖標 
      contents.blt(0, 0, RPG::Cache.icon(item.icon_name), Rect.new(0 , 0, 24, 24)) 
      contents.draw_text(28, 0, 640, 32, item.name) # 名稱 
      contents.draw_text(0, 0, self.width - 40, 32, number.to_s, 2) # 持有數 
      xx = 0 
      item.description.scan(/./).each{|c| cx = self.contents.text_size(c).width 
      (xx = 0 ; y += 32) if xx + cx > self.width - 32 
      contents.draw_text(xx, y, cx, 32, c) ; xx += cx}  # 說明 
    else # 隱藏顯示的場合 
      $Sword_VX ? draw_icon(Sword4_Picture, 0, 0, true) : # 圖標 
      contents.blt(0, 0, RPG::Cache.icon(Sword4_Picture), Rect.new(0 , 0, 24, 24)) 
      contents.draw_text(28, 0, 640, 32, Sword4_NoCommand.empty? ?  
      item.name : Sword4_NoCommand) # 名稱 
      contents.draw_text(0, 0, self.width - 40, 32, '??', 2) # 持有數 
      contents.draw_text(0, 32, 640, 32, '????????????') # 說明 
    end 
    probability = [[Sword4_Synthesize[itema[0]][itema[1]][3] +  
    $game_party.synthesize_multiply[itema[0]][itema[1]], 100].min, 0].max.to_s + '%' 
    contents.draw_text(x, y + 32, 640, 32, probability) # 成功率 
    contents.draw_text(x, y + 64, 640, 32, amounts[0]) 
    contents.draw_text(x, y + 96, 640, 32, amounts[1]) 
    contents.draw_text(x, y + 128, 640, 32, amounts[2]) 
    contents.draw_text(self.width / 2 + x, y + 32, 640, 32, amounts[3]) 
    contents.draw_text(self.width / 2 + x, y + 64, 640, 32, amounts[4]) 
    contents.draw_text(self.width / 2 + x, y + 96, 640, 32, amounts[5]) 
    contents.draw_text(self.width / 2 + x, y + 128, 640, 32, amounts[6]) 
    sequence, yy = [Sword4_Synthesize[itema[0]][itema[1]][0].keys.sort,  
    Sword4_Synthesize[itema[0]][itema[1]][1].keys.sort,  
    Sword4_Synthesize[itema[0]][itema[1]][2].keys.sort], 7 + y / 32 
    yyy = 6 ; (yy -= 1 ; yyy = 5) if $Sword_VX or itema[0] == 0 
    (0...sequence.size).each{|i| sequence[i].each{|ii|  
    stuff(i, ii, itema[1], yy, itema[0]) ; yy += 1}} 
    self.contents.font.color = system_color # 用語 
    contents.draw_text(0, 0, self.width - 64, 32, '持有數:', 2) 
    contents.draw_text(0, y + 32, 640, 32, '成功率') 
    contents.draw_text(0, y + 64, 640, 32, words[0]) 
    contents.draw_text(0, y + 96, 640, 32, words[1]) 
    contents.draw_text(0, y + 128, 640, 32, words[2]) 
    contents.draw_text(self.width / 2, y + 32, 640, 32, words[3]) 
    contents.draw_text(self.width / 2, y + 64, 640, 32, words[4]) 
    contents.draw_text(self.width / 2, y + 96, 640, 32, words[5]) 
    contents.draw_text(self.width / 2, y + 128, 640, 32, words[6]) 
    contents.draw_text(0, (yyy + y / 32) * 32, 640, 32, '所需道具') 
    contents.draw_text(0, (yyy + y / 32) * 32, self.width - 138, 32, '持有數', 2) 
    contents.draw_text(0, (yyy + y / 32) * 32, self.width - 42, 32, '所需數', 2) 
    (0..7).each do |i| # 產生「:」 
      next if i == 3 or i == 7 if $Sword_VX 
      next if [3, (item.parameter_type > 0 and $game_party.sword_synthesize[0][itema[1]]) ?  
      nil : 4, 7].include?(i) if itema[0] == 0 # 物品的場合,忽略不必描繪的部份 
      if i > 3 ; i -= 4 
        contents.draw_text(self.width / 2 + Font.default_size * 4, 32 * i + 32 + y, 640, 32, ':') 
      else ; contents.draw_text(Font.default_size * 4, 32 * i + 32 + y, 640, 32, ':') 
      end 
    end 
  end 
  #------------------------------------------------------------- 
  #● 所需材料的內容 
  def stuff(kind, i, item, y, kind2) 
    # 所需數 
    Sword4_Synthesize[kind2][item][kind][i] > 9 ?  
    a = 64 : a = 69 
    self.contents.draw_text(0, y * 32, @xpvx[0] - Sword4_Width - a, 32,  
    Sword4_Synthesize[kind2][item][kind][i].to_s, 2) 
    # 圖示與持有數 
    case kind 
    when 0 # 物品(材料) 
      if $Sword_VX 
        draw_icon($data_items[i].icon_index, 0, y * 32, true) 
        items = $game_party.item_number($data_items[i]) 
      else 
        self.contents.blt(0, y * 32, RPG::Cache.icon( 
        $data_items[i].icon_name), Rect.new(0 , 0, 24, 24)) 
        items = $game_party.item_number(i) 
      end 
      items >= Sword4_Synthesize[kind2][item][0][i] ? 
      color = normal_color : color = Color.new(255, 64, 0) 
      self.contents.draw_text(28, y * 32, 640, 32, $data_items[i].name) 
      # 持有數 
      self.contents.font.color = color 
      items > 9 ? a = 160 : a = 165 
      self.contents.draw_text(0, y * 32,  
      @xpvx[0] - Sword4_Width - a, 32, items.to_s, 2) 
      self.contents.font.color = normal_color 
    when 1 # 武器(材料) 
      if $Sword_VX 
        weapon = $game_party.item_number($data_weapons[i]) 
        draw_icon($data_weapons[i].icon_index, 0, y * 32, true) 
      else 
        weapon = $game_party.weapon_number(i) 
        self.contents.blt(0, y * 32, RPG::Cache.icon( 
        $data_weapons[i].icon_name), Rect.new(0 , 0, 24, 24)) 
      end 
      weapon >= Sword4_Synthesize[kind2][item][1][i] ? 
      color = normal_color : color = Color.new(255, 64, 0) 
      self.contents.draw_text(28, y * 32, 640, 32, $data_weapons[i].name) 
      # 持有數 
      self.contents.font.color = color 
      weapon > 9 ? a = 160 : a = 165 
      self.contents.draw_text(0, y * 32,  
      @xpvx[0] - Sword4_Width - a, 32, weapon.to_s, 2) 
      self.contents.font.color = normal_color 
    when 2 # 防具(材料) 
      if $Sword_VX 
        draw_icon($data_armors[i].icon_index, 0, y * 32, true) 
        armors = $game_party.item_number($data_armors[i]) 
      else 
        self.contents.blt(0, y * 32, RPG::Cache.icon( 
        $data_armors[i].icon_name), Rect.new(0 , 0, 24, 24)) 
        armors = $game_party.armor_number(i) 
      end 
      armors >= Sword4_Synthesize[kind2][item][2][i] ? 
      color = normal_color : color = Color.new(255, 64, 0) 
      self.contents.draw_text(28, y * 32, 640, 32, $data_armors[i].name) 
      # 持有數 
      self.contents.font.color = color 
      armors > 9 ? a = 160 : a = 165 
      self.contents.draw_text(0, y * 32,  
      @xpvx[0] - Sword4_Width - a, 32, armors.to_s, 2) 
      self.contents.font.color = normal_color 
    end 
  end 
end 
#======================================= 
#■ 是否合成提示窗口 
class WSword_SynthesizeONOFF < Window_Base 
  include Sword # 連接自定設置 
  attr_accessor  :index # 游標位置 
  #------------------------------------------------------------- 
  #● 初始化物件 
  def initialize 
    @xpvx = $Sword_VX ? [Graphics.width, Graphics.height] : [640, 480] 
    contents = Bitmap.new(@xpvx[0], 32) 
    @width = contents.text_size(Sword4_Whether).width 
    @width = 32 if @width  == 0 
    super((@xpvx[0] - @width) / 2 - 32, (@xpvx[1] - (Font.default_size + 10)*4)/2,  
    @width + 32, (Font.default_size + 10) * 4) 
    self.contents = Bitmap.new(width - 32, height - 32) 
    self.z, @index = 400, 1 
    refresh 
  end 
  #------------------------------------------------------------- 
  #● 更新內容 
  def refresh 
    self.contents.draw_text(0, 0, 640, 32, Sword4_Whether) 
    self.contents.draw_text(0, 32, @width, 32, '是', 1) 
    self.contents.draw_text(0, 64, @width, 32, '否', 1) 
    self.cursor_rect.set(@width / 2 - (Font.default_size * 5 / 2),  
    @index * 32 + 32, Font.default_size * 5, 32) 
  end 
  #------------------------------------------------------------- 
  #● 更新游標 
  def update_cursor_rect 
    $Sword_VX ? Sound.play_cursor : $game_system.se_play($data_system.cursor_se) 
    @index == 0 ? @index = 1 : @index = 0 
    self.cursor_rect.set(@width / 2 - (Font.default_size * 5 / 2),  
    @index * 32 + 32, Font.default_size * 5, 32) 
  end 
end 
#======================================= 
#■ 合成狀況窗口 
class WSword_SynthesizeState < Window_Base 
  include Sword # 連接自定設置 
  #------------------------------------------------------------- 
  #● 初始化物件 
  def initialize 
    @xpvx = $Sword_VX ? [Graphics.width, Graphics.height] : [640, 480] 
    super(0, (@xpvx[1] - Font.default_size + 10) / 2 - 32, 64, Font.default_size + 42) 
    self.contents = Bitmap.new(width - 32, height - 32) 
    self.z = 410 
    refresh 
  end 
  #------------------------------------------------------------- 
  #● 更新內容 
  def refresh(help = nil, color = nil) 
    return if help == nil 
    self.contents.clear 
    self.x = (@xpvx[0] - contents.text_size(help).width) / 2 - 32 
    self.width = contents.text_size(help).width + 32 
    self.contents = Bitmap.new(self.width - 32, self.height - 32) 
    self.contents.font.color = color 
    self.contents.draw_text(0, 0, self.width, 32, help) 
  end 
end 
#======================================= 
#■ 合成系統畫面 
class Sword_Synthesize 
  include Sword # 連接自定設置 
  #------------------------------------------------------------- 
  #● 初始化物件 
  def initialize(item = nil) ; @item = item ; end 
  #------------------------------------------------------------- 
  #● 主處理 
  def main 
    @help_window = Window_Help.new # 產生幫助窗口 
    a = @item == nil ? Sword4_Help[0][0] : Sword4_Help[@item + 1][0] 
    b = @item == nil ? Sword4_Help[0][1] : Sword4_Help[@item + 1][1] 
    @help_window.set_text(a, b) 
    @synthesizestate_wsword = WSword_SynthesizeState.new # 產生合成狀態窗口 
    @synthesizestate_wsword.visible = false 
    command 
    @synthesize_wsword = WSword_Synthesize.new # 產生合成內容窗口 
    @synthesize_wsword.refresh(@command[1][@command_window.index]) 
    @synthesizeonoff_wsword = WSword_SynthesizeONOFF.new 
    @synthesizeonoff_wsword.active = false 
    @synthesizeonoff_wsword.visible = false 
    Graphics.transition 
    loop{Graphics.update ; Input.update ; update ; break if $scene != self} 
    Graphics.freeze 
    @help_window.dispose ; @command_window.dispose ; @synthesize_wsword.dispose 
    @synthesizeonoff_wsword.dispose ; @synthesizestate_wsword.dispose 
  end 
  #------------------------------------------------------------- 
  #● 更新 
  def update 
    @command_window.update ; @synthesizeonoff_wsword.update 
    if @command_window.active #○ 當選項窗口活動時 
      if Input.repeat?(Input::UP) or Input.repeat?(Input::DOWN) # 更新合成內容 
        @synthesize_wsword.refresh(@command[1][@command_window.index]) 
      elsif Input.press?(Input::LEFT) and @synthesize_wsword.oy > 0 # 向下滾動內容 
        return if @command[1].empty? 
        @synthesize_wsword.oy -= Sword4_Roll 
        @synthesize_wsword.oy = 0 if @synthesize_wsword.oy < 0 
      elsif Input.press?(Input::RIGHT) # 向上滾動內容 
        return if @command[1].empty? 
        if @synthesize_wsword.oy < @synthesize_wsword.max_oy 
          @synthesize_wsword.oy += Sword4_Roll 
          @synthesize_wsword.oy = @synthesize_wsword.max_oy if  
          @synthesize_wsword.oy > @synthesize_wsword.max_oy 
        end 
      elsif Input.repeat?(Input::B) # 回到地圖 
        $Sword_VX ? Sound.play_cancel : $game_system.se_play($data_system.cancel_se) 
        $scene = Sword4_Menu > 0 ? Scene_Menu.new(Sword4_Menu - 1) : Scene_Map.new 
      elsif Input.repeat?(Input::C) # 合成物品 
        # 無法合成的場合 
        if @command[1][@command_window.index] == false or @no 
          $Sword_VX ? Sound.play_buzzer : $game_system.se_play($data_system.buzzer_se) 
          return 
        end 
        # 開始合成 
        success  = true # 用來記錄是否可合成 
        a = @command[1][@command_window.index] 
        eval("a = Sword4_Synthesize[#{a[0]}][#{a[1]}]") 
        # 判斷是否有足夠的材料 
        for i in 0..2 
          for ii in a[i] 
            if $Sword_VX 
              success = $game_party.item_number($data_items[ii[0]]) >= ii[1] if i == 0 
              success = $game_party.item_number($data_weapons[ii[0]]) >= ii[1] if i == 1 
              success = $game_party.item_number($data_armors[ii[0]]) >= ii[1] if i == 2 
            else 
              success = $game_party.item_number(ii[0]) >= ii[1] if i == 0 
              success = $game_party.weapon_number(ii[0]) >= ii[1] if i == 1 
              success = $game_party.armor_number(ii[0]) >= ii[1] if i == 2 
            end 
            # 當其中1個材料不符合的情況 
            unless success 
              $Sword_VX ? Sound.play_buzzer : $game_system.se_play($data_system.buzzer_se)  
              unless Sword4_Message[3][3] == '' # 沒設定訊息的情況下 
                color = Sword4_Message[3] 
                @synthesizestate_wsword.visible = true 
                @synthesizestate_wsword.refresh( 
                Sword4_Message[3][3], Color.new(color[0], color[1], color[2])) 
                for i in 1..Sword4_Wait2 
                  @command_window.update 
                  @synthesizeonoff_wsword.update 
                  Graphics.update 
                end 
                @synthesizestate_wsword.visible = false 
              end 
              return 
            end 
          end 
        end 
        # 開始活動是否合成選項窗口,不需提示就跳過 
        @synthesizeonoff_wsword.active = true 
        unless Sword4_Whether == '' 
          @synthesizeonoff_wsword.update_cursor_rect if @synthesizeonoff_wsword.index == 0 
          $Sword_VX ? Sound.play_decision : $game_system.se_play($data_system.decision_se) 
          @synthesizeonoff_wsword.visible = true 
          @command_window.active = false 
        end 
        return 
      end 
    end 
    #○ 當是否合成選項窗口活動時 
    if @synthesizeonoff_wsword.active 
      if Input.repeat?(Input::C) or Sword4_Whether == '' 
        @synthesizeonoff_wsword.index = 0 if Sword4_Whether == '' 
        if @synthesizeonoff_wsword.index == 0 
          # 合成開始,開始消耗材料 
          ac = @command[1][@command_window.index] ; a = nil ; multiply = nil 
          eval("multiply = $game_party.synthesize_multiply[#{ac[0]}][#{ac[1]}] 
          a = Sword4_Synthesize[#{ac[0]}][#{ac[1]}]") 
          (0..2).each do |i| a[i].each do |ii| 
            if $Sword_VX 
              items = $game_party.item_number($data_items[ii[0]]) 
              weapons = $game_party.item_number($data_weapons[ii[0]]) 
              armors = $game_party.item_number($data_armors[ii[0]]) 
              if items >= ii[1] and i == 0 ; $game_party.lose_item($data_items[ii[0]], ii[1]) 
              elsif weapons >= ii[1] and i == 1 ; $game_party.lose_item($data_weapons[ii[0]], ii[1]) 
              elsif armors >= ii[1] and i == 2 ; $game_party.lose_item($data_armors[ii[0]], ii[1]) 
              end 
            else 
              items = $game_party.item_number(ii[0]) 
              weapons = $game_party.weapon_number(ii[0]) 
              armors = $game_party.armor_number(ii[0]) 
              if items >= ii[1] and i == 0 ; $game_party.lose_item(ii[0], ii[1]) 
              elsif weapons >= ii[1] and i == 1 ; $game_party.lose_weapon(ii[0], ii[1]) 
              elsif armors >= ii[1] and i == 2 ; $game_party.lose_armor(ii[0], ii[1]) 
              end 
            end 
          end ; end 
          # 結束活動是否合成選項窗口 
          @synthesizeonoff_wsword.visible = false 
          @synthesizeonoff_wsword.active = false 
          @command_window.active = true 
          # 顯示合成狀態 
          unless Sword4_Message[0][3] == '' 
            @synthesizestate_wsword.visible = true 
            color = Sword4_Message[0] 
            @synthesizestate_wsword.refresh( 
            Sword4_Message[0][3], Color.new(color[0], color[1], color[2])) 
          end 
          # 演奏合成SE 
          if Sword4_SE == '' or Sword4_SE == 0 ; 0 # 不演奏SE 
          elsif Sword4_SE.is_a?(Integer) # 指定動畫SE 
            searr = [] 
            (0...$data_animations[Sword4_SE].timings.size).each{|i| 
            searr.push($data_animations[Sword4_SE].timings[i].frame)} 
            (0...$data_animations[Sword4_SE].frame_max).each do |i| 
              tim = $Sword_VX ? 3 : 2 
              tim.times {@command_window.update ; @synthesizeonoff_wsword.update  
              Graphics.update} # 更新畫面與窗口 
              ii = searr.index(i) 
              next unless ii 
              se = $data_animations[Sword4_SE].timings[ii].se 
              next if se.name == '' 
              Audio.se_play("Audio/SE/#{se.name}", se.volume, se.pitch) 
            end 
          elsif Sword4_SE.is_a?(String) ; Audio.se_play("Audio/SE/#{Sword4_SE}") # 指定SE 
          end 
          (1..Sword4_Wait1).each do |i| # 合成延遲時間 
            break if Sword4_SE.is_a?(Integer) 
            @command_window.update 
            @synthesizeonoff_wsword.update 
            Graphics.update 
          end 
          # 是否合成成功 
          @synthesizestate_wsword.visible = false 
          if a[3] + multiply > rand(100) # 計算合成機率與合成成功時的場合 
            eval("$game_party.synthesize_multiply[#{ac[0]}][#{ac[1]}] +=  
            #{Sword4_Probability2}") if [1, 2].include?(Sword4_Probability1) 
            unless Sword4_Message[2][3] == '' 
              color = Sword4_Message[2] 
              @synthesizestate_wsword.visible = true 
              @synthesizestate_wsword.refresh( 
              Sword4_Message[2][3], Color.new(color[0], color[1], color[2])) 
            end 
            a = @command[1][@command_window.index] 
            # 如果是未合成物品,切換到已合成過 
            unless $game_party.sword_synthesize[a[0]][a[1]] 
              $game_party.sword_synthesize[a[0]][a[1]] = true 
              command(@command_window.index) 
            end 
            # 獲取合成的物品 
            if $Sword_VX 
              b = @command[1][@command_window.index][1] 
              case @command[1][@command_window.index][0] # 依道具種類決定執行內容 
              when 0 ; $game_party.gain_item($data_items[b], 1) 
              when 1 ; $game_party.gain_item($data_weapons[b], 1) 
              when 2 ; $game_party.gain_item($data_armors[b], 1) 
              end 
            else 
              case @command[1][@command_window.index][0] 
              when 0; $game_party.gain_item(@command[1][@command_window.index][1], 1) 
              when 1;$game_party.gain_weapon(@command[1][@command_window.index][1],1) 
              when 2; $game_party.gain_armor(@command[1][@command_window.index][1],1) 
              end 
            end 
          else # 合成失敗時 
            eval("$game_party.synthesize_multiply[#{ac[0]}][#{ac[1]}] +=  
            #{Sword4_Probability2}") if [0, 2].include?(Sword4_Probability1) 
            unless Sword4_Message[1][3] == '' 
              color = Sword4_Message[1] 
              @synthesizestate_wsword.visible = true  
              @synthesizestate_wsword.refresh( 
              Sword4_Message[1][3], Color.new(color[0], color[1], color[2])) 
            end 
          end 
          @synthesize_wsword.refresh(@command[1][@command_window.index]) 
          # 合成訊息時間 
          for i in 1..Sword4_Wait2 
            break if Sword4_Message[0][3] == '' 
            break if Sword4_Message[1][3] == '' 
            break if Sword4_Message[2][3] == '' 
            @command_window.update 
            @synthesizeonoff_wsword.update 
            Graphics.update 
          end 
        else # 選擇否的情況 
          $Sword_VX ? Sound.play_cancel : $game_system.se_play($data_system.cancel_se) 
        end 
        # 結束活動是否合成選項窗口 
        @synthesizeonoff_wsword.visible = false 
        @synthesizeonoff_wsword.active = false 
        @command_window.active = true 
        @synthesizestate_wsword.visible = false 
      elsif Input.repeat?(Input::UP) or Input.repeat?(Input::DOWN) # 更新游標 
        @synthesizeonoff_wsword.update_cursor_rect 
      end 
    end 
  end 
  #------------------------------------------------------------- 
  #● 選項的方法 
  def command(index = 0) 
    @command_window.dispose if @command_window # 該窗口存在就釋放該窗口 
    @command = [[], []] # [[道具名稱數組], [道具類型與編號數組]] 
    # 設定選項文字 
    for i in 0..2 
      next unless @item == i unless @item == nil # 不符合顯示標準移到下次 
      for ii in 1...$game_party.sword_synthesize[i].size 
        if $game_party.sword_synthesize[i][ii] 
          case i # 依照道具種類決定執行內容 
          when 0 ; @command[0].push($data_items[ii].name) ; @command[1].push([0, ii]) 
          when 1 ; @command[0].push($data_weapons[ii].name) ; @command[1].push([1, ii]) 
          when 2 ; @command[0].push($data_armors[ii].name) ; @command[1].push([2, ii]) 
          end 
        elsif $game_party.sword_synthesize[i][ii] == false 
          if Sword4_NoCommand == '' # 未合成過的道具用該道具名稱 
            case i # 依照道具種類決定執行內容 
            when 0 ; @command[0].push($data_items[ii].name) 
            when 1 ; @command[0].push($data_weapons[ii].name) 
            when 2 ; @command[0].push($data_armors[ii].name) 
            end 
          else ; @command[0].push(Sword4_NoCommand) # 直接指定未合過的選項文字 
          end 
          case i # 依照道具種類決定執行內容 
          when 0 ; @command[1].push([0, ii, false]) 
          when 1 ; @command[1].push([1, ii, false]) 
          when 2 ; @command[1].push([2, ii, false]) 
          end 
        end 
      end 
    end 
    @no = true if @command[0].empty? 
    @command[0] = [' '] if @command[0].empty? 
    # 產生選項窗口 
    @command_window = Window_Command.new(Sword4_Width, @command[0]) 
    if $Sword_VX ; @command_window.y = 56 ; @command_window.height = 360 
    else ; @command_window.y = 64 ; @command_window.height = 416 
    end 
    @command_window.index = index 
    # 無效的顏色 
    (0...@command[1].size).each{|i| 
    if $Sword_VX ; @command_window.draw_item(i, false) if @command[1][i][2] == false 
    else ; @command_window.disable_item(i) if @command[1][i][2] == false 
    end} 
  end 
end 
 以上的就是我用的合成系統{:2_276:}
 
 這個是我在合成系統裡的設定
 
 #--------------------------------------------------------------#○ 合成資料表# Sword4_Synthesize[合成種類][合成編號] = [{物品}, {武器}, {防具}, 成功率]# 合成種類:0為物品、1為武器、2為防具# 物品、武器、防具:「編號=>數量」,每個相同種類材料必須用小逗號分開Sword4_Synthesize[1][4] = [{182=>1}, {2=>1}, {}, 80]Sword4_Synthesize[1][6] = [{182=>1}, {12=>1}, {}, 80]Sword4_Synthesize[1][8] = [{183=>1}, {7=>1}, {}, 80]Sword4_Synthesize[1][11] = [{182=>1}, {9=>2, 10=>1}, {}, 80]Sword4_Synthesize[1][72] = [{201=>1,182=>3}, {2=>10}, {}, 100]Sword4_Synthesize[1][106] = [{185=>1}, {101=>1}, {}, 80]Sword4_Synthesize[1][107] = [{182=>1}, {101=>1}, {}, 80]Sword4_Synthesize[1][108] = [{182=>1}, {107=>1}, {}, 80]Sword4_Synthesize[1][109] = [{185=>1}, {108=>1}, {}, 80]Sword4_Synthesize[1][167] = [{202=>1,182=>2, 185=>1}, {101=>10}, {}, 100]Sword4_Synthesize[1][207] = [{184=>1}, {205=>1}, {}, 80]Sword4_Synthesize[1][208] = [{184=>1}, {201=>1}, {}, 80]Sword4_Synthesize[1][209] = [{184=>1}, {208=>1}, {}, 80]Sword4_Synthesize[1][241] = [{203=>1, 184=>3}, {201=>10}, {}, 100]
#-------------------------------------------------------------- 
#○ 合成資料表 
# Sword4_Synthesize[合成種類][合成編號] = [{物品}, {武器}, {防具}, 成功率] 
# 合成種類:0為物品、1為武器、2為防具 
# 物品、武器、防具:「編號=>數量」,每個相同種類材料必須用小逗號分開 
Sword4_Synthesize[1][4] = [{182=>1}, {2=>1}, {}, 80] 
Sword4_Synthesize[1][6] = [{182=>1}, {12=>1}, {}, 80] 
Sword4_Synthesize[1][8] = [{183=>1}, {7=>1}, {}, 80] 
Sword4_Synthesize[1][11] = [{182=>1}, {9=>2, 10=>1}, {}, 80] 
Sword4_Synthesize[1][72] = [{201=>1,182=>3}, {2=>10}, {}, 100] 
Sword4_Synthesize[1][106] = [{185=>1}, {101=>1}, {}, 80] 
Sword4_Synthesize[1][107] = [{182=>1}, {101=>1}, {}, 80] 
Sword4_Synthesize[1][108] = [{182=>1}, {107=>1}, {}, 80] 
Sword4_Synthesize[1][109] = [{185=>1}, {108=>1}, {}, 80] 
Sword4_Synthesize[1][167] = [{202=>1,182=>2, 185=>1}, {101=>10}, {}, 100] 
Sword4_Synthesize[1][207] = [{184=>1}, {205=>1}, {}, 80] 
Sword4_Synthesize[1][208] = [{184=>1}, {201=>1}, {}, 80] 
Sword4_Synthesize[1][209] = [{184=>1}, {208=>1}, {}, 80] 
Sword4_Synthesize[1][241] = [{203=>1, 184=>3}, {201=>10}, {}, 100] 
 
 之後我設了個人物npc,使用了腳本
 
 $scene = Sword_Synthesize.new$game_party.sword_synthesize(false)
$scene = Sword_Synthesize.new 
$game_party.sword_synthesize(false) 
 然後它就這樣了
 
   
 這個是其他的腳本不相容還是我的設定有誤呢?{:2_270:}
 
 求解答,另求解答我出面的2張帖子{:2_249:}
 
 
 | 
 |