No description, website, or topics provided.
Lua
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
src/USER_AI
LICENSE
NOTE.md
README.md

README.md

RObjective-AI(仮)

Description

ROにおけるホムンクルスのAIです。 名前は「ろぶじぇくてぃぶえーあい かっこかり」とでも読んでください。

デフォルトのAIの設計はともかく、コードが美しくないので、 後々のメンテナンス性を考えて書き直しつつ、 他のAIで良く実装される機能の中から、個人的に欲しい機能を追加したものです。

Luaにおけるオブジェクト的な記述を用いて、 宣言的かつ継承等が可能なコードに書き換えています。 「プログラムがわかる人がいじりやすい基盤」的なものを目指しています。

現時点では個人的な学習用のコードですので、 私以外の方が実際に使用することはお勧めできません。 高機能で実用的なAIは以下のサイトから探してください。

http://www.ragfun.net/alchemist/index.php?%A5%DB%A5%E0%A5%F3%A5%AF%A5%EB%A5%B9%2FLua%2FAI

Installation

どうしても使いたい方向けの手順です。 基本的に他所で配布されている実績があるAIをおすすめします。 暴走によりトラブルに巻き込まれたり、ホムを失ったとしても、こちらでは責任が持てません。

まず、以下から最新版のzipをダウンロードして解凍してください。

https://github.com/parrot-studio/ro-homu-ai/tags

「src/USER_AI/」以下のファイルを、クライアントの「AI/USER_AI」以下に置いてください。 その後、RO内でホムを召還し、「/hoai」コマンドを実行してください。 (他のAI等が配置済みの場合は、バックアップしてから置き換えてください)

このAIはソースコードを一から書き直している都合上、 予想外のエラーにより、主人も含めてコントロール不能になる可能性があります。 試す際は街の中等、安全な場所でおこなってください。 また、ある程度満腹度が高い状態をおすすめします。

エラーにより暴走した場合、以下の手順で復旧してください。

  • ALT+F4でクライアントを終了させる
  • USER_AI/以下を全て削除
  • AI/AI.lua Const.lua Util.luaをUSER_AI以下にコピー

Config設定(config.txt)

必要なら書き換えが可能なファイルです。 通常は変更する必要がありません。

前提

  • 「スイッチ型」とある項目は1か0で指定
  • 1:ON 0:OFF
  • 存在しない場合はOFFとして扱う
  • 「数値型」とある項目は数値で指定
  • 存在しない場合はデフォルト値
  • 文字列を指定するとエラーでAIが落ちる(たぶん)
  • 負の値も異常動作を引き起こす(たぶん)

DebugMode(スイッチ型)

  • デフォルト:0
  • (現状では)デバッグログの制御
  • ONならデバッグログに動作を吐き出す

UseTraceAI(スイッチ型)

  • デフォルト:1
  • デバッグログの吐き出しにTraceAIを使うか
  • TraceAIは文字化けしているが、その代わりコマンドで切り替えられる
  • DebugModeと排他ではない
  • DebugMode=1、UseTraceAI=1なら両方のログを使う
  • 両方使うのは重くなるのでお勧めしない

ExcludeStandMonster(スイッチ型)

  • デフォルト:0
  • 立っているだけ(移動しない)モンスターを索敵から除外するか
  • ONにするとモンスターNPCを索敵から除外できるが、索敵効率が大幅に低下

AttackPriorityForSelf(スイッチ型)

  • デフォルト:0
  • 主人と自身が攻撃を受けているとき、自身を優先するか
  • デフォルトは0なので主人優先

FollowCommandToHold(スイッチ型)

  • デフォルト:0
  • ALT+TコマンドをHoldに割り当てるか
  • Holdは「固定」で、一切今の位置から動かない
  • 敵が来れば攻撃するが、他のコマンドが来ない限り移動しない
  • デフォルトは0なので待機コマンド
  • 主人のところに戻って待機モードに入る(規定の動作)

SmoothMoveDelay(数値型)

  • デフォルト:4
  • なめらか移動の実行頻度を指定
  • 数値が小さいほどなめらか
  • その代わりパケット投げまくり

AroundDistance(数値型)

  • デフォルト:3
  • 自身と主人との距離がこれ以下なら「主人のそば」と判定
  • 通常はデフォルトでOK

SearchDistance(数値型)

  • デフォルト:10
  • 索敵範囲
  • 大きいほど遠くの敵まで対象にするが、主人と離れやすくなる
  • FollowDistance以下にしないと、途中で引き返すことになるので注意

FollowDistance(数値型)

  • デフォルト:10
  • 主人との最大距離
  • これより離れると、行動を強制キャンセルして帰還する

HpRatioForPositive(数値型)

  • デフォルト:40(%)
  • 積極的モードを維持するためのHP割合
  • これ以上の割合でHPが残っている場合のみ、先制をおこなう
  • もちろん、先制スイッチONが条件

