解決:[VXace]装備条件にステートを追加

アロエ
記事: 16
登録日時: 2017年4月11日(火) 22:51

解決:[VXace]装備条件にステートを追加

投稿記事by アロエ » 2024年10月17日(木) 23:49

武器・防具の装備条件に通常の装備条件に加えて、
該当するステートにかかっているかどうかを条件に追加したスクリプトを
作成してほしいと思い投稿しました

ただ、これは汎用性がないので、へぷたなすくろーる様の装備条件の追加スクリプトに
ステート条件を追加する改変が可能であればこちらを教えていただきたいです

へぷたなすくろーる様の装備条件の追加のURL
https://heptanas.mamagoto.com/Entry/239/

へぷたなすくろーる様のスクリプトは規約により、改変した素材を公開する場合は元のスクリプトが必要な
パッチ形式にしなければならないので、難しくなってしまう場合は改変する箇所をご指示いただければ
こちらでスクリプトの改変を行います
最後に編集したユーザー アロエ on 2024年10月19日(土) 18:10 [ 編集 3 回目 ]

DEDEN
記事: 85
登録日時: 2018年8月25日(土) 15:06

Re: [VXace]装備条件にステートを追加

投稿記事by DEDEN » 2024年10月18日(金) 08:41

アロエ様
こんな感じで大丈夫でしょうか?
パッチ形式なので元素材の下に導入してください
<装備条件 ステート n>
で指定できます

コード: 全て選択

class Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● 装備条件(ステート)
  #--------------------------------------------------------------------------
  def equip_stateid_ok?(item)
    return true if item.note.scan(/\<\s*装備条件\s*ステート\s*(\d+)\s*\>/).empty?
    item.note.scan(/\<\s*装備条件\s*ステート\s*(\d+)\s*\>/).any? { |s_id| self.state?(s_id[0].to_i) }
  end
  #--------------------------------------------------------------------------
  # ● 装備可能判定(再定義)
  #--------------------------------------------------------------------------
  def equippable?(item)
    return false unless item.is_a?(RPG::EquipItem)
    return false if equip_type_sealed?(item.etype_id)
   
    return false unless equip_actorid_ok?(item)
    return false unless equip_classid_ok?(item)
    return false unless equip_status_ok?(item)
    return false unless equip_stateid_ok?(item)
   
    return equip_wtype_ok?(item.wtype_id) if item.is_a?(RPG::Weapon)
    return equip_atype_ok?(item.atype_id) if item.is_a?(RPG::Armor)
    return false
  end
end
アロエ
記事: 16
登録日時: 2017年4月11日(火) 22:51

Re: [VXace]装備条件にステートを追加

投稿記事by アロエ » 2024年10月18日(金) 17:11

DEDEN様、今回は要望に応えていただき本当にありがとうございます
テストも問題なくこれで解決とさせていただきます
アロエ
記事: 16
登録日時: 2017年4月11日(火) 22:51

Re: [VXace]装備条件にステートを追加

投稿記事by アロエ » 2024年10月18日(金) 19:00

DEDEN様へ
解決としましたが、もう一つだけリクエストが増えてしまいました
申し訳ありませんが応えていただければ幸いです

装備条件を満たさなくなり
装備できなくなった装備を自動で外すにはどうすればよいでしょうか?
DEDEN
記事: 85
登録日時: 2018年8月25日(土) 15:06

Re: [VXace]装備条件にステートを追加

投稿記事by DEDEN » 2024年10月18日(金) 22:50

アロエ 様
こちらのテストではマップでも戦闘中でもステートを解除した際は自動で装備も外れることを確認しました
これは私が付けた機能ではなく、RGSS3のデフォルト仕様によるものです(特徴機能を使えば特定の操作で装備条件を満たさなくなるという状況は起こりうるため)
なのでアロエ様の環境ではステートを解除しても外れないのであれば何らかのスクリプト素材によってこの機能が無効化されている可能性があります
もしくはデフォルトには存在しない方法でステートを解除した場合は装備可能判定チェックが入らないのかもしれません
イベントコマンドやアイテム使用によるステート解除でも装備は外れませんか?
アロエ
記事: 16
登録日時: 2017年4月11日(火) 22:51

Re: [VXace]装備条件にステートを追加

投稿記事by アロエ » 2024年10月19日(土) 00:17

DEDEN様へ
他のスクリプトがない状態で試したところ
どうやらイベントコマンドの全回復のみ装備がはずれないようです
これに対応することは可能でしょうか?
DEDEN
記事: 85
登録日時: 2018年8月25日(土) 15:06

Re: [VXace]装備条件にステートを追加

投稿記事by DEDEN » 2024年10月19日(土) 07:58

アロエ 様
検証ありがとうございます
こちらでも全回復では装備が外れない事を確認しました
テスト不足で申し訳ありませんでした

原因を調べたところ、アイテム使用やステートの変更コマンドで使われているremove_stateメソッドではrefreshを走らせているのに
全回復のclear_statesではそれを行っていない事でした

修正自体は簡単ですが、何故デフォルトでこれを行っていないのか分からないのが少し怖いですね
ただのミスなら良いのですが、意図的なものならば不具合が出る可能性もあります
以下の修正コードを導入すれば問題は解消すると思いますが、もしも全回復で何らかの不具合が発生した場合はまたお知らせください

コード: 全て選択

class Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● 全回復
  #--------------------------------------------------------------------------
  alias recover_all_deden recover_all
  def recover_all
    recover_all_deden
    refresh
  end
end
アロエ
記事: 16
登録日時: 2017年4月11日(火) 22:51

Re: 解決:[VXace]装備条件にステートを追加

投稿記事by アロエ » 2024年10月19日(土) 18:20

DEDEN様、対応ありがとうございます
もし何かの問題があればこの記事か別の記事にてお知らせしようと思います

“VX / Ace:スクリプト素材のリクエスト” へ戻る