2007年09月04日

Chat Command Library version 0.4

Download CCL version 0.4

・ホムンクルス・傭兵に命令出来るようにするライブラリです。
・各種AIに数行追加するだけで使えるようになります。
・chatを「名前空間」として予約します。

詳細は、チャットコマンドライブラリ解説書を参照してください。

このライブラリをデバッグするために作成したライブラリも添えておきます。
テーブルの内容を直接書き出したり、保存したりする関数もあります。(以前作成したsetini.lua
の上位互換みたいなもの)

標準追加ライブラリ
テーブル保存・読出関数
テーブル保存・読出関数テストファイル
続きを読む
posted by silica at 21:01| Comment(0) | TrackBack(0) | チャットコマンド | このブログの読者になる | 更新情報をチェックする

2007年08月14日

標準拡張ライブラリ。

チャットコマンドライブラリのために足りない標準ライブラリや
追加ライブラリ table.lua を作成しました。

table.sort以外は全て再現してあります。
一番苦労したのはtable.concatです。
Luaマニュアルの通りに動くように色々修正しました。
それと、ファイルコピーos.copyと、0バイトファイル作成os.touchprintfsprintfなどを追加しています。

そしてそのライブラリを使ってROクライアントのデータを
抜き取るプログラムを作り直しました。

http://winter.sgv417.jp/alchemy/download/lib/

mobcsv.lua mobdata.luaの中身をCSV形式に出力します。
table.lua Lua標準ライブラリと拡張です。
gcinfo.lua gcinfo()で取れるデータ(メモリなど)を出力します。
gcinfo_lua502.txt Lua5.02日本語化パッチ適用済の内部情報
gcinfo_AI.txt ROクライアントの内部情報
getfenv.lua getfenv(1)で取れるデータを型毎に分けます。
getfenv_lua502.txt Lua5.02日本語化パッチ適用済の内部情報
getfenv_AI.txt ROクライアントの内部情報

※どちらも、table.luaの関数が混じっていますのでそれを差し引いてください。

調べてわかったことは、ROクライアント仕様にまとめました。

以後は予定です。現時点では旧バージョンしか置いてありません。
チャットコマンドライブラリは、標準追加ライブラリが足りないと作るのが大変だと痛感させられました。

解説書:
http://pc3merchant.net/ai_antenna/?AI%BB%F1%CE%C1%2FCCL

ダウンロード:
http://winter.sgv417.jp/alchemy/download/chat/

現時点ではテーブル型関数 chat を定義して使う形を目指しています。
最終的にテーブル io のファイルディスクリプタと同じ使い方が
可能になるようにする予定です。
posted by silica at 20:48| Comment(0) | TrackBack(0) | チャットコマンド | このブログの読者になる | 更新情報をチェックする

2007年07月21日

AI命令ライブラリ。

レーサーAIや工体AIで実現したかったことが終わり、
ようやくホム命令ライブラリについて考え直す時間が取れそうです。

最後に出してから1年近く。
傭兵もAIで制御できるようになるとのこと。

ホム命令ライブラリの制御相手がホムだけではなく、傭兵も
含まれるようになるため、名前を変えるつもりです。
友瀬さんのGlenelgに組み込まれたホム命令ライブラリを参考に
一から再設計するつもりなのもあってそう思いました。

HCL: Homunculus Command Library

AICL: AI Command Library

にしようかな〜、と。

実体は/savechatとログファイルの扱い、
ログファイル内のコマンド解析と実行になります。

現在は、Luaのェクト指向を実際に使って実装を試しています。
そして、AI人力アンテナ+比較表のWikiを利用して説明書を作成する予定です。

マニュアル、説明、メモをまとめる際にWikiを使うとお手軽に
スマートにまとまって本当に便利ですね。
posted by silica at 20:48| Comment(0) | TrackBack(0) | チャットコマンド | このブログの読者になる | 更新情報をチェックする

2007年01月27日

ライブラリ設計に対する雑感。

AIライブラリを設計する時、色々なAIを見て参考にしたりしているのですが
こういうプログラムはあまり参考にならないです。
なぜなら、そのまま持ってきても意図したとおりに動かないからです。

関数内からグローバル変数を参照(変わらない定数はOK)

