FC2ブログ
TOP > 一から始めるAI講座~第9回:定義された関数を知ろう~
 ← Gv戦果:3/26 | TOP | 一から始めるAI講座~第8回:デフォルトのAIを読み解こう・8~

リストマーク スポンサーサイト 

【重要】新しいBlogに移転していますあるネットゲーマーの日常
--年--月--日 (--)
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
[--.--.--(--) --:--] スポンサー広告 | Trackback(-) | Comment(-)
↑TOPへ


リストマーク 一から始めるAI講座~第9回:定義された関数を知ろう~ 

【重要】新しいBlogに移転していますあるネットゲーマーの日常
前回まではデフォルトのAIを読み解いていきました
その時は全体の流れを重視したために、
細かい関数の解説はあえてしませんでした

しかし、これから具体的に改造を加えるにあたり、
関数を使い方を知らないとお話になりません

そこで今回は、具体的な改造の前に、
ホムAIで使える関数を見ていきましょう

  ~間章~ 定義された関数一覧

 A-1:クライアント定義関数

まずは、マニュアルにもある、
クライアントで定義された関数を見ていきます


1) MoveToOwner (id)
 id : ホムンクルスの id
 戻り値 : なし
 機能 : ホムンクルスを召喚者の近くに移動させる

主人の元にホムを帰還させる関数です
ホムの主人はクライアントが知っているので、
主人のIDは指定する必要がありません


2) Move (id, x, y)
 id : ホムンクルスの id
 x : 目的地X 座標
 y : 目的地Y 座標
 戻り値 : なし
 機能 : ホムンクルスを目的地に移動させる

ホムを指定座標に移動させます
座標はMAP内の絶対座標なので、
画面がスクロールしても関係ありません


3) Attack (id1, id2)
 id1 : ホムンクルスの id
 id2 : 攻撃対象の id
 戻り値 : なし
 機能 : ホムンクルスに id2 を攻撃させる

ホムに攻撃させます
攻撃範囲内に対象がいないと意味が無いので、
まずは追跡と、攻撃範囲判定が必要です


4) GetV (V_***, id)
 V_*** : 対象の情報を表す定数値
 id : 対象のid
 戻り値 : V_***によって異なる
 ※例えば、V_POSITION の場合は x、y 座標、V_HP の場合は HP
 機能 : id の情報(V_***)を得る。情報を表す定数値は Util.lua に定義されている

さまざまな情報を取得するのに使います
使える定数は以下の通りです

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 -- 最大 HP (ホムンクルスと召喚者)


5) GetActors ()
 戻り値 : id を返還(LUA の table 形式に返還される)
 機能 : キャラクターの視界内のキャラクター、NPC、モンスター、
     アイテム、スキルなどの id を取得する

他の関数を見ればわかるように、
動作には対象のIDが必要です
この関数は画面内の全てのIDを取得しますが、
それが何であるかの区別は別に必要です


6) GetTick ()
 戻り値 : 1/1000 秒単位の数字
 機能 : コンピューターの現在の時間を取得。
     この値は、コンピューター起動時に 0 からカウントし、
     1/1000 秒ごとに 1 ずつの増加する

時間を取得する関数です
一定時間ごとに何かをさせたい、スキルの持続時間は・・・など、
改造の際には良く使うことになるでしょう


7) GetMsg (id)
 id : ホムンクルスの id
 戻り値 : ROクライアントから伝達したメッセージ(LUA の table 形式に返還される
 機能 : 使用者の直接的な命令等をスクリプトで伝達する

プレイヤーが出した命令を取得します
対象のID、スキルのIDなどが配列になって格納されます


8) GetResMsg (id)
 id : ホムンクルスの id
 戻り値 : RO クライアントから伝達した予約メッセージ(LUA の table 形式に返還される)
 機能 : 使用者の直接的な予約命令等をスクリプトで伝達する

予約メッセージというのがどういうものかわかりません・・・
デフォルトの骨組みを流用する限り、
考えなくても良いでしょう


10) SkillObject (id, level, skill, target)
 id : ホムンクルスの id
 level : レベル(skill に対応)
 skill : スキルの id
 target : 対象の id
 戻り値 : なし
 機能 : ホムンクルスが、対象(target)に対して level 値に対応したスキル(skill)を使用

