Project1

标题: 请问这个物品分类脚本怎么用? [打印本页]

作者: PCPC_02    时间: 2015-7-17 13:03
标题: 请问这个物品分类脚本怎么用?
请问用这个脚本数据库里设置的物品应该怎么分类呢?

RUBY 代码复制
  1. #==============================================================================
  2. # 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息
  3. #==============================================================================
  4.  
  5.  
  6. #==============================================================================
  7. # ■ Harts_Window_ItemTitle
  8. #------------------------------------------------------------------------------
  9. #  アイテム画面で、タイトルを表示するウィンドウ。
  10. #==============================================================================
  11.  
  12. class Harts_Window_ItemTitle < Window_Base
  13.   #--------------------------------------------------------------------------
  14.   # ● オブジェクト初期化
  15.   #--------------------------------------------------------------------------
  16.   def initialize
  17.     super(0, 0, 160, 58)
  18.     self.contents = Bitmap.new(width - 32, height - 32)
  19.     self.contents.clear
  20.     self.contents.font.color = normal_color
  21.     self.contents.draw_text(4, 0, 120, 32, $data_system.words.item, 1)
  22.   end
  23. end
  24.  
  25. #==============================================================================
  26. # ■ Harts_Window_ItemCommand
  27. #------------------------------------------------------------------------------
  28. #  アイテムの种别选择を行うウィンドウです。
  29. #==============================================================================
  30.  
  31. class Harts_Window_ItemCommand < Window_Selectable
  32.   #--------------------------------------------------------------------------
  33.   # ● オブジェクト初期化
  34.   #--------------------------------------------------------------------------
  35.   def initialize
  36.     super(0, 58, 160, 256)
  37.     self.contents = Bitmap.new(width - 32, height - 32)
  38.     @item_max = 3
  39.     @commands = ["物品", "精灵等", "特殊物品"]
  40.     refresh
  41.     self.index = 0
  42.   end
  43.   #--------------------------------------------------------------------------
  44.   # ● リフレッシュ
  45.   #--------------------------------------------------------------------------
  46.   def refresh
  47.     self.contents.clear
  48.     for i in 0...@item_max
  49.     draw_item(i, normal_color)
  50.     end
  51.   end
  52.   #--------------------------------------------------------------------------
  53.   # ● 项目の描画
  54.   # index : 项目番号
  55.   # color : 文字色
  56.   #--------------------------------------------------------------------------
  57.   def draw_item(index, color)
  58.     self.contents.font.color = color
  59.     y = index * 32
  60.     self.contents.draw_text(4, y, 128, 32, @commands[index])
  61.   end
  62.   #--------------------------------------------------------------------------
  63.   # ● ヘルプテキスト更新
  64.   #--------------------------------------------------------------------------
  65.   def update_help
  66.     case self.index
  67.     when 0
  68.       @text = @commands[0]
  69.     when 1
  70.       @text = @commands[1]
  71.     when 2
  72.       @text = @commands[2]
  73.     when 3
  74.       @text = @commands[3]
  75.     when 4
  76.       @text = @commands[4]
  77.     when 5
  78.       @text = @commands[5]
  79.     when 6
  80.       @text = @commands[6]
  81.     #when 7
  82.       #@text = @commands[7]
  83.     end
  84.     @help_window.set_text(@text)
  85.   end
  86. end
  87.  
  88. #==============================================================================
  89. # ■ Window_Item
  90. #------------------------------------------------------------------------------
  91. #  アイテム画面で、所持アイテムの一览を表示するウィンドウです。
  92. #==============================================================================
  93.  
  94. class Harts_Window_ItemList < Window_Selectable
  95.   #--------------------------------------------------------------------------
  96.   # ● オブジェクト初期化
  97.   #--------------------------------------------------------------------------
  98.   def initialize
  99.     super(160, 0, 480, 416)
  100.     refresh
  101.     self.index = 0
  102.   end
  103.   #--------------------------------------------------------------------------
  104.   # ● アイテムの取得
  105.   #--------------------------------------------------------------------------
  106.   def item
  107.     return @data[self.index]
  108.   end
  109.   #--------------------------------------------------------------------------
  110.   # ● リフレッシュ
  111.   #--------------------------------------------------------------------------
  112.   def refresh
  113.     if self.contents != nil
  114.       self.contents.dispose
  115.       self.contents = nil
  116.     end
  117.     @data = []
  118.   end
  119.   #--------------------------------------------------------------------------
  120.   # ● アイテム一览设定
  121.   # command : 选择中のコマンド
  122.   #--------------------------------------------------------------------------
  123.   #0=平时/1=战斗时/2=菜单时/3=不可使用时
  124.   def set_item(command)
  125.     refresh
  126.     case command
  127.     when 0
  128.       for i in 1...$data_items.size
  129.         if ($data_items[i].occasion == 0 or $data_items[i].occasion == 3) and $game_party.item_number(i) > 0
  130.           @data.push($data_items[i])
  131.         end
  132.       end
  133.     when 1
  134.       for i in 1...$data_items.size
  135.         if ($data_items[i].occasion == 2 and $game_party.item_number(i) > 0)
  136.           @data.push($data_items[i])
  137.         end
  138.       end
  139.     when 2
  140.       for i in 1...$data_weapons.size
  141.         if $game_party.weapon_number(i) > 0
  142.           @data.push($data_weapons[i])
  143.         end
  144.       end
  145.     when 3
  146.       for i in 1...$data_armors.size
  147.         if $data_armors[i].kind == 0 and $game_party.armor_number(i) > 0
  148.           @data.push($data_armors[i])
  149.         end
  150.       end
  151.     when 4
  152.       for i in 1...$data_armors.size
  153.         if $data_armors[i].kind == 1 and $game_party.armor_number(i) > 0
  154.           @data.push($data_armors[i])
  155.         end
  156.       end
  157.     when 5
  158.       for i in 1...$data_armors.size
  159.         if $data_armors[i].kind == 2 and $game_party.armor_number(i) > 0
  160.           @data.push($data_armors[i])
  161.         end
  162.         if $data_armors[i].kind == 3 and $game_party.armor_number(i) > 0
  163.           @data.push($data_armors[i])
  164.         end
  165.       end
  166.     when 6
  167.       for i in 1...$data_items.size
  168.         if ($data_items[i].occasion == 1 and $game_party.item_number(i) > 0)
  169.           @data.push($data_items[i])
  170.         end
  171.       end
  172.     #when 7
  173.     #  for i in 1...$data_items.size
  174.     #    if $data_items[i].occasion == 3 and $game_party.item_number(i) > 0
  175.     #      @data.push($data_items[i])
  176.     #    end
  177.     #  end
  178.     end
  179.     # 项目数が 0 でなければビットマップを作成し、全项目を描画
  180.     @item_max = @data.size
  181.     if @item_max > 0
  182.       self.contents = Bitmap.new(width - 32, row_max * 32)
  183.       self.contents.clear
  184.       for i in 0...@item_max
  185.         draw_item(i)
  186.       end
  187.     end
  188.   end
  189.   #--------------------------------------------------------------------------
  190.   # ● 种类别アイテム数の取得
  191.   #--------------------------------------------------------------------------
  192.   def item_number
  193.     return @item_max
  194.   end
  195.   #--------------------------------------------------------------------------
  196.   # ● 项目の描画
  197.   # index : 项目番号
  198.   #--------------------------------------------------------------------------
  199.   def draw_item(index)
  200.     item = @data[index]
  201.     case item
  202.     when RPG::Item
  203.       number = $game_party.item_number(item.id)
  204.     when RPG::Weapon
  205.       number = $game_party.weapon_number(item.id)
  206.     when RPG::Armor
  207.       number = $game_party.armor_number(item.id)
  208.     end
  209.     if item.is_a?(RPG::Item) and
  210.       $game_party.item_can_use?(item.id)
  211.       self.contents.font.color = normal_color
  212.     else
  213.       self.contents.font.color = disabled_color
  214.     end
  215.     x = 4
  216.     y = index * 32
  217.     bitmap = RPG::Cache.icon(item.icon_name)
  218.     opacity = self.contents.font.color == normal_color ? 255 : 128
  219.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  220.     self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  221.     self.contents.draw_text(x + 400, y, 16, 32, ":", 1)
  222.     self.contents.draw_text(x + 416, y, 24, 32, number.to_s, 2)
  223.   end
  224.   #--------------------------------------------------------------------------
  225.   # ● ヘルプテキスト更新
  226.   #--------------------------------------------------------------------------
  227.   def update_help
  228.     @help_window.set_text(self.item == nil ? "" : self.item.description)
  229.   end
  230. end
  231.  
  232. #==============================================================================
  233. # ■ Harts_Scene_Item
  234. #------------------------------------------------------------------------------
  235. #  アイテム画面の处理を行うクラスです。再定义
  236. #==============================================================================
  237.  
  238. class Scene_Item
  239.   #--------------------------------------------------------------------------
  240.   # ● メイン处理
  241.   #--------------------------------------------------------------------------
  242.   def main
  243.     # タイトルウィンドウを作成
  244.     @itemtitle_window = Harts_Window_ItemTitle.new
  245.     #コマンドウィンドウを作成
  246.     @itemcommand_window = Harts_Window_ItemCommand.new
  247.     @command_index = @itemcommand_window.index
  248.     #アイテムウィンドウを作成
  249.  
  250.     @itemlist_window = Harts_Window_ItemList.new
  251.     @itemlist_window.active = false
  252.     #ヘルプウィンドウを作成
  253.     @help_window = Window_Help.new
  254.     @help_window.x = 0
  255.     @help_window.y = 416
  256.     # ヘルプウィンドウを关连付け
  257.     @itemcommand_window.help_window = @help_window
  258.     @itemlist_window.help_window = @help_window
  259.     # ターゲットウィンドウを作成 (不可视?非アクティブに设定)
  260.     @target_window = Window_Target.new
  261.     @target_window.visible = false
  262.     @target_window.active = false
  263.     @equip_window = Window_Equip.new
  264.     # アイテムウィンドウ内容表示
  265.     @itemlist_window.set_item(@command_index)
  266.     @sprite = Sprite.new
  267.     @sprite.bitmap = Bitmap.new("Graphics/Pictures/图片框")
  268.     @sprite.x = 0
  269.     @sprite.y = 315
  270.     # トランジション实行
  271.     Graphics.transition
  272.     # メインループ
  273.     loop do
  274.       # ゲーム画面を更新
  275.       Graphics.update
  276.       # 入力情报を更新
  277.       Input.update
  278.       # フレーム更新
  279.       update
  280.       # 画面が切り替わったらループを中断
  281.       if $scene != self
  282.         break
  283.       end
  284.     end
  285.     # トランジション准备
  286.     Graphics.freeze
  287.     # ウィンドウを解放
  288.     @sprite.bitmap.dispose
  289.     @sprite.dispose
  290.     @itemtitle_window.dispose
  291.     @itemcommand_window.dispose
  292.     @itemlist_window.dispose
  293.     @help_window.dispose
  294.     @target_window.dispose
  295.     @equip_window.dispose
  296.   end
  297.   #--------------------------------------------------------------------------
  298.   # ● フレーム更新
  299.   #--------------------------------------------------------------------------
  300.   def update
  301.     # ウィンドウを更新
  302.     @itemtitle_window.update
  303.     @itemcommand_window.update
  304.     @itemlist_window.update
  305.     @help_window.update
  306.     @target_window.update
  307.     @equip_window.refresh
  308.     @equip_window.set_item(@itemlist_window.item)
  309.     if @command_index != @itemcommand_window.index
  310.       @command_index = @itemcommand_window.index
  311.       @itemlist_window.set_item(@command_index)
  312.     end
  313.     # コマンドウィンドウがアクティブの场合: update_itemcommand を呼ぶ
  314.     if @itemcommand_window.active
  315.       update_itemcommand
  316.       return
  317.     end
  318.     # アイテムウィンドウがアクティブの场合: update_itemlist を呼ぶ
  319.     if @itemlist_window.active
  320.       update_itemlist
  321.       return
  322.     end
  323.     # ターゲットウィンドウがアクティブの场合: update_target を呼ぶ
  324.     if @target_window.active
  325.       update_target
  326.       return
  327.     end
  328.   end
  329.   #--------------------------------------------------------------------------
  330.   # ● フレーム更新 (コマンドウィンドウがアクティブの场合)
  331.   #--------------------------------------------------------------------------
  332.   def update_itemcommand
  333.   # B ボタンが押された场合
  334.   if Input.trigger?(Input::B)
  335.   # キャンセル SE を演奏
  336.   $game_system.se_play($data_system.cancel_se)
  337.   # メニュー画面に切り替え
  338.   $scene = Scene_Menu.new(0)
  339.   return
  340.   end
  341.   # C ボタンが押された场合
  342.   if Input.trigger?(Input::C)
  343.   # 选择中のコマンドのアイテムがない场合
  344.   if @itemlist_window.item_number == 0
  345.   # ブザー SE を演奏
  346.   $game_system.se_play($data_system.buzzer_se)
  347.   return
  348.   end
  349.   # 决定 SE を演奏
  350.   $game_system.se_play($data_system.decision_se)
  351.   # アイテムウィンドウをアクティブにする
  352.   @itemcommand_window.active = false
  353.   @itemlist_window.active = true
  354.   @itemlist_window.index = 0
  355.   return
  356.   end
  357.   end
  358.   #--------------------------------------------------------------------------
  359.   # ● フレーム更新 (アイテムウィンドウがアクティブの场合)
  360.   #--------------------------------------------------------------------------
  361.   def update_itemlist
  362.     # B ボタンが押された场合
  363.     if Input.trigger?(Input::B)
  364.       # キャンセル SE を演奏
  365.       $game_system.se_play($data_system.cancel_se)
  366.       # アイテムウィンドウをアクティブにする
  367.       @itemcommand_window.active = true
  368.       @itemlist_window.active = false
  369.       @itemlist_window.index = 0
  370.       @itemcommand_window.index = @command_index
  371.       return
  372.     end
  373.     # C ボタンが押された场合
  374.     if Input.trigger?(Input::C)
  375.       # アイテムウィンドウで现在选择されているデータを取得
  376.       @item = @itemlist_window.item
  377.       # 使用アイテムではない场合
  378.       unless @item.is_a?(RPG::Item)
  379.         # ブザー SE を演奏
  380.         $game_system.se_play($data_system.buzzer_se)
  381.         return
  382.       end
  383.       # 使用できない场合
  384.       unless $game_party.item_can_use?(@item.id)
  385.         # ブザー SE を演奏
  386.         $game_system.se_play($data_system.buzzer_se)
  387.         return
  388.       end
  389.       # 决定 SE を演奏
  390.       $game_system.se_play($data_system.decision_se)
  391.       # 效果范围が味方の场合
  392.       if @item.scope >= 3
  393.         # ターゲットウィンドウをアクティブ化
  394.         @itemlist_window.active = false
  395.         @target_window.x = 304
  396.         @target_window.visible = true
  397.         @target_window.active = true
  398.         # 效果范围 (单体/全体) に应じてカーソル位置を设定
  399.         if @item.scope == 4 || @item.scope == 6
  400.           @target_window.index = -1
  401.         else
  402.           @target_window.index = 0
  403.         end
  404.         # 效果范围が味方以外の场合
  405.       else
  406.         # コモンイベント ID が有效の场合
  407.         if @item.common_event_id > 0
  408.           # コモンイベント呼び出し予约
  409.           $game_temp.common_event_id = @item.common_event_id
  410.           # アイテムの使用时 SE を演奏
  411.           $game_system.se_play(@item.menu_se)
  412.           # 消耗品の场合
  413.             if @item.consumable
  414.               # 使用したアイテムを 1 减らす
  415.               $game_party.lose_item(@item.id, 1)
  416.               # アイテムウィンドウの项目を再描画
  417.               @itemlist_window.draw_item(@itemlist_window.index)
  418.             end
  419.           # マップ画面に切り替え
  420.           $scene = Scene_Map.new
  421.           return
  422.         end
  423.       end
  424.       return
  425.     end
  426.   end
  427.   #--------------------------------------------------------------------------
  428.   # ● フレーム更新 (ターゲットウィンドウがアクティブの场合)
  429.   #--------------------------------------------------------------------------
  430.   def update_target
  431.     # B ボタンが押された场合
  432.     if Input.trigger?(Input::B)
  433.       # キャンセル SE を演奏
  434.       $game_system.se_play($data_system.cancel_se)
  435.       # アイテム切れなどで使用できなくなった场合
  436.       unless $game_party.item_can_use?(@item.id)
  437.         # アイテムウィンドウの内容を再作成
  438.         @itemlist_window.refresh
  439.       end
  440.       # ターゲットウィンドウを消去
  441.       @itemlist_window.active = true
  442.       @target_window.visible = false
  443.       @target_window.active = false
  444.       @itemlist_window.set_item(@command_index)
  445.       return
  446.     end
  447.     # C ボタンが押された场合
  448.     if Input.trigger?(Input::C)
  449.       # アイテムを使い切った场合
  450.       if $game_party.item_number(@item.id) == 0
  451.         # ブザー SE を演奏
  452.         $game_system.se_play($data_system.buzzer_se)
  453.         return
  454.       end
  455.       # ターゲットが全体の场合
  456.       if @target_window.index == -1
  457.         # パーティ全体にアイテムの使用效果を适用
  458.         used = false
  459.         for i in $game_party.actors
  460.           used |= i.item_effect(@item)
  461.         end
  462.       end
  463.       # ターゲットが单体の场合
  464.       if @target_window.index >= 0
  465.         # ターゲットのアクターにアイテムの使用效果を适用
  466.         target = $game_party.actors[@target_window.index]
  467.         used = target.item_effect(@item)
  468.       end
  469.       # アイテムを使った场合
  470.       if used
  471.         # アイテムの使用时 SE を演奏
  472.         $game_system.se_play(@item.menu_se)
  473.         # 消耗品の场合
  474.         if @item.consumable
  475.           # 使用したアイテムを 1 减らす
  476.           $game_party.lose_item(@item.id, 1)
  477.           # アイテムウィンドウの项目を再描画
  478.           @itemlist_window.draw_item(@itemlist_window.index)
  479.           @itemlist_window.set_item(@command_index)
  480.         end
  481.         # ターゲットウィンドウの内容を再作成
  482.         @target_window.refresh
  483.         # 全灭の场合
  484.         if $game_party.all_dead?
  485.           # ゲームオーバー画面に切り替え
  486.           $scene = Scene_Gameover.new
  487.           return
  488.         end
  489.         # コモンイベント ID が有效の场合
  490.         if @item.common_event_id > 0
  491.           # コモンイベント呼び出し予约
  492.           $game_temp.common_event_id = @item.common_event_id
  493.           # マップ画面に切り替え
  494.           $scene = Scene_Map.new
  495.           return
  496.         end
  497.       end
  498.       # アイテムを使わなかった场合
  499.       unless used
  500.         # ブザー SE を演奏
  501.         $game_system.se_play($data_system.buzzer_se)
  502.       end
  503.     return
  504.     end
  505.   end
  506. end
  507.  
  508.  
  509. #==============================================================================
  510. # 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息
  511. #==============================================================================

