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

Project1

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

[已经解决] 鍛造屋腳本問題

[复制链接]

Lv1.梦旅人

梦石
0
星屑
52
在线时间
135 小时
注册时间
2011-11-5
帖子
83
跳转到指定楼层
1
发表于 2013-8-22 18:51:50 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 ji3rul4coco 于 2013-8-22 19:28 编辑

問題如下:

Q1(紅框):想把其中強化的功能去除,退出可去可不去(請問日文"退出"在哪改)?

Q2(藍框):因為我有用第二貨幣腳本,所以想改窗口高度,請問在哪修改?

Q3(綠框):因為顯示屬性對比時會遮住人物,所以想改窗口寬度,請問在哪修改?

Q4(綠框):想把成人物行走圖改成頭像(或者在腳本裡設定,從picture讀取圖片)?

Q5:希望看得懂得大大幫忙翻譯一下,我用的是google翻譯,不過看不懂翻譯結果=3=......

      when M_S_C; text = "#{item.name}を生成しました"
      when M_S_S; text = "#{item.name}に強化しました"
      when M_N_P; text = "所持金錢不足"
      when M_N_I; text = "所持素材不足"
      when M_N_N; text = "これ以上、持てません"
      when M_E_N; text = "裝備できません"
      when M_E_D; text = "#{item.name}の裝備を外しました"
      when M_E_C; text = "#{item.name}の裝備を■更しました"
      when M_O_I; text = "所持品に入れました"

其他Q:請各位大大幫忙將運行腳本時會顯示日文的部分改成中文(測試時不曉得有沒有遺漏,要改的應該都在Q5了)









以下為腳本(按順序排列)

鍛造屋

RUBY 代码复制
  1. #==============================================================================
  2. # ■ VXAce-RGSS3-16 鍛冶屋 [Ver.1.0.0]             by Claimh
  3. #------------------------------------------------------------------------------
  4. # ・武器/防具の鍛造・強化を行う鍛冶屋
  5. # ・必要條件を滿たせば、必ず成功する
  6. # ・使用可能な條件
  7. #    - お金
  8. #    - アイテムの有無
  9. # ・鍛冶成功時にはお金とアイテム(消耗品のみ)が減算される
  10. #------------------------------------------------------------------------------
  11. #【畫面操作】
  12. #  Rボタン       : パーティーメンバー表示(右)切り替え
  13. #  Lボタン       : ステータス表示(下)切り替え
  14. #  Aボタン       : アイテム詳細表示(ENABLE_INFO=trueの場合のみ)
  15. #  ← → ボタン  : カテゴリ切り替え(カテゴリが複數ある場合のみ)
  16. #------------------------------------------------------------------------------
  17. # ★鍛冶屋の呼び出し方
  18. #  SceneManager.call(Scene_Blacksmith)
  19. #------------------------------------------------------------------------------
  20. # ★武器の鍛造 表示切り替え
  21. #  $game_system.bs.c_w[武器ID].visible = flag
  22. #     flag : 表示狀態(true=表示  false=非表示)
  23. #------------------------------------------------------------------------------
  24. # ★防具の鍛造 表示切り替え
  25. #  $game_system.bs.c_a[防具ID].visible = flag
  26. #     flag : 表示狀態(true=表示  false=非表示)
  27. #------------------------------------------------------------------------------
  28. # ★武器の強化 表示切り替え
  29. #  $game_system.bs.s_w[武器ID][強化後の武器ID].visible = flag
  30. #     flag : 表示狀態(true=表示  false=非表示)
  31. #------------------------------------------------------------------------------
  32. # ★防具の強化 表示切り替え
  33. #  $game_system.bs.s_a[防具ID][強化後の防具ID].visible = flag
  34. #     flag : 表示狀態(true=表示  false=非表示)
  35. #==============================================================================
  36.  
  37. module Blacksmith
  38.   CT_ALL = 0
  39. ### システム設定 ###############################################################
  40.   # システムコマンド(1個以上選■)
  41.   #   0 : 鍛造
  42.   #   1 : 強化
  43.   #   2 : やめる
  44.   SYS_CMD = [0, 1, 2]
  45.  
  46.   # モードコマンド(1個以上選■)
  47.   #   0 : 武器
  48.   #   1 : 防具
  49.   #   2 : やめる
  50.   MOD_CMD = [0, 1]
  51.  
  52.   # ステータスの表示パターン(1個以上選■、先頭は0:素材アイテム情報固定)
  53.   #   0 : 素材アイテム情報
  54.   #   1 : ■成アイテム情報
  55.   #   2 : パーティーステータス
  56.   #   3 : アクターステータス
  57.   ST_PTN = [0, 1, 2, 3]
  58.  
  59.   # ■張アイテム情報を表示する
  60.   # (注) trueにする場合は
  61.   #        Window_BsItemInfo#draw_options
  62.   #      に表示する內容を追加してください。
  63.   ENABLE_INFO = false
  64.  
  65.   # 攻■力、防禦力で整列させる
  66.   SORT = true
  67.  
  68.   # 成功時のSE
  69.   SUCCESS_SE = RPG::SE.new("Sword2", 100, 100)
  70.  
  71.   # Indexを記憶する
  72.   S_INDEX = false
  73.  
  74.  
  75. ### カテゴリ設定 ###############################################################
  76.   # 全カテゴリ表示を追加する
  77.   ADD_ALL = true
  78.  
  79.   # 防具カテゴリの分け方
  80.   #  true  : 防具タイプごとに分ける
  81.   #  false : 防具種別ごとに分ける
  82.   A_TYPE = false
  83.  
  84.   # 武器カテゴリ表示用のアイコンindex
  85.   # [ALL用, 武器タイプ:1, 武器タイプ:2, …]
  86.   WT_ICON = [16, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153,1738]
  87.   # 防具カテゴリ表示用のアイコンindex
  88.   # [ALL用, 防具タイプ:1, 防具タイプ:2, …]
  89.   AT_ICON = [16, 168, 171, 169, 170, 160, 161]
  90. #  AT_ICON = [16, 160, 164, 168, 176]   # for 防具種類
  91.  
  92.   # カテゴリに含めない武器タイプ
  93.   WT_NOT_USE = [12]
  94.   # カテゴリに含めない防具タイプ
  95.   AT_NOT_USE = []
  96.  
  97.  
  98. ### 共通書式 ###################################################################
  99. =begin
  100.   # 條件(6個まで表示)
  101.   [[アイテムID, 個數], …]
  102. =end
  103. ### 武器鍛造 ###################################################################
  104. =begin
  105. C_WEAPON = {
  106.   武器ID => [所需之$$, [[鍛造需物品ID, 物品個數]], 初期表示(省略時はfalse)]
  107. }
  108. =end
  109. C_WEAPON = {
  110.   1   => [100, [[1, 1]], true],
  111.   12  => [200, [[2, 2], [3, 1]], true],
  112.   23  => [300, [[1, 1], [2, 1], [3, 1], [4, 1], [5, 1], [6, 1]], true],
  113.   35  => [100, [[1, 1]], true],
  114.   46  => [500, [[2, 2], [5, 2]], true],
  115.   58  => [1000, [[2, 2], [4, 1]], true],
  116.   60  => [3000, [[3, 2], [4, 1]], true]
  117. }
  118.  
  119. ### 防具鍛造 ###################################################################
  120. =begin
  121. C_ARMOR[防具カテゴリIndex] = {
  122.   防具ID => [所需之$$, [[鍛造需物品ID, 物品個數]], 初期表示(省略時はfalse)]
  123. }
  124. =end
  125. C_ARMOR = {
  126.   1  => [100, [[1, 1]], true],
  127.   2  => [500, [[2, 2]], true],
  128.   7  => [100, [[1, 1]], true],
  129.   8  => [500, [[2, 2]], true],
  130.   9  => [100, [[2, 1]], true],
  131.   13 => [500, [[2, 2]], true],
  132.   14 => [500, [[2, 2]]],
  133.   16 => [500, [[2, 2]]],
  134.   23 => [1000, [[10, 2]]],
  135.   24 => [1000, [[12, 2]]],
  136.   25 => [2000, [[15, 1]]],
  137.   26 => [2000, [[20, 1]]],
  138.   27 => [3000, [[22, 2]]],
  139.   28 => [5000, [[24, 2]]],
  140.   29 => [10000, [[1, 40],[2, 4]]],
  141.   30 => [50000, [[2, 50],[5, 4]]]
  142. }
  143.  
  144. ### 武器強化 ###################################################################
  145. =begin
  146. S_WEAPON = {
  147.   武器ID => {
  148.     強化後の武器ID => [■段, 條件(複數指定可), 初期表示(省略時はfalse)]
  149.   }
  150. }
  151. =end
  152. S_WEAPON = {
  153.   1  => {
  154.     2  => [100, [[2, 1]], true]
  155.   },
  156.   2  => {
  157.     3  => [500, [[2, 2]]],
  158.     4  => [1000, [[3, 2]]]
  159.   },
  160.   3  => {
  161.     4  => [500, [[3, 1]], true],
  162.     5  => [1000, [[3, 2]]]
  163.   },
  164.   5  => {
  165.     6  => [100, [[1, 1]], true]
  166.   },
  167.   6  => {
  168.     7 => [500, [[2, 2]]]
  169.   },
  170.   8 => {
  171.     9 => [1500, [[3, 1]], true]
  172.   }
  173. }
  174.  
  175. ### 防具強化 ###################################################################
  176. =begin
  177. S_ARMOR = {
  178.   防具ID => {
  179.     強化後の防具ID => [■段, 條件(複數指定可), 初期表示(省略時はfalse)]
  180.   }
  181. }
  182. =end
  183. S_ARMOR = {
  184.   1  => {
  185.     2  => [100, [[1, 1]], true]
  186.   },
  187.   2  => {
  188.     3  => [500, [[2, 2]]],
  189.     4  => [1000, [[3, 2]]]
  190.   },
  191.   3  => {
  192.     4  => [500, [[3, 1]], true]
  193.   },
  194.   4  => {
  195.     5  => [500, [[3, 1]], true]
  196.   },
  197.   5  => {
  198.     6  => [1000, [[1, 10]], true]
  199.   },
  200.  
  201.   7  => {
  202.     8  => [500, [[2, 2]]],
  203.     10 => [1000, [[3, 2]]]
  204.   },
  205.   9  => {
  206.     11 => [500, [[3, 1]], true]
  207.   },
  208.   11 => {
  209.     12 => [100, [[1, 1]], true]
  210.   },
  211.  
  212.   10 => {
  213.     11 => [500, [[2, 2]]],
  214.     12 => [1000, [[3, 2]]]
  215.   },
  216.   11 => {
  217.     12 => [500, [[3, 1]], true]
  218.   },
  219.  
  220.   13 => {
  221.     16 => [100, [[1, 1]], true]
  222.   },
  223.   14 => {
  224.     15 => [500, [[2, 2]]],
  225.     21 => [5000, [[3, 1]]]
  226.   },
  227.   13 => {
  228.     16 => [500, [[3, 1]], true]
  229.   },
  230.   15 => {
  231.     17 => [1000, [[3, 2]]],
  232.     19 => [2000, [[3, 2]]]
  233.   },
  234.   16 => {
  235.     20 => [1000, [[3, 2]]]
  236.   },
  237.   17 => {
  238.     22 => [10000, [[1, 1]], true]
  239.   }
  240. }
  241.  
  242. ################################################################################
  243. end


基礎

