ページ 12

[解決済み]装備の変更

Posted: 2017年1月09日(月) 00:57
by ぽるんが
みなさんこんにちは。

今回は、ある変数に武器or防具を代入しそれを装備させるイベントを作りたいのですがどうしてもうまくいかずやり方を教えて頂けませんでしょうか?
よろしくお願いします。

Re: 装備の変更

Posted: 2017年1月09日(月) 05:15
by 奈々(なな)
他のスレッドでの回答の流用ですが
アクターn番のスロットx番の装備を武器/防具a番に変えたい場合

コード: 全て選択

$game_actors[n].change_equip_by_id(x,a)
をイベントコマンドのスクリプトに入力すれば出来ます。

質問の場合だとaを変数で指定したいということになりますので
行数の問題を加味して、変数b番で指定する場合は以下の様になります。

コード: 全て選択

a = $game_variables[b]
$game_actors[n].change_equip_by_id(x,a)
例として、エリックの鎧を変数10番のものに変えるなら以下になります。
a = $game_variables[10]
$game_actors[1].change_equip_by_id(3,a)

Re: 装備の変更

Posted: 2017年1月09日(月) 13:40
by ぽるんが
奈々さんお返事ありがとうございます。

いろいろ試してみたのですがとりあえず
変数の操作で変数10番に定数1(デフォルトのid1普段着)を代入して
a = $game_variables[10]
$game_actors[1].change_equip_by_id(3,a)
と処理することで装備を変えることはできたのですが
この方法だと武器や防具の数だけ変数の操作の処理を用意しなくてはならないようでして…


自分のイメージとしては変数10番に防具(id?名前?)を代入し
変数10番が1のとき(デフォルトのid1普段着)を装備
変数10番が2のとき(デフォルトのid2レザーベスト)を装備
といった処理をしたいのですがそのやり方を教えて頂けますでしょうか?

説明下手で申し訳ありませんがよろしくお願いします。

Re: 装備の変更

Posted: 2017年1月09日(月) 16:03
by ショウ
武器や防具の数だけ変数の操作の処理を用意しなくてはならない?
説明を聞く限りそのやり方でイメージ通りに出来ると思うのですが。
一つのイベントで武器防具の全パターンが必要という事ですか?

Re: 装備の変更

Posted: 2017年1月09日(月) 18:39
by 奈々(なな)
コードは見慣れないとごちゃごちゃになるので、1つずつ順番にいきましょう。

まず紹介したコードは、ぽるんがさんも試されたように
変数aに数値を入れた上で実行すると
その装備ID(データベース番号)の装備に切り替わる、というものです。
変数10番が1のとき(デフォルトのid1普段着)を装備
変数10番が2のとき(デフォルトのid2レザーベスト)を装備
つまりこの部分に関しては、想定通りの動きをしているわけですね。
私としてはこれをリクエストされたと思っていた次第ですが
どうもそうではない、ということはリクエスト内容に行き違いがあったように思われます。


ぽるんがさんの書き込みから察するに、おそらく
その前段階の「変数に装備IDを入れる」箇所に不満があるようですね。

さてその箇所のリクエスト、説明なのですが
ある変数に武器or防具を代入し
自分のイメージとしては変数10番に防具(id?名前?)を代入し
というような書き方をされており、ここがポイントなのだと思います。

問題は「代入」というのは、かなり意味の広い言葉だということです。
ですので、この書き方では
ある変数に防具(のID)を(直接数値を指定する方法で)代入し
という風に読むしかありません。

無理に代入とかの言葉を使わなくても結構ですので
具体的に何をしたいのか、どういう使い方をするのか
を書いて頂けると回答できるかと思いますよ。

Re: 装備の変更

Posted: 2017年1月09日(月) 20:46
by ぽるんが
お二方ともお返事ありがとうございます。

後だしで情報を出すのは申し訳ないのですが1から説明させて頂きます。
まず、CACAOさんの<拡張> アイテム選択の処理を導入しています。
こちらのスクリプトにてキーアイテム以外にもアイテム、武器、防具を選択処理にて選択できるようになるのですがその選択された武器や防具を装備したいというのが今回の質問になります。

イベントスクリプトにて
item = $game_variables[3]
$game_variables[3] = item.name
というようにアイテム(武器防具)を変数に代入してアイテム名も取得しています。
自分の考えではこの変数3にはアイテムのデータが入っておりこれを装備させるためのイベントスクリプトの書き方を教えて頂きたいのです。