作者: PCPC_02    时间: 2015-7-17 20:42
没有人知道吗?
作者: piaoy    时间: 2015-7-18 20:44
确定脚本没有错吗。。。
如果没有错的话在124行的set_item方法里进行修改
比如1楼写的那个就表示
物品:平时/不可使用的
精灵等:菜单中
特殊物品:武器
作者: PCPC_02    时间: 2015-7-18 21:30
抱歉我不会脚本,如果我想设置成:回复物品(平时)、战斗物品(战斗中)、携带物品(武器)、特殊物品(防具)、精灵物品(防具),应该怎么修改呢?谢谢~
作者: piaoy    时间: 2015-7-19 17:04
PCPC_02 发表于 2015-7-18 21:30
抱歉我不会脚本,如果我想设置成:回复物品(平时)、战斗物品(战斗中)、携带物品(武器)、特殊物品(防 ...

特殊物品和精灵物品怎么都是防具呢?
可以对上衣、下衣神马的进行分类的。
作者: PCPC_02    时间: 2015-7-19 19:40
piaoy 发表于 2015-7-19 17:04
特殊物品和精灵物品怎么都是防具呢?
可以对上衣、下衣神马的进行分类的。 ...

那么请问脚本应该怎么修改呢?谢谢~
作者: piaoy    时间: 2015-7-20 08:56
PCPC_02 发表于 2015-7-19 19:40
那么请问脚本应该怎么修改呢?谢谢~

没看懂你的要求哦
怎么有两类物品("特殊物品","精灵物品")都是防具呢?
这样的话这两类物品不就一样了吗?

作者: PCPC_02    时间: 2015-7-20 16:55
piaoy 发表于 2015-7-20 08:56
没看懂你的要求哦
怎么有两类物品("特殊物品","精灵物品")都是防具呢?
这样的话这两类物品不就一样了 ...

可以分出头部防具和身体防具,只要不同就可以了,请问在这个脚本的124行应该怎么修改呢?谢谢~
作者: piaoy    时间: 2015-7-20 21:08
试试看行不行?
这段脚本似乎要和其他一些脚本一起才可以运行。我猜测你没有把其他的脚本发上来所以没有修改。
  1. #==============================================================================
  2. # 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息
  3. #==============================================================================


  4. #==============================================================================
  5. # ■ Harts_Window_ItemTitle
  6. #------------------------------------------------------------------------------
  7. #  アイテム画面で、タイトルを表示するウィンドウ。
  8. #==============================================================================

  9. class Harts_Window_ItemTitle < Window_Base
  10.   #--------------------------------------------------------------------------
  11.   # ● オブジェクト初期化
  12.   #--------------------------------------------------------------------------
  13.   def initialize
  14.     super(0, 0, 160, 58)
  15.     self.contents = Bitmap.new(width - 32, height - 32)
  16.     self.contents.clear
  17.     self.contents.font.color = normal_color
  18.     self.contents.draw_text(4, 0, 120, 32, $data_system.words.item, 1)
  19.   end
  20. end

  21. #==============================================================================
  22. # ■ Harts_Window_ItemCommand
  23. #------------------------------------------------------------------------------
  24. #  アイテムの种别选择を行うウィンドウです。
  25. #==============================================================================

  26. class Harts_Window_ItemCommand < Window_Selectable
  27.   #--------------------------------------------------------------------------
  28.   # ● オブジェクト初期化
  29.   #--------------------------------------------------------------------------
  30.   def initialize
  31.     super(0, 58, 160, 256)
  32.     self.contents = Bitmap.new(width - 32, height - 32)
  33.     @item_max = 5
  34.     @commands = ["回复物品", "战斗物品", "携带物品","特殊物品","精灵物品"]
  35.     refresh
  36.     self.index = 0
  37.   end
  38.   #--------------------------------------------------------------------------
  39.   # ● リフレッシュ
  40.   #--------------------------------------------------------------------------
  41.   def refresh
  42.     self.contents.clear
  43.     for i in 0...@item_max
  44.     draw_item(i, normal_color)
  45.     end
  46.   end
  47.   #--------------------------------------------------------------------------
  48.   # ● 项目の描画
  49.   # index : 项目番号
  50.   # color : 文字色
  51.   #--------------------------------------------------------------------------
  52.   def draw_item(index, color)
  53.     self.contents.font.color = color
  54.     y = index * 32
  55.     self.contents.draw_text(4, y, 128, 32, @commands[index])
  56.   end
  57.   #--------------------------------------------------------------------------
  58.   # ● ヘルプテキスト更新
  59.   #--------------------------------------------------------------------------
  60.   def update_help
  61.     case self.index
  62.     when 0
  63.       @text = @commands[0]
  64.     when 1
  65.       @text = @commands[1]
  66.     when 2
  67.       @text = @commands[2]
  68.     when 3
  69.       @text = @commands[3]
  70.     when 4
  71.       @text = @commands[4]
  72.     when 5
  73.       @text = @commands[5]
  74.     when 6
  75.       @text = @commands[6]
  76.     #when 7
  77.       #@text = @commands[7]
  78.     end
  79.     @help_window.set_text(@text)
  80.   end
  81. end

  82. #==============================================================================
  83. # ■ Window_Item
  84. #------------------------------------------------------------------------------
  85. #  アイテム画面で、所持アイテムの一览を表示するウィンドウです。
  86. #==============================================================================

  87. class Harts_Window_ItemList < Window_Selectable
  88.   #--------------------------------------------------------------------------
  89.   # ● オブジェクト初期化
  90.   #--------------------------------------------------------------------------
  91.   def initialize
  92.     super(160, 0, 480, 416)
  93.     refresh
  94.     self.index = 0
  95.   end
  96.   #--------------------------------------------------------------------------
  97.   # ● アイテムの取得
  98.   #--------------------------------------------------------------------------
  99.   def item
  100.     return @data[self.index]
  101.   end
  102.   #--------------------------------------------------------------------------
  103.   # ● リフレッシュ
  104.   #--------------------------------------------------------------------------
  105.   def refresh
  106.     if self.contents != nil
  107.       self.contents.dispose
  108.       self.contents = nil
  109.     end
  110.     @data = []
  111.   end
  112.   #--------------------------------------------------------------------------
  113.   # ● アイテム一览设定
  114.   # command : 选择中のコマンド
  115.   #--------------------------------------------------------------------------
  116.   #0=平时/1=战斗时/2=菜单时/3=不可使用时
  117.   def set_item(command)
  118.     refresh
  119.     case command
  120.     when 0
  121.       for i in 1...$data_items.size
  122.         if $data_items[i].occasion == 0 and $game_party.item_number(i) > 0
  123.           @data.push($data_items[i])
  124.         end
  125.       end
  126.     when 1
  127.       for i in 1...$data_items.size
  128.         if ($data_items[i].occasion == 1 and $game_party.item_number(i) > 0)
  129.           @data.push($data_items[i])
  130.         end
  131.       end
  132.     when 2
  133.       for i in 1...$data_weapons.size
  134.         if $game_party.weapon_number(i) > 0
  135.           @data.push($data_weapons[i])
  136.         end
  137.       end
  138.     when 3
  139.       for i in 1...$data_armors.size
  140.         if $data_armors[i].kind == 1 and $game_party.armor_number(i) > 0
  141.           @data.push($data_armors[i])
  142.         end
  143.       end
  144.     when 4
  145.       for i in 1...$data_armors.size
  146.         if $data_armors[i].kind != 1 and $game_party.armor_number(i) > 0
  147.           @data.push($data_armors[i])
  148.         end
  149.       end
  150.     when 5
  151.       for i in 1...$data_armors.size
  152.         if $data_armors[i].kind == 2 and $game_party.armor_number(i) > 0
  153.           @data.push($data_armors[i])
  154.         end
  155.         if $data_armors[i].kind == 3 and $game_party.armor_number(i) > 0
  156.           @data.push($data_armors[i])
  157.         end
  158.       end
  159.     when 6
  160.       for i in 1...$data_items.size
  161.         if ($data_items[i].occasion == 1 and $game_party.item_number(i) > 0)
  162.           @data.push($data_items[i])
  163.         end
  164.       end
  165.     #when 7
  166.     #  for i in 1...$data_items.size
  167.     #    if $data_items[i].occasion == 3 and $game_party.item_number(i) > 0
  168.     #      @data.push($data_items[i])
  169.     #    end
  170.     #  end
  171.     end
  172.     # 项目数が 0 でなければビットマップを作成し、全项目を描画
  173.     @item_max = @data.size
  174.     if @item_max > 0
  175.       self.contents = Bitmap.new(width - 32, row_max * 32)
  176.       self.contents.clear
  177.       for i in 0...@item_max
  178.         draw_item(i)
  179.       end
  180.     end
  181.   end
  182.   #--------------------------------------------------------------------------
  183.   # ● 种类别アイテム数の取得
  184.   #--------------------------------------------------------------------------
  185.   def item_number
  186.     return @item_max
  187.   end
  188.   #--------------------------------------------------------------------------
  189.   # ● 项目の描画
  190.   # index : 项目番号
  191.   #--------------------------------------------------------------------------
  192.   def draw_item(index)
  193.     item = @data[index]
  194.     case item
  195.     when RPG::Item
  196.       number = $game_party.item_number(item.id)
  197.     when RPG::Weapon
  198.       number = $game_party.weapon_number(item.id)
  199.     when RPG::Armor
  200.       number = $game_party.armor_number(item.id)
  201.     end
  202.     if item.is_a?(RPG::Item) and
  203.       $game_party.item_can_use?(item.id)
  204.       self.contents.font.color = normal_color
  205.     else
  206.       self.contents.font.color = disabled_color
  207.     end
  208.     x = 4
  209.     y = index * 32
  210.     bitmap = RPG::Cache.icon(item.icon_name)
  211.     opacity = self.contents.font.color == normal_color ? 255 : 128
  212.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  213.     self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  214.     self.contents.draw_text(x + 400, y, 16, 32, ":", 1)
  215.     self.contents.draw_text(x + 416, y, 24, 32, number.to_s, 2)
  216.   end
  217.   #--------------------------------------------------------------------------
  218.   # ● ヘルプテキスト更新
  219.   #--------------------------------------------------------------------------
  220.   def update_help
  221.     @help_window.set_text(self.item == nil ? "" : self.item.description)
  222.   end
  223. end

  224. #==============================================================================
  225. # ■ Harts_Scene_Item
  226. #------------------------------------------------------------------------------
  227. #  アイテム画面の处理を行うクラスです。再定义
  228. #==============================================================================

  229. class Scene_Item
  230.   #--------------------------------------------------------------------------
  231.   # ● メイン处理
  232.   #--------------------------------------------------------------------------
  233.   def main
  234.     # タイトルウィンドウを作成
  235.     @itemtitle_window = Harts_Window_ItemTitle.new
  236.     #コマンドウィンドウを作成
  237.     @itemcommand_window = Harts_Window_ItemCommand.new
  238.     @command_index = @itemcommand_window.index
  239.     #アイテムウィンドウを作成

  240.     @itemlist_window = Harts_Window_ItemList.new
  241.     @itemlist_window.active = false
  242.     #ヘルプウィンドウを作成
  243.     @help_window = Window_Help.new
  244.     @help_window.x = 0
  245.     @help_window.y = 416
  246.     # ヘルプウィンドウを关连付け
  247.     @itemcommand_window.help_window = @help_window
  248.     @itemlist_window.help_window = @help_window
  249.     # ターゲットウィンドウを作成 (不可视?非アクティブに设定)
  250.     @target_window = Window_Target.new
  251.     @target_window.visible = false
  252.     @target_window.active = false
  253.     @equip_window = Window_Equip.new
  254.     # アイテムウィンドウ内容表示
  255.     @itemlist_window.set_item(@command_index)
  256.     @sprite = Sprite.new
  257.     @sprite.bitmap = Bitmap.new("Graphics/Pictures/图片框")
  258.     @sprite.x = 0
  259.     @sprite.y = 315
  260.     # トランジション实行
  261.     Graphics.transition
  262.     # メインループ
  263.     loop do
  264.       # ゲーム画面を更新
  265.       Graphics.update
  266.       # 入力情报を更新
  267.       Input.update
  268.       # フレーム更新
  269.       update
  270.       # 画面が切り替わったらループを中断
  271.       if $scene != self
  272.         break
  273.       end
  274.     end
  275.     # トランジション准备
  276.     Graphics.freeze
  277.     # ウィンドウを解放
  278.     @sprite.bitmap.dispose
  279.     @sprite.dispose
  280.     @itemtitle_window.dispose
  281.     @itemcommand_window.dispose
  282.     @itemlist_window.dispose
  283.     @help_window.dispose
  284.     @target_window.dispose
  285.     @equip_window.dispose
  286.   end
  287.   #--------------------------------------------------------------------------
  288.   # ● フレーム更新
  289.   #--------------------------------------------------------------------------
  290.   def update
  291.     # ウィンドウを更新
  292.     @itemtitle_window.update
  293.     @itemcommand_window.update
  294.     @itemlist_window.update
  295.     @help_window.update
  296.     @target_window.update
  297.     @equip_window.refresh
  298.     @equip_window.set_item(@itemlist_window.item)
  299.     if @command_index != @itemcommand_window.index
  300.       @command_index = @itemcommand_window.index
  301.       @itemlist_window.set_item(@command_index)
  302.     end
  303.     # コマンドウィンドウがアクティブの场合: update_itemcommand を呼ぶ
  304.     if @itemcommand_window.active
  305.       update_itemcommand
  306.       return
  307.     end
  308.     # アイテムウィンドウがアクティブの场合: update_itemlist を呼ぶ
  309.     if @itemlist_window.active
  310.       update_itemlist
  311.       return
  312.     end
  313.     # ターゲットウィンドウがアクティブの场合: update_target を呼ぶ
  314.     if @target_window.active
  315.       update_target
  316.       return
  317.     end
  318.   end
  319.   #--------------------------------------------------------------------------
  320.   # ● フレーム更新 (コマンドウィンドウがアクティブの场合)
  321.   #--------------------------------------------------------------------------
  322.   def update_itemcommand
  323.   # B ボタンが押された场合
  324.   if Input.trigger?(Input::B)
  325.   # キャンセル SE を演奏
  326.   $game_system.se_play($data_system.cancel_se)
  327.   # メニュー画面に切り替え
  328.   $scene = Scene_Menu.new(0)
  329.   return
  330.   end
  331.   # C ボタンが押された场合
  332.   if Input.trigger?(Input::C)
  333.   # 选择中のコマンドのアイテムがない场合
  334.   if @itemlist_window.item_number == 0
  335.   # ブザー SE を演奏
  336.   $game_system.se_play($data_system.buzzer_se)
  337.   return
  338.   end
  339.   # 决定 SE を演奏
  340.   $game_system.se_play($data_system.decision_se)
  341.   # アイテムウィンドウをアクティブにする
  342.   @itemcommand_window.active = false
  343.   @itemlist_window.active = true
  344.   @itemlist_window.index = 0
  345.   return
  346.   end
  347.   end
  348.   #--------------------------------------------------------------------------
  349.   # ● フレーム更新 (アイテムウィンドウがアクティブの场合)
  350.   #--------------------------------------------------------------------------
  351.   def update_itemlist
  352.     # B ボタンが押された场合
  353.     if Input.trigger?(Input::B)
  354.       # キャンセル SE を演奏
  355.       $game_system.se_play($data_system.cancel_se)
  356.       # アイテムウィンドウをアクティブにする
  357.       @itemcommand_window.active = true
  358.       @itemlist_window.active = false
  359.       @itemlist_window.index = 0
  360.       @itemcommand_window.index = @command_index
  361.       return
  362.     end
  363.     # C ボタンが押された场合
  364.     if Input.trigger?(Input::C)
  365.       # アイテムウィンドウで现在选择されているデータを取得
  366.       @item = @itemlist_window.item
  367.       # 使用アイテムではない场合
  368.       unless @item.is_a?(RPG::Item)
  369.         # ブザー SE を演奏
  370.         $game_system.se_play($data_system.buzzer_se)
  371.         return
  372.       end
  373.       # 使用できない场合
  374.       unless $game_party.item_can_use?(@item.id)
  375.         # ブザー SE を演奏
  376.         $game_system.se_play($data_system.buzzer_se)
  377.         return
  378.       end
  379.       # 决定 SE を演奏
  380.       $game_system.se_play($data_system.decision_se)
  381.       # 效果范围が味方の场合
  382.       if @item.scope >= 3
  383.         # ターゲットウィンドウをアクティブ化
  384.         @itemlist_window.active = false
  385.         @target_window.x = 304
  386.         @target_window.visible = true
  387.         @target_window.active = true
  388.         # 效果范围 (单体/全体) に应じてカーソル位置を设定
  389.         if @item.scope == 4 || @item.scope == 6
  390.           @target_window.index = -1
  391.         else
  392.           @target_window.index = 0
  393.         end
  394.         # 效果范围が味方以外の场合
  395.       else
  396.         # コモンイベント ID が有效の场合
  397.         if @item.common_event_id > 0
  398.           # コモンイベント呼び出し予约
  399.           $game_temp.common_event_id = @item.common_event_id
  400.           # アイテムの使用时 SE を演奏
  401.           $game_system.se_play(@item.menu_se)
  402.           # 消耗品の场合
  403.             if @item.consumable
  404.               # 使用したアイテムを 1 减らす
  405.               $game_party.lose_item(@item.id, 1)
  406.               # アイテムウィンドウの项目を再描画
  407.               @itemlist_window.draw_item(@itemlist_window.index)
  408.             end
  409.           # マップ画面に切り替え
  410.           $scene = Scene_Map.new
  411.           return
  412.         end
  413.       end
  414.       return
  415.     end
  416.   end
  417.   #--------------------------------------------------------------------------
  418.   # ● フレーム更新 (ターゲットウィンドウがアクティブの场合)
  419.   #--------------------------------------------------------------------------
  420.   def update_target
  421.     # B ボタンが押された场合
  422.     if Input.trigger?(Input::B)
  423.       # キャンセル SE を演奏
  424.       $game_system.se_play($data_system.cancel_se)
  425.       # アイテム切れなどで使用できなくなった场合
  426.       unless $game_party.item_can_use?(@item.id)
  427.         # アイテムウィンドウの内容を再作成
  428.         @itemlist_window.refresh
  429.       end
  430.       # ターゲットウィンドウを消去
  431.       @itemlist_window.active = true
  432.       @target_window.visible = false
  433.       @target_window.active = false
  434.       @itemlist_window.set_item(@command_index)
  435.       return
  436.     end
  437.     # C ボタンが押された场合
  438.     if Input.trigger?(Input::C)
  439.       # アイテムを使い切った场合
  440.       if $game_party.item_number(@item.id) == 0
  441.         # ブザー SE を演奏
  442.         $game_system.se_play($data_system.buzzer_se)
  443.         return
  444.       end
  445.       # ターゲットが全体の场合
  446.       if @target_window.index == -1
  447.         # パーティ全体にアイテムの使用效果を适用
  448.         used = false
  449.         for i in $game_party.actors
  450.           used |= i.item_effect(@item)
  451.         end
  452.       end
  453.       # ターゲットが单体の场合
  454.       if @target_window.index >= 0
  455.         # ターゲットのアクターにアイテムの使用效果を适用
  456.         target = $game_party.actors[@target_window.index]
  457.         used = target.item_effect(@item)
  458.       end
  459.       # アイテムを使った场合
  460.       if used
  461.         # アイテムの使用时 SE を演奏
  462.         $game_system.se_play(@item.menu_se)
  463.         # 消耗品の场合
  464.         if @item.consumable
  465.           # 使用したアイテムを 1 减らす
  466.           $game_party.lose_item(@item.id, 1)
  467.           # アイテムウィンドウの项目を再描画
  468.           @itemlist_window.draw_item(@itemlist_window.index)
  469.           @itemlist_window.set_item(@command_index)
  470.         end
  471.         # ターゲットウィンドウの内容を再作成
  472.         @target_window.refresh
  473.         # 全灭の场合
  474.         if $game_party.all_dead?
  475.           # ゲームオーバー画面に切り替え
  476.           $scene = Scene_Gameover.new
  477.           return
  478.         end
  479.         # コモンイベント ID が有效の场合
  480.         if @item.common_event_id > 0
  481.           # コモンイベント呼び出し予约
  482.           $game_temp.common_event_id = @item.common_event_id
  483.           # マップ画面に切り替え
  484.           $scene = Scene_Map.new
  485.           return
  486.         end
  487.       end
  488.       # アイテムを使わなかった场合
  489.       unless used
  490.         # ブザー SE を演奏
  491.         $game_system.se_play($data_system.buzzer_se)
  492.       end
  493.     return
  494.     end
  495.   end
  496. end


  497. #==============================================================================
  498. # 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息
  499. #==============================================================================
复制代码

作者: PCPC_02    时间: 2015-7-21 09:12
piaoy 发表于 2015-7-20 21:08
试试看行不行?
这段脚本似乎要和其他一些脚本一起才可以运行。我猜测你没有把其他的脚本发上来所以没有修 ...

能用能用!太棒了,非常感谢~~




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