AI Library

AIライブラリ

目次

投稿フォーマット

BBSでのインデント

tabや半角スペースは掲示板やスレではカットされるから、インデント(間隔)全角スペース一個にしませんか?

Luaのインデント

Luaの文法は、RubyにそっくりなのでRubyのやり方が参考になるかもしれません。

RubyCodingStyle

Rubyコーディング規約

タブスペース変換

タブ・半角スペース⇔全角スペースのコンバータ(Ruby ver.)

タブ1個や半角スペース2個を全角スペースに

ruby -Kslpe "$_.gsub!(/^(\s+)/){$&.gsub(/\s{2}|\t/,' ')}" <input.lua >output.txt

スペース2個に戻す

ruby -Kslpe "$_.gsub!(/^( +)/){$&.gsub(/ /,' ')}" <input.lua >output.lua

タブ1個に戻す

ruby -Kslpe "$_.gsub!(/^( +)/){$&.gsub(/ /,%!\t!)}" <input.lua >output.lua

参考

アルケミストのAIを語るスレ その2 268 from LiveRO板@MMOBBS

TraceAIリアルタイム表示

機能

TraceAI.txtをリアルタイム表示するツールです。簡単なJavaScriptで作成されています。
XPだと権限の問題で警告されます。(実行が不安ならソースを見てください。)

ダウンロード

TraceAI.zip

参考

アルケミストのAIを語るスレ その2 960 from LiveRO板@MMOBBS

tail

tail -fオプションでファイルに書き出される最新出力をリアルタイムで見ることが出来ます。
以下はWindows用tailコマンドとRubyでのtail.rbです。

Tail for Win32

Tail-4.2.11.zip(Win32)

Ruby: learn/tail (Japanese) - WATANABE Tetsuya HOME Page (Japanese)

tail.rb(Ruby)

レベル指定トレース

レベル指定なし、は無条件出力じゃなくて最低レベルとして扱う。
もともとあるTraceAI文に全部優先度を設定するのが面倒だから、
TraceAI→TraceAI2 の文字列置換のみで済ませられる。
実際使ってみたらTRACE内容がすっきりして大満足でした。


TRACE_LEVEL   = 2  -- TraceAIで出力するレベルの指定
TRACE_MODE    = 1  -- 0:すべて出力 1:指定レベル以上を出力 2:指定レベルのみ出力


-------------------------------------------
-- レベル指定トレース
-------------------------------------------
function TraceAI2( text, level )
  if( level == nil ) then
    level = 0               --- level指定がなければ最低levelに置き換え
  end

  if (TRACE_MODE == 0) then     --- モード0:levelに関係なく出力
    TraceAI( text )
  elseif (TRACE_MODE == 1) then  --- モード1:指定レベル以上の情報出力
    if (level >= TRACE_LEVEL) then
       TraceAI( text )
    end
  elseif (TRACE_MODE == 2) then  --- モード2:指定レベルのみ情報出力
    if (level == TRACE_LEVEL) then
       TraceAI( text )
    end
  end
end

参考

ホムンクルスのAIを語るスレ その4 81 from LiveRO板@MMOBBS

エディタ

ファイル中の単語検索

メモ帳で開いて コントロール+F で探したい単語をいれる。

SciTE

空想具現化プログラミング [Lua] SciTE 1.66:プログラミング用エディタ - 空想具現化プログラミング

SciTE 1.66 Luaプログラミング用エディタについての解説があります。
SciTEでは、複数のファイルの編集状態を「セッションファイル」に保存することができます。
ブログに OpenSciTESesion.bat がありますので、説明を読んだ上で入手してください。

SciTE/Scintilla いろいろ。

SciTEのメニューなどを日本語にしたものを配布しています。

参考

アルケミストのAIを語るスレ その2 990 from LiveRO板@MMOBBS

NoEditor, UnEditor

YokkaSoft Webpage

サクラエディタ

サクラエディタ

張り合わせノート  【Luaが好き】 - 張り合わせノート(Luaキーワード強調定義ファイル)

秀丸

秀まるおのホームページ

秀丸エディタ

秀丸エディタのLua強調表示定義ファイル

Lua on RO Client

Alt+T

ユーザーが直接命令を与えられるトリガーはこれだけです。
マウスのシングル・ダブル・トリプルクリックのように連打で詳細を指定
できる可能性があります。

真偽の値

Luaは 1 だけでなく 0 も真を表します。
偽は false と nil(値未定義状態) のみです。

GetV(V_MOTION,id)の返り値

4-2 GetV (V_MOTION, id) に対する返り値 に現在判別している値の意味をまとめました。

変数の初期値

初期値は nil みたいだからわざわざ代入しなくてもいいかも。

AI再読み込み(リロード)

以下のように記述することで、AIやAIライブラリを再度読み込みます。


_LOADED = {}
dofile("AI/USER_AI/AI.lua")

dofile("AI/USER_AI/AI.lua") だけではAIがうまくリロードされません。

理由

requireが2重ロードを防ぐために_LOADEDテーブルを使っているらしい。

ホムンクルスのAIを語るスレ その3 284, 399 from LiveRO板@MMOBBS

os.exit

Cランタイムのexit関数を呼ぶので、呼んだ時点でRO(Ragexe.exe)のプロセスが終了します。

os.execute

外部プロセスが使えます。呼んだ瞬間にプロンプトが出てきます。
そして新しいプロセスが初期化されるまで、処理が戻りません。

そのほかの関数

重力はloadlibみたいな悪用可能な関数はしっかり削除しています。
Luaはスクリプトの標準関数を呼ぶだけです。
もし、io関係がクライアントのフォルダより上位にファイル作成可能ならそれの悪用も時間の問題です。

HOMUNTYPE結果

GetDistance

プレイヤー、NPCからの距離を得ます。

距離

GetDistance

不可能リスト

ホムによる取得系

人間は画面を見ればわかるが、ホムには知る方法がないもの。

ホムからの出力系

ホムにやらせることが出来ないもの。

ホムンクルスAIについての雑談・要望スレ 130 from LiveRO板@MMOBBS

未実装

AI.lua

Const.lua

V_SKILLATTACKRANGE の戻り値だけまともに取得できない。

GetV(V_TYPE,TargetID)

TargetIDがそのまま返ってきます。(=未実装)

V_TYPE

未実装


type = GetV(V_TYPE,id) -- typeにidがそのまま入る

定義


TYPE_PC      = 0 -- プレイヤーキャラクター
TYPE_NPC     = 1 -- ノンプレイヤーキャラクター
TYPE_ITEM    = 2 -- アイテム
TYPE_SKILL   = 3 -- スキル
TYPE_UNKNOWN = 4 -- 不明
TYPE_MOB     = 5 -- 敵NPC
TYPE_EVENT   = 6 -- イベントNPC
TYPE_PET     = 7 -- ペット

table

グローバル変数table: nil

ROのLuaには標準ライブラリのうち、tableが入っていません。


インデックスに戻ります。