| GAMEMASTERです。
> 解説ありがとうございます。 > これについて質問なのですが > パイロット・魔人もしくはユニット・魔人が(汎用)パイロットであったり、 > またマップ上にユニットが複数居る場合の場合このまま実行してよろしいのでしょうか? > > 汎用パイロットの愛称は如何なる状況においても引数に使われるべきではありません > 動作不良の原因になります。 > > と昔言われたのですがコレはそれに関係するでしょうか?
動作不良というのは、複数の同名パイロットのうちイベントを起こしたい特定の1人とは別の、意図しない1人をイベントの対象に選んでしまう可能性が極めて高いという意味です。 なお、ユニットは複数存在しても通常は何の問題も発生しません。
以上を踏まえて・・・
まず、前述のイベントのうち「パイロット・魔人」の部分をサブルーチン引数「Args(1)」に置き換えます。 次に、イベントを以下の通りに修正します。
行動終了イベントはあらゆる味方に対して実行するようにし、実行対象のパイロットを調べてそれが「パイロット・魔人」である時のみサブルーチンを実行するようにします。 味方1人が行動終了するたびにこのイベントラベルは実行されますが、未行動のパイロットがいてもターン終了時に未行動パイロット全員に対してイベントが実行されます。
行動終了 味方:
If Pilot(Unit(対象ユニット)) = パイロット・魔人(汎用) Then
Call 機体をレベルに対応させてランクアップ 対象ユニット
EndIf
Exit
汎用パイロットが複数いると対象ユニットはパイロット名称をそのまま出してくれないので、そのパイロットが搭乗しているユニットのパイロットを多重関数で調べるという手段を用います。 但し、実際に実行対象とするパイロットは「対象ユニット」に選ばれている特定個人であるため、サブルーチンの「Args(1)」へ代入するパイロットは「対象ユニット」をそのまま使います。
精神ポイントボーナスやイベントコマンドによるレベルアップなど、複数のパイロットが同時にレベルアップするような時には、あらゆる味方を対象にしてForEachコマンドを使います。 これも同様に実行対象とされた味方1人1人が「対象ユニット」に定められますので、その中から「パイロット・魔人(汎用)」のみを選び出してサブルーチンを実行させます。
ForEach 味方 全て
If Pilot(Unit(対象ユニット)) = パイロット・魔人(汎用) Then
Call 機体をレベルに対応させてランクアップ 対象ユニット
EndIf
Next
なお、この一連のイベントは、パイロット・魔人がユニット・魔人以外の別のユニットにも搭乗することがあったり、ユニット・魔人にパイロット・魔人以外の別のパイロットも搭乗することがある可能性を前提に作成されています。 もし、ユニット・魔人がパイロット・魔人専用である場合、サブルーチンでユニット・魔人のみを選び出しているのでIfコマンドでパイロット・魔人(汎用)を選び出す必要がなくなります。
参考になれば幸いです。
もう時間がないようでございますね。では、これにて退散させてもらいましょう。
|