《解決!》VXAceのスプリクト指示で条件分岐にあるゲームIDを変数指定でする方法。

デビルバスター
記事: 44
登録日時: 2019年3月16日(土) 08:05

《解決!》VXAceのスプリクト指示で条件分岐にあるゲームIDを変数指定でする方法。

投稿記事by デビルバスター » 2019年12月01日(日) 20:33

actor = $game_actors[アクターID]
if actor.skill_learn?($data_skills[スキルID])
条件を満たしたときの処理
end
↑村人Aさんが書いた条件分岐「スキル習得しているか」によるスプリクト指示のテンプレートですが、そこに書かれているアクターIDやスキルIDを変数IDにある数値で決める方法はありませんでしょうか?
最後に編集したユーザー デビルバスター on 2019年12月04日(水) 21:21 [ 編集 1 回目 ]

フリーゲーム『World Odyssey』プロジェクト製作中
Twitter→https://twitter.com/dehilbastar
faida
記事: 272
登録日時: 2015年12月17日(木) 16:44

Re: VXAceのスプリクト指示で条件分岐にあるゲームIDを変数指定でする方法。

投稿記事by faida » 2019年12月01日(日) 22:32

こんばんは。

$game_variables[ID]
がスクリプトで「ゲーム変数」を指します。IDには任意の数値を入れてください。
ちなみにIDに$game_variables[ID]を入れた、
$game_variables[$game_variables[ID]]
という形にもできます。任意のゲーム変数の数値のIDのゲーム変数を参照……ちょっとややこしいですね。

単に「変数」と言うとスクリプトだと別の意味になってしまうので
私は「ゲーム変数」という呼称を使用していますが、
イベントコマンドで出てくる「変数」で合ってます。

本当にどうでもいい追記:「文章の表示」でも変数を入れ子にできます。
\V[\V]]の形式ですね。
------------------------------------------------------------------
自作の(改造でない)スクリプト、プラグイン素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。
デビルバスター
記事: 44
登録日時: 2019年3月16日(土) 08:05

Re: VXAceのスプリクト指示で条件分岐にあるゲームIDを変数指定でする方法。

投稿記事by デビルバスター » 2019年12月02日(月) 19:40

faida様、返信有難うございます。
説明不足で申し訳ございません。
こういうのような形で困ったことなのですが・・・
actor = $game_actors[$game_variables[102]]
if actor.skill_learn?($data_skills[$game_variables[104]])
≪条件達成で開始≫
end
↑でアクターIDが『ゲーム変数102で指定した数値』、条件でスキルID『ゲーム変数104で指定した数値』を習得しているかで条件を提示したスプリクトを打ち込んだのですが、エラーが出てしまい困っているので・・・。
申し訳ございません。
フリーゲーム『World Odyssey』プロジェクト製作中
Twitter→https://twitter.com/dehilbastar
ecf5DTTzl6h6lJj02
記事: 455
登録日時: 2018年12月23日(日) 13:55

Re: VXAceのスプリクト指示で条件分岐にあるゲームIDを変数指定でする方法。

投稿記事by ecf5DTTzl6h6lJj02 » 2019年12月03日(火) 23:11

こんばんは。
デビルバスター さんが書きました:faida様、返信有難うございます。
説明不足で申し訳ございません。
こういうのような形で困ったことなのですが・・・
actor = $game_actors[$game_variables[102]]
if actor.skill_learn?($data_skills[$game_variables[104]])
≪条件達成で開始≫
end
↑でアクターIDが『ゲーム変数102で指定した数値』、条件でスキルID『ゲーム変数104で指定した数値』を習得しているかで条件を提示したスプリクトを打ち込んだのですが、エラーが出てしまい困っているので・・・。
申し訳ございません。

エラー内容が書かれていないのですが、出ているエラーは
スクリプト 'Game_Interpreter' の XXXX 行目で NoMethodError が発生しました。
undefined method 'skill_learn?' of nil:NilClass

(nil という値のNilClass型の変数に、メソッド 'skill_leran?' は定義されていない)
でしょうか。
上記のエラーである場合。
原因は

1.ゲーム開始後、変数102番に一度も操作(代入)を行っていない状態で、変数102番を参照している。(この場合、2.で示す変数102番に 0 が入っている状態となります。)
2.変数102番に 0 もしくは 存在しないアクターIDの番号が入っている。