ホムにスキルを使わせます
射程内に対象がいないと意味が無いので、追跡等が必須です
スキルのIDはTraceAI関数(後述)で調べましょう


11) SkillGround (id、level、skill、x、y)
 id : ホムンクルスの id
 level : レベル(skill に対応)
 skill : スキルの id
 x : x 座標
 y : y 座標
 戻り値 : なし
 機能 : ホムンクルスが、x、y 座標に対して level 値に対応したスキル(skill)を使用

現在は未実装ですが、範囲攻撃スキルを使用する関数です


12) IsMonster (id)
 id : 対象のid
 戻り値 : id にあたるのがモンスターなら 1 を、そうでなければ 0 を返還する。
 機能 : モンスターを判別する

GetActors関数で取得したIDが、
モンスターであるのかを判別するのに使います


13) TraceAI (string)
 string : TraceAI.txt ファイルに記録される内容。文字列
 戻り値 : なし
 機能 : 実行中のスクリプトの現在状態を記録する

この説明ではわかりづらいですよね
要するに、デバック文を出力する関数です

ゲーム中に「/traceai」と打ち込むと、
実行中のAIがTraceAI関数を通過する際に、
デバックログに引数の文字列を出力します

プログラムは目に見えないものですが、
必要なところにデバック文を入れておくことで、
プログラムがどこを通ったのか、IDが何だったのか、
そういった情報を後から確認できます


 A-2:Util定義関数

Util.luaに定義された関数です
こちらも重要なものが多いです


1) リスト系関数
 List.new ():新規リスト生成
 List.pushleft (list, value):左から値を挿入
 List.pushright (list, value):右から値を挿入
 List.popleft (list):左から値を取り出す
 List.popright (list):右から値を取り出す
 List.clear (list):リストをクリアする
 List.size (list):リストのサイズを取得する

情報処理関係の試験勉強をした方ならご存知だと思いますが、
ここではわからない方向けの説明を

例えば、値を格納する管があったとすると・・・

pushleft
  ----------------------
 ○→   ○○○    
  ----------------------

pushright
  ----------------------
     ○○○○   ←○
  ----------------------

popleft
  ----------------------
  ←○  ○○○○   
  ----------------------

popright
  ----------------------
      ○○○  ○→
  ----------------------

・・・なんとなくわかりますかね?


2) GetDistance (x1,y1,x2,y2)

二点間の距離を計算します(整数)
ベクトルのサイズを計算してますので、
ホムの距離感覚は円形に広がっていることになります


3) GetDistance2 (id1, id2)

2つの対象の間の距離を計算します
どちらかが画面外にいる場合は-1が返ります


4) GetOwnerPosition (id)

主人の座標を返します


5) GetDistanceFromOwner (id)

主人との距離を計算します
どちらかが画面外にいる場合、-1が返ります


6) IsOutOfSight (id1,id2)

2つの対象が「見えない位置」にいるかを判断します
画面外にいるか、20より離れているとtrue
20以内にいる場合はfalseを返します


7) IsInAttackSight (id1,id2)

id1の対象がid2の対象を攻撃可能であるか、
射程内にいるかを返します


以上、関数を見てきました
これでAI改造の準備はばっちりです

最後に、第1回でも書きましたが、
「USER_AI」フォルダの準備をしておきましょう
次回からはここにあるAIを改造していきます
[2006.03.26(Sun) 12:25] ホムンクルスAI考察Trackback(0) | Comments(1)
↑TOPへ


COMMENT

管理人のみ閲覧できます by -

コメントを閉じる▲

 ← Gv戦果:3/26 | TOP | 一から始めるAI講座~第8回:デフォルトのAIを読み解こう・8~

COMMENT

このコメントは管理人のみ閲覧できます
[ 2006.03.27(Mon) 03:40] # | EDIT |

COMMENT POST











管理者にだけ表示

Trackback

この記事のURL:
http://parrot.blog21.fc2.com/tb.php/245-38c75f8a
 ← Gv戦果:3/26 | TOP | 一から始めるAI講座~第8回:デフォルトのAIを読み解こう・8~

プロフィール

Categories

Recent Entries

Recent Comments

Archives

AdSense

Calander

ブログ内検索

RO Search

Links

Copylights

Amazon

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。