查看: 1983|回复: 9

[已经解决] 请问这个物品分类脚本怎么用?

[复制链接]
梦石
0
星屑
50
在线时间
270 小时
注册时间
2013-7-19
回帖
94
发表于 2015-7-17 13:03:24 | 显示全部楼层 |阅读模式

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

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

×
请问用这个脚本数据库里设置的物品应该怎么分类呢?

[pre lang="ruby"]#==============================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
#==============================================================================


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

class Harts_Window_ItemTitle < Window_Base
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 160, 58)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.contents.clear
    self.contents.font.color = normal_color
    self.contents.draw_text(4, 0, 120, 32, $data_system.words.item, 1)
  end
end

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

class Harts_Window_ItemCommand < Window_Selectable
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(0, 58, 160, 256)
    self.contents = Bitmap.new(width - 32, height - 32)
    @item_max = 3
    @commands = ["物品", "精灵等", "特殊物品"]
    refresh
    self.index = 0
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    for i in 0...@item_max
    draw_item(i, normal_color)
    end
  end
  #--------------------------------------------------------------------------
  # ● 项目の描画
  # index : 项目番号
  # color : 文字色
  #--------------------------------------------------------------------------
  def draw_item(index, color)
    self.contents.font.color = color
    y = index * 32
    self.contents.draw_text(4, y, 128, 32, @commands[index])
  end
  #--------------------------------------------------------------------------
  # ● ヘルプテキスト更新
  #--------------------------------------------------------------------------
  def update_help
    case self.index
    when 0
      @text = @commands[0]
    when 1
      @text = @commands[1]
    when 2
      @text = @commands[2]
    when 3
      @text = @commands[3]
    when 4
      @text = @commands[4]
    when 5
      @text = @commands[5]
    when 6
      @text = @commands[6]
    #when 7
      #@text = @commands[7]
    end
    @help_window.set_text(@text)
  end
end

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

class Harts_Window_ItemList < Window_Selectable
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(160, 0, 480, 416)
    refresh
    self.index = 0
  end
  #--------------------------------------------------------------------------
  # ● アイテムの取得
  #--------------------------------------------------------------------------
  def item
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
  end
  #--------------------------------------------------------------------------
  # ● アイテム一览设定
  # command : 选择中のコマンド
  #--------------------------------------------------------------------------
  #0=平时/1=战斗时/2=菜单时/3=不可使用时
  def set_item(command)
    refresh
    case command
    when 0
      for i in 1...$data_items.size
        if ($data_items.occasion == 0 or $data_items.occasion == 3) and $game_party.item_number(i) > 0
          @data.push($data_items)
        end
      end
    when 1
      for i in 1...$data_items.size
        if ($data_items.occasion == 2 and $game_party.item_number(i) > 0)
          @data.push($data_items)
        end
      end
    when 2
      for i in 1...$data_weapons.size
        if $game_party.weapon_number(i) > 0
          @data.push($data_weapons)
        end
      end
    when 3
      for i in 1...$data_armors.size
        if $data_armors.kind == 0 and $game_party.armor_number(i) > 0
          @data.push($data_armors)
        end
      end
    when 4
      for i in 1...$data_armors.size
        if $data_armors.kind == 1 and $game_party.armor_number(i) > 0
          @data.push($data_armors)
        end
      end
    when 5
      for i in 1...$data_armors.size
        if $data_armors.kind == 2 and $game_party.armor_number(i) > 0
          @data.push($data_armors)
        end
        if $data_armors.kind == 3 and $game_party.armor_number(i) > 0
          @data.push($data_armors)
        end
      end
    when 6
      for i in 1...$data_items.size
        if ($data_items.occasion == 1 and $game_party.item_number(i) > 0)
          @data.push($data_items)
        end
      end
    #when 7
    #  for i in 1...$data_items.size
    #    if $data_items.occasion == 3 and $game_party.item_number(i) > 0
    #      @data.push($data_items)
    #    end
    #  end
    end
    # 项目数が 0 でなければビットマップを作成し、全项目を描画
    @item_max = @data.size
    if @item_max > 0
      self.contents = Bitmap.new(width - 32, row_max * 32)
      self.contents.clear
      for i in 0...@item_max
        draw_item(i)
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 种类别アイテム数の取得
  #--------------------------------------------------------------------------
  def item_number
    return @item_max
  end
  #--------------------------------------------------------------------------
  # ● 项目の描画
  # index : 项目番号
  #--------------------------------------------------------------------------
  def draw_item(index)
    item = @data[index]
    case item
    when RPG::Item
      number = $game_party.item_number(item.id)
    when RPG::Weapon
      number = $game_party.weapon_number(item.id)
    when RPG::Armor
      number = $game_party.armor_number(item.id)
    end
    if item.is_a?(RPG::Item) and
      $game_party.item_can_use?(item.id)
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    x = 4
    y = index * 32
    bitmap = RPG::Cache.icon(item.icon_name)
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
    self.contents.draw_text(x + 400, y, 16, 32, ":", 1)
    self.contents.draw_text(x + 416, y, 24, 32, number.to_s, 2)
  end
  #--------------------------------------------------------------------------
  # ● ヘルプテキスト更新
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text(self.item == nil ? "" : self.item.description)
  end
