IBCでIBの準備とキャンセルを繰り返す問題の回避方法 |
きぢゅか_tri | 09/12/16 21:56 |
Q IBカウンターのAIを使用するペットが魔法のキャスティングとキャンセルをマナがなくなるまで繰り返してしまう。回避策はないのか?
A ある一定距離より離れた敵の死亡をペットが認識できない為にこのような暴走が起きてしまう。死亡の認識は死体に近づくことでできる。
*現象
起きる現象はAIによって様々である。例をあげると以下のようなものだ。
・敵死亡後に魔法のキャスティングとキャンセルを繰り返す。
・死亡した敵とにらめっこをして動かなくなる。
・本来なら敵死亡後にカウンターを解除するはずなのだが、そのままになってしまう。またアイコンをクリックする等の方法を使い手動で解除をしようとしても、カウンターの準備を再び始めてしまう。
これらの現象は、敵の死体が消えるまで継続する。経験的にはペット単独で戦ってる場合には起きにくいのだが、主人等がペットがタゲってる敵を攻撃した場合に起きやすいようである。直感的には、距離が関係してそうである。
*現象の分析
現象の再現は簡単である。添付のAIをIBをつかえるペットに搭載して、白クモを相手に実験するとよい。
1)白クモに主人を認識させる(!を一個出した状態)
2)ペットを召喚し、ペットに(1)の白クモをタゲらせる
3)ペットはその場に止まるので、主人が移動することで白クモをペットから遠くに連れていく
4)白クモに死んでもらう
5)ペットを観察
白クモが死んだ距離によってはペットが敵の死亡を認識できないことがわかる。またIBで攻撃する部分を他の命令に変えることで、死亡してるが死亡を認識できない状態における以下のような特徴がわかった。
・一定距離より離れた敵の死亡をペットが認識できない。またこの距離は魔法の射程距離の限界あたりであるようだ。
・死亡しているが死亡を認識できていない敵に対して魔法による攻撃の命令を実行すると、キャスティングを開始するが即座に中断となる。
・スキルを準備する等の命令で魔法がキャスティング済みのときに魔法での攻撃の命令を実行した場合も同様にスキルのキャンセルとなる。
・近接攻撃の命令を実行した場合は、指定した制限時間に関係なく次の命令の実行に移る。この時にペットは一歩も動くことはない。
・敵から逃げる、追跡する、周りを回るの命令は敵が生存してる場合と同じように実行される。
・「ターゲット中の敵がいる」のイベントは発生しつづける。
・死亡してる敵の状態は「やられて飛ばされ中」になっている。
・死亡した瞬間ではなく、死亡後に転がった死体の位置が認識可能範囲であるかが条件である。
・死亡確認は各々の命令単位で行われている。イベント単位ではない。
これらの特徴から不具合の説明ができる。たとえば、「やられて飛ばされ中」の状態の「ターゲット中の敵がいる」のイベントで魔法による攻撃の命令がなされていると、魔法のキャスティングとキャンセルが繰り返されるという結果になるという訳である。
*対処方法
死体に近づけば、敵の死亡を認識できる。これは、敵が死んだ瞬間に死亡を観測できる距離以内であることが求められるわけではなく、死んだあとに近づくことでも死亡確認ができる。また近づき方に条件があるわけではなく、相手を追跡する命令でも周りを回る命令でもよく、またペットを主人の側に呼び寄せる方法で近づけても死亡確認をさせることができる。ちなみに、周りを回るの命令は10mの距離を指定しても死亡を認識できるようである。
*対処方法のAIへの具体的な組込み方
「ペットがアイスボルトで攻撃した」等のイベントを観測するAIを組んでいるとき、アイスボルトで攻撃するとそのAIの命令に実行が移る。また、敵が死亡している場合やマナが足りなくて制限時間以内に攻撃ができなかった場合など、何かしらの理由で攻撃が不成立となると、イベントは発生せず、アイスボルトによる攻撃命令の次の命令に実行が移る。このような命令処理の特徴を利用して、魔法攻撃や近接攻撃の次の命令に相手を追跡する等の命令を指定しておくことで、死亡認識ができなかった場合に備えることができる。
また、AIの組み方によっては、ペットの攻撃によって敵が「やられて飛ばされ中」になることを「ターゲット中の敵がいる」イベントで観測することができないようにすることもできる。このようなAIの組み方をした場合に、観測できないはずの状態を観測できたとすれば、それは主人等の攻撃で敵が「やられて飛ばされ中」になったと解釈できる。よってこの時に敵の周りを10mを維持して回るの命令を指定しておけば死亡確認ができる。ただし、「やられて飛ばされ中」だからといって敵が死亡してるとは限らないので相手を追跡するは指示しない方がいいです。
そしてひっそりと開店(´・ω・`)
http://sites.google.com/site/kidyukadoc/
流星ジョニ一_tar | U・ω・)むむ、これは役に立つ面白そうな情報! 09/12/16 22:25 |
カイトネール | 検証お疲れさまでした 09/12/19 10:13 |
harumatsu | 長いね!w 09/12/29 07:56 |
桃やん | 検証お疲れ様です! なるほど、死んだのを認識できてないからあんなことになるのか・・・ 勉強になります。 10/01/06 01:13 |
Keyman | 試してみたところ、一定距離より遠く離れて吹き飛ばされたら近付くとすると確かに回避できました! ずっと解決できなかったのでとても助かりましたm(__)m 便乗して距離判定AIが実は使えると言う話をばちょこと・・・(既出かしら・・・ 距離判定AIを使用した際に距離判定部は min_distance="500" max_distance="1000" となります。これだと実際には効果を発揮しませんが min="500" max="1000"とすると有効になります。 不具合報告掲示板に1年ほど前に報告しましたが、未だに直っていないので、こんなところで報告してみました。 10/03/27 02:45 |
リリンダ_mor | 「おいで!」で死体すぐそばに呼ぶと、入力はめんどいですが、対処できました。 10/06/24 07:38 |
件名 | 名前 | 日付 | 閲覧数 | 投票数 | |||
+6 | 流星ジョ二一 | 2010/03/07 | 25090 | 2 | |||
+1 | トゥリム_mar | 2010/02/28 | 6815 | 0 | |||
+4 | 桃やん | 2010/02/15 | 15156 | 0 | |||
ドムム | 2010/02/08 | 10125 | 0 | ||||
ラッシュアワ | 2010/02/07 | 6850 | 0 | ||||
+9 | 流星ジョ二一 | 2010/02/01 | 25615 | 5 | |||
桃やん | 2010/01/10 | 9089 | 0 | ||||
弱い者いぢめ | 2009/12/18 | 12796 | 0 | ||||
+6 | きぢゅか_tri | 2009/12/16 | 14324 | 6 | |||
玖呂_cic | 2009/11/15 | 23789 | 0 | ||||
+3 | 痛いネカマ | 2009/11/09 | 25818 | 0 | |||
+1 | リグニス | 2009/11/07 | 21417 | 7 | |||
流星ジョ二一 | 2009/11/03 | 17918 | 1 | ||||
リグニス | 2009/11/03 | 29639 | 6 | ||||
+1 | ジンアルプ | 2009/11/01 | 9211 | 0 | |||
+1 | 痛いネカマ | 2009/10/24 | 7785 | 0 | |||
ロンガ遺跡 | 2009/10/17 | 14421 | 0 | ||||
ジンアルプ | 2009/10/13 | 18865 | 0 | ||||
+1 | みつよし | 2009/09/29 | 11128 | 0 | |||
+2 | 痛いネカマ | 2009/09/29 | 10657 | 0 |