VX aceにて、アクターが装備スロット1~4(デフォルトでは盾、頭、身体、装飾品)の装備品を身に付けていない状態で
装備画面を終了しようとすると『装備をしていない部位があります!』等のエラーメッセージが出て
装備画面を終了出来ないシステムを作ろうとして行き詰ってしまいました。
スクリプトの『Scene_Equip』40行目を
@command_window.set_handler(:cancel, method(:on_scene_cancel))
に書き換えメソッド『on_scene_cancel』を新たに作成。
def on_scene_cancel
if
else
SceneManager.call(Scene_Menu)
end
end
ここまでは何とか思いついたのですが『if』部分の条件式の書き方が分かりません。
試しに『$game_actors[1].equips[1].id == nil』等を入れてみたのですがアクター1番が盾を装備していないと
『ノーメソッドエラー』が出てゲームが終了してしまったり、 『SceneManager.call(Scene_equip)』等を書き加えても
画面が止まって装備画面に戻れなくなってしまいます。
初歩的な質問で恐縮ですが、どなたかお知恵をお借りできませんでしょうか?
『装備なし』状態を禁止したい
Re: 『装備なし』状態を禁止したい
ご要望の内容とは異なりますが、1つの案として。
このスクリプトを導入すると、「全てをはずす」コマンドが消え、
装備品選択では空欄が選べなくなります。
コード: 全て選択
class Window_EquipCommand
def col_max
return 2
end
def make_command_list
add_command(Vocab::equip2, :equip)
add_command(Vocab::optimize, :optimize)
end
end
class Window_EquipItem
def current_item_enabled?
index == item_max - 1 ? false : enable?(@data[index])
end
end
装備品選択では空欄が選べなくなります。
Re: 『装備なし』状態を禁止したい
コード: 全て選択
if $game_party.members.all?{|member|member.equips.all?{|item|item != nil}}
return_scene
else
エラーメッセージの処理
@command_window.activate
end
現在サポート終了中
Re: 『装備なし』状態を禁止したい
お二方とも、ご返答ありがとうございます。
TOMOさんの用意して下さったコードで大分理想に近い形にはなったのですが
条件式の
$game_party.members.all?{|member|member.equips.all?{|item|item != nil}}
から、装備スロット0番(デフォルトの武器)のみを除外する場合はどう記述したらよろしいでしょうか?
重ね重ねの質問で、申し訳ありません。
TOMOさんの用意して下さったコードで大分理想に近い形にはなったのですが
条件式の
$game_party.members.all?{|member|member.equips.all?{|item|item != nil}}
から、装備スロット0番(デフォルトの武器)のみを除外する場合はどう記述したらよろしいでしょうか?
重ね重ねの質問で、申し訳ありません。
Re: 『装備なし』状態を禁止したい
ご返答ありがとうございます。
equipsをarmorsやweaponsに変更して試したところ、equipsでは
エラーメッセージの処理→@command_window.activateとelseの処理をしていたものが
条件成立のifの処理を行い、普通にメニュー画面に戻る様になってしまいました。
RPG探検隊さんの『サイドビュースクリプト』を導入しているので
念の為、新規プロジェクトを作成し、『Scene_Equip』をコピーして試したみたのですが
同様の結果になるみたいです。
equipsをarmorsやweaponsに変更して試したところ、equipsでは
エラーメッセージの処理→@command_window.activateとelseの処理をしていたものが
条件成立のifの処理を行い、普通にメニュー画面に戻る様になってしまいました。
RPG探検隊さんの『サイドビュースクリプト』を導入しているので
念の為、新規プロジェクトを作成し、『Scene_Equip』をコピーして試したみたのですが
同様の結果になるみたいです。
Re: 『装備なし』状態を禁止したい
「SceneManager.call(Scene_Menu)」とかでなく、
「return_scene」もしくは「SceneManager.return」で直前の画面に戻ります
「return_scene」もしくは「SceneManager.return」で直前の画面に戻ります
現在サポート終了中
Re: 『装備なし』状態を禁止したい
if $game_party.members.all?{|member|member.xxxxx.all?{|item|item != nil}}
Audio.se_play("Audio/SE/shop", 100, 100)
return_scene
else
Audio.se_play("Audio/SE/Buzzer1", 100, 100)
@command_window.activate
end
SEを入れて分かりやすくしてみたんですけど、
『xxxxx』の部分に『equips』を入れて装備品を外すとブザーが鳴って装備画面に戻れますが
『armors』を入れた場合、装備を外しても外した装備を全て所持品から消去しても
レジの音が鳴ってメニュー画面に移動してしまいます。
Audio.se_play("Audio/SE/shop", 100, 100)
return_scene
else
Audio.se_play("Audio/SE/Buzzer1", 100, 100)
@command_window.activate
end
SEを入れて分かりやすくしてみたんですけど、
『xxxxx』の部分に『equips』を入れて装備品を外すとブザーが鳴って装備画面に戻れますが
『armors』を入れた場合、装備を外しても外した装備を全て所持品から消去しても
レジの音が鳴ってメニュー画面に移動してしまいます。
Re: 『装備なし』状態を禁止したい
コード: 全て選択
result = true
$game_party.members.each do |member|
member.equip_slots.each_with_index do |slot_id, index|
if slot_id > 0 && member.equip_change_ok?(slot_id) && member.equips[index].nil?
result = false
break
end
end
end
if result
Audio.se_play("Audio/SE/shop", 100, 100)
return_scene
else
Audio.se_play("Audio/SE/Buzzer1", 100, 100)
@command_window.activate
end
現在サポート終了中
Re: 『装備なし』状態を禁止したい
何度もお手間をかけさせてしまいすいませんでした。
お陰さまで希望通りの挙動を再現することが出来ました。
どうもありがとうございます。
奏ねこまさんの案も今後の参考にさせて頂きます。
ちなみにゲームのreadmeやスタッフロール等に
『スクリプト協力: TOMO』の様に記述する事は支障ありませんでしょうか?
お陰さまで希望通りの挙動を再現することが出来ました。
どうもありがとうございます。
奏ねこまさんの案も今後の参考にさせて頂きます。
ちなみにゲームのreadmeやスタッフロール等に
『スクリプト協力: TOMO』の様に記述する事は支障ありませんでしょうか?