calendar_viewer 日記/2015-03
new<<
2015-3;
>>old
[日記] |
||||||||||||||||||||||||||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
2015/3/28 (土)
ホムAI:Glenelg Ver0.67 バグ状況†
表記、ちょっと大きい問題がありました。
まだ現象確認中で原因解明には至っていません。
原因がわかったので、とりあえずここに回避策と発生条件をメモ。
AIを置き換える予定ですが、しばらくは手動対応でよろしく。
#完全にポカミスで恥ずかしい(^^;;
発生条件†
ホム『セラ』で、範囲攻撃に『ポイズンミスト』を指定。
これを使用するとき、落ちていた。
問題場所†
skills.lua 内でのポイズンミストの特性定義が間違っていた。
375行目あたり。
誤: SKILLDATA[8020][6] = "glnd"
正: SKILLDATA[8020][6] = "grnd"
この結果、ポイズンミストを『地面指定スキル』ではなく『敵指定スキル』として処理してしまい、パラメータ不良で落ちていた。
==== 以下、解析時メモ ====
発覚状況†
- 先々週くらいから、セラAI設計〜動作確認〜経験稼ぎの際中にときどき『サーバーキャンセル』をくらっていた。
- 発生するのは、魔人の塔やサラで『多数に囲まれたとき』。
- ただ先週までは、RO自体に『範囲攻撃時に落ちる』障害があったため、それと判断していた。
- だが、今週に入っても現象が収まらない。
- コスミッションで監獄にいったところ、頻繁におちることがわかった。
現状わかっていること。†
- 単に『敵が多い』だけでは問題なさそう。
以下、具体例。- モンスターハウスにジェネで参加しているが、サーバーキャンセルを受けることはほとんどない。
ログを取ってみると、MHではAI内で敵25体くらいを処理していても問題なし。
監獄では、確認できている最少で6体でキャンセルされている。 - 監獄でも、画面外にただ多いだけでは落ちない。
ボスケミ&ホムに多数接敵したところで発生しているっぽい。 - ただ、先週ディータでバリオ森に行ったときには起きていなかった。
ラーヴァスライドの検証のために6体以上に囲まれた状況もあったが、サバキャンは一度も起きなかった。
- モンスターハウスにジェネで参加しているが、サーバーキャンセルを受けることはほとんどない。
- 友達関連は関係なさそう。
- 友達登録ゼロにしても現象起きる。
- 画面内に他PCがいなくてもおちる。
- ボスケミの動作には関係ない。
- ログインして一切操作せず棒立ち→囲まれるという状態でも、状況発生する。
- ATTACK状態のどこかに問題があると思われる。
- ALT+Tでの『完全追尾』状態ではどんなに囲まれても落ちない。
- スキル使用判定のどこかに問題がありそう。
- 自動スキル登録を全部外しただけだと、現象は起きる。
- ソースレベルで『自動スキルチェック』部分を削除すると、落ちない。
ここを刻んで確認していくしかなさそう。
さてさて。
ご意見などがあれば。
2015/3/23 (月)
ホムAI:Glenelg Ver0.67†
他記事と前後しましたが、そんな感じ。
変更点概要は変更履歴に書いたので、そこにない補足をいろいろと。
友達関連の話。†
変更履歴を見ると『友達関連』の修正が多いことがわかるかと思います。
ここに手を入れた理由はものすごく簡単です:レギオン対応の都合。
要は、ですね。
召喚したレギオンを『友達』として扱わないと横殴り判定にひっかかってしまって、セラ本体が攻撃してくれない(笑)
そういう意味では、実はバイオプラントとかメカニックのFAWだとかについても、同じリスクはあるのですが。
現状は、妥協しています。
ともあれそんな感じで友達登録に手を入れたので。
ついでに、今までちょっと気になっていた『あの人を友達登録してあったかどうか忘れた』『登録済のメンバーを、それがわからずうっかり削除』といった使いづらさについての防止策をいれました。
RO画面で AddFriend操作→そのときのIDをGlenelgWatchの画面で確認→ Watchの「友達」編集で、当該IDに削除防止チェック、という使用を想定。
ここでロックすると、以後ROクライアントで誰かを A+S+右クリックしてもその対象は「削除」しません。
その他、書いていないセラまわり。†
ニードルパラリシスのクールタイムが古かったので、修正しました。
これでレベル1ニードル連打ができるようになりました:ニードルのレベル1はクールタイムゼロ(!)なので、
SP消費にさえ目をつむればものすごい攻撃力になるのです。
参考までに、友瀬のリーフ→セラでは、以下のような感じに設定しています。
- メインスキル:ニードルパラリシス Lv2
- サブスキル:ニードルパラリシス Lv1、全力攻撃時サブスキル優先
- スキル割当:ニードルパラリシスLv1 を「対象へのスキル全力使用切換」
要は、強敵にはLv1連打する/できるようにしている、ということです。
AI設計まわり†
ここは、普通のユーザの方には関係ないですが(笑)
Glenelg はわりと正統派の State-base 処理で書かれている部分が多くて、
似てもって異なるコードが結構あちこちにあるんですよ。
以前から気にはなってたんですが、地道に整理している、ってところですね。
以上、そんな感じかな。
ご意見などがあれば。
- なんか、数がおおいところに行くと落ちてますね。
事情がわからんのでちょっと調べます。同期落ちってことは、なにか重いことになってるかな・・・ -- ともせ%管理人。 2015-03-28 05:39:06 (土) - なんか、数がおおいところに行くと落ちてますね。
事情がわからんのでちょっと調べます。同期落ちってことは、なにか重いことになってるかな・・・ -- ともせ%管理人。 2015-03-28 00:10:10 (土)
ホムAI:ラーヴァスライド、メモ。†
セラのペインキラーまでもう少しなのですが。
さすがにレベルもなかなか上がらなくなってきたので、ディータにちょっと浮気中(笑)
で、タイトルのラーヴァスライドについて、アルケミwikiから読み取れない振る舞いがあったので、 自分メモ的な。
#気が向いたら、アルケミwiki にも書き込みしておきます。
ラーヴァスライドってどんなスキル?†
単純にいうと、『5回ヒットすると消える、範囲ダメージ床』を作るスキルです。
ただ、この『5回ヒット』という部分が、他にない独特な処理になっています。
具体的に例も交えて、説明していきます。
- 『床』のサイズは、スキルレベル依存。
最大レベルで 7x7 です。- 『床』は、5回ヒットするか、持続時間が切れると、消えます。
- 持続時間はレベル依存で Lv*2+10秒。
とはいえ後述の動作から、よほど間抜けな状況で使わなければ『5回ヒット』のほうが先に発生します。 - 1ヒットあたりのダメージは、Lv5で通常打撃と同レベル。
正直、それほど強力な威力とは言いがたい。
- ヒットは『使用==床発生直後』および『2秒ごと』です。
- 範囲内に敵1体がいた場合、0秒(使用直後)、2秒後、4秒後、6秒後、8秒後・・・と、 『8秒かけて5回攻撃』という動作になります。
- 範囲内に複数の敵がいる場合、それぞれへのヒットを『合計』して5回、という処理になります。
それぞれに5回ずつ、ではありません。- 極端な例:範囲内に5体の敵がいる場合、スキル使用直後 5体の敵にそれぞれ1回ずつヒット→ 合計5回ヒットしたのでスキル終了です。
- 十分なヒット回数が残っていない場合、範囲内にいてもヒットを受けない敵も発生します。
例えば『範囲内に6体』入るようにスキルを使用すると、1体はダメージを受けません: 5体==5ヒットしかできないためです。- この際、どれに当たるのかは詳細不明。
- 別の事例:範囲内に2体いれば、以下のように動作することになります。
スキル使用直後、2体にそれぞれヒット
→2秒後、2体にそれぞれヒット
→さらに2秒後(スキル使用から4秒後)どちらか1体にだけヒット
- 普通、範囲攻撃のこれを1体相手に使うことはないでしょう。
2体相手で使った場合、途中で倒しきらない限り、4秒後で自動的に消滅することになります。
同様に、3〜4体なら2秒後、5体以上なら即時、ヒット数消費完了で消滅。
『10秒以上』ある持続時間を使い切るほうが難しそう。
いろいろ雑感&考察†
- 以前の検討では、『持続時間のある範囲攻撃だから、うまく範囲に誘導して』なんてのを書きましたが。
実際に使ってみたら、そんな処理はいらないと思った。- 上記したように、持続時間は固定ではない&わりとすぐ消えてしまうため。
- Lv5だとクールタイム3秒。3体以上の敵が周囲にいれば、クールタイム中に持続終了。
2体でも4秒なので、1秒しか待ちがない。
実質的に、クールタイムだけで困らないと思われる。
ご意見などがあれば。
2015/3/22 (日)
雑記:傭兵AI†
魔人の塔まわりで。
公式で『RO\AIディレクトリのAIいじるとエラーになるかも』的告知があったので。
ちょっといじってみて、絶望しています。
とりあえず、状況あらすじ。
- 公式ページで
『支援キャラクター(傭兵)を召喚した際、「AI」に関するエラーメッセージが表示されゲームが進行できなくなってしまう現象についてご案内いたします。』という告知がありました。- 日本では未実装ですが、開発元の韓国では『お金で一定時間やとえる傭兵』というのが実装されていまして。
- で、日本でも現状、一部のクエストでこのシステムを使った『協力してくれるNPC』が動いている、という状況です。
クエスト中に雇う→1時間ついてくる。クエスト終わっても時間内なら一緒に戦ってくれる。 - Glenelgは USER_AIの中にあるから、上記のエラー現象には直接関係ないけど。
既存の公式傭兵AIっていわゆる『デフォルトホムAI』と同じなので、ぶっちゃけアレなのです。- デフォルトパッシブ索敵。
アクティブ索敵は横殴り上等・・・など。
- デフォルトパッシブ索敵。
- 日本では未実装ですが、開発元の韓国では『お金で一定時間やとえる傭兵』というのが実装されていまして。
- んで、仕方ないんで、横殴り阻止判定だけ組み込んでやろうと思ったのですが。
とりあえず現状、クライアント都合で動いてません。- 端的に言うと『C stack overflow』とエラーが出てまして。
要はROクライアント側で、傭兵AI用のメモリ空間をあまり持っていないと推察されます。 - 組み込んだのは『Glenelgで登録済の友達ファイルを読み込む』処理と、
『それに基づく横殴り判定』のみなんですが。
- ちなみにホムを使って動作確認済の状態で実施したので、とんでもないポカをしていないかぎり傭兵AIシステム固有の都合。
- なんとなく、ファイルI/O系が悪いのかなぁ、とかは思ったり。
- 端的に言うと『C stack overflow』とエラーが出てまして。
ともあれ、実地確認するにはソロでクエスト終盤をやらなきゃならんので、結構大変です。
自己フォロー。
いろいろ試してみてわかったのは、いわゆる『AIエラー落ち防止』の try〜catch がダメっぽい。
それを外して素でAIをコールするようにしたら、Friend.ini も読めるようになった。
というわけで、とりあえずそれっぽくはなったけど、さ。
ロキ、攻撃スピードがあまりに遅くて、実戦戦力にならんわ(笑)
さらにちなみに。
敵ボスの防御無力化のマインドブレイカー、クールタイムが30秒くらいあるみたいです。
で、無効化時間はせいぜい15秒くらいなんで、どうしても途中無力化できていない時間が発生します。
これも厳しいところ。
ご意見などがあれば。
2015/3/11 (水)
雑記:Ragfun.net、死亡。†
っぽいです。
ウェブページが死亡してアクセスできなくなるなんてのは、当たり前にある話ですが。
今回の場合は、またちょっと違う意味で考えさせられた。
なんというか、動的ページと、wikiシステムの問題点を突き付けられた感じ。
このサーバ、アルケミwikiとSage wikiがあったところです。
つまり、wikiによって集まった集合知がそっくりロストした、ということ。
これは、いろいろとダメージが大きい。
なんていうのかな・・・例えば友瀬の本館and/or別館だって、いつかはなくなるでしょう。
友瀬が契約・運営している以上それは仕方ないところだと思う。
友瀬が必要で記述して、友瀬が運営できなくなったから消えただけ。
でも、wikiの場合は、いろいろと事情が違う。
あくまで一参加者とはいえ、それなりに労力を払って提供した情報が。
こちらとしては維持される前提で考えているところを、いきなり破棄される。
これは痛い。
また、wiki他の動的ページは、ローカルにバックアップすることも難しい、という問題点もある。
これを知って、他のwiki系ページの有用情報をバックアップしようと思っても、難しいわけだ。
普通のページなら頼りになるWebarchiveも、wiki系にはまず無力。
ともあれ、いろいろ困ったねぇ。
ご意見などがあれば。
ホムAI:サモンレギオンの使用タイミング†
サモンレギオンを、考えていて。
現状のGlenelgではイマイチな感じなので、パラメータ拡張を検討中です。
サモンレギオンは使用すると仲間モンスターを召喚、
それが数十秒にわたって一緒に攻撃してくれる、というスキルです。
仲間モンスターは、多少のクセがあるものの、基本的にホムSと同じ対象に対して
自動的に攻撃を行います。
ですからこのスキルの基本的な使い方は、1回スキル使用して召喚したら、
以後それが消えるまでホムSは普通に白兵戦を行う、というかたちになります。
ところで、このスキル自体にはディレイ・クールタイムはありません:
そのため、使おうと思えば1体の敵に対して何度でも使用できます。
そして使用するたびに、以前の仲間モンスターが消失&新しいモンスターが出てきます。
という条件を整理したところ、現状のGlenelgではうまく指定できないことに気付いた、という状況です。
- 基本的に「1回だけしか使わない」ようにしたい。
- 実現案:初撃スキルに割り当ててもらう。
これによって、ある敵に攻撃を仕掛けようとしたときに召喚、以降それを使わない。- この場合の問題点:その敵を倒したあと、次の敵に移ったとき。
- 初撃スキルなので、現状のままだと『即次のサモンレギオンを使用』してしまう:ちょっともったいない。
Lv5レギオンなら約1分間持続するので、もし10数秒で1体目を倒したのならば、次の1体くらいはそのまま戦いたい。
- 実現案:クールタイムを設定し、前の仲間が残っているうちは次のレギオンを使用しないようにする。
- この場合の問題点:レギオン待ちしていると、他のスキルを使ってくれない。
- レギオンを出した&1体目を倒した後を考える。
新しい敵を対象にしたので、セラはレギオンを使おうと考える・・・が、前のレギオンが残っているので使わない。 - この状態だと、現状のGlenelgは「このAIサイクルではスキルを使わない」ように振舞ってしまう。
従来の比較的短いクールタイムのスキルならよいが、今回のレギオンの場合まずい:
前の仲間が残っているかぎり、ニードルオブパラライズも使えない。
- 実現案:初撃スキルに割り当ててもらう。
このあたりを考慮すると、以下のようなオプションが考えられそう。
- レギオン用オプション:仲間が残っているときは、それを使わない。
- 初撃スキルであればそれを使わず、他設定を参照してメイン・サブスキルを使う。
- メイン・サブスキルであれば、他設定を参照してサブ・メインスキルを使う。
- レギオン用オプション:再使用条件
- 戦闘時間を計測して、ある程度レギオンを有効利用するまで次を呼ばない。
- その戦闘時間のリミットを設定。例えば「80%まではひっぱる」というような。
自分で読んでみてわかりづらかったので、整理して追記。
根本的ポイントは、現状のGlenelgの攻撃スキル決定アルゴリズムにあります。
現状の振る舞いは、ざっくりいうと以下のようになっています。
- Step 1. 設定に基づいて、使用したいスキルを選定する
- Step 2. 上記で決定したスキルが、実際に使えるかどうか確認し、ダメなら『このAIサイクルではあきらめる』。
例えば初撃スキルにシュタルホーン、メインスキルにムーンライトを設定してあるとします。
この設定でGlenelgが新しい敵に攻撃を開始した場合、Glenelgはまずシュタルホーンを使用しようとします。
もしシュタルホーンがクールタイム中だった場合、Glenelgはそれでもシュタルホーンから使用しようとします:
結果、ホムの振る舞いとしては『まず白兵戦→シュタルホーン→ムーンライト』というように動きます。
『初撃スキル』といい定義からすればこれで間違っていませんし、
シュタルホーン他、クールタイムが短いスキルならばこれでもそれほど違和感はないのですが。
レギオンの場合そううまくいかないわけです:
例えば初撃レギオン、メインスキルにニードルを入れていた場合。
もし最初の1体を10秒で倒してしまうと、次の2体目では『まずレギオンを使おうとするが、
仲間が残っているのであきらめる』となり。
結果、『白兵戦継続→約50秒後レギオン→ニードル』となるわけです。
そういう意味で、スキル選定アルゴ自体を、以下のようにしていかなければならないのかな、と。
- Step 1. 設定に基づいて、使用したいスキルを選定する
- Step 2. 選定されたスキルが、実際に使えるかどうか確認し、ダメなら Step3へ。
- Step 3. Step 2でダメ判定されたスキルを除外して、改めて設定に基づいてより優先されるスキルを選定する。
その後Step2に戻る。
これによって『初撃ニードル→白兵戦・ASニードル→50秒後レギオン再使用』・・・という感じになります。
繰り返しますが『初撃専用スキル』の定義からすれば、やや逸脱しているので、何か特殊な設定、という感じですね。
ご意見などがあれば。
2015/3/7 (土)
雑記:DDFまとめ。†
表記、終わったことでもあるので、簡単に。
DD自体は何度か開催されているイベントですが。
今回のDDは「いつもの」の部分と「今回特別」の部分があったので、順にいきます。
「いつもの」部分。†
いつもの、討伐型イベント。
例年通り、スーパーポリン軍団乱獲祭りでした(笑)
キャラのレベルも上がったので、別のマップも少し試したのですが。
敵が少なくあまり面白くなかった&効率も悪かったので、結局ポリン軍団モード。
「いつもの」とはいえ、いろいろ変わったこともあるので、以下散文的に。
- 敵構成の変更。
- 「レイリン」御役御免。
- おととしのDDでは ADS狩の対象だったタイプですが。
去年はADSでも一撃で倒せず、放置状態になり。
今年はとうとう、いなくなりました。- ちなみにこれのお株だった『サンクチュアリ温泉』は、 ラキリンに引越しされました。
- 新人、「ガチポ」。
- 物理攻撃は「最大1」、かつ聖属性で魔法も効きづらい。
- 闇魔法のあるウォーロックが狩っていた様子。
- 敵自体の経験値ゼロに。
- ある意味、一番大きな変更。
- 心理的に非公平パーティを組みやすくなったのが、大きい。
- 以前は敵自体の経験値もけっこう大きかったので、 少なくとも『野良パーティ』をするに限っては、公平にしたかった。
- 「ついでに関係ない敵を倒す」ことに意味がなくなったのは、ちょっと残念。
- デッドラゴラ、弱体化
- 攻撃力・攻撃速度が低下して、かなり弱くなった。
- 以前は『足元わきされたら死ぬ』敵で、遠距離攻撃で倒すくらいしか選択肢がなかった。
- 今回は、ある程度の火力を持って一気に倒せるならば、接近戦でも十分倒せる相手に。
- 事実友瀬&知人PTでは、ギロクロやジェネでまわしていた。
- 倒せるならば、討伐数が他より少ない分、早くまわせてうれしい。
「今回特別」部分。†
- ボス討伐イベント
- 今回のDDは、間にバレンタインをはさんだ2部構成で。
ストーリー的には
『前半、(主催関係者を騙った)NPCたちがお披露目』
『後半、騙りが発覚→それを倒したあと本来の主催者によるご褒美』
・・・というような感じでした。 - この後半日程の最初期に、騙りNPCたちを倒すイベントがありました。
これを倒さないと、DD狩りが再開できない、という条件。 - 騙りNPCはいわゆるボスで、専用マップでの戦闘。
この際、ボスごとに戦える職業2つが限定されていたのが特徴的。- でもまあ、友瀬はこれに参加できなかったのですが〜(笑)
- 今回のDDは、間にバレンタインをはさんだ2部構成で。
- カシャプリ。
- タイトルだけだとよくわからんな(笑)
- 前述の構成でいうならば。
『前半の騙りNPC主催のときは、以前と同じレベルの報酬』
『後半の本物主催者のときは、上記に加えてランダム報酬がもらえる』
というもの。- この後者のランダム処理が「カシャカシャプリンセス」とかネーミングされていたのです。
- ランダム報酬は、以下のいずれか。
- レア:いわゆる『すごい』武器。
- アンコモン:コインホルダー1個分のコイン。
- コモン:通常報酬でもらえるアイテム群から1種類がランダム選択&通常報酬の半分量。
- また、アルケミ系は、上記の「ランダム報酬」の代わりに「ホムの好感度+30」を選ぶことができた。
友瀬的な結果。†
なんとなくわかるかと思いますが。
友瀬的には「ホム好感度」がものすごく大きくて。
後半は、これのためにアルケミばかり動かしてました。
2PC牽引 and 友人PTで牽引・共闘。
結果、以前からいたリーフ&新規作成したバニルとも、奥義を覚えた上でホムSになりました。
これで友瀬が持っていなかったホムS:セラとディータもでき、5種類全部がそろったことになります。
DDの仕組み上ホムの経験値はぜんぜん稼げてないから、 AI検討・設計・テストできるのは、当分先だけどな〜(笑)
ご意見などがあれば。
ホムAI:セラとディータ、もやっと検討。†
DD記事に書いたとおり、友瀬陣営にセラ&ディータが生まれました。
まだホムSスキルは一切取得できていないので、即なにか、ということはないですが。
現時点でわかっている検討・対応予定の項目について、簡単にメモしておきます。
- サモンレギオン、ターゲット調整
- サモンレギオンは『味方となる昆虫を多数呼び出してみんなで攻撃』というもの。
この『味方昆虫』のターゲットに絡んで、特殊な処理がいるっぽい。 - ホムが実装されたころ、『ホムがでているとアクティブ敵が立ち止まった状態になる』的な話があった:
あれは『その敵が(画面外の)ホムIDに反応してそれに対して動こうとしている』状態と思われた。
どうやら、それと同じ状態が『味方昆虫』におきるらしい: 攻撃対象の敵が倒れると、『画面内にいないそのIDの敵』を攻撃しようとして止まる。 - たぶん『IDゼロに対してAttack』とかすればいいんだと思う。
まずは現象観測してから、かな。
- サモンレギオンは『味方となる昆虫を多数呼び出してみんなで攻撃』というもの。
- 『持続する攻撃エリア』を作るタイプのスキル。
- 実は両方のホムSが持っている。
セラのポイズンミスト。
ディータのボルカニックアッシュ&ラーヴァスライド。 - 使用に関しては、基本『地面指定の範囲攻撃』として、エイラのゼノスラッシャーアルゴを使える。
場の持続時間をクールタイムにすることで、問題ないだろう。 - スキル使用後の動作検討・対応が必要。
展開した場を利用して戦闘することになるので、『その近辺で戦う』という意味でシュタルホーンに似た話。
- 実は両方のホムSが持っている。
- セラ、ペインキラー。
- 『対象指定する金剛』のようなスキル。
対象は、攻撃速度が落ちる代わりに数百単位の減算DEFがつく。 - 一種の強化スキルなのでそこに割り振るのが妥当には思う。
- 『ボスケミ以外のPCにも使える』のが悩みどころ。
例えば『単発大火力・壁的な戦士系』『物理攻撃しないInt系後列』に使用し続ける、という可能性がある。
つーかこういう構成の場合ボスケミはむしろかけちゃいけない対象のような。- これを実現するには『複数の持続時間管理』が必要になるのが問題。
- 妥協して、誰か1人の時間管理していっせいにかける、という動きが簡単でよいかも。
- これを実現するには『複数の持続時間管理』が必要になるのが問題。
- 『対象指定する金剛』のようなスキル。
ご意見などがあれば。