一番参考になるのは、友瀬さんのGlenelgで再利用しやすい関数がいっぱいあります。
最もひどい例は標準AIです。
状態遷移をグローバル変数で管理するために、再利用が出来ない関数が多数。

それと、今回のレーサーAIみたいな使用用途が激しく限定されるようなもの以外は
結局他のAIで十分と思うことが多く、独自AIを作るだけの価値はあまり感じていません。
ですが、独自にこれはほしいと思える機能などは色々ありそれを
使えるように既存のAIを改造したりしています。
しかし…改造しても既存AIがバージョンアップしたりして変わると、それを
追いかけていくのも大変です。
それで、改造した部分のみお手軽に持っていけるようにすることを考えると
結局独自ライブラリを作り、決まった関数を数行呼び出すだけで
出来るようにした方が楽になるでしょう。
各AIに依存する部分を極力減らせば、どのAIにも使えるように出来るという
利点もあります。

そのためには、冒頭にも書いたとおり以下の方向で考えていくと使いまわしやすく
感じます。

・関数内にグローバル変数を使わない
・関数の出入力を明確にする
・大抵のAIが持っている機能があればそれを利用するように設計

ホム命令ライブラリの場合で考えると:
・特定の会話があれば、特定の状態を実行させる通知を発行
具体的例)
画面内の検索(プレイヤー・オブジェクトなど)をチャットで入力。
→候補に当てはまるものがあれば、そこの周りまで移動しくるくる回る

「くるくる回る。」というのは既にあるAIに実装しようとした場合
既存の機能と相互干渉して上手く行かなくなります。

そのための対策として、機能をさらに細かく分けて以下のようにすると
元となるAI自体の改造労力を減らせると思います。

それぞれの条件に合ったら改造元のAIに通知を送る

改造元のAIは、その通知に合わせた状態遷移に移行するように数行変更
posted by silica at 19:26| Comment(0) | TrackBack(0) | チャットコマンド | このブログの読者になる | 更新情報をチェックする

2006年12月09日

使う側の立場になってみると。

ホムAIのコンパイルについては一通り調べてまとめ終わり、
工体AI私的修正版に反映させました。

ここから、ホムAIについての考えです。
設計思想を使う側に押し付けるのは、特に理由がない限り、
するべきではないと思っています。

ただし、悪用されるのが確実ならば対策はもちろん取るべきです。
その点で、ホムAIはケミスキルを全てはじくのが普通だと思う
のですが…。(一般的な常識による推察)
つまり、ホムAIからアルケミストのスキルを操作できること自体が
普通はありえません。

チェック方法は、本当に簡単なのですよ。
ホムスキルID8001〜8016番だけを受け付ける。たったこれだけです。

こんな簡単な対策を、重力と癌はなぜいつまでもしないのでしょうか?
他の危険な操作も同様です。
それなら、できることはやってもいいと受け取っても構わないように見えてしまいます。

なお、アルケミストスキルをホムAIから使用する場合、
最大の問題点が自動使用となります。(これでは手間を省かせるツールと
一緒になってしまいます。)

これに対しては、ホムスキル以外は強制的にディレイ1〜10秒を追加、
と言う形を考えています。
例えばこれによりケミスキルは、一定時間経つまで連打できなくなります。

ただし、自動PPなど既にあるAIの機能に勝手な制限をつけるのも
他のAI作者に失礼ですね。
そのため、自動PP以外のスキル全体を考えています。
自動PPに関してはそれこそ、各自判断のほうがいいでしょうし。
posted by silica at 00:50| Comment(0) | TrackBack(0) | チャットコマンド | このブログの読者になる | 更新情報をチェックする

2006年12月04日

まとめて、こんぱいる。

luacに新たなオプションがあることをさらに知りました。
-s で、デバッグ情報を削除できるそうです。
C:\Program Files\Gravity\RagnarokOnline\AI> luac -s -o コンパイル後のAIファイル 元AIファイルAI.lua
具体的例:
C:\Program Files\Gravity\RagnarokOnline\AI> luac -s -o AI.lua src\AI.lua