RUBY 代码复制
  1. #==============================================================================
  2. # ■ VXAce-RGSS3-16 鍛冶屋 [基本クラス]             by Claimh
  3. #==============================================================================
  4.  
  5. #==============================================================================
  6. # ■ 基本クラス
  7. #==============================================================================
  8. module Blacksmith
  9.   DBG = true  # 全て表示
  10.   C_W=0;C_A=1;S_W=2;S_A=3
  11.   T = ["鍛造", "強化", "やめる"]
  12.  
  13.   # メッセージタイプ
  14.   module MesCmd
  15.     M_S_C = 0 # 鍛造成功
  16.     M_S_S = 1 # 強化成功
  17.     M_N_P = 10  # お金足りない
  18.     M_N_I = 11  # アイテム足りない
  19.     M_N_N = 12  # アイテムいっぱい
  20.     M_E_N = 20  # 裝備できない
  21.     M_E_D = 21  # 裝備外した
  22.     M_E_C = 22  # 裝備■更した
  23.     M_O_I = 30  # 所持品に入れた
  24.     #--------------------------------------------------------------------------
  25.     # ● リフレッシュ
  26.     #--------------------------------------------------------------------------
  27.     def self.conv_text(type, item=nil)
  28.       case type
  29.       when M_S_C; text = "#{item.name}を鍛造しました"
  30.       when M_S_S; text = "#{item.name}に強化しました"
  31.       when M_N_P; text = "所持金錢不足"
  32.       when M_N_I; text = "所持素材不足"
  33.       when M_N_N; text = "これ以上、持てません"
  34.       when M_E_N; text = "裝備できません"
  35.       when M_E_D; text = "#{item.name}の裝備を外しました"
  36.       when M_E_C; text = "#{item.name}の裝備を■更しました"
  37.       when M_O_I; text = "所持品に入れました"
  38.       else;   p "bad arg", type;  return ""
  39.       end
  40.       return text
  41.     end
  42.   end
  43.   #--------------------------------------------------------------------------
  44.   # ● コマンド
  45.   #--------------------------------------------------------------------------
  46.   def self.sys_cmd
  47.     SYS_CMD.collect { |d| T[d] }
  48.   end
  49.   def self.mod_cmd(s)
  50.     text = ["武器#{T[s]}", "防具#{T[s]}", "退出"]
  51.     MOD_CMD.collect { |d| text[d] }
  52.   end
  53.   #--------------------------------------------------------------------------
  54.   # ● シンボル
  55.   #--------------------------------------------------------------------------
  56.   def self.sys_symbol(i)
  57.     [:create, :pwup, :exit][i]
  58.   end
  59.   def self.mod_symbol(i)
  60.     [:weapon, :armor, :exit][i]
  61.   end
  62.   #--------------------------------------------------------------------------
  63.   # ● 設定情報參照
  64.   #--------------------------------------------------------------------------
  65.   def self.data(t)
  66.     [C_WEAPON, C_ARMOR, S_WEAPON, S_ARMOR][t]
  67.   end
  68.   #--------------------------------------------------------------------------
  69.   # ● カテゴリ設定情報參照
  70.   #--------------------------------------------------------------------------
  71.   def self.ctg(t)
  72.     ids = []
  73.     ids.push(CT_ALL) if ADD_ALL
  74.     if t % 2 == 0 # weapon
  75.       $data_system.weapon_types.each_index do |i|
  76.         ids.push(i) if i > 0 and !WT_NOT_USE.include?(i)
  77.       end
  78.     else # armor
  79.       if A_TYPE
  80.         $data_system.armor_types.each_index do |i|
  81.           ids.push(i) if i > 0 and !AT_NOT_USE.include?(i)
  82.         end
  83.       else
  84.         ids += [1, 2, 3, 4]
  85.       end
  86.     end
  87.     ids
  88.   end
  89.   #--------------------------------------------------------------------------
  90.   # ● データソート
  91.   #--------------------------------------------------------------------------
  92.   def self.sort(list, t)
  93.     return [] if list.nil?
  94.     return list unless SORT
  95.     case t      # 攻■力・防禦力でソートする
  96.     when C_W, S_W;  list.sort! {|a,b| b.obj.params[2] - a.obj.params[2] }
  97.     when C_A, S_A;  list.sort! {|a,b| b.obj.params[3] - a.obj.params[3] }
  98.     end
  99.     return list
  100.   end
  101.   #--------------------------------------------------------------------------
  102.   # ● データPush
  103.   #--------------------------------------------------------------------------
  104.   def self.push(list, d, t, c)
  105.     return list.push(d) if c == CT_ALL
  106.     if t % 2 == 0 # weapon
  107.       list.push(d) if d.obj.wtype_id == c
  108.     else # armor
  109.       if A_TYPE
  110.         list.push(d) if d.obj.atype_id == c
  111.       else
  112.         list.push(d) if d.obj.etype_id == c
  113.       end
  114.     end
  115.     return list
  116.   end
  117.  
  118.  
  119. # 條件クラス
  120. class Condition
  121.   attr_reader :id     # 條件ID
  122.   attr_reader :num    # 條件■
  123.   attr_reader :enable
  124.   def initialize(prm)
  125.     if prm.empty?
  126.       @id = 0
  127.       @num = 0
  128.       @enable = true
  129.     else
  130.       @id   = prm[0]
  131.       @num  = prm[1]
  132.     end
  133.   end
  134.   def update_status
  135.     return enable?
  136.   end
  137.   def enable?
  138.     return (@enable = true) if @id == 0 or @num == 0
  139.     return (@enable = (pt_num >= @num))
  140.   end
  141.   def lose
  142.     return if @id == 0 or @num == 0
  143.     $game_party.lose_item(obj, @num) if obj.consumable  # 消耗
  144.   end
  145.   def obj
  146.     return $data_items[@id]
  147.   end
  148.   def pt_num
  149.     return $game_party.item_number(obj)
  150.   end
  151. end
  152.  
  153. # 個別データクラス
  154. class CommonData
  155.   attr_writer :visible
  156.   attr_reader :price
  157.   attr_reader :cond
  158.   attr_reader :status
  159.   #--------------------------------------------------------------------------
  160.   # ● オブジェクト初期化
  161.   #--------------------------------------------------------------------------
  162.   def initialize(b_id, a_id, data)
  163.     @b_id = b_id
  164.     @a_id = a_id
  165.     @price = data[0]
  166.     @cond = data[1].collect { |d| Condition.new(d) }
  167.     @visible = data[2].nil? ? false : data[2]
  168.     @status = 0xFF
  169.   end
  170.   def id
  171.     @a_id
  172.   end
  173.   def size
  174.     @cond.size
  175.   end
  176.   def num
  177.     $game_party.item_number(obj)
  178.   end
  179.   def gain
  180.     $game_party.gain_item(obj, 1)
  181.   end
  182.   def lose
  183.     $game_party.lose_item(b_obj, 1)
  184.   end
  185.   def equip(actor)
  186.     actor.change_equip(actor.empty_slot(obj.etype_id), obj)
  187.   end
  188.   #--------------------------------------------------------------------------
  189.   # ● 表示狀態
  190.   #--------------------------------------------------------------------------
  191.   def visible
  192.     @visible or DBG
  193.   end
  194.   #--------------------------------------------------------------------------
  195.   # ● ステータス更新
  196.   #--------------------------------------------------------------------------
  197.   ST_P = 0b001
  198.   ST_C = 0b010
  199.   ST_N = 0b100
  200.   def update_status
  201.     @status = 0
  202.     @status |= ST_P unless price?
  203.     @status |= ST_C unless cond_enable?
  204.     @status |= ST_N unless num?
  205.     return visible # @statusではなくvisibleを返す
  206.   end
  207.   def enable?
  208.     return (@status == 0)
  209.   end
  210.   def message
  211.     return MesCmd::M_N_P if (@status & ST_P) == ST_P
  212.     return MesCmd::M_N_I if (@status & ST_C) == ST_C
  213.     return MesCmd::M_N_N
  214.   end
  215.   #--------------------------------------------------------------------------
  216.   # ● 鍛冶可否判定
  217.   #--------------------------------------------------------------------------
  218.   def cond_enable?
  219.     return true if @cond.empty?
  220.     @cond.all? { |c| c.update_status }
  221.   end
  222.   def price?
  223.     @price <= $game_party.gold
  224.   end
  225.   def num?(n=1)
  226.     (self.num + n) <= $game_party.max_item_number(obj)
  227.   end
  228.   #--------------------------------------------------------------------------
  229.   # ● 鍛冶■行
  230.   #--------------------------------------------------------------------------
  231.   def execute(change=false, actor=nil)
  232.     $game_party.lose_gold(@price)
  233.     @cond.each { |c| c.lose }
  234.     gain
  235.     equip(actor) if change
  236.     lose if @b_id != 0
  237.   end
  238.   #--------------------------------------------------------------------------
  239.   # ● 裝備可能メンバー
  240.   #--------------------------------------------------------------------------
  241.   def equippable_members
  242.     actors = $game_party.members.select { |a| a.equippable?(obj) }
  243.     actors.collect { |a| a.index }
  244.   end
  245. end
  246.  
  247. # 武器・防具クラス
  248. class CommonWeapon < CommonData
  249.   def obj
  250.     $data_weapons[@a_id]
  251.   end
  252.   def b_obj
  253.     $data_weapons[@b_id]
  254.   end
  255. end
  256. class CommonArmor < CommonData
  257.   def obj
  258.     $data_armors[@a_id]
  259.   end
  260.   def b_obj
  261.     $data_armors[@b_id]
  262.   end
  263. end
  264.  
  265.  
  266. # リストクラス
  267. class CreateList
  268.   attr_reader :equip_actors
  269.   #--------------------------------------------------------------------------
  270.   # ● オブジェクト初期化
  271.   #--------------------------------------------------------------------------
  272.   def initialize(type, b_id=0)
  273.     @type = type
  274.     @b_id = b_id
  275.     reset_all
  276.   end
  277.   #--------------------------------------------------------------------------
  278.   # ● オブジェクト初期化
  279.   #--------------------------------------------------------------------------
  280.   def reset_all
  281.     @list = {}
  282.     @equip_actors = []
  283.   end
  284.   #--------------------------------------------------------------------------
  285.   # ● オブジェクト初期化
  286.   #--------------------------------------------------------------------------
  287.   def reset(id)
  288.     case @type
  289.     when C_W; @list[id] = CommonWeapon.new(0, id, C_WEAPON[id])
  290.     when C_A; @list[id] = CommonArmor.new(0, id, C_ARMOR[id])
  291.     when S_W; @list[id] = CommonWeapon.new(@b_id, id, S_WEAPON[@b_id][id])
  292.     when S_A; @list[id] = CommonArmor.new(@b_id, id, S_ARMOR[@b_id][id])
  293.     end
  294.     return @list[id]
  295.   end
  296.   #--------------------------------------------------------------------------
  297.   # ● オブジェクト參照
  298.   #--------------------------------------------------------------------------
  299.   def [](id)
  300.     return (@list[id].nil? ? reset(id) : @list[id])
  301.   end
  302.   #--------------------------------------------------------------------------
  303.   # ● カテゴリ別リスト鍛造(鍛造用)
  304.   #--------------------------------------------------------------------------
  305.   def make_list
  306.     mlist = []
  307.     ids = ::Blacksmith.data(@type).keys.sort
  308.     ct = ::Blacksmith.ctg(@type)
  309.     ids.each do |id|
  310.       d = self.[](id)
  311.       next unless d.update_status # リスト作るときにステータス更新
  312.       ct.each_index do |i|
  313.         mlist[i] = [] if mlist[i].nil?
  314.         mlist[i] = ::Blacksmith.push(mlist[i], d, @type, ct[i])
  315.       end
  316.     end
  317.     ct.each_index do |i|
  318.       mlist[i] = ::Blacksmith.sort(mlist[i], @type)
  319.     end
  320.     return mlist
  321.   end
  322.   #--------------------------------------------------------------------------
  323.   # ● 強化用メソッド
  324.   #--------------------------------------------------------------------------
  325.   def obj
  326.     case @type
  327.     when S_W; return $data_weapons[@b_id]
  328.     when S_A; return $data_armors[@b_id]
  329.     end
  330.   end
  331.   def enable?
  332.     return true
  333.   end
  334.   def num
  335.     return $game_party.item_number(obj)
  336.   end
  337.   #--------------------------------------------------------------------------
  338.   # ● アイテム所持判定(裝備品含む)
  339.   #--------------------------------------------------------------------------
  340.   def has_item?
  341.     flag = (self.num > 0)
  342.     @equip_actors = []
  343.     $game_party.members.each do |actor|
  344.       @equip_actors.push(actor.index) if equip_item?(actor)
  345.     end
  346.     return (flag or (@equip_actors.size > 0))
  347.   end
  348.   #--------------------------------------------------------------------------
  349.   # ● アイテム裝備判定
  350.   #--------------------------------------------------------------------------
  351.   def equip_item?(actor)
  352.     actor.equips.include?(obj)
  353.   end
  354.   #--------------------------------------------------------------------------
  355.   # ● リスト鍛造(強化用)  ※カテゴリ不要
  356.   #--------------------------------------------------------------------------
  357.   def make_slist
  358.     slist = []
  359.     ids = ::Blacksmith.data(@type)[@b_id].keys.sort
  360.     ids.each do |id|
  361.       d = self.[](id)
  362.       slist.push(d) if d.update_status # リスト作るときにステータス更新
  363.     end
  364.     return ::Blacksmith.sort(slist, @type)
  365.   end
  366. end
  367. # リストクラス
  368. class StrengthenList
  369.   #--------------------------------------------------------------------------
  370.   # ● オブジェクト初期化
  371.   #--------------------------------------------------------------------------
  372.   def initialize(type)
  373.     @type = type
  374.     reset_all
  375.   end
  376.   #--------------------------------------------------------------------------
  377.   # ● オブジェクト初期化
  378.   #--------------------------------------------------------------------------
  379.   def reset_all
  380.     @list = {}
  381.   end
  382.   #--------------------------------------------------------------------------
  383.   # ● オブジェクト初期化
  384.   #--------------------------------------------------------------------------
  385.   def reset(b_id)
  386.     @list[b_id] = CreateList.new(@type, b_id)
  387.   end
  388.   #--------------------------------------------------------------------------
  389.   # ● オブジェクト參照
  390.   #--------------------------------------------------------------------------
  391.   def [](b_id)
  392.     reset(b_id) if @list[b_id].nil?
  393.     return @list[b_id]
  394.   end
  395.   #--------------------------------------------------------------------------
  396.   # ● カテゴリ別リスト鍛造
  397.   #--------------------------------------------------------------------------
  398.   def make_list
  399.     mlist = []
  400.     ids = ::Blacksmith.data(@type).keys.sort
  401.     ct = ::Blacksmith.ctg(@type)
  402.     ids.each do |id|
  403.       d = self.[](id)
  404.       next unless d.has_item? # 所持アイテムのみ有■
  405.       ct.each_index do |i|
  406.         mlist[i] = [] if mlist[i].nil?
  407.         num = 0
  408.         a_ids = ::Blacksmith.data(@type)[id].keys
  409.         a_ids.each do |a_id|
  410.           if d[a_id].update_status # リスト作るときにステータス更新
  411.             num = 1;  break
  412.           end
  413.         end
  414.         next if num == 0  # 全て非表示なら除外
  415.         mlist[i] = ::Blacksmith.push(mlist[i], d, @type, ct[i])
  416.       end
  417.     end
  418.     ct.each_index do |i|
  419.       mlist[i] = ::Blacksmith.sort(mlist[i], @type)
  420.     end
  421.     return mlist
  422.   end
  423. end
  424.  
  425.  
  426. # Blacksmithクラス
  427. class Blacksmith
  428.   attr_reader :c_w
  429.   attr_reader :c_a
  430.   attr_reader :s_w
  431.   attr_reader :s_a
  432.   def initialize
  433.     reset_all
  434.   end
  435.   def reset_all
  436.     @c_w = CreateList.new(C_W)
  437.     @c_a = CreateList.new(C_A)
  438.     @s_w = StrengthenList.new(S_W)
  439.     @s_a = StrengthenList.new(S_A)
  440.   end
  441. end
  442.  
  443.  
  444. end ## module Blacksmith
  445.  
  446.  
  447. #==============================================================================
  448. # ■ Game_System
  449. #==============================================================================
  450. class Game_System
  451.   attr_reader :bs
  452.   alias initialize_blacksmith initialize
  453.   def initialize
  454.     initialize_blacksmith
  455.     @bs = Blacksmith::Blacksmith.new
  456.   end
  457. end


