[再]VXace スイッチ操作でバトルメッセージ&用語を任意のものへ切り替える

土曜日
記事: 21
登録日時: 2017年11月18日(土) 19:22

[再]VXace スイッチ操作でバトルメッセージ&用語を任意のものへ切り替える

投稿記事by 土曜日 » 2017年12月02日(土) 14:39

申し訳ありません!
連投になってしまい、誠に恐縮ですが、スイッチで戦闘メッセージ+戦闘用語を切り替えるスクリプトを、作成できる方はいらっしゃいませんでしょうか?

「属性」「武器タイプ」「スキルタイプ」「防具タイプ」の4つはノータッチで大丈夫です。

Vocabで設定できる

# 戦闘基本メッセージ
Emerge = "%sが出現!"

などのメッセージと、「攻撃」「防御」といった部分のコマンド用語、

こちらをスイッチ操作で予め指定したもう一つのワードに切り替え可能にしたいのですが、一筋縄ではいかない内容みたいです。

私が思っていた以上に、この仕様は難しいようですね。
そういえば、探してみても「モジュール」の「Vocab」をいじるスクリプトなど見たことないですし、かなり高難度な知識が必要かと思います。
どなたも作ることが不可能とわかりましたら、お見苦しいので先の方も含めてリクエストの方は取り下げさせて頂きます。

もし、相当のスクリプト技術をお持ちの方がいらっしゃいましたら、どうか、御協力の程、宜しくお願いします。
メッセージ文や用語の方は仮で構いませんので、コードをお書き頂けると有り難いです。

SBR

Re: [再]VXace スイッチ操作でバトルメッセージ&用語を任意のものへ切り替える

投稿記事by SBR » 2017年12月02日(土) 17:39

処理速度に影響が出るかもしれませんがそれでも宜しければお使いください。

コード: 全て選択

#==============================================================================
# ■ Vocab
#------------------------------------------------------------------------------
#  用語とメッセージを定義するモジュールです。定数でメッセージなどを直接定義す
# るほか、グローバル変数 $data_system から用語データを取得します。
#==============================================================================

module Vocab
  #--設定ここから--
 
  #スイッチID
  switch_id     = 1
 
  #スイッチON時のメッセージ(定数名: "メッセージ",)
  exp_values = {
    ActorDamage:   "%sは %s のダメージを受けました。",
    EnemyDamage:   "%sに %s のダメージを与えました。",
  }
 
  #スイッチON時のコマンド(メソッド名: "コマンド",)
  exp_command = {
    fight:  "たたかう",
    escape: "にげる",
    attack: "こうげき",
    guard:  "ぼうぎょ",
    item:   "あいてむ",
  }
 
  #--設定ここまで--
 
  default_values = exp_values.each_with_object({}) do |(name,*),obj|
    begin
      obj[name] = remove_const(name)
    rescue ::NameError
      raise ::NameError,"定数#{name}は定義されていません"
    end
  end
 
  singleton_class.class_exec do
    #メッセージの設定
    alias _exp_const_missing const_missing
   
    define_method(:const_missing) do |name|
      if exp_values.key?(name)
        $game_switches[switch_id] ? exp_values[name] : default_values[name]
      else
        _exp_const_missing(name)
      end
    end
   
    #コマンドの設定
    exp_command.each do |(method_name,*)|
      new_method_name = "_exp_command_#{method_name}"
     
      begin
        alias_method(new_method_name,method_name)
      rescue
        raise ::NameError,"メソッド#{method_name}は定義されていません"
      end
     
      define_method(method_name) do
        if $game_switches[switch_id]
          exp_command[method_name]
        else
          __send__(new_method_name)
        end
      end
    end
  end
end
土曜日
記事: 21
登録日時: 2017年11月18日(土) 19:22

Re: [再]VXace スイッチ操作でバトルメッセージ&用語を任意のものへ切り替える

投稿記事by 土曜日 » 2017年12月04日(月) 13:04

SBR様

ありがとうございます。
お書きになられたコードを試してみたところ、無事に希望通りの変更仕様にすることができました。


有用かつ難度の高いスクリプトを作成頂き、本当にありがとうございました。

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