アイテムを装備

フォーラムルール
素材の利用規約を決めたいけど、どんなことを書けばいいのか分からない場合は、
素材のテンプレートをご利用下さい。
TOMO
記事: 343
登録日時: 2015年11月16日(月) 20:12
連絡を取る:

アイテムを装備

投稿記事by TOMO » 2020年2月28日(金) 20:46

普通のアイテムを装備出来るようになります

・本体

コード: 全て選択

# アイテムを装備ver1.041
# 制作者:TOMO
#
# アイテムを装備出来るようになります
# 戦闘時、アクターは装備したアイテムのみ使用可能です
#
#
# ※使い方
# ・装備可能アイテムの設定
#   アイテムのメモ欄に「<装備可能アイテム>」を入れる
#
# ・戦闘時に使用可能な装備を設定
#   装備のメモ欄に「<装備使用効果:n>」と書く
#   (アイテムID:nの設定通り使用されます)
#
#
# ※補足
# ・導入箇所は「( ここに追加 )」のすぐ下辺りにお願いします
#
# ・装備タイプIDは5以上の数値を設定して下さい
#   また、他サイト様の装備拡張系で追加した数値も使わないで下さい
#
# ・使用可能な装備を設定する際は、アイテムの方は必ず「消耗しない」にして下さい

# ※更新内容
# ver1.041
#   装備不可能なアイテムが装備出来ていたバグを修正
#   その他バグを修正
# ver1.03
#   武器・防具をアイテムとして使用できる機能を追加
#   装備タイプIDと装備タイプ名の設定をしやすいように変更
#   おまけスクリプトだった「ID指定で装備を変更」を追加
#   その他修正&変更
#
# ver1.02
#   メニュー画面からアイテムを使用した際に消費されないバグを修正
#
# ver1.01
#   メモ欄に記入してないアイテムは通常通りリストに載るように変更
#   戦闘時、装備したアイテムだけ個数表示をしないように変更
#   一部処理の変更

#----------------------------------------------------------------------------
# ● 設定項目
#----------------------------------------------------------------------------
module TOMO
module ItemEquip
  EtypeID = 10            # 装備タイプID(5以上で未使用な数値を指定)
  EtypeName = "アイテム"  # 装備タイプ名
end
end
#----------------------------------------------------------------------------
# ● ここまで
#----------------------------------------------------------------------------



class << Vocab
  # 装備タイプ
  alias tomo_ex_item_equip_etype etype
  def etype(etype_id)
    return TOMO::ItemEquip::EtypeName if etype_id == TOMO::ItemEquip::EtypeID
    return tomo_ex_item_equip_etype(etype_id)
  end
end

class RPG::Item
  attr_accessor   :etype_id
  attr_accessor   :params
  def etype_id
    unless @etype_id
      @etype_id = -1
      if @note.include?("<装備可能アイテム>")
        @etype_id = TOMO::ItemEquip::EtypeID
      end
    end
    @etype_id
  end
  def params
    @params ||= [0] * 8
  end
  def equippable_item?
    self.etype_id == TOMO::ItemEquip::EtypeID
  end
end
class RPG::EquipItem
  attr_accessor   :usable_item_id
  def usable_item_id
    unless @usable_item_id
      @usable_item_id = 0
      @usable_item_id = $1.to_i if @note.match(/<装備使用効果:(\d+)>/i)
    end
    @usable_item_id
  end
  def usable_equip_item
    self.usable_item_id > 0 ? $data_items[self.usable_item_id] : nil
  end
end