のいずれかであると思います。
まず、一度も代入等の操作が行われていないゲーム変数を参照した場合には、0という値が返ってくるようになっています。
そして、$game_actors[n] の n に 0や存在していないアクターIDの番号が指定された場合、
actorには、値が存在しないことを示す nil というデータ が入ってきます。
nil というデータには skill_learn? というメソッドは存在しませんので、 実行できずにエラーが表示されて、プログラムが停止します。

上記の以外のエラーが出ている場合は、エラーの内容を教えて頂けるようお願いします。
デビルバスター
記事: 44
登録日時: 2019年3月16日(土) 08:05

Re: VXAceのスプリクト指示で条件分岐にあるゲームIDを変数指定でする方法。

投稿記事by デビルバスター » 2019年12月04日(水) 19:48

デビルバスターです。
説明不足で申し訳ございません。
まずスプリクトを起こす前に以下の変数を代入しています。
まずゲーム変数102(名:パーティID)を1、こちらのパーティID1はラルフに設定しています。
そして、ゲーム変数104(名:魔法ID)を264、こちらの魔法ID264はファイアを設定。
そして、スプリクト起動で
actor = $game_actors[$game_variables[102]]
if actor.skill_learn?($data_skills[$game_variables
[104]])
$game_message.add("強撃を習得している")
end
これをすることで、アクターIDはゲーム変数102で、『スキルID(ゲーム変数104)』のスキルを覚えているか?(ラルフがファイアのスキルを覚えているか)で設定が可能なはずなのですが、すでに事前にファイア習得しているので『ファイアを習得している』とメッセージに出ているのですが、この下記のようなエラーが出てしまい。
現状困っているとの事です・・・。

仮にその原因が上記のようなスプリクト文が原因となれば、個人的に厄介です。(枠内に収まり切れず貼り付けるとこのような表示なので)
添付ファイル
エラー.png
フリーゲーム『World Odyssey』プロジェクト製作中
Twitter→https://twitter.com/dehilbastar
ecf5DTTzl6h6lJj02
記事: 455
登録日時: 2018年12月23日(日) 13:55

Re: VXAceのスプリクト指示で条件分岐にあるゲームIDを変数指定でする方法。

投稿記事by ecf5DTTzl6h6lJj02 » 2019年12月04日(水) 21:11

こんばんは。
そして、スプリクト起動で
actor = $game_actors[$game_variables[102]]
if actor.skill_learn?($data_skills[$game_variables
[104]])
$game_message.add("強撃を習得している")
end
これをすることで、アクターIDはゲーム変数102で、『スキルID(ゲーム変数104)』のスキルを覚えているか?(ラルフがファイアのスキルを覚えているか)で設定が可能なはずなのですが、すでに事前にファイア習得しているので『ファイアを習得している』とメッセージに出ているのですが、この下記のようなエラーが出てしまい。
現状困っているとの事です・・・。

if 条件文の途中で改行が入ってしまっているので、起こっているエラーのようです。
イベントコマンドのスクリプトの入力欄では、入力できる文字数の関係で、どうしても改行が入ってしまうのですが、構文の途中で改行が入ると、スクリプトが正しく解析されないという現象が起こります。
これを防ぐために、途中で改行されてしまうような場合は改行の直前に ¥(円サイン)を入れることで、文章が次の行に続いていることを明示しなければなりません。
if文の内容を次のように書き換えてみてください。

コード: 全て選択

if actor.skill_learn?(\
$data_skills[$game_variables[104]])

(表示の都合で\になっていますが半角の¥です。)
デビルバスター
記事: 44
登録日時: 2019年3月16日(土) 08:05

Re: VXAceのスプリクト指示で条件分岐にあるゲームIDを変数指定でする方法。

投稿記事by デビルバスター » 2019年12月04日(水) 21:20

動作確認いたしました!!
貴方のお蔭でスプリクト操作の知識が一つ学びました。
ご協力いただき、有難うございました!
フリーゲーム『World Odyssey』プロジェクト製作中
Twitter→https://twitter.com/dehilbastar

“VX / Ace:質問” へ戻る