2008年12月23日

mathライブラリは遅い?

可能な限りAIの人が昔そう語っていたのを思い出しました。
それについて実際に検証していきます。

math.absを例に取り上げると:

math.absはmath["abs"]と同等。
mathは関数型の数学関数テーブルです。

print(math["abs"](-1))
--> 1

abs = math.abs
print(abs(-1))
--> 1

テーブルのキーから引くのが遅いだけで、テーブルを経由せずに直接指定すると
逆に高速なことが分かります。

※Luaのソースコードを見たらmath.absはC言語のfabs()を直接呼び出しています。

実行例:
http://subtech.g.hatena.ne.jp/cho45/20070512/1178908536

posted by silica at 17:19| Comment(0) | TrackBack(0) | ホムンクルス | このブログの読者になる | 更新情報をチェックする

2008年06月02日

Chat Command Library version 1.4

Download CCL version 1.4

詳細解説

<変更点>
・what:islistをwhat:istemplateに統合・整理
・what.luaの職業名英語定義をiROのものに差し替えました。
・チェイサー(ストーカー)かどうかを判定する関数を付けました。

今回でようやく、what:*関数を簡潔にまとめることが出来るようになりました。
今後、mobdata.lua以外での更新はほとんどしないと思います。
posted by silica at 22:25| Comment(1) | TrackBack(0) | チャットコマンド | このブログの読者になる | 更新情報をチェックする

2008年05月03日

AIによる金ゴスチェイス対策考察 vol.1

参考:Mercenary - AI機能比較表

最初に雇える傭兵
・6等級(Lv70傭兵)
・使用者がLv65以上
・信頼値不要

Chat Command Library添付のwhat.lua内関数 what:isinchase(GetActors(myid))
で、隠れているチェイサー(大抵はチェイス中)IDリストを得た後
そのIDに対して傭兵やホムはスキルを使うことが出来ます。

現時点で可能なものは、各ホムの以下のスキルです。
リーフ:癒しの手 8001
アミストル:キャッスリング 8005
フィーリル:ムーンライト 8009
バニルミルト:カプリス 8013
偶然にも全部、各ホムの最初のスキルIDになっていますね。

リーフのは赤スリムが必要になりますが、見た目がかなり派手で一番目立ちます。
アミストルは割と目立つ方。
フィーリルは金ゴス相手でも貫通し、あぶり出せます。
バニルミルトは魔法エフェクト(ボルト系、アーススパイク)がちょっと物足りない。

傭兵の場合は以下のスキルが可能性としてあげられます。
弓傭兵Lv70:DSLv7(ムーンライトと同様あぶりだせそう) 8207
剣傭兵Lv70:モンスター情報Lv1(PT全員に存在がわかる) 8237
posted by silica at 22:37| Comment(0) | TrackBack(0) | ホムンクルス | このブログの読者になる | 更新情報をチェックする

傭兵AI

未実装Wiki, AI機能比較表に書き込んだ内容です。

/merai で傭兵デフォルトAIと傭兵カスタムAIを切り替えます。
・最初に雇えるのは最大6等級まで。それ以降は信頼値を上げる必要があります。
・消滅
 30分経過
 傭兵死亡
 主人死亡
・傭兵召還スクロール
 倉庫に入れることができない
 複数購入可能
・専用ポーション
 倉庫に入れることが出来る
 回復剤等は個数指定で購入可能(上限不明)
・10等級の傭兵を雇うのに必要な条件
 信頼値500 (雇うと信頼値が400減少、Zeny不要)
 使用者のLv90以上
・一番使いやすいAI:Azzy傭兵AI - AI機能比較表(最初の傭兵AI、5月3日現在も唯一の傭兵AI)
・モンスター傭兵もAIで動くらしい?
傭兵スキルID - AI機能比較表
V_MOTION - AI機能比較表に忍術、ガンスリンガーのモーションIDを追加。

情報元:らくがき@iRO - 新世界編

