構造
解説
ブロック1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
-- c function --[[ function TraceAI (string) end function MoveToOwner (id) end function Move (id,x,y) end function Attack (id,id) end function GetV (V_,id) end function GetActors () end function GetTick () end function GetMsg (id) end function GetResMsg (id) end function SkillObject (id,level,skill,target) end function SkillGround (id,level,skill,x,y) end function IsMonster (id) end -- idはモンスターか? yes -> 1 no -> 0 --]] |
複数行コメントアウトになってます。
ただのメモ書きのようなものですね。
座標を取得したり、ホムを移動させたり、
AIを作るときに必要な機能があらかじめ用意されているのですが、
その一覧がこれです。
詳しい説明はコチラ
用意されている関数
ブロック2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
------------------------------------------------- -- constants ------------------------------------------------- -------------------------------- V_OWNER = 0 -- 召喚者の ID V_POSITION = 1 -- 座標 (x、y) V_TYPE = 2 -- タイプ (未実装) V_MOTION = 3 -- 現在の命令 V_ATTACKRANGE = 4 -- 物理攻撃範囲 (未実装。現在は1セルに固定) V_TARGET = 5 -- 攻撃、スキル使用対象の ID V_SKILLATTACKRANGE = 6 -- スキル攻撃範囲 (未実装) V_HOMUNTYPE = 7 -- ホムンクルスの種類 V_HP = 8 -- HP (ホムンクルスと召喚者) V_SP = 9 -- SP (ホムンクルスと召喚者) V_MAXHP = 10 -- 最大 HP (ホムンクルスと召喚者) V_MAXSP = 11 -- 最大 SP (ホムンクルスと召喚者) -- この下は傭兵システムで後から追加された V_MERTYPE = 12 -- 傭兵の種類 V_POSITION_APPLY_SKILLATTACKRANGE = 13 -- 不明 V_SKILLATTACKRANGE_LEVEL = 14 -- 不明 --------------------------------- |
ブロック1にある GetV (V_,id) で使うためのものです。
GetV (7, MyID) のように、
取得したい情報の種類を数値で指定できるのですが、
後で見たとき、何の情報を取得しているのか思い出すのが大変です。
そこで、数値を定数にしてやることで、
GetV (V_HOMUNTYPE, MyID) のように書けるようにしています。
これなら一目でホムの種類を取得してるとわかりますね。
詳しい説明はコチラ
用意されている関数
ブロック3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
-------------------------------------------- -- ホムンクルスの種類 -------------------------------------------- -- 通常 LIF = 1 -- リーフ AMISTR = 2 -- アミストル FILIR = 3 -- フィーリル VANILMIRTH = 4 -- バニルミルト -- 亜種 LIF2 = 5 AMISTR2 = 6 FILIR2 = 7 VANILMIRTH2 = 8 -- 進化 通常 LIF_H = 9 AMISTR_H = 10 FILIR_H = 11 VANILMIRTH_H = 12 -- 進化 亜種 LIF_H2 = 13 AMISTR_H2 = 14 FILIR_H2 = 15 VANILMIRTH_H2 = 16 -------------------------------------------- |
GetV (V_HOMUNTYPE, MyID) でホムの種類を表す数値が返ってくるのですが、
ホムの種類によって違う行動をさせたいとき、
if (3 == GetV (V_HOMUNTYPE, MyID)) then
のように書くと、この数値がどの種類だったか思い出すのは大変です。
そこで、種類を表す数値を定数にしてやることで、
if (FILIR == GetV (V_HOMUNTYPE, MyID)) then
のように、一目でわかる書き方ができるようになります。
ブロック3.5
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
-------------------------------------------- -- 傭兵の種類 -------------------------------------------- ARCHER01 = 1 ARCHER02 = 2 ARCHER03 = 3 ARCHER04 = 4 ARCHER05 = 5 ARCHER06 = 6 ARCHER07 = 7 ARCHER08 = 8 ARCHER09 = 9 ARCHER10 = 10 LANCER01 = 11 LANCER02 = 12 LANCER03 = 13 LANCER04 = 14 LANCER05 = 15 LANCER06 = 16 LANCER07 = 17 LANCER08 = 18 LANCER09 = 19 LANCER10 = 20 SWORDMAN01 = 21 SWORDMAN02 = 22 SWORDMAN03 = 23 SWORDMAN04 = 24 SWORDMAN05 = 25 SWORDMAN06 = 26 SWORDMAN07 = 27 SWORDMAN08 = 28 SWORDMAN09 = 29 SWORDMAN10 = 30 -------------------------------------------- |
傭兵システムの実装で追加された部分。
用途は上のホムの種類と同じ。
ブロック4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
-------------------------- MOTION_STAND = 0 -- 立っている MOTION_MOVE = 1 -- 移動中 MOTION_ATTACK = 2 -- 攻撃中 MOTION_DEAD = 3 -- 死んで倒れる MOTION_ATTACK2 = 9 -- 攻撃 -------------------------- -- 追加 MOTION_DAMAGE = 4 -- ダメージを受けた時 MOTION_BENDDOWN = 5 -- かがむ(アイテムを拾う、罠を置く) MOTION_SIT = 6 -- 座っている MOTION_SKILL = 7 -- スキル攻撃中(インベナム、カートレボリューション、ラウドボイス) MOTION_CASTING = 8 -- 詠唱 MOTION_SPIRAL = 11 -- スパイラルピアース MOTION_TOSS = 12 -- 投げる(スピアブーメラン、ポーションピッチャー、バイオプラント) MOTION_COUNTER = 13 -- オートカウンター MOTION_PERFORM = 17 -- 演奏 MOTION_UPPER = 19 -- ノピティギの上昇中 MOTION_DOWNER = 20 -- ノピティギの下降中 MOTION_SOUL = 23 -- ソウルリンカーが魂を使用 MOTION_IN = 25 -- ノピティギの着地、落法 MOTION_BIGTOSS = 28 -- 大きく投げる(スリムポーションピッチャー、アシッドデモンストレーション) MOTION_DESPERADO = 38 -- デスペラード MOTION_XXXXXX = 39 -- 不明(コインフィリップ/ダスト?) MOTION_FULLBASTERD = 42 -- フルバスター -- 以前との互換用 MOTION_PP = MOTION_TOSS MOTION_SLIMPP = MOTION_BIGTOSS MOTION_PICKUP = MOTION_BENDDOWN |
これも見やすくするための定数です。
if (MOTION_DEAD == GetV (V_MOTION, id)) then
のように、敵が死亡したら戦闘を終了させるなどの使い方ができます。
ブロック5
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
-------------------------- -- command -------------------------- NONE_CMD = 0 MOVE_CMD = 1 STOP_CMD = 2 ATTACK_OBJECT_CMD = 3 ATTACK_AREA_CMD = 4 PATROL_CMD = 5 HOLD_CMD = 6 SKILL_OBJECT_CMD = 7 SKILL_AREA_CMD = 8 FOLLOW_CMD = 9 -------------------------- |
これも見やすくするための定数です。
下のブロック6と一緒に使います。
ブロック6
「Alt + 右クリック」や「Alt + Shift + 右クリック」で手動の命令を出したとき、
GetMsg(MyID) や GetResMsg(MyID) で座標などの必要な情報を取得できます。
その構造がどうなっているかのメモ書き部分です。
1 2 3 4 5 6 7 |
msg = GetMsg (MyID) -- 必要な情報を受け取る Move(MyID, msg[2], msg[3]) -- こんな感じで使う msg[1] 何の命令を受けたかわかるようにコマンド番号が入ってる msg[2] X座標 msg[3] Y座標 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
--[[ コマンド構造 NONE_CMD = 0 -- コマンドなし {コマンド番号} MOVE_CMD = 1 -- 移動 {コマンド番号、X座標、Y座標} STOP_CMD = 2 -- 停止 {コマンド番号} ATTACK_OBJECT_CMD = 3 -- 攻撃 {コマンド番号、目標ID} ATTACK_AREA_CMD = 4 -- 地面指定攻撃 {コマンド番号、X座標、Y座標} PATROL_CMD = 5 -- パトロール(往復移動) {コマンド番号、X座標、Y座標} HOLD_CMD = 6 -- ホールド {コマンド番号} SKILL_OBJECT_CMD = 7 -- 対象指定スキル使用 {コマンド番号、選択レベル、種類、目標ID} SKILL_AREA_CMD = 8 -- 範囲スキル使用 {コマンド番号、選択レベル、種類、X座標、Y座標} FOLLOW_CMD = 9 -- 主人に追従する {コマンド番号} --]] |
ブロック5と一緒にif文で使ったりします。
1 2 3 4 5 |
if (msg[1] == MOVE_CMD) then -- コマンド番号がMOVE_CMDを表す数値のとき OnMOVE_CMD (msg[2],msg[3]) -- 移動命令の処理が書いてある関数を呼び、 -- 必要な情報(座標)を引数に渡してる end |