class Game_Actor
  #--------------------------------------------------------------------------
  # ● 装備可能判定
  #--------------------------------------------------------------------------
  alias tomo_ex_item_equip_equippable? equippable?
  def equippable?(item)
    tomo_ex_item_equip_equippable?(item) || (item.is_a?(RPG::Item) &&
    item.equippable_item? && equip_slots.include?(item.etype_id))
  end
  #--------------------------------------------------------------------------
  # ● アイテムオブジェクトの配列取得
  #--------------------------------------------------------------------------
  def items
    @equips.select {|item| item.is_item? }.collect {|item| item.object }
  end
  #--------------------------------------------------------------------------
  # ● 使用可能な装備の配列取得
  #--------------------------------------------------------------------------
  def usable_equips
    equips.compact.collect {|item|
      item.is_a?(RPG::EquipItem) ? item.usable_equip_item : nil
    }
  end
  #--------------------------------------------------------------------------
  # ● アイテムの消耗
  #--------------------------------------------------------------------------
  alias tomo_ex_item_equip_consume_item consume_item
  def consume_item(item)
    slot_id = equips.index(item)
    if slot_id && item.consumable
      force_change_equip(slot_id, nil)
    else
      tomo_ex_item_equip_consume_item(item)
    end
  end
  #--------------------------------------------------------------------------
  # ● アイテムの使用可能条件チェック
  #--------------------------------------------------------------------------
  alias tomo_ex_item_equip_item_conditions_met? item_conditions_met?
  def item_conditions_met?(item)
    if $game_party.in_battle && item.battle_ok?
      return true if usable_equips.include?(item) || items.include?(item)
    end
    tomo_ex_item_equip_item_conditions_met?(item)
  end
  #--------------------------------------------------------------------------
  # ● 装備の変更(ID で指定)
  #     slot_id : 装備スロット ID
  #     item_id : 武器/防具 ID
  #--------------------------------------------------------------------------
  alias tomo_ex_item_equip_change_equip_by_id change_equip_by_id
  def change_equip_by_id(slot_id, item_id)
    if equip_slots[slot_id] == TOMO::ItemEquip::EtypeID
      change_equip(slot_id, $data_items[item_id])
    else
      tomo_ex_item_equip_change_equip_by_id(slot_id, item_id)
    end
  end
end

class Window_EquipSlot
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  alias tomo_ex_item_equip_refresh refresh
  def refresh
    create_contents
    tomo_ex_item_equip_refresh
  end
end
class Window_EquipItem
  #--------------------------------------------------------------------------
  # ● アイテムをリストに含めるかどうか
  #--------------------------------------------------------------------------
  alias tomo_ex_item_equip_include? include?
  def include?(item)
    return true if item.is_a?(RPG::Item) && @slot_id >= 0 &&
    item.equippable_item? && item.etype_id == @actor.equip_slots[@slot_id]
    tomo_ex_item_equip_include?(item)
  end
end
class Window_BattleItem
  #--------------------------------------------------------------------------
  # ● アクターの設定
  #--------------------------------------------------------------------------
  def actor=(actor)
    return if @actor == actor
    @actor = actor
    refresh
  end
  #--------------------------------------------------------------------------
  # ● アイテムリストの作成
  #--------------------------------------------------------------------------
  def make_item_list
    @normal_items = []
    @data = @actor ? @actor.usable_equips.compact + @actor.items.compact : []
    $game_party.items.each do |item|
      next unless include?(item) && item.etype_id != TOMO::ItemEquip::EtypeID
      @data.push(item)
      @normal_items.push(item)
    end
    @data.push(nil) if include?(nil)
  end
  #--------------------------------------------------------------------------
  # ● アイテムの個数を描画
  #--------------------------------------------------------------------------
  alias tomo_ex_item_equip_draw_item_number draw_item_number
  def draw_item_number(rect, item)
    return unless @normal_items.include?(item)
    tomo_ex_item_equip_draw_item_number(rect, item)
  end
end

class Scene_Battle
  #--------------------------------------------------------------------------
  # ● コマンド[アイテム]
  #--------------------------------------------------------------------------
  alias tomo_ex_item_equip_command_item command_item
  def command_item
    @item_window.actor = BattleManager.actor
    tomo_ex_item_equip_command_item
  end
end


・(おまけ)装備スロット拡張

コード: 全て選択

class Game_Actor
  #--------------------------------------------------------------------------
  # ● 装備スロットの配列を取得
  #--------------------------------------------------------------------------
  def equip_slots
    return [0,0,2,3,4,10,10,10] if dual_wield?
    return [0,1,2,3,4,10,10,10]
  end
end


画像
画像
画像
画像
画像

※サポートは基本受け付けてますが、全てに答えられるわけではありません

※更新内容
ver1.041(2022/07/09)
装備不可能なアイテムが装備出来ていたバグを修正
ver1.03(2022/07/08)
武器・防具をアイテムとして使用できる機能を追加
装備タイプIDと装備タイプ名の設定をしやすいように変更
おまけスクリプトだった「ID指定で装備を変更」を追加
その他修正&変更
おまけ(2022/03/30)
ID指定で装備を変更する際の処理を修正するスクリプトを追加
ver1.02(2020/10/26)
メニュー画面からアイテムを使用した際に消費されないバグを修正
ver1.01(2020/03/13)
メモ欄に記入してないアイテムは通常通りリストに載るように変更
戦闘時、装備したアイテムだけ個数表示をしないように変更
一部処理の変更
最後に編集したユーザー TOMO on 2022年7月13日(水) 19:19 [ 編集 8 回目 ]