end

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

class Scene_Item
  #--------------------------------------------------------------------------
  # ● メイン处理
  #--------------------------------------------------------------------------
  def main
    # タイトルウィンドウを作成
    @itemtitle_window = Harts_Window_ItemTitle.new
    #コマンドウィンドウを作成
    @itemcommand_window = Harts_Window_ItemCommand.new
    @command_index = @itemcommand_window.index
    #アイテムウィンドウを作成
   
    @itemlist_window = Harts_Window_ItemList.new
    @itemlist_window.active = false
    #ヘルプウィンドウを作成
    @help_window = Window_Help.new
    @help_window.x = 0
    @help_window.y = 416
    # ヘルプウィンドウを关连付け
    @itemcommand_window.help_window = @help_window
    @itemlist_window.help_window = @help_window
    # ターゲットウィンドウを作成 (不可视?非アクティブに设定)
    @target_window = Window_Target.new
    @target_window.visible = false
    @target_window.active = false
    @equip_window = Window_Equip.new
    # アイテムウィンドウ内容表示
    @itemlist_window.set_item(@command_index)
    @sprite = Sprite.new
    @sprite.bitmap = Bitmap.new("Graphics/Pictures/图片框")
    @sprite.x = 0
    @sprite.y = 315
    # トランジション实行
    Graphics.transition
    # メインループ
    loop do
      # ゲーム画面を更新
      Graphics.update
      # 入力情报を更新
      Input.update
      # フレーム更新
      update
      # 画面が切り替わったらループを中断
      if $scene != self
        break
      end
    end
    # トランジション准备
    Graphics.freeze
    # ウィンドウを解放
    @sprite.bitmap.dispose
    @sprite.dispose
    @itemtitle_window.dispose
    @itemcommand_window.dispose
    @itemlist_window.dispose
    @help_window.dispose
    @target_window.dispose
    @equip_window.dispose
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    # ウィンドウを更新
    @itemtitle_window.update
    @itemcommand_window.update
    @itemlist_window.update
    @help_window.update
    @target_window.update
    @equip_window.refresh
    @equip_window.set_item(@itemlist_window.item)
    if @command_index != @itemcommand_window.index
      @command_index = @itemcommand_window.index
      @itemlist_window.set_item(@command_index)
    end
    # コマンドウィンドウがアクティブの场合: update_itemcommand を呼ぶ
    if @itemcommand_window.active
      update_itemcommand
      return
    end
    # アイテムウィンドウがアクティブの场合: update_itemlist を呼ぶ
    if @itemlist_window.active
      update_itemlist
      return
    end
    # ターゲットウィンドウがアクティブの场合: update_target を呼ぶ
    if @target_window.active
      update_target
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (コマンドウィンドウがアクティブの场合)
  #--------------------------------------------------------------------------
  def update_itemcommand
  # B ボタンが押された场合
  if Input.trigger?(Input::B)
  # キャンセル SE を演奏
  $game_system.se_play($data_system.cancel_se)
  # メニュー画面に切り替え
  $scene = Scene_Menu.new(0)
  return
  end
  # C ボタンが押された场合
  if Input.trigger?(Input::C)
  # 选择中のコマンドのアイテムがない场合
  if @itemlist_window.item_number == 0
  # ブザー SE を演奏
  $game_system.se_play($data_system.buzzer_se)
  return
  end
  # 决定 SE を演奏
  $game_system.se_play($data_system.decision_se)
  # アイテムウィンドウをアクティブにする
  @itemcommand_window.active = false
  @itemlist_window.active = true
  @itemlist_window.index = 0
  return
  end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (アイテムウィンドウがアクティブの场合)
  #--------------------------------------------------------------------------
  def update_itemlist
    # B ボタンが押された场合
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      $game_system.se_play($data_system.cancel_se)
      # アイテムウィンドウをアクティブにする
      @itemcommand_window.active = true
      @itemlist_window.active = false
      @itemlist_window.index = 0
      @itemcommand_window.index = @command_index
      return
    end
    # C ボタンが押された场合
    if Input.trigger?(Input::C)
      # アイテムウィンドウで现在选择されているデータを取得
      @item = @itemlist_window.item
      # 使用アイテムではない场合
      unless @item.is_a?(RPG::Item)
        # ブザー SE を演奏
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # 使用できない场合
      unless $game_party.item_can_use?(@item.id)
        # ブザー SE を演奏
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # 决定 SE を演奏
      $game_system.se_play($data_system.decision_se)
      # 效果范围が味方の场合
      if @item.scope >= 3
        # ターゲットウィンドウをアクティブ化
        @itemlist_window.active = false
        @target_window.x = 304
        @target_window.visible = true
        @target_window.active = true
        # 效果范围 (单体/全体) に应じてカーソル位置を设定
        if @item.scope == 4 || @item.scope == 6
          @target_window.index = -1
        else
          @target_window.index = 0
        end
        # 效果范围が味方以外の场合
      else
        # コモンイベント ID が有效の场合
        if @item.common_event_id > 0
          # コモンイベント呼び出し予约
          $game_temp.common_event_id = @item.common_event_id
          # アイテムの使用时 SE を演奏
          $game_system.se_play(@item.menu_se)
          # 消耗品の场合
            if @item.consumable
              # 使用したアイテムを 1 减らす
              $game_party.lose_item(@item.id, 1)
              # アイテムウィンドウの项目を再描画
              @itemlist_window.draw_item(@itemlist_window.index)
            end
          # マップ画面に切り替え
          $scene = Scene_Map.new
          return
        end
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (ターゲットウィンドウがアクティブの场合)
  #--------------------------------------------------------------------------
  def update_target
    # B ボタンが押された场合
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      $game_system.se_play($data_system.cancel_se)
      # アイテム切れなどで使用できなくなった场合
      unless $game_party.item_can_use?(@item.id)
        # アイテムウィンドウの内容を再作成
        @itemlist_window.refresh
      end
      # ターゲットウィンドウを消去
      @itemlist_window.active = true
      @target_window.visible = false
      @target_window.active = false
      @itemlist_window.set_item(@command_index)
      return
    end
    # C ボタンが押された场合
    if Input.trigger?(Input::C)
      # アイテムを使い切った场合
      if $game_party.item_number(@item.id) == 0
        # ブザー SE を演奏
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # ターゲットが全体の场合
      if @target_window.index == -1
        # パーティ全体にアイテムの使用效果を适用
        used = false
        for i in $game_party.actors
          used |= i.item_effect(@item)
        end
      end
      # ターゲットが单体の场合
      if @target_window.index >= 0
        # ターゲットのアクターにアイテムの使用效果を适用
        target = $game_party.actors[@target_window.index]
        used = target.item_effect(@item)
      end
      # アイテムを使った场合
      if used
        # アイテムの使用时 SE を演奏
        $game_system.se_play(@item.menu_se)
        # 消耗品の场合
        if @item.consumable
          # 使用したアイテムを 1 减らす
          $game_party.lose_item(@item.id, 1)
          # アイテムウィンドウの项目を再描画
          @itemlist_window.draw_item(@itemlist_window.index)
          @itemlist_window.set_item(@command_index)
        end
        # ターゲットウィンドウの内容を再作成
        @target_window.refresh
        # 全灭の场合
        if $game_party.all_dead?
          # ゲームオーバー画面に切り替え
          $scene = Scene_Gameover.new
          return
        end
        # コモンイベント ID が有效の场合
        if @item.common_event_id > 0
          # コモンイベント呼び出し予约
          $game_temp.common_event_id = @item.common_event_id
          # マップ画面に切り替え
          $scene = Scene_Map.new
          return
        end
      end
      # アイテムを使わなかった场合
      unless used
        # ブザー SE を演奏
        $game_system.se_play($data_system.buzzer_se)
      end
    return
    end
  end