自分なりのイメージですと
$game_variables[3] = アクター(id)に装備させるイベントスクリプト
(変数3には選択処理にて選択されたアイテムが入ります。)
というような感じなのですが…どうでしょうか?

Re: 装備の変更

Posted: 2017年1月09日(月) 21:10
by TOMO
奈々さんと同じ事を書いたので消しときました
これ自体が消せないのでそのままで

横から失礼しました

Re: 装備の変更

Posted: 2017年1月09日(月) 21:19
by 奈々(なな)
状況は把握しました。

$game_variables[3]が変数3を示すことや
item = $game_variables[3]
$game_variables[3] = item.name
が何をしているかは、理解されているわけですね。

では、そのアイテムの名前をitem.nameで取得できているのであれば
全く同じ要領で、item.idでIDを取得できるわけです。
後は、IDを取得した変数があるので、それを使って装備変更コードを実行すれば宜しいかと。

変数3にアイテムデータが入っているという認識は、上記が動く状況なら正しいです。
(こういう言い方をするのは、CACAOさんの素材の設定次第で変わることだからです)

------------------------------------------------------------------------------------

以降は完全な余談ですが

実は上記のように全て$game_variables[3]で処理するのは、個人的には非推奨です。
なぜなら変数3に、アイテムデータが入っていたり、アイテム名が入っていたりと一定しないからです。
こういう書き方は、その処理だけで完結し、かつ自分が100%把握できるような状況なら良いですが

コード: 全て選択

item = $game_variables[3]#変数3にはアイテムデータが入っている
$game_variables[4] = item.name#変数4に名前を取得
$game_variables[5] = item.id#変数5にIDを取得
こうした方が、後々のトラブルが少ないですよ。経験上。

あと、まあ、もしかすると
アイテムデータあるのに、そこからID拾って、もう1回アイテムデータ拾うの?
という違和感があるかもしれませんが。(私はありました)
1から作るなら無駄ですが、既存の命令を使うためその方が都合が良いってだけなのです。


*追記
>TOMOさん
かぶったって いいじゃないか にんげん だもの

気を使わせてすみません。

Re: 装備の変更

Posted: 2017年1月09日(月) 22:24
by ぽるんが
お返事ありがとうございます。
物分かりが悪くてすみません。
助言通りこんな形で試してみてはいるのですが

item = $game_variables[3]
$game_variables[4] = item.name
$game_variables[5] = item.id
$game_actors[2].change_equip_by_id(0,5)
4行目の装備させる処理ですと変数5ではなくid5番のアイテムが装備されてしまいまして…
$game_actors[2].change_equip_by_id(0,item)
(↑かともおもったのですがエラーを吐く始末)

これを
$game_variables[3] = アクター(id)に装備させるイベントスクリプト
(↓もしくはidでできるならこうでしょうか?)
$game_variables[5] = アクター(id)に装備させるイベントスクリプト
のようにできれば解決できるのではと思ったのですが見当違いでしょうか?
よろしければそのやり方を教えて頂けると助かります。

Re: 装備の変更

Posted: 2017年1月10日(火) 01:27
by 奈々(なな)
んー惜しい、材料は揃っているのですが。
私の書き方も初心者に対して不親切でした、すみません。
(てっきりスクリプトをある程度理解している方かと)
item = $game_variables[3]
$game_variables[4] = item.name
$game_variables[5] = item.id
$game_actors[2].change_equip_by_id(0,5)
4行目の装備させる処理ですと変数5ではなくid5番のアイテムが装備されてしまいまして…
$game_actors[2].change_equip_by_id(0,item)
(↑かともおもったのですがエラーを吐く始末)
やろうとしていることは、最初ので正しいです。
それを4行目で「5を指定、itemを指定」して詰まっているわけですが
私の最初の書き込みを見て頂くと(aとかbで分かりにくいですが)
そこに入るのは変数番号でもアイテムデータでもなく変数そのものだ、ということです。

それを踏まえて正しくは

コード: 全て選択

item = $game_variables[3]
$game_variables[4] = item.name
$game_variables[5] = item.id
a = $game_variables[5]
$game_actors[2].change_equip_by_id(0,a)
もしくは

コード: 全て選択

item = $game_variables[3]
$game_variables[4] = item.name
$game_actors[2].change_equip_by_id(0,item.id)
後者は変数5を使わないで直接IDを指定しています。