RGSS3 武器、盾、頭、身体、装飾品を個別に種類・装備なしをスクリプトで取得したい

aiueo
記事: 50
登録日時: 2016年5月09日(月) 23:33

RGSS3 武器、盾、頭、身体、装飾品を個別に種類・装備なしをスクリプトで取得したい

投稿記事by aiueo » 2019年2月11日(月) 13:14

RGSS3 武器、盾、頭、身体、装飾品を個別に種類・装備なしをスクリプトで取得したい


アクターxxx番の
武器、盾、頭、身体、装飾品について
それぞれの種類、
それぞれについて装備なし
を判定するスクリプトを教えて下さい。


$game_actors[xxx].equips[yyy].id==zzz
というのを調べたのでまず以下の様にやってみました。
Aceのスクリプトエディタ>▼ゲームオブジェクト>Game_Interpreterの一番下、最後のendの上に、
#--------------------------------------------------------------------------
# ● 装備判定
#--------------------------------------------------------------------------
def soubi
if $game_actors[1].equips[0].id==2
$game_message.add("0武器が2ハンドアックス")
end
end
と書き、マップで適当な人物イベントの実行欄で
◆スクリプト:soubi
と設定しました。
アクター1エリックが2ハンドアックスを装備して人物に話しかけると、
イベントコマンドsoubiが発動して文章の表示が実行されました。
そして
def soubi
if $game_actors[1].equips[0].id==5
$game_message.add("5")
end
if $game_actors[1].equips[1].id==45
$game_message.add("45")
end
if $game_actors[1].equips[2].id==10
$game_message.add("10")
end
if $game_actors[1].equips[3].id==25
$game_message.add("25")
end
if $game_actors[1].equips[4].id==55
$game_message.add("55")
end
endとやると文章表示で
5
45
10
25 ウィンドウ切り替え
55
と出ました。装備の種類は取得できたようです。
ここで装備を全部外して話しかけるとnilエラーになりました。


部位ごとの装備をしていない判定はどうすればいいでしょう。
if $game_actors[1].weapons.compact.empty?
$game_message.add("武器無し")
end
 ではエラーになりました。

以上よろしくお願いします。

aiueo
記事: 50
登録日時: 2016年5月09日(月) 23:33

Re: RGSS3 武器、盾、頭、身体、装飾品を個別に種類・装備なしをスクリプトで取得したい

投稿記事by aiueo » 2019年2月11日(月) 16:09

?消えてる?
どなただったか分からない・・・
先程の方ありがとうございます。先程のスクリプトを上に持って来て

def actor_equips_id(actor_id, slot_id)
actor = $game_actors[actor_id]
return 0 unless actor
if actor.equips[slot_id]
return actor.equips[slot_id].id
else
return 0
end
end

def soubi
if actor_equips_id(1, 0)==6
$game_message.add("6の武器を装備している")
end
if actor_equips_id(1, 0)==0
$game_message.add("武器無し")
end

if actor_equips_id(1, 1)==45
$game_message.add("45の盾を装備している")
end
if actor_equips_id(1, 1)==0
$game_message.add("盾無し")
end

if actor_equips_id(1, 2)==36
$game_message.add("36を頭に装備している")
end
if actor_equips_id(1, 2)==0
$game_message.add("頭無し")
end

if actor_equips_id(1, 3)==22
$game_message.add("22の鎧を装備している")
end
if actor_equips_id(1, 3)==0
$game_message.add("身体無し")
end

if actor_equips_id(1, 4)==59
$game_message.add("59の装飾品を装備している")
end
if actor_equips_id(1, 4)==0
$game_message.add("装飾品無し")
end
end

これでテストしたところ上手くいきました。
ありがとうございました。
アバター
HAL
記事: 12
登録日時: 2017年1月24日(火) 13:30

Re: RGSS3 武器、盾、頭、身体、装飾品を個別に種類・装備なしをスクリプトで取得したい

投稿記事by HAL » 2019年2月11日(月) 17:02

横からすみません。確かについてた返信が消えてしまってますね…。

質問の件ですが、私も以前同じようなことをしようとしてエラーが出たことがありました。
ついでなのでそのときに解決した書き方を書いておきます。

コード: 全て選択

def soubi
 eq = ["武器","盾","頭","身体","装飾品"]
 $game_actors[1].equips.each_with_index{|val,index|
  if val.respond_to?(:id)
   $game_message.add("#{eq[index]} #{val.name}を装備している")
   #↑idだけで良ければ $game_message.add("#{eq[index]} ID#{val.id}を装備している")
  else
   $game_message.add("#{eq[index]} 装備なし")
 end
 } 
end
装備スロットをいじってなければこれでも同じような動作ができるかと思います。
何かのご参考になれば幸いです。
aiueo
記事: 50
登録日時: 2016年5月09日(月) 23:33

Re: RGSS3 武器、盾、頭、身体、装飾品を個別に種類・装備なしをスクリプトで取得したい

投稿記事by aiueo » 2019年2月11日(月) 20:58

HAL様ありがとうございます。
そのスクリプトのみをGame_Interpreterの一番下、最後のendの上に貼り、
武器 xxxxを装備している
盾  xxxxを装備している
...
とか
武器 装備なし
とか文章の表示されるのを確認しました。
enum.each_with_index {|item, idx| block }
obj.respond_to?(name, private = false)とかも調べました。
勉強になりました。
参考にさせていただきます。
ありがとうございました。

“VX / Ace:質問” へ戻る