end


#==============================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
#==============================================================================[/pre]
梦石
0
星屑
50
在线时间
270 小时
注册时间
2013-7-19
回帖
94
 楼主| 发表于 2015-7-17 20:42:49 | 显示全部楼层
没有人知道吗?
回复

使用道具 举报

咩

梦石
0
星屑
1640
在线时间
381 小时
注册时间
2010-10-9
回帖
286

开拓者

发表于 2015-7-18 20:44:32 | 显示全部楼层
确定脚本没有错吗。。。
如果没有错的话在124行的set_item方法里进行修改
比如1楼写的那个就表示
物品:平时/不可使用的
精灵等:菜单中
特殊物品:武器
回复

使用道具 举报

梦石
0
星屑
50
在线时间
270 小时
注册时间
2013-7-19
回帖
94
 楼主| 发表于 2015-7-18 21:30:35 | 显示全部楼层
抱歉我不会脚本,如果我想设置成:回复物品(平时)、战斗物品(战斗中)、携带物品(武器)、特殊物品(防具)、精灵物品(防具),应该怎么修改呢?谢谢~
回复

使用道具 举报

咩

梦石
0
星屑
1640
在线时间
381 小时
注册时间
2010-10-9
回帖
286

开拓者

发表于 2015-7-19 17:04:57 | 显示全部楼层
PCPC_02 发表于 2015-7-18 21:30
抱歉我不会脚本,如果我想设置成:回复物品(平时)、战斗物品(战斗中)、携带物品(武器)、特殊物品(防 ...

特殊物品和精灵物品怎么都是防具呢?
可以对上衣、下衣神马的进行分类的。
回复

使用道具 举报

梦石
0
星屑
50
在线时间
270 小时
注册时间
2013-7-19
回帖
94
 楼主| 发表于 2015-7-19 19:40:57 | 显示全部楼层
piaoy 发表于 2015-7-19 17:04
特殊物品和精灵物品怎么都是防具呢?
可以对上衣、下衣神马的进行分类的。 ...

那么请问脚本应该怎么修改呢?谢谢~
回复

使用道具 举报

咩

梦石
0
星屑
1640
在线时间
381 小时
注册时间
2010-10-9
回帖
286

开拓者

发表于 2015-7-20 08:56:01 | 显示全部楼层
PCPC_02 发表于 2015-7-19 19:40
那么请问脚本应该怎么修改呢?谢谢~

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

使用道具 举报

梦石
0
星屑
50
在线时间
270 小时
注册时间
2013-7-19
回帖
94
 楼主| 发表于 2015-7-20 16:55:37 | 显示全部楼层
piaoy 发表于 2015-7-20 08:56
没看懂你的要求哦
怎么有两类物品("特殊物品","精灵物品")都是防具呢?
这样的话这两类物品不就一样了 ...

可以分出头部防具和身体防具,只要不同就可以了,请问在这个脚本的124行应该怎么修改呢?谢谢~
回复

使用道具 举报

咩

梦石
0
星屑
1640
在线时间
381 小时
注册时间
2010-10-9
回帖
286

开拓者

发表于 2015-7-20 21:08:27 | 显示全部楼层
试试看行不行?
这段脚本似乎要和其他一些脚本一起才可以运行。我猜测你没有把其他的脚本发上来所以没有修改。
  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. #==============================================================================
复制代码

评分

参与人数 2星屑 +190 收起 理由
RyanBern + 150 认可答案
PCPC_02 + 40 太感谢了~

查看全部评分

回复

使用道具 举报

梦石
0
星屑
50
在线时间
270 小时
注册时间
2013-7-19
回帖
94
 楼主| 发表于 2015-7-21 09:12:12 | 显示全部楼层
piaoy 发表于 2015-7-20 21:08
试试看行不行?
这段脚本似乎要和其他一些脚本一起才可以运行。我猜测你没有把其他的脚本发上来所以没有修 ...

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

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部