2006年03月15日

Luaのお勉強

Sakrayにはホムンクルス(Homunculus)が実装され、jROでも本日実装されたようですね〜

iROの通常鯖にはまだきていませんが、Sakrayのパッチを当てるとホムンクルスAI(人工知能)ファイルと説明書を入手できます。
説明書は英語ですけどねorz

ちなみにこのホムンクルスのAIは、LUA言語というもので出来ているそうです。
AIフォルダの下にUSER_AIフォルダが出来、そちらにカスタマイズできるLUAファイルがあるので、こちらの中身をカスタマイズすることで、いろいろな動作をさせることが出来るようです。
ちょっと気が早いかもしれませんが、今のうちにLUA言語というものについて調べてみました。

LUA言語というのはプログラミング言語の一種で、汎用的な言語だそうです。
専門的なことは私にはさっぱりですが、ホムンクルスの行動をカスタマイズするためには、多少は知っておかないとまずいのかも??

と言う事で、日本語のLUA言語リファレンスの紹介があったので引っ張ってきました。



orz
えーと、専門用語がいっぱいでなにがなにやらさっぱりです。。。

言語のことはよくわからなかったのですが、AIの中身の動作は以下のようになっているとのこと。

*****AIの処理一覧*****
AI(myid) -- ホムンクルスAIメイン処理
enemyid = GetMyEnemy(myid) -- ホムの敵を取得する
enemyid = GetMyEnemyA(myid) -- 敵取得タイプA(LIFかAMISTR)
enemyid = GetMyEnemyB(myid) -- 敵取得タイプB(FILIRかVANILMIRTH)
enemyid = GetOwnerEnemy(myid) -- アルケミを攻撃している敵のうちホムから一番近い敵のキャラクターidを取得する
OnATTACK_AREA_CMD(x,y) -- 対象指定攻撃コマンドを受け付けた場合の処理
OnATTACK_AREA_CMD_ST() -- 範囲攻撃コマンド受付状態の処理
OnATTACK_ST() -- 攻撃状態の処理
OnATTACT_OBJET_CMD(id) -- 対象指定攻撃コマンドを受け付けた場合の処理
OnATTACT_OBJET_CMD_ST() -- 対象指定攻撃コマンド受付状態の処理
OnCHASE_ST() -- ターゲット追跡状態の処理
OnEAT_CMD() -- 餌コマンドを受け付けた場合の処理
OnEAT_CMD_ST() -- 餌コマンド受付状態の処理
OnFOLLOW_CMD() -- 追従コマンドを受け付けた場合の処理
OnFOLLOW_CMD_ST() -- 追従コマンド受付状態の処理
OnFOLLOW_ST() -- 追従状態の処理
OnHOLD_CMD() -- ホールドコマンドを受け付けた場合の処理
OnHOLD_CMD_ST() -- ホールドコマンド受付状態の処理。敵を順番に攻撃する
OnIDLE_ST() -- 待機状態の処理
OnMOVE_CMD(x,y) -- 移動コマンドを受け付けた場合の処理
OnMOVE_CMD_ST() -- 移動コマンド受付状態の処理
OnPATROL_CMD(x,y) -- パトロールコマンドを受け付けた場合の処理
OnPATROL_CMD_ST() -- パトロールコマンド受付状態の処理
OnSKILL_AREA_CMD(level,skill,x,y) -- 範囲スキルコマンドを受け付けた場合の処理
OnSKILL_AREA_CMD_ST() -- 範囲スキルコマンド受付状態の処理
OnSKILL_OBJECT_CMD_ST() -- 対象指定スキルコマンド受付状態の処理
OnSKILL_OBJET_CMD(level,skill,id) -- 対象指定スキルコマンドを受け付けた場合の処理
OnSTOP_CMD() -- 停止コマンドを受け付けた場合の処理
OnSTOP_CMD_ST() -- 停止コマンド受付状態の処理
ProcessCommand(msg) -- コマンド入力の振り分け処理
*****以上終わり*****

こちらの中で、すぐに役立ちそうな変更といえば、フィーリルやバニルミルトのモンスター攻撃制御ですね。
こちら二つのホムンクルスはデフォルトの設定ですと、ActiveMobと同じ動きをする(近くにMobがいると勝手に戦い始める)ため、リーフやアミストルと同じように、ホム自身が攻撃を受けるか、アルケミが攻撃を受けるまで待機をさせるためには、GetMyEnemyの中の処理を変える必要があるそうです。

GetMyEnemyの中に以下の一文があるのですが、
elseif (type == FILIR or type == FILIR_H or type == VANILMIRTH or type == VANILMIRTH_H) then
result = GetMyEnemyB (myid) -- 敵取得タイプB(先攻型)
end
こちらのGetMyEnemyBをGetMyEnemyAの敵取得タイプA(非先攻型)にすることで、勝手な横殴りをしなくなるそうです。
鳥さんやスライムさんのホムンクルスを使う方は、知っておくといいかもしれませんね〜

あ、ちなみにデフォルトの設定から、USER_AIフォルダにあるAIファイルの動作に切り替えるためには、ROの中で"/hoai"と入力してリログすることで変更できるそうです。

上記は全部jROからの受け売りですが、iROでもそのまま使えると思います。
まだまだ勉強不足ですが、せめてAIファイルの中に書いてあることは理解できるようになりたいな〜
次回があるかどうかはわかりませんが、ホムンクルスが来たらまたいろいろさわってみようと思いますっ
皆さんもよいAlchemistLifeを〜cya^^
posted by kira at 00:09| Comment(0) | TrackBack(0) | iRO | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:


この記事へのトラックバック
×

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