しかもこれは、コメントアウトしたものは全部削除済みでした。
-sオプションを使わずにコンパイルすると、ファイルサイズは(デバッグ情報を含むために)増えます。
使うと、逆に元のAIファイルより小さくなります。
そして、そのコンパイルを楽にするバッチファイルを作成しました。
良ければ活用してください。ついでに以下はsrcフォルダにAIファイルが
全部入っているものと考えています。

makefile.bat:
@REM AI makefile(コンパイル用)
@echo off

if "%1"=="" goto current
:else
cd %1
:current
for %%x in (src/*.lua) do luac -s -o %%x src/%%x

ディレクトリツリー:
AI/makefile.bat
AI/src/*.lua

makefile.batをダブルクリック実行するだけでluaファイルをコンパイルしたものを
AI/ フォルダに作成出来る様になります。

参考:
http://www.nara-su.ac.jp/~takeyama/material/msdos/dos_96.htm
日本語版 Lua 5.02
http://homepage2.nifty.com/kujira_niku/okayu/lua.html
日本語版 Lua 5.02 ミラー
http://winter.sgv417.jp/alchemy/download/Lua502J.zip
http://winter.sgv417.jp/alchemy/download/Lua502J_src.zip
posted by silica at 23:08| Comment(8) | TrackBack(1) | チャットコマンド | このブログの読者になる | 更新情報をチェックする

2006年12月02日

ホム命令ライブラリの設計めも。

・table.getn(t): 配列・ハッシュの長さを取得
工体AI作者ライブラリ table.luaを利用

・剰余 % 演算子の定義(Lua5.1の場合)
a % b == a - math.floor(a/b)*b

昔、安っぽい人との話のやり取りでソースコードをわざと読みづらくするというやり方があり、それを適用したスクリプトがありました。
他のやり方としては、luacで直接コンパイルというやり方が手っ取り早いと思います。
(しかもファイル名を元の名前に変えれば、そっくりそのまま置き換え可能です!)

元のAIファイルをコンパイルしたものと置き換えるには以下のようにします。
C:\Program Files\Gravity\RagnarokOnline\AI> luac -o AI.lua AI.lua

コンパイルされたAIスクリプトは、中身が分かりづらいブラックボックスになります。
ただし、ブラックボックスは最小限にしておきたいものです。
そして、ページ/ブログを持っているAI開発者のみに限定公開する方針にしたいと思ってます。

理由としては、将来ホム命令ライブラリでケミスキルを扱う考えだからです。
このようにブラックボックス化することでケミスキルを自動化するという
やり方に出来る限り制限加えたいと思ってます。
もう一つ関数自体の書き換えが可能であれば、os.remove関数を書き換えて
絶対パス、相対パスを受け付けないようにする(データ汚染対策)と言うのもよさそうですね。

#解析すれば分かるレベルの人は、そもそも自力で出来ると思うので
#考慮に入れていません。

と書いてて気づいたこと。
AI入れた後に、AIをコンパイルしたものと自動で置き換えるスクリプトもBATファイルなどで提供可能なのでは、と思いました。
これを応用したやり方は、AIソースコードからコンパイルしたものを自動でインストールと言ったようなものです。
posted by silica at 23:32| Comment(2) | TrackBack(0) | チャットコマンド | このブログの読者になる | 更新情報をチェックする

2006年09月09日

#1 仕様書作成。

ホム命令ライブラリの話題が多いのでカテゴリを作りました。

個人的には分かりやすく「ポケモントレーナーライブラリ」としたいな…
べ、別にポケモンを連想したわけじゃないからね!

著作権にまずいという話もありますが…正式の名前にするかはまだ考えてませんし、
わかりやすいほうがいいかな〜と;

最初に構造を考えてから、問題点の対策を考えた設計をしていくつもりです。

ホム命令ライブラリ: AI/HCL - AI機能比較表+人力アンテナ

AI人力アンテナを勝手に借りて色々書いていきます。
考えをブログにあれこれ書くよりもWikiでまとめた方が色々便利かなと思ったからです。
ついでに仕組み説明、マニュアルページにしていく予定です。

※AI資料/HCLとしないのは、英語圏の人に見てもらう場合「資料」が読めないかもと思ったからです。

posted by silica at 14:19| Comment(0) | TrackBack(0) | チャットコマンド | このブログの読者になる | 更新情報をチェックする

広告


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

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

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


×

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