追記:
対地指定スキル関数SkillGroundは1年ほど前に実装されていたようです。
オートバイオプラントを実装したAIがありました。
Merry AI v0.3-めり〜さんの日記
posted by silica at 22:18| Comment(0) | TrackBack(0) | ホムンクルス | このブログの読者になる | 更新情報をチェックする

Chat Command Library version 1.3

Download CCL version 1.3

詳細解説

<変更点>
・what:get*()→what:is*()
・what:exist(), what:exist_table()を統合・整理
・what:isinchase()追加(隠れているチェイサーのみを見つける)
・what:h_family()追加(ホムンクルスの種類を判別します)

what.luaで「隠れているチェイサー発見」をサポートしました。
以下の条件を満たすと敵チェイサーだけを見つけ出せるようになります。
・味方チェイサーを登録
・味方チェイサーが隠れないように指示

※フィーリルのムーンライトLv5を使うと、金ゴスチェイス中であろうと確実にあぶり出せるようになります。

また、ホムンクルスの主な4種類別の処理を以下の書き方で楽に
かき分けられるようになります。

function AI(myid)
homtype = what:h_family(myid)
if(homtype == 1) then
-- リーフ用処理
elseif(homtype == 2) then
-- アミストル用処理
elseif(homtype == 3) then
-- フィーリル用処理
elseif(homtype == 4) then
-- バニルミルト用処理
else
-- 未定義ホム用処理
end
end
posted by silica at 22:00| Comment(0) | TrackBack(0) | チャットコマンド | このブログの読者になる | 更新情報をチェックする

2008年04月24日

こめんとれすその2。

Will様>
> ホムの攻撃範囲は29x29と言うことですが、これは東西南北を
> 頂点とした菱形◇と認識しているのですが、合ってますでしょうか。

攻撃範囲ではなくて、AIが動く範囲です。これは正方形です。
攻撃範囲という意味ならば、以下の通りになります。
直接攻撃:以下の範囲+2セル(ホムの攻撃は2セル目まで届きます。)
スキル:以下の範囲+ホム視点から15セル(画面外までは検証していません)

■■■■■■■■■■■■■■14■■■■■■■■■■■■■■
■■■■■■■■■■■■■■13■■■■■■■■■■■■■■
■■■■■■■■■■■■■■12■■■■■■■■■■■■■■
■■■■■■■■■■■■■■11■■■■■■■■■■■■■■
■■■■■■■■■■■■■■10■■■■■■■■■■■■■■
■■■■■■■■■■■■■■09■■■■■■■■■■■■■■
■■■■■■■■■■■■■■08■■■■■■■■■■■■■■
■■■■■■■■■■■■■■07■■■■■■■■■■■■■■
■■■■■■■■■■■■■■06■■■■■■■■■■■■■■
■■■■■■■■■■■■■■05■■■■■■■■■■■■■■
■■■■■■■■■■■■■■04■■■■■■■■■■■■■■
■■■■■■■■■■■■■■03■■■■■■■■■■■■■■
■■■■■■■■■■■■■■02■■■■■■■■■■■■■■
■■■■■■■■■■■■■■01■■■■■■■■■■■■■■
1413121110090807060504030201□0102030405060708091011121314
■■■■■■■■■■■■■■01■■■■■■■■■■■■■■
■■■■■■■■■■■■■■02■■■■■■■■■■■■■■
■■■■■■■■■■■■■■03■■■■■■■■■■■■■■
■■■■■■■■■■■■■■04■■■■■■■■■■■■■■
■■■■■■■■■■■■■■05■■■■■■■■■■■■■■
■■■■■■■■■■■■■■06■■■■■■■■■■■■■■
■■■■■■■■■■■■■■07■■■■■■■■■■■■■■
■■■■■■■■■■■■■■08■■■■■■■■■■■■■■
■■■■■■■■■■■■■■09■■■■■■■■■■■■■■
■■■■■■■■■■■■■■10■■■■■■■■■■■■■■
■■■■■■■■■■■■■■11■■■■■■■■■■■■■■
■■■■■■■■■■■■■■12■■■■■■■■■■■■■■
■■■■■■■■■■■■■■13■■■■■■■■■■■■■■
■■■■■■■■■■■■■■14■■■■■■■■■■■■■■

