AI Tips Edit

覚え書きやちょっとしたネタなど。

AI関連 Edit

コマンド Edit

  • /hoai
    AI切り替えコマンド。
    インストールフォルダ以下の AI/AI.lua と AI/USER_AI/AI.lua を切り替える。
    USER_AIフォルダとそれ以下に AI.lua が必要。
  • /traceai
    ログ出力のON/OFFコマンド。
    TraceAI()関数に送られた文字列をインストールフォルダの TraceAI.txt に出力する。

Move()とMoveToOwner()の違い Edit

Move()関数は指定した座標への直線やくの字の経路を移動させられるが、
MoveToOwner()はある程度の障害物があってもそれを迂回することができ、
目的地も「主人のすぐ近く」というだけで決まった場所に移動するわけではない、
このため以下のような現象が起きる。

  • ある程度入り組んだ場所からでもMoveToOwner()で呼び戻せる
  • 主人の移動中にMoveToOwnerを呼ぶと蛇行して追従が遅れる

トリガー Edit

  • ALT+T
    GetMsg に {FOLLOW_CMD} のテーブル形式で取得できる。

  • ALT+敵ダブルクリック
    GetMsg に {ATTACK_CMD,敵ID} のテーブル形式で取得できる。

  • ALT+SHIFT+対象ダブルクリック
    GetResMsg に {ATTACK_CMD,対象ID} のテーブル形式で取得できる。
    敵に限らず一般フィールドのプレイヤーなども取得できる。

  • ALT+地面クリック
    GetMsg に {MOVE_CMD,X座標,Y座標} のテーブル形式で取得できる。

  • ALT+SHIFT+地面クリック
    GetResMsg に {MOVE_CMD,X座標,Y座標} のテーブル形式で取得できる。

  • 対象指定スキル使用
    カプリス、ムーンライト、SBR44の使用時には
    GetMsg に {SKILL_OBJECT_CMD,スキルレベル、対象ID} の形式で取得できる。
    それ以外のスキルを使っても GetMsg は無反応。

  • 主人の立ち/座り
    GetV(V_MOTION,主人のID) で取得できる。

Lua関連 Edit

真偽値 Edit

C言語やPerlと違い、Luaは値の0も「真」と判断する。
そのため以下のような構文では常に answer の値が10になる。

flag = 0
if flag then
	answer = 10
else
	answer = 20
end

answer を 20にしたければ flag の値に falsenil を代入する。
Lua で「偽」と判断されるのはこの2つだけである。

false, nil
数値 テーブル 関数 文字列 偽以外のすべて

関数の代入 Edit

以下の2つの構文は同じ意味を持つ。

function Add(x,y)
	return x + y
end


Add = function (x,y) return x + y end

Luaにとっての関数定義とはその名前の変数に処理する内容を代入している。
この応用で、動的に関数の内容を変更することもできる。
ただし、この意味がわからない場合は無闇に使わないほうがよい。

ipairs と pairs の違い Edit

テーブルの内容を受け取り処理する際に ipairs がよく使われるが
ipairs はテーブルのキーが 1 から順番に増加していき、要素が nilになった時点で終了する。
また、マイナスの数値やゼロ、文字列のキーは無視される。

t1 = { [-1]="z", [1]="A", [2]="B", [3]="C", [5]="E", [10]="J",["xyz"]="1", }
t2 = {}
for i,v in ipairs(t1) do
	t2[i] = v
end

そのため t1 の内容を t2 にコピーしている上のプログラムは
i が 4 になると t1[4] の内容が存在しない(nil)のためそれ以降のループは行わない。
t2 の内容は { [1]="A",[2]="B",[3]="C" } だけとなる。
すべてを t2 にコピーしたい場合は pairs を使う。
pairs は順番は必ずしも 1 から始まらないが、全ての要素を処理してからループが終わるので

t1 = { [-1]="z", [1]="A", [2]="B", [3]="C", [5]="E", [10]="J",["xyz"]="1", }
t2 = {}
for i,v in pairs(t1) do
	t2[i] = v
end

この場合の t2 の内容は t1 と同じになる。
これは例えば、モンスターのIDのようなランダムなキーを用いたテーブルを処理する場合などに使える。

複数行コメントアウト仕様 Edit

--[[の左に''-''を1文字付け加えるだけで複数行コメントアウトを
有効にしたり、無効にしたりできる。
  • 複数行コメントアウト有効
    --[[
     文1
     文2
    --]]
  • 複数行コメントアウト無効
    ---[[
     文1
     文2
    --]]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-08-30 Thu 19:41:00 JST