窗口

RUBY 代码复制
  1. #==============================================================================
  2. # ■ VXAce-RGSS3-16 鍛冶屋 [ウィンドウクラス]             by Claimh
  3. #==============================================================================
  4.  
  5. #==============================================================================
  6. # ■ Window_BsSysCmd
  7. #==============================================================================
  8. class Window_BsSysCmd < Window_HorzCommand
  9.   #--------------------------------------------------------------------------
  10.   # ● オブジェクト初期化
  11.   #--------------------------------------------------------------------------
  12.   def initialize
  13.     super(0, fitting_height(2))
  14.   end
  15.   #--------------------------------------------------------------------------
  16.   # ● 桁數の取得
  17.   #--------------------------------------------------------------------------
  18.   def col_max
  19.     item_max
  20.   end
  21.   #--------------------------------------------------------------------------
  22.   # ● コマンドリストの作成
  23.   #--------------------------------------------------------------------------
  24.   def make_command_list
  25.     Blacksmith::SYS_CMD.each_index do |i|
  26.       add_command(Blacksmith.sys_cmd[i], Blacksmith.sys_symbol(i))
  27.     end
  28.   end
  29.   #--------------------------------------------------------------------------
  30.   # ● ウィンドウ幅の取得
  31.   #--------------------------------------------------------------------------
  32.   def window_width
  33.     Graphics.width - 160
  34.   end
  35.   #--------------------------------------------------------------------------
  36.   # ● 固定?
  37.   #--------------------------------------------------------------------------
  38.   def fix?
  39.     item_max == 1
  40.   end
  41.   #--------------------------------------------------------------------------
  42.   # ● 終了コマンド?
  43.   #--------------------------------------------------------------------------
  44.   def exit?
  45.     data == 2
  46.   end
  47.   #--------------------------------------------------------------------------
  48.   # ● indexデータ
  49.   #--------------------------------------------------------------------------
  50.   def data
  51.     Blacksmith::SYS_CMD[@index]
  52.   end
  53. end
  54.  
  55.  
  56. #==============================================================================
  57. # ■ Window_BsModCmd
  58. #==============================================================================
  59. class Window_BsModCmd < Window_BsSysCmd
  60.   #--------------------------------------------------------------------------
  61.   # ● オブジェクト初期化
  62.   #--------------------------------------------------------------------------
  63.   def initialize
  64.     [url=home.php?mod=space&uid=34008]@sys[/url] = Blacksmith::SYS_CMD[0]
  65.     super
  66.   end
  67.   #--------------------------------------------------------------------------
  68.   # ● システム設定
  69.   #--------------------------------------------------------------------------
  70.   def data=(d)
  71.     [url=home.php?mod=space&uid=34008]@sys[/url] = d
  72.     clear_command_list
  73.     make_command_list
  74.     refresh
  75.     self.index = 0
  76.   end
  77.   #--------------------------------------------------------------------------
  78.   # ● コマンドリストの作成
  79.   #--------------------------------------------------------------------------
  80.   def make_command_list
  81.     Blacksmith::MOD_CMD.each_index do |i|
  82.       add_command(Blacksmith.mod_cmd(@sys)[i], Blacksmith.mod_symbol(i))
  83.     end
  84.   end
  85.   #--------------------------------------------------------------------------
  86.   # ● indexデータ
  87.   #--------------------------------------------------------------------------
  88.   def data
  89.     Blacksmith::MOD_CMD[@index]
  90.   end
  91. end
  92.  
  93.  
  94. #==============================================================================
  95. # ■ Window_BsCtg
  96. #==============================================================================
  97. class Window_BsCtg < Window_Selectable
  98.   #--------------------------------------------------------------------------
  99.   # ● オブジェクト初期化
  100.   #--------------------------------------------------------------------------
  101.   def initialize
  102.     @type = 0
  103.     super(0, fitting_height(2), Graphics.width - 160, fitting_height(1))
  104.     hide.z = 200
  105.     @index_s = [0, 0]
  106.   end
  107.   #--------------------------------------------------------------------------
  108.   # ● 固定?
  109.   #--------------------------------------------------------------------------
  110.   def fix?
  111.     Blacksmith.ctg(@type).size == 1
  112.   end
  113.   #--------------------------------------------------------------------------
  114.   # ● 桁數の取得
  115.   #--------------------------------------------------------------------------
  116.   def col_max
  117.     item_max
  118.   end
  119.   #--------------------------------------------------------------------------
  120.   # ● 項目數の取得
  121.   #--------------------------------------------------------------------------
  122.   def item_max
  123.     Blacksmith.ctg(@type).size
  124.   end
  125.   #--------------------------------------------------------------------------
  126.   # ● 橫に項目が並ぶときの空白の幅を取得
  127.   #--------------------------------------------------------------------------
  128.   def spacing
  129.     return 8
  130.   end
  131.   #--------------------------------------------------------------------------
  132.   # ● 項目を描畫する矩形の取得
  133.   #--------------------------------------------------------------------------
  134.   def item_rect(index)
  135.     rect = Rect.new
  136.     rect.width = 24
  137.     rect.height = item_height
  138.     rect.x = index % col_max * (item_width + spacing)
  139.     rect.y = index / col_max * item_height
  140.     rect
  141.   end
  142.   #--------------------------------------------------------------------------
  143.   # ● ■更
  144.   #--------------------------------------------------------------------------
  145.   def change(t)
  146.     @index_s[@type] = Blacksmith::S_INDEX ? [url=home.php?mod=space&uid=370741]@Index[/url] : 0
  147.     @type = t
  148.     @list = t == 0 ? Blacksmith::WT_ICON : Blacksmith::AT_ICON
  149.     create_contents
  150.     refresh
  151.     self.index = @index_s[@type]
  152.     self.index = 0 if @index < 0
  153.   end
  154.   #--------------------------------------------------------------------------
  155.   # ● 左シフト
  156.   #--------------------------------------------------------------------------
  157.   def shift_l
  158.     Sound.play_cursor
  159.     old_index = @index
  160.     cursor_left(true)
  161.     redraw_item(old_index)
  162.     redraw_item(@index)
  163.   end
  164.   #--------------------------------------------------------------------------
  165.   # ● 右シフト
  166.   #--------------------------------------------------------------------------
  167.   def shift_r
  168.     Sound.play_cursor
  169.     old_index = @index
  170.     cursor_right(true)
  171.     redraw_item(old_index)
  172.     redraw_item(@index)
  173.   end
  174.   #--------------------------------------------------------------------------
  175.   # ● 項目の描畫
  176.   #--------------------------------------------------------------------------
  177.   def draw_item(index)
  178.     draw_icon(@list[index], item_rect(index).x, 0, index == @index)
  179.   end
  180. end
  181.  
  182.  
  183. #==============================================================================
  184. # ■ Sprite_BsTAG
  185. #==============================================================================
  186. class Sprite_BsTAG < Sprite
  187.   W = 100
  188.   H = 14
  189.   #--------------------------------------------------------------------------
  190.   # ● オブジェクト初期化
  191.   #--------------------------------------------------------------------------
  192.   def initialize(x, y, z, tag)
  193.     @viewport = Viewport.new(x, y, W, H)
  194.     super(@viewport)
  195.     self.viewport.z = z
  196.     self.bitmap = Bitmap.new(W, H)
  197.     self.bitmap.font.size = 12
  198.     self.bitmap.font.color = Color.new(192, 224, 255, 255)
  199.     refresh(tag)
  200.   end
  201.   #--------------------------------------------------------------------------
  202.   # ● リフレッシュ
  203.   #--------------------------------------------------------------------------
  204.   def dispose
  205.     super
  206.     @viewport.dispose
  207.   end
  208.   #--------------------------------------------------------------------------
  209.   # ● リフレッシュ
  210.   #--------------------------------------------------------------------------
  211.   def refresh(tag)
  212.     self.bitmap.clear
  213.     self.bitmap.draw_text(0, 0, W, H, tag)
  214.   end
  215.   #--------------------------------------------------------------------------
  216.   # ● ウィンドウの表示
  217.   #--------------------------------------------------------------------------
  218.   def show
  219.     self.visible = true
  220.     self
  221.   end
  222.   #--------------------------------------------------------------------------
  223.   # ● ウィンドウの非表示
  224.   #--------------------------------------------------------------------------
  225.   def hide
  226.     self.visible = false
  227.     self
  228.   end
  229. end
  230.  
  231.  
  232. #==============================================================================
  233. # ■ Window_BsListDummy
  234. #==============================================================================
  235. class Window_BsListDummy < Window_Base
  236.   #--------------------------------------------------------------------------
  237.   # ● リフレッシュ
  238.   #--------------------------------------------------------------------------
  239.   def refresh(data=nil)
  240.     contents.clear
  241.     return if data.nil?
  242.     draw_item(data)
  243.   end
  244.   #--------------------------------------------------------------------------
  245.   # ● 項目描畫
  246.   #--------------------------------------------------------------------------
  247.   def draw_item(data)
  248.     change_color(normal_color, data.enable?)
  249.     x = 4
  250.     y = 0
  251.     draw_item_name(data.obj, x, y, data.enable?, 220)
  252.     if data.equip_actors.size > 0
  253.       draw_text(tag_p_x-60, y, 80, line_height, "[E]", 2)
  254.     end
  255.     draw_text(tag_n_x-50, y, 80, line_height, data.num.to_s, 2)
  256.   end
  257.   #--------------------------------------------------------------------------
  258.   # ● タグ位置(價格)
  259.   #--------------------------------------------------------------------------
  260.   def tag_p_x
  261.     self.x + self.width - 160
  262.   end
  263.   #--------------------------------------------------------------------------
  264.   # ● タグ位置(所持數)
  265.   #--------------------------------------------------------------------------
  266.   def tag_n_x
  267.     self.x + self.width - 60
  268.   end
  269. end
  270.  
  271.  
  272. #==============================================================================
  273. # ■ Window_BsListCmn
  274. #==============================================================================
  275. class Window_BsListCmn < Window_Selectable
  276.   attr_accessor :pt_window
  277.   attr_accessor :sts_window
  278.   #--------------------------------------------------------------------------
  279.   # ● オブジェクト初期化
  280.   #--------------------------------------------------------------------------
  281.   def initialize(x, y, w, h)
  282.     super(x, y, w, h)
  283.     create_tag
  284.     @pt_window = @sts_window = nil
  285.   end
  286.   #--------------------------------------------------------------------------
  287.   # ● タグスプライト鍛造
  288.   #--------------------------------------------------------------------------
  289.   def create_tag
  290.     @sprite_p = Sprite_BsTAG.new(tag_p_x, self.y+2, win_z+10, "價格")
  291.     @sprite_n = Sprite_BsTAG.new(tag_n_x, self.y+2, win_z+10, "所持數")
  292.   end
  293.   #--------------------------------------------------------------------------
  294.   # ● タグ位置(價格)
  295.   #--------------------------------------------------------------------------
  296.   def tag_p_x
  297.     self.x + self.width - 160
  298.   end
  299.   #--------------------------------------------------------------------------
  300.   # ● タグ位置(所持數)
  301.   #--------------------------------------------------------------------------
  302.   def tag_n_x
  303.     self.x + self.width - 60
  304.   end
  305.   #--------------------------------------------------------------------------
  306.   # ● offset位置(sublist用)
  307.   #--------------------------------------------------------------------------
  308.   def offset
  309.     return 0
  310.   end
  311.   #--------------------------------------------------------------------------
  312.   # ● オブジェクト開放
  313.   #--------------------------------------------------------------------------
  314.   def dispose
  315.     super
  316.     @sprite_p.dispose
  317.     @sprite_n.dispose
  318.   end
  319.   #--------------------------------------------------------------------------
  320.   # ● 決定やキャンセルなどのハンドリング■理
  321.   #--------------------------------------------------------------------------
  322.   def process_handling
  323.     return unless open? && active
  324.     return process_ok       if ok_enabled?        && Input.trigger?(:C)
  325.     return process_cancel   if cancel_enabled?    && Input.trigger?(:B)
  326.     return process_pagedown if handle?(:pagedown) && Input.trigger?(:R)
  327.     return process_pageup   if handle?(:pageup)   && Input.trigger?(:L)
  328.     return process_info     if handle?(:info)     && Input.trigger?(:A)
  329.     return call_handler(:right)  if Input.repeat?(:RIGHT)
  330.     return call_handler(:left)   if Input.repeat?(:LEFT)
  331.   end
  332.   #--------------------------------------------------------------------------
  333.   # ● 決定ボタンが押されたときの■理
  334.   #--------------------------------------------------------------------------
  335.   def process_ok
  336.     super
  337.     call_handler(:alert) unless current_item_enabled?
  338.   end
  339.   #--------------------------------------------------------------------------
  340.   # ● L ボタン(PageUp)が押されたときの■理
  341.   #--------------------------------------------------------------------------
  342.   def process_pageup
  343.     Sound.play_cursor
  344.     Input.update
  345.     call_handler(:pageup)
  346.   end
  347.   #--------------------------------------------------------------------------
  348.   # ● R ボタン(PageDown)が押されたときの■理
  349.   #--------------------------------------------------------------------------
  350.   def process_pagedown
  351.     Sound.play_cursor
  352.     Input.update
  353.     call_handler(:pagedown)
  354.   end
  355.   #--------------------------------------------------------------------------
  356.   # ● 情報表示■理
  357.   #--------------------------------------------------------------------------
  358.   def process_info
  359.     if !data.nil?
  360.       Sound.play_ok
  361.       Input.update
  362.       deactivate
  363.       call_handler(:info)
  364.     else
  365.       Sound.play_buzzer
  366.     end
  367.   end
  368.   #--------------------------------------------------------------------------
  369.   # ● 選■項目の有■狀態を取得
  370.   #--------------------------------------------------------------------------
  371.   def current_item_enabled?
  372.     enable?
  373.   end
  374.   #--------------------------------------------------------------------------
  375.   # ● ヘルプテキスト更新
  376.   #--------------------------------------------------------------------------
  377.   def update_help
  378.     @help_window.set_text(item == nil ? "" : item.description)
  379.     @pt_window.item = @sts_window.item = self.data
  380.   end
  381. end
  382.  
  383.  
  384. #==============================================================================
  385. # ■ Window_BsList
  386. #==============================================================================
  387. class Window_BsList < Window_BsListCmn
  388.   #--------------------------------------------------------------------------
  389.   # ● オブジェクト初期化
  390.   #--------------------------------------------------------------------------
  391.   def initialize(sys=0, mod=0, ctg=0)
  392.     r = Rect.new
  393.     r.y = fitting_height(2) + fitting_height(1)
  394.     r.width  = Graphics.width-120
  395.     r.height = Graphics.height - r.y - fitting_height(3)
  396.     @data = [nil, nil, nil, nil]
  397.     @tmp_bit = Bitmap.new(1, 1)
  398.     @bitmap = [[],[],[],[]]
  399.     @index_s = [[],[],[],[]]
  400.     @sys = [url=home.php?mod=space&uid=277847]@MOD[/url] = @ctg = -1
  401.     super(r.x, r.y, r.width, r.height)
  402.     @dmy_win = Window_BsListDummy.new(r.x, r.y, r.width, r.height)
  403.     self.z = win_z
  404.     change_t(sys*2+mod, ctg)
  405.     hide.dummy_show
  406.   end
  407.   #--------------------------------------------------------------------------
  408.   # ● ウィンドウのZ軸
  409.   #--------------------------------------------------------------------------
  410.   def win_z
  411.     return 200
  412.   end
  413.   #--------------------------------------------------------------------------
  414.   # ● ダミーウィンドウの表示
  415.   #--------------------------------------------------------------------------
  416.   def dummy_show
  417.     @dmy_win.show
  418.     self
  419.   end
  420.   #--------------------------------------------------------------------------
  421.   # ● ダミーウィンドウの非表示
  422.   #--------------------------------------------------------------------------
  423.   def dummy_hide
  424.     @dmy_win.hide
  425.     self
  426.   end
  427.   #--------------------------------------------------------------------------
  428.   # ● オブジェクト開放
  429.   #--------------------------------------------------------------------------
  430.   def dispose
  431.     super
  432.     @tmp_bit.dispose
  433.     @bitmap.each_index { |i| dispose_bitmap(i) }
  434.     @dmy_win.dispose
  435.   end
  436.   #--------------------------------------------------------------------------
  437.   # ● Bitmap開放
  438.   #--------------------------------------------------------------------------
  439.   def dispose_bitmap(t)
  440.     return if @bitmap[t].nil? or @bitmap[t].empty?
  441.     @bitmap[t].each do |b|
  442.       unless b.nil?
  443.         b.dispose
  444.         b = nil
  445.       end
  446.     end
  447.   end
  448.   #--------------------------------------------------------------------------
  449.   # ● 項目數の取得
  450.   #--------------------------------------------------------------------------
  451.   def item_max
  452.     return 0 if @data[type].nil?
  453.     @data[type][@ctg].size
  454.   end
  455.   #--------------------------------------------------------------------------
  456.   # ● 動作タイプ
  457.   #--------------------------------------------------------------------------
  458.   C_W=0;C_A=1;S_W=2;S_A=3
  459.   def type
  460.     return (@sys*2 + @mod)
  461.   end
  462.   #--------------------------------------------------------------------------
  463.   # ● 動作タイプ
  464.   #--------------------------------------------------------------------------
  465.   def type=(t)
  466.     @sys = t / 2
  467.     [url=home.php?mod=space&uid=277847]@MOD[/url] = t % 2
  468.     @sprite_p.refresh(@sys==0 ? "價格" : "裝備")
  469.   end
  470.   #--------------------------------------------------------------------------
  471.   # ● カテゴリ
  472.   #--------------------------------------------------------------------------
  473.   def category(t)
  474.     Blacksmith.ctg(t).size
  475.   end
  476.   #--------------------------------------------------------------------------
  477.   # ● 鍛造/強化
  478.   #--------------------------------------------------------------------------
  479.   def sys_create?
  480.     return (@sys == 0)
  481.   end
  482.   #--------------------------------------------------------------------------
  483.   # ● システムモード切り替え
  484.   #--------------------------------------------------------------------------
  485.   def change_t(t, c=0)
  486.     if self.type != t
  487.       push_index(self.type, @ctg)
  488.       self.type = t
  489.       @ctg = c
  490.       refresh_data(t) if @data[t].nil?
  491.       self.contents = @bitmap[t][c]
  492.       pop_index(t, c)
  493.     else
  494.       change_c(c)
  495.     end
  496.   end
  497.   #--------------------------------------------------------------------------
  498.   # ● カテゴリ切り替え
  499.   #--------------------------------------------------------------------------
  500.   def change_c(c)
  501.     if @ctg != c
  502.       push_index(self.type, @ctg)
  503.       @ctg = c
  504.       self.contents = @bitmap[self.type][c]
  505.       pop_index(self.type, c)
  506.     else
  507.       pop_index(self.type, c)
  508.     end
  509.   end
  510.   #--------------------------------------------------------------------------
  511.   # ● Index復元
  512.   #--------------------------------------------------------------------------
  513.   def pop_index(t, c)
  514.     self.index = (@index_s[t][c] < 0 ? 0 : @index_s[t][c])
  515.   end
  516.   #--------------------------------------------------------------------------
  517.   # ● Index記憶
  518.   #--------------------------------------------------------------------------
  519.   def push_index(t, c)
  520.     return if t < 0 or c < 0
  521.     @index_s[t][c] = Blacksmith::S_INDEX ? @index : 0
  522.   end
  523.   #--------------------------------------------------------------------------
  524.   # ● データ初期化
  525.   #--------------------------------------------------------------------------
  526.   def refresh_data(t)
  527.     case t
  528.     when C_W; @data[t] = $game_system.bs.c_w.make_list
  529.     when C_A; @data[t] = $game_system.bs.c_a.make_list
  530.     when S_W; @data[t] = $game_system.bs.s_w.make_list
  531.     when S_A; @data[t] = $game_system.bs.s_a.make_list
  532.     end
  533.     refresh_t_bitmap(t)
  534.   end
  535.   #--------------------------------------------------------------------------
  536.   # ● ビットマップ初期化
  537.   #--------------------------------------------------------------------------
  538.   def refresh_t_bitmap(t)
  539.     dispose_bitmap(t)
  540.     @bitmap[t] = []
  541.     @index_s[t] = []
  542.     category(t).times { |c| refresh_bitmap(t, c) }
  543.   end
  544.   #--------------------------------------------------------------------------
  545.   # ● カテゴリビットマップ初期化
  546.   #--------------------------------------------------------------------------
  547.   def refresh_bitmap(t, c)
  548.     num = @data[t][c].size
  549.     num = num == 0 ? 1 : num
  550.     @bitmap[t][c].dispose unless @bitmap[t][c].nil?
  551.     @bitmap[t][c] = Bitmap.new(contents_width, num * line_height)
  552.     @bitmap[t][c].font.color = normal_color
  553.     @index_s[t][c] = -1
  554.     i_refresh(t, c)
  555.   end
  556.   #--------------------------------------------------------------------------
  557.   # ● リフレッシュ
  558.   #--------------------------------------------------------------------------
  559.   def i_refresh(t, c)
  560.     self.contents = @bitmap[t][c]
  561.     contents.clear
  562.     @data[t][c].size.times {|i| draw_item(t, c, i) }
  563.   end
  564.   #--------------------------------------------------------------------------
  565.   # ● 全項目の描畫
  566.   #--------------------------------------------------------------------------
  567.   def draw_all_items
  568.     item_max.times {|i| draw_item(self.type, @ctg, i) }
  569.   end
  570.   #--------------------------------------------------------------------------
  571.   # ● 差分リフレッシュ
  572.   #--------------------------------------------------------------------------
  573.   def diff_refresh
  574.     @bitmap.each_index do |t|
  575.       refresh_data(t) unless @data[t].nil?
  576.     end
  577.     t = self.type
  578.     c = @ctg
  579.     self.contents = @bitmap[t][c]
  580.     @item_max = @data[t][c].size
  581.     self.index = @index >= @data[t][c].size ? (@data[t][c].size-1) : @index
  582.     self.index = 0 if @index < 0
  583.   end
  584.   #--------------------------------------------------------------------------
  585.   # ● 項目描畫
  586.   #--------------------------------------------------------------------------
  587.   def draw_item(t, c, i)
  588.     itm = data_i(t, c, i)
  589.     change_color(normal_color, itm.enable?)
  590.     x = 4
  591.     y = i * line_height
  592.     draw_item_name(itm.obj, x, y, itm.enable?, 220)
  593.     if t / 2 == 0 # create
  594.       draw_text(tag_p_x-60, y, 80, line_height, itm.price.to_s, 2)
  595.     elsif itm.equip_actors.size > 0
  596.       draw_text(tag_p_x-60, y, 80, line_height, "[E]", 2)
  597.     end
  598.     draw_text(tag_n_x-50, y, 80, line_height, itm.num.to_s, 2)
  599.   end
  600.   #--------------------------------------------------------------------------
  601.   # ● アイテム取得
  602.   #--------------------------------------------------------------------------
  603.   def item_list
  604.     return @data[self.type][@ctg]
  605.   end
  606.   def data_i(t, c, i)
  607.     return nil if i < 0 or i >= @data[t][c].size
  608.     return @data[t][c][i]
  609.   end
  610.   def data
  611.     return data_i(self.type, @ctg, @index)
  612.   end
  613.   def item_i(t, c, i)
  614.     return nil if i < 0 or i >= @data[t][c].size
  615.     return @data[t][c][i].obj
  616.   end
  617.   def item
  618.     return item_i(self.type, @ctg, @index)
  619.   end
  620.   #--------------------------------------------------------------------------
  621.   # ● 有■Index?
  622.   #--------------------------------------------------------------------------
  623.   def enable_i?(t, c, i)
  624.     d = data_i(t, c, i)
  625.     return (d.nil? ? false : d.enable?)
  626.   end
  627.   def enable?
  628.     return enable_i?(self.type, @ctg, @index)
  629.   end
  630.   #--------------------------------------------------------------------------
  631.   # ● ダミーウィンドウのリフレッシュ
  632.   #--------------------------------------------------------------------------
  633.   def dummy_refresh
  634.     @dmy_win.refresh(data)
  635.   end
  636.   #--------------------------------------------------------------------------
  637.   # ● ダミーウィンドウのクリア
  638.   #--------------------------------------------------------------------------
  639.   def dummy_clear
  640.     @dmy_win.refresh(nil)
  641.   end
  642. end
  643.  
  644.  
  645. #==============================================================================
  646. # ■ Window_BsSList
  647. #==============================================================================
  648. class Window_BsSList < Window_BsListCmn
  649.   attr_accessor :pt_window
  650.   attr_accessor :sts_window
  651.   OFFSET = 16
  652.   #--------------------------------------------------------------------------
  653.   # ● オブジェクト初期化
  654.   #--------------------------------------------------------------------------
  655.   def initialize(win)
  656.     @data = nil
  657.     @slist = []
  658.     l = line_height + standard_padding
  659.     super(win.x+offset, win.y+l, win.width-offset, win.height-l)
  660.     hide
  661.   end
  662.   def win_z
  663.     return 210
  664.   end
  665.   def offset
  666.     return 16
  667.   end
  668.   #--------------------------------------------------------------------------
  669.   # ● ウィンドウの表示
  670.   #--------------------------------------------------------------------------
  671.   def show
  672.     @sprite_p.show
  673.     @sprite_n.show
  674.     super
  675.   end
  676.   #--------------------------F------------------------------------------------
  677.   # ● ウィンドウの非表示
  678.   #--------------------------------------------------------------------------
  679.   def hide
  680.     @sprite_p.hide
  681.     @sprite_n.hide
  682.     super
  683.   end
  684.   #--------------------------------------------------------------------------
  685.   # ● 項目數の取得
  686.   #--------------------------------------------------------------------------
  687.   def item_max
  688.     @slist.size
  689.   end
  690.   #--------------------------------------------------------------------------
  691.   # ● 起動
  692.   #--------------------------------------------------------------------------
  693.   def startup(data)
  694.     show.activate
  695.     if @data != data
  696.       @data = data
  697.       @slist = @data.make_slist
  698.       create_contents
  699.       change_color(normal_color)
  700.       refresh
  701.     end
  702.     self.index = 0
  703.   end
  704.   #--------------------------------------------------------------------------
  705.   # ● 項目描畫
  706.   #--------------------------------------------------------------------------
  707.   def draw_item(index)
  708.     itm = data_i(index)
  709.     change_color(normal_color, enable_i?(index))
  710.     r = item_rect_for_text(index)
  711.     draw_item_name(itm.obj, r.x, r.y,  enable_i?(index), 220)
  712.     draw_text(tag_p_x-60-offset, r.y, 80, line_height, itm.price.to_s, 2)
  713.     draw_text(tag_n_x-50-offset, r.y, 80, line_height, itm.num.to_s, 2)
  714.   end
  715.   #--------------------------------------------------------------------------
  716.   # ● アイテム取得
  717.   #--------------------------------------------------------------------------
  718.   def data_i(i)
  719.     return nil if i < 0
  720.     return @slist[i]
  721.   end
  722.   def data
  723.     return data_i(@index)
  724.   end
  725.   def item_i(i)
  726.     return nil if i < 0
  727.     return @slist[i].obj
  728.   end
  729.   def item
  730.     return item_i(@index)
  731.   end
  732.   #--------------------------------------------------------------------------
  733.   # ● 有■Index?
  734.   #--------------------------------------------------------------------------
  735.   def enable_i?(i)
  736.     return data_i(i).enable?
  737.   end
  738.   def enable?
  739.     return enable_i?(@index)
  740.   end
  741. end
  742.  
  743.  
  744. #==============================================================================
  745. # ■ Window_BsActors
  746. #==============================================================================
  747. class Window_BsActors < Window_Selectable
  748.   #--------------------------------------------------------------------------
  749.   # ● オブジェクト初期化
  750.   #--------------------------------------------------------------------------
  751.   def initialize
  752.     @hh = @page = 0
  753.     @item = nil
  754.     clear_exchange
  755.     y = fitting_height(2) + fitting_height(1)
  756.     h = Graphics.height - y - fitting_height(3)
  757.     super(Graphics.width-120, y, 120, h)
  758.     unselect
  759.     refresh
  760.   end
  761.   #--------------------------------------------------------------------------
  762.   # ● 固定パターン?
  763.   #--------------------------------------------------------------------------
  764.   def fix?
  765.     item_max < page_size
  766.   end
  767.   #--------------------------------------------------------------------------
  768.   # ● 裝備交換可能か?
  769.   #--------------------------------------------------------------------------
  770.   def equip_exchange_ok?(actor, item)
  771.     return true  unless @exchange
  772.     return false unless actor.equips.include?(item)
  773.     equip_change_ok?(actor, item)
  774.   end
  775.   #--------------------------------------------------------------------------
  776.   # ● 裝備可能か?
  777.   #--------------------------------------------------------------------------
  778.   def equip_ok?(actor, item)
  779.     return false unless actor.equippable?(item)
  780.     actor.slot_list(item.etype_id).any? { |s| actor.equip_change_ok?(s) }
  781.   end
  782.   #--------------------------------------------------------------------------
  783.   # ● 裝備交換可能slotか?
  784.   #--------------------------------------------------------------------------
  785.   def equip_change_ok?(actor, item)
  786.     actor.slot_list(item.etype_id).any? { |s| actor.equip_change_ok?(s) }
  787.   end
  788.   #--------------------------------------------------------------------------
  789.   # ● 可否判定
  790.   #--------------------------------------------------------------------------
  791.   def enable_i?(index)
  792.     return false if @item.nil? or index < 0
  793.     a = data_i(index)
  794.     return false if !equip_exchange_ok?(a, @equip_item)
  795.     equip_ok?(a, @item.obj)
  796.   end
  797.   def enable?
  798.     return enable_i?(@index)
  799.   end
  800.   #--------------------------------------------------------------------------
  801.   # ● アクター情報
  802.   #--------------------------------------------------------------------------
  803.   def data_i(index)
  804.     return nil if index < 0
  805.     $game_party.members[index]
  806.   end
  807.   def actor
  808.     data_i(@index)
  809.   end
  810.   #--------------------------------------------------------------------------
  811.   # ● 裝備交換モード
  812.   #--------------------------------------------------------------------------
  813.   def set_exchange(equip_item)
  814.     @exchange = true
  815.     @equip_item = equip_item
  816.     refresh
  817.   end
  818.   def clear_exchange(re=false)
  819.     @exchange = false
  820.     @equip_item = nil
  821.     refresh if re
  822.   end
  823.   #--------------------------------------------------------------------------
  824.   # ● 項目數の取得
  825.   #--------------------------------------------------------------------------
  826.   def item_max
  827.     $game_party.members.size
  828.   end
  829.   #--------------------------------------------------------------------------
  830.   # ● 項目の高さを取得
  831.   #--------------------------------------------------------------------------
  832.   def item_height
  833.     h = height - standard_padding * 2
  834.     h / page_size
  835.   end
  836.   #--------------------------------------------------------------------------
  837.   # ● 選■項目の有■狀態を取得
  838.   #--------------------------------------------------------------------------
  839.   def current_item_enabled?
  840.     enable?
  841.   end
  842.   #--------------------------------------------------------------------------
  843.   # ● 一度に表示できるアクターの人數
  844.   #--------------------------------------------------------------------------
  845.   def page_size
  846.     return 4
  847.   end
  848.   #--------------------------------------------------------------------------
  849.   # ● 最大ページ數の取得
  850.   #--------------------------------------------------------------------------
  851.   def page_max
  852.     (item_max + page_size - 1) / page_size
  853.   end
  854.   #--------------------------------------------------------------------------
  855.   # ● 項目數の取得
  856.   #--------------------------------------------------------------------------
  857.   def next_page
  858.     @page = (@page + 1) % page_max
  859.     self.top_row = @page * page_size
  860.   end
  861.   #--------------------------------------------------------------------------
  862.   # ● アイテムの設定
  863.   #     item : 新しいアイテム
  864.   #--------------------------------------------------------------------------
  865.   def item=(item)
  866.     return if @item == item
  867.     @item = item
  868.     refresh
  869.   end
  870.   #--------------------------------------------------------------------------
  871.   # ● 項目の描畫
  872.   #--------------------------------------------------------------------------
  873.   def draw_item(index)
  874.     actor = data_i(index)
  875.     r = item_rect(index)
  876.     e = enable_i?(index)
  877.     hh = (r.height+32)/2
  878.     draw_actor_graphic(actor, 20, r.y + hh, e)
  879.     return if @item.nil? or !@item.obj.is_a?(RPG::EquipItem)
  880.     return unless equip_ok?(actor, @item.obj)
  881.     prms = @item.obj.is_a?(RPG::Weapon) ? [2,4] : [3,5]
  882.     equips = actor.equips.select { |a| a != nil }
  883.     equips = equips.select { |a| a.etype_id == @item.obj.etype_id }
  884.     r.y += r.height / 2 - line_height
  885.     prms.each_index do |i|
  886.       diff = diff_item_param(equips, prms[i])
  887.       draw_item_diff(28, r.y+i*(line_height),diff, e, prms[i])
  888.     end
  889.   end
  890.   #--------------------------------------------------------------------------
  891.   # ● グラフィックの描畫
  892.   #--------------------------------------------------------------------------
  893.   def draw_actor_graphic(actor, x, y, enble)
  894.     return if actor == nil
  895.     bitmap = Cache.character(actor.character_name)
  896.     sign = actor.character_name[/^[\!\$]./]
  897.     if sign != nil and sign.include?('$')
  898.       cw = bitmap.width / 3
  899.       ch = bitmap.height / 4
  900.     else
  901.       cw = bitmap.width / 12
  902.       ch = bitmap.height / 8
  903.     end
  904.     n = actor.character_index
  905.     src_rect = Rect.new((n%4*3+1)*cw, (n/4*4)*ch, cw, ch)
  906.     self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect, enble ? 255 : translucent_alpha)
  907.   end
  908.   #--------------------------------------------------------------------------
  909.   # ● アイテムパラメータ差分取得
  910.   #--------------------------------------------------------------------------
  911.   def diff_item_param(equips, prm)
  912.     e_items = equips.sort { |a, b| b.params[prm] - a.params[prm] }
  913.     new_prm = e_items.empty? ? 0 : e_items[0].params[prm]
  914.     return @item.obj.params[prm] - new_prm
  915.   end
  916.   #--------------------------------------------------------------------------
  917.   # ● 裝備差分■の描畫
  918.   #--------------------------------------------------------------------------
  919.   def draw_item_diff(x, y, change, able, prm)
  920.     change_color(param_change_color(change), able)
  921.     draw_text(x, y, contents_width-x-4, line_height, Vocab::param(prm)+sprintf("%+d",change), 2)
  922.   end
  923. end
  924.  
  925.  
  926. #==============================================================================
  927. # ■ Window_BsYesNo
  928. #==============================================================================
  929. class Window_BsYesNo < Window_Selectable
  930.   CMD = ["はい", "いいえ"]
  931.   #--------------------------------------------------------------------------
  932.   # ● X座標
  933.   #--------------------------------------------------------------------------
  934.   def xx(w)
  935.     (Graphics.width-w) / 2
  936.   end
  937.   #--------------------------------------------------------------------------
  938.   # ● オブジェクト初期化
  939.   #--------------------------------------------------------------------------
  940.   def initialize
  941.     h = fitting_height(3)
  942.     y = (Graphics.height - h) / 2
  943.     super(xx(200), y, 200, h)
  944.     hide.z = 500
  945.     @text = ""
  946.   end
  947.   #--------------------------------------------------------------------------
  948.   # ● 桁數の取得
  949.   #--------------------------------------------------------------------------
  950.   def col_max
  951.     item_max
  952.   end
  953.   #--------------------------------------------------------------------------
  954.   # ● 項目數の取得
  955.   #--------------------------------------------------------------------------
  956.   def item_max
  957.     CMD.size
  958.   end
  959.   #--------------------------------------------------------------------------
  960.   # ● テキスト表示
  961.   #--------------------------------------------------------------------------
  962.   def set_text(type, item=nil)
  963.     @text = Blacksmith::MesCmd.conv_text(type, item)
  964.     w = contents.text_size(@text).width
  965.     self.width = w + standard_padding * 2
  966.     self.x = xx(self.width)
  967.     create_contents
  968.     refresh
  969.     show.activate.index = 1
  970.   end
  971.   #--------------------------------------------------------------------------
  972.   # ● リフレッシュ
  973.   #--------------------------------------------------------------------------
  974.   def refresh
  975.     contents.clear
  976.     draw_text(4, line_height*0, contents_width, line_height, @text)
  977.     draw_text(4, line_height*1, contents_width, line_height, "裝備しますか?")
  978.     item_max.times { |i| draw_item(i) }
  979.   end
  980.   #--------------------------------------------------------------------------
  981.   # ● 項目の描畫
  982.   #     index : 項目番號
  983.   #--------------------------------------------------------------------------
  984.   def draw_item(index)
  985.     draw_text(item_rect_for_text(index), CMD[index], 1)
  986.   end
  987.   #--------------------------------------------------------------------------
  988.   # ● 項目を描畫する矩形の取得
  989.   #--------------------------------------------------------------------------
  990.   def item_rect(index)
  991.     rect = Rect.new
  992.     rect.width = item_width
  993.     rect.height = item_height
  994.     rect.x = index % col_max * (item_width + spacing)
  995.     rect.y = index / col_max * item_height + item_height*2
  996.     rect
  997.   end
  998. end
  999.  
  1000.  
  1001. #==============================================================================
  1002. # ■ Window_BsCaution
  1003. #==============================================================================
  1004. class Window_BsCaution < Window_Selectable
  1005.   #--------------------------------------------------------------------------
  1006.   # ● X座標
  1007.   #--------------------------------------------------------------------------
  1008.   def xx(w)
  1009.     (Graphics.width-w) / 2
  1010.   end
  1011.   #--------------------------------------------------------------------------
  1012.   # ● オブジェクト初期化
  1013.   #--------------------------------------------------------------------------
  1014.   def initialize
  1015.     h = fitting_height(1)
  1016.     y = (Graphics.height - h) / 2
  1017.     super(xx(240), y, 240, h)
  1018.     @callback = nil
  1019.     hide.z = 600
  1020.   end
  1021.   #--------------------------------------------------------------------------
  1022.   # ● リフレッシュ
  1023.   #--------------------------------------------------------------------------
  1024.   def set_text(type, item=nil)
  1025.     text = Blacksmith::MesCmd.conv_text(type, item)
  1026.     w = contents.text_size(text).width
  1027.     self.width = w + standard_padding * 2
  1028.     self.x = xx(self.width)
  1029.     create_contents
  1030.     draw_text(0, 0, w, line_height, text, 1)
  1031.     show.activate.pause = true
  1032.     set_callback(nil)
  1033.   end
  1034.   #--------------------------------------------------------------------------
  1035.   # ● Callback登錄
  1036.   #--------------------------------------------------------------------------
  1037.   def set_callback(callback=nil)
  1038.     @callback = callback
  1039.   end
  1040.   def get_callback
  1041.     @callback
  1042.   end
  1043. end
  1044.  
  1045.  
  1046. #==============================================================================
  1047. # ■ Window_BsStatus
  1048. #==============================================================================
  1049. class Window_BsStatus < Window_Selectable
  1050.   M_MTRL  = 0 # 素材アイテムステータス
  1051.   M_ITEM  = 1 # ■成アイテムステータス
  1052.   M_PARTY = 2 # パーティーステータス
  1053.   M_ACTOR = 3 # アクターステータス
  1054.   PATTERN = Blacksmith::ST_PTN  # 切り替えの並び順
  1055.   #--------------------------------------------------------------------------
  1056.   # ● オブジェクト初期化
  1057.   #--------------------------------------------------------------------------
  1058.   def initialize(type=0)
  1059.     @mode = M_MTRL
  1060.     @type = type
  1061.     @item = nil
  1062.     super(0, Graphics.height-fitting_height(3), Graphics.width, fitting_height(3))
  1063.     mode_reset(type)
  1064.     refresh
  1065.   end
  1066.   #--------------------------------------------------------------------------
  1067.   # ● 項目數の取得
  1068.   #--------------------------------------------------------------------------
  1069.   def item_max
  1070.     case @mode
  1071.     when M_MTRL;  return 6
  1072.     when M_ITEM;  return 8
  1073.     when M_PARTY; return ($game_party.members.size + page_size - 1) / page_size
  1074.     when M_ACTOR; return $game_party.members.size
  1075.     end
  1076.     return 0
  1077.   end
  1078.   #--------------------------------------------------------------------------
  1079.   # ● 橫に項目が並ぶときの空白の幅を取得
  1080.   #--------------------------------------------------------------------------
  1081.   def spacing
  1082.     return 16
  1083.   end
  1084.   #--------------------------------------------------------------------------
  1085.   # ● 桁數の取得
  1086.   #--------------------------------------------------------------------------
  1087.   def col_max
  1088.     case @mode
  1089.     when M_MTRL;  return 2
  1090.     when M_ITEM;  return 4
  1091.     when M_PARTY; return page_size
  1092.     when M_ACTOR; return 1
  1093.     end
  1094.     return 0
  1095.   end
  1096.   #--------------------------------------------------------------------------
  1097.   # ● 桁數の取得
  1098.   #--------------------------------------------------------------------------
  1099.   def page_size
  1100.     case @mode
  1101.     when M_MTRL;  return 1
  1102.     when M_ITEM;  return 1
  1103.     when M_PARTY; return 4
  1104.     when M_ACTOR; return 1
  1105.     end
  1106.     return 0
  1107.   end
  1108.   #--------------------------------------------------------------------------
  1109.   # ● 固定パターン?
  1110.   #--------------------------------------------------------------------------
  1111.   def fix?
  1112.     return (PATTERN.size <= 1)
  1113.   end
  1114.   #--------------------------------------------------------------------------
  1115.   # ● アイテムの設定
  1116.   #     item : 新しいアイテム
  1117.   #--------------------------------------------------------------------------
  1118.   def item=(item)
  1119.     return if @item == item
  1120.     @item = item
  1121.     refresh
  1122.   end
  1123.   #--------------------------------------------------------------------------
  1124.   # ● モードチェンジ[local]
  1125.   #--------------------------------------------------------------------------
  1126.   def change_local_mode
  1127.     @local_idx += 1
  1128.     if @local_idx >= item_max
  1129.       @local_idx = 0
  1130.       next_mode_t
  1131.     end
  1132.     refresh
  1133.   end
  1134.   #--------------------------------------------------------------------------
  1135.   # ● モードチェンジ
  1136.   #--------------------------------------------------------------------------
  1137.   def change_mode
  1138.     case @mode
  1139.     when M_MTRL,M_ITEM;   next_mode_t;  refresh
  1140.     when M_PARTY,M_ACTOR; change_local_mode
  1141.     end
  1142.   end
  1143.   #--------------------------------------------------------------------------
  1144.   # ● モードリセット
  1145.   #--------------------------------------------------------------------------
  1146.   def mode_reset(type)
  1147.     @mode = M_MTRL
  1148.     @type = type
  1149.     next_mode if @type == 1 and !fix?
  1150.     @local_idx = 0
  1151.   end
  1152.   #--------------------------------------------------------------------------
  1153.   # ● 次のモードへ遷移
  1154.   #--------------------------------------------------------------------------
  1155.   def next_mode_t
  1156.     next_mode
  1157.     next_mode if @type == 1 and @mode == M_ITEM and !fix?
  1158.   end
  1159.   def next_mode
  1160.     @mode = PATTERN[((PATTERN.index(@mode) + 1) % PATTERN.size)]
  1161.   end
  1162.   #--------------------------------------------------------------------------
  1163.   # ● リフレッシュ
  1164.   #--------------------------------------------------------------------------
  1165.   def refresh
  1166.     contents.clear
  1167.     return if @item == nil
  1168.     case @mode
  1169.     when M_MTRL;  refresh_material
  1170.     when M_ITEM;  refresh_item
  1171.     when M_PARTY; refresh_party
  1172.     when M_ACTOR; refresh_actor
  1173.     end
  1174.   end
  1175.   #--------------------------------------------------------------------------
  1176.   # ● リフレッシュ  : M_MTRL
  1177.   #--------------------------------------------------------------------------
  1178.   def refresh_material
  1179.     return if @type == 1
  1180.     change_color(normal_color)
  1181.     @item.cond.size.times { |i| draw_material_i(i) }
  1182.   end
  1183.   #--------------------------------------------------------------------------
  1184.   # ● 項目描畫  : M_MTRL
  1185.   #--------------------------------------------------------------------------
  1186.   def draw_material_i(index)
  1187.     c = @item.cond[index]
  1188.     r = item_rect(index)
  1189.     change_color(normal_color, c.enable)
  1190.     draw_item_name(c.obj, r.x, r.y, c.enable)
  1191.     draw_text(r.x+190, r.y, 30, line_height, c.pt_num, 2)
  1192.     draw_text(r.x+220, r.y, 16, line_height, "/")
  1193.     draw_text(r.x+224, r.y, 30, line_height, c.num, 2)
  1194.   end
  1195.   #--------------------------------------------------------------------------
  1196.   # ● リフレッシュ  : M_ITEM
  1197.   #--------------------------------------------------------------------------
  1198.   def refresh_item
  1199.     draw_item_name(@item.obj, 4, 0, true, 220)
  1200.     text = @item.obj.is_a?(RPG::Weapon) ?
  1201.                 $data_system.weapon_types[@item.obj.wtype_id] :
  1202.                 $data_system.armor_types[@item.obj.atype_id]
  1203.     draw_text(240, 0, 120, line_height, "[#{text}]")
  1204. #    draw_text(240. 0, 120, line_height, $data_system.terms.etype[@item.obj.etype_id])
  1205.     draw_item_prms
  1206.   end
  1207.   #--------------------------------------------------------------------------
  1208.   # ● アイテムの上昇パラメータ描畫  : M_ITEM
  1209.   #--------------------------------------------------------------------------
  1210.   def draw_item_prms
  1211.     8.times do |i|
  1212.       r = item_prm_rect(i)
  1213.       r.width -= 10
  1214.       change_color(system_color)
  1215.       draw_text(r, $data_system.terms.params[i])
  1216.       change_color(param_change_color(@item.obj.params[i]))
  1217.       draw_text(r, sprintf("%+d", @item.obj.params[i]), 2)
  1218.     end
  1219.   end
  1220.   #--------------------------------------------------------------------------
  1221.   # ● リフレッシュ  : M_PARTY
  1222.   #--------------------------------------------------------------------------
  1223.   def refresh_party
  1224.     start_index = @local_idx * page_size
  1225.     size = [page_size, $game_party.members.size - start_index].min
  1226.     size.times { |i| draw_item_party(i) }
  1227.   end
  1228.   #--------------------------------------------------------------------------
  1229.   # ● 項目描畫 : M_PARTY
  1230.   #--------------------------------------------------------------------------
  1231.   def draw_item_party(index)
  1232.     actor = $game_party.members[index + @local_idx * page_size]
  1233.     case @item.obj
  1234.     when RPG::Item;   draw_item_party_i(actor, item_rect(index).x)
  1235.     when RPG::Weapon; draw_item_party_e(actor, item_rect(index).x, [2, 4])
  1236.     when RPG::Armor;  draw_item_party_e(actor, item_rect(index).x, [3, 5])
  1237.     end
  1238.   end
  1239.   #--------------------------------------------------------------------------
  1240.   # ● 項目描畫 : M_PARTY : RPG::Item
  1241.   #--------------------------------------------------------------------------
  1242.   def draw_item_party_i(actor, x)
  1243.     draw_actor_name(actor, x, 0)
  1244.     draw_actor_hp(actor, x, line_height+4)
  1245.     draw_actor_mp(actor, x, line_height*2+4)
  1246.   end
  1247.   #--------------------------------------------------------------------------
  1248.   # ● 項目描畫 : M_PARTY : RPG::Weapon/Armor
  1249.   #--------------------------------------------------------------------------
  1250.   def draw_item_party_e(actor, x, prms)
  1251.     able = actor.equippable?(@item.obj)
  1252.     change_color(normal_color, able)
  1253.     draw_text(x, 0, 112, line_height, actor.name)
  1254.     prms.each_index do |i|
  1255.       change_color(system_color, able)
  1256.       draw_text(x, (i+1)*line_height, 82, line_height, $data_system.terms.params[prms[i]])
  1257.     end
  1258.     draw_diff_prms(actor, prms, x+10, line_height) if able
  1259.   end
  1260.   #--------------------------------------------------------------------------
  1261.   # ● パラメータ差分描畫
  1262.   #--------------------------------------------------------------------------
  1263.   def draw_diff_prms(actor, prms, x, y)
  1264.     equips = actor.equips.select { |a| a != nil }
  1265.     equips = equips.select { |a| a.etype_id == @item.obj.etype_id }
  1266.     prms.each_index do |i|
  1267.       diff = diff_item_param(equips, prms[i], prms[0])
  1268.       draw_item_diff(x, y+i*line_height, diff)
  1269.     end
  1270.   end
  1271.   #--------------------------------------------------------------------------
  1272.   # ● アイテムパラメータ差分取得
  1273.   #--------------------------------------------------------------------------
  1274.   def diff_item_param(equips, prm, dprm)
  1275.     e_items = equips.sort { |a, b| b.params[dprm] - a.params[dprm] }
  1276.     e_prm = e_items.empty? ? 0 : e_items[0].params[prm]
  1277.     return @item.obj.params[prm] - e_prm
  1278.   end
  1279.   #--------------------------------------------------------------------------
  1280.   # ● 裝備差分■の描畫
  1281.   #--------------------------------------------------------------------------
  1282.   def draw_item_diff(x, y, change)
  1283.     change_color(param_change_color(change))
  1284.     draw_text(x, y, 110, line_height, sprintf("%+d", change), 2)
  1285.   end
  1286.   #--------------------------------------------------------------------------
  1287.   # ● リフレッシュ  : M_ACTOR
  1288.   #--------------------------------------------------------------------------
  1289.   def refresh_actor
  1290.     actor = $game_party.members[@local_idx]
  1291.     able = @item.obj.is_a?(RPG::Item) ? true : actor.equippable?(@item.obj)
  1292.     type = @item.obj.is_a?(RPG::Item) ? -1 : @item.obj.etype_id
  1293.     change_color(normal_color, able)
  1294.     draw_text(0, 0, 120, line_height, actor.name)
  1295.     case @item.obj
  1296.     when RPG::Item;   draw_item_actor_i(actor)
  1297.     when RPG::Weapon; draw_item_actor_w(actor, able)
  1298.     when RPG::Armor;  draw_item_actor_a(actor, able)
  1299.     end
  1300.   end
  1301.   #--------------------------------------------------------------------------
  1302.   # ● 項目の描畫  : M_ACTOR : RPG::Item
  1303.   #--------------------------------------------------------------------------
  1304.   def draw_item_actor_i(actor)
  1305.     draw_actor_level(actor, 128, 0)
  1306.   end
  1307.   #--------------------------------------------------------------------------
  1308.   # ● 裝備中アイテム描畫
  1309.   #--------------------------------------------------------------------------
  1310.   def draw_equip_items(items, able)
  1311.     x = 128
  1312.     text = " / "
  1313.     items.size.times do |i|
  1314.       if i > 0
  1315.         draw_text(x, 0, 32, line_height, text)
  1316.         x += contents.text_size(text).width
  1317.       end
  1318.       draw_item_name(items[i], x, 0, able)
  1319.       x += 24 + contents.text_size(items[i].name).width
  1320.     end
  1321.   end
  1322.   #--------------------------------------------------------------------------
  1323.   # ● 項目の描畫  : M_ACTOR : RPG::Weapon
  1324.   #--------------------------------------------------------------------------
  1325.   def draw_item_actor_w(actor, able)
  1326.     weapons = actor.weapons
  1327.     draw_equip_items(weapons, able)
  1328.     draw_diff_equip_params(actor, weapons, 2, able)
  1329.   end
  1330.   #--------------------------------------------------------------------------
  1331.   # ● 項目の描畫  : M_ACTOR : RPG::Armor
  1332.   #--------------------------------------------------------------------------
  1333.   def draw_item_actor_a(actor, able)
  1334.     armors = actor.armors.select { |a| a.etype_id == @item.obj.etype_id }
  1335.     draw_equip_items(armors, able)
  1336.     draw_diff_equip_params(actor, armors, 3, able)
  1337.   end
  1338.   #--------------------------------------------------------------------------
  1339.   # ● 全パラメータの■動■描畫  : M_ACTOR
  1340.   #--------------------------------------------------------------------------
  1341.   def draw_diff_equip_params(actor, equips, dprm, able)
  1342.     8.times do |i|
  1343.       r = item_prm_rect(i)
  1344.       change_color(system_color, able)
  1345.       draw_text(r.x, r.y, 82, line_height, $data_system.terms.params[i])
  1346.       draw_item_diff(r.x+r.width-120, r.y, diff_item_param(equips, i, dprm)) if able
  1347.     end
  1348.   end
  1349.   #--------------------------------------------------------------------------
  1350.   # ● 項目を描畫する矩形の取得
  1351.   #--------------------------------------------------------------------------
  1352.   def item_prm_rect(index)
  1353.     rect = Rect.new
  1354.     rect.width = contents_width / 4
  1355.     rect.height = line_height
  1356.     rect.x = index / 2 * rect.width
  1357.     rect.y = index % 2 * line_height + line_height
  1358.     rect
  1359.   end
  1360. end
  1361.  
  1362.  
  1363. #==============================================================================
  1364. # ■ Window_BsItemInfo
  1365. #==============================================================================
  1366. class Window_BsItemInfo < Window_Selectable
  1367.   #--------------------------------------------------------------------------
  1368.   # ● オブジェクト初期化
  1369.   #--------------------------------------------------------------------------
  1370.   def initialize
  1371.     r = Rect.new
  1372.     r.y = fitting_height(2) + fitting_height(1)
  1373.     r.width  = Graphics.width-120
  1374.     r.height = Graphics.height - r.y - fitting_height(3)
  1375.     @data = nil
  1376.     super(r.x, r.y, r.width, r.height)
  1377.     hide
  1378.     self.z = 700
  1379.   end
  1380.   #--------------------------------------------------------------------------
  1381.   # ● 表示可否
  1382.   #--------------------------------------------------------------------------
  1383.   def enable?
  1384.     Blacksmith::ENABLE_INFO
  1385.   end
  1386.   #--------------------------------------------------------------------------
  1387.   # ● 桁數の取得
  1388.   #--------------------------------------------------------------------------
  1389.   def col_max
  1390.     return 2
  1391.   end
  1392.   #--------------------------------------------------------------------------
  1393.   # ● 決定やキャンセルなどのハンドリング■理
  1394.   #--------------------------------------------------------------------------
  1395.   def process_handling
  1396.     return unless open? && active
  1397.     return process_ok       if ok_enabled?        && Input.trigger?(:C)
  1398.     return process_cancel   if cancel_enabled?    && Input.trigger?(:B)
  1399.     return process_pagedown if handle?(:pagedown) && Input.trigger?(:R)
  1400.     return process_pageup   if handle?(:pageup)   && Input.trigger?(:L)
  1401.     return process_info     if handle?(:info)     && Input.trigger?(:A)
  1402.   end
  1403.   #--------------------------------------------------------------------------
  1404.   # ● L ボタン(PageUp)が押されたときの■理
  1405.   #--------------------------------------------------------------------------
  1406.   def process_pageup
  1407.     Sound.play_cursor
  1408.     Input.update
  1409.     call_handler(:pageup)
  1410.   end
  1411.   #--------------------------------------------------------------------------
  1412.   # ● R ボタン(PageDown)が押されたときの■理
  1413.   #--------------------------------------------------------------------------
  1414.   def process_pagedown
  1415.     Sound.play_cursor
  1416.     Input.update
  1417.     call_handler(:pagedown)
  1418.   end
  1419.   #--------------------------------------------------------------------------
  1420.   # ● 情報表示■理
  1421.   #--------------------------------------------------------------------------
  1422.   def process_info
  1423.     Sound.play_ok
  1424.     Input.update
  1425.     hide.deactivate
  1426.     call_handler(:info)
  1427.   end
  1428.   #--------------------------------------------------------------------------
  1429.   # ● 表示ON
  1430.   #--------------------------------------------------------------------------
  1431.   def item=(data)
  1432.     show.activate
  1433.     self.pause = true
  1434.     return if @data == data
  1435.     @data = data
  1436.     refresh
  1437.   end
  1438.   #--------------------------------------------------------------------------
  1439.   # ● リフレッシュ
  1440.   #--------------------------------------------------------------------------
  1441.   def refresh
  1442.     contents.clear
  1443.     return if @data.nil?
  1444.     draw_item_name(@data, 4, 0, true, 220)
  1445.     text = @data.is_a?(RPG::Weapon) ?
  1446.                 $data_system.weapon_types[@data.wtype_id] :
  1447.                 $data_system.armor_types[@data.atype_id]
  1448.     draw_text(240, 0, 120, line_height, "[#{text}]")
  1449. #    draw_text(220. 0, 120, line_height, $data_system.terms.etype[@data.etype_id])
  1450.     draw_options
  1451.   end
  1452.   #--------------------------------------------------------------------------
  1453.   # ● オプション表示
  1454.   #--------------------------------------------------------------------------
  1455.   def draw_options
  1456.     # 特になし…。
  1457.   end
  1458. end


