【解決済み】【RGSS3】属性有効度をイベントコマンド(スクリプト)で変更したい

タツミ
記事: 34
登録日時: 2015年12月29日(火) 23:51

【解決済み】【RGSS3】属性有効度をイベントコマンド(スクリプト)で変更したい

投稿記事by タツミ » 2021年7月05日(月) 10:43

アクターの属性有効度をイベントコマンド(スクリプト)で変更するには、どう記入すればよいでしょうか?
よろしくお願いします。
最後に編集したユーザー タツミ on 2021年7月06日(火) 10:10 [ 編集 1 回目 ]

名無し蛙
記事: 304
登録日時: 2015年11月23日(月) 02:46

Re: 【RGSS3】属性有効度をイベントコマンド(スクリプト)で変更したい

投稿記事by 名無し蛙 » 2021年7月06日(火) 04:28

どうもこんばんは
結論を先に言えばデフォルトでは無理ですね

ツクールのゲームデータはゲーム中に値の変動が起きない静的データと
値が変動する動的データ(ゲームオブジェクト)の二種類に分類されます。
アクターに限定すればRPG::ActorとGame_Actorという二つのクラスですね。
データベースエディタ上で編集可能なものは全て静的データに分類されアクターの特徴欄も該当します。

アクターの特徴欄に属性有効度を変更する特徴を増やす、というのは確かに可能ですが
静的データはゲームプレイ中に値が変動する事を想定していないので
セーブデータに残らない、シャットダウンしないと他セーブデータにも影響を及ぼす等の副作用が発生します。

隠し装備や隠しステートが反映される機構を作る、
あるいは専用の属性有効度変更変数を作る、など間接的な仕組みを作る事で実現可能になります。
実装の一例として以下のコードをスクリプトに加えた上で

コード: 全て選択

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ○ セットアップ
  #--------------------------------------------------------------------------
  alias :_old_setup :setup
  def setup(actor_id)
    @hide_states = []
    _old_setup(actor_id)
  end
  #--------------------------------------------------------------------------
  # ○ 特徴を保持する全オブジェクトの配列取得
  #--------------------------------------------------------------------------
  alias :_old_feature_objects :feature_objects
  def feature_objects
    _old_feature_objects + @hide_states.collect{|state_id| $data_states[state_id]}
  end
  #--------------------------------------------------------------------------
  # ● 隠しステートの追加
  #--------------------------------------------------------------------------
  def add_hide_state(state_id)
    return unless (1...$data_states.size).include?(state_id)
    return if @hide_states.include?(state_id)
    @hide_states.push(state_id)
  end
  #--------------------------------------------------------------------------
  # ● 隠しステートの削除
  #--------------------------------------------------------------------------
  def delete_hide_state(state_id)
    @hide_states.delete(state_id)
  end
end

イベントコマンド>スクリプトから以下のコードを実行すれば
該当のステートの特徴欄だけ常に反映されるようになります。

コード: 全て選択

# パーティメンバーの先頭アクターにステート10の特徴を適用する
$game_party.leader.add_hide_state(10)
# ステート10を削除する
$game_party.leader.delete_hide_state(10)
タツミ
記事: 34
登録日時: 2015年12月29日(火) 23:51

Re: 【RGSS3】属性有効度をイベントコマンド(スクリプト)で変更したい

投稿記事by タツミ » 2021年7月06日(火) 07:37

>名無し蛙さん
回答いただきありがとうございます。
参考にさせていただきます。

“VX / Ace:質問” へ戻る