TOMO
記事: 343
登録日時: 2015年11月16日(月) 20:12
連絡を取る:

Re: アイテムを装備

投稿記事by TOMO » 2020年3月13日(金) 21:14

ver1.01に更新しました

なお、個数表示しないようにしたのは、
装備したアイテムだと分かるようにする為です
なたね
記事: 30
登録日時: 2017年1月11日(水) 00:34

Re: アイテムを装備

投稿記事by なたね » 2020年10月25日(日) 22:57

アイテム装備を使わせていただきたいと思ってます。

実は新規プロジェクトでも試したのですが、メニュー画面でアイテムを使った場合、数量が減らない様なので確認していただけませんでしょうか?
TOMO
記事: 343
登録日時: 2015年11月16日(月) 20:12
連絡を取る:

Re: アイテムを装備

投稿記事by TOMO » 2020年10月26日(月) 03:16

> なたね様
修正して差し替えました(ver1.02)

何でか元の処理を残さずに消してた…
なたね
記事: 30
登録日時: 2017年1月11日(水) 00:34

Re: アイテムを装備

投稿記事by なたね » 2020年10月26日(月) 07:51

TOMO様、素早い対応ありがとうございます。
スクリプトお借りします。
TOMO
記事: 343
登録日時: 2015年11月16日(月) 20:12
連絡を取る:

Re: アイテムを装備

投稿記事by TOMO » 2022年3月30日(水) 18:43

おまけスクリプトを追加しました

本体の方に入れようか迷いましたが、
普通に使う分には無くても問題ないので「おまけ」として公開しました
イベントコマンド「装備の変更」からしか使わない処理だし…

もし上手くアイテムが装備出来なくなったら入れてみて下さい
masa13
記事: 14
登録日時: 2021年2月28日(日) 20:20

Re: アイテムを装備

投稿記事by masa13 » 2022年7月05日(火) 01:54

自分も使わせていただきました。
装備したアイテムはアイテム欄から使用できないようになりますが
逆に装備したまま道具としても使えるDQのいかづちのつえのような武器にするのは難しいでしょうか?
アイテムを装備できるスクリプトはなかなか見ないので質問させていただきました。
TOMO
記事: 343
登録日時: 2015年11月16日(月) 20:12
連絡を取る:

Re: アイテムを装備

投稿記事by TOMO » 2022年7月08日(金) 17:19

ちょっと動作が不安ですが、一応作ってみました(ver1.03)

こんな感じで良いですか?


※スクリプト補足
戦闘時のアイテムリストに載るのは、メモ欄で設定したIDのアイテムの物になります
なのでアイテムの方の「名前・説明文・アイコン等」は必ず設定しましょう
masa13
記事: 14
登録日時: 2021年2月28日(日) 20:20

Re: アイテムを装備

投稿記事by masa13 » 2022年7月08日(金) 21:46

ありがとうございます。
自分がやりたかったいかづちのつえ的なことはできました。

ですがアイテムが装備可能の設定関係なしに装備欄に出るようになってしまいました。
そしてそれを選ぼうとすると
bgu.jpg
bgu.jpg (46.69 KiB) 閲覧数: 3742 回

と、エラー・メッセージがでてしまいます。

私はA1氏の A1 Scripts をつかっていたりステータスをスクリプトでいじっているので
そちらの競合かとも思ったのですが、はずした状態でもなるのでそうではないようです。
装備タイプと装備タイプ名を変えたりデフォにしたり試しましたがやはりなってしまいます。
おそらく関係ないでしょうがVXAce_SP1とサリサ・タイクーン氏のフォントセッティングは入ってます。
TOMO
記事: 343
登録日時: 2015年11月16日(月) 20:12
連絡を取る:

Re: アイテムを装備

投稿記事by TOMO » 2022年7月09日(土) 19:04

ちょっと色々とバグが見つかったので、ver1.03~1.04はDLしないで下さい

現在修正中です

【19:22追記】
ver1.041として修正完了しました
まだ動作に不安があるので、バグ等があったら報告して下さい

“Ace:スクリプト素材(RGSS3)” へ戻る