場景

RUBY 代码复制
  1. #==============================================================================
  2. # ■ VXAce-RGSS3-16 鍛冶屋 [シーンクラス]             by Claimh
  3. #==============================================================================
  4.  
  5. #==============================================================================
  6. # ■ Scene_Blacksmith
  7. #==============================================================================
  8. class Scene_Blacksmith < Scene_MenuBase
  9.   include Blacksmith::MesCmd
  10.   #--------------------------------------------------------------------------
  11.   # ● 開始■理
  12.   #--------------------------------------------------------------------------
  13.   def start
  14.     super
  15.     create_sys_window
  16.     create_mod_window
  17.     create_ctg_window
  18.     @help_window = Window_Help.new
  19.     @gold_window = Window_Gold.new
  20.     @gold_window.x = @sys_window.width
  21.     @gold_window.y = @sys_window.y
  22.     @sts_window  = Window_BsStatus.new(@sys_window.data)
  23.     create_yn_window
  24.     create_mes_window
  25.     create_pt_window
  26.     create_info_window
  27.     create_list_window
  28.     create_sublist_window
  29.     #
  30.     if @sys_window.fix?
  31.       @sys_window.hide
  32.       if @mod_window.fix?
  33.         @mod_window.hide
  34.         @list_window.activate
  35.         @ctg_window.change(@mod_window.data)
  36.         if @ctg_window.fix? # sys/mod/ctg全て固定の場合はmodを表示
  37.           @mod_window.show
  38.         end
  39.       else
  40.         @mod_window.data = @sys_window.data
  41.         @mod_window.show.activate
  42.       end
  43.     else
  44.       @mod_window.hide
  45.     end
  46.     #
  47.     delete_help
  48.     #
  49.     @equip = false
  50.     @actor = nil
  51.   end
  52.   #--------------------------------------------------------------------------
  53.   # ● sys/mod/ctgが全て固定
  54.   #--------------------------------------------------------------------------
  55.   def all_fix?
  56.     if @sys_window.fix? and @mod_window.fix? and @ctg_window.fix?
  57.       @sys_window.hide
  58.       @mod_window.show
  59.       @ctg_window.hide
  60.     end
  61.   end
  62.   #--------------------------------------------------------------------------
  63.   # ● ヘルプ消去
  64.   #--------------------------------------------------------------------------
  65.   def delete_help
  66.     @help_window.set_text("")
  67.     @pt_window.item = @sts_window.item = nil
  68.     @sts_window.mode_reset(@sys_window.data)
  69.     @list_window.dummy_clear
  70.   end
  71.   #--------------------------------------------------------------------------
  72.   # ● リストウィンドウ/サブリストウィンドウ
  73.   #--------------------------------------------------------------------------
  74.   def active_list_window
  75.     @sl_window.visible ? @sl_window : @list_window
  76.   end
  77.   #--------------------------------------------------------------------------
  78.   # ● システム選■ウィンドウ鍛造
  79.   #--------------------------------------------------------------------------
  80.   def create_sys_window
  81.     @sys_window = Window_BsSysCmd.new
  82.     @sys_window.set_handler(:ok,     method(:on_sys_ok))
  83.     @sys_window.set_handler(:cancel, method(:return_scene))
  84.   end
  85.   #----------------------------------------------------------------------------
  86.   # ● システム選■ OK
  87.   #----------------------------------------------------------------------------
  88.   def on_sys_ok
  89.     return return_scene if @sys_window.exit?
  90.     @sys_window.hide
  91.     unless @mod_window.fix?
  92.       @mod_window.data = @sys_window.data
  93.       @mod_window.show.activate
  94.       @list_window.change_t(@sys_window.data * 2 + @mod_window.data)
  95.     else
  96.       on_mod_ok
  97.     end
  98.   end
  99.   #--------------------------------------------------------------------------
  100.   # ● モード選■ウィンドウ鍛造
  101.   #--------------------------------------------------------------------------
  102.   def create_mod_window
  103.     @mod_window = Window_BsModCmd.new
  104.     @mod_window.set_handler(:ok,     method(:on_mod_ok))
  105.     @mod_window.set_handler(:cancel, method(:on_mod_cancel))
  106.     @mod_window.hide
  107.   end
  108.   #----------------------------------------------------------------------------
  109.   # ● モード選■ OK
  110.   #----------------------------------------------------------------------------
  111.   def on_mod_ok
  112.     return return_scene if @mod_window.exit?
  113.     @mod_window.hide
  114.     @sts_window.mode_reset(@sys_window.data)
  115.     @list_window.show.dummy_hide.activate.change_t(@sys_window.data * 2 + @mod_window.data)
  116.     @ctg_window.show.change(@mod_window.data)
  117.     all_fix?
  118.   end
  119.   #----------------------------------------------------------------------------
  120.   # ● モード選■ Cancel
  121.   #----------------------------------------------------------------------------
  122.   def on_mod_cancel
  123.     return return_scene if @sys_window.fix?
  124.     @mod_window.hide
  125.     @sys_window.show.activate
  126.   end
  127.   #--------------------------------------------------------------------------
  128.   # ● カテゴリウィンドウ鍛造
  129.   #--------------------------------------------------------------------------
  130.   def create_ctg_window
  131.     @ctg_window = Window_BsCtg.new
  132.   end
  133.   #--------------------------------------------------------------------------
  134.   # ● メッセージウィンドウ鍛造
  135.   #--------------------------------------------------------------------------
  136.   def create_mes_window
  137.     @mes_window  = Window_BsCaution.new
  138.     @mes_window.set_handler(:ok,       method(:on_mes_ok))
  139.     @mes_window.set_handler(:cancel,   method(:on_mes_ok))
  140.   end
  141.   #--------------------------------------------------------------------------
  142.   # ● メッセージ OK
  143.   #--------------------------------------------------------------------------
  144.   def on_mes_ok
  145.     @mes_window.hide
  146.     do_callback
  147.   end
  148.   #----------------------------------------------------------------------------
  149.   # ● 予約■理■行
  150.   #----------------------------------------------------------------------------
  151.   CB_YN   = 0
  152.   CB_S_PT = 1
  153.   CB_D_PT = 2
  154.   def do_callback
  155.     case @mes_window.get_callback
  156.     when CB_YN
  157.       @yn_window.show.activate
  158.     when CB_S_PT
  159.       @pt_window.activate.refresh
  160.       @pt_window.index = @elist[0]
  161.     when CB_D_PT
  162.       @pt_window.deactivate.unselect
  163.     when M_E_D, M_E_C
  164.       Sound.play_equip
  165.       @mes_window.set_text(@mes_window.get_callback, @actor)
  166.       @actor = nil
  167.     else
  168.       active_list_window.activate
  169.     end
  170.   end
  171.   #--------------------------------------------------------------------------
  172.   # ● Infoウィンドウ鍛造
  173.   #--------------------------------------------------------------------------
  174.   def create_info_window
  175.     @info_window = Window_BsItemInfo.new
  176.     @info_window.set_handler(:info,     method(:on_info_ok))
  177.     @info_window.set_handler(:cancel,   method(:on_info_ok))
  178.     @info_window.set_handler(:pagedown, method(:on_list_actors)) unless @pt_window.fix?
  179.     @info_window.set_handler(:pageup,   method(:on_list_sts))    unless @sts_window.fix?
  180.   end
  181.   #--------------------------------------------------------------------------
  182.   # ● Infoウィンドウ消去
  183.   #--------------------------------------------------------------------------
  184.   def on_info_ok
  185.     active_list_window.activate
  186.   end
  187.   #--------------------------------------------------------------------------
  188.   # ● Yes/No選■ウィンドウ鍛造
  189.   #--------------------------------------------------------------------------
  190.   def create_yn_window
  191.     @yn_window = Window_BsYesNo.new
  192.     @yn_window.set_handler(:ok,       method(:on_yn_ok))
  193.     @yn_window.set_handler(:cancel,   method(:on_yn_cancel))
  194.   end
  195.   #--------------------------------------------------------------------------
  196.   # ● Yes/No選■ OK
  197.   #--------------------------------------------------------------------------
  198.   def on_yn_ok
  199.     @yn_window.hide
  200.     if @yn_window.index == 0
  201.       @equip = true
  202.       @pt_window.index = 0
  203.       @pt_window.activate
  204.     else
  205.       on_yn_cancel
  206.     end
  207.   end
  208.   #--------------------------------------------------------------------------
  209.   # ● Yes/No選■ Cancel
  210.   #--------------------------------------------------------------------------
  211.   def on_yn_cancel
  212.     execute
  213.     @yn_window.hide
  214.     @sl_window.hide
  215.     @list_window.activate
  216.   end
  217.   #--------------------------------------------------------------------------
  218.   # ● パーティーウィンドウ鍛造
  219.   #--------------------------------------------------------------------------
  220.   def create_pt_window
  221.     @pt_window = Window_BsActors.new
  222.     @pt_window.set_handler(:ok, method(:on_pt_ok))
  223.   end
  224.   #--------------------------------------------------------------------------
  225.   # ● パーティー選■ OK
  226.   #--------------------------------------------------------------------------
  227.   def on_pt_ok
  228.     execute(@pt_window.actor)
  229.     @mes_window.set_text(M_E_C, @pt_window.actor)
  230.     @mes_window.set_callback(CB_D_PT)
  231.   end
  232.   #--------------------------------------------------------------------------
  233.   # ● リストウィンドウ鍛造
  234.   #--------------------------------------------------------------------------
  235.   def create_list_window
  236.     @list_window = Window_BsList.new(@sys_window.data, @mod_window.data)
  237.     @list_window.pt_window   = @pt_window
  238.     @list_window.sts_window  = @sts_window
  239.     @list_window.help_window = @help_window
  240.     @list_window.set_handler(:ok,       method(:on_list_ok))
  241.     @list_window.set_handler(:cancel,   method(:on_list_cancel))
  242.     @list_window.set_handler(:right,    method(:on_list_right))
  243.     @list_window.set_handler(:left,     method(:on_list_left))
  244.     @list_window.set_handler(:pagedown, method(:on_list_actors)) unless @pt_window.fix?
  245.     @list_window.set_handler(:pageup,   method(:on_list_sts))    unless @sts_window.fix?
  246.     @list_window.set_handler(:info,     method(:on_list_info))   if @info_window.enable?
  247.     @list_window.set_handler(:alert,    method(:on_list_alert))
  248.   end
  249.   #----------------------------------------------------------------------------
  250.   # ● リスト選■ OK
  251.   #----------------------------------------------------------------------------
  252.   def on_list_ok
  253.     @info_window.hide
  254.     if @list_window.sys_create?
  255.       Blacksmith::SUCCESS_SE.play unless Blacksmith::SUCCESS_SE.nil?
  256.       if @list_window.data.equippable_members.size == 0
  257.         @equip = false
  258.         execute
  259.         @mes_window.set_text(M_S_C, @list_window.data.obj)
  260.       else
  261.         @yn_window.set_text(M_S_C, @list_window.data.obj)
  262.       end
  263.     else
  264.       @sts_window.mode_reset(0)
  265.       @sl_window.startup(@list_window.data)
  266.       @list_window.hide.dummy_show.dummy_refresh
  267.     end
  268.   end
  269.   #----------------------------------------------------------------------------
  270.   # ● リスト選■ Cancel
  271.   #----------------------------------------------------------------------------
  272.   def on_list_cancel
  273.     @list_window.hide.dummy_show
  274.     @ctg_window.hide
  275.     @info_window.hide
  276.     delete_help
  277.     return @mod_window.show.activate unless @mod_window.fix?
  278.     return @sys_window.show.activate unless @sys_window.fix?
  279.     return_scene
  280.   end
  281.   #----------------------------------------------------------------------------
  282.   # ● リスト選■ Right
  283.   #----------------------------------------------------------------------------
  284.   def on_list_right
  285.     return if @ctg_window.fix?
  286.     @ctg_window.shift_r
  287.     @list_window.change_c(@ctg_window.index)
  288.   end
  289.   #----------------------------------------------------------------------------
  290.   # ● リスト選■ Left
  291.   #----------------------------------------------------------------------------
  292.   def on_list_left
  293.     return if @ctg_window.fix?
  294.     @ctg_window.shift_l
  295.     @list_window.change_c(@ctg_window.index)
  296.   end
  297.   #----------------------------------------------------------------------------
  298.   # ● リスト選■ アクター情報
  299.   #----------------------------------------------------------------------------
  300.   def on_list_actors
  301.     @pt_window.next_page
  302.   end
  303.   #----------------------------------------------------------------------------
  304.   # ● リスト選■ ステータス情報
  305.   #----------------------------------------------------------------------------
  306.   def on_list_sts
  307.     @sts_window.change_mode
  308.   end
  309.   #----------------------------------------------------------------------------
  310.   # ● リスト選■ アイテム情報
  311.   #----------------------------------------------------------------------------
  312.   def on_list_info
  313.     active_list_window.deactivate
  314.     @info_window.item = active_list_window.item
  315.   end
  316.   #----------------------------------------------------------------------------
  317.   # ● 警告メッセージ
  318.   #----------------------------------------------------------------------------
  319.   def on_list_alert
  320.     if @sl_window.visible
  321.       unless @sl_window.data.nil?
  322.         @sl_window.deactivate
  323.         @mes_window.set_text(@sl_window.data.message)
  324.       end
  325.     else
  326.       unless @list_window.data.nil?
  327.         @list_window.deactivate
  328.         @mes_window.set_text(@list_window.data.message)
  329.       end
  330.     end
  331.   end
  332.   #--------------------------------------------------------------------------
  333.   # ● サブリストウィンドウ鍛造
  334.   #--------------------------------------------------------------------------
  335.   def create_sublist_window
  336.     @sl_window = Window_BsSList.new(@list_window)
  337.     @sl_window.pt_window   = @pt_window
  338.     @sl_window.sts_window  = @sts_window
  339.     @sl_window.help_window = @help_window
  340.     @sl_window.set_handler(:ok,       method(:on_slist_ok))
  341.     @sl_window.set_handler(:cancel,   method(:on_slist_cancel))
  342.     @sl_window.set_handler(:pagedown, method(:on_list_actors)) unless @pt_window.fix?
  343.     @sl_window.set_handler(:pageup,   method(:on_list_sts))    unless @sts_window.fix?
  344.     @sl_window.set_handler(:info,     method(:on_list_info))   if @info_window.enable?
  345.     @sl_window.set_handler(:alert,    method(:on_list_alert))
  346.   end
  347.   #--------------------------------------------------------------------------
  348.   # ● サブリスト選■ Ok
  349.   #--------------------------------------------------------------------------
  350.   def on_slist_ok
  351.     Blacksmith::SUCCESS_SE.play unless Blacksmith::SUCCESS_SE.nil?
  352.     d = @list_window.data
  353.     if d.num == 0 # 所持品ない == 裝備品Only
  354.       # 強化したアイテムが裝備できるメンバーを抽出
  355.       @elist = d.equip_actors.select { |i| $game_party.members[i].equippable?(@sl_window.data.obj) }
  356.       if @elist.size > 1  # 複數人が裝備可能 → 選■
  357.         @equip = true
  358.         @pt_window.set_exchange(d.obj)
  359.         @mes_window.set_text(M_S_S, @sl_window.data.obj)
  360.         @mes_window.set_callback(CB_S_PT)
  361.       elsif @elist.size == 1  # 一人しか裝備できない → 裝備交換
  362.         @actor = $game_party.members[@elist[0]]
  363.         @equip = true
  364.         @mes_window.set_text(M_S_S, @sl_window.data.obj)
  365.         @mes_window.set_callback(M_E_C)
  366.         execute(@actor)
  367.       else # 誰も裝備できない → 裝備を外す
  368.         @actor = $game_party.members[d.equip_actors[0]]
  369.         @equip = false
  370.         itm = @sl_window.data.obj
  371.         @actor.change_equip(itm.is_a?(RPG::Weapon) ? 0 : (itm.kind+1), 0)
  372.         @mes_window.set_text(M_S_S, itm)
  373.         @mes_window.set_callback(M_E_D)
  374.         execute(@actor)
  375.       end
  376.     else # 所持品がある場合、裝備中かどうかは無視
  377.       if @sl_window.data.equippable_members.size == 0
  378.         @equip = false
  379.         @mes_window.set_text(M_S_S, @sl_window.data.obj)
  380.         execute
  381.       else
  382.         @yn_window.set_text(M_S_S, @sl_window.data.obj)
  383.       end
  384.     end
  385.   end
  386.   #--------------------------------------------------------------------------
  387.   # ● サブリスト選■ Cancel
  388.   #--------------------------------------------------------------------------
  389.   def on_slist_cancel
  390.     @sl_window.hide
  391.     @sts_window.mode_reset(@sys_window.data)
  392.     @list_window.show.dummy_hide.activate
  393.     @info_window.hide
  394.   end
  395.   #----------------------------------------------------------------------------
  396.   # ● 鍛治■行
  397.   #----------------------------------------------------------------------------
  398.   def execute(actor=nil)
  399.     if @list_window.sys_create?
  400.       @list_window.data.execute(@equip, actor)
  401.     else
  402.       @sl_window.data.execute(@equip, actor)
  403.       @sts_window.mode_reset(@sys_window.data)
  404.     end
  405.     @equip = false
  406.     @sl_window.hide.deactivate
  407.     @list_window.show.dummy_hide.activate.diff_refresh
  408.     @gold_window.refresh
  409.     @pt_window.clear_exchange(true)
  410.     @sts_window.refresh
  411.   end
  412. end





  