HpRatioForNegative(数値型)

  • デフォルト:20(%)
  • 消極的モードに入るHP割合
  • HP残存率がこれを下回ると、自発的な索敵行動をしない
  • 自身が攻撃される場合のみ自発的攻撃行動に移る
  • 攻撃コマンドも受け付ける

ChangeLog

ver0.5β

  • HPを基準にした積極的/消極的ロジックを追加
  • 一定%よりHPが残ってないと先制しない
  • 一定%よりHPが減っていると自分から敵を探さない
  • 攻撃コマンドの実行は受け付ける
  • Configで%値を設定可能
  • ホムと主人の攻撃対象優先順位を設定可能に
  • 両方攻撃を受けているとき、どちらの敵を先に倒すか
  • ConfigのAttackPriorityForSelfも参照
  • お座りコマンドを実装
  • ALT+Tにお座りコマンドを割り当て可能に
  • ConfigのFollowCommandToHoldを参照
  • その位置から一切動かず、敵が射程内に来れば攻撃する
  • 他のコマンドを指示すると動き出す
  • 羊様でのお買い物に使える・・・かも
  • フィーリルのオートスキル関連を調整
  • オートムーンライトの使用Lvをランダム化
  • SPが一定値を下回ると、追跡/攻撃中にフリットムーブを自動使用

ver0.4β

  • 切り替えスイッチが正しく保存されなかった問題を修正
  • 再読み込み時に反映されていなかった可能性
  • 横殴り判定ロジックに誤りがあり、索敵に失敗していた問題を修正
  • 全体設定ファイル(config.txt)の追加
  • 詳しくは「Config設定」で
  • 非移動モンスターに対する対応を設定可能に
  • 主人との距離感や索敵範囲を設定可能に
  • デバッグログの仕組みを変更
  • config.txtで「DebugMode=1」を指定するとログ吐き出し
  • TraceAIを使用するかを設定できるように修正
  • デバッグログでもTraceAIでも好きな方が使える

ver0.3β

  • 仮称ながら名前を変更
  • NOTEにRoadmapを追加
  • 今後の実装予定的なもの
  • ただし、常に予定は未定
  • 追尾移動をなめらかに
  • ケミWikiで等速移動として紹介されていたコードを調整したもの
  • 「等速」ではないが、遅れは減った
  • ディレイは各環境に合わせて調整可能にしたいが、それはもうちょっと先で
  • モーションの判定を共通化
  • 待機中に主人から大きく離れていても、主人が座っていたら戻らないように
  • その他コードの整理等

ver0.2β

  • コードの構成を全体的に整理
  • 後々コンパイルする場合を意識
  • デフォルトAIのConstも参照しないように修正
  • Commonでグローバル関数と共に定義
  • Arrayを追加/Queueを更新
  • Arrayはsizeに制限があるQueue
  • 汎用的に使えるように様々なメソッドを定義
  • 同一性判定も可能に(ArrayとQueueの間でも可能)
  • Settingを追加
  • 設定情報を管理するオブジェクト
  • 暗黙的にファイルに書き込みをおこなう
  • これを通すことで、reloadされても状態を維持できる
  • 先制/非先制スイッチ追加
  • とりあえずFilirに実装
  • 主人に対して右 -> 左 -> 右と移動命令でスイッチを反転させる
  • 反転させたスイッチはreloadしても保持するので注意
  • 自動スキルスイッチ追加
  • とりあえずFilirに実装
  • 主人に対して上 -> 下 -> 上と移動命令でスイッチを反転させる
  • 反転させたスイッチはreloadしても保持するので注意
  • Idle状態ですることがない場合、主人のそばに戻るように
  • 自身と主人のHP/SP情報を取得するメソッド追加
  • フィーリルの攻撃時、一定条件でムーンライトを使用するように修正
  • SP50%以上残存かつ、残存率に依存した確率

ver0.1β

  • 全体的なコード書き換え
  • 状態遷移モデル設計はそのままに、OOP+宣言的コーディング
  • 必ず非先攻
  • AI_old.luaで実装したスイッチ機能は未実装(今後実装予定)
  • 敵がターゲットをもつ場合は攻撃対象にしない(横殴り防止)
  • 一定以上主人と離れた場合、強制的に主人の元に戻る
  • 攻撃中でも、待機中でも

License

for src/USER_AI/ and README

The MIT License

see LICENSE file for detail

Copyright for Default AI & Client

"RAGNAROK ONLINE"

Gravity Corp. & Lee Myoungjin(studio DTDS). All Rights Reserved.

GungHo Online Entertainment, Inc. All Rights Reserved

Author

ぱろっと(@parrot_studio / parrot.studio.dev at gmail.com)