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

Project1

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

[已经过期] 某合成系統

[复制链接]

Lv1.梦旅人

梦石
0
星屑
70
在线时间
79 小时
注册时间
2012-9-30
帖子
34
跳转到指定楼层
1
发表于 2012-10-4 15:09:08 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
嗯,又是我{:2_285:}

RUBY 代码复制
  1. module Sword
  2. #=======================================
  3. #★ 魔劍工舖 - 合成系統 1.07
  4. # [url]http://blog.yam.com/a870053jjkj/[/url]
  5. #=======================================
  6.   Sword4_Message, Sword4_Help, Sword4_Synthesize = [], [], [[], [], []]
  7. #=======================================
  8. =begin
  9. ● 設置方法
  10. 呼叫方法(全部):$scene = Sword_Synthesize.new
  11. 呼叫方法(物品):$scene = Sword_Synthesize.new(0)
  12. 呼叫方法(武器):$scene = Sword_Synthesize.new(1)
  13. 呼叫方法(防具):$scene = Sword_Synthesize.new(2)
  14. 習得公開:$game_party.sword_synthesize[種類][編號] = true
  15. 習得隱藏:$game_party.sword_synthesize[種類][編號] = false
  16. 遺忘合成:$game_party.sword_synthesize[種類][編號] = nil
  17. 全部公開:$game_party.sword_synthesize(true)
  18. 全部隱藏:$game_party.sword_synthesize(false)
  19. 全部遺忘:$game_party.sword_synthesize(nil)
  20. 機率加乘變量:$game_party.synthesize_multiply[種類][編號]
  21. =end
  22. #=======================================
  23. #● 使用者自定設置
  24. Sword4_Width = 180 # 設定合成選項的寬度,相對的合成內容寬度也會更動
  25. Sword4_NoCommand = '?????' # 習得卻未合成過的選項文字,''表示道具名稱
  26. Sword4_Whether = '是否要消耗材料並合成道具?' # 合成提示文字,''為不提示
  27. Sword4_Wait1 = 30 # 設定合成中的等待時間,每40約為1秒
  28. Sword4_Wait2 = 30 # 設定成功或完成的訊息等待時間,每40約為1秒
  29. Sword4_Roll = 3 # 設定材料5個以上時,滾動效果的速度
  30. Sword4_Probability1 = 1 # 設定增加成功率的合成結果,0為失敗;1為成功;2是都可
  31. Sword4_Probability2 = 1 # 設定每合成增加成功機率的數值,因Sword4_Probability1而定
  32. Sword4_SE = '122-Ice03' # 開始合成時演奏SE檔名或動畫編號,''或0為不演奏
  33. Sword4_Picture = '049-Skill06' # 當習得未合成時的圖示,XP用字串、VX用數值
  34. Sword4_Menu = 0 # 關閉合成返回設定,0為地圖;1以上選單,並指著指定的選項
  35. #--------------------------------------------------------------
  36. #○ 合成提示窗口設定
  37. # Sword4_Message[不必更改] = [紅, 綠, 藍, '文字內容']
  38. Sword4_Message[0] = [255, 255, 255, '開始合成中...'] # 正在合成中
  39. Sword4_Message[1] = [255, 0, 0, '合成失敗']# 合成失敗
  40. Sword4_Message[2] = [255, 255, 0, '合成成功']# 合成成功
  41. Sword4_Message[3] = [255, 0, 0, '材料不足'] # 材料不足
  42. #--------------------------------------------------------------
  43. #○ 說明窗口顯示設定
  44. # Sword4_Help[不必更改] = ['文字內容', 靠邊位置]
  45. # 靠邊位置:0為靠左邊顯示、1為中央顯示、2為靠右邊顯示
  46. Sword4_Help[0] = ['合成系統', 0] # 顯示所有物品、武器、防具時
  47. Sword4_Help[1] = ['物品合成', 0] # 只顯示物品時
  48. Sword4_Help[2] = ['武器合成', 0] # 只顯示武器時
  49. Sword4_Help[3] = ['防具合成', 0] # 只顯示防具時
  50. #--------------------------------------------------------------
  51. #○ 合成資料表
  52. # Sword4_Synthesize[合成種類][合成編號] = [{物品}, {武器}, {防具}, 成功率]
  53. # 合成種類:0為物品、1為武器、2為防具
  54. # 物品、武器、防具:「編號=>數量」,每個相同種類材料必須用小逗號分開
  55. Sword4_Synthesize[0][3] = [{1=>5, 2=>2}, {}, {}, 100]
  56. Sword4_Synthesize[0][6] = [{4=>5, 5=>2}, {}, {}, 80]
  57. Sword4_Synthesize[1][4] = [{}, {1=>3}, {}, 70]
  58. Sword4_Synthesize[1][8] = [{}, {5=>2, 6=>8}, {4=>1}, 70]
  59. Sword4_Synthesize[2][4] = [{}, {}, {1=>6, 2=>3, 3=>1}, 65]
  60. #=======================================
  61.   $Sword ? $Sword[4] = true : $Sword = {4=>true} # 腳本使用標誌
  62.   ($Sword_VX = false ; RPG::Weather rescue $Sword_VX = true) if $Sword_VX == nil
  63. end
  64. #=======================================
  65. #■ 處理同伴的類別
  66. class Game_Party
  67.   include Sword
  68.   attr_writer    :sword_synthesize # 合成狀態數據
  69.   attr_accessor :synthesize_multiply # 機率加乘數值
  70.   #-------------------------------------------------------------
  71.   #● 初始化物件
  72.   alias sword4_initialize initialize
  73.   def initialize
  74.     sword4_initialize
  75.     @sword_synthesize = [Array.new($data_items.size + 1){nil},
  76.     Array.new($data_weapons.size + 1){nil}, Array.new($data_armors.size + 1){nil}]
  77.     @synthesize_multiply = [Array.new($data_items.size + 1){0},
  78.     Array.new($data_weapons.size + 1){0}, Array.new($data_armors.size + 1){0}]
  79.   end
  80.   #-------------------------------------------------------------
  81.   #● 讀取與全部修改的方法
  82.   def sword_synthesize(number = 0)
  83.     return @sword_synthesize if number == 0 # 傳回值
  84.     (0..2).each{|i| (1...Sword4_Synthesize[i].size).each{|ii|
  85.     next unless Sword4_Synthesize[i][ii] ; @sword_synthesize[i][ii] = number}}
  86.   end
  87. end
  88. #=======================================
  89. #■ 合成系統窗口
  90. class WSword_Synthesize < Window_Base
  91.   include Sword
  92.   attr_accessor :max_oy  # 目前位圖Y座標
  93.   #-------------------------------------------------------------
  94.   #● 初始化物件
  95.   def initialize
  96.     @xpvx = $Sword_VX ? [Graphics.width, Graphics.height, WLH + 32] : [640, 480, 64]
  97.     super(Sword4_Width, @xpvx[2], @xpvx[0] - Sword4_Width, @xpvx[1] - @xpvx[2])
  98.     self.contents = Bitmap.new(1, 1) ; refresh
  99.   end
  100.   #-------------------------------------------------------------
  101.   #● 更新內容(成品資料)
  102.   def refresh(itema = nil)
  103.     self.contents.clear ; return unless itema # 清除窗口內容
  104.     case itema[0] # 道具種類分歧
  105.     when 0 ; item = $data_items[itema[1]] # 物品
  106.       # [HP恢復量, SP(MP)恢復量, X, X, HP恢復率, SP(MP)恢復率, X]
  107.       words = $Sword_VX ? [$data_system.terms.hp + '恢復量',
  108.       $data_system.terms.mp + '恢復量', '', '', $data_system.terms.hp + '恢復率',
  109.       $data_system.terms.mp + '恢復率', ''] : [$data_system.words.hp + '恢復量',
  110.       $data_system.words.sp + '恢復量', '', '', $data_system.words.hp + '恢復率',
  111.       $data_system.words.sp + '恢復率', '']
  112.       if $game_party.sword_synthesize[0][itema[1]] # 公開顯示的情況
  113.         amounts = $Sword_VX ? [item.hp_recovery.to_s, item.mp_recovery.to_s, '', '',
  114.         item.hp_recovery_rate.to_s, item.mp_recovery_rate.to_s, ''] : [item.recover_hp.to_s,
  115.         item.recover_sp.to_s, '', '', item.recover_hp_rate.to_s, item.recover_sp_rate.to_s, '']
  116.         if item.parameter_type > 0 # 有設定增加能力值的場合
  117.           words[3] = ($Sword_VX ? [$data_system.terms.hp, $data_system.terms.mp,
  118.           $data_system.terms.atk, $data_system.terms.def, $data_system.terms.spi,
  119.           $data_system.terms.agi] : [$data_system.words.hp, $data_system.words.sp,
  120.           $data_system.words.str, $data_system.words.dex, $data_system.words.agi,
  121.           $data_system.words.int])[item.parameter_type - 1] + '上限'
  122.           amounts[3] = item.parameter_points.to_s
  123.         end
  124.       else ; amounts = ['??', '??', '', '', '??', '??', ''] # 未公開的場合
  125.       end
  126.       number = $Sword_VX ? $game_party.item_number(item) :
  127.       $game_party.item_number(item.id) # 持有數量
  128.     when 1 ; item = $data_weapons[itema[1]] # 武器
  129.       # [攻擊, 物防(防禦), 魔防(X), 力量(命中), 靈巧(精神), 速度(敏捷), 魔力(X)]
  130.       words = $Sword_VX ? [$data_system.terms.atk, $data_system.terms.def, '', '命中率',
  131.       $data_system.terms.spi, $data_system.terms.agi, ''] : [$data_system.words.atk,
  132.       $data_system.words.pdef, $data_system.words.mdef, $data_system.words.str,
  133.       $data_system.words.dex, $data_system.words.agi, $data_system.words.int]
  134.       if $game_party.sword_synthesize[1][itema[1]] # 公開顯示的情況
  135.         amounts = $Sword_VX ? [item.atk.to_s, item.def.to_s, '', item.hit.to_s + '%', item.spi.to_s,
  136.         item.agi.to_s, ''] : [item.atk.to_s, item.pdef.to_s, item.mdef.to_s, item.str_plus.to_s,
  137.         item.dex_plus.to_s, item.agi_plus.to_s, item.int_plus.to_s]
  138.       else ; amounts = ['??'] * 7 # 未公開的場合
  139.       end
  140.       number = $Sword_VX ? $game_party.item_number(item) :
  141.       $game_party.weapon_number(item.id) # 持有數量
  142.     when 2 ; item = $data_armors[itema[1]] # 防具
  143.       # [物防(攻擊), 魔防(防禦), 迴避(X), 力量(迴避), 靈巧(精神), 速度(敏捷), 魔力(X)]
  144.       words = $Sword_VX ? [$data_system.terms.atk, $data_system.terms.def, '', '回避率',
  145.       $data_system.terms.spi, $data_system.terms.agi, ''] : [$data_system.words.pdef,
  146.       $data_system.words.mdef, '回避', $data_system.words.str, $data_system.words.dex,
  147.       $data_system.words.agi, $data_system.words.int]
  148.       if $game_party.sword_synthesize[2][itema[1]] # 公開顯示的情況
  149.         amounts = $Sword_VX ? [item.atk.to_s, item.def.to_s, '', item.eva.to_s + '%',
  150.         item.spi.to_s, item.agi.to_s, ''] : [item.pdef.to_s, item.mdef.to_s, item.eva.to_s,
  151.         item.str_plus.to_s, item.dex_plus.to_s, item.agi_plus.to_s, item.int_plus.to_s]
  152.       else ; amounts = ['??'] * 7 # 未公開的場合
  153.       end
  154.       number = $Sword_VX ? $game_party.item_number(item) :
  155.       $game_party.armor_number(item.id) # 持有數量
  156.     end
  157.     by, y, x, self.oy = 8, 32, Font.default_size * 5, 0 # 位圖行, 描繪Y, 描繪X, 起始位置
  158.     by += self.contents.text_size($game_party.sword_synthesize[itema[0]][itema[1]] ?
  159.     item.description : '????????????').width / (self.width - 32) # 說明換行
  160.     (0..2).each{|i| by += Sword4_Synthesize[itema[0]][itema[1]][i].size} rescue
  161. raise("合成資料不存在,Sword4_Synthesize[#{itema[0]}][#{itema[1]}]未設置") # Error
  162.     by -= 1 if $Sword_VX or itema[0] == 0
  163.     self.contents = Bitmap.new(self.width - 32, by * 32) # 重新產生位圖
  164.     @max_oy = [by * 32 - (@xpvx[1] - @xpvx[2]) + 32, 0].max # 滾動限制
  165.     self.contents.font.color = normal_color # 數值和內容
  166.     if $game_party.sword_synthesize[itema[0]][itema[1]] # 公開顯示的情況
  167.       $Sword_VX ? draw_icon(item.icon_index, 0, 0, true) : # 圖標
  168.       contents.blt(0, 0, RPG::Cache.icon(item.icon_name), Rect.new(0 , 0, 24, 24))
  169.       contents.draw_text(28, 0, 640, 32, item.name) # 名稱
  170.       contents.draw_text(0, 0, self.width - 40, 32, number.to_s, 2) # 持有數
  171.       xx = 0
  172.       item.description.scan(/./).each{|c| cx = self.contents.text_size(c).width
  173.       (xx = 0 ; y += 32) if xx + cx > self.width - 32
  174.       contents.draw_text(xx, y, cx, 32, c) ; xx += cx}  # 說明
  175.     else # 隱藏顯示的場合
  176.       $Sword_VX ? draw_icon(Sword4_Picture, 0, 0, true) : # 圖標
  177.       contents.blt(0, 0, RPG::Cache.icon(Sword4_Picture), Rect.new(0 , 0, 24, 24))
  178.       contents.draw_text(28, 0, 640, 32, Sword4_NoCommand.empty? ?
  179.       item.name : Sword4_NoCommand) # 名稱
  180.       contents.draw_text(0, 0, self.width - 40, 32, '??', 2) # 持有數
  181.       contents.draw_text(0, 32, 640, 32, '????????????') # 說明
  182.     end
  183.     probability = [[Sword4_Synthesize[itema[0]][itema[1]][3] +
  184.     $game_party.synthesize_multiply[itema[0]][itema[1]], 100].min, 0].max.to_s + '%'
  185.     contents.draw_text(x, y + 32, 640, 32, probability) # 成功率
  186.     contents.draw_text(x, y + 64, 640, 32, amounts[0])
  187.     contents.draw_text(x, y + 96, 640, 32, amounts[1])
  188.     contents.draw_text(x, y + 128, 640, 32, amounts[2])
  189.     contents.draw_text(self.width / 2 + x, y + 32, 640, 32, amounts[3])
  190.     contents.draw_text(self.width / 2 + x, y + 64, 640, 32, amounts[4])
  191.     contents.draw_text(self.width / 2 + x, y + 96, 640, 32, amounts[5])
  192.     contents.draw_text(self.width / 2 + x, y + 128, 640, 32, amounts[6])
  193.     sequence, yy = [Sword4_Synthesize[itema[0]][itema[1]][0].keys.sort,
  194.     Sword4_Synthesize[itema[0]][itema[1]][1].keys.sort,
  195.     Sword4_Synthesize[itema[0]][itema[1]][2].keys.sort], 7 + y / 32
  196.     yyy = 6 ; (yy -= 1 ; yyy = 5) if $Sword_VX or itema[0] == 0
  197.     (0...sequence.size).each{|i| sequence[i].each{|ii|
  198.     stuff(i, ii, itema[1], yy, itema[0]) ; yy += 1}}
  199.     self.contents.font.color = system_color # 用語
  200.     contents.draw_text(0, 0, self.width - 64, 32, '持有數:', 2)
  201.     contents.draw_text(0, y + 32, 640, 32, '成功率')
  202.     contents.draw_text(0, y + 64, 640, 32, words[0])
  203.     contents.draw_text(0, y + 96, 640, 32, words[1])
  204.     contents.draw_text(0, y + 128, 640, 32, words[2])
  205.     contents.draw_text(self.width / 2, y + 32, 640, 32, words[3])
  206.     contents.draw_text(self.width / 2, y + 64, 640, 32, words[4])
  207.     contents.draw_text(self.width / 2, y + 96, 640, 32, words[5])
  208.     contents.draw_text(self.width / 2, y + 128, 640, 32, words[6])
  209.     contents.draw_text(0, (yyy + y / 32) * 32, 640, 32, '所需道具')
  210.     contents.draw_text(0, (yyy + y / 32) * 32, self.width - 138, 32, '持有數', 2)
  211.     contents.draw_text(0, (yyy + y / 32) * 32, self.width - 42, 32, '所需數', 2)
  212.     (0..7).each do |i| # 產生「:」
  213.       next if i == 3 or i == 7 if $Sword_VX
  214.       next if [3, (item.parameter_type > 0 and $game_party.sword_synthesize[0][itema[1]]) ?
  215.       nil : 4, 7].include?(i) if itema[0] == 0 # 物品的場合,忽略不必描繪的部份
  216.       if i > 3 ; i -= 4
  217.         contents.draw_text(self.width / 2 + Font.default_size * 4, 32 * i + 32 + y, 640, 32, ':')
  218.       else ; contents.draw_text(Font.default_size * 4, 32 * i + 32 + y, 640, 32, ':')
  219.       end
  220.     end
  221.   end
  222.   #-------------------------------------------------------------
  223.   #● 所需材料的內容
  224.   def stuff(kind, i, item, y, kind2)
  225.     # 所需數
  226.     Sword4_Synthesize[kind2][item][kind][i] > 9 ?
  227.     a = 64 : a = 69
  228.     self.contents.draw_text(0, y * 32, @xpvx[0] - Sword4_Width - a, 32,
  229.     Sword4_Synthesize[kind2][item][kind][i].to_s, 2)
  230.     # 圖示與持有數
  231.     case kind
  232.     when 0 # 物品(材料)
  233.       if $Sword_VX
  234.         draw_icon($data_items[i].icon_index, 0, y * 32, true)
  235.         items = $game_party.item_number($data_items[i])
  236.       else
  237.         self.contents.blt(0, y * 32, RPG::Cache.icon(
  238.         $data_items[i].icon_name), Rect.new(0 , 0, 24, 24))
  239.         items = $game_party.item_number(i)
  240.       end
  241.       items >= Sword4_Synthesize[kind2][item][0][i] ?
  242.       color = normal_color : color = Color.new(255, 64, 0)
  243.       self.contents.draw_text(28, y * 32, 640, 32, $data_items[i].name)
  244.       # 持有數
  245.       self.contents.font.color = color
  246.       items > 9 ? a = 160 : a = 165
  247.       self.contents.draw_text(0, y * 32,
  248.       @xpvx[0] - Sword4_Width - a, 32, items.to_s, 2)
  249.       self.contents.font.color = normal_color
  250.     when 1 # 武器(材料)
  251.       if $Sword_VX
  252.         weapon = $game_party.item_number($data_weapons[i])
  253.         draw_icon($data_weapons[i].icon_index, 0, y * 32, true)
  254.       else
  255.         weapon = $game_party.weapon_number(i)
  256.         self.contents.blt(0, y * 32, RPG::Cache.icon(
  257.         $data_weapons[i].icon_name), Rect.new(0 , 0, 24, 24))
  258.       end
  259.       weapon >= Sword4_Synthesize[kind2][item][1][i] ?
  260.       color = normal_color : color = Color.new(255, 64, 0)
  261.       self.contents.draw_text(28, y * 32, 640, 32, $data_weapons[i].name)
  262.       # 持有數
  263.       self.contents.font.color = color
  264.       weapon > 9 ? a = 160 : a = 165
  265.       self.contents.draw_text(0, y * 32,
  266.       @xpvx[0] - Sword4_Width - a, 32, weapon.to_s, 2)
  267.       self.contents.font.color = normal_color
  268.     when 2 # 防具(材料)
  269.       if $Sword_VX
  270.         draw_icon($data_armors[i].icon_index, 0, y * 32, true)
  271.         armors = $game_party.item_number($data_armors[i])
  272.       else
  273.         self.contents.blt(0, y * 32, RPG::Cache.icon(
  274.         $data_armors[i].icon_name), Rect.new(0 , 0, 24, 24))
  275.         armors = $game_party.armor_number(i)
  276.       end
  277.       armors >= Sword4_Synthesize[kind2][item][2][i] ?
  278.       color = normal_color : color = Color.new(255, 64, 0)
  279.       self.contents.draw_text(28, y * 32, 640, 32, $data_armors[i].name)
  280.       # 持有數
  281.       self.contents.font.color = color
  282.       armors > 9 ? a = 160 : a = 165
  283.       self.contents.draw_text(0, y * 32,
  284.       @xpvx[0] - Sword4_Width - a, 32, armors.to_s, 2)
  285.       self.contents.font.color = normal_color
  286.     end
  287.   end
  288. end
  289. #=======================================
  290. #■ 是否合成提示窗口
  291. class WSword_SynthesizeONOFF < Window_Base
  292.   include Sword # 連接自定設置
  293.   attr_accessor  :index # 游標位置
  294.   #-------------------------------------------------------------
  295.   #● 初始化物件
  296.   def initialize
  297.     @xpvx = $Sword_VX ? [Graphics.width, Graphics.height] : [640, 480]
  298.     contents = Bitmap.new(@xpvx[0], 32)
  299.     @width = contents.text_size(Sword4_Whether).width
  300.     @width = 32 if @width  == 0
  301.     super((@xpvx[0] - @width) / 2 - 32, (@xpvx[1] - (Font.default_size + 10)*4)/2,
  302.     @width + 32, (Font.default_size + 10) * 4)
  303.     self.contents = Bitmap.new(width - 32, height - 32)
  304.     self.z, @index = 400, 1
  305.     refresh
  306.   end
  307.   #-------------------------------------------------------------
  308.   #● 更新內容
  309.   def refresh
  310.     self.contents.draw_text(0, 0, 640, 32, Sword4_Whether)
  311.     self.contents.draw_text(0, 32, @width, 32, '是', 1)
  312.     self.contents.draw_text(0, 64, @width, 32, '否', 1)
  313.     self.cursor_rect.set(@width / 2 - (Font.default_size * 5 / 2),
  314.     @index * 32 + 32, Font.default_size * 5, 32)
  315.   end
  316.   #-------------------------------------------------------------
  317.   #● 更新游標
  318.   def update_cursor_rect
  319.     $Sword_VX ? Sound.play_cursor : $game_system.se_play($data_system.cursor_se)
  320.     @index == 0 ? @index = 1 : @index = 0
  321.     self.cursor_rect.set(@width / 2 - (Font.default_size * 5 / 2),
  322.     @index * 32 + 32, Font.default_size * 5, 32)
  323.   end
  324. end
  325. #=======================================
  326. #■ 合成狀況窗口
  327. class WSword_SynthesizeState < Window_Base
  328.   include Sword # 連接自定設置
  329.   #-------------------------------------------------------------
  330.   #● 初始化物件
  331.   def initialize
  332.     @xpvx = $Sword_VX ? [Graphics.width, Graphics.height] : [640, 480]
  333.     super(0, (@xpvx[1] - Font.default_size + 10) / 2 - 32, 64, Font.default_size + 42)
  334.     self.contents = Bitmap.new(width - 32, height - 32)
  335.     self.z = 410
  336.     refresh
  337.   end
  338.   #-------------------------------------------------------------
  339.   #● 更新內容
  340.   def refresh(help = nil, color = nil)
  341.     return if help == nil
  342.     self.contents.clear
  343.     self.x = (@xpvx[0] - contents.text_size(help).width) / 2 - 32
  344.     self.width = contents.text_size(help).width + 32
  345.     self.contents = Bitmap.new(self.width - 32, self.height - 32)
  346.     self.contents.font.color = color
  347.     self.contents.draw_text(0, 0, self.width, 32, help)
  348.   end
  349. end
  350. #=======================================
  351. #■ 合成系統畫面
  352. class Sword_Synthesize
  353.   include Sword # 連接自定設置
  354.   #-------------------------------------------------------------
  355.   #● 初始化物件
  356.   def initialize(item = nil) ; @item = item ; end
  357.   #-------------------------------------------------------------
  358.   #● 主處理
  359.   def main
  360.     @help_window = Window_Help.new # 產生幫助窗口
  361.     a = @item == nil ? Sword4_Help[0][0] : Sword4_Help[@item + 1][0]
  362.     b = @item == nil ? Sword4_Help[0][1] : Sword4_Help[@item + 1][1]
  363.     @help_window.set_text(a, b)
  364.     @synthesizestate_wsword = WSword_SynthesizeState.new # 產生合成狀態窗口
  365.     @synthesizestate_wsword.visible = false
  366.     command
  367.     @synthesize_wsword = WSword_Synthesize.new # 產生合成內容窗口
  368.     @synthesize_wsword.refresh(@command[1][@command_window.index])
  369.     @synthesizeonoff_wsword = WSword_SynthesizeONOFF.new
  370.     @synthesizeonoff_wsword.active = false
  371.     @synthesizeonoff_wsword.visible = false
  372.     Graphics.transition
  373.     loop{Graphics.update ; Input.update ; update ; break if $scene != self}
  374.     Graphics.freeze
  375.     @help_window.dispose ; @command_window.dispose ; @synthesize_wsword.dispose
  376.     @synthesizeonoff_wsword.dispose ; @synthesizestate_wsword.dispose
  377.   end
  378.   #-------------------------------------------------------------
  379.   #● 更新
  380.   def update
  381.     @command_window.update ; @synthesizeonoff_wsword.update
  382.     if @command_window.active #○ 當選項窗口活動時
  383.       if Input.repeat?(Input::UP) or Input.repeat?(Input::DOWN) # 更新合成內容
  384.         @synthesize_wsword.refresh(@command[1][@command_window.index])
  385.       elsif Input.press?(Input::LEFT) and @synthesize_wsword.oy > 0 # 向下滾動內容
  386.         return if @command[1].empty?
  387.         @synthesize_wsword.oy -= Sword4_Roll
  388.         @synthesize_wsword.oy = 0 if @synthesize_wsword.oy < 0
  389.       elsif Input.press?(Input::RIGHT) # 向上滾動內容
  390.         return if @command[1].empty?
  391.         if @synthesize_wsword.oy < @synthesize_wsword.max_oy
  392.           @synthesize_wsword.oy += Sword4_Roll
  393.           @synthesize_wsword.oy = @synthesize_wsword.max_oy if
  394.           @synthesize_wsword.oy > @synthesize_wsword.max_oy
  395.         end
  396.       elsif Input.repeat?(Input::B) # 回到地圖
  397.         $Sword_VX ? Sound.play_cancel : $game_system.se_play($data_system.cancel_se)
  398.         $scene = Sword4_Menu > 0 ? Scene_Menu.new(Sword4_Menu - 1) : Scene_Map.new
  399.       elsif Input.repeat?(Input::C) # 合成物品
  400.         # 無法合成的場合
  401.         if @command[1][@command_window.index] == false or @no
  402.           $Sword_VX ? Sound.play_buzzer : $game_system.se_play($data_system.buzzer_se)
  403.           return
  404.         end
  405.         # 開始合成
  406.         success  = true # 用來記錄是否可合成
  407.         a = @command[1][@command_window.index]
  408.         eval("a = Sword4_Synthesize[#{a[0]}][#{a[1]}]")
  409.         # 判斷是否有足夠的材料
  410.         for i in 0..2
  411.           for ii in a[i]
  412.             if $Sword_VX
  413.               success = $game_party.item_number($data_items[ii[0]]) >= ii[1] if i == 0
  414.               success = $game_party.item_number($data_weapons[ii[0]]) >= ii[1] if i == 1
  415.               success = $game_party.item_number($data_armors[ii[0]]) >= ii[1] if i == 2
  416.             else
  417.               success = $game_party.item_number(ii[0]) >= ii[1] if i == 0
  418.               success = $game_party.weapon_number(ii[0]) >= ii[1] if i == 1
  419.               success = $game_party.armor_number(ii[0]) >= ii[1] if i == 2
  420.             end
  421.             # 當其中1個材料不符合的情況
  422.             unless success
  423.               $Sword_VX ? Sound.play_buzzer : $game_system.se_play($data_system.buzzer_se)
  424.               unless Sword4_Message[3][3] == '' # 沒設定訊息的情況下
  425.                 color = Sword4_Message[3]
  426.                 @synthesizestate_wsword.visible = true
  427.                 @synthesizestate_wsword.refresh(
  428.                 Sword4_Message[3][3], Color.new(color[0], color[1], color[2]))
  429.                 for i in 1..Sword4_Wait2
  430.                   @command_window.update
  431.                   @synthesizeonoff_wsword.update
  432.                   Graphics.update
  433.                 end
  434.                 @synthesizestate_wsword.visible = false
  435.               end
  436.               return
  437.             end
  438.           end
  439.         end
  440.         # 開始活動是否合成選項窗口,不需提示就跳過
  441.         @synthesizeonoff_wsword.active = true
  442.         unless Sword4_Whether == ''
  443.           @synthesizeonoff_wsword.update_cursor_rect if @synthesizeonoff_wsword.index == 0
  444.           $Sword_VX ? Sound.play_decision : $game_system.se_play($data_system.decision_se)
  445.           @synthesizeonoff_wsword.visible = true
  446.           @command_window.active = false
  447.         end
  448.         return
  449.       end
  450.     end
  451.     #○ 當是否合成選項窗口活動時
  452.     if @synthesizeonoff_wsword.active
  453.       if Input.repeat?(Input::C) or Sword4_Whether == ''
  454.         @synthesizeonoff_wsword.index = 0 if Sword4_Whether == ''
  455.         if @synthesizeonoff_wsword.index == 0
  456.           # 合成開始,開始消耗材料
  457.           ac = @command[1][@command_window.index] ; a = nil ; multiply = nil
  458.           eval("multiply = $game_party.synthesize_multiply[#{ac[0]}][#{ac[1]}]
  459.           a = Sword4_Synthesize[#{ac[0]}][#{ac[1]}]")
  460.           (0..2).each do |i| a[i].each do |ii|
  461.             if $Sword_VX
  462.               items = $game_party.item_number($data_items[ii[0]])
  463.               weapons = $game_party.item_number($data_weapons[ii[0]])
  464.               armors = $game_party.item_number($data_armors[ii[0]])
  465.               if items >= ii[1] and i == 0 ; $game_party.lose_item($data_items[ii[0]], ii[1])
  466.               elsif weapons >= ii[1] and i == 1 ; $game_party.lose_item($data_weapons[ii[0]], ii[1])
  467.               elsif armors >= ii[1] and i == 2 ; $game_party.lose_item($data_armors[ii[0]], ii[1])
  468.               end
  469.             else
  470.               items = $game_party.item_number(ii[0])
  471.               weapons = $game_party.weapon_number(ii[0])
  472.               armors = $game_party.armor_number(ii[0])
  473.               if items >= ii[1] and i == 0 ; $game_party.lose_item(ii[0], ii[1])
  474.               elsif weapons >= ii[1] and i == 1 ; $game_party.lose_weapon(ii[0], ii[1])
  475.               elsif armors >= ii[1] and i == 2 ; $game_party.lose_armor(ii[0], ii[1])
  476.               end
  477.             end
  478.           end ; end
  479.           # 結束活動是否合成選項窗口
  480.           @synthesizeonoff_wsword.visible = false
  481.           @synthesizeonoff_wsword.active = false
  482.           @command_window.active = true
  483.           # 顯示合成狀態
  484.           unless Sword4_Message[0][3] == ''
  485.             @synthesizestate_wsword.visible = true
  486.             color = Sword4_Message[0]
  487.             @synthesizestate_wsword.refresh(
  488.             Sword4_Message[0][3], Color.new(color[0], color[1], color[2]))
  489.           end
  490.           # 演奏合成SE
  491.           if Sword4_SE == '' or Sword4_SE == 0 ; 0 # 不演奏SE
  492.           elsif Sword4_SE.is_a?(Integer) # 指定動畫SE
  493.             searr = []
  494.             (0...$data_animations[Sword4_SE].timings.size).each{|i|
  495.             searr.push($data_animations[Sword4_SE].timings[i].frame)}
  496.             (0...$data_animations[Sword4_SE].frame_max).each do |i|
  497.               tim = $Sword_VX ? 3 : 2
  498.               tim.times {@command_window.update ; @synthesizeonoff_wsword.update
  499.               Graphics.update} # 更新畫面與窗口
  500.               ii = searr.index(i)
  501.               next unless ii
  502.               se = $data_animations[Sword4_SE].timings[ii].se
  503.               next if se.name == ''
  504.               Audio.se_play("Audio/SE/#{se.name}", se.volume, se.pitch)
  505.             end
  506.           elsif Sword4_SE.is_a?(String) ; Audio.se_play("Audio/SE/#{Sword4_SE}") # 指定SE
  507.           end
  508.           (1..Sword4_Wait1).each do |i| # 合成延遲時間
  509.             break if Sword4_SE.is_a?(Integer)
  510.             @command_window.update
  511.             @synthesizeonoff_wsword.update
  512.             Graphics.update
  513.           end
  514.           # 是否合成成功
  515.           @synthesizestate_wsword.visible = false
  516.           if a[3] + multiply > rand(100) # 計算合成機率與合成成功時的場合
  517.             eval("$game_party.synthesize_multiply[#{ac[0]}][#{ac[1]}] +=
  518.             #{Sword4_Probability2}") if [1, 2].include?(Sword4_Probability1)
  519.             unless Sword4_Message[2][3] == ''
  520.               color = Sword4_Message[2]
  521.               @synthesizestate_wsword.visible = true
  522.               @synthesizestate_wsword.refresh(
  523.               Sword4_Message[2][3], Color.new(color[0], color[1], color[2]))
  524.             end
  525.             a = @command[1][@command_window.index]
  526.             # 如果是未合成物品,切換到已合成過
  527.             unless $game_party.sword_synthesize[a[0]][a[1]]
  528.               $game_party.sword_synthesize[a[0]][a[1]] = true
  529.               command(@command_window.index)
  530.             end
  531.             # 獲取合成的物品
  532.             if $Sword_VX
  533.               b = @command[1][@command_window.index][1]
  534.               case @command[1][@command_window.index][0] # 依道具種類決定執行內容
  535.               when 0 ; $game_party.gain_item($data_items[b], 1)
  536.               when 1 ; $game_party.gain_item($data_weapons[b], 1)
  537.               when 2 ; $game_party.gain_item($data_armors[b], 1)
  538.               end
  539.             else
  540.               case @command[1][@command_window.index][0]
  541.               when 0; $game_party.gain_item(@command[1][@command_window.index][1], 1)
  542.               when 1;$game_party.gain_weapon(@command[1][@command_window.index][1],1)
  543.               when 2; $game_party.gain_armor(@command[1][@command_window.index][1],1)
  544.               end
  545.             end
  546.           else # 合成失敗時
  547.             eval("$game_party.synthesize_multiply[#{ac[0]}][#{ac[1]}] +=
  548.             #{Sword4_Probability2}") if [0, 2].include?(Sword4_Probability1)
  549.             unless Sword4_Message[1][3] == ''
  550.               color = Sword4_Message[1]
  551.               @synthesizestate_wsword.visible = true
  552.               @synthesizestate_wsword.refresh(
  553.               Sword4_Message[1][3], Color.new(color[0], color[1], color[2]))
  554.             end
  555.           end
  556.           @synthesize_wsword.refresh(@command[1][@command_window.index])
  557.           # 合成訊息時間
  558.           for i in 1..Sword4_Wait2
  559.             break if Sword4_Message[0][3] == ''
  560.             break if Sword4_Message[1][3] == ''
  561.             break if Sword4_Message[2][3] == ''
  562.             @command_window.update
  563.             @synthesizeonoff_wsword.update
  564.             Graphics.update
  565.           end
  566.         else # 選擇否的情況
  567.           $Sword_VX ? Sound.play_cancel : $game_system.se_play($data_system.cancel_se)
  568.         end
  569.         # 結束活動是否合成選項窗口
  570.         @synthesizeonoff_wsword.visible = false
  571.         @synthesizeonoff_wsword.active = false
  572.         @command_window.active = true
  573.         @synthesizestate_wsword.visible = false
  574.       elsif Input.repeat?(Input::UP) or Input.repeat?(Input::DOWN) # 更新游標
  575.         @synthesizeonoff_wsword.update_cursor_rect
  576.       end
  577.     end
  578.   end
  579.   #-------------------------------------------------------------
  580.   #● 選項的方法
  581.   def command(index = 0)
  582.     @command_window.dispose if @command_window # 該窗口存在就釋放該窗口
  583.     @command = [[], []] # [[道具名稱數組], [道具類型與編號數組]]
  584.     # 設定選項文字
  585.     for i in 0..2
  586.       next unless @item == i unless @item == nil # 不符合顯示標準移到下次
  587.       for ii in 1...$game_party.sword_synthesize[i].size
  588.         if $game_party.sword_synthesize[i][ii]
  589.           case i # 依照道具種類決定執行內容
  590.           when 0 ; @command[0].push($data_items[ii].name) ; @command[1].push([0, ii])
  591.           when 1 ; @command[0].push($data_weapons[ii].name) ; @command[1].push([1, ii])
  592.           when 2 ; @command[0].push($data_armors[ii].name) ; @command[1].push([2, ii])
  593.           end
  594.         elsif $game_party.sword_synthesize[i][ii] == false
  595.           if Sword4_NoCommand == '' # 未合成過的道具用該道具名稱
  596.             case i # 依照道具種類決定執行內容
  597.             when 0 ; @command[0].push($data_items[ii].name)
  598.             when 1 ; @command[0].push($data_weapons[ii].name)
  599.             when 2 ; @command[0].push($data_armors[ii].name)
  600.             end
  601.           else ; @command[0].push(Sword4_NoCommand) # 直接指定未合過的選項文字
  602.           end
  603.           case i # 依照道具種類決定執行內容
  604.           when 0 ; @command[1].push([0, ii, false])
  605.           when 1 ; @command[1].push([1, ii, false])
  606.           when 2 ; @command[1].push([2, ii, false])
  607.           end
  608.         end
  609.       end
  610.     end
  611.     @no = true if @command[0].empty?
  612.     @command[0] = [' '] if @command[0].empty?
  613.     # 產生選項窗口
  614.     @command_window = Window_Command.new(Sword4_Width, @command[0])
  615.     if $Sword_VX ; @command_window.y = 56 ; @command_window.height = 360
  616.     else ; @command_window.y = 64 ; @command_window.height = 416
  617.     end
  618.     @command_window.index = index
  619.     # 無效的顏色
  620.     (0...@command[1].size).each{|i|
  621.     if $Sword_VX ; @command_window.draw_item(i, false) if @command[1][i][2] == false
  622.     else ; @command_window.disable_item(i) if @command[1][i][2] == false
  623.     end}
  624.   end
  625. end


以上的就是我用的合成系統{:2_276:}

這個是我在合成系統裡的設定
RUBY 代码复制
  1. #--------------------------------------------------------------
  2. #○ 合成資料表
  3. # Sword4_Synthesize[合成種類][合成編號] = [{物品}, {武器}, {防具}, 成功率]
  4. # 合成種類:0為物品、1為武器、2為防具
  5. # 物品、武器、防具:「編號=>數量」,每個相同種類材料必須用小逗號分開
  6. Sword4_Synthesize[1][4] = [{182=>1}, {2=>1}, {}, 80]
  7. Sword4_Synthesize[1][6] = [{182=>1}, {12=>1}, {}, 80]
  8. Sword4_Synthesize[1][8] = [{183=>1}, {7=>1}, {}, 80]
  9. Sword4_Synthesize[1][11] = [{182=>1}, {9=>2, 10=>1}, {}, 80]
  10. Sword4_Synthesize[1][72] = [{201=>1,182=>3}, {2=>10}, {}, 100]
  11. Sword4_Synthesize[1][106] = [{185=>1}, {101=>1}, {}, 80]
  12. Sword4_Synthesize[1][107] = [{182=>1}, {101=>1}, {}, 80]
  13. Sword4_Synthesize[1][108] = [{182=>1}, {107=>1}, {}, 80]
  14. Sword4_Synthesize[1][109] = [{185=>1}, {108=>1}, {}, 80]
  15. Sword4_Synthesize[1][167] = [{202=>1,182=>2, 185=>1}, {101=>10}, {}, 100]
  16. Sword4_Synthesize[1][207] = [{184=>1}, {205=>1}, {}, 80]
  17. Sword4_Synthesize[1][208] = [{184=>1}, {201=>1}, {}, 80]
  18. Sword4_Synthesize[1][209] = [{184=>1}, {208=>1}, {}, 80]
  19. Sword4_Synthesize[1][241] = [{203=>1, 184=>3}, {201=>10}, {}, 100]



之後我設了個人物npc,使用了腳本
RUBY 代码复制
  1. $scene = Sword_Synthesize.new
  2. $game_party.sword_synthesize(false)


然後它就這樣了


這個是其他的腳本不相容還是我的設定有誤呢?{:2_270:}

求解答,另求解答我出面的2張帖子{:2_249:}

点评

提问前用发表求助设置悬赏没准会有人帮你。  发表于 2012-10-5 13:25
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

GMT+8, 2024-11-16 09:40

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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