敵が遠ければ近づく、などの処理をするためには、
敵がどこにいるのか、座標を調べる必要があります。
何度も使うことになる基本的な処理は、
簡単に使えるように関数として用意されています。
これらの関数をif文などと組み合わせることで、
自由自在にホムの動きを制御できるわけです。
基本関数の一覧と説明
TraceAI (string)
デバッグ用。
ゲーム内のチャットに /traceai と入力すると、
TraceAI.txt というテキストファイルが生成され、文字列が出力されます。
もう一度入力すると停止。
変数の値を出力するときは、string.format を使います。
TraceAI ("文字はダブルクォーテーションで囲む")
MoveToOwner (MyID)
ホムを主人の近辺(適当な位置)に移動させる。
Move()とは違って、ちょっとした障害物なら避けてくれるので便利。
Move (MyID, x, y)
ホムを指定した座標に移動させる。
途中に障害物があると動かない。
Attack (MyID, MOBのID)
ホムに通常攻撃をさせる。
ただし、手が届く距離でなければ失敗する。
GetV (V_***, 対象のid)
対象のいろんな情報を取得するための関数。
GetV (7, MyID) のように、
取得したい情報の種類を数値で指定できるのですが、
後で見たとき、何の情報を取得しているのか思い出すのが大変です。
そこで、Const.lua のブロック2で定数を用意することで、
GetV (V_HOMUNTYPE, MyID) のように書けるようにしています。
これなら一目でホムの種類を取得してるとわかりますね。
情報の種類(V_***)は以下の通り。
-- 主人のID
-- 対象の座標
-- 種類 (未実装)
-- 対象のモーション
-- 対象の通常攻撃の射程距離 (未実装。現在は1セルに固定)
-- 対象が狙っている相手のIDを取得できる
-- 対象のスキル攻撃の射程距離 (未実装)
-- ホムンクルスの種類
-- HP (ホムンクルスと主人のみ)
-- SP (ホムンクルスと主人のみ)
-- 最大 HP (ホムンクルスと主人のみ)
-- 最大 SP (ホムンクルスと主人のみ)
GetActors ()
主人の視界内のすべての物体のIDを取得する。
最後から二番目はホムのID、最後は主人のIDになる。
おもに索敵の処理で使われる。
ひとつずつ取り出して v に代入するのを繰り返す処理で、敵のIDかどうか調べる。
1 2 3 4 5 6 7 |
-- for で物体の数だけ繰り返し処理ができる -- また、繰り返すごとに次の物体のIDを取り出してvに代入してくれる for i,v in ipairs(actors) do if (IsMonster(v) == 1) then end end |
GetTick ()
現在の時間を取得する。(ミリ秒)
ゲームを起動してからではなく、パソコンを起動してからの時間。
GetMsg (MyID)
Alt + 右クリック でホムに命令したときの必要な情報が返ってくる。
1 2 3 4 5 6 7 |
msg = GetMsg (MyID) -- 必要な情報を受け取る Move(MyID, msg[2], msg[3]) -- こんな感じで使う msg[1] 何の命令を受けたかわかるように命令番号が入ってる msg[2] X座標 msg[3] Y座標 |
命令の種類によってどんな情報が返ってくるかは、
Const.lua の一番下に複数行コメントアウトでメモ書きされています。
GetResMsg (MyID)
Alt + Shift + 右クリック で予約命令を出したときの必要な情報が返ってくる。
GetMsg() と同じ。SkillObject (MyID, level, skill, target)
対象指定スキルを実行する。
SkillGround (MyID, level, skill, x, y)
地面指定スキルを実行する。
ただし、地面指定スキルが存在しないので未実装とも言える。
IsMonster (id)
対象のIDがモンスターかどうかを調べる。
MOBなら 1 、そうでなければ 0 が返ってくる。
追加関数
上の基本関数を見ると、
物体の座標を取得する関数はあるのですが、
2つの物体の距離を取得する関数はありません。
GetDistance2 (id1, id2) のように、
必要な情報を入れると欲しい情報が返ってくる関数を、
Util.lua のブロック2で作っています。
GetDistance (x1,y1,x2,y2)
2つの座標の距離を取得する
GetDistance2 (id1, id2)
2つの物体の距離を取得する
GetOwnerPosition (MyID)
主人の座標を取得
GetDistanceFromOwner (id)
主人と物体の距離を取得
IsOutOfSight (主人のID,id)
物体が視界内にまだ存在するか (いる:true / いない:false)
2つの物体の距離が21以上なら false
IsInAttackSight (MyID,id)
ホムの攻撃が物体に届くか (Yes:true / No:false)