Lv3.寻梦者

梦石
0
星屑
3846
在线时间
1966 小时
注册时间
2013-1-3
帖子
9536
2
发表于 2013-8-22 18:55:55 | 只看该作者
你好,这里是RMXP提问区,向这种问题请发到RMVA区
@hys111111  

点评

我剛剛檢查了一下,沒發錯啊  发表于 2013-8-22 19:27
《宿愿·寻剑篇》正式版已经发布!快去看看!点击进入论坛发布贴
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1194
在线时间
209 小时
注册时间
2013-6-19
帖子
138
3
发表于 2013-8-23 01:18:01 | 只看该作者
本帖最后由 a0936459772 于 2013-8-23 01:30 编辑

你提供的代碼複製過來變這樣


根據你提供的腳本,我找了1.0.3版本的來做修正(Claimh的代碼特色就是很長啊...)
http://www4.plala.or.jp/findias/ ... acksmith/index.html

Q1:
在"設定"中的44行
RUBY 代码复制
  1. SYS_CMD = [0, 1, 2]

改成
RUBY 代码复制
  1. SYS_CMD = [0, 2]



在"基本クラス"的第11行
RUBY 代码复制
  1. T = ["生成", "強化", "やめる"]

改成
RUBY 代码复制
  1. T = ["生成", "強化", "退出"]



Q2:在"シーンクラス"的22行加一段
RUBY 代码复制
  1. @gold_window.y -= 24



Q5:參考翻譯

在"ウィンドウクラス"的
290 "價格"
291 "所持數"
468 "價格" "裝備"
930 "是" "否"
977 "是否要裝備"

至於其他需求就恕在下愛莫能助了...{:2_265:}

效果圖

评分

参与人数 1梦石 +2 收起 理由
Sion + 2 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
52
在线时间
135 小时
注册时间
2011-11-5
帖子
83
4
 楼主| 发表于 2013-8-23 20:53:58 | 只看该作者
本帖最后由 ji3rul4coco 于 2013-8-23 21:13 编辑
a0936459772 发表于 2013-8-23 01:18
你提供的代碼複製過來變這樣


感謝~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
6 小时
注册时间
2015-8-2
帖子
8
5
发表于 2015-8-2 20:10:53 | 只看该作者
大大  這腳本要怎麼使用阿?

点评

剛辦會員不太懂><,不好意思~  发表于 2015-8-2 20:52

评分

参与人数 1星屑 -5 收起 理由
taroxd -5 请不要挖坟,如有问题请用新帖提问,谢谢.

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-18 04:37

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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