ホムンクルスAIについての独り言
[ラグナロクオンライン]のホムンクルスシステムで使用する ホムンクルスAIのカスタマイズについてのメモ
プロフィール

モルティシア

Author:モルティシア
何時の間にやら貧乏キャラが定着しそのまま「安ケミ」と呼ばれるようになった「安っぽいケミ」
一時休止していたものの、最近ふたたびホムンクルスのカスタムAIの開発&公開を再開
メマー無しPC3の42転職
[完全製薬・完全露店]キャラ

カテゴリー

月別アーカイブ

最近の記事

最近のコメント

最近のトラックバック

ブロとも申請フォーム

この人とブロともになる

リンク

このブログをリンクに追加する

ブログ内検索

RSSフィード

FC2カウンター

メールフォーム

名前:
メール:
件名:
本文:

スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Attackを複数送ったときのラグについて
AI雑談スレで原因がほぼ特定できたようです
やはり詳しい人たちで検証、情報交換をすると早いですね

結論としてはこうみたいです

--
511 :491の人 :06/09/09 08:31 ID:6M/DtNBX0
RO鯖      RO蔵(+AI)
|  ←SYN      |
|  →SYN+ACK  |(TCPコネクション確立)
|  ←AI攻撃    |
|  →ACK      |(攻撃成功)
(AI攻撃に対してACKがきっちり返ってくる間のケミのほかの行動はOK)
|  ←AI攻撃(過剰)|(鯖からACK返らず)
|  ←AI攻撃(過剰)|(鯖からACK返らず)
|  ←AI攻撃(過剰)|(鯖からACK返らず)
|  ←AI攻撃(過剰)|(鯖からACK返らず)
(ここでACKが鯖から貰えないため、TCPの特性上、ケミの行動含め
 順次パケ詰まりが蔵で発生するが、AI側でAttack()が呼び出されているため、
 RO蔵内はAttack()実行されたことにより、見た目、ホムは攻撃モーションを
 高速で繰り返す*痙攣状態*結果、TCPタイムアウトが発生し、
 コネクションを張りなおす)
|  ←RST      |
|  →RST+ACK  |(TCPコネクション破棄)
|  ←SYN      |
|  →SYN+ACK  |(TCPコネクション確立)
(この時点でラグ解消、溜まったパケ*RO蔵で再送してる可能性を仮定。RO蔵で詰まったパケは
 全て破棄をしているのであれば最新行動まで一気に「コマとび」してるように見えるはず。
 どっちの現象だったかは前者の可能性が高い*を新コネクションで順次、鯖へ送信し、
 ラグで一気に行動が動くような現象が発生)

上図のような状態を仮定した場合、回線能力やネットワークカード(CPU含むハードウェア)に
至る相性にまで及ぶので、万能なモーションキャンセルアルゴリズムをAI側で組むのは
かなり困難になりそう。

一部スレ違いになるけど、升で擬似蔵が蔵依存のディレイをカットして、
超高速攻撃を可能にしていた点からもASPDを鯖側できっちり検知して、
ACKは返すが攻撃処理は無視するというアルゴリズムが鯖側で脆弱な気がします。
#上記の升対策がされているのかどうかは分かりませんが、超高速攻撃パケの
 防御策として意図的に受理してない可能性(だとしたらものすごい手抜きともいえなくないけど)も?

ここまでくると、後ろでEthereal等でパケットをモニタしないとなんとも言えないレベルになってきそう。。。
--

つまり、攻撃結果の受信待ちでクライアントの送信処理のみが止まってた可能性が高いということです

まとめるとこういうことらしいです
--
517 :Glenelgの人。 :06/09/09 09:54 ID:L102Ooyk0
・・・長々と書いたけど、論旨はあくまで
「クライアントはAttackをしたつもりで、応答待ち」
「サーバが取りこぼしかなにかで応答してない」
ということは同じことですね(^^;;

以上、あくまで推論ですが。長文失礼。
--

モーションキャンセルを行いつつこのラグを防ぐのは一筋縄ではいかないようです

以下、私的な対策案(机上のみで全然試していません!


モーションキャンセルをAttackで行うこと自体、パケット処理での不具合の原因になる様なのでAttack以外でモーションキャンセルを行えないか?

通常キャラクターで一般的にモーションキャンセルに使われるものとして、使用後ディレイの短いスキル、座りモーション、移動モーション、があります
ここでホムが利用できるのは移動モーション!

つまり一回攻撃してすぐに1セル動く!

んー、攻撃パターンを追加した時の動作テストで似たような処理になってたような

攻撃が終わってから移動開始してたからこれは無理かなぁ
となると、モーションキャンセルをするなら攻撃しかないのかも

既存のAttackを複数送る処理は元々、モーションをキャンセルできる最適な間隔が分からないからという理由で複数送ることにしたものだということに注目
キャンセル用のAttackを送る間隔を調節できるようにすれば・・・っ!?

私が作ったAIを4msちょっとずつ止める処理と組み合わせて何か出来そうな気がします

AIを故意に止める処理の動作テストでは、400msまではほとんどラグを感じませんでした
これを組み合わせて、モーションキャンセル用のAttackを4ms~400msの間で調整可能にして、最適化したい人には自分で最適なモーションキャンセルの値を探して設定してもらうという形にするとか!!
そうすればAttackを2回以上連続で出す必要はなくなります
後はAttack以外の命令に気を配って、AIが一周する間に不要なパケットを送らないようにすることで負担も極力抑えられると思います

妄想で考えた対策は以上ですね・・・
あとは、実際にやってみてそれがどれだけ有効か試すしか・・・

AIを故意に止める処理、ライブラリ化してみようかしら?

これはこれで、クライアント止まるから他の面で問題ありそうだけどね!
(クライアントが止まってる間、通信の応答が出来ないのだとしたら「回線が切れた」と誤認されて鯖キャンとかありえそう)

これも実際にやってみないと分からないですけどね
スポンサーサイト
この記事に対するコメント

この記事に対するコメントの投稿














管理者にだけ表示を許可する


この記事に対するトラックバック
トラックバックURL
→http://yasukemi.blog49.fc2.com/tb.php/36-1a7a21ca
この記事にトラックバックする(FC2ブログユーザー)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。