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

Project1

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

[已经解决] 如果可以的话 还是把这个功能去掉把!

[复制链接]

Lv1.梦旅人

梦石
0
星屑
199
在线时间
248 小时
注册时间
2012-4-29
帖子
386
跳转到指定楼层
1
发表于 2013-11-21 21:35:22 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 Sion 于 2013-12-6 18:44 编辑

如果可以的话  还是麻烦下   帮忙把这个功能去掉下!


RUBY 代码复制
  1. #==============================================================================
  2. # ■ VXAce-RGSS3-30 マルチカテゴリショップ [Ver.1.0.0]       by Claimh
  3. #------------------------------------------------------------------------------
  4. # カテゴリ分類を細分化できるショップです。
  5. #<機能概要>
  6. #?購入?売却リストをカテゴリ分類する
  7. #?武器タイプ?防具タイプで分類する
  8. #?アクターが装備可能な武器?防具で分類する
  9. #?ショップ画面からの装備変更
  10. #?購入した装備品をすぐに装備する
  11. #?購入?売却不可のアイテムを設定できる
  12. #?購入?売却の価格レートの変更
  13. #------------------------------------------------------------------------------
  14. # <操作>
  15. # Cボタン      : 購入/売買
  16. # ←/→ボタン  : アクター情報切り替え
  17. # ↑/↓ボタン  : 購入/売却数 ±10
  18. # L/Rボタン    : カテゴリ切り替え
  19. #------------------------------------------------------------------------------
  20. # <メモ欄設定>
  21. # ?売却不可 : <not_sell>
  22. #------------------------------------------------------------------------------
  23. #<売買不可設定>
  24. # ?購入不可アイテム追加
  25. #    $game_system.shop.buy.add_ng_item(type, id)
  26. #      type : 種別(0:アイテム, 1:武器, 2:防具)
  27. #      id   : ID
  28. # ?購入不可アイテム解除
  29. #    $game_system.shop.buy.del_ng_item(type, id)
  30. # ?売却不可アイテム追加
  31. #    $game_system.shop.sell.add_ng_item(type, id)
  32. # ?売却不可アイテム解除
  33. #    $game_system.shop.sell.del_ng_item(type, id)
  34. #------------------------------------------------------------------------------
  35. # <全体売買レート変更>
  36. #?購入レート
  37. #  $game_system.shop.buy.rate   = レート(%)
  38. #?売却レート
  39. #  $game_system.shop.sell.rate  = レート(%)
  40. #------------------------------------------------------------------------------
  41. # <個別売買レート変更>
  42. #※全体レートよりも個別レートが優先されます。(全体×個別というレート計算はしません)
  43. #?個別購入レート
  44. #  $game_system.shop.buy.item_rate(type, id, rate)
  45. #      type : 種別(0:アイテム, 1:武器, 2:防具)
  46. #      id   : ID
  47. #      rate : レート(%)
  48. #?個別売却レート
  49. #  $game_system.shop.sell.item_rate(type, id, rate)
  50. #?個別購入レート情報削除
  51. #  $game_system.shop.buy.del_item_rate(type, id)
  52. #?個別売却レート情報削除
  53. #  $game_system.shop.sell.del_item_rate(type, id)
  54. #------------------------------------------------------------------------------
  55. # <合計金額取得>
  56. #?購入合計:  $game_system.shop.buy.gold
  57. #?売却合計:  $game_system.shop.sell.gold
  58. #------------------------------------------------------------------------------
  59. # <購入不可判定について>
  60. # 以下のいずれかに当てはまる場合は購入不可
  61. #   ?お金が足りない
  62. #   ?アイテムの最大数超過($game_party.item_max?)
  63. #   ?購入不可アイテムの対象($game_system.shop.buy.add_ng_item)
  64. #------------------------------------------------------------------------------
  65. # <売却不可判定について>
  66. # 以下のいずれかに当てはまる場合は売却不可
  67. #   ?データベース上の値段が0 (※レート計算で値段が0になる場合は除く)
  68. #   ?メモ欄に <not_sell>指定がある
  69. #   ?売却不可アイテムの対象($game_system.shop.sell.add_ng_item)
  70. #------------------------------------------------------------------------------
  71. # <アクターが装備可能な武器?防具で分類>
  72. # BUY_CTにACTORを入れた時の動作
  73. #   ?カテゴリ切り替えでACTORカテゴリに変わった時にアクターステータスも切り替え
  74. #   ?アイコンはキャラクターを表示
  75. #------------------------------------------------------------------------------
  76. # <購入した装備品をすぐに装備する>
  77. # アクターステータスウィンドウに表示されているアクターが装備できる武器?防具を
  78. # 購入したときに装備するか否かの選択が表示されます。
  79. #==============================================================================
  80.  
  81. module ExShop
  82.   ALL=0;ITEM=1;WEAPON=2;ARMOR=3;KEY=4;ACTOR=5
  83.   #----------------------------------------------------------------------------
  84.   # レート設定
  85.   #----------------------------------------------------------------------------
  86.   # 初期購入レート(%)
  87.   BUY_RATE  = 100.0
  88.   # 初期売却レート(%)
  89.   SELL_RATE = 60.0
  90.  
  91.   # 値段指定あり時も購入レートを適応する
  92.   USE_P_RATE = true
  93.  
  94.   #----------------------------------------------------------------------------
  95.   # 分類設定
  96.   #----------------------------------------------------------------------------
  97.   # 購入分類設定
  98.   #   ALL     : すべて
  99.   #   ITEM    : アイテム
  100.   #   WEAPON  : 武器
  101.   #   ARMOR   : 防具
  102.   #   ACTOR   : アクターが装備できる武器?防具
  103.   BUY_CT = [ALL, ITEM, WEAPON, ARMOR]
  104.   #BUY_CT = [ALL, ITEM, ACTOR]  # アクター装備別の例
  105.  
  106.   # 売却分類設定
  107.   #   ALL     : すべて
  108.   #   ITEM    : アイテム
  109.   #   WEAPON  : 武器
  110.   #   ARMOR   : 防具
  111.   #   KEY     : 大事なもの
  112.   SELL_CT = [ALL, ITEM, WEAPON, ARMOR, KEY]
  113.  
  114.  
  115.   # 武器をさらに分類する
  116.   # (分類設定のWEAPONを武器タイプで分類します)
  117.   USE_W_TYPE =  false
  118.   # 防具をさらに分類する
  119.   # (分類設定のARMORを防具タイプ/防具種別で分類します)
  120.   #   0 : 分類しない
  121.   #   1 : 防具タイプで分類
  122.   #   2 : 装備タイプ(盾/頭/身体/装飾品)で分類
  123.   USE_A_TYPE = 0
  124.  
  125.  
  126.   # アイコン設定
  127.   #         [ALL用, ITEM用, WEAPON用, ARMOR用, KEY用]
  128.   CT_ICON = [  4608,    4609,      4610,     4611,   4612]
  129.   # 武器タイプ アイコン設定
  130.   #           [0, 武器タイプ1, 武器タイプ2, …]
  131.   CT_W_ICON = [0, 4634, 4633, 146, 147, 148, 149, 150, 151, 152, 153]
  132.   # 防具タイプ アイコン設定
  133.   #           [0, 防具タイプ1, 防具タイプ2, …]
  134.   CT_A_ICON = [0, 4632, 4631, 169, 170, 160, 161]
  135.   # 防具種別 アイコン設定
  136.   #           [0,  盾, 頭, 身体, 装飾品]
  137.   CT_E_ICON = [0, 4630, 4629,  169,    176]
  138.  
  139.  
  140.   #----------------------------------------------------------------------------
  141.   # 表示設定
  142.   #----------------------------------------------------------------------------
  143.   # 購入不可アイテムの値段表示(""の時は値段を表示)
  144.   V_N_BUY = "售价"
  145.  
  146.   #----------------------------------------------------------------------------
  147.   # レイアウト設定
  148.   #----------------------------------------------------------------------------
  149.   # 所持金ウィンドウを左下に配置する
  150.   #   true  : 左下に配置(カテゴリ多用)
  151.   #   false : 右上に配置(カテゴリ小用)
  152.   GOLD_LD = false
  153. end
  154.  
  155.  
  156.  
  157. module ExShop
  158.   #--------------------------------------------------------------------------
  159.   # ● 購入レート変換(購入価格計算)
  160.   #--------------------------------------------------------------------------
  161.   def self.buy_price(item, price, fix=false)
  162.     return price if fix and !USE_P_RATE
  163.     $game_system.shop.buy.price(item_type(item), item.id, price)
  164.   end
  165.   #--------------------------------------------------------------------------
  166.   # ● 売却レート変換(売却価格計算)
  167.   #--------------------------------------------------------------------------
  168.   def self.sell_price(item, price)
  169.     $game_system.shop.sell.price(item_type(item), item.id, price)
  170.   end
  171.   #--------------------------------------------------------------------------
  172.   # ● atype => symbol
  173.   #--------------------------------------------------------------------------
  174.   def self.actor_sym
  175.     $game_party.members.collect {|a| a.id.to_s.to_sym }
  176.   end
  177.   #--------------------------------------------------------------------------
  178.   # ● CT設定 => symbol
  179.   #--------------------------------------------------------------------------
  180.   def self.ct_sym(ct)
  181.     ct.inject([]) do |r, c|
  182.       case c
  183.       when WEAPON;  r += wtype_sym
  184.       when ARMOR;   r += atype_sym
  185.       when ACTOR;   r += actor_sym
  186.       else;         r.push([:all, :item, :weapon, :armor, :key_item][c])
  187.       end
  188.     end
  189.   end
  190.   #--------------------------------------------------------------------------
  191.   # ● wtype => symbol
  192.   #--------------------------------------------------------------------------
  193.   def self.wtype_sym
  194.     return [:weapon] unless ExShop::USE_W_TYPE
  195.     $data_system.weapon_types[1, $data_system.weapon_types.size].collect {|a| a.to_sym}
  196.   end
  197.   #--------------------------------------------------------------------------
  198.   # ● atype => symbol
  199.   #--------------------------------------------------------------------------
  200.   def self.atype_sym
  201.     case ExShop::USE_A_TYPE
  202.     when 1  # 防具タイプ
  203.       $data_system.armor_types[1, $data_system.armor_types.size].collect {|a| a.to_sym}
  204.     when 2  # 装備タイプ
  205.       [:shield, :helmet, :clothes, :accessory]
  206.     else
  207.       [:armor]
  208.     end
  209.   end
  210.   #--------------------------------------------------------------------------
  211.   # ● symbol => wtype or atype
  212.   #--------------------------------------------------------------------------
  213.   def self.sym_type(sym)
  214.     str = sym.id2name
  215.     return WEAPON if $data_system.weapon_types.include?(str)
  216.     return ARMOR  if $data_system.armor_types.include?(str)
  217.     ACTOR
  218.   end
  219.   #--------------------------------------------------------------------------
  220.   # ● sym => wtype
  221.   #--------------------------------------------------------------------------
  222.   def self.sym_wtype(sym)
  223.     $data_system.weapon_types.index(sym.id2name)
  224.   end
  225.   #--------------------------------------------------------------------------
  226.   # ● sym => atype
  227.   #--------------------------------------------------------------------------
  228.   def self.sym_atype(sym)
  229.     $data_system.armor_types.index(sym.id2name)
  230.   end
  231.   #--------------------------------------------------------------------------
  232.   # ● symbol => 設定
  233.   #--------------------------------------------------------------------------
  234.   def self.sym2id(sym)
  235.     case sym
  236.     when :all;      return ALL
  237.     when :item;     return ITEM
  238.     when :weapon;   return WEAPON
  239.     when :armor;    return ARMOR
  240.     when :key_item; return KEY
  241.     when :shield, :helmet, :clothes, :accessory;  return ARMOR
  242.     else  return sym_type(sym)
  243.     end
  244.   end
  245.   #--------------------------------------------------------------------------
  246.   # ● symbol => アイコン
  247.   #--------------------------------------------------------------------------
  248.   def self.sym2icon(sym)
  249.     case sym
  250.     when :all;        return CT_ICON[ALL]
  251.     when :none;       return 0
  252.     when :item;       return CT_ICON[ITEM]
  253.     when :weapon;     return CT_ICON[WEAPON]
  254.     when :armor;      return CT_ICON[ARMOR]
  255.     when :key_item;   return CT_ICON[KEY]
  256.     when :shield;     return CT_E_ICON[1]
  257.     when :helmet;     return CT_E_ICON[2]
  258.     when :clothes;    return CT_E_ICON[3]
  259.     when :accessory;  return CT_E_ICON[4]
  260.     else
  261.       case sym_type(sym)
  262.       when WEAPON;  return CT_W_ICON[sym_wtype(sym)]
  263.       when ARMOR;   return CT_A_ICON[sym_atype(sym)]
  264.       when ACTOR;   return 0
  265.       end
  266.     end
  267.   end
  268.   #--------------------------------------------------------------------------
  269.   # ● symbol => Actor
  270.   #--------------------------------------------------------------------------
  271.   def self.sym2actor(sym)
  272.     $game_actors[sym.id2name.to_i]
  273.   end
  274.   #--------------------------------------------------------------------------
  275.   # ● アイテムをリストに含めるかどうか
  276.   #--------------------------------------------------------------------------
  277.   def self.item_include?(sym, item)
  278.     case sym
  279.     when :all
  280.       true
  281.     when :none
  282.       false
  283.     when :item
  284.       item.is_a?(RPG::Item) && !item.key_item?
  285.     when :weapon
  286.       item.is_a?(RPG::Weapon)
  287.     when :armor
  288.       item.is_a?(RPG::Armor)
  289.     when :key_item
  290.       item.is_a?(RPG::Item) && item.key_item?
  291.     when :shield
  292.       item.is_a?(RPG::Armor) && item.etype_id == 1
  293.     when :helmet
  294.       item.is_a?(RPG::Armor) && item.etype_id == 2
  295.     when :clothes
  296.       item.is_a?(RPG::Armor) && item.etype_id == 3
  297.     when :accessory
  298.       item.is_a?(RPG::Armor) && item.etype_id == 4
  299.     else
  300.       case sym_type(sym)
  301.       when WEAPON
  302.         item.is_a?(RPG::Weapon) and item.wtype_id == sym_wtype(sym)
  303.       when ARMOR
  304.         item.is_a?(RPG::Armor)  and item.atype_id == sym_atype(sym)
  305.       when ACTOR
  306.         sym2actor(sym).equippable?(item)
  307.       else
  308.         false
  309.       end
  310.     end
  311.   end
  312.   #--------------------------------------------------------------------------
  313.   # ● アイテムタイプ
  314.   #--------------------------------------------------------------------------
  315.   def self.item_type(item)
  316.     case item
  317.     when RPG::Item;   return 0
  318.     when RPG::Weapon; return 1
  319.     when RPG::Armor;  return 2
  320.     end
  321.   end
  322.   #--------------------------------------------------------------------------
  323.   # ● 購入可否判定
  324.   #--------------------------------------------------------------------------
  325.   def self.buy_enable?(item)
  326.     not $game_system.shop.buy.ng_item?(item_type(item), item.id)
  327.   end
  328.   #--------------------------------------------------------------------------
  329.   # ● 売却可否判定
  330.   #--------------------------------------------------------------------------
  331.   def self.sell_enable?(item)
  332.     not $game_system.shop.sell.ng_item?(item_type(item), item.id)
  333.   end
  334.   #--------------------------------------------------------------------------
  335.   # ● 購入不可文字
  336.   #--------------------------------------------------------------------------
  337.   def self.not_buy(item, price)
  338.     return price if V_N_BUY == ""
  339.     buy_enable?(item) ? price : V_N_BUY
  340.   end
  341. end
  342.  
  343.  
  344.  
  345. #==============================================================================
  346. # ■ RPG::Item
  347. #==============================================================================
  348. class RPG::Item < RPG::UsableItem
  349.   #--------------------------------------------------------------------------
  350.   # ● 売却可能か?
  351.   #--------------------------------------------------------------------------
  352.   def sell?
  353.     @price > 0 and !@note.include?("<not_sell>")
  354.   end
  355. end
  356.  
  357. #==============================================================================
  358. # ■ RPG::EquipItem
  359. #==============================================================================
  360. class RPG::EquipItem < RPG::BaseItem
  361.   #--------------------------------------------------------------------------
  362.   # ● 売却可能か?
  363.   #--------------------------------------------------------------------------
  364.   def sell?
  365.     @price > 0 and !@note.include?("<not_sell>")
  366.   end
  367. end
  368.  
  369.  
  370. #==============================================================================
  371. # ■ ExShop::ShopStatus
  372. #==============================================================================
  373. class ExShop::ShopStatus
  374.   #--------------------------------------------------------------------------
  375.   # ● 公開インスタンス変数
  376.   #--------------------------------------------------------------------------
  377.   attr_reader :buy   # 購入ステータス
  378.   attr_reader :sell  # 売却ステータス
  379.   #--------------------------------------------------------------------------
  380.   # ● オブジェクト初期化
  381.   #--------------------------------------------------------------------------
  382.   def initialize
  383.     reset
  384.   end
  385.   #--------------------------------------------------------------------------
  386.   # ● リセット
  387.   #--------------------------------------------------------------------------
  388.   def reset
  389.     @buy  = Status.new(ExShop::BUY_RATE)
  390.     @sell = Status.new(ExShop::SELL_RATE)
  391.   end
  392.   #--------------------------------------------------------------------------
  393.   # ● レートリセット
  394.   #--------------------------------------------------------------------------
  395.   def rate_reset
  396.     @buy.rate  = ExShop::BUY_RATE
  397.     @sell.rate = ExShop::SELL_RATE
  398.     @buy.i_rate_reset
  399.     @sell.i_rate_reset
  400.   end
  401.   #--------------------------------------------------------------------------
  402.   # ● 売買不可アイテム情報リセット
  403.   #--------------------------------------------------------------------------
  404.   def ng_reset
  405.     @buy.ng_reset
  406.     @sell.ng_reset
  407.   end
  408.  
  409.   #============================================================================
  410.   # ■ Status  : 売買情報
  411.   #============================================================================
  412.   class Status
  413.     attr_accessor :rate        # レート
  414.     attr_accessor :gold        # 金額
  415.     #------------------------------------------------------------------------
  416.     # ● オブジェクト初期化
  417.     #------------------------------------------------------------------------
  418.     def initialize(rate)
  419.       @rate = rate
  420.       [url=home.php?mod=space&uid=236945]@gold[/url] = 0
  421.       i_rate_reset
  422.       ng_reset
  423.     end
  424.     #------------------------------------------------------------------------
  425.     # ● 個別レート設定リセット
  426.     #------------------------------------------------------------------------
  427.     def i_rate_reset
  428.       @i_rate = []
  429.     end
  430.     #------------------------------------------------------------------------
  431.     # ● 売買不可アイテムリセット
  432.     #------------------------------------------------------------------------
  433.     def ng_reset
  434.       @ng_items = []
  435.     end
  436.     #------------------------------------------------------------------------
  437.     # ● レート: 百分率 => 浮動小数点数
  438.     #------------------------------------------------------------------------
  439.     def rate_f
  440.       (@rate / 100.0)
  441.     end
  442.     #------------------------------------------------------------------------
  443.     # ● アイテム価格計算
  444.     #------------------------------------------------------------------------
  445.     def price(type, id, price)
  446.       (price * i_rate_f(type, id)).truncate
  447.     end
  448.     #------------------------------------------------------------------------
  449.     # ● 対象アイテムレート取得
  450.     #------------------------------------------------------------------------
  451.     def i_rate_f(type, id)
  452.       it = find_i_rate(type, id)
  453.       it.nil? ? rate_f : it.rate_f
  454.     end
  455.     #------------------------------------------------------------------------
  456.     # ● 対象アイテムレート取得
  457.     #------------------------------------------------------------------------
  458.     def i_rate(type, id)
  459.       it = find_i_rate(type, id)
  460.       it.nil? ? @rate : it.rate
  461.     end
  462.     #------------------------------------------------------------------------
  463.     # ● 個別レート設定アイテム?
  464.     #------------------------------------------------------------------------
  465.     def item_rate?(type, id)
  466.       find_i_rate(type, id) != nil
  467.     end
  468.     #------------------------------------------------------------------------
  469.     # ● 個別レート設定アイテム情報取得
  470.     #------------------------------------------------------------------------
  471.     def find_i_rate(type, id)
  472.       @i_rate.find {|a| a.include?(type, id)}
  473.     end
  474.     #------------------------------------------------------------------------
  475.     # ● 個別レート設定
  476.     #------------------------------------------------------------------------
  477.     def item_rate(type, id, rate)
  478.       it = find_i_rate(type, id)
  479.       if it.nil?
  480.         @i_rate.push(Item_Rate.new(type, id, rate))
  481.       else
  482.         it.rate = rate
  483.       end
  484.     end
  485.     #------------------------------------------------------------------------
  486.     # ● 個別レート設定削除
  487.     #------------------------------------------------------------------------
  488.     def del_item_rate(type, id)
  489.       @i_rate.reject! {|item| item.include?(type, id)}
  490.     end
  491.     #------------------------------------------------------------------------
  492.     # ● 売買不可アイテム?
  493.     #------------------------------------------------------------------------
  494.     def ng_item?(type, id)
  495.       @ng_items.any? {|item| item.include?(type, id)}
  496.     end
  497.     #------------------------------------------------------------------------
  498.     # ● 売買不可アイテム追加
  499.     #------------------------------------------------------------------------
  500.     def add_ng_item(type, id)
  501.       return if ng_item?(type, id)
  502.       @ng_items.push(NG_Item.new(type, id))
  503.     end
  504.     #------------------------------------------------------------------------
  505.     # ● 売買不可アイテム解除
  506.     #------------------------------------------------------------------------
  507.     def del_ng_item(type, id)
  508.       @ng_items.reject! {|item| item.include?(type, id)}
  509.     end
  510.     #==========================================================================
  511.     # ■ NG_Item   : 売買不可アイテム情報
  512.     #==========================================================================
  513.     class NG_Item
  514.       #----------------------------------------------------------------------
  515.       # ● オブジェクト初期化
  516.       #      type : 種別(0..RPG:Item, 1..RPG::Weapon, 2..RPG::Armor)
  517.       #      id   : ID
  518.       #----------------------------------------------------------------------
  519.       def initialize(type, id)
  520.         @type = type; @id = id
  521.       end
  522.       #----------------------------------------------------------------------
  523.       # ● 売買不可アイテム?
  524.       #----------------------------------------------------------------------
  525.       def include?(type, id)
  526.         @type == type and @id == id
  527.       end
  528.     end
  529.     #==========================================================================
  530.     # ■ Item_Rate   : アイテム売買レート
  531.     #==========================================================================
  532.     class Item_Rate
  533.       #----------------------------------------------------------------------
  534.       # ● 公開インスタンス変数
  535.       #----------------------------------------------------------------------
  536.       attr_accessor :rate     # レート(%)
  537.       #----------------------------------------------------------------------
  538.       # ● オブジェクト初期化
  539.       #      type : 種別(0..RPG:Item, 1..RPG::Weapon, 2..RPG::Armor)
  540.       #      id   : ID
  541.       #      rate : レート(%)
  542.       #----------------------------------------------------------------------
  543.       def initialize(type, id, rate)
  544.         @type = type; @id = id; @rate = rate
  545.       end
  546.       #----------------------------------------------------------------------
  547.       # ● レート: 百分率 => 浮動小数点数
  548.       #----------------------------------------------------------------------
  549.       def rate_f
  550.         (@rate / 100.0)
  551.       end
  552.       #----------------------------------------------------------------------
  553.       # ● 売買レート対象アイテム?
  554.       #----------------------------------------------------------------------
  555.       def include?(type, id)
  556.         @type == type and @id == id
  557.       end
  558.     end
  559.   end
  560. end
  561.  
  562.  
  563. #==============================================================================
  564. # ■ Game_System
  565. #==============================================================================
  566. class Game_System
  567.   #--------------------------------------------------------------------------
  568.   # ● 公開インスタンス変数
  569.   #--------------------------------------------------------------------------
  570.   attr_reader :shop         # ショップ情報
  571.   #--------------------------------------------------------------------------
  572.   # ● オブジェクト初期化
  573.   #--------------------------------------------------------------------------
  574.   alias initialize_shop_ex initialize
  575.   def initialize
  576.     initialize_shop_ex
  577.     @shop = ExShop::ShopStatus.new
  578.   end
  579. end
  580.  
  581.  
  582.  
  583.  
  584.  
  585. #==============================================================================
  586. # ■ Window_ExShopCommand
  587. #------------------------------------------------------------------------------
  588. #  ショップ画面で、購入/売却/装備を選択するウィンドウです。
  589. #==============================================================================
  590. class Window_ExShopCommand < Window_Command
  591.   #--------------------------------------------------------------------------
  592.   # ● クラス変数
  593.   #--------------------------------------------------------------------------
  594.   @@last_command_symbol = :buy
  595.   #--------------------------------------------------------------------------
  596.   # ● オブジェクト初期化
  597.   #--------------------------------------------------------------------------
  598.   def initialize(window_width, purchase_only)
  599.     @window_width = window_width
  600.     @purchase_only = purchase_only
  601.     super(0, 0)
  602.     select_last
  603.   end
  604.   #--------------------------------------------------------------------------
  605.   # ● ウィンドウ幅の取得
  606.   #--------------------------------------------------------------------------
  607.   def window_width
  608.     @window_width
  609.   end
  610.   #--------------------------------------------------------------------------
  611.   # ● 表示行数の取得
  612.   #--------------------------------------------------------------------------
  613.   def visible_line_number
  614.     4
  615.   end
  616.   #--------------------------------------------------------------------------
  617.   # ● コマンドリストの作成
  618.   #--------------------------------------------------------------------------
  619.   def make_command_list
  620.     add_command(Vocab::ShopBuy,    :buy)
  621.     add_command(Vocab::ShopSell,   :sell,   !@purchase_only)
  622.     add_command(Vocab.equip,       :equip,  $game_party.members.size > 0)
  623.     add_command(Vocab::ShopCancel, :cancel)
  624.   end
  625.   #--------------------------------------------------------------------------
  626.   # ● 決定ボタンが押されたときの処理
  627.   #--------------------------------------------------------------------------
  628.   def process_ok
  629.     @@last_command_symbol = (current_symbol == :equip ? :equip : :buy)
  630.     super
  631.   end
  632.   #--------------------------------------------------------------------------
  633.   # ● 前回の選択位置を復帰
  634.   #--------------------------------------------------------------------------
  635.   def select_last
  636.     select_symbol(@@last_command_symbol)
  637.   end
  638. end
  639.  
  640.  
  641. #==============================================================================
  642. # ■ Window_ExShopCategory
  643. #------------------------------------------------------------------------------
  644. #  ショップ画面で、カテゴリを選択するウィンドウです。
  645. #==============================================================================
  646. class Window_ExShopCategory < Window_HorzCommand
  647.   #--------------------------------------------------------------------------
  648.   # ● 公開インスタンス変数
  649.   #--------------------------------------------------------------------------
  650.   attr_reader   :item_window
  651.   #--------------------------------------------------------------------------
  652.   # ● オブジェクト初期化
  653.   #--------------------------------------------------------------------------
  654.   def initialize(x, y, w)
  655.     @win_width = w
  656.     super(x, y)
  657.   end
  658.   #--------------------------------------------------------------------------
  659.   # ● ウィンドウ幅の取得
  660.   #--------------------------------------------------------------------------
  661.   def window_width
  662.     @win_width
  663.   end
  664.   #--------------------------------------------------------------------------
  665.   # ● 桁数の取得
  666.   #--------------------------------------------------------------------------
  667.   def col_max
  668.     ExShop::GOLD_LD ? 10 : 5
  669.   end
  670.   #--------------------------------------------------------------------------
  671.   # ● 先頭の桁の設定
  672.   #--------------------------------------------------------------------------
  673.   def top_col=(col)
  674.     col = 0 if col < 0
  675. #    col = col_max - 1 if col > col_max - 1
  676.     self.ox = col * (item_width + spacing)
  677.   end
  678.   #--------------------------------------------------------------------------
  679.   # ● シンボルリスト
  680.   #--------------------------------------------------------------------------
  681.   def symlist
  682.     [:all, :item, :weapon, :armor, :key_item]
  683.   end
  684.   #--------------------------------------------------------------------------
  685.   # ● コマンドリストの作成
  686.   #--------------------------------------------------------------------------
  687.   def make_command_list
  688.     symlist.each {|s| add_command(ExShop.sym2icon(s), s, true, ExShop.sym2id(s))}
  689.   end
  690.   #--------------------------------------------------------------------------
  691.   # ● 項目を描画する矩形の取得
  692.   #--------------------------------------------------------------------------
  693.   def item_rect(index)
  694.     r = super(index)
  695.     r.x += (r.width - 24) / 2
  696.     r.width = 24
  697.     r
  698.   end
  699.   #--------------------------------------------------------------------------
  700.   # ● 項目の描画
  701.   #--------------------------------------------------------------------------
  702.   def draw_item(index)
  703.     r = item_rect(index)
  704.     if @list[index][:ext] == ExShop::ACTOR
  705.       draw_charicon(ExShop.sym2actor(@list[index][:symbol]), r.x, r.y, command_enabled?(index))
  706.     else
  707.       draw_icon(command_name(index), r.x, r.y, command_enabled?(index))
  708.     end
  709.   end
  710.   #--------------------------------------------------------------------------
  711.   # ● 歩行グラフィックの描画
  712.   #--------------------------------------------------------------------------
  713.   def draw_charicon(actor, x, y, enabled)
  714.     return if actor.nil?
  715.     return unless actor.character_name
  716.     bitmap = Cache.character(actor.character_name)
  717.     sign = actor.character_name[/^[\!\$]./]
  718.     if sign && sign.include?('$')
  719.       cw = bitmap.width / 3
  720.       ch = bitmap.height / 4
  721.     else
  722.       cw = bitmap.width / 12
  723.       ch = bitmap.height / 8
  724.     end
  725.     n = actor.character_index
  726.     src_rect = Rect.new((n%4*3+1)*cw + (cw - 20) / 2, (n/4*4)*ch, 20, 20)
  727.     contents.blt(x+2, y+2, bitmap, src_rect)
  728.   end
  729.   #--------------------------------------------------------------------------
  730.   # ● フレーム更新
  731.   #--------------------------------------------------------------------------
  732.   def update
  733.     super
  734.     @item_window.category = current_symbol if @item_window
  735.   end
  736.   #--------------------------------------------------------------------------
  737.   # ● アイテムウィンドウの設定
  738.   #--------------------------------------------------------------------------
  739.   def item_window=(item_window)
  740.     @item_window = item_window
  741.     update
  742.   end
  743. end
  744.  
  745. #==============================================================================
  746. # ■ Window_ExShopCategory
  747. #------------------------------------------------------------------------------
  748. #  ショップ画面で、購入カテゴリを選択するウィンドウです。
  749. #==============================================================================
  750. class Window_ExShopBuyCt < Window_ExShopCategory
  751.   #--------------------------------------------------------------------------
  752.   # ● シンボルリスト
  753.   #--------------------------------------------------------------------------
  754.   def symlist
  755.     ExShop.ct_sym(ExShop::BUY_CT)
  756.   end
  757. end
  758.  
  759. #==============================================================================
  760. # ■ Window_ExShopCategory
  761. #------------------------------------------------------------------------------
  762. #  ショップ画面で、売却カテゴリを選択するウィンドウです。
  763. #==============================================================================
  764. class Window_ExShopSellCt < Window_ExShopCategory
  765.   #--------------------------------------------------------------------------
  766.   # ● シンボルリスト
  767.   #--------------------------------------------------------------------------
  768.   def symlist
  769.     ExShop.ct_sym(ExShop::SELL_CT)
  770.   end
  771. end
  772.  
  773.  
  774. #==============================================================================
  775. # ■ Sprite_ShopTAG
  776. #==============================================================================
  777. class Sprite_ShopTAG < Sprite
  778.   W = 100
  779.   H = 14
  780.   #--------------------------------------------------------------------------
  781.   # ● オブジェクト初期化
  782.   #--------------------------------------------------------------------------
  783.   def initialize(x, y, tag)
  784.     super(Viewport.new(x, y, W, H))
  785.     self.viewport.z = 200
  786.     self.bitmap = Bitmap.new(W, H)
  787.     self.bitmap.font.size = 12
  788.     self.bitmap.font.color = system_color
  789.     self.bitmap.draw_text(0, 0, W, H, tag)
  790.   end
  791.   #--------------------------------------------------------------------------
  792.   # ● 文字色取得
  793.   #     n : 文字色番号(0..31)
  794.   #--------------------------------------------------------------------------
  795.   def text_color(n)
  796.     Cache.system("Window").get_pixel(64 + (n % 8) * 8, 96 + (n / 8) * 8)
  797.   end
  798.   #--------------------------------------------------------------------------
  799.   # ● 各種文字色の取得
  800.   #--------------------------------------------------------------------------
  801.   def normal_color;      text_color(0);   end;    # 通常
  802.   def system_color;      text_color(16);  end;    # システム
  803. end
  804.  
  805. #==============================================================================
  806. # ■ Window_ShopBuy
  807. #==============================================================================
  808. class Window_ShopBuy < Window_Selectable
  809.   #--------------------------------------------------------------------------
  810.   # ● オブジェクト初期化
  811.   #--------------------------------------------------------------------------
  812.   def initialize(x, y, width, height, shop_goods)
  813.     super(x, y, width, height)
  814.     @shop_goods = shop_goods
  815.     [url=home.php?mod=space&uid=26101]@Money[/url] = 0
  816.     @category = :none
  817.     refresh
  818.     select(0)
  819.     create_sprites
  820.   end
  821.   #--------------------------------------------------------------------------
  822.   # ● 解放
  823.   #--------------------------------------------------------------------------
  824.   def dispose
  825.     super
  826.     dispose_sprites
  827.   end
  828.   #--------------------------------------------------------------------------
  829.   # ● タグスプライト生成
  830.   #--------------------------------------------------------------------------
  831.   def create_sprites
  832.     @sprite_price = Sprite_ShopTAG.new(self.x+385, self.y+2, "价格")
  833.     @sprite_num   = Sprite_ShopTAG.new(self.x+430, self.y+2, "拥有数目")
  834.   end
  835.   #--------------------------------------------------------------------------
  836.   # ● タグスプライト解放
  837.   #--------------------------------------------------------------------------
  838.   def dispose_sprites
  839.     @sprite_price.dispose
  840.     @sprite_num.dispose
  841.   end
  842.   #--------------------------------------------------------------------------
  843.   # ● ウィンドウの表示/非表示
  844.   #--------------------------------------------------------------------------
  845.   def visible=(flag)
  846.     super(flag)
  847.     @sprite_price.visible = @sprite_num.visible = flag
  848.   end
  849.   #--------------------------------------------------------------------------
  850.   # ● ウィンドウ幅の取得
  851.   #--------------------------------------------------------------------------
  852.   def window_width
  853.     width
  854.   end
  855.   #--------------------------------------------------------------------------
  856.   # ● カテゴリの設定
  857.   #--------------------------------------------------------------------------
  858.   def category=(category)
  859.     return if @category == category
  860.     @category = category
  861.     refresh
  862.     self.oy = 0
  863.   end
  864.   #--------------------------------------------------------------------------
  865.   # ● アイテムリストの作成 <再定義>
  866.   #--------------------------------------------------------------------------
  867.   def make_item_list
  868.     @data = []
  869.     @price = {}
  870.     @shop_goods.each do |goods|
  871.       case goods[0]
  872.       when 0;  item = $data_items[goods[1]]
  873.       when 1;  item = $data_weapons[goods[1]]
  874.       when 2;  item = $data_armors[goods[1]]
  875.       end
  876.       if item
  877.         next unless include?(item)
  878.         @data.push(item)
  879.         i_price = goods[2] == 0 ? item.price : goods[3]
  880.         @price[item] = ExShop.buy_price(item, i_price, goods[2] != 0)
  881.       end
  882.     end
  883.   end
  884.   #--------------------------------------------------------------------------
  885.   # ● アイテムをリストに含めるかどうか
  886.   #--------------------------------------------------------------------------
  887.   def include?(item)
  888.     item && ExShop.item_include?(@category, item)
  889.   end
  890.   #--------------------------------------------------------------------------
  891.   # ● 項目の描画
  892.   #--------------------------------------------------------------------------
  893.   def draw_item(index)
  894.     item = @data[index]
  895.     rect = item_rect(index)
  896.     draw_item_name(item, rect.x, rect.y, enable?(item))
  897.     rect.width -= 64
  898.     draw_text(rect, ExShop.not_buy(item, price(item)), 2)
  899.     rect.width += 60
  900.     draw_text(rect, $game_party.item_number(item), 2)
  901.   end
  902.   #--------------------------------------------------------------------------
  903.   # ● アイテムを許可状態で表示するかどうか
  904.   #--------------------------------------------------------------------------
  905.   def enable?(item)
  906.     item && price(item) <= [url=home.php?mod=space&uid=26101]@Money[/url] && !$game_party.item_max?(item) && ExShop.buy_enable?(item)
  907.   end
  908.   #--------------------------------------------------------------------------
  909.   # ● ヘルプテキスト更新
  910.   #--------------------------------------------------------------------------
  911.   def update_help
  912.     @help_window.set_item(item) if @help_window
  913.     if @status_window
  914.       @status_window.item = item
  915.       if ExShop.sym2id(@category) == ExShop::ACTOR
  916.         @status_window.page_index = ExShop.sym2actor(@category).index
  917.       end
  918.     end
  919.   end
  920. end
  921.  
  922.  
  923. #==============================================================================
  924. # ■ Window_ShopSell
  925. #==============================================================================
  926. class Window_ShopSell < Window_ItemList
  927.   #--------------------------------------------------------------------------
  928.   # ● 公開インスタンス変数
  929.   #--------------------------------------------------------------------------
  930.   attr_reader   :status_window            # ステータスウィンドウ
  931.   #--------------------------------------------------------------------------
  932.   # ● 桁数の取得
  933.   #--------------------------------------------------------------------------
  934.   def col_max
  935.     1
  936.   end
  937.   #--------------------------------------------------------------------------
  938.   # ● アイテムをリストに含めるかどうか
  939.   #--------------------------------------------------------------------------
  940.   def include?(item)
  941.     item && ExShop.item_include?(@category, item)
  942.   end
  943.   #--------------------------------------------------------------------------
  944.   # ● アイテムを許可状態で表示するかどうか
  945.   #--------------------------------------------------------------------------
  946.   def enable?(item)
  947.     item && item.sell? && ExShop.sell_enable?(item)
  948.   end
  949.   #--------------------------------------------------------------------------
  950.   # ● ステータスウィンドウの設定
  951.   #--------------------------------------------------------------------------
  952.   def status_window=(status_window)
  953.     @status_window = status_window
  954.     call_update_help
  955.   end
  956.   #--------------------------------------------------------------------------
  957.   # ● ヘルプテキスト更新
  958.   #--------------------------------------------------------------------------
  959.   def update_help
  960.     super
  961.     @status_window.item = item if @status_window
  962.   end
  963. end
  964.  
  965.  
  966.  
  967. #==============================================================================
  968. # ■ Window_ShopNumber
  969. #==============================================================================
  970. class Window_ShopNumber < Window_Selectable
  971.   #--------------------------------------------------------------------------
  972.   # ● 公開インスタンス変数
  973.   #--------------------------------------------------------------------------
  974.   attr_reader   :number                   # 入力された個数
  975.   #--------------------------------------------------------------------------
  976.   # ● オブジェクト初期化
  977.   #--------------------------------------------------------------------------
  978.   def initialize(x, y, width, height)
  979.     super(x, y, width, height)
  980.     @item = nil
  981.     [url=home.php?mod=space&uid=25307]@Max[/url] = 1
  982.     @price = 0
  983.     [url=home.php?mod=space&uid=27178]@Number[/url] = 1
  984.     @currency_unit = Vocab::currency_unit
  985.   end
  986. end
  987.  
  988.  
  989. #==============================================================================
  990. # ■ Window_ShopStatus
  991. #==============================================================================
  992. class Window_ShopStatus < Window_Base
  993.   #--------------------------------------------------------------------------
  994.   # ● オブジェクト初期化
  995.   #--------------------------------------------------------------------------
  996.   def initialize(x, y, width, height, actor)
  997.     super(x, y, width, height)
  998.     @item = nil
  999.     @page_index = actor.index
  1000.     self.ox = 1 if page_max > 1
  1001.     refresh
  1002.   end
  1003.   #--------------------------------------------------------------------------
  1004.   # ● ウィンドウ内容の幅を計算
  1005.   #--------------------------------------------------------------------------
  1006.   def contents_width
  1007.     super + (page_max > 1 ? 2 : 0)
  1008.   end
  1009.   #--------------------------------------------------------------------------
  1010.   # ● リフレッシュ
  1011.   #--------------------------------------------------------------------------
  1012.   def refresh
  1013.     contents.clear
  1014.     actor = current_actor
  1015.     enabled = @item.is_a?(RPG::EquipItem) ? actor.equippable?(@item) : false
  1016.     draw_actor_face(actor, self.ox + contents_width - 96, 0, enabled)
  1017.     change_color(normal_color, enabled)
  1018.     draw_text(self.ox, 0, 112, line_height, actor.name)
  1019.     return unless @item.is_a?(RPG::EquipItem)
  1020.     draw_actor_equip_info(self.ox, line_height*2, actor, enabled)
  1021.   end
  1022.   #--------------------------------------------------------------------------
  1023.   # ● 顔グラフィックの描画
  1024.   #--------------------------------------------------------------------------
  1025.   def draw_actor_face(actor, x, y, enabled = true)
  1026.     bitmap = Cache.face(actor.face_name)
  1027.     rect = Rect.new(actor.face_index % 4 * 96,
  1028.                     actor.face_index / 4 * 96 + 16, 96, line_height*2)
  1029.     contents.blt(x, y, bitmap, rect, enabled ? 255 : translucent_alpha)
  1030.     bitmap.dispose
  1031.   end
  1032.   #--------------------------------------------------------------------------
  1033.   # ● アイテムの設定
  1034.   #--------------------------------------------------------------------------
  1035.   def item=(item)
  1036.     @item = item
  1037.     refresh
  1038.   end
  1039.   #--------------------------------------------------------------------------
  1040.   # ● 表示中アクター
  1041.   #--------------------------------------------------------------------------
  1042.   def current_actor
  1043.     $game_party.members[@page_index]
  1044.   end
  1045.   #--------------------------------------------------------------------------
  1046.   # ● 一度に表示できるアクターの人数
  1047.   #--------------------------------------------------------------------------
  1048.   def page_size
  1049.     return 1
  1050.   end
  1051.   #--------------------------------------------------------------------------
  1052.   # ● 最大ページ数の取得
  1053.   #--------------------------------------------------------------------------
  1054.   def page_max
  1055.     $game_party.members.size
  1056.   end
  1057.   #--------------------------------------------------------------------------
  1058.   # ● アクターの装備情報を描画
  1059.   #--------------------------------------------------------------------------
  1060.   def draw_actor_equip_info(x, y, actor, enabled)
  1061.     item1 = current_equipped_item(actor, @item.etype_id)
  1062.     prms = ExShop::GOLD_LD ? [2, 3, 4, 5] : [2, 3, 4, 5, 6, 7]
  1063.     prms.each do |prm|
  1064.       draw_actor_param_change(x, y, actor, item1, prm, enabled)
  1065.       y += line_height
  1066.     end
  1067.   end
  1068.   #--------------------------------------------------------------------------
  1069.   # ● アクターの能力値変化を描画
  1070.   #--------------------------------------------------------------------------
  1071.   def draw_actor_param_change(x, y, actor, item1, prm_id, enabled)
  1072.     rect = Rect.new(x, y, contents.width - 4 - x, line_height)
  1073.     change = @item.params[prm_id] - (item1 ? item1.params[prm_id] : 0)
  1074.     change_color(system_color, enabled)
  1075.     draw_text(rect, $data_system.terms.params[prm_id])
  1076.     if enabled
  1077.       change_color(param_change_color(change), enabled)
  1078.       draw_text(rect, sprintf("%+d", change), 2)
  1079.     else
  1080.       change_color(normal_color, enabled)
  1081.       draw_text(rect, "―", 2)
  1082.     end
  1083.   end
  1084.   #--------------------------------------------------------------------------
  1085.   # ● フレーム更新
  1086.   #--------------------------------------------------------------------------
  1087.   def update
  1088.     super
  1089.     update_page
  1090.   end
  1091.   #--------------------------------------------------------------------------
  1092.   # ● ページの更新
  1093.   #--------------------------------------------------------------------------
  1094.   def update_page
  1095.     if active && visible && page_max > 1
  1096.       next_page if Input.trigger?(:RIGHT)
  1097.       prev_page if Input.trigger?(:LEFT)
  1098.     end
  1099.   end
  1100.   #--------------------------------------------------------------------------
  1101.   # ● 指定ページへ
  1102.   #--------------------------------------------------------------------------
  1103.   def page_index=(index)
  1104.     @page_index = index
  1105.     refresh
  1106.   end
  1107.   #--------------------------------------------------------------------------
  1108.   # ● 次のページへ
  1109.   #--------------------------------------------------------------------------
  1110.   def next_page
  1111.     Sound.play_cursor
  1112.     @page_index = (@page_index + 1) % page_max
  1113.     refresh
  1114.   end
  1115.   #--------------------------------------------------------------------------
  1116.   # ● 前のページへ
  1117.   #--------------------------------------------------------------------------
  1118.   def prev_page
  1119.     Sound.play_cursor
  1120.     @page_index = (@page_index - 1 + page_max) % page_max
  1121.     refresh
  1122.   end
  1123. end
  1124.  
  1125.  
  1126. #==============================================================================
  1127. # ■ Window_ShopEquip
  1128. #==============================================================================
  1129. class Window_ShopEquip < Window_HorzCommand
  1130.   #--------------------------------------------------------------------------
  1131.   # ● オブジェクト初期化
  1132.   #--------------------------------------------------------------------------
  1133.   def initialize(x, y, width, height)
  1134.     @ww = width
  1135.     @wh = height
  1136.     super(x, y)
  1137.   end
  1138.   #--------------------------------------------------------------------------
  1139.   # ● ウィンドウ幅の取得
  1140.   #--------------------------------------------------------------------------
  1141.   def window_width
  1142.     @ww
  1143.   end
  1144.   #--------------------------------------------------------------------------
  1145.   # ● ウィンドウ高さの取得
  1146.   #--------------------------------------------------------------------------
  1147.   def window_height
  1148.     @wh
  1149.   end
  1150.   #--------------------------------------------------------------------------
  1151.   # ● 桁数の取得
  1152.   #--------------------------------------------------------------------------
  1153.   def col_max
  1154.     2
  1155.   end
  1156.   #--------------------------------------------------------------------------
  1157.   # ● ウィンドウ内容の高さを計算
  1158.   #--------------------------------------------------------------------------
  1159.   def contents_height
  1160.     height - standard_padding * 3
  1161.   end
  1162.   #--------------------------------------------------------------------------
  1163.   # ● 項目を描画する矩形の取得
  1164.   #--------------------------------------------------------------------------
  1165.   def item_rect(index)
  1166.     rect = super
  1167.     rect.y = 0
  1168.     rect.width = 80
  1169.     rect.x = 180 + index * (rect.width + spacing)
  1170.     rect
  1171.   end
  1172.   #--------------------------------------------------------------------------
  1173.   # ● コマンドリストの作成
  1174.   #--------------------------------------------------------------------------
  1175.   def make_command_list
  1176.     add_command("装备",   :equip)
  1177.     add_command("否", :cancel)
  1178.   end
  1179.   #--------------------------------------------------------------------------
  1180.   # ● リフレッシュ
  1181.   #--------------------------------------------------------------------------
  1182.   def set(actor=nil, item=nil)
  1183.     [url=home.php?mod=space&uid=95897]@actor[/url] = actor
  1184.     @item  = item
  1185.     refresh
  1186.   end
  1187.   #--------------------------------------------------------------------------
  1188.   # ● リフレッシュ
  1189.   #--------------------------------------------------------------------------
  1190.   def refresh
  1191.     super
  1192.     if !@actor.nil? and !@item.nil?
  1193.       draw_text(0, 0, 150, line_height,"是否装备?")
  1194.       draw_horz_line(line_height)
  1195.       draw_actor_equip(line_height * 2)
  1196.     end
  1197.   end
  1198.   #--------------------------------------------------------------------------
  1199.   # ● 水平線の描画
  1200.   #--------------------------------------------------------------------------
  1201.   def draw_horz_line(y)
  1202.     line_y = y + line_height / 2 - 1
  1203.     contents.fill_rect(0, line_y, contents_width, 2, line_color)
  1204.   end
  1205.   #--------------------------------------------------------------------------
  1206.   # ● 水平線の色を取得
  1207.   #--------------------------------------------------------------------------
  1208.   def line_color
  1209.     color = normal_color
  1210.     color.alpha = 48
  1211.     color
  1212.   end
  1213.   #--------------------------------------------------------------------------
  1214.   # ● アクターの装備情報を描画
  1215.   #--------------------------------------------------------------------------
  1216.   def draw_actor_equip(y)
  1217.     draw_actor_name(@actor, 4, y)
  1218.     item1 = current_equipped_item
  1219.     draw_item_name(item1, 140, y)
  1220.     draw_actor_param_changes(4, y + line_height, item1)
  1221.   end
  1222.   #--------------------------------------------------------------------------
  1223.   # ● 現在の装備品を取得
  1224.   #    二刀流など、同じ種類の装備が複数ある場合は弱い方を返す。
  1225.   #--------------------------------------------------------------------------
  1226.   def current_equipped_item
  1227.     list = []
  1228.     @actor.equip_slots.each_with_index do |slot_etype_id, i|
  1229.       list.push(@actor.equips[i]) if slot_etype_id == @item.etype_id
  1230.     end
  1231.     list.min_by {|item| item ? item.params[param_id] : 0 }
  1232.   end
  1233.   #--------------------------------------------------------------------------
  1234.   # ● 選択中のアイテムに対応する能力値 ID の取得
  1235.   #    デフォルトでは武器なら攻撃力、防具なら防御力とする。
  1236.   #--------------------------------------------------------------------------
  1237.   def param_id
  1238.     @item.is_a?(RPG::Weapon) ? 2 : 3
  1239.   end
  1240.   #--------------------------------------------------------------------------
  1241.   # ● アクターの装備情報を描画
  1242.   #--------------------------------------------------------------------------
  1243.   def draw_actor_param_changes(x, y, item)
  1244.     prms = [0, 1, 2, 3, 4, 5, 6, 7]
  1245.     rect = Rect.new(x, y, (contents_width-8) / 2, line_height)
  1246.     prms.each_index do |i|
  1247.       draw_actor_param_change(rect, item, prms[i])
  1248.       rect.y += rect.height
  1249.     end
  1250.   end
  1251.   #--------------------------------------------------------------------------
  1252.   # ● アクターの能力値変化を描画
  1253.   #--------------------------------------------------------------------------
  1254.   def draw_actor_param_change(rect, item1, prm_id)
  1255.     change = @item.params[prm_id] - (item1 ? item1.params[prm_id] : 0)
  1256.     change_color(system_color)
  1257.     draw_text(rect, $data_system.terms.params[prm_id])
  1258.     change_color(normal_color)
  1259.     r = Rect.new(rect.x + 70, rect.y, 80, rect.height)
  1260.     draw_text(r, @actor.param(prm_id), 2)
  1261.     return if change == 0
  1262.     r.x += r.width + 4
  1263.     draw_text(r, "→")
  1264.     change_color(param_change_color(change))
  1265.     draw_text(r, @actor.param(prm_id) + change , 2)
  1266.   end
  1267. end
  1268.  
  1269.  
  1270.  
  1271.  
  1272. #==============================================================================
  1273. # ■ Scene_Shop
  1274. #==============================================================================
  1275. class Scene_Shop < Scene_MenuBase
  1276.   #--------------------------------------------------------------------------
  1277.   # ● 準備
  1278.   #--------------------------------------------------------------------------
  1279.   def prepare(goods, purchase_only)
  1280.     @goods = goods
  1281.     @purchase_only = purchase_only
  1282.     [url=home.php?mod=space&uid=95897]@actor[/url] = $game_party.members[0]
  1283.   end
  1284.   #--------------------------------------------------------------------------
  1285.   # ● 準備
  1286.   #--------------------------------------------------------------------------
  1287.   def prepare_actor(actor)
  1288.     [url=home.php?mod=space&uid=95897]@actor[/url] = actor
  1289.   end
  1290.   #--------------------------------------------------------------------------
  1291.   # ● 開始処理
  1292.   #--------------------------------------------------------------------------
  1293.   def start
  1294.     super
  1295.     create_help_window
  1296.     create_gold_window
  1297.     create_command_window
  1298.     create_dummy_window
  1299.     create_status_window
  1300.     create_category_window
  1301.     create_buy_window
  1302.     create_sell_window
  1303.     create_number_window
  1304.     create_equip_window
  1305.   end
  1306.   #--------------------------------------------------------------------------
  1307.   # ● ゴールドウィンドウの作成
  1308.   #--------------------------------------------------------------------------
  1309.   def create_gold_window
  1310.     @gold_window = Window_Gold.new
  1311.     @gold_window.viewport = @viewport
  1312.     if ExShop::GOLD_LD
  1313.       @gold_window.y = Graphics.height - @gold_window.height
  1314.     else
  1315.       @gold_window.x = Graphics.width - @gold_window.width
  1316.       @gold_window.y = @help_window.height
  1317.       @gold_window.z = 200
  1318.     end
  1319.   end
  1320.   #--------------------------------------------------------------------------
  1321.   # ● コマンドウィンドウの作成
  1322.   #--------------------------------------------------------------------------
  1323.   def create_command_window
  1324.     @command_window = Window_ExShopCommand.new(@gold_window.width, @purchase_only)
  1325.     @command_window.viewport = @viewport
  1326.     @command_window.y = @help_window.height
  1327.     @command_window.set_handler(:buy,    method(:command_buy))
  1328.     @command_window.set_handler(:sell,   method(:command_sell))
  1329.     @command_window.set_handler(:equip,  method(:command_equip))
  1330.     @command_window.set_handler(:cancel, method(:return_scene))
  1331.   end
  1332.   #--------------------------------------------------------------------------
  1333.   # ● ダミーウィンドウの作成
  1334.   #--------------------------------------------------------------------------
  1335.   def create_dummy_window
  1336.     wx = @command_window.width
  1337.     wy = @help_window.height
  1338.     ww = Graphics.width  - wx
  1339.     wh = Graphics.height - wy
  1340.     @dummy_window = Window_Base.new(wx, wy, ww, wh)
  1341.     @dummy_window.viewport = @viewport
  1342.   end
  1343.   #--------------------------------------------------------------------------
  1344.   # ● 個数入力ウィンドウの作成
  1345.   #--------------------------------------------------------------------------
  1346.   def create_number_window
  1347.     wx = @buy_window.x
  1348.     wy = @buy_window.y
  1349.     ww = @buy_window.width
  1350.     wh = @buy_window.height
  1351.     @number_window = Window_ShopNumber.new(wx, wy, ww, wh)
  1352.     @number_window.viewport = @viewport
  1353.     @number_window.hide
  1354.     @number_window.set_handler(:ok,     method(:on_number_ok))
  1355.     @number_window.set_handler(:cancel, method(:on_number_cancel))
  1356.   end
  1357.   #--------------------------------------------------------------------------
  1358.   # ● ステータスウィンドウの作成
  1359.   #--------------------------------------------------------------------------
  1360.   def create_status_window
  1361.     wy = @command_window.y + @command_window.height
  1362.     ww = @command_window.width
  1363.     wh = Graphics.height - wy
  1364.     wh -= @gold_window.height if ExShop::GOLD_LD
  1365.     @status_window = Window_ShopStatus.new(0, wy, ww, wh, @actor)
  1366.     @status_window.viewport = @viewport
  1367.   end
  1368.   #--------------------------------------------------------------------------
  1369.   # ● カテゴリウィンドウの作成
  1370.   #--------------------------------------------------------------------------
  1371.   def create_category_window
  1372.     wx = @command_window.width
  1373.     wy = @help_window.height
  1374.     ww = Graphics.width - wx
  1375.     ww -= @gold_window.width unless ExShop::GOLD_LD
  1376.     @buy_ct_window = Window_ExShopBuyCt.new(wx, wy, ww)
  1377.     @buy_ct_window.viewport = @viewport
  1378.     @buy_ct_window.hide.deactivate
  1379.  
  1380.     @sell_ct_window = Window_ExShopSellCt.new(wx, wy, ww)
  1381.     @sell_ct_window.viewport = @viewport
  1382.     @sell_ct_window.hide.deactivate
  1383.   end
  1384.   #--------------------------------------------------------------------------
  1385.   # ● 購入ウィンドウの作成
  1386.   #--------------------------------------------------------------------------
  1387.   def create_buy_window
  1388.     wx = @dummy_window.x
  1389.     wy = @buy_ct_window.y + @buy_ct_window.height
  1390.     ww = Graphics.width - wx
  1391.     wh = Graphics.height - wy
  1392.     @buy_window = Window_ShopBuy.new(wx, wy, ww, wh, @goods)
  1393.     @buy_window.viewport = @viewport
  1394.     @buy_window.help_window = @help_window
  1395.     @buy_window.status_window = @status_window
  1396.     @buy_window.hide
  1397.     @buy_window.set_handler(:ok,       method(:on_buy_ok))
  1398.     @buy_window.set_handler(:cancel,   method(:on_buy_cancel))
  1399.     @buy_window.set_handler(:pagedown, method(:next_buy_ct))
  1400.     @buy_window.set_handler(:pageup,   method(:prev_buy_ct))
  1401.     @buy_ct_window.item_window = @buy_window
  1402.   end
  1403.   #--------------------------------------------------------------------------
  1404.   # ● 売却ウィンドウの作成
  1405.   #--------------------------------------------------------------------------
  1406.   def create_sell_window
  1407.     wx = @command_window.width
  1408.     wy = @sell_ct_window.y + @sell_ct_window.height
  1409.     ww = Graphics.width - wx
  1410.     wh = Graphics.height - wy
  1411.     @sell_window = Window_ShopSell.new(wx, wy, ww, wh)
  1412.     @sell_window.viewport = @viewport
  1413.     @sell_window.help_window = @help_window
  1414.     @sell_window.status_window = @status_window
  1415.     @sell_window.hide
  1416.     @sell_window.set_handler(:ok,     method(:on_sell_ok))
  1417.     @sell_window.set_handler(:cancel, method(:on_sell_cancel))
  1418.     @sell_window.set_handler(:pagedown, method(:next_sell_ct))
  1419.     @sell_window.set_handler(:pageup,   method(:prev_sell_ct))
  1420.     @sell_ct_window.item_window = @sell_window
  1421.   end
  1422.   #--------------------------------------------------------------------------
  1423.   # ● 装備ウィンドウの作成
  1424.   #--------------------------------------------------------------------------
  1425.   def create_equip_window
  1426.     wx = @number_window.x
  1427.     wy = @number_window.y
  1428.     ww = @number_window.width
  1429.     wh = @number_window.height
  1430.     @equip_window = Window_ShopEquip.new(wx, wy, ww, wh)
  1431.     @equip_window.hide.deactivate
  1432.     @equip_window.set_handler(:equip,  method(:on_equip_ok))
  1433.     @equip_window.set_handler(:cancel, method(:on_equip_cancel))
  1434.   end
  1435.   #--------------------------------------------------------------------------
  1436.   # ● コマンドウィンドウのアクティブ化
  1437.   #--------------------------------------------------------------------------
  1438.   def activate_cmd_window
  1439.     @command_window.activate
  1440.     @dummy_window.show
  1441.     @buy_ct_window.hide
  1442.     @buy_window.hide
  1443.     @sell_ct_window.hide
  1444.     @sell_window.hide
  1445.     @status_window.item = nil
  1446.     @help_window.clear
  1447.   end
  1448.   #--------------------------------------------------------------------------
  1449.   # ● 購入ウィンドウのアクティブ化
  1450.   #--------------------------------------------------------------------------
  1451.   def activate_buy_window
  1452.     @buy_ct_window.show
  1453.     @buy_window.money = money
  1454.     @buy_window.refresh
  1455.     @buy_window.show.activate
  1456.     @status_window.activate
  1457.   end
  1458.   #--------------------------------------------------------------------------
  1459.   # ● 売却ウィンドウのアクティブ化
  1460.   #--------------------------------------------------------------------------
  1461.   def activate_sell_window
  1462.     @sell_ct_window.show
  1463.     @sell_window.refresh
  1464.     @sell_window.show.activate
  1465.     @status_window.activate
  1466.   end
  1467.   #--------------------------------------------------------------------------
  1468.   # ● 装備ウィンドウのアクティブ化
  1469.   #--------------------------------------------------------------------------
  1470.   def activate_equip_window
  1471.     @equip_window.set(@status_window.current_actor, @item)
  1472.     @equip_window.show.activate
  1473.     @equip_window.select(0)
  1474.     @status_window.deactivate
  1475.   end
  1476.   #--------------------------------------------------------------------------
  1477.   # ● コマンド[購入する]
  1478.   #--------------------------------------------------------------------------
  1479.   def command_buy
  1480.     @dummy_window.hide
  1481.     activate_buy_window
  1482.     @buy_window.select(0)
  1483.   end
  1484.   #--------------------------------------------------------------------------
  1485.   # ● コマンド[売却する]
  1486.   #--------------------------------------------------------------------------
  1487.   def command_sell
  1488.     @dummy_window.hide
  1489.     activate_sell_window
  1490.     @sell_window.select(0)
  1491.   end
  1492.   #--------------------------------------------------------------------------
  1493.   # ● コマンド[装備]
  1494.   #--------------------------------------------------------------------------
  1495.   def command_equip
  1496.     SceneManager.call(Scene_ShopEquip)
  1497.     SceneManager.scene.prepare(@status_window.current_actor)
  1498.   end
  1499.   #--------------------------------------------------------------------------
  1500.   # ● 購入[決定]
  1501.   #--------------------------------------------------------------------------
  1502.   def on_buy_ok
  1503.     @item = @buy_window.item
  1504.     @buy_window.hide
  1505.     @number_window.set(@item, max_buy, buying_price, currency_unit)
  1506.     @number_window.show.activate
  1507.     @status_window.deactivate
  1508.   end
  1509.   #--------------------------------------------------------------------------
  1510.   # ● 購入[キャンセル]
  1511.   #--------------------------------------------------------------------------
  1512.   def on_buy_cancel
  1513.     activate_cmd_window
  1514.   end
  1515.   #--------------------------------------------------------------------------
  1516.   # ● 次の購入カテゴリに切り替え
  1517.   #--------------------------------------------------------------------------
  1518.   def next_buy_ct
  1519.     @buy_ct_window.cursor_right(true)
  1520.     @buy_ct_window.update_cursor
  1521.     @buy_ct_window.update
  1522.     @buy_window.activate.select(0)
  1523.     @buy_window.update_help
  1524.   end
  1525.   #--------------------------------------------------------------------------
  1526.   # ● 前の購入カテゴリに切り替え
  1527.   #--------------------------------------------------------------------------
  1528.   def prev_buy_ct
  1529.     @buy_ct_window.cursor_left(true)
  1530.     @buy_ct_window.update_cursor
  1531.     @buy_ct_window.update
  1532.     @buy_window.activate.select(0)
  1533.     @buy_window.update_help
  1534.   end
  1535.   #--------------------------------------------------------------------------
  1536.   # ● 売却[決定]
  1537.   #--------------------------------------------------------------------------
  1538.   def on_sell_ok
  1539.     @item = @sell_window.item
  1540.     @sell_window.hide
  1541.     @number_window.set(@item, max_sell, selling_price, currency_unit)
  1542.     @number_window.show.activate
  1543.     @status_window.deactivate
  1544.   end
  1545.   #--------------------------------------------------------------------------
  1546.   # ● 売却[キャンセル]
  1547.   #--------------------------------------------------------------------------
  1548.   def on_sell_cancel
  1549.     activate_cmd_window
  1550.   end
  1551.   #--------------------------------------------------------------------------
  1552.   # ● 次の売却カテゴリに切り替え
  1553.   #--------------------------------------------------------------------------
  1554.   def next_sell_ct
  1555.     @sell_ct_window.cursor_right(true)
  1556.     @sell_ct_window.update_cursor
  1557.     @sell_ct_window.update
  1558.     @sell_window.activate.select(0)
  1559.     @sell_window.update_help
  1560.   end
  1561.   #--------------------------------------------------------------------------
  1562.   # ● 前の売却カテゴリに切り替え
  1563.   #--------------------------------------------------------------------------
  1564.   def prev_sell_ct
  1565.     @sell_ct_window.cursor_left(true)
  1566.     @sell_ct_window.update_cursor
  1567.     @sell_ct_window.update
  1568.     @sell_window.activate.select(0)
  1569.     @sell_window.update_help
  1570.   end
  1571.   #--------------------------------------------------------------------------
  1572.   # ● 個数入力[決定]
  1573.   #--------------------------------------------------------------------------
  1574.   def on_number_ok
  1575.     Sound.play_shop
  1576.     case @command_window.current_symbol
  1577.     when :buy
  1578.       do_buy(@number_window.number)
  1579.     when :sell
  1580.       do_sell(@number_window.number)
  1581.     end
  1582.     end_number_input(true)
  1583.     @gold_window.refresh
  1584.     @status_window.refresh
  1585.   end
  1586.   #--------------------------------------------------------------------------
  1587.   # ● 個数入力[キャンセル]
  1588.   #--------------------------------------------------------------------------
  1589.   def on_number_cancel
  1590.     Sound.play_cancel
  1591.     end_number_input(false)
  1592.   end
  1593.   #--------------------------------------------------------------------------
  1594.   # ● 購入の実行
  1595.   #--------------------------------------------------------------------------
  1596.   def do_buy(number)
  1597.     $game_party.lose_gold(number * buying_price)
  1598.     $game_party.gain_item(@item, number)
  1599.     $game_system.shop.buy.gold += number * buying_price
  1600.   end
  1601.   #--------------------------------------------------------------------------
  1602.   # ● 売却の実行
  1603.   #--------------------------------------------------------------------------
  1604.   def do_sell(number)
  1605.     $game_party.gain_gold(number * selling_price)
  1606.     $game_party.lose_item(@item, number)
  1607.     $game_system.shop.sell.gold += number * selling_price
  1608.   end
  1609.   #--------------------------------------------------------------------------
  1610.   # ● 個数入力の終了
  1611.   #--------------------------------------------------------------------------
  1612.   def end_number_input(buy=true)
  1613.     @number_window.hide
  1614.     case @command_window.current_symbol
  1615.     when :buy
  1616.       if buy && @status_window.current_actor.equippable?(@item)
  1617.         activate_equip_window
  1618.       else
  1619.         activate_buy_window
  1620.       end
  1621.     when :sell
  1622.       activate_sell_window
  1623.     end
  1624.   end
  1625.   #--------------------------------------------------------------------------
  1626.   # ● 装備[決定]
  1627.   #--------------------------------------------------------------------------
  1628.   def on_equip_ok
  1629.     Sound.play_equip
  1630.     @equip_window.hide
  1631.     actor = @status_window.current_actor
  1632.     actor.change_equip(actor.empty_slot(@item.etype_id), @item)
  1633.     activate_buy_window
  1634.   end
  1635.   #--------------------------------------------------------------------------
  1636.   # ● 装備[キャンセル]
  1637.   #--------------------------------------------------------------------------
  1638.   def on_equip_cancel
  1639.     @equip_window.hide
  1640.     activate_buy_window
  1641.   end
  1642.   #--------------------------------------------------------------------------
  1643.   # ● 最大購入可能個数の取得
  1644.   #--------------------------------------------------------------------------
  1645.   def max_buy
  1646.     max = $game_party.max_item_number(@item) - $game_party.item_number(@item)
  1647.     buying_price == 0 ? max : [max, money / buying_price].min
  1648.   end
  1649.   #--------------------------------------------------------------------------
  1650.   # ● 売値の取得
  1651.   #--------------------------------------------------------------------------
  1652.   def selling_price
  1653.     ExShop::sell_price(@item, @item.price)
  1654.   end
  1655. end
  1656.  
  1657.  
  1658.  
  1659. #==============================================================================
  1660. # ■ Scene_ShopEquip
  1661. #------------------------------------------------------------------------------
  1662. # ショップ画面から呼び出す装備画面。メニューのものとは処理を分離。
  1663. # ($game_party.menu_actorは変化させない)
  1664. #==============================================================================
  1665. class Scene_ShopEquip < Scene_Equip
  1666.   #--------------------------------------------------------------------------
  1667.   # ● 準備
  1668.   #--------------------------------------------------------------------------
  1669.   def prepare(actor)
  1670.     @start_actor = actor
  1671.   end
  1672.   #--------------------------------------------------------------------------
  1673.   # ● 開始処理
  1674.   #--------------------------------------------------------------------------
  1675.   def start
  1676.     tmp_actor = $game_party.menu_actor
  1677.     $game_party.menu_actor = @start_actor
  1678.     super
  1679.     $game_party.menu_actor = tmp_actor
  1680.   end
  1681.   #--------------------------------------------------------------------------
  1682.   # ● 次のアクターに切り替え
  1683.   #--------------------------------------------------------------------------
  1684.   def next_actor
  1685.     tmp_actor = $game_party.menu_actor
  1686.     @actor = $game_party.menu_actor_next
  1687.     $game_party.menu_actor = tmp_actor
  1688.     on_actor_change
  1689.   end
  1690.   #--------------------------------------------------------------------------
  1691.   # ● 前のアクターに切り替え
  1692.   #--------------------------------------------------------------------------
  1693.   def prev_actor
  1694.     tmp_actor = $game_party.menu_actor
  1695.     @actor = $game_party.menu_actor_prev
  1696.     $game_party.menu_actor = tmp_actor
  1697.     on_actor_change
  1698.   end
  1699.   #--------------------------------------------------------------------------
  1700.   # ● 呼び出し元のシーンへ戻る
  1701.   #--------------------------------------------------------------------------
  1702.   def return_scene
  1703.     super
  1704.     SceneManager.scene.prepare_actor(@actor)
  1705.   end
  1706. end
你的意思就是要打架咯?

Lv5.捕梦者

梦石
0
星屑
22958
在线时间
8638 小时
注册时间
2011-12-31
帖子
3367
2
发表于 2013-11-21 23:10:52 | 只看该作者
試試把622刪去(在前面+「#」字)
  add_command(Vocab.equip,       :equip,  $game_party.members.size > 0)

点评

哈哈 大神就是靠的住啊 解决了 可以了 非常感谢你!  发表于 2013-11-22 00:21

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 04:53

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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