ハッキリ言ってかなり馬鹿にしていたデフォルトAI、確かに問題点は多いが、読めば読むほど味わい深い。
特に凄い、と思ったのが、長距離移動に関して。
サーバーでは処理されない距離15以上の地点に対し、予約コマンドを駆使してきちんと移動するようにしている。
これをIDLE_STとか予約コマンドとかのシステムを使わないでやろうとするとちょっと難しい。ぶっちゃけ出来ないかも知れない。やや挫折気味。だるー。
とか思ってBlogを書いてるうちに思いついた方法を試してみたら意外とあっさり出来た。行き詰ってる時の思考なんてそんなもの。自分に出来ないことは難しいことだと思い込んでしまって、そこから抜け出せなくなる、という。
なんとなく理解したこと。一回のAI関数の呼び出しで、何回もMoveを呼んでもあんまり意味がないっぽい。
フラグが早いこと消化されすぎて困る時は、何かしらの条件でフラグの消化に歯止めをかける。当たり前のこと。
未だに戦闘関係のコードは一切書いてない。うちの子は平和主義者なんです。ポリンを殴る?とんでもない!
…まともに戦闘をやらせられるようになるには何ヶ月かかるやら。
とりあえず、長距離移動の際に目標地点の中間地点に移動させるのは(デフォAIとかはこの方法)普通のPCやMobの移動と違う軌道を描いて気持ち悪いので、斜めにがーっと動いてX軸かY軸が合ったら目標地点にがーっと動くスタイルで書いてみた。
math系のモノ(sqrtとかその辺)はあんまり使いたくなかったので、単純にX座標とY座標を比較して、10セル×10セル範囲を1単位として動くように。(斜めが14セルぐらい<15セル=サーバーで認識しなくなる距離)
入り組んだところへの回り込みを、玉蟲AIさんのところで書いてあった主人の足跡を辿る方法を使って行うようにしてみた。それでも上手く行かなかった時の処理が余りにいい加減過ぎて、ふらふら歩き回った挙句画面外へ行ってしまうのが現状最大の懸案事項。
まずは足回りを固めるところから。移動がメチャクチャだと、いかに戦闘を賢くこなせても結局色々と不便を感じることになると思うから。
++++++++++++++++++++
コメントレス
>タチコマ(10機目)氏
ども、お久しぶりです。
非線形ならカーネルを使えばいいじゃなーい。
いや…カーネルとか導入するのか…?ダルいどころの話じゃないな…。
パラメータが多いなら次元圧縮すればいいじゃなーい。
いやそれもダルいな…。
とか思っております。SVMとかは教師有り学習の機械ですしね。
隠れたパラメータによって結果が出てくるという点では、確かに隠れマルコフモデルとかの話を彷彿とさせますよね。ケミのHit等のステータスや使用武器が知れない、で、攻撃回数(や使用Skillの種別)のみが分かる。あと分かることと言えばMobの種類ぐらいですか。
とかなんとかごちゃごちゃ書いてますが、とりあえず性急にレスしておきたかったので、実はBlogにお邪魔して非公開で直レスもしときました。議論できる相手がいるとモチベーションも上向きになるので、こーいう指摘とかはありがたいですね。
理系って…イヤですよね…。
ま、頑張って四角い車輪を再発明してますよ。(苦笑
>Jeers氏
ぬ、ええと…ああ、なるほど、そういうことですか。ちょっと意味を読み取るのに時間がかかりました。
正にそこが問題で、リザレクトされたかコールされたかが分かるのであれば、そもそも呼び出し時に毎回リザレクトされたかコールされたかを確認するだけで済みますよね。リザレクトされたことが分かった場合は『死んでいた』ことが分かろう、という。そのためにHPとかを監視する必要があるのか?という話でした。
AI起動時にグローバル変数の値を初期化するので、そこでフラグをONにしておくことで、『起動時のみやること(先のフラグをOFFにすることを含む)』を作ることが出来ます。そういったわけで、恐らく時間の小単位上の前回と今回の時間差分の監視はあまり必要でないかと。
時間の小単位における前回と今回のHPの差分を監視して、HPがかなり低い状態から突然100%になったらリザホム5を使われたと見るべきだろう、というのが記事での話でした。安息はホムのHPがMHPの80%↑でないと使用できませんしね。