Project1

标题: 關於物品分類蓋過另一腳本的物品功能 [打印本页]

作者: 銀藍色的零    时间: 2009-12-13 16:40
标题: 關於物品分類蓋過另一腳本的物品功能
本帖最后由 銀藍色的零 于 2009-12-13 22:41 编辑

我使用了這一套腳本系統
工程
但是我還要使用物品分類的腳本
所以導致原來的物品系統亂掉了
請問要從哪調整呢?

物品分類腳本
原出處:http://ytomy.sakura.ne.jp/tkool/rpgtech/techlist_xp.html
  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/    ◆ アイテム分類 - KGC_ItemGrouping ◆
  3. #_/    ◇ Last update : 2007/08/26 ◇
  4. #_/----------------------------------------------------------------------------
  5. #_/  アイテムを種類別に分類する処理を追加します。
  6. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

  7. #==============================================================================
  8. # ★ カスタマイズ項目 ★
  9. #==============================================================================

  10. module KGC
  11.   # ◆分類属性配列
  12.   #  分類に使用する属性名を並べる(0:全種  -1:武器  -2:防具)
  13.   IG_ELEMENTS = ["恢復", "攻擊", "輔助", "材料", "劇情", 0]

  14.   # ◆分類名称配列
  15.   #  分類後の名称を並べる(分類属性配列と同じ位置・数)
  16.   IG_NAME = ["恢復", "攻擊", "輔助", "材料", "劇情"]
  17.   
  18.   # ◆説明文(分類属性配列と同じ位置・数)
  19.   IG_HELP = ["顯示所有的恢復物品。",
  20.     "顯示所有的攻擊物品。",
  21.     "顯示所有的輔助物品。",
  22.     "顯示所有的材料物品。",
  23.     "顯示所有的劇情物品。"]

  24.   # ◆分類ウィンドウの表示形式
  25.   #  0..横型  1..縦型
  26.   IG_GROUP_WINDOW_STYLE = 0
  27.   # ---- IG_GROUP_WINDOW_STYLE == 1 の場合のみ、次の ----
  28.   # ---- if ~ end 間の項目が有効になります          ----
  29.   if IG_GROUP_WINDOW_STYLE == 1
  30.     # ◆分類ウィンドウの座標
  31.     IG_GROUP_WINDOW_POS   = [336, 96]
  32.     # ◆分類ウィンドウの幅
  33.     IG_GROUP_WINDOW_WIDTH = 240
  34.   end
  35. end

  36. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  37. $imported = {} if $imported == nil
  38. $imported["ItemGrouping"] = true

  39. if $game_special_elements == nil
  40.   $game_special_elements = {}
  41.   $data_system = load_data("Data/System.rxdata")
  42. end
  43. # 非表示属性
  44. $game_special_elements["item_hide"] = $data_system.elements.index("非表示アイテム")

  45. module KGC
  46.   # 分類配列
  47.   ITEM_GROUP = []

  48.   IG_ELEMENTS.each_with_index { |element, i|
  49.     # 分類属性が 0 以下の場合
  50.     if element.is_a?(Numeric) && element <= 0
  51.       ITEM_GROUP[i] = element
  52.       next
  53.     end
  54.     # ハッシュのキーを設定
  55.     key = "_grouping_item_#{i}}"
  56.     # 属性ID取得
  57.     $game_special_elements[key] = $data_system.elements.index(element)
  58.     ITEM_GROUP[i] = $game_special_elements[key]
  59.   }
  60. end

  61. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  62. #==============================================================================
  63. # ■ Module_RPG
  64. #==============================================================================

  65. module RPG
  66.   class Item
  67.     #--------------------------------------------------------------------------
  68.     # ● アイテム使用可否判定
  69.     #--------------------------------------------------------------------------
  70.     def usable?
  71.       if $game_party.item_can_use?(self.id)
  72.         return true
  73.       end
  74.       return false
  75.     end
  76.   end
  77.   unless $imported["UsableEquipment"]
  78.   class Weapon
  79.     #--------------------------------------------------------------------------
  80.     # ● 武器使用可否判定
  81.     #--------------------------------------------------------------------------
  82.     def usable?
  83.       return false
  84.     end
  85.   end
  86.   class Armor
  87.     #--------------------------------------------------------------------------
  88.     # ● 防具使用可否判定
  89.     #--------------------------------------------------------------------------
  90.     def usable?
  91.       return false
  92.     end
  93.   end
  94.   end
  95. end

  96. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  97. #==============================================================================
  98. # ■ Module_Graphics
  99. #==============================================================================

  100. module Graphics
  101.   unless defined?(transition_interrupt_KGC)
  102.   #--------------------------------------------------------------------------
  103.   # ● トランジション実行
  104.   #--------------------------------------------------------------------------
  105.   class << Graphics
  106.     alias transition_interrupt_KGC transition
  107.   end
  108.   def self.transition(duration = 8, filename = "", vague = 40)
  109.     if @_interrupt_transition
  110.       @_transition_duration = duration
  111.       @_transition_filename = filename.dup
  112.       @_transition_vague = vague
  113.       return
  114.     end

  115.     transition_interrupt_KGC(duration, filename, vague)
  116.   end
  117.   #--------------------------------------------------------------------------
  118.   # ● トランジション割り込み開始
  119.   #--------------------------------------------------------------------------
  120.   def self.start_interrupt_transition
  121.     @_interrupt_transition = true
  122.   end
  123.   #--------------------------------------------------------------------------
  124.   # ● トランジション割り込み終了
  125.   #--------------------------------------------------------------------------
  126.   def self.end_interrupt_transition
  127.     if @_interrupt_transition
  128.       @_interrupt_transition = nil
  129.       transition(@_transition_duration, @_transition_filename,
  130.         @_transition_vague)
  131.       @_transition_duration = @_transition_filename = @_transition_vague = nil
  132.     end
  133.   end
  134.   end
  135. end

  136. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  137. #==============================================================================
  138. # ■ Window_Item
  139. #==============================================================================

  140. class Window_Item < Window_Selectable
  141.   #--------------------------------------------------------------------------
  142.   # ● オブジェクト初期化
  143.   #--------------------------------------------------------------------------
  144.   alias initialize_KGC_ItemGrouping initialize
  145.   def initialize
  146.     initialize_KGC_ItemGrouping

  147.     # 戦闘中以外の場合
  148.     unless $game_temp.in_battle
  149.       # [ヘルプウィンドウ拡張]を導入していない場合
  150.       unless $imported["HelpExtension"]
  151.         self.y += 64
  152.         self.height -= 64
  153.       end
  154.       self.index = -1
  155.       # アクティブ化解除
  156.       self.active = false
  157.     end
  158.   end
  159.   #--------------------------------------------------------------------------
  160.   # ● アイテム数を取得
  161.   #--------------------------------------------------------------------------
  162.   def item_number
  163.     return @data.size
  164.   end
  165.   #--------------------------------------------------------------------------
  166.   # ● 非表示判定
  167.   #     index : アイテムID
  168.   #     type  : 種別(0:アイテム  1:武器  2:防具)
  169.   #--------------------------------------------------------------------------
  170.   def hide?(index, type = 0)
  171.     case type
  172.     when 0  # アイテム
  173.       elements = $data_items[index].element_set
  174.     when 1  # 武器
  175.       elements = $data_weapons[index].element_set
  176.     when 2  # 防具
  177.       elements = $data_armors[index].guard_element_set
  178.     end
  179.     return elements.include?($game_special_elements["item_hide"])
  180.   end
  181.   #--------------------------------------------------------------------------
  182.   # ● 分類後のアイテムリストを取得
  183.   #     itemkind : アイテムの種別
  184.   #--------------------------------------------------------------------------
  185.   def itemlist(itemkind)
  186.     @data = []
  187.     # 戦闘中以外なら分類に従って追加
  188.     unless $game_temp.in_battle
  189.       # 「全種」の場合
  190.       if KGC::ITEM_GROUP[itemkind] == 0
  191.         for i in 1...$data_items.size
  192.           if $game_party.item_number(i) > 0 && !self.hide?(i, 0)
  193.             @data.push($data_items[i])
  194.           end
  195.         end
  196.         for i in 1...$data_weapons.size
  197.           if $game_party.weapon_number(i) > 0 && !self.hide?(i, 1)
  198.             @data.push($data_weapons[i])
  199.           end
  200.         end
  201.         for i in 1...$data_armors.size
  202.           if $game_party.armor_number(i) > 0 && !self.hide?(i, 2)
  203.             @data.push($data_armors[i])
  204.           end
  205.         end
  206.       # 「武器」の場合
  207.       elsif KGC::ITEM_GROUP[itemkind] == -1
  208.         for i in 1...$data_weapons.size
  209.           if $game_party.weapon_number(i) > 0 && !self.hide?(i, 1)
  210.             @data.push($data_weapons[i])
  211.           end
  212.         end
  213.       # 「防具」の場合
  214.       elsif KGC::ITEM_GROUP[itemkind] == -2
  215.         for i in 1...$data_armors.size
  216.           if $game_party.armor_number(i) > 0 && !self.hide?(i, 2)
  217.             @data.push($data_armors[i])
  218.           end
  219.         end
  220.       else
  221.         for i in 1...$data_items.size
  222.           # アイテムを所持、かつ対応属性を持っている場合は追加
  223.           if $game_party.item_number(i) > 0 && !self.hide?(i, 0) &&
  224.               $data_items[i].element_set.include?(KGC::ITEM_GROUP[itemkind])
  225.             @data.push($data_items[i])
  226.           end
  227.         end
  228.       end
  229.     # 戦闘中なら、アイテムと効果付き装備のみ追加
  230.     else
  231.       for i in 1...$data_items.size
  232.         # アイテムを所持している場合は追加
  233.         if $game_party.item_number(i) > 0 && !self.hide?(i, 0)
  234.           @data.push($data_items[i])
  235.         end
  236.       end
  237.       for i in 1...$data_weapons.size
  238.         weapon = $data_weapons[i]
  239.         # 武器を所持、かつ使用効果属性を持っている場合
  240.         if $game_party.weapon_number(i) > 0 && !self.hide?(i, 1) && weapon.usable?
  241.           @data.push(weapon)
  242.         end
  243.       end
  244.       for i in 1...$data_armors.size
  245.         armor = $data_armors[i]
  246.         # 防具を所持、かつ使用効果属性を持っている場合
  247.         if $game_party.armor_number(i) > 0 && !self.hide?(i, 2) && armor.usable?
  248.           @data.push(armor)
  249.         end
  250.       end
  251.     end
  252.   end
  253.   #--------------------------------------------------------------------------
  254.   # ● リフレッシュ
  255.   #     itemkind : アイテムの分類
  256.   #--------------------------------------------------------------------------
  257.   def refresh(itemkind = 0)
  258.     if self.contents != nil
  259.       self.contents.dispose
  260.       self.contents = nil
  261.     end
  262.     # 分類後のリストを取得
  263.     self.itemlist(itemkind)
  264.     # 項目数が 0 でなければビットマップを作成し、全項目を描画
  265.     @item_max = @data.size
  266.     if @item_max > 0
  267.       self.contents = Bitmap.new(width - 32, self.row_max * 32)
  268.       for i in 0...@item_max
  269.         draw_item(i)
  270.       end
  271.     else
  272.       self.contents = Bitmap.new(32, 32)
  273.     end
  274.   end
  275.   #--------------------------------------------------------------------------
  276.   # ● 項目の描画
  277.   #     index : 項目番号
  278.   #--------------------------------------------------------------------------
  279.   def draw_item(index)
  280.     item = @data[index]
  281.     case item
  282.     when RPG::Item
  283.       number = $game_party.item_number(item.id)
  284.     when RPG::Weapon
  285.       number = $game_party.weapon_number(item.id)
  286.     when RPG::Armor
  287.       number = $game_party.armor_number(item.id)
  288.     end
  289.     if (item.is_a?(RPG::Item) && item.usable?) ||
  290.         ($game_temp.in_battle && item.usable?)
  291.       self.contents.font.color = normal_color
  292.     else
  293.       self.contents.font.color = disabled_color
  294.     end
  295.     x = 4 + index % 2 * (288 + 32)
  296.     y = index / 2 * 32
  297.     rect = Rect.new(x, y, self.width / @column_max - 32, 32)
  298.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  299.     bitmap = RPG::Cache.icon(item.icon_name)
  300.     opacity = self.contents.font.color == normal_color ? 255 : 128
  301.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  302.     self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  303.     self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
  304.     self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
  305.   end
  306.   #--------------------------------------------------------------------------
  307.   # ● ヘルプテキスト更新
  308.   #--------------------------------------------------------------------------
  309.   def update_help
  310.     @help_window.set_text(self.item == nil ? "" : self.item.description)
  311.   end
  312. end

  313. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  314. #==============================================================================
  315. # ■ Window_ItemGroup
  316. #------------------------------------------------------------------------------
  317. #  アイテム画面で、分類を選択するウィンドウです。
  318. #==============================================================================

  319. class Window_ItemGroup < Window_Selectable
  320.   #--------------------------------------------------------------------------
  321.   # ● オブジェクト初期化
  322.   #--------------------------------------------------------------------------
  323.   def initialize
  324.     wpos = Rect.new(0, 64, 640, 64)
  325.     if KGC::IG_GROUP_WINDOW_STYLE == 1
  326.       wpos.x = KGC::IG_GROUP_WINDOW_POS[0]
  327.       wpos.y = KGC::IG_GROUP_WINDOW_POS[1]
  328.       wpos.width = KGC::IG_GROUP_WINDOW_WIDTH
  329.       wpos.height = KGC::IG_NAME.size * 32 + 32
  330.     end
  331.     super(wpos.x, wpos.y, wpos.width, wpos.height)
  332.     self.contents = Bitmap.new(width - 32, height - 32)
  333.     # コマンド一覧を作成
  334.     @commands = KGC::IG_NAME
  335.     @item_max = @commands.size
  336.     if KGC::IG_GROUP_WINDOW_STYLE == 1
  337.       @column_max = 1
  338.       @item_width = width - 32
  339.     else
  340.       @column_max = @commands.size
  341.       @item_width = (width - 32) / @commands.size
  342.     end
  343.     self.index = 0
  344.     self.opacity = 0
  345.     refresh
  346.   end
  347.   #--------------------------------------------------------------------------
  348.   # ● リフレッシュ
  349.   #--------------------------------------------------------------------------
  350.   def refresh
  351.     rect = Rect.new(0, 0, @item_width, 32)
  352.     for i in [email protected]
  353.       rect.x = @item_width * (i % @column_max)
  354.       rect.y = 32 * (i / @column_max)
  355.       self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  356.       self.contents.font.color = system_color
  357.       self.contents.draw_text(rect, @commands[i], 1)
  358.     end
  359.   end
  360.   #--------------------------------------------------------------------------
  361.   # ● カーソルの矩形更新
  362.   #--------------------------------------------------------------------------
  363.   def update_cursor_rect
  364.     if index != -1
  365.       self.cursor_rect.set(@item_width * (index % @column_max),
  366.         32 * (index / @column_max),
  367.         @item_width,
  368.         32)
  369.     end
  370.   end
  371.   #--------------------------------------------------------------------------
  372.   # ● ヘルプテキスト更新
  373.   #--------------------------------------------------------------------------
  374.   def update_help
  375.     @help_window.set_text(KGC::IG_HELP[self.index])
  376.   end
  377. end

  378. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  379. #==============================================================================
  380. # ■ Scene_Item
  381. #==============================================================================

  382. class Scene_Item
  383.   #--------------------------------------------------------------------------
  384.   # ● メイン処理
  385.   #--------------------------------------------------------------------------
  386.   alias main_KGC_ItemGrouping main
  387.   def main
  388.     # 分類ウィンドウを作成
  389.     @group_window = Window_ItemGroup.new
  390.     if $imported["MenuAlter"] && KGC::MA_MENU_TRANSPARENT
  391.       @group_window.back_opacity = 160
  392.     end
  393.     Graphics.start_interrupt_transition

  394.     main_KGC_ItemGrouping
  395.     # ウィンドウを解放
  396.     @group_window.dispose
  397.   end
  398.   #--------------------------------------------------------------------------
  399.   # ● フレーム更新
  400.   #--------------------------------------------------------------------------
  401.   def update
  402.     # ウィンドウを初期化していない場合
  403.     unless @window_initialize
  404.       # Z オーダーを調整
  405.       @group_window.z = @help_window.z + 100
  406.       @target_window.z = @group_window.z + 100
  407.       # ヘルプウィンドウを関連付け
  408.       @group_window.help_window = @help_window
  409.       # 初期化フラグをオン
  410.       @window_initialize = true
  411.       # トランジション割り込み終了
  412.       Graphics.end_interrupt_transition
  413.     end
  414.     # ウィンドウを更新
  415.     @help_window.update
  416.     @item_window.update
  417.     @target_window.update
  418.     @group_window.update
  419.     # アイテムウィンドウがアクティブの場合: update_item を呼ぶ
  420.     if @item_window.active
  421.       update_item
  422.       return
  423.     end
  424.     # ターゲットウィンドウがアクティブの場合: update_target を呼ぶ
  425.     if @target_window.active
  426.       update_target
  427.       return
  428.     end
  429.     # 分類ウィンドウがアクティブの場合: update_group を呼ぶ
  430.     if @group_window.active
  431.       update_group
  432.       return
  433.     end
  434.   end
  435.   #--------------------------------------------------------------------------
  436.   # ● フレーム更新 (アイテムウィンドウがアクティブの場合)
  437.   #--------------------------------------------------------------------------
  438.   alias update_item_KGC_ItemGrouping update_item
  439.   def update_item
  440.     # B ボタンが押された場合
  441.     if Input.trigger?(Input::B)
  442.       # キャンセル SE を演奏
  443.       $game_system.se_play($data_system.cancel_se)
  444.       # 分類ウィンドウをアクティブ化
  445.       @group_window.active = true
  446.       @group_window.visible = true
  447.       @item_window.active = false
  448.       @item_window.index = -1
  449.       return
  450.     end

  451.     update_item_KGC_ItemGrouping
  452.   end
  453.   #--------------------------------------------------------------------------
  454.   # ● フレーム更新 (ターゲットウィンドウがアクティブの場合)
  455.   #--------------------------------------------------------------------------
  456.   def update_target
  457.     # B ボタンが押された場合
  458.     if Input.trigger?(Input::B)
  459.       # キャンセル SE を演奏
  460.       $game_system.se_play($data_system.cancel_se)
  461.       # アイテム切れなどで使用できなくなった場合
  462.       unless $game_party.item_can_use?(@item.id)
  463.         # アイテムウィンドウの内容を再作成
  464.         @item_window.refresh(@group_window.index)
  465.       end
  466.       # ターゲットウィンドウを消去
  467.       @item_window.active = true
  468.       @target_window.visible = false
  469.       @target_window.active = false
  470.       return
  471.     end
  472.     # C ボタンが押された場合
  473.     if Input.trigger?(Input::C)
  474.       # アイテムを使い切った場合
  475.       if $game_party.item_number(@item.id) == 0
  476.         # ブザー SE を演奏
  477.         $game_system.se_play($data_system.buzzer_se)
  478.         return
  479.       end
  480.       # ターゲットが全体の場合
  481.       if @target_window.index == -1
  482.         # パーティ全体にアイテムの使用効果を適用
  483.         used = false
  484.         for i in $game_party.actors
  485.           used |= i.item_effect(@item)
  486.         end
  487.       end
  488.       # ターゲットが単体の場合
  489.       if @target_window.index >= 0
  490.         # ターゲットのアクターにアイテムの使用効果を適用
  491.         target = $game_party.actors[@target_window.index]
  492.         used = target.item_effect(@item)
  493.       end
  494.       # アイテムを使った場合
  495.       if used
  496.         # アイテムの使用時 SE を演奏
  497.         $game_system.se_play(@item.menu_se)
  498.         # 消耗品の場合
  499.         if @item.consumable
  500.           # 使用したアイテムを 1 減らす
  501.           $game_party.lose_item(@item.id, 1)
  502.           # アイテムウィンドウの項目を再描画
  503.           @item_window.draw_item(@item_window.index)
  504.         end
  505.         # ターゲットウィンドウの内容を再作成
  506.         @target_window.refresh
  507.         # 全滅の場合
  508.         if $game_party.all_dead?
  509.           # ゲームオーバー画面に切り替え
  510.           $scene = Scene_Gameover.new
  511.           return
  512.         end
  513.         # コモンイベント ID が有効の場合
  514.         if @item.common_event_id > 0
  515.           # コモンイベント呼び出し予約
  516.           $game_temp.common_event_id = @item.common_event_id
  517.           # マップ画面に切り替え
  518.           $scene = Scene_Map.new
  519.           return
  520.         end
  521.       end
  522.       # アイテムを使わなかった場合
  523.       unless used
  524.         # ブザー SE を演奏
  525.         $game_system.se_play($data_system.buzzer_se)
  526.       end
  527.       return
  528.     end
  529.   end
  530.   #--------------------------------------------------------------------------
  531.   # ● フレーム更新 (分類ウィンドウがアクティブの場合)
  532.   #--------------------------------------------------------------------------
  533.   def update_group
  534.     if @now_itemkind != @group_window.index
  535.       # カーソル位置によって表示するアイテムの分類を分ける
  536.       @item_window.refresh(@group_window.index)
  537.       @item_window.oy = 0
  538.       @now_itemkind = @group_window.index
  539.     end
  540.     # B ボタンが押された場合
  541.     if Input.trigger?(Input::B)
  542.       # キャンセル SE を演奏
  543.       $game_system.se_play($data_system.cancel_se)
  544.       # メニュー画面に切り替え
  545.       if $imported["MenuAlter"]
  546.         index = KGC::MA_COMMANDS.index(0)
  547.         if index != nil
  548.           $scene = Scene_Menu.new(index)
  549.         else
  550.           $scene = Scene_Menu.new
  551.         end
  552.       else
  553.         $scene = Scene_Menu.new(0)
  554.       end
  555.       return
  556.     end
  557.     # C ボタンが押された場合
  558.     if Input.trigger?(Input::C)
  559.       # アイテムが無い場合
  560.       if @item_window.item_number == 0
  561.         # ブザー SE を演奏
  562.         $game_system.se_play($data_system.buzzer_se)
  563.         return
  564.       end
  565.       # 決定 SE を演奏
  566.       $game_system.se_play($data_system.decision_se)
  567.       # アイテムウィンドウをアクティブ化
  568.       @item_window.active = true
  569.       @item_window.index = 0
  570.       @group_window.active = false
  571.       @group_window.visible = false if $imported["HelpExtension"]
  572.       return
  573.     end
  574.   end
  575. end
复制代码

作者: 銀藍色的零    时间: 2009-12-14 19:50
請高手幫忙~~~~
作者: 天堂爱龙    时间: 2009-12-15 13:05
提示: 作者被禁止或删除 内容自动屏蔽
作者: 銀藍色的零    时间: 2009-12-15 18:26
第564行會出錯~~~囧|||




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