■記事リスト / ▲上のスレッド
■22882 / 親記事) |
任意の相手を自分の隣接マスまで引き寄せるアビリティを作るには?
|
□投稿者/ Shun -(2016/03/04(Fri) 18:28:17) [ID:nE4DXYig]
| 以下のような、任意の味方ユニットを自身の隣接マスまで引き寄せるアビリティを作ろうと考えてます。
神隠し, 解説=任意の味方ユニットを隣接マスまで引き寄せる。 再行動, 0, 2, -, -, -
これだけだと何も起きないので、アビリティ使用後のイベントラベルを用いて、 そのラベル内で自分以外の味方を選択し(イメージとしては精神コマンドの応援や祝福を使った時にキャラを選ぶ感じ)、 選んだキャラをアビリティ使用者がいる位置に移動させる形で隣接させる感じで再現しようと思っています。なお、戦艦に搭載されているキャラは選択の対象外としています。 イメージとしては以下のような感じです。
使用後 キャラクターA 神隠し: Talk システム キャラクターAは神隠しを使った。;ターゲットを選んでください。 End
#(インクルードを用いてターゲットを選ぶ)
Move ターゲット X(キャラクターA) Y(キャラクターA)
Exit
自分のやりたい方法としては、応援や祝福の精神コマンドを使った時のように マップ上の味方ユニットに矢印を動かしてクリックする形のインクルを用いて、 その対象をMoveコマンドで移動させる形で神隠し使用者に隣接させたいのですが、 ターゲットを選ぶインクルの組み方が分からないので、それが分かる方がいれば教えていただきたいと思います。 あるいは、上記以外の別の手段で神隠しの再現ができそうならば、その方法も教えて欲しいです。
|
|
|
▽[全レス6件(ResNo.2-6 表示)]
■22885 / ResNo.2) |
Re[2]: 任意の相手を自分の隣接マスまで引き寄せるアビリティを作るには?
|
□投稿者/ Shun -(2016/03/08(Tue) 00:52:22) [ID:nE4DXYig]
| ありがとうございます。 お答えいただいたインクルを参考に、Moveコマンドだけでなく、 以下のようにEscapeとLaunchを用いても同じような動きが再現できました。
// ユニットコマンドで使用の確認。 ユニットコマンド 神隠し発動 全 ((神隠しフラグ = 1) And (神隠し対象者[対象ユニットID] = 1)): Confirm 神隠しを発動しますか? If (選択 = 1) Then // 確認が不要なら↓二行だけ残して使用して下さい。 Escape Launch X(神隠し使用者) Y(神隠し使用者) 非同期 Call 神隠し終了処理 Else Cancel EndIf Exit
自分としては、お答えいただいたインクルを雛形にしつつ、 そこから更に移動の直前と直後にワープのアニメーションを加えたく、 テレポートのアニメーションをインクルに加えたのですが、
// ユニットコマンドで使用の確認。 ユニットコマンド 神隠し発動 全 ((神隠しフラグ = 1) And (神隠し対象者[対象ユニットID] = 1)): Confirm 神隠しを発動しますか? If (選択 = 1) Then // 確認が不要なら↓二行だけ残して使用して下さい。 Center 対象ユニットID Select 対象ユニットID Call 戦闘アニメ_防御テレポート1発動 " " 64 紫 BeamSaber(4).wav Escape Wait 10 Launch X(神隠し使用者) Y(神隠し使用者) 非同期 Center 対象ユニットID Select 対象ユニットID Call 戦闘アニメ_防御テレポート1発動 " " 64 紫 BeamSaber(4).wav Call 神隠し終了処理 Else Cancel EndIf Exit #神隠しされる側が消える直前と移動直後に、そのキャラの位置でワープのアニメーションが発動するように調整しました。
以下のようなエラーが出てしまってアニメーションが機能しなくなってしまいます。
Lib\汎用戦闘アニメ\GBA_Guard.eve:1758行目 不正な画像ファイル名「」が指定されています 1757: ClearPicture 1758: PaintPicture BMP_FILE B_X B_Y 32 32 透過 T_COL 1759:
上記のような状況に対し、テレポートのアニメーションを発動させる方法があれば教えていただきたいと思います。
また、お答えいただいたインクルの場合、神隠しのアビリティを選んでキャラ選択の段階に入ってからは、 神隠しの行動そのものをキャンセルして通常の操作に戻ることができないので、 神隠しの弾数を使用直前の状態に戻しつつ元のユニットコマンドにする方法があれば教えていただけないでしょうか?
|
|
|
■22886 / ResNo.3) |
Re[3]: 任意の相手を自分の隣接マスまで引き寄せるアビリティを作るには?
|
□投稿者/ dip -(2016/03/08(Tue) 02:37:27) [ID:f1ysFWbr]
| 2016/03/08(Tue) 04:21:53 編集(投稿者)
>選択後キャンセル時のユニットコマンド
以前の処理流れは「神隠し使用>対象選択>使用確認>神隠し発動」で、
使用確認でキャンセルした場合、対象選択に戻る処理を入れていたので、そこら辺が不具合に見えたんだと思います。
マスク処理を導入しておけば分かりやすかったと思います。
>戦闘アニメエラー
戦闘アニメを見ると、どうやら相手ユニットIDを設定する必要があるようです。
「戦闘アニメ_防御テレポート1」発動を使用するには「Select」を「SelectTarget」に変更する必要があります。
ちなみに「Select = 対象ユニットID」「SelectTarget = 相手ユニットID」に設定されます。
Shunさんの処理を加えて修正してみました。
// ここで使用する変数を設定。
使用 味方 神隠し:
Set 神隠しフラグ 1
Set 神隠し使用者 対象ユニットID
// ↓使用したアビリティ情報を記録。
Set 神隠し使用番号 対象ユニット使用アビリティ番号
Set 神隠し使用回数 Info(ユニット,対象ユニットID,アビリティ,対象ユニット使用アビリティ番号,使用回数)
Exit
// ↓味方前提の処理です。それ以外の陣営では使えません。
使用後 味方 神隠し:
// ↓で対象者を設定。
ForEach 全 出撃
// とりあえず味方の場合は除外。
// 条件を変更したい場合は↓を変更して下さい。
If (Party(対象ユニットID) <> 味方) Then
Set 神隠し対象者[対象ユニットID] 1
EndIf
// 操作できないように設定する。↓は必須。
SetStatus 対象ユニットID 非操作 -1
Next
// ↓で対象者がいる場合といない場合の分岐。
If (Count(神隠し対象者) = 0) Then
// 対象者が存在しない場合の処理。
Call 神隠し終了処理 2
Else
// 対象者が存在する場合の処理。
EndIf
Exit
// ユニットコマンドで使用の確認。
ユニットコマンド 神隠し発動 全 ((神隠しフラグ = 1) And (神隠し対象者[対象ユニットID] = 1)):
Confirm 神隠しを発動しますか?
If (選択 = 1) Then
// 確認が不要なら↓二行だけ残して使用して下さい。
Center 対象ユニットID
SelectTarget 対象ユニットID
Call 戦闘アニメ_防御テレポート1発動 " " 64 紫 BeamSaber(4).wav
Escape
Wait 10
Launch X(神隠し使用者) Y(神隠し使用者) 非同期
Center 対象ユニットID
SelectTarget 対象ユニットID
Call 戦闘アニメ_防御テレポート1発動 " " 64 紫 BeamSaber(4).wav
Call 神隠し終了処理 1
Else
// 使用をキャンセルした時、対象者を選び直す場合は[2]を[3]に変更して下さい。
Call 神隠し終了処理 2
EndIf
Exit
// 神隠し使用中、ユニットの存在しない箇所で右クリックすれば神隠しをキャンセル。
マップコマンド 神隠しキャンセル (神隠し終了処理(2) = 1):
Exit
// Args(1) = 処理フラグ
// 1 = 神隠し使用
// 2 = 神隠しキャンセル
// 3 = 対象者キャンセル
神隠し終了処理:
If (神隠しフラグ = 1) Then
// キャンセルの場合、使用回数を復元。
If (Args(1) = 2) Then
SetStock 神隠し使用者 神隠し使用番号 神隠し使用回数
EndIf
If (Args(1) <= 2) Then
UnSet 神隠しフラグ
UnSet 神隠し使用者
UnSet 神隠し対象者
UnSet 神隠し使用番号
UnSet 神隠し使用回数
ForEach 全 出撃
ClearStatus 対象ユニットID 非操作
Next
EndIf
EndIf
Return 0
|
|
|
■22887 / ResNo.4) |
Re[4]: 任意の相手を自分の隣接マスまで引き寄せるアビリティを作るには?
|
□投稿者/ Shun -(2016/03/08(Tue) 07:36:26) [ID:nE4DXYig]
| すみません、前のレスで取り上げた問題点は解決したのですが、 EscapeとLaunchを用いたインクルを使った場合、 神隠しの対象者が行動済みだったり覚醒状態や2回行動可能状態も Launchで再登場した時点で全てリセットされてしまってます (状態異常やステータス付与はLaunchでもそのまま残りました)。 ただ、これら自体はMoveを使ったインクルであれば、各種状態も維持されたままになるのですが、 Moveを用いた場合、最初のテレポートアニメの直後にユニットが消えて、 しばらく経ってからパッと登場するという動きができなくなります。
// ユニットコマンドで使用の確認。 ユニットコマンド 神隠し発動 全 ((神隠しフラグ = 1) And (神隠し対象者[対象ユニットID] = 1)): #Confirm 神隠しを発動しますか? #If (選択 = 1) Then // 確認が不要なら↓二行だけ残して使用して下さい。 Center 対象ユニットID Wait 5 SelectTarget 対象ユニットID Call 戦闘アニメ_防御テレポート1発動 " " 64 紫 BeamSaber(4).wav Move 対象ユニットID X(神隠し使用者) Y(神隠し使用者) Wait 10 Center 対象ユニットID SelectTarget 対象ユニットID Call 戦闘アニメ_防御テレポート1発動 " " 64 紫 BeamSaber(4).wav Call 神隠し終了処理 1 #Else # // 使用をキャンセルした時、対象者を選び直す場合は[2]を[3]に変更して下さい。 #Call 神隠し終了処理 3 #EndIf Exit #このインクルだと、最初のテレポートアニメの直後にユニットが瞬間移動のごとく移動し、 #Waitの数値分の待機後、移動箇所でテレポートアニメが遅れて発生する動きとなります。
Waitを合間に挟んだのは、Waitなしだとテンポが早すぎため、それを遅くしたいのが理由ですが、 Moveでの移動前にユニットをEscape以外の方法で姿を隠し、 Moveで移動後、姿を現すのと同時に二度目のテレポートアニメを発動させたいと思っていますが何か方法はあるでしょうか。
あるいは、EscapeとLaunchのインクルにして、Launchで再登場させる際に Escape直前の神隠し対象者の行動回数や各種状態をチェックして Launch後にその状態になるようにできる方法があるなら、それも考えてみたいと思います。
両方の方法のやり方を知っておきたいと思うので、教えていただければと思います。
また、使用者自身の挙動に関してですが、 味方ユニットだけが対象の中、例外として使用者自身を神隠しの対象外にする方法と、 使用者自身も他の味方ユニットと同じく神隠しの対象にするものの、 移動パターンを使用者以外とは異なるパターンにする方法も教えていただきたいと思います。 (後者はそのままだと使用者自身は全く移動しないまま神隠しの使用回数を消費するだけになるので、 例として使用者が現在いる位置から隣接したマスいずれかに移動できるようにしたいと思っています)
|
|
|
■22888 / ResNo.5) |
Re[5]: 任意の相手を自分の隣接マスまで引き寄せるアビリティを作るには?
|
□投稿者/ dip -(2016/03/08(Tue) 18:39:56) [ID:2NS206kI]
| 2016/03/19(Sat) 23:25:21 編集(投稿者)
行動回数の不具合は気付いていたのですが、すかっり直すのを忘れていました…
// ここで使用する変数を設定。
使用 味方 神隠し:
Set 神隠しフラグ 1
Set 神隠し使用者 対象ユニットID
// とりあえずHP、EN、気力、行動回数の情報を記録。HP、EN、気力は武器属性での増減対策。
Set 神隠し前HP[対象ユニットID] HP(対象ユニットID)
Set 神隠し前EN[対象ユニットID] EN(対象ユニットID)
Set 神隠し前気力[対象ユニットID] Morale(対象ユニットID)
Set 神隠し前行動回数[対象ユニットID] Action(対象ユニットID)
// ↓使用したアビリティ情報を記録。
Set 神隠し使用番号 対象ユニット使用アビリティ番号
Set 神隠し使用回数 Info(ユニット,対象ユニットID,アビリティ,対象ユニット使用アビリティ番号,使用回数)
Exit
// ↓味方前提の処理です。それ以外の陣営では使えません。
使用後 味方 神隠し:
// ↓で対象者を設定。
ForEach 全 出撃
// 対象:陣営が味方以外。
//If (Party(対象ユニットID) <> 味方) Then
// Set 神隠し対象者[対象ユニットID] 1
//EndIf
// 対象:味方ユニット。分岐:使用者かそれ以外。
If (Party(対象ユニットID) = 味方) Then
If (対象ユニットID = 神隠し使用者) Then
Set 神隠し対象者[対象ユニットID] 2
Else
Set 神隠し対象者[対象ユニットID] 1
EndIf
EndIf
If (対象ユニットID <> 神隠し使用者) Then
Set 神隠し前行動回数[対象ユニットID] Action(対象ユニットID)
EndIf
// 操作できないように設定する。↓は必須。
SetStatus 対象ユニットID 非操作 -1
Next
// ↓で対象者がいる場合といない場合の分岐。
If (Count(神隠し対象者) = 0) Then
// 対象者が存在しない場合の処理。
Call 神隠し終了処理 2
Else
// 対象者が存在する場合の処理。
EndIf
Exit
// 神隠し使用中、ユニットの存在しない箇所で右クリックすれば神隠しをキャンセル。
マップコマンド 神隠しキャンセル (神隠し終了処理(2) = 1):
Exit
// Args(1) = 処理フラグ
// 1 = 神隠し使用
// 2 = 神隠しキャンセル
// 3 = 対象者キャンセル
神隠し終了処理:
If (神隠しフラグ = 1) Then
If (Args(1) = 2) Then
// キャンセルの場合、色々復元。
Set HP(神隠し使用者) 神隠し前HP[神隠し使用者]
Set EN(神隠し使用者) 神隠し前EN[神隠し使用者]
Set Action(神隠し使用者) 神隠し前行動回数[神隠し使用者]
IncreaseMorale 神隠し使用者 (神隠し前気力[神隠し使用者] - Morale(神隠し使用者))
SetStock 神隠し使用者 神隠し使用番号 神隠し使用回数
EndIf
If (Args(1) <= 2) Then
ForEach 全 出撃
ClearStatus 対象ユニットID 非操作
If (対象ユニットID <> 神隠し使用者) Then
Set Action(対象ユニットID) 神隠し前行動回数[対象ユニットID]
EndIf
Next
UnSet 神隠しフラグ
UnSet 神隠し使用者
UnSet 神隠し対象者
UnSet 神隠し前HP
UnSet 神隠し前EN
UnSet 神隠し前気力
UnSet 神隠し前行動回数
UnSet 神隠し使用番号
UnSet 神隠し使用回数
EndIf
EndIf
Return 0
■↓Moveの場合。
ユニットコマンド 神隠し発動 全 ((神隠しフラグ = 1) And (神隠し対象者[対象ユニットID] >= 1)):
//Confirm 神隠しを発動しますか?
//If (選択 = 1) Then
Center 対象ユニットID
Wait 5
SelectTarget 対象ユニットID
Call 戦闘アニメ_防御テレポート1発動 " " 64 紫 BeamSaber(4).wav
// 一時的にユニットを非表示。
ChangeUnitBitmap 対象ユニットID 非表示
If (神隠し対象者[対象ユニットID] = 2) Then
// 状況によっては元の位置に戻る事もあります。
If ((X(対象ユニットID) - 1) > 0) Then
Move 対象ユニットID (X(対象ユニットID) - 1) Y(対象ユニットID) 非同期
ElseIf ((Y(対象ユニットID) - 1) > 0) Then
Move 対象ユニットID X(対象ユニットID) (Y(対象ユニットID) - 1) 非同期
ElseIf ((X(対象ユニットID) + 1) < Info(マップ,幅)) Then
Move 対象ユニットID (X(対象ユニットID) + 1) Y(対象ユニットID) 非同期
ElseIf ((Y(対象ユニットID) + 1) < Info(マップ,高さ)) Then
Move 対象ユニットID X(対象ユニットID) (Y(対象ユニットID) + 1) 非同期
EndIf
Else
Move 対象ユニットID X(神隠し使用者) Y(神隠し使用者) 非同期
EndIf
Wait 10
Center 対象ユニットID
SelectTarget 対象ユニットID
// ユニットの非表示解除。
ChangeUnitBitmap 対象ユニットID 非表示解除
Call 戦闘アニメ_防御テレポート1発動 " " 64 紫 BeamSaber(4).wav
Call 神隠し終了処理 1
//Else
// 使用をキャンセルした時、対象者を選び直す場合は[2]を[3]に変更して下さい。
// Call 神隠し終了処理 3
//EndIf
Exit
■↓Escape、Launchの場合。
ユニットコマンド 神隠し発動 全 ((神隠しフラグ = 1) And (神隠し対象者[対象ユニットID] >= 1)):
//Confirm 神隠しを発動しますか?
//If (選択 = 1) Then
Center 対象ユニットID
SelectTarget 対象ユニットID
Call 戦闘アニメ_防御テレポート1発動 " " 64 紫 BeamSaber(4).wav
If (神隠し対象者[対象ユニットID] = 2) Then
// 状況によっては元の位置に戻る事もあります。
If ((X(対象ユニットID) - 1) > 0) Then
Move 対象ユニットID (X(対象ユニットID) - 1) Y(対象ユニットID) 非同期
ElseIf ((Y(対象ユニットID) - 1) > 0) Then
Move 対象ユニットID X(対象ユニットID) (Y(対象ユニットID) - 1) 非同期
ElseIf ((X(対象ユニットID) + 1) < Info(マップ,幅)) Then
Move 対象ユニットID (X(対象ユニットID) + 1) Y(対象ユニットID) 非同期
ElseIf ((Y(対象ユニットID) + 1) < Info(マップ,高さ)) Then
Move 対象ユニットID X(対象ユニットID) (Y(対象ユニットID) + 1) 非同期
EndIf
EndIf
Escape
Wait 10
Launch X(神隠し使用者) Y(神隠し使用者) 非同期
Center 対象ユニットID
SelectTarget 対象ユニットID
Call 戦闘アニメ_防御テレポート1発動 " " 64 紫 BeamSaber(4).wav
Call 神隠し終了処理 1
//Else
// 使用をキャンセルした時、対象者を選び直す場合は[2]を[3]に変更して下さい。
// Call 神隠し終了処理 3
//EndIf
Exit
|
|
|
■22889 / ResNo.6) |
Re[6]: 任意の相手を自分の隣接マスまで引き寄せるアビリティを作るには?
|
□投稿者/ Shun -(2016/03/08(Tue) 21:59:01) [ID:nE4DXYig]
| お答えいただいたインクルで、何とか想定通りの動きになることができました。 長らくお付き合いいただきましてありがとうございました。
|
解決済み! |
|
■記事リスト /
レス記事表示 →
[親記事-6]
|