□:0セル目、主人の位置
■:AIが動く範囲≠AIで攻撃出来る範囲

14セル目に敵、プレイヤーが居た場合ホムが15セル目に押し出されることがあります。
そのとき、AIが止まりホムがスタックします。
そのために探索の標準範囲は12セルとなっています。以下の設定項目です。

SEARCH_DISTANCE = 12,

これの中心は上で示した0セル目となります。
この特性を知った上で、14セルまで設定することに問題はありません。
この場合、AIが止まってホムがスタックする可能性がほんのわずか出る危険性を
承知の上でお願いします。

> また、主人から14セル以遠の件ですが、例えばSEARCH_DISTANCE上で
> 4を設定した場合、4x4の範囲がホムの索敵範囲になるかと思いますが、

SEARCH_DISTANCEは、上にも書いたように主人からの距離です。
念のためailib.luaを見て確認しましたが、この変数は主人と敵の座標を比較していますね。
つまり、標準の12セルは12+1+12の、主人の周り25x25セルがホム攻撃可能範囲となります。

これ以外で敵攻撃優先度の変更をしたい場合は以下の関数をいじれば良さそうと見当を付けています。
ailib.lua
-- 周辺の敵を解析してキャッシュする
function ParseActors( myid, actors, priority )
posted by silica at 19:23| Comment(2) | TrackBack(0) | 工体AI | このブログの読者になる | 更新情報をチェックする

2008年04月19日

攻撃優先度の設定。

will様>
調べてみた結果、モンスター攻撃優先度の変更でしたら既にあります。
config.luaのここにIDを入れてみてはどうですか?

-- モンスターの優先度指定(IDかもしくは名前)※
MONSTER_PRIORITY = { ANY_ID },

以下に例を。複数指定可能です。

-- モンスターの優先度指定(IDかもしくは名前)※
MONSTER_PRIORITY = { 1189 }, -- オークアーチャー

複数のIDを入れるときはコロン , で区切ります。
モンスターIDは、Blue Box - mobID名称一覧で調べることが出来ます。

ホムの攻撃範囲ですが、AIが動くのは主人から14セル以内、主人を中心とした29x29の範囲です。よって、ホムの近くに敵がいても、主人から14セル以遠になった場合は範囲スキルで攻撃するしかありません。(敵の近くに行くとAIが止まります)
posted by silica at 20:07| Comment(1) | TrackBack(0) | 工体AI | このブログの読者になる | 更新情報をチェックする

2008年04月18日

Chat Command Library version 1.2

Download CCL version 1.2

解説

<変更点>
・誤字訂正が主です。
・what.luaだけで、名前識別結果を書き出せるようにしました。
posted by silica at 21:57| Comment(0) | TrackBack(0) | チャットコマンド | このブログの読者になる | 更新情報をチェックする

2008年04月17日

まだまだ間違いが…。

version 1.1 を出したはいいものの、いくつか間違いを見つけてしまいました。
じっくり時間掛けても気づかない間違いっていっぱいあるんですね。。
ただ致命的な間違いはないため、ある程度まとまったら version 1.2 を出すつもりです。

今回と前のバージョンとの違いは、コマンドと、ライブラリを一杯増やしてることです。

機能のまとめ。
・IDが何か、簡単に分かるようになります。
・必要なファイルだけを読み込む方式です。これにより、要らないファイルを入れなくても済みます。
・コマンドプロンプトやLua文実行機能を付けました。
・ライブラリテストによってエラー探しが早くなりました。
posted by silica at 19:53| Comment(0) | TrackBack(0) | チャットコマンド | このブログの読者になる | 更新情報をチェックする

2008年04月15日

こめんとれす。

>will様

返事がかなりおくれてすみません。
忙しかったのとチャットライブラリ完成に全力を尽くしていましたので。。。

遠距離MOB(OD2Fなら、オークアーチャー?)対策ですね。
今よりもう少しましになる方法を、これからゆっくり考えてみます。
ついでに工体AIにチャットコマンドを組み込んで見たいところです。
posted by silica at 22:03| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。