1- 101- 201- 301- 401- 501- 601- 701- 801- 901-

ホムンクルスAIについての雑談・要望スレ

1(○口○*)さん :06/03/16 21:48
このスレは
「ホムンクルスのAIを自分ではいじれそうにない」」
「アイデアは浮かんだけどどうプログラムしていいかわからない」
「AIについて語りたいけど専門用語がわからない」
といった人達が語り合うスレです。
思いついたアイデア等どんどん書き込みましょう。


NGワード推奨="BOT"
BOT関係の話題や煽りはスルーでお願いします。

↓以下関連スレ↓

アルケミスト・クリエイター情報交換スレ第65巻
http://gemma.mmobbs.com/test/read.cgi/ragnarok/1142433555/l50

アルケミストのAIを語るスレ その2
http://enif.mmobbs.com/test/read.cgi/livero/1140506800/l50

2(○口○*)さん :06/03/16 22:06
>>1
2get

3(○口○*)さん :06/03/16 22:17
NG推奨をまとめたテンプレは2番以降にしたほうがいい
そのままNGにすると>1が見れなくなるから

4(○口○*)さん :06/03/16 22:19
>「ホムンクルスのAIを自分ではいじれそうにない」」
>「アイデアは浮かんだけどどうプログラムしていいかわからない」
>「AIについて語りたいけど専門用語がわからない」

なに、このスキルの無い人間同士が傷口を舐めあうスレW

5(○口○*)さん :06/03/16 22:49
あれかなこっちにもプログラム張られると意味が無いから

・プログラムはAIスレに張り、こちらにはレス番でお知らせを
例)要望の有った○○ルーチンサンプル AIスレ△-■■で

こんな感じでいいかな?

6(○口○*)さん :06/03/16 22:55
スレ立ったのでひとつ要望をば
ケミのまわりを回るIAはあるけどケミの周囲をランダムで動き回るIAって作れませんか?
回ってるのも可愛いけど変化が欲しいなぁと。

7(○口○*)さん :06/03/16 23:09
>>6
主人の周りを回るAIって0マテの奴かな?
あれの回る部分を改装すればできると思う…がケミ垢チケ切れでテストできねorz

8(○口○*)さん :06/03/16 23:16
雑談・要望スレというよりも

既にAIスレや個人HPで出ているコードの場所を教えてもらうスレに見える

9(○口○*)さん :06/03/16 23:18
>>8
それでもいいべ。
過度なクレクレでなければAI本スレに雪崩れ込むよりずっといい。

10(○口○*)さん :06/03/16 23:26
>>6
ある程度の範囲内でのランダム移動ならできるのかな?
簡単なのは何パターンかの動きを作って、
それをランダムで実行とかも可能かな。

>>9
同意。 よく質問に上がるような機能は過ぎスレのテンプレに
追加していくとか、してけば向こうの人も覗く可能性が!w

11(○口○*)さん :06/03/16 23:32
MobのLvによって自動で攻撃したりできないかな?
そしたらコイツは攻撃、コイツはまだ倒せないから無視みたいに一匹一匹設定しなくても
「Lv20〜40のMobが近くにいたら全て殺せ」って

12(○口○*)さん :06/03/16 23:47
>>11
MOBの情報ってのはIDしか取得できないから一匹一匹設定してる。
レベルって情報は用意されてないからまとめて設定ってのは無理。

ただ、自前でIDとモンスターのレベルなんかを対応させた一覧表とかを作って使えば
いけるんじゃなかろーか。
(既にMOB一覧を作ろうとしてる人はいた)

13(○口○*)さん :06/03/16 23:52
>>6
とりあえず、0マテ版のカスタムって事で
AIスレ2の895にランダム移動にする方法を書いてみた。
向こうにも書いたけどテストしてないから、無保証。人柱になってくれ

14(○口○*)さん :06/03/17 00:34
行動と待機ってテレポするとリセットされちゃうわけですが・・・
切り替え状態を保持ってできないですかね
やっぱファイル入出力は避けるべきですかねぇ

15あぼーん :06/03/17 00:53
羊のキャッスリング制御

設定項目
自動キャッスリングON/OFFフラグ
スキルを使用するときの主人のHP
スキルを使用するときのホムの最小〜最大SP
スキルを使用するときのホムの最小〜最大SP
使用時主人から離れるか否かフラグ
離れるとき回転するか否かフラグ
回転時の半径
スキル使用ディレイ

制御
イベント発生タイミング
&自動キャッスリングフラグがONのとき
&主人の現在のHP<スキル使用時の主人のHP
&ホムの最小HP=<ホムの現在のHP<主人の最大HP
&ホムの最小SP=<ホムの現在のSP<ホムの最大SP
&現在の時間-最後にキャッスリングを使った時間>スキル使用ディレイ

イベント内部
if キャッスリングのSPが足りてる then
 if 離れるフラグがON  then
  
 return
end

…ここまで考えて挫折

16(○口○*)さん :06/03/17 01:04
モンスターデータライブラリとか見ると、
つくづくホムに発言させる命令無いのが悔やまれる。
アレ使えば不思議のダンジョンみたいに戦闘後、
ホムに「(戦った敵の名前)なんて大した事無かった」とか喋らせられたんだろうに。。

17(○口○*)さん :06/03/17 01:08
>>16
当方羊だけどポリンとかおいしそうな倒したときに
「むしゃむしゃして喰った。今も反省はしてない」って言わせたい…
でもホムに発言させるとハラスメントが増えそうだからなぁ

18(○口○*)さん :06/03/17 01:43
AIスレにあった等速追尾設定をやってみた。
フラフラしないでちゃんとついてくるようになった。
職人さん(と呼ぶべきなのかどうなのか)に感謝。

でもアクセスランプの点滅がものすごいのがちと不安・・・
ハードウェア的なものだから仕方ないけど。

19(○口○*)さん :06/03/17 03:02
ぜろまてさんのAIを元に、色々と試させて頂いているホムケミです。

PatrolRangeを1に設定した状態で
「ケミが座っている時だけ、ホムが1セル以内に自動的に戻って(追従して)こない」
というアレンジをしてみたいのですが、とても苦戦しています。

Const.luaに「MOTION_SIT」を追加してAI.luaスクリプト内に組み込んだりもしましたが
自分が例外設定を良く解ってないせいなのか、どうにも上手く動作しません。
一昨日からAIスレを見始めたような初心者の質問で失礼なのですが
そのような設定をしたい場合は、どの辺りから弄っていけばいいのでしょうか。

どなたかご教授頂けましたら助かります。

20(○口○*)さん :06/03/17 03:04
発言らしきものは、スキル名を言う程度だね〜。
もしスキル名変更できるのであれば・・・・・。

21(○口○*)さん :06/03/17 04:18
とりあえずサクラエディタなるテキストエディタをインストールしてみたんだが、
これLuaは文字の色分けが非対応なんだよな。残念

22(○口○*)さん :06/03/17 04:34
と思ってぐぐったら色分け設定ファイル配布してるところ見つかった
ttp://www15.ocn.ne.jp/~meigin/Lua/top.html

23(○口○*)さん :06/03/17 05:26
大勢のホムでダンス大会とか開いたらおもしろそうじゃない?
いっせいに同じように移動したりスキル使ったりしたら壮観な感じになりそう。
開始の合図は枝使って敵を出すとかで。

24(○口○*)さん :06/03/17 05:59
等速追尾の設定を入れたら、
辻で速度を貰った時にホムの移動速度が上がらなくなった気がする
デフォルトだと、ホムの移動速度も上がらなかった?

25(○口○*)さん :06/03/17 06:10
ホム自身の移動速度を上げることってできるのかな?

26(○口○*)さん :06/03/17 06:53
>>25
ケミ本人に速度増加もらうor馬牌を使ったあとにリログかMAP移動
こうしないとホムには速度増加が適用されない

27(○口○*)さん :06/03/17 07:43
汎用というか一般用というか、
誰でもとりあえずコレは標準でいれとけみたいなAIが1つあるといいな
・バニルと鳥のノンアクティブ化
・等速追尾(負荷軽減版)
・1セル空け通常攻撃(ホムとmobが重なるとPPしづらい)
・寝落ち逃亡防止用自動安息

28(○口○*)さん :06/03/17 07:43
前スレ940のやつ、そのままだとエラー吐くんだけど
DifferentialCount をグローバルで宣言するとして、
Settings.DIFFERENTIAL_ACCURACY ここでエラーが出るのがよくわからない。
ってかこれどういう文なの…?

29(○口○*)さん :06/03/17 08:54
どれくらいの頻度で更新するかの数値を入れておく変数っぽい
グローバルで0.5を代入したら動いた。

30(○口○*)さん :06/03/17 09:10
>>29 qwsk

31(○口○*)さん :06/03/17 09:40
グローバルで
DIFFERENTIAL_ACCURACY = 0.5
Settings.DIFFERENTIAL_ACCURACY を DIFFERENTIAL_ACCURACY で素のAIにも組み込めた。

数字は 0.5 を入れればいいのかは分からないが、940 に 0.5秒って書いてあったから0.5にした。
Settings. は 工体研究所の config.lua に書き加えるためについてるっぽい。

32(○口○*)さん :06/03/17 10:17
 幼女のヒールって他人にはかけられんのだろうか?
 理想としては

「周りのキャラのHP/最大HPを比較」
     ↓
「一番HPが減っている(HP/最大HPで出る値が最も0に近い)キャラのIDを獲得」
     ↓
「ID対象までの距離を獲得、射程外であれば近寄る」
     ↓
「幼女ヒール!(・∀・)」
     ↓
「ID対象から緊急回避で逃亡or安息」

 こんな流れで。頭のHP比較の段階でHP獲得方法わからずいきなり挫折…orz

33(○口○*)さん :06/03/17 10:18
あかスリムが たりない!

34(○口○*)さん :06/03/17 10:45
>>32
HPとかの値チェックするのは、ホムとケミ自身しか出来ないみたいで、別の人のを見ようとすると-1として扱われてるみたいですね。
まあ、Pvとかで他の人のHP見れたら大問題だと思うし仕方ないのかな…
やるとしたら対象の人が敵?匹に囲まれてる時に一定間隔でヒール…とか。微妙か。
やりたい機能ではあるんだが(ノд`

35(○口○*)さん :06/03/17 10:45
>>31 サンクス!
そのとおりに書き換えてみた。早く帰宅して試してみたい〜♪
一応念のため…
global variableに DIFFERENTIAL_ACCURACY = 0.5 を追加して
前スレ940( ttp://enif.mmobbs.com/test/read.cgi/livero/1140506800/940 )の
> if Settings.DIFFERENTIAL_ACCURACY を
if DIFFERENTIAL_ACCURACY に書き換えればいいんだよね? 違うのかな…

36(○口○*)さん :06/03/17 11:14
>>21-22
アルケミテンプレに反映させといた

37(○口○*)さん :06/03/17 11:41
先行型AIを使ってポリンとか倒してみてる人のうち
ワープアウトした瞬間に他の人のポポリンを殴りに行っちゃうホムでお困りの人用に

デフォルトを待機状態にして一度ALT+Tで行動を開始するようにいじってみる。
出来たらAIスレの方にやりかた書いておく

3829 :06/03/17 11:48
>35
すまん、
ミリ秒で指定するから、DIFFERENTIAL_ACCURACY = 500 だな。

書き換えのほうはそれであってると思う。

39(○口○*)さん :06/03/17 12:27
(´・ω・`)寝ぼけてました。
よく考えたらデフォルトは待機状態で
先行型は敵を見つけたら即座に攻撃モードにうつるから問題があるわけで
最初の10秒ぐらい非先行型の動作をさせるようにしてみました。

ってことでAIスレ3の62にコード置いてます。

40(○口○*)さん :06/03/17 13:54
満腹度がある程度減ったら
回転するとかそうゆうプログラムって作れるっけ・・?

41(○口○*)さん :06/03/17 13:55
現状、満腹度を取得する方法無いんで無理じゃあないっけか

42(○口○*)さん :06/03/17 14:00
そうか・・取得できないのか(´・ω・`)

43(○口○*)さん :06/03/17 14:02
餌やった時に何らかの「餌やったよシグナル」を送って(Alt+T×3連打)とか
そっから何分後かにダンス…なら可能は可能だろうけど、餌やった時に
100均のキッチンタイマーでもかけといた方が確実だろうな…

44(○口○*)さん :06/03/17 14:04
940は俺です。
正直、まじめに使ってくれる人がいるとは思ってなかった。
すまんかった。

んで、おっしゃるとおり、>>31で言ってるように
工体研究所のやり方を使わせてもらってる。

45(○口○*)さん :06/03/17 15:04
スキルID定義を統一するのはいかがでしょ。
スキル使用する関数があるのに公式で掲示されてないですが…。
それまでの間の繋ぎとかで。
-----------------------------------------------------
-- スキルID
-- アルケミストのAIを語るスレ その2 249 etc参考
-- 2006/03/17 現在未実装なスキルはコメント
-----------------------------------------------------
-- リーフ
SKILL_TOUCH_OF_HEAL = 8001 -- 治癒の手助け
SKILL_EMERGENCY_AVOID = 8002 -- 緊急回避
-- SKILL_MENTAL_CHANGE = 8004 -- メンタルチェンジ

-- アミストル
SKILL_CASTLING = 8005 -- キャスリング
SKILL_DEFFENCE = 8006 -- ディフェンス
-- SKILL_BLOOD_LUST = 8008 -- ブラッドラスト

-- フィーリル
SKILL_MOONLIGHT = 8009 -- ムーンライト
SKILL_FLEET_MOVE = 8010 -- フリットムーブ
SKILL_OVERED_SPEED = 8011 -- オーバードスピード
-- SKILL_SBR44 = 8012 -- S.B.R.44

-- バニルミルト
SKILL_CAPRICE = 8013 -- カプリス
SKILL_CHAOTIC_VENEDICTION = 8014 -- カオティックベネディクション
-- SKILL_BIO_EXPLOSION = 8016 -- バイオエクスプロージョン
-----------------------------------------------------
こんなのを、SkillConst.luaとしてUSER_AIに置いて、AI.luaで
require "./AI/USER_AI/SkillConst.lua"
として読み込めば。

46(○口○*)さん :06/03/17 16:19
ホムの使ったスキルの持続時間が0になったら〜って方法は可能?
どんな関数とかを使って指定すればいいのか分からないんだがorz

47(○口○*)さん :06/03/17 16:34
>>46
スキルとスキルレベルは使ったときに取得できるから、そこから計算すればいい。
具体的には以下の通り

グローバルに時間保存用の変数を作っておく。
例:Skill_Time = 0

スキルを使ったときにスキルとスキルレベルからスキルが切れる時間を計算。
例:Skill_Time = GetTick() + 持続時間

GetTickで取れる時間はミリ秒単位なのでそこは注意。

あとはその時間が来たかどうかを判断して処理を行う。
if (Skill_Time < GetTick()) then
    処理
end

基本的にはこれでOK

48(○口○*)さん :06/03/17 16:38
>>45
別途ファイル作らなくてもConst.luaに入れればいいじゃん

49(○口○*)さん :06/03/17 16:52
コール時の座標を指定するやりかたで
壁とか移動不可セルの向こうにいきなり召喚とかできる?

50(○口○*)さん :06/03/17 17:03
>>49
×指定座標に召還する
○召還直後に指定座標に移動させる

51(○口○*)さん :06/03/17 17:03
>>49
やったことないけどおそらく無理

コール時の座標指定は
あくまでそこへホムを移動するよう命令してるだけ

だから壁や移動不可セルは自動処理されると思われる

52(○口○*)さん :06/03/17 17:07
回答サンクス。あくまで召喚した瞬間はケミ座標なのね

53(○口○*)さん :06/03/17 17:22
PTメンバーのIDを取得するのは可能でしょうか?
可能ならPTメンバーのタゲに対しても、主人ケミへの援護のように
援護射撃をしたいのですけれども…。

54(○口○*)さん :06/03/17 17:29
>>53
可能。というか、韓国版ユーザーAIで実装されてたハズ。

5545 :06/03/17 17:31
>>48
./AI/Const.lua
はアップデートで更新される可能性があるので
独自定義するものは、./AI/USER_AI/に入れた方が良いと考えた。

56(○口○*)さん :06/03/17 17:45
>>54
回答ありがとうございます。
その韓国版のAIとにらめっこして頑張ってみます。

57(○口○*)さん :06/03/17 17:53
満腹度についてだが、ホムによって腹の減り具合は決まってると思うんだ
エサをやるときも一回10%しかふえないからギリギリまで待ってエサをやる必要もない
20分で10%満腹度が減るとしたら、20分おきにダンスをさせとけば問題ない気がする

58(○口○*)さん :06/03/17 18:02
前スレ940
>>31のように書き換えたけど`DifferentialCount'(anil value)ってエラーが
>>28にあるようにこいつも宣言が必要?

59(○口○*)さん :06/03/17 19:28
20分置きにダンス、25分で自動安息なAIが欲しくなった。

60(○口○*)さん :06/03/17 19:32
WikiにあったNoEditorってやつなんだが、同じところで配布されてるUnEditorの方がよくないか?
そっちの方がSleipnirみたいにタブで複数ファイル開けて便利な気がするけど。

61(○口○*)さん :06/03/17 19:57
940ではないけど、AIスレの23、30で言われてるように
DifferentialCount=0
と宣言しておけばおk

62(○口○*)さん :06/03/17 20:00
>>47
ありがとー
なんとか、一定時間ごとにスキル発動できようになった。
これで、狩り楽になるかも。

>>54
PCに、CRをするとホムがそのPCに移動しちゃうのって、
もしかしてそのPCのID取ってたりする?

63(○口○*)さん :06/03/17 20:11
リーフのヒール、
指定されたプレイヤーの体力を回復させる。
てあるけど、どうやって指定するんだろう。

スキルショートカットに、ヒール設定して、例えばF9押すと
主人に対してヒールするけど、これを、別の対象を
選んでおいて、そっちにヒールかけるようにする
とかは、AIで出来るのかな?

64(○口○*)さん :06/03/17 20:32
プログラムできないけどこんなのあったら嬉しいという要望を。
・ALT+Tでの待機状態とアクティブ状態が区別できる。
・SPが一定割合以上になると通常攻撃より優先して
 現時点の最大lvスキルを使う。

こんなのがあると助かります。
人柱になるのでどなたかお願いします

65(○口○*)さん :06/03/17 20:37
>>61
ありがとう
TraceAI ("OnFOLLOW_ST")のすぐ下に置いたらエラーでなくなった

66(○口○*)さん :06/03/17 20:40
>>64
SPが一定割合以上になると〜
は近いのがAIスレにあったぞな
5固定だったけどいじればいいだけだし

67(○口○*)さん :06/03/17 22:35
>>60
好みで使ってくれ。キーワードファイルは共通だ。
(と、キーワードファイル置いた人が呟いてみる)

68(○口○*)さん :06/03/17 22:45
草など、反撃しないMobを主人と一緒に殴ってくれるAIってどうすれば良いんでしょう。
AI語るスレ2の823氏のところにそのAIがあるんだが、どこの部分を抜き出せばよいのやら…。

69(○口○*)さん :06/03/17 22:49
>>68
ALT+右クリック2回 じゃなくて
主人が殴ってる奴を自動でターゲットするように、って事ですかね?

70(○口○*)さん :06/03/17 22:59
>>69
そうです。
毎回ALT+右クリック2回やってると、失敗時に北向きにグルグル画面回って
草刈ケミなの画面酔いして泣きを見てます_no

71(○口○*)さん :06/03/17 23:12
>>68
823氏のAIは見てないのだが、俺なりのを向こうの226に書いておいた。

72(○口○*)さん :06/03/17 23:14
>>71
ありがとうございます。これで草刈が楽しめそうです。

73(○口○*)さん :06/03/17 23:30
このスレに合うかわからないけど
2種のAIをマルチ垢みたいに入れ替えるツールとかってあります?

74(○口○*)さん :06/03/18 00:05
(´・ω・`)マルチ垢ってのがよくわからんな
デフォルトAIも書き換えちゃって/hoaiとかじゃダメかしら。

75(○口○*)さん :06/03/18 00:49
本スレに出ていた初弾自動ムーンライトAIを使わせてもらっているんだけど
殴っている途中でもSPが一定以上に回復すると、スキルを発動してしまう。
攻撃開始から○秒以降は発動しないような条件って、どう書けばいいでしょうか?
GetTickの使い方が、さっぱりわかりません・・・

76(○口○*)さん :06/03/18 01:06
>>75
純粋にヒントだけになるが

まず、戦闘を開始した時点というよりは
一番最初にムーンライトを使用した時点で、変数に GetTick()の値を格納する
local変数Aがあったとすると
A = GetTick()
んで、次にスキルを使う時の条件の中に、Aに記録した時間より5秒以上経っている場合というよりか
スキルを使うための条件にAに記録した時間+5秒以内であればOKとすると
IF文の中にandで追加する条件として
A + 5000 > GetTick()
とでも書けば、5秒以内はスキルを再使用し、5秒以上経過するとスキルを使用できなくなる。

こんな感じでどーだろか。

77(○口○*)さん :06/03/18 01:09
>>74
すいません
2種じゃなく2種以上ですね

ボタン一つでファイルもしくは内容を上書きするものがあったら
便利かと思うのですがどうでしょう?
NGでしょうかコレって

78(○口○*)さん :06/03/18 01:13
上書き後に一度安息→コールとか、リログが必要になるんじゃないかな。

79(○口○*)さん :06/03/18 01:19
>>77
ALT+Tを使って先行・非先行を切り替えるAIがあるから
2種類のパターンを一つのAIにまとめてしまい、何かをトリガにして切り替えたらどーだろうか…

例えAIフォルダの中身を勝手に書き換えたとしても、
安息→コールやテレポをしないと設定は反映されないわけだし…
即座にホムの動きは変わらないので、本当に便利なのかな?

8075 :06/03/18 01:31
>>76
すみません、質問の仕方がマズかった。
現時点では一つの敵に対して二度スキルを使うことはなくて、

SPが設定した値より低い時点で攻撃開始→初弾スキルなし
殴りながらSP回復→途中でスキル発動

となるのです。これだとSPがもったいないので
攻撃途中でのスキル発動をなくせないかなぁ、と。

81(○口○*)さん :06/03/18 01:43
ざっと見てみたんで間違ってたらスマソ
ケミAIスレ2の391氏のAIを使ってると仮定。

--一定率以上SPないと使用しない

の行の少し下

 if ((sp / msp) * 100) < spPer then
  return
 end

これを

 if ((sp / msp) * 100) < spPer then
  MoonLightFlag = 1   
  return
 end

でいいんじゃないかな。

8277 :06/03/18 01:46
そっか、上書きあとだと安息コール必要なのですね・・・
alt+tで先行非先行はできるけどそれ以上はできるのでしょうか
今考えているパターンは
・ケミでの狩りで補助的動き
・ホムだけでの狩り
・溜まり場とかでの完璧休息
を考えてます

蛇足ですがデフォでもalt+tで入れ替えた今の状態を表示して欲しい・・・
マルチ垢みたいのでやるとそこらへんすぐわかっていいかなと思います

83(○口○*)さん :06/03/18 01:47
>>80
それは初回スキル使用時にフラグが立つ奴かね?
違ってたら詳しいコードの元を教えておくれ。

フラグで初撃にスキルを使ったかどうか判定していた場合。
初撃スキルを使えなかったとしてもフラグを立ててしまったらどうだろうか?

イメージだけど
if(SPが余ってたらスキル使う and フラグが立っていないなら使う) then
  スキルを使う
  フラグを立てる
else
  こっちでもフラグを立てる
end

こんな感じでどーだろか。
フラグが立っていても一定確率でSPが余っていればスキルを使うって部分もあったような気がするが…
一時凌ぎにしかならんがその部分だけ--でコメントアウトしてしまったらどうだろうか…

もしくはある変数の0と1を書き換えるだけで
ON/OFF切り替えが出来るようにしてみるとか

84(○口○*)さん :06/03/18 01:55
連投スマソ

>>82
確か韓国製のAIが3種類ぐらいのモードを切り替えれたよーな気がする。
順番に切り替わってループさせるぐらいのことは出来るかも

あと、今どのモードなのかは、切り替わった直後のホムの動きに変化をつければ識別出来るかと。
○○モードに切り替わるとケミの右隣へ
××モードに切り替わるとケミの左隣へ とかね。
(´・ω・`)んー、既製のAIにこういう機能あったかも…The Winter's Taleで配布されてる奴だったかな…?

8575 :06/03/18 01:56
>>81 >>83
おお、なるほど! 早速それでやってみます。
遅い時間なのにありがとう。激しく感謝。

86(○口○*)さん :06/03/18 01:57
ケミを固定にして、ホムをアクティブで狩りさせていると、索敵したあげくに画面外(ケミから14セル以上?)に行く事あるんだけど、どうにかなるんかねえ?
索敵範囲ってホム中心?

8777 :06/03/18 02:12
>>84
韓国ユーザーAIにそれっぽいのありました
3種切替ってのも見かけた憶えあるのですが
alt+t後にケミの右側クリックとかだったかな?
もっと楽な方法ってかスキン選択みたいにできればよかったな・・・

もう遅いのでそこらへん明日見て研究してみようと思います
ありがとうございました

88(○口○*)さん :06/03/18 02:24
>>6
ちょっと遅レスだけど
0マテのAIにランダム移動の設定がある

>PatrolType = 0 -- 回転形状(0:時計回り 1:反時計回り 2:十字(ENWS) 3:十字(EWNS))
> --      (4:ジグザグ 5:8の字運動 9:範囲内をランダム移動)

この数値で変更できるぽい

89(○口○*)さん :06/03/18 06:39
韓国ユーザーAIを使用中なのですが、
バニルのスキル使用を、初撃のみにする方法ってないでしょうか?

本スレのほうのを試してみたんですが、まったくわかりませんorz

あとスキルの使用レベルも調整できたら便利だと思います

90(○口○*)さん :06/03/18 06:46
>>86
行っちゃいますよねぇ。私も不便に思ってました。
多分、得られるキャラクター情報がホム中心なんだと思います。確かめてないけど。
索敵処理を変更すればなんとかなるかなぁとか考えてます。
ケミから14マス(安全をみて12位?)より遠いモンスターは攻撃対象としないって感じで。

91(○口○*)さん :06/03/18 07:03
>>73=77=82=87
念のため。支援ツールの類の使用は一切を禁じられている現状で、
多くの人が見ている場所でマルチ垢マルチ垢と連呼するのは宜しくない。

質問時に、自分の知っていることは相手も知っていると思わない方が良い。
>>74も言っているが、分からない人にとっては連呼されても意味不明。
分かりやすくしようと例を挙げたつもりかも知れないが、これでは逆効果。
単純に、求める機能を全て列挙でもした方が万人に理解できる。

厳しいことを言うようで申し訳ないが、>>73が普段から支援ツールの使用を
周囲に対して全く隠していない場合、立場によっては晒されたりするから、
少し>>73の身が心配になった。

9290 :06/03/18 07:42
>>86
AIを語るスレその3の277にAIの変更内容を書きました。ファイルはAI.luaです。
まだ草でしか確認してないですけど多分ちゃんと機能すると思います。

うちのホムはフィーリルなので、デフォルトのアクティブな性格を残していき
たいなぁと思ってますー。

93(○口○*)さん :06/03/18 08:27
マルチ垢ってのはROのSCのレジストリを複数保管して
クライアント起動前に値を書き換えるGUI

2垢以上を1PCで使ってるとSCが上書きされてしまうんだよね。

例としては不適当だけね。

今後は、欲しい機能を既存の不正ツールに繋げてしまうのを自粛する方向で話していけば良いんじゃないかな。

ゆっくりとスレのルールも整備しようや。

94(○口○*)さん :06/03/18 08:45
alt+T押したときにケミの側に戻ってくるように設定するには
どこの部分を修正すればいいんでしょうか。
OnSTOP_CMD か OnHOLD_CMD あたりを変更するのかな
とか思いつつもいまいち区別がついていないもので。

95(○口○*)さん :06/03/18 09:49
ふと、自動スキル使ってて思ったんだが、ディレイってない?
サイトに書いてあるようなディレイ時間無視でスキル発動してるような
気がするんだが。

96(○口○*)さん :06/03/18 10:23
何故かディレイは未実装らしい。

97(○口○*)さん :06/03/18 11:36
AIかまうのが楽しくてホムが育たないとです。

98(○口○*)さん :06/03/18 11:43
おはようございます。
>>93
ちょっと調べてスルーするなり指摘するなりすればよかったですね。
申し訳ない。

何にしろ、自前にしろスレで用意するにしろ。
グレーゾーンが存在する以上、AIについてのガイドラインはあった方がいいかもね。

99(○口○*)さん :06/03/18 12:05
今こんなAIを目指して作ってるんだが…どうだろうか?

満腹度 0〜10%→ランダム移動で暴走(未決定・とりあえず暴走)
満腹度11〜20%→その場から一歩も動かない
それ以上は普通の予定

知り合いに言ったら、そんなデメリット機能つけてどうするんだバーヤ
とか言われてへこみ気味…

お腹が減ったら言うことを聞かなくなる、そんなホムもいいかなとか
思って作ってるんだがどうだろうか?

今のままだとやる気と技量不足で断念しそうなんだよ…orz

100(○口○*)さん :06/03/18 12:17
>>97
私もおもちゃ工場の中でホム戦わせながらその場でAI書き換えたりしてる。
お陰であんまりあがらない(ノ∀`)

>>99
満腹度はどうやって管理するのですか?
確かホムはお腹の具合を取得できなかったはずです。

エサを与えてから○○分後、
エサあげたらALT+T+右クリックをトリガとしてどーのこーのって奴を使うのかな?

101(○口○*)さん :06/03/18 14:14
ホムってどんな感じですか?
IAっての面白そうだしホムが居ることによって戦闘楽しくなるでしょうか?
課金再開しようか迷ってまして・・・

102(○口○*)さん :06/03/18 14:28
共闘以前にホムを育てる前段階が必要だから
狩りにだれてROやめた人にはきついかもしれない

103(○口○*)さん :06/03/18 15:25
>>101
本体がぼへーと静止しながらホムのみで次々と雑魚を蹴散らす様はさながらスタンド使い
新鮮でなかなか楽しい、少なくともまだ飽きちゃいない

104(○口○*)さん :06/03/18 15:26
必要な機能というのはやはり限られるのでAIだからってあまり…
RO以外にもペットシステムはありますし。

10586 :06/03/18 15:36
>>86
いい感じに脱走しなくなりました。
15-1でも、ちゃんと帰ってくるみたい。
アクティブなリーフでやっていきたかったので助かるわ〜

10686 :06/03/18 15:38
>>90
ミス_| ̄|○

107(○口○*)さん :06/03/18 15:39
魔法のターゲットがキャスリングを使うことで外れるらしいんだ。

ケミを(またはケミが)攻撃しているモンスターが魔法を使おうとした時
SPが余っていればキャスリングを使用してケミを救出する、とか組めそうなんだが…

本当に魔法のタゲが外れるのか、うちはゼリーだから確かめられないんだorz

108(○口○*)さん :06/03/18 16:44
MOTION_CASTING = 8 -- 詠唱
らしいから、できるみたいだね。

109(○口○*)さん :06/03/18 18:04
リーフ使いです
どこかのスレにホムを中心で索敵するから画面から出るってのを見て思ったんだけど
主人が座ってる時タゲられたら緊急回避で遠くに逃げる事出来るのかな?
もう画面から消えちゃうくらいの勢いで
露店中、主人はともかくホムはテロから逃がしてあげたい

110(○口○*)さん :06/03/18 18:24
>>101
パンダ出したあと1年以上狩りに行かなかったケミが狩りに行くようになった。次は狂気ポットだ。
今AI自体はいくつか問題あるんでそれが修正されてからでもいいかもしれない。
でも個人的に言えば面白い。

111(○口○*)さん :06/03/18 18:41
>>109
ケミが座ってる時は多分ホムはスキル使えない
ケミが立っていても露天の窓が出ているとホムはスキルを使えない

緊急回避は使えないけど、遠くに逃げるのはAIスレに時々出てる羊のキャスリング関数にヒントがあるかも。

112(○口○*)さん :06/03/18 19:18
なんか Util.lua がエラー吐くんだがどうにかならないだろうか。
AI.lua以外は改造してないけど、一応公式のを再DLしてConst.luaとUtil.lua上書きしたがまだエラー吐く。
GetOwnerPosition(id)中の
return GetV(V_POSITION,GetV(V_OWNER,id)) で
引数の2番目がnilを返す、とか言ってるんだがわけわからん。
他にも似たような症状になった人いないかな?

113(○口○*)さん :06/03/18 19:22
じゃあAIがまずいんじゃね?

114(○口○*)さん :06/03/18 19:33
すまん自己解決した。
AI.luaの一部でGetDistanceFromOwnerを呼び出すとこで、引数を与え忘れていた。
なんつー初歩的な・・・orz

115(○口○*)さん :06/03/18 19:35
>>112
AI.lua 中の、 GetOwnerPosition と記述している所のどれかで
GetOwnerPosition に渡している引数が、 nil になっていると思われる。

AI.lua 内を、関数名で検索掛けて
その周辺のコードをトレースしてみるがよろし。

116(○口○*)さん :06/03/18 19:36
リロードしろ俺_| ̄|○

117(○口○*)さん :06/03/18 23:01
>>100
…すまない聞かなかったことにしてくれ
結局餌あげて、600秒後に反応するタイマーが構想の限界だった
どうにかできないもんかねぇ

118(○口○*)さん :06/03/19 00:29
ホムの操作を確認していてふと思ったんだが・・・
ホムの操作って、

1.ALT+右クリックで、地面指定して移動。
2. ALT+右クリック2回で、敵指定で攻撃。
3. ALT+Tで待機・通常のモードスイッチ切り替え
・・・ここまではいいよな?

4. ALT+SHIFT+右クリックで、地面指定で、現状の作業(例えば戦闘)終了後に移動
5. ALT+SHIFT+右クリック2回で、敵指定で、現状の作業終了後次の敵を攻撃。

・・・っていうのがあるんだが、これ、まともに使っている人っているのかな?
ちなみに俺は、一度使いかけたけど、結局「ALT+Tでリセットしたほうが早い」という結論に至った。
何か有用な使い道、あるのかな?

ユーザー少ないなら、なにか他の処理に割り当てちゃうって言う方法もあると思うんだけど。

119(○口○*)さん :06/03/19 00:42
>>118
4と5の操作ができるなんて気づいてすらいなかったorz

ALTとSHIFT同時押しってのが苦手なだけなんだが、戦闘中とかじゃなくて
お遊びで余裕を持って操作できる時のトリガとして使えると面白いかもしれない。

個人的に、指定した座標に移動してそこで停止とか、そこで回転とか作ってみようかなとか思ってるんだが
そのトリガ部分がイマイチよくわからんでね。

戦闘時に要求される仕様なんてあらかた出尽くしてるような気がするし
曲芸っぽいAIを作るのも面白そうだなーとか

120(○口○*)さん :06/03/19 01:05
ふと思ったんだけど、
モンスターのIDを取得したら、そのIDをテキストに
書き込むって事ができそうな気がしてきた。

121(○口○*)さん :06/03/19 01:14
traceAIで出力してやれば見れそうだな

122(○口○*)さん :06/03/19 01:55
ってかキャラIDとかもTraceで出力できるんだよね?



きゃらくえ再び……?

123(○口○*)さん :06/03/19 02:43
>>122
ほむのAIつかわなくても、一部鯖では細々と続いてたりするけどなー

個人的にはCのライブラリの呼び出しができれば、随分融通の効くのが
できるんじゃないかと思うんだが。

char_table.iniにモブのAIパターンを入れといて、画面内のモブが、
アクティブかノンアクかとかによって動きを変えるとかしたいんだがなぁ。

124(○口○*)さん :06/03/19 03:25
時に満腹度の減少速度はHPMAXのアイドル時で分速1でおk?
十分ごとにダンシングとか出来れば餌やり楽になるな

125(○口○*)さん :06/03/19 05:13
ホムに任意のエモとかセリフとか出させられますか?
ペットみたいに親密度上がったらでもいいからしゃべってくれるといいのになー(´∀`)

126(○口○*)さん :06/03/19 06:19
>>125
残念ながら…(ノд`)

127(○口○*)さん :06/03/19 08:45
>>125
エモやセリフを出す関数がないので絶対に無理

よく要望があるんだけど無理なことでもまとめていくか

・エモーションは出せません
・発言させられません
・満腹度は取得できません
・親密度は取得できません


・・・親密度も無理だったよな?

128(○口○*)さん :06/03/19 09:43
>>127
親密度も無理

あと、キャラID取得出来ても詳細はとれないからキャラくえにはならんと思う

129(○口○*)さん :06/03/19 09:56
任意のPCの@を追尾させることってできるかな?

130(○口○*)さん :06/03/19 09:59
>>127
まとめおつ。
入出力別に分けると、わかりやすいかもね。

○人間は画面を見ればわかるけど、ホムには知る方法がないもの。
・満腹度は取得できません
・親密度は取得できません
・周囲で聞こえている声(キャラの発言)は、取得できません。
・周囲のキャラが出しているエモーション状況は、取得できません。
・ギルド情報は取得できません
・PT情報は取得できません
・キャラクターの名前は取得できません

・敵の名前は取得できません
・攻撃しても、それがどういう結果なのか(ダメージ量、MISSなど)を知ることはできません。


○ホムからの出力系
・エモーションは出せません
・発言はさせられません

131(○口○*)さん :06/03/19 10:09
>129
宣伝宣伝。
ttp://pc3merchant.net/ai/

追尾機能以外がまったくないのは勘弁して。

132(○口○*)さん :06/03/19 10:38
0マテさんところのAIを使ってるんだけど、緊急回避を使用してホムにスキルディレイがある場合
ケミへの自動ヒールを行おうとした時に、ディレイ時間の間ヒールスキルのループにはまり
攻撃がずっとストップしたままになる現象ってどうやって回避したらよいんでしょう(´・ω・)

緊急回避>スキルディレイ発生
ケミのHPがx%以下>自動ヒール発動
ディレイのために発動せず>ケミのHPがx%以下>自動ヒール発動>ry

予想だと、一定回数スキル使用を失敗した場合に一定時間スキル使用中止を入れるんだと思うんですけれど。

133(○口○*)さん :06/03/19 11:54
横殴り対策に「IsNotNoManner」という関数?を使ってるAIが多いんですが
これは、mobが主人・ホム以外をタゲった場合無視するというものですよね?

微妙に横殴りではないんですが、ルートmobなどがアイテムに釣られて
他所の人の下へ駆け寄って行くものを追ってしまい、相手の近くで倒す
というのも微妙に気まずいので

「攻撃開始時に攻撃対象mob数セル内に他プレイヤーor他ホムがいる場合
攻撃しない」というコードをできればお願いしたいです

134(○口○*)さん :06/03/19 13:13
>IsNotNoManner
二重否定してるところが皮肉っぽい命名だね。

>「攻撃開始時に攻撃対象mob数セル内に他プレイヤーor他ホムがいる場合
>攻撃しない」
PT行動できなくならないように気をつけて。

135(○口○*)さん :06/03/19 13:14
>>131
横レスですが、使わせていただきました
ALT+右クリで指定したあと、最初はついてくるのですが
しばらく歩くと止まってしまうようです
とまった後ホムのまわりをうろうろすると、再びついてきてくれるのですが・・・
これは私の環境が悪いのでしょうか?

136(○口○*)さん :06/03/19 13:19
>>131
すいません自己解決しました
離れすぎるとってのは、護衛対象がケミの画面外に出ることだったのですね

137(○口○*)さん :06/03/19 15:27
>>132
>一定回数スキル使用を失敗した場合に一定時間スキル使用中止
それでOK。ついでにそれで赤スリム持ってないときも攻撃してくれるようになる。
失敗の判定方法はspの消費具合でやって、失敗回数は5回くらいで自分はやってる。
もうちょっと確実性のある方法があればいいんだけどねぇ……

138(○口○*)さん :06/03/19 17:07
寝落ち対策でRO終了はあるけどキャラセレ画面まで戻らせる方法ってあるかな?

139(○口○*)さん :06/03/19 17:22
転生間近なケミなのですが転生後クリエになってホムに壁してもらう(一発だけ殴らせてタゲだけ取る)
っていうことはできないのでしょうか?
なんか聞いたらそれは無理っぽいって言われたので・・・
どなたか知ってる人いたらご教授ください・・・_| ̄|○

140(○口○*)さん :06/03/19 17:33
>>139
まずは、ホムの操作方法を確認しましょう。
希望の動作は、デフォルトAIで、自分がホム操作することで可能です。

1. ALT+右クリック2回で、ホムで敵攻撃。
2. 上記で敵を1回殴ったのを確認してから、ALT+Tでホムを待機状態に。
 これでホムは敵を攻撃しなくなります。

ソレ用のAIを組めば、1回だけしか攻撃しないような(上記操作のいらない)AIも
作ることはできますが、そこまではいらないのではないでしょうか。

141前スレ391 :06/03/19 18:19
>>139
AIスレのほうに一応コードは載せました。

>>140
書いてしまった…。orz

142(○口○*)さん :06/03/19 18:20
名前消すの忘れてた…。orz

143139 :06/03/19 18:33
>>140
(*゚∀゚)マジですか!
ノ∀`)これでクリエに光が見えてきました。ありがとうございます。

144(○口○*)さん :06/03/19 18:53
>>143
ホムの経験値は殴ったダメージ分だけ。
ケミやクリエの経験値は倒したMOBの分全て。

ケミやクリエの取り分は減らないので、ずっと攻撃して貰ってても問題ない。

145(○口○*)さん :06/03/19 18:54
それだとJobが入らない。

146(○口○*)さん :06/03/19 18:58
ホムの殴った分が入るのはバグ?仕様?
計算式見たけど意味分からんかった(´・ω・`)

147(○口○*)さん :06/03/19 18:58
>>145
そういえばJOB(かなり)いるんだったな_| ̄|○|||

148(○口○*)さん :06/03/19 20:05
そもそもの問題なんだが、
「転生後クリエになるまでホムって呼び出せるのか?」

呼び出したまま転生できれば、ホムが死んじゃうまでは大丈夫…かな?
安息使えないだろうから、完全に出しっぱなしだろうけど。

149(○口○*)さん :06/03/19 20:26
バニル用のAIで
「主人のHPが30%↓でバニルのSPが70%↑の時、カオティック自動発動」
ってどうやったらできるんでしょう・・・。
リーフのヒールのをいじくれば出来るかななんて思ってにらめっこしたんですけど
よくわからないです・・・OTZ
詳しい方いたらそこの部分だけ作ってもらえないでしょうか。

150(○口○*)さん :06/03/19 20:58
>>148
既出。為になるから他のとこも一通り目を通しておけ。
ttp://www15t.sakura.ne.jp/~privatemoon/alc/hom_100.html#1-13

151(○口○*)さん :06/03/19 21:24
>>150
そこのテンプレ、ホムの進化は未実装と言い切ってるけど、まだ断定できないんじゃ?
新密度が極めて親しい(910〜1000)でそれぞれ10%〜100%の確率で進化する、
というラーゲの書き込みあった気がするけど、新密度がそこまで上がってる人はまだいないだろうし。

賢者の石は韓国だとタナトス・アビスパッチで実装だったけど、日本はリヒタルで実装しちゃったしねぇ。
実装が違うからまだなんとも言えない気がする。

152(○口○*)さん :06/03/19 21:27
進化が実装してるんなら、公式にちゃんと書くだろうし
賢者の石のアイテムデータもよくわからないことになってる。
未実装な説は濃厚だと思うが…。

まぁ誰か試す勇者が居てくれればいいけどな。
何が起きても知らんが。

153(○口○*)さん :06/03/19 21:28
とりあえずシーズマップのIsMonster(ID)は
なんでかは知らんが(試した範囲では)全部0を返して使い物にならない。

154(○口○*)さん :06/03/19 21:33
>>152
でも(未実装四種も含めて)スプライトデータは入ってるんだよねぇ。
jROは先行して次の大規模パッチのデータまで含めちゃうことが多いから、
これもまた何とも言えないけど。公式は当てにならんしなぁ。

賢者の石はアイテム名と説明文が追加されたし、まだ可能性はあると思う。
言い方は悪いが、来週か再来週ぐらいには出るであろう、
新密度が極まった人の実験待ちかな。

155(○口○*)さん :06/03/19 21:36
ai.lua内で
return

return;
があるのですが
セミコロンはどのような意味があるんでしょうか?

156(○口○*)さん :06/03/19 21:46
セミコロンは多分意味ないです。
コード組んだ人がCとかJavaとかやっててクセが残ってたんだと思います。

157(○口○*)さん :06/03/19 22:42
>>155
LUAのソースを読むのなら、まずはLUAのマニュアルを参照してみよう。
ttp://www.uri.sakura.ne.jp/~cosmic/yuno/lab/lua5_manual_ja.html

老婆心ながら質問に対する補足説明。上記リンク内
 2.4 -文
 2.4.1 - チャンク
あたりに答えが書いてある。
要はLUAでは、Cなどと同じように記載できるように、行末にセミコロンをつけることが認められている。

158155 :06/03/19 22:51
>>156,157
レスありがとうございます。
C言語ではセミコロンで区切る所を
luaでは文末で区切るのでセミコロンは無くてもいい。
という風に理解しました。

二通りあるのもあれなんで、セミコロンは消しておきます。

159(○口○*)さん :06/03/19 23:07
http://enif.mmobbs.com/test/read.cgi/livero/1140506800/457
これって、「手動で月光Lv3を使用させると月光Lv1→通常攻撃→月光Lv2のコンボを発動」とか
作れたりする?

160(○口○*)さん :06/03/19 23:20
>>149
AIスレ3の542付近で頑張ってみましたが、コードは出来たものの実用性は皆無でした。
私は大人しく黄色ポーションを投げることにします。orz

161(○口○*)さん :06/03/19 23:30
>>159
できるけど処理が面倒になるしあまり意味がないと思うんだ。

162(○口○*)さん :06/03/19 23:34
あ、意味はあるのか。月光2発撃ったほうがsp消費は少ないのか。
間に攻撃はさむのは後ディレイ殺す処理かな。
ちょっと面白そうな処理だ。

163(○口○*)さん :06/03/19 23:35
おまけにSP消費が痛いぜママン

164(○口○*)さん :06/03/19 23:42
>>162
できるんだ、夢は膨らむ(´ω`)
0.5秒だか1秒だかのディレイがあるって話なので、その間に通常攻撃挟もうかとって事で
正にその通り。
発展させればGUIでコンボエディタとか作れるかな。
いや自分はGUI作れないけど。

165(○口○*)さん :06/03/20 00:20
>>164 の話に応用できると思うんだが

wait関数みたいなものを作れないだろうか。
wait(引数に時間(ミリ秒))で呼び出して、呼び出された時間ホムンクルスのAIの動作が全てストップしてしまうとか…

これを利用すれば1秒だけ待機とか出来るんじゃなかろーか…
ちょっとLUAのリファレンス見てくる。

SPがMAXじゃないと使えない、かつケミの命令に反応しないと実行されない必殺技とかどーだろうか。

166132 :06/03/20 00:29
>>137
理論は予想できてもプログラムが組めないとです_no

167(○口○*)さん :06/03/20 01:13
>>159
プロトタイプできたのでAIスレのほうに上げときます。

168(○口○*)さん :06/03/20 01:14
>>165 の結果。

whileとかを使って一定時間経過するまで関係ない処理でもさせとけばいいかな。
とか軽い気持ちでやってみた。

_| ̄|○ROクラが止まりました。

後日もう一回調べ直して違う方法で実現する策を考えてみます。

169(○口○*)さん :06/03/20 01:18
横殴り防止をPTメンバーのMOBは解除するのはどうすればよいでしょうか?(ノ∀`)
はい、色々挑戦してエラー吐きまくったミジンコですorz

170(○口○*)さん :06/03/20 01:32
>>159

http://enif.mmobbs.com/test/read.cgi/livero/1142535070/570
一応、リーフの癒しの手で動作確認済み。

#リーフだと攻撃スキルないので、OnATTACK_OBJECT_CMD関数内で
#敵を攻撃したらコンボ開始という条件にし、癒しの手をディレイ
#間隔でスキルレベル1、2、3の順で実行されることを確認。
#ディレイ中は攻撃動作を行っている。

171(○口○*)さん :06/03/20 02:07
>>168
グローバル変数で
WaitFlag = false
StopTime = 0
でも宣言しておいて
AI(myid) の最初の辺りに

if ( WaitFlag ~= false ) then
 if ( StopTime + 1000 < GetTick() ) then --1000msec以上経過していないなら
   return
 else WaitFlag = false
 end
end

これを入れて、どこかに
WaitFlag = true
StopTime = GetTick()
を入れればいいんじゃないかな。
あんまし正確じゃ無さそうなのと、動作確認とか全くしてないのであしからず。

172(○口○*)さん :06/03/20 02:07
>>168
終了条件がちゃんと働いてなくて、永久ループに陥ってた可能性は潰したかい?

173171 :06/03/20 02:18
すまん、

- if ( StopTime + 1000 < GetTick() ) then --1000msec以上経過していないなら
じゃなくて
+ if ( StopTime + 1000 > GetTick() ) then --1000msec以上経過していないなら

不等号が逆だったわ。

174137 :06/03/20 03:20
>>166
ttp://www5b.biglobe.ne.jp/~snight/ro/ai.html
一応これの500行目辺りからを見て考えてくれれば。
この場合、一定時間使用中止じゃなくて、「OnATTACK_ST」から状態が変わるまで中止になるようにしてる。
時間で判断するんなら、一定回数失敗したときに時間を取得しておいて、
「OnATTACK_ST」のどこかに、時間が経過したら赤スリム所持フラグを初期化するようなのを加えとけば大丈夫かと。

175137 :06/03/20 04:44
あと一応、AIスレの590に0マテに追加する感じのを書いといたのでよろしく。

176(○口○*)さん :06/03/20 05:03
リーフで脳手術取った人に訊きたいんだけど
リーフのSPMAXの状態でROを終了した時、
次回起動したときに、最大SPが
脳手術を計算に入れないSPになって復活しちゃわない?
(うちの例だと、284/279とかになる)

うちだけなのか、バグなのか知りたいので
もしよかったら誰か教えて下さいな

177(○口○*)さん :06/03/20 07:23
LIFの治癒の手で
↓これは正常に動作するんだけど
SkillObject(MyID,1,SKILL_TOUCH_OF_HEAL,MyID) --LIFにヒール

↓こう書き換えると何も起きない
SkillObject(MyID,1,SKILL_TOUCH_OF_HEAL,GetV(V_OWNER,MyID)) --ケミにヒール

スリムは10本以上持ってるし他の魔法使ってないのでディレイもなさそう
何が悪いんだろう?

178(○口○*)さん :06/03/20 07:52
>>177
グローバル変数のところに
MyOWNER = GetV(V_OWNER,MyID)
を追加して
SkillObject(MyID,1,SKILL_TOUCH_OF_HEAL,MyOWNER)
としてみては?

179(○口○*)さん :06/03/20 07:54
>>137
思わぬほど早い時間からありがとうございます。
しかし、動作が怪しくケミへのヒールが、ホム自身のヒールになってしまいます。

しかも、現在のVer.:060318pではスリム赤が無くなれば戦闘してくれますが
メインで使ってるバージョンの古いタイプでは戦闘すらしてくれなくなりました。

そろそろ赤スリムがなくなるとです _no

180(○口○*)さん :06/03/20 08:29
>178
MyOwner=0をグローバルで宣言して
GetVをAI()の2行目で代入と、SkillObject()の直前で代入とを試したけど
SkillObject(MyID,1,SKILL_TOUCH_OF_HEAL,MyOwner)は反応しないっす…

181(○口○*)さん :06/03/20 09:02
>>132
今みたら試験版とやらがアップされてたぞ

182(○口○*)さん :06/03/20 10:49
ホムを後ろじゃなくて常に真横に来るように出来ないのかな

183(○口○*)さん :06/03/20 11:47
>>168
coroutine使って、「時間が経ってなければyield」でメインループに処理を
返せばいい。ただcoroutine使い出すとぐっと複雑になるから、使わないで
済む方向でやったほうが楽。

しかし予想通りというか、lua処理にスレッド使ってなかったのか。

184(○口○*)さん :06/03/20 12:16
AI()の中身を全部別の関数に移して
AI()からcoroutineでその関数をresumeすれば
・・・だめか

185(○口○*)さん :06/03/20 13:47
例えば主人がCRで攻撃しても共闘しないけど
主人がメマーを使った時は共闘するAIとか作れないんだろうか。
個人的にはあったら凄く嬉しいんだけどなあ。

186(○口○*)さん :06/03/20 13:56
>>184
単純な実装としてはアリ。
ただホムへの割り込みが一切通じなくなるから、例外的な状況
(Alt+T、視野内にとどまる、緊急待避など)はcoの外で処理しないと。
場合によってはcoをやりかけのまま捨てることになるかもしれない。

とか考えると、「ちょっとwaitさせたい」程度では手を出さない方が
いいと思うんだ。「ここでwaitがないと」ぐらいじゃないと。

187(○口○*)さん :06/03/20 13:57
>ホムへの割り込みが一切通じなくなる
waitループ回ってる間は

188(○口○*)さん :06/03/20 13:58
>>185
主人のスキルは取れないんだよなあ。
「スキルを使った」、「攻撃した」とかなら取れるけど。
メマーは通常攻撃のモーションだから
CRとは区別できるかもしれないけど、
通常攻撃と区別できない可能性大。

どうしてもやるなら、主人のSPを常時監視して、
SPが5減ったときだけ攻撃するしかないかな。
ファーマシーでも反応することになるけど、
戦闘中にファーマシーするやつもいないだろ。

189(○口○*)さん :06/03/20 14:30
Wait関数ぽいものをでっち上げてみた。
一応止まったままにはならなくなった

けど、発動した瞬間にクライアントの動作も止まってるように見えるので使えない

function Wait(Wait_time)
local time = GetTick() + Wait_time
while GetTick() <= time do
end
return
end

やっぱりフラグを使って規定時間を経過しているかどうか調べた方がいいみたいね(´・ω・`)

190185 :06/03/20 15:19
>188
AIでケミスキルの発動は出来ても、ホムで拾得は出来ないのか。
だとしたらホント、ケミスキルをAIで発動できてる仕様の意味がないよな……。
丁寧な回答thx。凄い助かりました。

191137 :06/03/20 15:38
>>179
>しかし、動作が怪しくケミへのヒールが、ホム自身のヒールになってしまいます。
それであってます。
HPみてみたら分かると思うけど、ホムにエフェクトは出てますがホムのHPは回復してません。
代わりにケミのHPが回復してます。
>>180とかでも話題に出てるけど、今の仕様だとケミに対してスキル使用は何故か出来ない。
ので、ホムを対象にヒールをして、ケミが回復するというわけわかんない状態になってます。

で、古いバージョンだと動かないということですが、
0マテの古いバージョンをこっちが持ってないのでどうにもこうにも……

192180 :06/03/20 15:45
>191
そ、そうなのか…
ずっと街中HP全快で試験してたから気づかなかったorz

193(○口○*)さん :06/03/20 16:09
よしじゃぁコの字型の壁の向こうにいる敵に
回り込んで攻撃する方法を考えようぜ
因みにコの字のサイズはさまざまだ

194193 :06/03/20 16:10
すみません誤爆しましたorz向こうに書きこんできます

195(○口○*)さん :06/03/20 17:14
すみません、物凄く初歩的な質問なのですが
フィーリルの「フリットムーブLv1」を60s毎に自動で使うようにするにはどうすればいいのでしょうか…orz
テンプレにある「一定時間で自動でスキルを使う」コードや
研究所のコードなどを入れてみたのですがうまく動かず…
そのままAIフォルダに突っ込むだけじゃダメなんですかね('Д`;)

196(○口○*)さん :06/03/20 17:43
>>195
ちょっと情報が足りないので解説にはなりませんが
・ファイルやフォルダが解説所の指示通りの配置になっているかどうか確認
・使っている時にエラーを出すならその部分を調べてみる

とりあえずお茶で一息入れてから確認してみることをおすすめします。

197(○口○*)さん :06/03/20 18:53
>>195
AIにコードだけ突っ込んでいるとするなら、突っ込む場所が悪いのかもしれません
元のAIを良く見てどのタイミングでそのコードが処理されてるか確認する必要があるかも

あとは処理によっては state や global variable に処理に必要な関数が追加されてることがあるので
このへんも見てみてはどうでしょう

198195 :06/03/20 19:17
すみません、言語とかわからないので関数とかエラーはいてる部分とかよくわからないのですorz
デフォの奴を改良しているので、多分フォルダ&ファイルの位置関係は大丈夫だと思うのですが・・・

ttp://www.sgv417.jp/~winter/alchemy/user_ai.html
の「リーフの自動緊急回避使用」が応用できる気がしてきたのでちょっと試してきますね

199(○口○*)さん :06/03/20 19:32
>>198
(´・ω・`)とりあえず、エラーのメッセージの中に行番号が出るから、
そのコードが何をしているのか調べようって話なのですが…

まず行番号の表示されるエディタを使ってるかどうか、って所から入った方がいいのかしら?
メモ帳で編集してる場合、行番号わからんしなぁ…
↓のFAQも参考に(エディタ関係)
http://f31.aaa.livedoor.jp/~alchemi/pukiwiki.php?%A5%DB%A5%E0%A5%F3%A5%AF%A5%EB%A5%B9%2FLua%2FAI

200195 :06/03/20 19:41
>>199
あ、メモ帳で編集してますorz

簡単な数値の書き換えくらいしか出来ないので、エディタ関係スルーしてました(´・д・`)

201(○口○*)さん :06/03/20 20:02
メモ帳で編集してても、表示タブの「右端で折り返す」にチェック入れてなかったら
ステータスバーが表示できる。で、そのステータスバーに行と列は表示されるぞ。

202(○口○*)さん :06/03/20 21:13
195の様にフリットムーブLv1自動使用を考えて昨日作ってみたブツ。
もっとスマートな方法あればご指導お願いします |・ω・`) プログラムワカラナス

-- global variable に
DelayTime = 0

function OnATTACK_ST ()

〜〜〜〜〜〜〜切取線〜〜〜〜〜〜〜
--ここから
local mysp = GetV(V_SP,MyID)
local mymaxsp = GetV(V_MAXSP,MyID)
if ( mysp >= mymaxsp * 0.8 and GetV(V_MOTION,MyEnemy) ~= MOTION_STAND ) then
 if( GetTick() >= DelayTime ) then
  SkillObject (MyID,1,SKILL_FLEET_MOVE,MyEnemy)
  DelayTime = GetTick() + 60000 -- 単位ms
 else
  SkillObject (MyID,5,SKILL_MOONLIGHT,MyEnemy)
 end
end
--ここまで
return
end

203(○口○*)さん :06/03/20 21:17
コード張りになりそうだし
AIスレに移動しない?

向こうに移動したほうが早く解決するだろうし

204(○口○*)さん :06/03/20 21:46
むしろこのスレはコードに行き着かないまでもアイデアとか
こう言うのを作ってくれないか、と言うのを要望するスレとして立てた物

相談とか雑談はこの辺で、実際に出来上がったコード類はAIスレの方に、って事だったんだが…
>>1に明記されてなかったのがマズーだったのと
こことAIスレの方でレベル差が出て張りづらくなってしまった感がある。

205(○口○*)さん :06/03/20 21:57
諸君 すまん つってくる orz

206(○口○*)さん :06/03/20 22:13
>>205
(´・ω・`)大丈夫だ。強くィ`


話は変わるけど、ぼちぼち初心者向けのテンプレを用意した方がよさそうですな。
本スレとの兼ね合いから、初心者向けのスレになってるわけだし。

あとは、テスターを募って動作保証のある見本AIみたいなのを一つ作って配布できたらいいかな。
踏み台にしたりAIの理解の助けになるようなものが作れれば理想的か

とりあえず必要そうな機能としては
種類問わずに全て非先行、オートでスキル使用、横殴り防止、無抵抗MOBにスキル使わない
こんな所か。

207(○口○*)さん :06/03/20 22:20
すみません。

プレイヤー操作でカプリスを撃つ時隣接セルまで行かず、また、スキル使用後は対象を叩きに行かなずにSP回復をまって
一定割合まで回復したら、またスキルを使う様にさせたいのですが
どこをどのように変更すれば良いのでしょうか。
御教授願います。

208(○口○*)さん :06/03/20 22:59
>>206
0マテベースにすれば早いんじゃない?
改造しての配布可ってなってるし

209(○口○*)さん :06/03/20 23:07
〜〜のAIファイルのココにコレを書き加える
こういう説明だと初心者にはありがたいかも・・・
コードだけ見ても好きな場所に書き加えていいのかな?って感じに(´・ω・`)
ベースのAIがあるとやりやすそうですね〜

210(○口○*)さん :06/03/20 23:31
>>207
AIスレの方の最近の分に似たような話題があったような。

手動でスキルを使うってトリガを元にして、一度スキルを使ったら、普通に実行した後の状態遷移で
オリジナルの関数に飛ばして、その中でケミの横から動かずに魔法のみを使う、ってループを回したらいいかな…
もちろん敵を倒したら待機状態に遷移するようにするのを忘れずに。

>>208
「ここは○○さんが書いた部分だからわからないですー」
とかなったら微妙かなとか思いまして…
出来ればスレの中で作られたコードに詳しいコメントをつけたものがいいのではないかと。

それとは別に、既出のコードを参考にすることはあると思います。

211(○口○*)さん :06/03/20 23:45
>>209
元のAIが皆一緒ならいいんだけどな。
それぞれがカスタマイズされたのを落としてきてベースにしてると、個人指導が必要になるからな。

とここまで書いてから「ベースのAIがあると」に気が付いた。
それでも人それぞれ必要な機能がチガウからだんだん食い違ってはいくけどな。

212(○口○*)さん :06/03/21 01:19
>>94
OnFOLLOW_CMDですな。

ttp://f7.aaa.livedoor.jp/~sorabito/
本スレのものと比べると大分へたれてますが、参考になれば幸いです。
あまり細かい機能はついていけないわ・・・

213179 :06/03/21 01:50
>>137
現在使ってるのがこちらのAIです。
街中と戦闘で同じAIを2種、自動緊急回避無しとかで使い分けてます。
今、配布されてるのは機能がありすぎて使いづらくて・゚・(ノД`)・゚・
ttp://www5e.biglobe.ne.jp/~akemino/upload/mmobbs/files/2985.lzh


それはそうと、
プログラムできない身としては、ある程度シンプルにカスタマされたAIに
機能ごとにプログラム追加してけるような感じであると、好みに仕上げやすいと思います。
ア・ラカルト方式?

214(○口○*)さん :06/03/21 02:54
ゼロマテさんとこのをデフォルトとユーザーの両方でアクティブとノンアクティブだけ変えて使ってる
切り換えたいときは 安息→/hoai→コール でやってる。

1050行目あたりの↓のとこでAをBに。
> result = GetMyEnemyA (myid) -- 種族に関係なくノンアクティブ化
> -- どうしても常時アクティブにしたい場合は GetMyEnemyB (myid)

最初はコツコツいじってたんだけど、自分でやったその全てにおいて上位互換なゼロマテさんに落ち着いた罠。
正直、('A`)マンドクセ

215(○口○*)さん :06/03/21 04:14
>>207
動作確認してないから動くか分からないけど、プレイヤーでスキル使う処理は
function OnSKILL_OBJECT_CMD (level,skill,id)

end
の間の処理でやってるから、ここを書き換ればいいんじゃないかな?

コード追いかけるとOnSKILL_OBJECT_CMD→OnCHASE_ST→OnATTACK_STと処理が動いて
OnATTACK_ST内でスキル使ってるから、スキル使用後そのまま殴るんだと思う

OnSKILL_OBJECT_CMDに直接スキル使う文を入れて、
スキル使用後にMySkillLevel、MySkill、MyEnemyの三つを初期化、
その後待機状態のOnIDLE_STに移動させればいいと思う

動作確認はしてないから動くかは保障できない

216(○口○*)さん :06/03/21 04:33
>>207

>>一定割合まで回復したら、またスキルを使う様にさせたいのですが
この部分を「自動」でさせるか、「手動」でするかで変わってきますね。
手動ならば、>>215氏の方法でOKです。

自動ならば、その為のコードを追加しなければなりませんね。
#カプリスの射程っていくつなんだろ?

217(○口○*)さん :06/03/21 04:44
ホムのスキル射程は理論上では無限
実際にはID取得できる範囲

218(○口○*)さん :06/03/21 04:57
色んな方が自作AI出してくれているようですが
どっかに一覧みたいので置き場みたいにできないかなぁ

219(○口○*)さん :06/03/21 05:29
>>217

thx。
ID取得できる範囲で無限ですか。
なら射程外なら射程内に入るまで敵に近づくという部分は書かなくて
いいわけですね。

いや、GetV()関数用の定数にV_SKILLATTACKRANGEってのがあったんで
気になったんです。今見直してみると未実装って書いてありますね。
ということは、将来においてスキル射程が実装されるのかも知れない
ですね。

220(○口○*)さん :06/03/21 08:26
>>218
オススメ|っ【The Winter's Tale】
ttp://www.sgv417.jp/~winter/

221(○口○*)さん :06/03/21 12:36
共闘する時に、ホムがMobやケミに重ならないようにするってのは既出かな。
PPする時邪魔なんだが、AIファイル開けて2秒で眩暈が……。

222(○口○*)さん :06/03/21 12:48
>>221
既出かどうかは不明だが、前に試した時は重力座標の影響でうまく動かなかったなぁ。
HPが○○%以下になったら逃げる関数が組み込んである配布AIを利用したらどうだろうか?
ぜろまてりあるで配布してる奴にもあったな。

(個人的にはALT+右で移動させるのが楽。

223(○口○*)さん :06/03/21 12:50
>>221
やってみたんだけど、難しかったよ。
まず、重ならないようにするために動くから、その分手数が減る。
次に、戦闘中だからヒットストップくらいやすくて思うように動かない。

結果、戦闘中はひたすらずれようとして、
なんか妙に飛び跳ねながら戦うようになってしまった。
実際はなかなかうまく避けてくれないし……。
もっと腕のいい誰かならなんとかできるのかも。

とりあえず、不可能ではない。

224(○口○*)さん :06/03/21 13:05
以下のような動作をさせたいのですが、
GetOwnerEnemyやGetMyEnemyのいじり方がよく判りません。
どなたかヒントをお願いします。。

PT構成
1.基本的にホムが壁
2.ケミは火力担当(宝剣手動使用による遠距離攻撃)
3.ケミの防御ステは皆無
4.ホムは羊

要件
1.ケミのタゲを奪うくらいでいい
2.横殴りはして欲しくない
3.非アクティブモブのタゲ取りは基本的に手動でやる
 (ジャ無いと横殴りするだろうから)
4.ケミがタゲられて、モブが近づいてる時、
 そのモブを殴りに行って欲しい

225(○口○*)さん :06/03/21 13:13
>>224
それ、ホムが攻撃しないで壁に徹する理由はなにかありますか?
ホムが叩いた敵の経験値はケミにも入るので、
「ホム壁、ケミのみ攻撃」にする必要をあまり感じないのですが。

ちなみに、多少の手動操作があってよいのなら、標準AIでもできます。
・ALT+右クリック2回で、ホム攻撃。
・1回攻撃したのを確認したら、ALT+T(待機状態へ)。
 これでホムは一切攻撃しなくなる。
・敵が湧いてケミが襲われたら、再度ALT+T(通常状態へ復帰)。
 ホムは、ケミへ攻撃している敵を優先で殴るはずです。

226(○口○*)さん :06/03/21 13:24
>>224
どきどきAIがそのまま使えるような気がします。
自分が張った>>212のAIでもできるんじゃないかしら

227(○口○*)さん :06/03/21 13:29
>>222-223
レスありがと。

なるほど、実装は可能だけど実効は難しいといったところですか。
可能らしいことはわかったので、ちょっと参考HPと睨めっこしてきますよ。
素人ならではのアイディアが出るかもしれないし(TOM

228(○口○*)さん :06/03/21 13:33
早速のレスありがとうございます。
書き方が悪かったようです。
誤解させてしまってすみません。

ホムが壁と書いてますが、ホム自身も攻撃してもらいたいです。
PTの割り振り的に、Vit騎士見たいな動作の例えとして壁と言ってました。

結局、要件4の自動化をしたいって事でした。
そしてその実装方法がよく判らなかった、と。
ケミが殴られる前にホムが動いてくれるのが理想です。

>>212 早速試させてもらいます。
どきどきAI っていうのは知らなかったので、ちょっと検索してみます。

229(○口○*)さん :06/03/21 14:56
ぼちぼち初心者向けAIの仕様をまとめてるものの
デフォルトのAIによく聞かれる機能を追加した物がベストかな、と考える。

使用頻度の高い機能についてちょっとまとめると

デフォルトを非先行
横殴り防止機能
ケミと等速@パケット少なめVer
オートスキル@攻撃(ムーンライト・カプリス)
オートスキル@支援(ディフェンス・フリットムーブ)
オートスキル@特殊(緊急回避・リーフのヒール・キャスリング)
草やキノコを叩いてる時はスキルを使わない。
ケミが草やキノコを叩いてる時はホムも攻撃

これらを0と1を書き換えるだけでON/OFFや先行/非先行の切り替えを可能にした物

スキル系の+αとして発動条件も数パターン用意してみるべきか?
A:一定以上のSPがあればスキル使用
B:最初の一撃のみスキル
C:ランダム(発動率5%ぐらい)
D:ケミのHPが一定以下の場合

HP減少時に逃亡とかは必要かな?
これは無いと困りそうだ、とか
これはそんなに需要なさげ、とかあったら言ってくださいまし

230(○口○*)さん :06/03/21 15:13
SP量に応じてレベル変動とかもあるといいかも。
多い時は全力で、少なくなったらちびちびみたいな。

231207 :06/03/21 15:32
WBC見いってた・゚・(ノД`)・゚・
>>215
OnSKILL_OBJECT_CMDでスキルを手動で使った場合

→function OnCHASE_STに遷移して
....→1.IsOutOfSightで範囲に敵無し→MyState = IDLE_STとMyDestX, MyDestY = 0,0で、その場?に待機
....→2.IsInAttackSightで範囲に敵有り→MyState = ATTACK_STで遷移

→function OnATTACK_ST 上から遷移してきて
....→1.IsOutOfSight:策適範囲外か、MOTION_DEAD==GetV(V_MOTION,MyEnemy):敵死亡の時はMyState = IDLE_ST:待機
....→2.IsInAttackSight攻撃範囲内から敵が離れてれば→MyState = CHASE_STで追跡
........→2−1.MyDestX, MyDestY = GetV (V_POSITION,MyEnemy);で目的地を敵のセルに設定
........→2−2.Move (MyID,MyDestX,MyDestY)で移動
........→2−3.叩く
....→1〜2−3迄をループ

....if (MySkill == 0) then この定義が分からない。もしホムンクルスのスキルが0の時?(戻り値0?
............Attack (MyID,MyEnemy) その打撃で攻撃しなさい? 
....else elseって条件分岐が分からない。戻り値が0で無ければ?
............SkillObject (MyID,MySkillLevel,MySkill,MyEnemy) 自分のホムタイプとスキルレベルとスキルを確認して敵に使う?
............MySkill = 0 スキルの戻り値を0にリセットしなさい?
....end 処理終了かな
....TraceAI ("ATTACK_ST -> ATTACK_ST : ENERGY_RECHARGED_IN")

....return 「if (MySkill == 0) then」からの処理を繰り返しなさい?

→end function OnCHASE_Sからの処理終了

コレであってますでしょうか?
なにをさせているかを書いてみましたので、行動条件を組み込んではいません。

>>216
スキル使用が自動か否か
ホムに判断させて自動で、
「SCからスキルで攻撃→SP回復まで待機→自動でスキル使用→SP回復まで〜」
とさせたいなと言う事です。

232207 :06/03/21 15:33
長くなったので分け。

最終的にはゼロマテさんのdoki2AIに組み込めたら良いなと考えています。

233(○口○*)さん :06/03/21 16:44
>>207

AIスレのほうに拡張ファイルへのリンクを張っておきました。

ttp://enif.mmobbs.com/test/read.cgi/livero/1142535070/750

ダウンロードして使ってみてください。
尚、動作未確認ですので、最初にオリジナルのAI.luaをバックアップして
おいて下さい。

234207 :06/03/21 16:53
>>233
有り難うございます
外部定義ファイルにして読み込ませて居るんですね。

早速使わせていただきます。
これを機に色々勉強してみます。

235(○口○*)さん :06/03/21 17:09
韓国のAI見てて思ったんだけど
友達登録みたいにmob登録って出来ないのかな
自分で狩り場に行って1つずつ指定して行けば便利な気がする
特定の操作で先行非先行を指定していくみたいな

236(○口○*)さん :06/03/21 18:20
>>231
大体合ってると思います

if()then〜else〜end
というのは、if()thenの()の中の条件を満たしている時がthen以下の処理で
それ以外がelse以下の処理になるという命令文です

if (MySkill == 0) then は 
MySkill(入力されたスキルID)が0だった場合(スキル使用命令が無い場合)

という条件になります

return は、returnの入っている処理(ここで言うとOnATTACK_ST())を繰り返す、だったと思います

>>233
233氏のコードのMob判定の部分が便利そうなので
自分のAIを改良するとき参考にしたいです

237(○口○*)さん :06/03/21 18:42
死亡モーションが長い敵(ex.ゴブリンライダ)を倒した時、
完全にモブが消えるまでホムがその場で動こうとしないんだが
その辺改善されたAIってもうあるかな。

238(○口○*)さん :06/03/21 20:14
GetMyEnemy や GetOwnerEnemy内で死亡モーションのmobを外せば動くんじゃないかな。
多分死亡してるから戦闘は即解除されてるけど、策敵部分で死亡中を考慮してないからまた殴ろうとしてると思う。

if (v ~= owner and v ~= myid) then
の部分を
if (v ~= owner and v ~= myid and MOTION_DEAD ~= GetV(V_MOTION,v)) then
とかにすれば多分いける気がする。

239(○口○*)さん :06/03/21 20:40
>>235
既にやってる人いる。
ホムンクルスのAIを語るスレその3の592参照
ちなみに自分は使わせてもらってるがいいかんじ。

240(○口○*)さん :06/03/21 20:44
>229
何この漏れが望むAIは?
できれば鳥とバニの攻撃スキルの発動LVを別途設定できたら嬉しいです。

241(○口○*)さん :06/03/21 20:46
オーラキャラを発見するとそのキャラのまわりをくるくる飛び回る光物に目がないホムにできますか?

242(○口○*)さん :06/03/21 21:12
>>240
その辺は設定できるようにしないとなぁ…メモメモ
ぶっちゃけAIスレを見ながらぼちぼち組み立てた自作AIの仕様なんすけどね。
他にどきどきAIの回転機能とランダム移動とかが入ってるけど要らないと思って外しました。

あと、バイオプラントで出したMOBは無視って設定も出来るんだけど
Pvゾーンだとフェアリーフに殴られても反撃出来ないって欠点があるので微妙な所
(ON/OFF設定できるようにすればいいんだけどね

>>241
ホムはキャラクターのレベルを取得できません。
自分の腹具合もわからないようなヤツですから(ノ∀T)

243(○口○*)さん :06/03/21 21:35
こっちでいいのかな

ケミスレの前スレ625さんのAI90使ってますが
時々ホムの移動速度が遅くなって血斧ケミについてこれなくなります
ハエ使うと治ります。

244(○口○*)さん :06/03/21 22:06
血斧装備せずにホム呼び出したりハエ使ったんならしらね

245(○口○*)さん :06/03/21 22:29
オブジェクトIDがたまーに-1のを拾うことがあるなー。こんな感じの。
ID=-1 TARGET=0 X=110 Y=66 TYPE=-1 HOMUNTYPE=Baby Alchemist(4041) MOTION=MOVE(1) ATTACKRANGE=2 SKILLATTACKRANGE=1 HP=-1 SP=-1 SP=-1 SP=-1 IsMONSTER=N
座標やホムタイプは取れてるけどそれ以外はほとんどない状態。
mobにもこういうのがあったんで一時的な表示オブジェクトかなんかだろうか?

246(○口○*)さん :06/03/21 22:41
>>243
それはAIのせいじゃない。
ホムの移動速度はAIを初期化っつか呼び出したときとかテレポアウトしてきたときの
主人の移動速度と等速になるように設定されるんで、


ここまで書いてめんどくさくなった過去ログ読め

247(○口○*)さん :06/03/21 22:45
>>240
つかそれも含めて全部ゼロマテでできてる

248(○口○*)さん :06/03/22 01:36
>>229-230
初心者向けのAIということで言うと、
ここ↓の人が、試みてる
ttp://www.kmzw.jp/nb/ai.html

まさしく挙げられているような実装ですよ

249(○口○*)さん :06/03/22 02:14
初撃スキルはオーバーキルが減るので将来的には欲しい

>>246
了解

250(○口○*)さん :06/03/22 02:16
>>248
(´・ω・`)こっちの方が初心者向けかな。しかも高機能。
それとは別にぜろまてさんとこのソースの普及率が著しいようなので(町中でくるくるまわるホム続出)
このスレで初心者用と銘打って用意する必要は無いでしょうね。

実装とは別にプログラムの理解や改造の助けになるように…とか考えたけども
これ以上喋らない方がよさげなのでパス。

(´・ω・`)ノシ⌒□ ポイ

251(○口○*)さん :06/03/22 02:49
>>249
スキル使用率100%にして、スキル使った後でSPが減ってればフラグを立てて、
同じIDの敵を攻撃してる間はフラグが立ってたらスキル使わない、でいいじゃない
フラグじゃなくてカウンターにすれば、何回まで同じ敵にスキル使うかも
調整できる

うちはAIスレのMOBDATAに「敵ごとのスキル使用回数」を追加して、
その回数分だけスキルを使ってから通常攻撃に移る様にしてる
それだけだとなんなので、スキルとスキルの間のディレイには
通常攻撃を入れるようにしてる。

これだけ実装しときゃ、キノコ系のスキル使用回数を0にするだけで
スキル未使用、っていうのも同時に実現できるし。

252(○口○*)さん :06/03/22 04:29
>>236
いやいや、returnは呼び出し元に戻れって意味だ。
デフォルトだとOnATTACK_ST()を呼び出してるのはAI()だけだから
AI()に処理が戻る。

253(○口○*)さん :06/03/22 09:57
ゼロマテさんのAI普及はかなりのモノだが、あれをベースに
自分が付けたい機能を組み込むのは、なかなか初心者クラスだと難しい。

このスレとしてのベースAIを作り
・ココにこう言う動作を組み込むには や
・〇〇さんの様な動きをさせたい
と、話しの流れを統一するのは寧ろ良いと思う。

答える方も、「ベースAIのココをコウ直せば」と言えるし、
極端な話し、ベース以外の改造は作者に聞けとも突っ張ねる事も出来る。

独自に拡張している方も、質問し易いんじゃないかな。


他人の書いた部分を読み直す手間が減るからスレベースAIは在って良いと思う。

いかがでしょうか。

254253 :06/03/22 10:06
携帯からだから、読み難かったら申し訳ない。

追記
と言うのも、正直に話すと
ココやAIスレで書かれた動きを
どのAI.luaに書けば良いのか

どれとどれが共存出来るのか
初心者なりに色々試してたら
ぐちゃぐちゃになってしまって。

と言うのが本音です。

255(○口○*)さん :06/03/22 10:20
工体研究所のAIつかってるんだが
ここのやつも
configがあってこれをいじれば簡単に設定いじれるから便利

でも
指定したLv以下のMOBにスキルを使わない機能と
指定したLv以上のMOBに攻撃しない機能が
俺のPCでは起動しない
なぜだろう??

256(つд`) :06/03/22 10:37
すいません、AIを改造する以前の話なのですが
Gravity→RagnarokOnline→AI→ここからフォルダが開かなくて
こまっています。どなたか開き方を教えていただきませんか?

257(○口○*)さん :06/03/22 10:46
>>256
「USER_AI」フォルダが開かない、という風に読めるんだけど、
初期状態じゃUSER_AIフォルダは存在しないんで、自分で作るんだよ。
その中にカスタマイズしたAI.luaファイル他を突っ込んだりする。

258(○口○*)さん :06/03/22 10:55
>>255
mobdata.luaは入ってるか?

259(つд`) :06/03/22 11:00
USER_AIフォルダとAIとしか表示されてないフォルダは
違うものなんですか?

260(○口○*)さん :06/03/22 11:09
AIフォルダの中にUSER_AIフォルダを作成するのさ

261(○口○*)さん :06/03/22 11:17
名前が違うなら別物だって見当くらいはつけようぜ。
まず君はPCの基礎からやったほうがいいが、いまAIってフォルダを開いたら、〜.luaってファイルが三つあるだろ。
それがデフォルトのAI。で、自分でいじりたいAIは、AIのフォルダの中にさらに「USER_AI」ってフォルダを自分で作って、その中にいれる。

262(○口○*)さん :06/03/22 11:22
だれかkoreうpってください

263(○口○*)さん :06/03/22 11:23
そろそろケミ本スレみたいにQ&Aとかのテンプレでも作ったほうがいいんじゃなかろうか。

264(つд`) :06/03/22 11:25
すいません、あまりPCの中身をいじったりしたことないものですから・・・
気分を害されるかもしれませんが、もう少しおしえてください。
自分でいじって入れるAIというのは、公式HPにあるものを入れて
行うのでしょうか?それとも最初から自分で作った物を入れるのですか?

265(○口○*)さん :06/03/22 11:30
ここは ぱそこんの しつもんすれでは ありません。
いちいち てほどきを するわけには いかないので、
まずは としょかんに いって ぱそこんの べんきょうを しましょう。

266(○口○*)さん :06/03/22 11:37
ttp://hagane-maru.at.webry.info/200603/article_20.html
初心者用に解説しているので
ここを見てもわからないようなら諦めたほうがいいかもしれない

267(○口○*)さん :06/03/22 11:43
264に関して言えばPCの初歩知識の質問でもなくこのスレ的におk
力があればゼロから書き始めてもいいが一般人にはまず無理だな
デフォAIにAIスレなんかに書き込まれる内容を組み込んだりして作る
自力で弄れる有志がカスタマイズしたものを各自サイトで公開してるのを使うのもいい
更に有志のAIに書き込み内容を盛り込むのもあり
ケミテンプレサイトに公開サイトがいくつか載ってる
有名どころ使ってればまず問題ない
多分264に自力は無理だからどれか選んで使っとけ

268(○口○*)さん :06/03/22 11:45
ホムを主人の周りをグルグルと回るようにするのはどうすればいいんだ・・・orz

269(○口○*)さん :06/03/22 11:47
>268
>266のやつ参照するといいよ

270(○口○*)さん :06/03/22 12:07
>>268
ぜろまてりあるに行けば幸せになれると思う。

271(○口○*)さん :06/03/22 12:09
もう少しわかりやすく
ゼロマテリアルさんのところの
どきどきAI使ってみるといいですよ
細かい設定はリンク先参照で
ttp://www.kogarashi.jp/0-material/

272(○口○*)さん :06/03/22 12:14
各所配布AI概要(かっこ内は配布されているAIの名称と通称名)

▼初心者向け
 ttp://www.kmzw.jp/nb/ (くま○〜@ガルムのAI、くまAI)
  ○プログラムってなに?AIって?という人でも使える
  ○ソースの説明も詳細でAI入門と動作理解には最適
  ×非常にスマートだがその分機能は少ない

▼初心者〜中級者向け
 ttp://www.kogarashi.jp/0-material/ (どきどきAI or ぜろまてAI)
  ○上に同じく初心者でもすぐに使える
  ○見た目のかわいい回転機能など独自機能が多い
  ×ソースは美しいが説明コメントが少なく改造しづらい

▼中級者向け
 ttp://www.sgv417.jp/~winter/ (Winter's Tale AI or 韓国AI)
  ○韓国で多く普及しているユーザAI
  ○友達登録機能があるなど搭載機能も豊富
  ×幾人もの手を経ているためソースがややスパゲティ

▼上級者向け
 ttp://blog.livedoor.jp/aidev/ (工体研究所AI、研究所AI)
  ○機能の多さと更新頻度は随一
  ○攻撃対象をレベルフィルタリングできるなど廃ユーザでもok
  ×使いこなすには多くの自己設定が必要で初心者には不向き

273(○口○*)さん :06/03/22 12:18
>>272 グッジョブ!! すっきりまとまってるね。そのままケミテンプレにいれてもよさげ。

274(つд`) :06/03/22 12:37
ありがとうございました、お騒がせして申し訳ありません。

275(○口○*)さん :06/03/22 12:47
>>272もいいけど
初、中、上級者向けに分けてリンク張ったまとめページも欲しいねぇ
テンプレに入れる時も楽だし

276(○口○*)さん :06/03/22 17:03
>>255です
mobdata.lua
ははいってないっすどこにあるんだろう・・・

277(○口○*)さん :06/03/22 17:08
>>255っす
かいけつしたっすすんませんでした

278(○口○*)さん :06/03/22 19:11
要望は大手さんの配布AIのお陰で減少傾向に入るだろうし
AI改造のFAQを用意するのが良さそうですね。

つーても、公式やケミテンプレに載ってるような質問が多いのもどーしたものかねぇ…

279(○口○*)さん :06/03/22 20:33
すみません、質問させてください。
いま自動でフリットムーブを使うのに

EmergencyAvoidDelay = 0 -- フリットムーブ間隔管理用

IN_SKILL_EMERGENCYAVOID = 8010 -- スキルID

function OnAUTOEA_CMD_ST () -- フリットムーブレベル3を自動で使用 -- 1140行を参照

local casting = false
local type = GetV(V_HOMUNTYPE, MyID)

if (type == FILIR or type == FILIR2 or type == FILIR_H or type == FILIR_H2) then
if (EmergencyAvoidDelay == 0) then -- 初回
if (GetV(V_SP, MyID) == GetV(V_MAXSP, MyID) and (MyState ~= ATTACK_ST or MyState ~= IDLE_ST)) then -- SP満タン&非待機or攻撃時
EmergencyAvoidDelay = GetTick() + 50000 -- 次にかけ直すまでの時間(単位/ms)
casting = true
end
else
if (EmergencyAvoidDelay <= GetTick()) then -- 前回発動後一定時間経過
if (GetV(V_SP, MyID) == GetV(V_MAXSP, MyID) and (MyState ~= ATTACK_ST or MyState ~= IDLE_ST)) then -- SP満タン&非待機or攻撃時
EmergencyAvoidDelay = GetTick() + 5000 -- 次にかけ直すまでの時間(単位/ms)
casting = true
end
end
end

if (casting == true) then
SkillObject(MyID, 3, IN_SKILL_EMERGENCYAVOID, MyID) -- フリットムーブレベル3使用 -- 使うスキルは1117行のスキルID参照
end

end
end

というコードを使っているのですが、これだとかけ直し時間がきてもspが全快でなければフリットムーブを使ってくれません・・・

spが消費した状態でも使えるようにするにはどうしたらいいのでしょうか・・・?

280(○口○*)さん :06/03/22 20:45
二番目のifの条件に「SP満タン」ってのが入ってるから、それを書き換えればおけ。

GetV(V_SP, MyID) == GetV(V_MAXSP, MyID)ってのがその部分で
残りSPがX以上ならスキルを使わせる場合。

例えば
GetV(V_SP, MyID) >= 50 であればSPが50以上ある場合かけ直してくれます。

281279 :06/03/22 21:01
if (type == FILIR or type == FILIR2 or type == FILIR_H or type == FILIR_H2) then
if (EmergencyAvoidDelay == 0) then -- 初回
if (GetV(V_SP, MyID) == GetV(V_MAXSP, MyID) and (MyState ~= ATTACK_ST or MyState ~= IDLE_ST)) then -- SP満タン&非待機or攻撃時
EmergencyAvoidDelay = GetTick() + 50000 -- 次にかけ直すまでの時間(単位/ms)
casting = true
end
else
if (EmergencyAvoidDelay <= GetTick()) then -- 前回発動後一定時間経過
if GetV(V_SP, MyID) >= 50 and (MyState ~= ATTACK_ST or MyState ~= IDLE_ST)) then -- SP満タン&非待機or攻撃時
EmergencyAvoidDelay = GetTick() + 5000 -- 次にかけ直すまでの時間(単位/ms)
casting = true
end
end
end

に書き換えてみたところ、やはりエラーが・・・
何か記述の方法とか間違えてるんでしょうか(´・ω・`)

ちなみにエラー文は「`then' excepted near `)'」でした

282(○口○*)さん :06/03/22 21:05
戦闘にまったく関係ない話なんだけど
ホムのAIつかってホムダンサーズとか作れれば楽しいよなぁ
って話を今日知り合いと飯食ってるときに話してたんだけど、
そういうのってどう思う?

283279 :06/03/22 21:06
あ、括弧が1つ足りないだけみたいでした・・・(;゚д゚)

お騒がせしてすみません・・・

284(○口○*)さん :06/03/22 21:08
if GetV(V_SP, MyID) >= 50 〜以下省略
 ↑ここ括弧無いぞ(笑)

285(○口○*)さん :06/03/22 21:09
(゚д゚)<

286(○口○*)さん :06/03/22 21:11
(゚д゚)<

287(○口○*)さん :06/03/22 21:24
>>285-286
[*゚д゚]ゞ

>>282
Move関数を使えばダンスは比較的簡単にできる。
上下左右+斜めでどうやってダンスに見せるかが問題。

振り付けさえ考えてくれれば待機中にダンスするAIなら作れるかも。

288(○口○*)さん :06/03/23 01:18
>>287
1秒ごとにMoveToOwner()をやるだけで
それなりには見える。
まあ、踊ってると言うより、ウロウロしてるだけって感じだけど。

289(○口○*)さん :06/03/23 12:28
AIスレで聞くと話の腰を折りそうだったのでこちらで質問させて下さい。
AIスレの>>794を使いたいのですが、あれはfunction OnIDLE_ST ()の
最後の方を書き換えたらいいのでしょうか?

290(○口○*)さん :06/03/23 13:15
>>289
Traceの中身からするとそれであってる。
書き換えると言うよりは書き足せばいけるんじゃなかろうか。
どきどきAIの待機時回転が入ってたらそれは使わない方がよさげ。

291(○口○*)さん :06/03/23 18:17
AIとはまったく関係ない事で質問があります。
以前にAIスレかケミスレでluaを扱うのに便利なエディタとして
SciTEが紹介されて以来、これを使い続けています。
それでこのエディタの設定の中で、「行番号を表示する」というものがあって
便利な機能なのでいつもONにしておきたいのですが設定を保存してくれません。
「オプション→共有設定を開く」まではわかるんですが
どこを書き換えればよいのやらで困ってます。
どなたか教えていただけると助かります。

292(○口○*)さん :06/03/23 18:27
>>291
スレ違い。ぐぐれ。

293(○口○*)さん :06/03/23 18:33
その場で一回転するってできないですかね?
ぜろまてさんのAIで主人の周りを回るのに
組み込めたら可愛いかなと思ったんですが

■→→→■
↑   ↓
↑ 主 ↓   黒四角の所で
↑   ↓   その場一回転 とか
■←←←■

294(○口○*)さん :06/03/23 19:37
向きだけ変えること自体無理。移動方向に勝手に向くだけで。

295(○口○*)さん :06/03/23 20:50
AIとかさっぱりなので、くまAI落としてみた
なんつ〜か、HPもAIも作者の優しさが身に沁みた

あと、関係ないけど、AIの使い方のSSで、
チャット欄に「あれ」を山ほど売ってて笑ったw

296(○口○*)さん :06/03/23 21:07
>>295
お前は俺かw
くまAIは、他と比べて機能は確かに少なめだけど、
AIのソース一行一行にわかりやすく意味が書いてあって、
「ほ〜、AIってこういうロジックで動いてるんだ〜」という風に
わかって勉強になった。

もちろん「あれ」もワラタw

297(○口○*)さん :06/03/23 21:19
初歩的ですいません
ノートパッドで開けますけど○○行目・・・ってのは
他のエディタだと簡単に見えるんでしょうか
みなさん何使用してるのか教えていただけませんでしょうか

298(○口○*)さん :06/03/23 21:23
>>297
自力で一行一行数えてる

時間はかかるけど愛するホムのしつけ(AI)のためにがんばってる

299(○口○*)さん :06/03/23 21:31
>>297
ノートパッド使用だが、書き換える対象で検索してる

300(○口○*)さん :06/03/23 21:37
>>297
terapad使ってみたら?無料だしインストーラーなしだし気軽に使えるんじゃないかな

301(○口○*)さん :06/03/23 21:39
notepad使用してるけど
編集→行へ移動って操作ができる

302(○口○*)さん :06/03/23 21:42
追記
Ctrl+Gでも可能

303(○口○*)さん :06/03/23 21:50
>>298-299ありがとです
>>300探してみます
>>301私の環境ではなぜか「編集→行へ移動」が実行できません、薄い色でしか表示できませんです

304(○口○*)さん :06/03/23 21:52
>>301あぁ、すいません。右端で折り返すになってました、自己解決しますたm(__)m

305(○口○*)さん :06/03/23 22:06
>>295
くまの人はいつも「あれ」売ってるよw

306(○口○*)さん :06/03/23 23:02
notepadは右端で折り返すのチェックを外してステータスバーを表示すれば
カーソル位置の行数と桁数あステータスバーに表示されるが、
正直テキストエディタくらいフリーのなりなんなり落としてきといたほうが
のちのち何をやるにしても便利でよい希ガス。

検索機能やら置換機能やらにしても。

307(○口○*)さん :06/03/24 00:00
テンプレにのってた「NoEditor」っての使って編集してる。
強調と行番号あると分かりやすくていいね。現状だと.lua専用エディタになってるけど。

さくらエディタは解凍できず、SciTEはダウンロードが99%で止まったっきり落とせず。
これしかなかったとはいえ、使い心地は結構満足してます。

308(○口○*)さん :06/03/24 00:29
私のは全く別のエディタなんだけど、MKEditorってのを使ってます。
行番号の表示とか、特定の文字列を強調表示とかはオプションで選択すれば表示できる。
複数のファイルをタブで切り替え出来るのは特徴って言うのかな?

昔から使ってるから、ってだけなんだけどちょっと紹介。

MKEditor for Windows
ttp://mk-square.com/home/software/mkeditor/

309(○口○*)さん :06/03/24 01:04
>>308
同じくMK使ってるけど、LUA用の強調定義ファイルってある?

310(○口○*)さん :06/03/24 01:20
>>308
エディタオプションの強調表示にキーワードを突っ込んでる程度。
if,then,function,end辺り登録してる。
lua用に何か用意されてるって訳じゃないっすよ。

311(○口○*)さん :06/03/24 02:24
さくらエディタにlua用のがあったから、それから手作業コンバートしてやりゃいいかもね

312(○口○*)さん :06/03/24 02:49
多分ID変わってますが289です。
大変遅くなってしまいましたが>>290さん回答ありがとうございます。
0マテさんのは使ってなく、オフィシャルのやつにAIスレなどから欲しい分を切り貼りしています。

書き足して、エラーもどうにか出ないようになりました。
しかしホムが交戦中にHP50%以下になっても移動せず、
戦闘後に離れた所をうろうろしてしまう状態に orz

313(○口○*)さん :06/03/24 03:17
>>312
「語るスレ」のほうで、AI晒してどこが悪いか診てもらうが良い

314(○口○*)さん :06/03/24 07:34
>>310
やっぱりそうなのかー。サンクス
スレ違いスマソ >all

315(○口○*)さん :06/03/24 10:51
テキストエディタはVX Editorもおすすめしとく。
強調キーワードをそのままカラー印刷できるのが俺的にはかなり便利。

316(○口○*)さん :06/03/24 11:23
私伝で申し訳ない
AutoSkillを作った神氏へ
該当鯖で羊でよければ人柱になるよ

317牛乳 ◆1fBR9J/x5I :06/03/24 14:04
エディタ関連は雑談の方でやらないか?
http://enif.mmobbs.c#

318牛乳 ◆1fBR9J/x5I :06/03/24 14:05
すいません、ここ雑談でした。

319(○口○*)さん :06/03/24 14:32
>>317-318
(´∀`)σ)´Д`)

320(○口○*)さん :06/03/24 14:50
>>316

AutoSkill.luaのことだろうか?
それならば私が作ったものだが、最新版では羊さん関係の動作確認は
一応終わってるんだ、リーフで(ぇ
最新版をダウンロードしてもらって中の方法に従ってAI.luaを修正し
てもらえれば動くはずです。協力申込感謝です。25日のケミ祭りでで
も会いましょう。

AutoSkill.luaのことじゃないならば…。スルーしてください(笑)。

321(○口○*)さん :06/03/24 14:56
そういえばもう明日か。
なんかネタAI考えとこう。

322(○口○*)さん :06/03/24 15:07
なんとなく行番号を振るBookmarkletを作ってみたので貼り付け。IE専用。
javascript:(function(){var d=document.getElementsByTagName("body")[0];a=d.innerText.split("\n");s="";for(var i=0;i<a.length;i++)s+=(i+1)+"\t| "+a[i]+"\n";d.innerHTML="<pre>"+s+"</pre>";})();

と思ったけど、IEが一行目の空改行を無視してくれます。
これじゃ使えない。orz

323(○口○*)さん :06/03/24 16:42
現在護衛つきAIにどきどきAIの機能を移植した物を使ってるのですが、ALT+Tでデフォルトのノンアクティブからアクティブに切り替えるにはどうすればいいですか?

324(○口○*)さん :06/03/24 17:56
>323

ホムンクルスのAIを語るスレ その3
ttp://enif.mmobbs.com/test/read.cgi/livero/1142535070/983

参考にどうぞ

325(○口○*)さん :06/03/24 18:42
>>308-310
MKEditor用に、ちょ〜適当な強調文字列ファイル作ってWikiに置いてみた。
細かいところに問題はあるが、ないよりましと思って使ってくれ。
色とかは使う人の方で好きにいじってくりゃれ。

というわたしはNoEditor派。

326(○口○*)さん :06/03/24 19:07
Wikiに上がっている強調表示定義ファイルについて

NoEditor用の問題
・著名AIで使用されている関数が登録されていない。
・math.〜の後ろが間違っていても強調表示になる(仕様)
・[[コメント]]に対応できていない(仕様)

MKEditor用の問題
・ろくに確認していない
・著名AIで使用されている関数が登録されていない。
・math.〜とかの前の部分しか強調表示されない
・[[]]のコメントに対応できていない(多分仕様)
・強調文字が3種類しか指定できないので、ちょっとわかりにくいかも。

どっちも適当にいじって、好きに更新しちゃってください > 利用者の方々

327(○口○*)さん :06/03/24 20:48
>>326
MKEditorだと、[[]]のコメントはいけるぞ。

エディタオプション→強調表示2→コメントとして認識する括弧
の所に[[と]]の組み合わせで登録してしまえばおk

328(○口○*)さん :06/03/24 21:36
>>327
ああ、たしかに行けました。設定としていれてはあるのに
Const.luaの定義で効いてないなと思ってそう書いたのですが
行頭に--が入ってたせいでした。(笑)

Wikiに置いてあるのは、327さんの指摘してくれた項目も定義済みなんでご安心を。

なんか、MKEditorは、うちのマウスだとホイールでスクロールできないので不便。
やっぱNoEditorでいいや。

329(○口○*)さん :06/03/24 21:47
>>328
ホイールの設定は、環境オプション設定→基本設定→ホイールスクロール

ラジオボタンの設定項目の所をMKEditorにて制御するって方をチェックしてエディタを再起動
私の場合はこれでうまくいきました。
どーも、Windows依存だとうまく反応してくれないようなのです。

まぁ、環境もAIと同じように気に入っている物を使うのが一番ですな。(それが使いやすい証拠

330(○口○*)さん :06/03/24 23:08
質問なのですが、Alt+Tによる待機状態と非待機状態(それ以外でもいいのですが)なんかを画面内に出力することって出来ませんかね?
ケミの右にいるとき、左にいるとき とかは出ていたと思うのですが文字でも記号でもなにか別の表示手段って無いかな、と思いまして。

331(○口○*)さん :06/03/24 23:59
>>330
ホムに認められた出力手段では、ROクライアント上に文字や記号・エモなどなど、
どんなものであれ状態表示をする手段はありません。

仕方ないので代替手段として、エクスプローラを使って表示するという手を
使っているAIはあります。興味があれば。
(・・・と、さりげなく自分のAIを紹介する(^^;;)
ttp://tomose.dynalias.net/RO/attach/hom/Glenelg_022.lzh

332(○口○*)さん :06/03/25 01:52
プログラムとかさっぱりだからわからないけど
行動で示すって手はあるかもね
戦闘モード(?)によって追従をケミの右側か左側かみたいな

333(○口○*)さん :06/03/25 02:11
>>332
それは既にある、と>>330様はおっしゃっておられまくる
「ケミの右にいるとき、左にいるとき とかは出ていたと思うのですが」

334(○口○*)さん :06/03/25 02:21
あ〜ごめんごめん
そういう意味だったんだ
その時に切り替わるってAIを見た事あるからそれと勘違いしちゃた

335(○口○*)さん :06/03/25 02:30
あれだわな。TipOftheDay_jみたいに、トレースしたものをクライアントに出せると監視が楽だわな。
まぁそんな機能ないからしょうがないけど。

336(○口○*)さん :06/03/25 02:40
発言は我慢するとしてもエモくらいは出したいな。
今のエサやりや空腹のエモと混同しかねないけどそれさえ避ければかなり表現できる範囲が増える。

337(○口○*)さん :06/03/25 02:54
あ、Tipに書き出せばいいのか。
あれって開き直せば再読込してくれる?

338(○口○*)さん :06/03/25 03:06
だめだぁね。ログイン時とかに読み込んだ内容をずっと保持してるっぽい。
ページ切り替えても/tip出しなおしてみても変わらなかった

リログとかしたらどうかしらんけどもね

339(○口○*)さん :06/03/25 03:52
>>325
感謝! ホム状態も定義してある点がすばらしい。独自定義だけ色が違ったw

340(○口○*)さん :06/03/25 09:00
個人的になんだけど、ホムHP減少時はケミ周囲5*5セルをくるくる回るような設定が出来ると嬉しい。
PP出来なくてマジで泣けるから…。
まぁリザホムが主流なんだろうけどさ。

341(○口○*)さん :06/03/25 09:06
HPとMAXHP取得して割合出して、一定の割合を切ったら
くるくる移動させればいいじゃないか。
くるくる回ると逆にPPしにくいから別に離れるだけでもいいとおもうけど。

342(○口○*)さん :06/03/25 09:08
>>340
テンプレで紹介されてるいくつかのAI(0マテさんとことか)で実装されているはず。
そのあたりではNG?

343(○口○*)さん :06/03/25 10:24
>>342
ゼロマテさんのは、ケミとホムが重なってケミにPPが行ってしまうことが多々…。
まぁ何もないよりは全然良いんだけどね。

344(○口○*)さん :06/03/25 11:42
というかHP減ったらケミから離れる、ってこのスレか語るスレで
わざわざ作ってくれた人がいたろうよ。

こんだけ語られてるんだからそういう初歩的というか、
要望が多いものは既に実現されてることが多いから、
過去ログ追うといいとおもうよ

345(○口○*)さん :06/03/25 11:46
ホムンクルスのAIを語るスレ その3
ttp://enif.mmobbs.com/test/read.cgi/livero/1142535070/794


こんなんとかな。過去スレを「PP」で検索したら引っかかった

346(○口○*)さん :06/03/25 12:37
どなたか教えてください。

語るスレ2の391さんと、ここの279さんのを拝借して自動スキルに挑戦してるのですが
IN_SKILL_EMERGENCYAVOID = 8010 -- スキルID
↑これはどこに書けばいいのでしょうか、スレ見てもさっぱり分からない…

初心者すぎる質問かと思いますが宜しければご教授お願いします。

347(○口○*)さん :06/03/25 14:26
クッキーというモンスターにはスキルを使って攻撃しないっていう
AIってどうやれば組めるのでしょうか

工体研究所のAi使ってるけど、Lv15以下のモンスターに魔法使わないって
設定で草に魔法使っちゃいます。
mobdata.luaも入れてるんですけど、なぜでしょうか?
お願いします

348(○口○*)さん :06/03/25 15:35
>>346
その変数を使う前なら、どこでもかまわないと思います。
普通はAI.luaの先頭部分か、Const.luaに書くでしょう。

>>347
クッキーにスキルを使って攻撃しないっていうのは、
標準AIでスキルはユーザーからの命令でしか使用しないので
あなたがスキルを使わなければいいだけです。
スキルを自動使用するどなたかのAIを使用しているのであれば
そのご質問だけでは、答えにくいと思います。
あえて言うなら、スキルの使用を判断する部分に
以下のように書けばいいと思います。
/**********************************************************/
local MobID = GetV(V_HOMUNTYPE,MyEnemy) -- ■敵の種類を取得
if (MobID == 1265) then         -- ■敵がクッキーの場合はスキルを発動しない
  MySkill = 0             -- ■もしくはreturnで抜けるとか、
  MySkillLevel = 0           -- ■スキルを使わないようにする処理。
end
/**********************************************************/

工体AIに関しては、まず作者の方のブログでお聞きになったほうが
良いような気がします。
「Lv15以下のモンスターに魔法使わないって設定」とありますが、
具体的にどのように設定したかを書かかないと、
設定が間違っているのか、設定はあっているのに違う動作をしてしまうのか
が判断できないのじゃないでしょうか?
私は使ってないので判りませんが・・・

349(○口○*)さん :06/03/25 22:16
>>348
カリカリくるのも分かるけど、一応工体のを使ってるとは書いてるべ。
が、あそこのblogでながながと質問しないと動かせない、って人はもう
別のところのを使うべきかも知れない。


>>347
工体のは人によってソースが違ってきてそうだからな。
ここを直せば、っていうのはソースの該当部分を貼ってくれない限り
指摘できない。
あえて関係ありそうなチェック項目を挙げるとすれば


1.コンフィグの指定が間違っていないか

 -- 指定したレベル 以下 のMobにはスキルを使わない nil で無効
 NO_USE_SKILL_MONSTER_LEVEL = 15,

 -- mobdata.lua を読み込む ※モンスター関連のすべての設定に必要です
 USE_MOBDATA = true,

2.上記変数を使用しているロジックがおかしくないか
3.MOBDATAからちゃんとMOBのレベルが引っ張ってこれているか。
4.「草にスキルを使わない」じゃなくて、「草は無視」で妥協できないか


こんなところじゃないか

350(○口○*)さん :06/03/25 23:59
リーフが露天街で一人ぼっちで泣いてたので、○○しました。

○○に入る2文字の漢字を答えなさい。

351(○口○*)さん :06/03/26 00:18
っ[無視]

352(○口○*)さん :06/03/26 01:06
(´・ω・)っ[撮影]

イエア イエア

353(○口○*)さん :06/03/26 02:08
つ[通報]

354346 :06/03/26 03:18
>>348
レス感謝です!
global variableのトコに入れてるので問題なしかな…?
謎が一つ解けたので、はりきってまた弄ってきます。
有難うございましたo(_ _)o

355(○口○*)さん :06/03/26 08:05
/traceaiしたときに、普段は必要ないTRACEとかが出て鬱陶しいので

TRACE (トレースレベル,実際のトレース文)

ってfunction作って、中身で

if (トレースレベルがグローバル変数で指定した値以上だったら)
  TRACEAI(実際のトレース文)
end

とかしたいんだけど、引数の数が可変なのが面倒だなあ。
どうすればいいかな

356(○口○*)さん :06/03/26 08:52
>>355
LUA の場合、引数省略は簡単にできますよ。
AIを語るスレ4 の58 に書いてみた。

357356 :06/03/26 08:57
ああ、補足っていうか・・・
レベル指定と出力文字の順番にこだわりはないですよね?
上記要望は前にレベル指定ですが、作ったサンプルは、レベル指定をうしろにしています。

複数引数が必要な場合の後続引数省略は簡単ですが、前の省略は面倒です。

358(○口○*)さん :06/03/26 12:39
あっ、traceaiって複数引数あるように考えてたけど、出力するstring内に引数が複数ある
だけで、traceai自体は引数は一個の文字列だったか


TraceAI (string.format("MobID: %d skilluse %d",target,skilluse))

それならごく普通に組めたね。ありがとう。

traceaiに、
"MobID: %d skilluse %d",
target,
skilluse

の個数が可変な引数を渡してる、と思い込んでた。

359(○口○*)さん :06/03/26 22:42
AIを語るスレの方にmobdata.luaがあるんですが
これはどのようにつかうんでしょう
各モブごとに攻撃するしないとか組めるんでしょうか?

360(○口○*)さん :06/03/26 22:53
>>359
組めるよ。
MOBDATAの使い方自体はAIスレの前スレ(その3)とかに詳しい。
というかmobdata.luaの中もコメントで使い方が書いてある。

出来ることは、MOBのIDと、どの情報を取得するか、というパラメータを渡すと
そのMOBの情報が取得できる、っていうだけなんだけどね。

配布されてるデータにはMOBのHPとかレベルとかの情報しかないけど、自分で全MOBのデータに
「攻撃対象にするか」
「スキル使用対象にするか」
とかのフラグを付け加えてもいいし、MOBのレベルを取得して、あるレベル以上のMOBは
無視する、とかいうのをai.lua側で判断してもいい。

361(○口○*)さん :06/03/27 00:03
あれをどうやって使っていいか全くもってわからない人は
触っちゃだめでしょうかねぇ
どういうふうにしたらいいか該当lua読んでもさっぱり・・・

362(○口○*)さん :06/03/27 03:01
どこに組み込めばいいか、とかは勘弁してくれ。
もし攻撃する⇔しないの分岐してるところが分かるってのであれば、
その条件に組み込んでくれ、という前提で話す。

1.まずmobdata.lua落としてきてUSER_AIフォルダにいれれ

2.AI.luaの先頭あたりに
require "./AI/USER_AI/mobdata.lua"
と書いて、AI.lua実行時にmobdata.luaを取り込むようにすれ

3.データの取り型

・まず、MOBの種類IDを取得する。大体もともとの処理に入ってることが多いと思う。
  TargetID = GetMyEnemy (MyID)            --固有IDを取得。MyIDはホムのID
  target = GetV(V_HOMUNTYPE,TargetID)      -- MOBのIDを取得

・で、実際にデータを取ってくる
MOBDATA[MOBのID][取りたい情報がテーブルの何番目にあるか]

moblevelっていう変数に、調べたいMOBのレベルを読み込むなら
moblevel = MOBDATA[target][M_V_LV]

※M_V_LVってのはmobdata,luaの中で定義してあるけど、内容的には2っていう数字。
なので、上の式の意味は

moblevelという変数に、MOBDATA配列のうち、MOBIDが一致するものの2番目のデータを代入しろ

という意味。
M_V_NAME = 1 -- モンスター名称
M_V_LV = 2 -- Lv
M_V_MAXHP = 3 -- HP最大値
M_V_BASEEXP = 4 -- 獲得BASE経験値
M_V_JOBEXP = 5 -- 獲得JOB経験値
以下略

と指定してあるので、取って来たいデータをM_V_NAMEとかM_V_MAXHPで指定できる。

363(○口○*)さん :06/03/27 03:13
4.データが取れないときの対処

・moblevel = MOBDATA[target][M_V_LV]
でレベルを取って来たいからといって、上の文章をそのまま書いたのでは、
MOBDATA.luaに登録されていないMOBに出会ったときに上記の式がnilを返してくるので、
エラーメッセージが出てクライアントが動かせなくなる。

・そこで、以下のようにする

if (MOBDATA[target] and MOBDATA[target][M_V_LV] ) then
  moblevel = MOBDATA[target][M_V_LV]
else
  ---データがなかったときの処理。たとえばレベル999に置き換えるとか。
  moblevel = 999
end

一行目の文を初心者向けに書き換えると、
if (MOBDATA[target] ~= nil and MOBDATA[target][M_V_LV] ~= nil ) then
となり、意味的には
「MOBDATAに登録されていないMOB」 じゃない、 かつ
「MOBDATAに登録されていない情報」じゃない
という意味になる。

5.あとはわかるよな?仮にレベル30以上の相手を無視したいのなら、
グローバル変数(AI.luaの最初のほうに書かれてる)のところに

NO_TARGETTING_LV = 30  ---指定したレベル以上のMOBを攻撃しない

と設定して、ターゲットを決定してるロジックで

if (もともとある「ターゲットにする条件」 and moblevel >= NO_TARGETTING_LV) then
  ---もともとあるターゲット時処理
else
  ---もともとあるターゲットにしない処理
end

364(○口○*)さん :06/03/27 03:25
でな。レベルだけじゃなくいろんな要素が絡むから、mobdata.luaに直接
「この敵はターゲットにする。この敵はしない」っていう情報を追加したいと思い始めるんだよな。
そういうときは、mobdata.luaの

--------------------------------------------------
-- constants # 定数 #
--------------------------------------------------
M_V_NAME      = 1  -- モンスター名称
M_V_LV        = 2  -- Lv
M_V_MAXHP     = 3  -- HP最大値
((中略))
M_V_HIT        = 28  -- 必要HIT
M_V_FLEE       = 29  -- 必要FLEE
のすぐ下に、以下のようなのを追加すれ

M_V_TARGET     = 30  -- /ターゲッティング 1:する 0:しない

名前は自分がわかりやすいのでいい。後の数字は、ちゃんともともとの定義と連番になるように。

で、全てのMOBデータの一番後ろに、タゲにする場合は1、しない場合は0を追加していけ。
ここではスコーピオンをターゲットにしない、ポリンはするという設定のみ書くが、
くれぐれも全てのmobの設定に対してデータ追加を行うように。


MOBDATA[1001] = {'スコーピオン',24,1109,287,176,4,3,1,1,0,0,1,0,0,0,0,80,135,30,24,5,6,0,17,1,121.8,1,68,151,0,1,1}

MOBDATA[1001] = {'スコーピオン',24,1109,287,176,4,3,1,1,0,0,1,0,0,0,0,80,135,30,24,5,6,0,17,1,121.8,1,68,151,0,1,1,1}

MOBDATA[1002] = {'ポリン',1,50,2,1,3,1,1,2,1,0,0,0,0,0,0,7,10,0,1,0,0,5,0,1,106.4,1,22,82,0,0,1}

MOBDATA[1002] = {'ポリン',1,50,2,1,3,1,1,2,1,0,0,0,0,0,0,7,10,0,1,0,0,5,0,1,106.4,1,22,82,0,0,1,0}

こうすれば、
MobTargetting = MOBDATA[target][M_V_TARGET]

で1が帰ってくればタゲる、0が帰ってくればタゲらない、という判断が出来る。

もっと設定を増やすときは定義の連番とデータの最後の値を追加していけ。
いらないデータがおおいよ、ってときはデータの種類を減らしてもいいが、その時は連番も一緒に
書き換えること。

365(○口○*)さん :06/03/27 03:28
>>363
ちょっと間違えた。タゲにするかしないかの判定が逆だった

if (もともとある「ターゲットにする条件」 and moblevel < NO_TARGETTING_LV) then
  ---もともとあるターゲット時処理 。レベル30より未満でないと入ってこない
else
  ---もともとあるターゲットにしない処理
end

366(○口○*)さん :06/03/27 03:29
>>364
これも間違えた。
データ設定時の0と1の設定が逆だな。
攻撃したい敵には1、したくない敵に0を追加してくれ。

眠いのでここまで。

まだ分からなかったら色々試すなり、また聞きに来るなりしてくれ。

367(○口○*)さん :06/03/27 15:56
アップで書き換えがありそうな mobdata.lua に直接書くのはどうかと思うが。
別関数でタゲにしたいのだけ追加してけばいい希ガス。

368(○口○*)さん :06/03/27 20:00
こんにちは、初心者ですみませんが、
今ゼリーを使っています。

攻撃中、自分で魔法を打てるようにするAIとかはありませんか・・?
ログやら見ても、さっぱりだったので・・・よろしければ教えてください。

369(○口○*)さん :06/03/27 20:01
>>368
自分で魔法を………??
まさか、「ショートカットに、ケミのスキルのようにホムのスキルを
登録してそこから使え」で解決するオチじゃないよな?

370(○口○*)さん :06/03/27 20:16
いえ、ASみたいに勝手に発動しないのかな、と

371(○口○*)さん :06/03/27 20:31
>368 さん
ASみたいに、ということなら

ホムンクルスのAIを語るスレ その4
のテンプレ2
ttp://enif.mmobbs.com/test/read.cgi/livero/1143193717/2

のくまAIやぜろまてAIで解決できそうですね。

372(○口○*)さん :06/03/27 20:39
ありがとうございます!

373(○口○*)さん :06/03/27 20:47
要望スレのほうが初心者向けなのに、テンプレがおざなり過ぎるんだよな。
AIスレへのリンクしかないとか。


moadataのバージョンUPなんて、MOBデータ増えるだけだから別に書き替えで
使っても困りはしないかと。差分データ張りつけてフラグ足してあげれば。
まぁ人に公開とかを考えるならそうも行かないと思うが。

374(○口○*)さん :06/03/27 21:03
次からはぜひぜひ1スレ目からテンプレ充実したスレたててくれ。

375(*○口○)さん :06/03/28 05:44
>>373
ホムンクルス用モンスターデータライブラリ
mobdata.lua
http://enif.mmobbs.com/test/read.cgi/livero/1143193717/17
頑張って「その他多数修正」の差分を見つけてくれたまえ

376(○口○*)さん :06/03/28 10:54
自分の狩り場に必要な設定があればいいんだから、未定義だったらIDをトレースに吐いて、
その分だけ追加すればいいじゃん

377(○口○*)さん :06/03/28 11:43
>>373,376
375氏や367氏は、改訂の手間を言ってるんだと思う。
もちろん373氏・376氏のように、自分で必要分だけ書き換える方法でも対応は可能ですけど、
それをやると mobdataの内容が変わる/狩場が変わるたびに、自分でmobdataの中身を
いじらなければならない。

mobdataの中身をまったく見なくても、新版DL→古いやつに上書きするだけでいいなら、
らくちんじゃない?
「仲間の作ってくれた/改訂もしてくれそうな汎用データ」には敬意を表してその構造のまま、
自分の必要なものは、自分独自で別の形で枠を切る、ってのは悪い考え方ではないと思う。

378377 :06/03/28 11:43
書きかけで一番重要な一文を書かずに送ってしまった・・・oTL

「それがライブラリーってものですし。」

379(○口○*)さん :06/03/28 12:40
ライブラリとしてではなく、独自データの雛形として使うってイメージだろうと思う。
まぁそれこそ自分が使い易いほうがいいわけで。

他人にみられることを意識しなければ、ね

自前のシステム作ったほうがいい派の人も、コーディング例をあげてみればいいんじゃね?
両方知ってるに越したことはないんだし。

ちなみに俺には、ソースと配列名こそ分けるものの、やはりMOBDATA形式しか思いつかん。

380377 :06/03/28 13:02
>> 379
まあ、それで使いやすければ、ぜんぜん問題ないとは思いますけどね。
それこそ、その人次第ですから。

わたしはまだmobdata形式には対応していませんが、独自で
「どの敵にはアクティブ/どの敵にはパッシブ」という設定ができるAIは公開しています。
ttp://tomose.dynalias.net/RO/attach/hom/Glenelg_023.lzh

mobdata形式のファイルを「直接編集」するのではなく、ROの画面上操作で設定して、
AIからファイルに書き出ししています。
保存形式は敵ごとにテキスト1行で
<敵種類id> , <その敵にアクティブ/パッシブ>, <その敵にスキル使う/使わない>, <その敵の優先度>
・・・というような形なので、いじろうと思えば iniファイル直接編集もできますが。

381(○口○*)さん :06/03/28 13:40
MY_M_V_TARGET = 1

MYMOBDATA = {}
MYMOBDATA[1001] = {1}

MobTargetting = MYMOBDATA[target][MY_M_V_TARGET]

単純にこんな形じゃダメなん?
lua の配列わからんけど、未定義はエラーじゃなくて nil 返るよな?

素直に攻撃するIDだけまとめて for で回した方が早そうだけども。

382(○口○*)さん :06/03/28 13:53
やっぱ仕組みは一緒になるね。
自分用に別配列つくるってだけで。

383(○口○*)さん :06/03/28 13:56
>>380さんのはあとで見せてもらいます。

384(○口○*)さん :06/03/28 14:01
>>381
MYMOBDATA[1001] = {1}
MYMOBDATA[1001][1] --> 1
MYMOBDATA[1001][2] --> nil
MYMOBDATA[1002]   --> nil
MYMOBDATA[1002][1] -- (nil)[1]となってエラー

配列の未定義はnil返るけど、nilに配列アクセスするとエラーになる。

385(○口○*)さん :06/03/28 14:50
多重配列だとダメか。
素直にこうか。

MOB_TARGET = {}
MOB_TARGET[1001] = 1

MobTargetting = MOB_TARGET[target]

それ以前に使い方変えろって話か。

386180 :06/03/28 15:02
MobTargetting = MYMOBDATA[1002] and MYMOBDATA[1002][1]

でもnilが残るから綺麗なbooleanにはならないね

387(○口○*)さん :06/03/28 15:07
>>386
デフォルト値つけちゃえ。
MobTargetting = MYMOBDATA[1002] and MYMOBDATA[1002][1] or 1 -- ID未定義なら1

388(○口○*)さん :06/03/28 15:28
M_V_TARGET = 30

MOB_TARGET = {1001,1003}
for i,id in ipairs(MOB_TARGET) do
    if MOBDATA[id] then
        MOBDATA[id][M_V_TARGET] = true
    end
end

ロードごとに追加。
デフォルトが nil になる問題はあるけども。

389(○口○*)さん :06/03/28 23:50
明らかに造語だと分かると思って「ほくそえましい」などと言って悪かったなんて謝らない。
ごめんね


それはそうと、工体とゼロマテをがっちんこしてmobdata乗っけて弄り回したAIを使ってるが、
そこかしこに「SPの割合を求める」「HPの割合を求める」とかいう処理がベタで書いてあるのを
ちゃんと直して行きたいんだが時間がない orp

AIスレのほうにそういうライブラリっぽいのを乗っけたblogが紹介されてたが、
あそこまでしないにしろ、整理していきたいなぁ。
ぶっちゃけもう機能的には満足してきたんで。

390(○口○*)さん :06/03/28 23:54
そろそろPTで遊ぶには強くなりすぎたホム用に共闘とり専用AIが!!

もしかしてもうあるのかい?

391(○口○*)さん :06/03/28 23:55
あと、関数は流石に分かるんだが、SetEventで定義されてるイベントが
何をトリガーにいつ動いてるのかがいまいちまだ把握できない。
のでイベントはいまんとこほったらかしにしてるんだよなぁ

392(○口○*)さん :06/03/28 23:57
>>390
どうやって共闘入れるかが問題だと思うけど、転生した商人の壁用とかで
「一発敵を殴ってタゲ取ったらあとはひたすら耐える」AIならどっかで見た

393(○口○*)さん :06/03/29 13:28
ソースが初心者向けと聞いてくまーAI落としたんだが
最新版ってだいぶ複雑になってきてるのな
('A`)

改造の参考にしようと思ってたんだが挫折しそうだ

394(○口○*)さん :06/03/29 17:14
>>393
初心者向けってのはあくまで
コメントが親切・コードの流れが分かりやすく書いてある・AIの行動設定がしやすい等々であって
機能が増えればコード量も増えるから、内部が複雑になるのは仕方ないかと。

395(○口○*)さん :06/03/29 19:22
>>393
真面目にいじる気があるなら、
くまーAIのHPでデフォルトのAIに
説明つけてくれてあるソース置いてあるから、
それ見たらいい。
一緒に置いてある状態遷移図もガンホーのより、全然分かりやすい

過去のAIが変更内容と一緒に全部置いてあるから、
俺は変更内容と、ソースの差分見て、参考にさせてもらってる

396(○口○*)さん :06/03/29 21:02
>>394>>395
dクス
くまーのデフォルトAI落として中身見てみるわ

他の配布AIも見てコード切り貼りして改造してみる

397(○口○*)さん :06/03/30 02:34
くまー使い意外と多いな。

そんなおまいらに吉報投下。
くまーAIの新しいのを落としに行って
なんとなくBBS見たら、
管理人さんなんか面白いの作ってるよ!

398(○口○*)さん :06/03/30 09:25
えっと質問です。

0マテのAI使っているのですが、
モブを倒した後に2〜3秒ほどホムが停止した状態になるのはデフォ?
できればモブを倒した後にすんなり次の行動ができるようになればいいのですが。
ケミが動いた後にホムだけその場所に取り残される場面がしばしばあったもので…
(Alt+右クリックですぐ動いてはくれるのですが)
既出なら申し訳ないです。

399398 :06/03/30 09:44
追加情報ってわけでもないのですが、
通常モブを倒すと数秒止まり、草だと倒した瞬間に動き始めました。
(試したのは黄色い草と白い草です)

400(○口○*)さん :06/03/30 10:14
ダメージによる座標ズレのせいで、移動中(追跡?)の状態になってるんじゃないかな。

自作弄りすぎて、そろそろデフォAIの動作忘れかけてるなぁ。

401(○口○*)さん :06/03/30 10:15
そういうのは配布元に聞くべきだだろ。

402(○口○*)さん :06/03/30 10:16
>>398
当方どきどきAIは使用していませんので確定ではないのですが、
OnATTACK_ST() 内の、敵が画面内に居るかどうかの判定と敵の死亡判定が
デフォルトAIのソースをそのまま使用しているのであれば
おそらく死亡した敵が完全に消えるまでその敵に攻撃を試行しているのだと思います。

対策に関してはAIを語るスレの方にすでに書き込みがありますので参考にしてはいかがでしょうか。

改造が出来ないのであれば配布元に質問または要望という形で連絡を取ってみては?

403398 :06/03/30 10:24
即レスありがとうございますー
とりあえず、AIによるものかどうかの判断がつかないのもありましてここで聞いてみました。
AIスレを参考にして少し弄くってみますね。

404(○口○*)さん :06/03/30 11:09
羊の自動ディフィンスのコードってないのかな?
なんか羊だけないがしろにされてるような…

405(○口○*)さん :06/03/30 11:40
>>404
一応アルケミテンプレに乗ってるな。
なんか微妙なコードだけども。

スキルに関しては、自分のホム以外試せないから、
愛を持って自作するに限るな!

406(○口○*)さん :06/03/30 12:04
ホムンクルスもFF12のガンビットのように設定できれば
LUAをいぢれないやつでもホムを操れると思うんだがな。

407398 :06/03/30 12:34
AIスレ4の92さんのものを採用しようと試みたのですが、
if (GetV(V_MOTION,v) ~= MOTION_DEAD) then
が上手くいかないらしくて動かない…
vの値ってMyEnemyのことを意味するのだろうか??
local actors = GetActors ()の次の行に加えるのかも未だに不明。

AIスレで聞くべき話題かもしれない…すみません。orz
でもあまりに初心者な話題なので、あっちのスレだと叩かれそうだし…

408(*○口○)さん :06/03/30 12:42
>>407
GetOwnerEnemy()の

 for i,v in ipairs(actors) do
  if (v ~= MyOwner and v ~= MyID) then -- ケミかホム自身じゃなければ
   if (GetV (V_TARGET,v) == MyOwner) then -- タゲがケミだったら
    if (IsMonster(v) == 1) then -- モンスターだったら
ココ→  if (GetV(V_MOTION,v) ~= MOTION_DEAD) then -- 敵が死にモーションでなければ
      enemys[index] = v -- 敵のリストに追加
      index = index+1 -- インデックスを1増やす
     end
    end
   end
  end
 end

0マテの中身は知らないけど
GetMyEnemyA()とGetMyEnemyB()にも似たような部分があるから
endを追加するのを忘れないように挿入すればOK

409(○口○*)さん :06/03/30 12:44
>>407
・どううまくいかないか
・エラーが出てるならエラーの詳細
・ソースの全容
なども一緒にお願い。ソースの意味がわかってないようだから
if に対応する end でも抜けてるせいでエラー吐いてるんじゃないかと思うけど


質問ではよくあることだけど何がしたいのか、
今どうなってるのかなど具体的に書かないと答えにくいと思うよ
わかりませんとか動かないとか教えてくださいとか答えようがないしね

410398 :06/03/30 13:00
本当にご丁寧に皆さんありがとうございました!
>>408さんの言う感じに弄くってみたら問題解決できました。
モンスターを倒した後にすぐに動くようになりました。
これからはもっと具体的に状態などを伝えるように努めます。
ちなみにendはさすがにつけてましたよw
どこに条件文を加えるのかに大苦戦しておりました…

てか、本当に人の優しさに涙が出そうになったよ…・゚・(つД`)・゚・
レスを下さった方々に本当に感謝感謝っす!

411(○口○*)さん :06/03/30 16:33
>>397
あのツール早く完成しないかな(*´∀`)
漏れもすごい期待してる。

412(○口○*)さん :06/03/30 18:41
最近気になるあれこれ
 1:敵の索敵範囲は□なのか○なのか
 2:ホムの遠距離スキル射程は□なのか○なのか
最近煮詰まってるあれこれ
 1:敵重力座標を考慮したホムのCHASE
 2:敵索敵範囲を考慮したホムの(ry
 3:敵射程範囲を考(ry

アイデアを 形に出来ない もどかしさ
さーて調べてこようか

413(○口○*)さん :06/03/30 18:45
工体AIとか韓国AIとかでやってる友達登録ってちょっとの追加じゃできないんでしょうか?
それっぽいとこだけ抜き出して貼り付け+必要そうなファイルも移動
ってしてもだめっぽいんですが…

414(○口○*)さん :06/03/30 18:47
>>412
前半はAIスレに回答あったよ。
敵は□、ホムも□。

重力座標は、こまったねぇ(笑

415(○口○*)さん :06/03/30 18:59
重力座標だけはどうにもならないね。
対象の座標がクラ上で正せない限りどう足掻いても攻撃には行けないくさい。
取得する座標がそもそもズレてるんだからなぁ…。

416(○口○*)さん :06/03/30 19:07
>>413
以前に韓国AI解析したけど、単純に切り貼りするだけだと、それなりに手間そうですね。
#わたしは、めんどくさいから、自分で独自構成しちゃったくちです(^^;;

比較的初期AIに近い構成の韓国AIを参考にして、以下のような変更をすればいけるのでは?

・登録・削除処理実体が必要。韓国AI のFriend.lua をそのままrequireするのがいいと思う。
・友人の戦闘状態を拾う処理(索敵処理)。
 GetOwnerEnemy() みたいな感じで、GetFriendEnemy() なんてのを作るのが簡単。
 韓国AI AI.lua内のそれをそのままコピペで使えそう。
・上記索敵を、索敵全体の流れで呼び出さないとダメ。
 韓国AIでは、OnIDLE_St 内で GetOwnerEnemy()やGetMyEnemy()と並べて同じように呼んでいる。
 これでいいんじゃないかと。

・画面上でどう友人登録・削除するのかを決めて、それをうまいこと実装する必要がある。
 登録するための関数自体は、韓国AI の Friend_check()でいいんだけど、これをどう呼び出すのかが
 思案のしどころ。
 韓国AIではOnMOVE_CMDで移動したときに近くにいるキャラを拾っているけど、
 韓国AIのここはマウスゼスチャ的な動作と絡み合ってて、そのまま流用するのは素人には
 ちょっと難しい。ここの実装が手間かもしれませんね。

417(○口○*)さん :06/03/30 19:28
>>408
横からだが、俺も気になってるところだったんで、初めて中身いじってみた。
凄く快適になったよ。
ありがとう。

418(○口○*)さん :06/03/30 20:01
>>414
AIスレのは、射程だったかと。
索敵範囲は多分話題にはなってなかったはず。

>>412
1:敵重力座標を考慮したホムのCHASE

1マスずれなら、ホムの射程を1にすればそれなりに改善。
(射程1のモンスターがタゲりながら、移動した場合に起こる)

遠距離モンスターの位置ずれは、
「具体的にどのような状況になったら、どのように位置がずれるのか」
を把握しないと無理だと思う。

「ホムが攻撃できているのかどうか」を確実に把握する方法があれば、
「攻撃していないならランダムに動かして、攻撃させてみる」あたりで
解決しそうな気もするんだけど…。

2と3は、障害物も絡んでくるからかなり難しいと思う。

419414 :06/03/30 21:18
ID変わってるけど、414です。
>>418
いえ、それはここ1、2日の話ですよね?もうちょっと以前の話です。

ホムは、敵との位置関係が桂馬位置でも斜め2マスでも、敵に攻撃が届く。
人間(PC)は、敵との位置関係が桂馬だと届くけど、斜め2マスだと、届かない。
・・・っていう話から、「ホムの射程2ってのは□判定だね」という結論が
でていたように記憶しています。

・・・だがAIスレ4を検索しても出てこない(^^;;
AIスレ3かも。

420(○口○*)さん :06/03/30 21:43
>>408さんのとおりにどきどきAIいじってみたんだけど
ホムがタゲられてるのに反撃しなくなっちゃったんで元に戻しました

書いたソース・・・上書きしちゃった_| ̄|○

>>398=410さん、よかったらその部分載せていただけませんでしょうか

421(○口○*)さん :06/03/30 21:45
>>405
使ってみたけど関数部分の


   TraceAI (string.format("AutoSkill : check %q(%d) Interval %d",v.name,v.id,GetTick() - v.time))
     if true == v.trigger() and GetTick() - v.time > v.interval then
    TraceAI ("check true")
ココ→ if GetV(V_MOTION,GetV(V_OWNER,MyID)) == MOTION_STAND and (v.user == nil or v.user == math.mod(GetV(V_HOMUNTYPE,MyID)-1,4)) +1 then
    U_AUTOSKILL[k].time = GetTick()
    to = assert(loadstring(v.to))()
    if type(v.lv) == "table" then
    for m,n in ipairs(v.lv) do
    if v.type == "Area" then

でエラーでちゃう

422(○口○*)さん :06/03/30 21:48
エラー内容は attempt to perform arithmetic on a boolean value ってダイアログが出ました

423(○口○*)さん :06/03/30 22:04
>>421
なんの条件式か知らないけど
orの処理がされた後に「+1」ってなんの意味があるの?

424(○口○*)さん :06/03/30 22:08
>404
ディフェンス常時使用ってなら既存の物で良いと思うが、羊のSP事情で常時だとLv1で寂しいし
一定数以上にホムかオーナーがたげられたらディフェンスLv3を使用とかって設定できるようにした。
戦闘中にGetActor() 2回使うことになるしスマートじゃないのは認めます。

↓標準AIっぽいのに組み込むこと前提で説明まとめた
ttp://pc3merchant.net/ai/files/deffence.lua
自分のAIからコピペした都合でMyOWNERつかっちゃったけど、GetV(V_OWNER,MyID)) に読み替えてください。

一足違いでテンプレにチャレンジしてるっぽいし、そっちの健闘を祈るか。

425398=410 :06/03/30 22:16
>>420さん
ほとんど>>408さんのところと同じ記述なのですが、

if (v ~= owner and v ~= myid) then -- ケミかホム自身じゃなければ
target = GetV (V_TARGET,v)
if (target == owner) then -- タゲがケミだったら
if (IsMonster(v) == 1) then -- モンスターだったら
ココ→ if (GetV(V_MOTION,v) ~= MOTION_DEAD) then -- 敵が死にモーションでなければ
enemys[index] = v -- 敵のリストに追加
index = index+1
end
else
local motion = GetV(V_MOTION,i)
if (motion == MOTION_ATTACK or motion == MOTION_ATTACK2) then
enemys[index] = v
index = index+1
end
end
end
end

こんな感じです、一応AIスレ4の92さんのもう一箇所の記述の方も確認ヨロロっすー。

426398=410 :06/03/30 22:17
うわ、なんか見づらくなった…orz

427(○口○*)さん :06/03/30 22:18
>>421
これでいい気がする。なんでホムのタイプ見るのに剰余なんかとってんだ
if GetV(V_MOTION,GetV(V_OWNER,MyID)) == MOTION_STAND and (v.user == nil or v.user == GetV(V_HOMUNTYPE,MyID)) then

428(○口○*)さん :06/03/30 22:20
あ、そうかタイプ4種だからいいのか

429427 :06/03/30 22:22
>>423が言ってるように+1の位置がおかしいからこうかな
if GetV(V_MOTION,GetV(V_OWNER,MyID)) == MOTION_STAND and (v.user == nil or v.user == math.mod(GetV(V_HOMUNTYPE,MyID)-1,4)+1) then

430(○口○*)さん :06/03/30 22:33
>>419
だからそれは射程だと(以下略)

索敵範囲は、PC1台だと調べるのが非常に難しいのが問題。
ずっと止まっててくれればなんとかなるんだが、
モンスターが止まってる時間で正確なマス目なんて数えられないって…。

431(○口○*)さん :06/03/30 22:38
>>427
それでうまく行きました
+1っていったいなんなんだろう
>>429でもエラー無くディフィンスを使ってくれています

432(○口○*)さん :06/03/30 22:38
>>430
索敵範囲

1.GetActors関数は自ケミが見える者全てを取得する=□
2.IsOutOfSight関数(デフォルト)はGetDistance関数(デフォルト)に従う=○

433(○口○*)さん :06/03/30 22:46
>>431
ホムの種類が1〜4 5〜8 9〜12 13〜16 の範囲なんで
割り算の余りをとって同系ホムを1〜4にまとめている部分だったようだ。

434(○口○*)さん :06/03/30 22:48
>>432
>>412
>1:”敵”の索敵範囲は□なのか○なのか

ホムにアクティブのタゲ取りに行かせる場合には、必要になってくるはず。

マス目だけじゃなくて、障害物との関係も必要になると思うけど。

435(○口○*)さん :06/03/30 22:53
草だけを攻撃対象にして、ロジック上の索敵範囲を最大限にして、
遠間からにじり寄ればいいんじゃない?

436(○口○*)さん :06/03/30 22:53
流れをぶった切ってすまないが配布されてるAIをレビューしてるサイトってないだろうか?
全部試すの面倒なんだ....

437431 :06/03/30 22:59
ってあれ…不可解な出来事発生
自動ディフィンス使ってくれるようになったけど
普通ディフィンスを使うとケミとホム両方にスキルエフェクトが出るんだけど
ホムの方しかスキルエフェクトが出なくなった
一応ケミにスキル効果出てるけど謎だ(;´Д`)

438(○口○*)さん :06/03/30 23:04
>>436
大抵説明書代わりのreadme.txtがついてる。
あとはAIスレのテンプレとかケミテンプレとかの説明でも読むのが手っ取り早いかと。

みんな自分が使いやすいのを一本に絞ってカスタマイズしていってるから、
あれもこれも説明してくれてるようなところってないと思うが。

439414 :06/03/30 23:06
>>430
Σ('-'つ)つ
ああ、そうか、理解した。失礼、勘違いしていた。

で・・・索敵範囲は、確かに正確なところはわからないですね。
あ。でも弓スケルトンなんかで、経験的に・・・
 ・斜めで射程ぎりぎりにいる弓に撃たれている状態。
 →上記状態で、弓の射程外になるように斜め移動。
 →弓スケルトンは、確実にこちらを追跡接近
・・・となるので、少なくとも弓の射程よりも遠くの斜めは見えているはず。

ですが、まだこちらに反応していない弓スケルトンに、真横方向から近づいた場合、
射程+1、2くらいまで近づかないと、こちらには反応しない。

正確な話でなくてあくまで経験則ですが、上記のような感じなので円というには
ちょっといびつな索敵状況に感じます。索敵範囲も四角ではないでしょうか。

440(○口○*)さん :06/03/30 23:43
経験則からいうと射程も索敵も□っぽいけど、
AIの範囲基準(GetDistance)が○基準だったので色々深読みしました |・ω・`)
デフォAIだと斜め疎かになっている印象が。

現在できる範囲の対策としては、敵は射程の端から攻撃してくる(射程2以上の場合)ようなので、
 1:敵位置の背後をとる(重力2升以下ならホム射程内に収められる)
 2:ホムと敵を結んだ直線の先を攻撃命令しながら彷徨う
 3:引っ張って位置変更を迫る
 4:ずれてそうだったら無視を決め込む
位でしょうか。ホムの攻撃モーションが重力探知に使えそうです。
しかし他の敵も勘定に入れないと、歩いた先でさらに敵が orz

具体的なコードに至るまでおもちゃで思索を深めてきます・・・

441(○口○*)さん :06/03/30 23:56
こんなの発掘してきた。丸といえば丸かな、って程度か

613 名前:(○口○*)さん[sage] 投稿日:06/03/20 13:38 ID:27Xj5fSN
>>607
GetDistance だとこうなるね。
PCもNPCも同じに扱ってるけど違うのかな射程。
7 6 5 5 5 5 5 5 5 6 7
6 5 5 4 4 4 4 4 5 5 6
5 5 4 3 3 3 3 3 4 5 5
5 4 3 2 2 2 2 2 3 4 5
5 4 3 2 1 1 1 2 3 4 5
5 4 3 2 1 0 1 2 3 4 5
5 4 3 2 1 1 1 2 3 4 5
5 4 3 2 2 2 2 2 3 4 5
5 5 4 3 3 3 3 3 4 5 5
6 5 5 4 4 4 4 4 5 5 6
7 6 5 5 5 5 5 5 5 6 7

442(○口○*)さん :06/03/31 04:40
>>437
結構前にケミスレで既出。
そのバグのせいでディフェンスのオートスキルは慎重に扱われて、
配布AIではなかなか実装されてないのかもしれない。

443(○口○*)さん :06/03/31 10:29
>>442
それは勘繰りすぎじゃないだろうか。
リーフのヒールも同じことが起こるけど実装されてるし。

単純に羊使ってる人が少ないだけな気がする。

444(○口○*)さん :06/03/31 16:42
遠距離月光組み込んでみたんだけど
これ、なんか超能力とかスタンドとかで攻撃してるみたいで面白いな。

445(○口○*)さん :06/03/31 16:56
遠距離月光ってのがあるのか。
自動スキル組み込んだら、移動もせずになぜかその場でクルーザーを
ぶちのめすもんだから焦ってたよ。

最初、どんなラグだ!とか思ったんだけど毎度毎度なんで。

446(○口○*)さん :06/03/31 18:45
>>443
ちがう。
ディフェンスが使えないスキルなだけだ orz

447(○口○*)さん :06/03/31 19:11
>>446
それはいわないでくれよ。
みんな気がつかないフリしてるんだから。

448(○口○*)さん :06/03/31 21:08
羊でオートディフェンス使ってたけど、言われて初めて気がついたw
むしろよくみたら敵の上からエフェクトでてたよ

今まで使ってたの
SkillObject (MyID,skill1,8006,MyEnemy)  -->敵とホムにエフェクト。効果はケミにも出てる

色々変えてみた
SkillObject (MyID,skill1,8006,MyID)  -->ホムのみエフェクト。効果はケミにも。
SkillObject (MyID,skill1,8006,GetV(V_OWNER,MyID))  -->スキルでない(´・ω・`)
SkillObject (MyID,skill1,8006,nil)  -->エラー
SkillObject (MyID,skill1,8006)    -->エラー

どうしたらいいんだ

449(○口○*)さん :06/03/31 21:08
そしてsageを打ち間違えた

450(○口○*)さん :06/03/31 21:43
さべわらた

451446 :06/04/01 02:08
>>404
配布AIだと、くまーAIがオートのディフェンス実装してたね。
試してみたが、確かにホムのほうにしかエフェクト出ないようだ。

実効的な価値はあんまりないがw、とりあえず自動でスキル使って
戦ってくれるのはなんか気分がいい。

SP条件だけで使用だと、移動中や雑談中も、ディフェンスディフェンスと
湘北のベンチ選手の声出しのようにやかましいかと思ったが、
ちゃんと戦闘前・中にしか使わないようなので、さすがにうまく
作ってるなぁと感心した。

452(○口○*)さん :06/04/01 02:46
あんなダルい掛け声でディフェンス使われてたまるか!!

<ディ〜フェンス!ディ〜フェンス!

453(○口○*)さん :06/04/01 08:26
ディフェンスは主人側のほうが若干効果時間が長い。
効果時間が残っているときに再度ディフェンスをかけるとエフェクトが出ない謎仕様になっている。
そんなわけで、正確に途切れなしでディフェンス持続させると主人のほうにエフェクトが出ない怪現象が発生する。



まあ日付なわけだが。

454(○口○*)さん :06/04/01 09:25
>>453
ΩΩ Ω <なんだってー
それは本当か!キバヤシィ!

455(○口○*)さん :06/04/01 12:11
なんかホムの名前を「三年の池上」にしたくなった俺ガイル…

456(○口○*)さん :06/04/01 13:24
質問させてください。
主人が座ってる時だけホムに主人のまわりをうろうろさせたいのですがどうすればいいでしょうか。
うろうろ自体はできるのですが止まって暫くする度うろうろされてもなぁ、と。
使用AIはオフィシャルのAIに欲しい機能をつぎはぎした自分用AIです。

457(○口○*)さん :06/04/01 14:23
周囲に他プレイヤーがいるときって条件をつくろうと思うのですが、条件文がさっぱりわかりません
主人とホム自身とmobを使って条件をつくるというのはなんとなくわかったのですが…
お知恵をお借りできないでしょうか?

>>456
主人のモーションを取得して、座っているときだけ処理をまわせばいいのではないですか?

458(○口○*)さん :06/04/01 18:06
>457
GetActors ()の配列から

主人とホム自身と
mobはIsMonster (id)かmobdata.lua使って判定して
それらを刎ねた残りをプレイヤーと判定するか

playerjobdata.lua の IsPlayer (id) 使って
主人とホム以外のPlayerで抽出したら?

459(○口○*)さん :06/04/01 18:54
>>458
ありがとうございます

ただ、その場合、「他のプレイヤーがいるときは行動しない」といった命令の場合

if (v ~= owner and v ~= myid and IsMonster(v) ~= 1) then
else

のように、ifで処理をしないままelseにいってしまうのですが、問題ないでしょうか?
動作確認をしたところ、ゲーム内での動作には特に不具合はないようですが

460(○口○*)さん :06/04/01 19:06
もしスレ違いだったらすみません、困っているので助けていただきたくて(汗

韓国の方が作ったというAIに多少追加しているAIを使っているのですが、
ホムを非先行モードにして自分orホムをタゲった敵だけを攻撃するようにしています。
しかし、敵は同じ敵でも1匹1匹にID?みたいなのがついている、と以前目にしたのですが
そのせいなのか、稀に目の前の敵を倒したあと歩いていると
急に走り出して勝手に殴り出したり、他人が交戦中の敵を殴ってしまうことがあります。
これを直す方法はあるのでしょうか?

461(○口○*)さん :06/04/01 19:57
>459
プログラミング初心者っぽいですな(´・ω・`)

function isOtherPlayer(myID)
--他のプレイヤーがいる?
 local bResult = FALSE

 local actors = GetActors ()
 local ownerID = GetV (V_OWNER,myID)
 for i,v in ipairs(actors) do
  if (v ~= myID and v ~= ownerID) then
   -- 自分でもオーナーでもない
   if (IsMonster (v)<1) then
    -- 敵ではない
    bResult = TRUE
    break
   end
  end
 end
 return bResult
end

という関数を作って
使いたいところで

if (isOtherPlayer(myID)) then
-- 他にプレイヤーがいるときの処理.
else
-- 他にプレイヤーがいないときの処理.
end

と呼ぶのだよ
ちなみに、重い処理だから何回も呼び出すようなら
結果をグローバル変数に残すとかの手を入れる必要がいりますな

462(○口○*)さん :06/04/01 20:09
>460

敵の死亡判定後にタゲリセットの
MyEnemy = 0
が入ってない抜け箇所があるのでは?
ソースを精査しる!

倒した直後に走っていってしまうのは
これだけではだめだけどね〜

463(○口○*)さん :06/04/01 21:22
そりゃPG初心者のほうが圧倒的におおいわな。世の中。
そういうスレでもあるしな

464460 :06/04/01 23:05
>>462さん
とりあえず抜けてそうなとこに入れてみました
けど滅多にならないので試しができないですけど…
ダメだったらまた来るかもしれませんorz

465(○口○*)さん :06/04/02 00:11
俺も一応それっぽいとこにタゲリセット追加してるつもりだけど
一向に解決されないんだよな…。ATACK_STとCHASE_STのとこに
入れるだけじゃダメなのかな。

466(○口○*)さん :06/04/02 01:08
だめでしたorz
試しに他の配布されている横殴りをしない設定が含まれている物を入れてみました
何も設定いじってないのですが、どこのAIもなるようです
どなたかこれを改善する方法わからないでしょうか(汗)
毎日10回近く謝ってます(´・ω・`)

467(○口○*)さん :06/04/02 01:09
>>460
標準AIならば要所要所にMyEnemy = 0すればいいけど、
その韓国のAIがどのように改造されているか分からない事には如何ともし難い。

標準でも暴走するようならば、Get○○Enemyの先頭付近でMyEnemy = 0してみるとか。
的はずれだったらごめんよ。

468(○口○*)さん :06/04/02 01:27
>>466
>ホムを非先行モードにして自分orホムをタゲった敵だけを攻撃するようにしています。

「ケミがタゲったモンスターを攻撃」は入っていなくて、
「ケミorホムが攻撃されたときのみ」ホムが攻撃をする、でOK?

これを前提に考えると、
TraceAIで完全に調べたわけじゃないので、想像の部分も多いんだが、

・倒した直後に湧いたモンスターのV_TARGETが、倒す直前の値を持っている

んじゃないかと思ってる。
(自分も同じようなことが起こっていて、
自分のAIの場合、「ケミがタゲったモンスターを攻撃」も入っているので
「ケミのターゲットが残っている」可能性もある)

ぱっと思いつく解決法としては、
・主人から一定マス以内のモンスターしか攻撃しないようにする。
・他のプレイヤーから一定マス以内のモンスターを攻撃しないようにする。
(どちらも、Get○○Enemyの時点で弾く)

自分で調べたり試したりしたわけじゃないので、これで解決するかは正直分からん。

#横殴り防止ですでに実装されてる場合は、完全に的外れ。

469(○口○*)さん :06/04/02 01:54
質問させてください。

マップ切り替えやテレポで出た場所にちょうどモンスターが居た時、
画面が読み込まれる前に、ホムが1〜3発程度の攻撃を受けてしまいます。

初期のホムステータスを何の動作もしない状態にして試してみたのですが、これではダメでした。

これは、AIでなんとかできる問題なのでしょうか?それとも難しいでしょうか。
もしできるのであれば、その方法のヒントでも貰えればうれしいです。


それからもうひとつ。これはどうしようもないと思いますが、一応。
ホムがケミの視野外で死んでしまったとき、RO自体が強制終了してしまうのですが、
これはAIでどうこうできる事ではないですよね?

470(○口○*)さん :06/04/02 02:02
>>466
直接の解決にはならないと思いますが、
自分の場合、攻撃・追跡中にケミが敵から離れた場合(6セル以上にしてます)は、
敵を無視して追従状態にするようにしてますね。

471(○口○*)さん :06/04/02 02:03
>466
ちなみに、以下みたいな関数作って
OnCHASE_ST ()とOnATTACK_ST ()の
IsOutOfSight(MyID,MyEnemy)のかわりに)呼んでやると
ほとんど横殴りしなくなるぞ
逆に横殴りされてタゲ移ると殴れなくなるけどねw

function checkStopContinualAttack (MyID,MyEnemy)
 -- タゲロスト?
 local motion= GetV(V_MOTION,MyEnemy)
 if (motion==-1 or motion==MOTION_DEAD) then
  return true
 end

 -- タゲをもっていかれた?
 local target= GetV (V_TARGET,MyEnemy)
 if (target ~= MyID and target ~= GetV (V_OWNER,MyID) and target~=0) then
  return true
 end

 return false
end

472(○口○*)さん :06/04/02 02:03
ケミの周囲6セルに居る敵しか攻撃しないようにしてる、ってことです。
ちょっとわかりにくかった気がしたので。

連投すみませんorz

473(○口○*)さん :06/04/02 02:50
>469
マップ切り替えやテレポの被タゲ無効時間がホムに適用されてないみたいね。
これはバグ報告のレベルかな?AIではどーにもならん
しいてやるなら反撃させるぐらいかと

視野外で死んで強制終了するなら、あきらかにバグだが
視野外にいかないAIにすれば結果として回避が可能。
100%視野外にいかないようにするのはムリだが
巧く組めば、ほとんど視野外にいかないAIにはできる。

474(○口○*)さん :06/04/02 03:12
>>473
お答えいただきありがとうございます^^

やはりどうにもならないのですか〜。

視野外云々は、ホムより先にケミのレベルを上げたいという事で、
ホムにはかなり辛い狩場に行ってるんです。
安息つかえば済むのですが、欲張りなもので、どうせなら親密度もあげたいと思い、
比較的安全そうな場所にホムを放置しては、お腹が減るようにしているのです。
これは、ガンホーにバグ報告という形で一応送ってみることにします。

475(○口○*)さん :06/04/02 08:45
>>457です

あれから>>461で教えられたとおりに変更して、動作テストをしてみました
結果、他のプレイヤーを認識することはできなかったと報告しておきます
具体的な動作内容は、他のプレイヤーがいてもいなくても、いないときの処理しか回らないです

これが、他のプレイヤーとの距離によるものかどうかなど、原因を特定することはできませんでした

せっかく回答していただいたのに、申し訳ありません

476(○口○*)さん :06/04/02 09:45
どのレベルで認識してないのかな。
GetActorsの戻り値をトレースした結果は?

477(○口○*)さん :06/04/02 10:36
>>475
試してきた。

自分の場合、TRUE、FALSEを小文字(true、false)にすれば、
ちゃんとプレイヤーを認識できた。

478461 :06/04/02 12:22
>477
>自分の場合、TRUE、FALSEを小文字(true、false)にすれば、
>ちゃんとプレイヤーを認識できた。

 _| ̄|○

基本的なタイプミスだ。すまん、そーゆーことだ。

479(○口○*)さん :06/04/02 14:12
GVで使える実用的なAIって無いですか?

480(○口○*)さん :06/04/02 14:33
同期落ちします

481(○口○*)さん :06/04/02 14:47
>>476-478
こちらの環境では、やはりいないときの処理になっていました
GetActorsの戻り値を調べる方法がわからないので、そちらの結果はわかりません

>>461のまま、こちらのAIに書き込むとエラーが出てしまう
local ownerID = GetV (V_OWNER,myID)の部分で、myIDが不正といわれる
ので、こちらの環境に合わせてMyIDと変更してあるのですが
そこでなにか不都合があるのでしょうか?

今更ですが、こちらで使用しているAIはデフォルトのAIにくまAIの欲しい機能を移植したものです

482(○口○*)さん :06/04/02 17:22
>481
>local ownerID = GetV (V_OWNER,myID)の部分で、myIDが不正といわれる

これの理由がわからん
呼び出し元で出るならともかく
関数まるごと導入してればmyIDは引き数だから
そんなエラーにはならないはずなんだが…

GetActorsの戻り値を見るのは
戻り値(この場合は配列)の要素を取り出している
for i,v in ipairs(actors) do
の次の行に
TraceAI( string.format("actors (%d)", v))
といtれてTraceAIするのだ

-- 敵ではない
の次の行に
TraceAI( string.format("other (%d)", v))
もいれておくと判定の検証ができる

ちなみにTRUEとFALSEはtrueとfalseにおきかえておいてね。

483(○口○*)さん :06/04/02 18:07
>>482
戻り値を調べたところ、正常に判断していました
ソースをチェックしなおしたところ、変数を間違えて書き込んでいたことがわかりました
お騒がせして申し訳ありません
該当部分を修正したところ、意図したとおりの動作をするようになりました
ありがとうございました

最後に、エラーについてですが
bad argument #2 to 'GetV' (number expected, got nil)
エラー文はこのような感じになってます
myIDの部分を直すとエラーを吐かないためそこが原因と判断したのですが、実際は別の問題かもしれません

484(○口○*)さん :06/04/02 19:27
>>483
OK判った。

使いたいところで
if (isOtherPlayer(myID)) then
-- 他にプレイヤーがいるときの処理.
else
-- 他にプレイヤーがいないときの処理.
end

ここだと思う。ここでmyIDが定義されてないから、isOtherPlayerにnilが渡される。
直すならここのmyIDをMyIDにすればいいと思うよ。

横から失礼しました。

485(○口○*)さん :06/04/02 22:36
変数でリセットするよりそれ用のResetEnemyみたいな関数使った方が漏れ少ないかもね
できればMy〜系のグローバル変数も内部だけで使うようにしときたいな

486(○口○*)さん :06/04/03 03:18
AIを語るスレと、雑談・要望スレとの区別が付かない件について

むしろ、こっちのほうがAIについてかたtt(ry

487(○口○*)さん :06/04/03 07:55
>>486
作られたタイミング的に、テンプレがないのが厳しいところだね。
「雑談・要望スレ」は、本当にホム動作についての雑談と「こんなことできない?」という
要望・思いつきを書く、プログラムを直接やり取りしない世界。
「語るスレ」は、純粋に技術的にプログラムまでを語る世界。

そういう意味では、「これが動きません」的なところはどっちにも書きづらいのかな。
プログラムの動作的な話なら、語るスレでやるのがいいのかな?

488(○口○*)さん :06/04/03 10:28
ソースレベルの話になると思ったら、語るスレでいいと思う。

それにしてもアルケミだけスレ乱立してるな。ホムステやらィェァやら。
AIの雑談・要望くらいケミスレの中でやっても良いだろうに。
もう必要最低限の機能は実装されてるし、高度な要望を出しても、
結局はAIスレに誘導される気がする。

489(○口○*)さん :06/04/03 10:48
>>486
初歩的なもの、初歩ですらないものを気軽に質問できるようにと
作られたのがこのスレだったはず。

プログラミングそのものに不慣れな人をサポートするのは
こっちのスレの領分じゃないかな。
そのやりとりがとっかかりになって「自分もAIいじってみよう」に
発展する可能性もあるかもしれないし。

>>487
>プログラムを直接やり取りしない世界
その書き方だと「プログラムを書いちゃいけない」という感じに
なっちゃうけど、分けちゃいけないと思う。
テンプレのこれを潰しちゃう(回答できない)ことになるし。
>「アイデアは浮かんだけどどうプログラムしていいかわからない」

雑談スレ:AI入門・初級者
語るスレ:AI中・上級者
この程度のちょっと曖昧な線引きにしておいて、明確には分けなくて
いいんじゃない?

>>488
ホムはケミであってケミじゃないからしゃーない。
新スキル以上、新職業以下の存在だし。

LiveROはスレ数じゃなくて、そのスレの最終書き込み日時でdat落ちが
決まる。だから乱立してもそれぞれが目的持って動いてるうちは
気にしなくていいと思う。
「保守」するぐらいになったり、1000いかずにdat落ちしたのなら
まとめたほうがいいけど。

あと語るスレがLiveROにとどまってるあたりの理由を考えると
AIネタはMMOBBS(ケミ本スレ)に行かない方がよさそう。

490(○口○*)さん :06/04/03 10:52
AIを語るスレのソースの羅列とその勢いはかなりのものだったし
初心者が気軽に聞くことの出来ない雰囲気は合ったから、このスレが分かれたのは間違ってないだろう。
だがAIを語るスレも勢いは落ち着いてきたし統合しても良いとは思う。

491(○口○*)さん :06/04/03 20:48
前に出ていた同じIDに対して攻撃してしまうーについてなんですが
自分もかなり気になっていたのでいろいろ試してみました。
しかし、主人が殴っている敵以外は例え自分や主人が攻撃されていても攻撃しないと言う
かなり重い設定つけたにもかかわらず殴りに行ってしまうようです。
これって仕様なんでしょうか?みなさんならないんでしょうか…

492(○口○*)さん :06/04/03 22:06
>>491
それは敵選定の時の条件じゃないか?
なんらかの形でMyEnemyを初期化しないと意味無いぞ

493(○口○*)さん :06/04/03 22:26
ひとつ要望いいですか
ケミテンプレに乗ってたコードの自動スキルでアミストルにディフィンス使わせてます
このコード使ってテレポ狩りすると
ワープアウトのたびにディフィンスを使ってしまいSPがすぐ無くなってしまいます

ホムのスキルはテレポ等で効果が消えてしまうのでしょうがないと思っていますが
テレポ策敵で敵がいないときにSP使うのはもったいないので
ワープアウト○秒後にスキルを使うってことに出来ないでしょうか

494(○口○*)さん :06/04/03 22:28
>>493
斜め上のレスになるが、一言。
くまーAIの自動ディフェンス機能を使ってるが、戦闘中以外
ディフェンス使わんよ。
ソース参考にしてみたらどうだろう

495(○口○*)さん :06/04/03 23:17
>>493
function OnATTACK_ST ()
の適当なとこに追加すると攻撃前にだけ使うようになるよ

496(○口○*)さん :06/04/03 23:34
うーん、それだとテレポアウト後にアクティブが居るとスキル使っちゃうのよねぇ…

くまーAIけっこうクセあるなぁ
ソース眺めて格闘中

497(○口○*)さん :06/04/03 23:57
>>493
ワープアウト後何秒かは待機状態にする、っていうのがクマーあたりに
あった気がするが、あれの仕組みを持ってくればいいんじゃないか

というかテレポごとにAI読み込んでるなら(完全に読み直しなのかどうか知らないが)、
テッペンでチックとって、それから指定_秒経過しないとスキル使用しない、って
すればいいんじゃなかろうかね。
だめかね。


あと、合併はこのスレ使い切ってから、かもう少し落ち着いてからでもいいかもね。
もう分からん人はあっち見ても全然分からんだろうから、こっちで詳しく聞きたいだろうし、
そういうときにすみわけが出来てないとグダグダになりそうな気もする。

向こうでは未だに「俺プログラマーだから」「俺技術屋だから」って感じで、
よく言えば専門的な、悪く言えば知識をひけらかしてるととられかねないようなレスも多いし、
たぶんコッチを良く見てる人たちは拒絶反応を示すだろうと思うよ

とか書くと、「素人っていう立場に胡坐を書いてないで努力しろよ」って言われるんだろうけど、
そのための登竜門はやっぱり必要だとおもうよのさ

498(○口○*)さん :06/04/04 05:45
質問です、この間Gvでホムを出した所自分だけ激ラグで全く動けませんでした
ケミスレの過去ログを見た所ホムの自動追尾に大量のパケが送信されていて重くなる
だからそれを切れば良いと書いて有ったのですがLuaが良く分からない為どこをどう
変えていいのか分かりません、教えて頂けませんでしょうか?
現在AIは何もいじってない最初から入っている物を使っています

499(*○口○)さん :06/04/04 06:58
>>498
自動追尾の大量パケ送信はケミ追従時にケミと等速で移動できるようにした時に起こる物
初期からのAIには自動追尾に大量のパケが送信部分は無い
Gvではホムの分のパケット(ターン?)が増える分、ラグは倍になる
これの防ぎようは無い、つまり仕様

移動せず、遠距離で月光使うなら多少は軽いが普段よりも重くなるのはどうしようもない

500(○口○*)さん :06/04/04 07:32
>>498
デフォAIではOnFOLLOW_ST関数の中の

elseif (GetV(V_MOTION,MyID) == MOTION_STAND) then -- もし立ち止まっていれば
    MoveToOwner (MyID) -- 主人のとこに移動

の部分が大量パケ送出の原因っぽい。本来なら

MoveToOwner実行
→移動開始(モーションがMOTION_MOVEに変化)
→立ち止まるまでMoveToOwnerは実行されない」

のはずがラグによるターン制のせいで

MoveToOwner実行
→ラグで移動開始しない(モーションはMOTION_STANDのまま)
→MoveToOwnerを何度も連続して実行
→移動要求パケ大量送出

になってるんだと思う。

MoveToOwnerした後はモーションがMOTION_MOVEになるまでしばらく
MoveToOwnerを実行しないようにするといいかもしれない。
実際にどう書けばいいのかはわからないけどc⌒っ.д.)っ

501(○口○*)さん :06/04/04 11:43
>>500
取り敢えず浮かんだのが3つ
1.グローバル領域にMoveFlgみたいのを作って、
elseif (GetV(V_MOTION,MyID) == MOTION_STAND) then
if (MoveFlg == 0) then
MoveToOwner (MyID)
MoveFlg = 1
とかやる(この場合移動完了した後にMoveFlg=0に戻す必要がある)
後ヒットストップに弱い

2.主人の移動を確認するまで動かない
elseif (GetV(V_MOTION,MyID) == MOTION_STAND) then
if (GetV(V_MOTION,GetV(V_OWNER,MyID)) == MOTION_MOVE) then
MoveToOwner (MyID)
軽いけど、Gv中はいいが、通常時に遅れそうな予感

3.グローバル領域で時間保存する箱を一個用意(MoveTimeとでも仮称)
-- グローバル
MoveTime = GetTick()

--OnFOLLOW_ST
elseif (GetV(V_MOTION,MyID) == MOTION_STAND) then
if (GetTick() - MoveTime >= 350) then -- 350は移動インターバル(単位:_秒)
MoveToOwner (MyID)
MoveTime = GetTick()
一秒に約3回移動パケを飛ばすようになる

こんなのでどうだろう

502501 :06/04/04 11:44
読みにくさに感服
半角スペースダメなの忘れてたOTZ

503(○口○*)さん :06/04/04 12:31
Gv用に良いAI考えたぜ!

function AI(myid)
local msg = GetMsg(myid)
if msg == 1 then Move(myid,msg[2],msg[3]) end
if msg == 7 then SkillObject(myid,msg[2],msg[3],msg[4]) end
end

ゴメン、やっぱりなんでもない。

504(○口○*)さん :06/04/04 12:38
上の方で出てたけど、工学AIを基本的にそのまま使用していて
指定レベル以下の敵にはスキルを使わない、って部分が
うちのゼリーにもうまく適用されない現象が出てる。

USE_MOBDATA = true,
NO_USE_SKILL_MONSTER_LEVEL = 10,

設定はこれでOKのはずなんだが、盗蟲にMAXレベルカプリスが発射される。


IGNORE_MONSTER_LEVEL = 20,

こちらの指定レベル以上の敵には攻撃しない、方はちゃんと判定してる
(メタリンは叩かない)ので、GetMobInfo()の問題でもなさそうだしなぁ

家に帰ったらTraceAI仕掛けてみようと思ってるけど、謎だ。

505(*○口○)さん :06/04/04 14:58
>>504
工体ブログ3/30日rev73で
・指定したレベル以下のモンスターには詠唱妨害を行わない
ってあるけどバージョン更新して無い落ちじゃまいか?

506(○口○*)さん :06/04/04 15:54
>>505
残念ながら、バージョンは4ファイル構成の rev73 なんだ。
AIは使用・解析しはじめたばっかりなので、まだ自分のコードは全く付加してなく、
そのままコピーしたものを使用してます。

詠唱妨害を行わない判定用の NO_INTERRUPT_CASTING_MONSTER_LEVEL は
AllowInterruptCasting()でしか参照されていないので、実際にスキルを使用する

elseif h == VANILMIRTH then
SkillObject( MyID, MAXLV_CAPRICE, SKILL_CAPRICE, MyEnemy )
end

の部分には影響しないと思ってるんだけど、設定によっては抜けてきたり
する条件でもあるんだろうか。
ちなみに、NO_INTERRUPT_CASTING_MONSTER_LEVELは初期値の20が入ってる。

507(○口○*)さん :06/04/04 16:28
4ファイル構成ってmobdata.lua必要だから5ファイルだろ?
mobdata.lua無いとか言うなよ?

508(○口○*)さん :06/04/04 16:51
あぁごめん、mobdata.lua抜けてたね。それいれて5ファイルだな。
>504の方で IGNORE_MONSTER_LEVELは問題なく動いてるって書いたから
mobdata.luaが無い(or読み込みミスってる)ってことはないはず。

ともかく今は家にいないんで詳しい調査もできないから、これ以上レスはやめておきます。
レスくれた人ありがとう。
何か分かったら報告に来ようと思うけど、迷惑だったらゴメンよ。

509(○口○*)さん :06/04/04 19:16
質問させてください。

function △△△ ( )
 if ( ○○○ ) then
    ( 中略 )
  return
 end
 if ( ●●● ) then
    ( 中略 )
  return
 end
end

こういった場合、○○○の条件を満たす限り、●●●の条件が参照されることはないと思うのですが。
それで間違ってないでしょうか?
もし、間違いでない場合、このふたつの条件を両立させることはできますか?

510(○口○*)さん :06/04/04 19:24
>>509
> ○○○の条件を満たす限り、●●●の条件が参照されることはない
○○○の最後で return してるので、その通り。

> このふたつの条件を両立させることはできますか
return しなきゃ両方通る。

そういう意味では無く?

511(○口○*)さん :06/04/04 20:01
反対に return 忘れて訳の分からない動きになる事だらけの初心者 ヾ(゚д゚ )ノ゛ アツマーエ
あまつさえ空の変数や返値が nil でエラー出しまくってパニックになったり。

所で、標準Util.luaにはいっている関数の返値で、
false でなく -1 を使うものもあるのは何か事情があるのでしょうか。

512(○口○*)さん :06/04/04 20:17
>>511
重力クォリティという事情。たぶんCでのクセ。
falseでいいね。

ただfalseはtrueと密接な関係があるから
nilやnull(値がない、からっぽ)が使える言語なら
そっちのほうがよりよいと思う。
返値がboolな関数でも、エラーや引数が不正で評価そのものが
できなかったという場合にnilを返すことができるし。

513(*○口○)さん :06/04/04 20:24
>>511
GetVの画面外idの返り値がクライアントだと-1だから
それに合わせて-1を使っているんだと思う

GetDistance2で-1が返るとGet**Enemy系で距離判定に支障が出そうだから
自分はUtil.lua手直して使ってる
- return -1
+ return 99

514(○口○*)さん :06/04/04 20:35
>>510
やはりそうですか、ありがとうございます

returnがないと、まさしく訳の分からない動きになるんです

素人なのでソースの良し悪しがよくわからないですが、動作ごとに関数にして、
順番に呼び出す形にしてみます

515(○口○*)さん :06/04/04 22:56
言語ごとの差異というか文化的な違いもあるのですね。
二択でないスカなら nil 使っとけ、という方針で頑張ってみます。

516(○口○*)さん :06/04/04 23:23
>>514
returnに到達すると、後にどんなものがあろうが関数を抜けちゃう。
それだけの話。

だからreturnを失くせば条件は両立するし、同時に上の条件では抜けなくなって
後のほうの処理もダラダラとながれちゃう。

具体的にやりたい処理がわからんからアドバイスがしにくいがね。

517504 :06/04/05 12:23
家に帰ってTraceAIをしてみた。
結果・・・


正しく動いてる(´д`;)

昨日の動作はなんだったんかさっぱりワカラン
もちろんだが、ソースコードもconfig内容もいじってない。

ってことで、原因不明。また再発したら追ってみます。
昨日からスレ汚し失礼した。

518(○口○*)さん :06/04/05 12:38
指定レベルだかをいじったあとに反映を忘れてた→今回のログインで反映された

みたいなポカならうちはたくさんある。
カスタム(先行用)と標準(非先行用)両方いじってて、逆のほう使ってたとか。

519(○口○*)さん :06/04/05 17:57
>>412
モンスターの索敵範囲をちょっと調べてきたので報告。

調査対象モンスター:ファミリア
(アクティブ、ダメージを与えるまでは最も距離が近いプレイヤーをターゲット
ダメージを与えた後は知らん)

まず、対プレイヤー
・モンスターを中心に21*21の正方形内が索敵範囲
一方向かつ真横と斜めしか調べてないので、
形がゆがんでる可能性もあるけど多分あってると思う。

で、肝心の対ホム、調べたのは左上部分のみ。
・真横(横に3マスの範囲)、真上(縦に3マスの範囲)に異様に長い索敵範囲を持つ(25マス)
索敵範囲がこういう特殊な形をしてるのか、それとも別の要因があるのかの調査が必要かと思う。
別の要因としては、モンスターのいる座標によって索敵範囲が変わり、たまたま特殊な形が現れた可能性を考えてる。

・それ以外は、距離20程度の円形
若干、形はゆがんでるっぽい。
あと、斜め45度の線に対し対称にならない部分があったが、調査ミスなのか
もともとそうなってるのかは不明。

真横、真上がほんとにこういう範囲を持ってるとすると、ものすごい遠くの
モンスターがホムをタゲって来るっていうのも納得できるんだよね…。

・注意
今回の索敵範囲は、ファミリアのものです。
アクティブモンスターの種類によって索敵範囲が異なる可能性があります。

520(○口○*)さん :06/04/06 00:44
バニルを使ってる者です。

工体研究所のAIを使用しているんですが、自動スキルを使う際にランダム
で魔法を撃つので、通常攻撃でHPを削りトドメに魔法とか随分効率の悪い
ことをやってくれちゃったりするのです・・・。

SP温存のために、ランダムではなくタゲ取りの時に魔法を使わせたいので
すが、どのAIの何処の部分をいじればいいのかわからなくて(^^;

わかる方いたらお願いしますm(__)M

521520 :06/04/06 00:47
どのAI ×
 ↓
どのLuaファイル ○

でした(@@;

522(○口○*)さん :06/04/06 00:51
工体さんのAIは素人が弄るのは難しい印象がある。

とりあえずオートスキルは切ってファーストアタックのフラグ作って
ATTACK_STの中にフラグ立っていたら攻撃の直前にSkillObjectかな。

523(○口○*)さん :06/04/06 02:08
>>520
工体のソース見ないで回答するんで使えるかどうかわかんないけど、
ランダムに使ってるところを、ランダムじゃなくて100%使うようにする。ここが第一段階。
・・・ランダムの条件も設定できるなら100%にするだけでいいのだが、
そうでないならランダムにしてるところぶった切って必ず使う、にすればいいのかな。


で、mobのタゲが変わった時に
(以前のタゲIDを保存しておいて、現在のタゲIDと=ならそのまま、≠なら変わった、と
 みなす。変わったあとは現在のタゲを以前のタゲ保存してる変数に上書き)
SkillCount = 0
SPtmp = 現在のホムのSP
を設定する。

そんで、スキルを使用してるところで
if (SkillCount == 0) then
  スキル使用
  if (SPtmp < 現在のホムのSP) then
    SkillCount = SkillCount + 1
    SPtmp = 現在のホムのSP
  end
else
  通常攻撃
end

ってやっとけば動く気がする。スキル使った直後はSP減ってくれないから
FirstAtkがすぐには0にならないが、スキルディレイが切れるより前には0になるはずだから、
二発目は出ないと思う。

敵のHPに応じてボルトの回数変えたいなら、MOBのHPをMOBDATAなりなんなりから持ってきて、
おおよそのボルトのダメージで割る、とかでスキル使用回数を決定しておいて、
if (SkillCount < スキル使用回数) then
って条件にすれば、一応動く。

てかうちのがだいたいそんな感じで動いてる。鳥だけど。
敵みつける→(月光→ディレイの間は通常攻撃)×指定回数→通常攻撃ってね

524(○口○*)さん :06/04/06 02:12
>ってやっとけば動く気がする。スキル使った直後はSP減ってくれないから
>FirstAtkがすぐには0にならないが、スキルディレイが切れるより前には0になるはずだから、

スキル使った直後はSP減ってくれないから
SkillCountがすぐには+1されないが、スキルディレイが切れるより前には加算されるはずだから、


に訂正。途中で回数指定可能に書き換えてて修正し損ねた。

525(○口○*)さん :06/04/06 10:51
>>520
events.lua

local x = GetPercentSP( MyID )
local a = (x^2-x*2) / 100
local r = math.random( 100 )
a = a * ( a / 100 )
TraceAI("Try Skill: a="..tostring(a).." r="..tostring(r).." sp="..tostring(x) )
if a > r and t() then
    if h == FILIR then -- AttackSightに入らなくてもスキルを撃つ
        SkillObject( MyID, Eval( Settings.SELF_SKILL_MOONLIGHT_LEVEL ), SKILL_MOONLIGHT, MyEnemy )
    elseif h == VANILMIRTH then
        SkillObject( MyID, MAXLV_CAPRICE, SKILL_CAPRICE, MyEnemy )
    end
end

この部分っぽいな。
何故回数とか見ずに、ランダム仕様なんだろう・・・。
ただ、これ見て改造方法思いつかないなら、
工体さんとこのAIは弄らんほうがいいと思う。

526(○口○*)さん :06/04/06 11:04
うちは自作AIで最初の一撃をスキル攻撃にしてるけど、これで十分。
SP残量と囲まれ状況に応じて使うか判断するよう拡張したら快適になった。
CRでMobが吹っ飛んだら最初の一撃と勘違いして月光連打するけど、
むしろMH中はスキル攻撃全開の方が助かるから、狙ってCRするくらい。

プレイヤーも、SP余ってたらスキル攻撃、囲まれたら多少SPきつくてもスキル攻撃、
という判断をしているのだから、ホムのAIもそうするとストレスなく戦える。
ランダムとか予期せぬ動きをするのは可愛いけど、実用的だとは思わないな。

527(○口○*)さん :06/04/06 13:15
>>520-526
くまーAIみたら?
残りSPに応じて、
初撃のみスキル使う設定出来るよ。
あと、指定の攻撃回数毎にスキル使用とかも、
出来るみたい。

528(○口○*)さん :06/04/06 13:39
当方、似たようなランダムなオートスペル的スキル処理を入れているAI作成者。
結局は、AI設計者の趣味と戦闘スタイルってことじゃないかな。
FCASセージ使いでもある当方からみると、スキル自動使用のランダム性はあまり気にならない。

俺の場合は、ランダムはランダムだが「その敵の脅威度」「SP残量」で発射率を変えている。
強敵や多数の敵とやるときには必然的に発動率があがるのでほぼ初撃はスキルになるけど、
敵が弱いなどの余裕があるときは、自動発動も少なめ。

最初は厳密に「初撃のみスキル」とか「敵の推定HPから、適切なスキル回数算出」とか
やろうとしてたんだけど、いろいろ考えていたら必要な情報が足りなくてあきらめた:
厳密にやろうとすると、画面内の敵へのダメージ履歴を監視していないと意味が小さいし、
そしてそれをできるだけの情報をホムが得ることができないんだよね。
顕著なのは例えば共闘が絡んだ場合で、そもそも初撃魔法すら要らないケースもあるわけで。
なので、こだわっても仕方ないと判断して、SPがそれなりに余る範囲でのランダム発動。
もちろんオーバーキル的スキル使用がおきることもあるにはあるけど、それは妥協している。

まあ、CHASE→ATTACK以降時に撃つってのが、一番お手軽な「初撃」対応じゃないかな。

529(○口○*)さん :06/04/06 14:20
座標ズレによるホムの動きの硬直を防ぎたいのですが

攻撃条件を満たしてるとき→何秒間硬直→ぶれる移動をする→戻る


ってのは一応の対策にはなりますが

根本的に座標ズレ攻撃不可をとめる方法はありますかね?

530(○口○*)さん :06/04/06 14:35
>>529
攻撃ってパケは飛ばされるけどそれに成功/失敗って返値がないから現状は無理なんだよね。
>>攻撃条件を満たしてるとき→何秒間硬直→ぶれる移動をする→戻る
この硬直って部分が攻撃してるって扱いになってる限りは万策尽きてると思う…
V_ATTACKRANGEを1にしてみるのが現状での最良方策かと。
(実際1セルずれてても射程そのものは2だから届く)

531(○口○*)さん :06/04/06 14:49
とりあえず一定秒以上MOTION_ATTACKが発生してなければ別の行動を試みるってのはできるね

532(○口○*)さん :06/04/06 15:12
しかし、ホムは MOTION_ATTACK が発生しないというオチ。

533(○口○*)さん :06/04/06 15:46
マイナー所のAIだが、ケミテンプレで紹介されてる場所にあったAIの
「ご主人はぼくが守る」とかいうの使ってみたら某二次職を思い出したw

有名どころはやはり動きが安定してるが、他の配布サイトも結構がんばってるし悪くないな

534(○口○*)さん :06/04/06 15:51
>>529
現状だと手動で位置ずらしてやるしかないんじゃないか
重力座標なんとかなればいいんだけどな...
工体さんの技術に期待

535(○口○*)さん :06/04/06 16:53
被ダメやラグ、押しのけによる自身の座標ズレは、Move 送れば直るからまだいいんだけど、
敵の位置はホムが取れる位置からしてずれてるから、サーバーの送信方法変わらないとダメなんじゃないかなぁ。

クルーザーとか、ホムが真横で攻撃しないと思ってクリックすると、突然違う座標に出るし・・・。

536(○口○*)さん :06/04/06 17:54
ホムが実装されてからアルケミ育て始めて
やっとホムが呼べるようになりました。
とりあえず、くまーAIをダウンロードして
オートスキルの設定だけ変えてLv上げしています。

くまーAIは機能が少ないそうなので、
Lvがあがってきたところで、他のAIも試してみようと思うんですが
テンプレなどで紹介されている配布AIの機能を
何処かで、まとめてたりしてないですか?

そもそもテンプレの配布AIも少ないよね・・・
配布AIのまとめとかもないのかな。

くまーAIの機能以外でどんなのがあるか知りたいです。

537(○口○*)さん :06/04/06 18:17
>>536
ttp://www.sgv417.jp/~winter/
ここの「ユーザーAI」にいろいろリンクがある。

ただまあ、AIはそれぞれに個性があるので、人のレビューよりは自分の感触を
信じたほうがいいようには思う。

538(○口○*)さん :06/04/06 19:32
どきどきAIはもうダメだな、一時期使ってたけど
アレコレ理由つけてverUpしないみたいなこと言っているし

539(○口○*)さん :06/04/06 19:36
>>536
>>436-438 でもそんな結論だな

540520 :06/04/06 19:37
レスありがとうございました!

lua初心者ですが頑張ってみますm(__)m

541(○口○*)さん :06/04/06 19:40
まぁ更新し続ける義理もないよな。
ある程度使える時点のを落としてきて、自分でカスタマイズしてるおいらは感謝するばかりだが。

542(○口○*)さん :06/04/06 19:41
>>538
初心者に勧めるならverUpしない物のほうが弄りやすいと思うぞ。
まあ、単にサポートとか質問が面倒になってるんだろうけど。

543(○口○*)さん :06/04/06 19:49
AIにせよドット絵騒動にせよ、
「これをupしたらどんな騒ぎになるか」
を予想できて無いみたいだしなぁ。

そのうち煽られてAIの公開止めるんでない?

544(○口○*)さん :06/04/06 20:10
>>542
個人的にはくまAIの方が初心者にはお勧めだと思うよ、分かり易い

別に更新する必要性はねーけど、それやらないって事は
最終的に誰も使わなくなるって事だしな、更新の必要性がないほど完璧なら別だが

545(○口○*)さん :06/04/06 20:44
どのAIも設定方法は変わんないし、設定変えなくても
ある程度は動くんだからどれが初心者向けっていうのも無い気がする

自分でソースいじくる、っていうならくまAIが一番入りやすいだろうけど、
最近のくまAIみたらかなり多機能になってたから
×非常にスマートだがその分機能は少ない
っていうテンプレの説明はあんまりあてにならないよ

546(○口○*)さん :06/04/06 21:01
>>536
>>272あたりでどうだろうか?とりあえず大御所はこの4つ。

後そこにある韓国ユーザーAIに関しては、
設定用ファイル「RAGHOMN」の翻訳版がテスト公開されてるな。
ttp:keisya.jugem.jp/

どきどきAIはソース内容が説明されてて初心者の自分に激しく分かりやすかったので、
ここからAIスレとかのソース追加していくのに、Lua初心者の自分にはかなりやりやすいよ。
本人なにやら色々ある人のようだがAI説明以外見てないのでよく知らない。>>541と似た感覚なのか?タブン。
韓国ユーザーAIは無駄にソースが長くて何処で何処理してるのやらさっぱり。
コレでできれば最適なんだけどなぁ_| ̄|○スキルブソクダヨジブン

で、くま〜AIも分かりやすいとの事なので今からみてみる(=゚ω゚)ノシ

547(○口○*)さん :06/04/06 21:03
>>544
完璧じゃなくてもある程度使えればあとは性に合えばいいってやつはいっぱい居るだろうし
それどころかデフォAIのままのやつだってかなり居るから誰も使わなくなることはない気がする。
あれの普及はかなりのものだと思うしな。

つーかどこのAIもそろそろネタ切れなんじゃないか?

548(○口○*)さん :06/04/06 21:24
>>547
知名度だけはあるからなぁ。
どきどきAIはケミの真後ろに追従する機能が激しくウザくて
そこを俺では上手くソースを弄れなかったので使わなくなった
実装初期じゃオートスキルと非先行だけでも役にたったけどね

549(○口○*)さん :06/04/06 22:20
ネタ切れというか、普通に狩するには困らないレベルまではきている、ってとこじゃない?
そのAIを自分が使ってて不自由がなければ、更新されないのもまあ道理。
かくいう俺もマイナーながらもAI公開しているが、最近はあんまり不自由がないのであんまり変わってない。

痒いところはいろいろあるけど、現状ではホムが知ることができる情報の限界からどうしても
手動操作が必要な場面があるので、AIでは「不自由しない程度に半自動化」できてればいいや、
ってのが俺の感覚。

うちのケミは戦闘ケミで、現時点ではうちのホムはまだまだ「ケミに守ってもらっている」ような時期。
ホムが成長してケミと共闘するような時代になれば、また何か新しい機能が必要になるかもしれないけどね。

550(○口○*)さん :06/04/06 22:33
そろそろ実用派じゃなくて、実用には向かないほどに
無駄な動きをするAIが欲しくなってきた。

つねにバックスタブ(スパイラルにあらず)仕掛けてるみたいに
敵の背後を取りにいったりとか、一撃で勝てる敵にしかかかっていかない
チキンタイプとか。
敵がいないのにふらふら動いて、気をつけてないと画面外に消えていくとか。

やろうと思えば結構簡単にできるな・・

551(○口○*)さん :06/04/06 23:16
AIを弄ること自体が目的となってくると、特に不満が無くなっても趣味的、瑣末的な機能UPを続け、
AIを手段としか考えない人には合わなくなってくる。無論、悪いことではない。

552(○口○*)さん :06/04/06 23:45
>>551
だな。いろんなAIがあるに越したことはない。
ってなわけで、>>550よ、変なAIたくさん作ってくれw

553(○口○*)さん :06/04/07 02:36
こんばんわ、くまAIの中の人です。

こちらのスレはあまり確認していなかったのですが、
ちょっと話題になってるよ、と聞いたので
50レスほど読みました。結構、内容濃いような気が(笑)

AIについてはさまざまな御意見があると思うので、
コメントは1点を除いて差し控えたいと思います。
1点というのは・・・
私の配布しているAIは決してスマートではありません!
関数もほとんど使わず、ずらずらと書いてます(ノ(ェ)`)
そもそも、プログラミング素人ですし。

む、ついでのつもりが結構書いてしまった。

>>529-535

で、書きたかったのは↑のラグによる座標ズレ対策の話題のところを
呼んでいてふと思い付いたことです。

ラグによって、クライアントからは敵がいる様に見えるけれども
本来敵がいない座標へ移動する時は、押し出されるのでしょうか?
押し出されないんだったら、敵が座標ズレしているかどうかが
判断できるような気がします。

ホムのみが狩りをするって前提なら、
敵の被ダメモーションとれるので座標ズレ判定できるんですが、
あんまり現実じゃないし・・・

どうなんでしょう( ´(ェ)`)?

# 個人的には、接続人数最少の鯖にいるので
# 狩り中にラグることってほとんど無いんですよね・・・

554(○口○*)さん :06/04/07 02:44
やったことないからわからないけど、押し出されないかもしれない。
ただ、攻撃しているときは実際に居る座標に重なっても弾かれないことは確かなので、
Moveコマンドの1回で判定できないといろいろと不都合が出てきそう。
CHACEの時に判定を仕込むといいかもしれないけど、
CHACEに行ってもMoveが行われずにATTACKへ移行する場合もあるから(囲まれてるときとか
このコンセプトだと実装できたとしても変な挙動する割りに効果があまりないかもしれない。

555(○口○*)さん :06/04/07 05:45
AIでエモが出せたらとほんと思うよ。
ノンアク→アクティブ変更時に /ふん とか その逆は /イヤイヤ とかで
見た目的にもわかりやすいのに。

泣きエモ出したら爆破されそうだが。

556(○口○*)さん :06/04/07 08:13
Chaosの人のBlogに小さく載ってたが、こんなのもあった。
http://sky.geocities.jp/homuai/

557(○口○*)さん :06/04/07 08:59
当方、Chaos住人。
敵の重力座標問題については・・・人間でプレイしているときだと
・敵をクリック
→近づいていき隣接するが攻撃しない
→「あ、重力座標入った」と判断して、手動で2歩先に移動。
  ・・自敵・・・
      ↑ここに移動
→移動後敵クリック

・・・とやると、多くの場合対処できています。
なので、AIでも似たようなことをすればいけるかな、と思います。

まあホムの場合「攻撃してるかどうかがそもそもわからない」という問題が
あるので・・・CHASE時に常に「2歩余計にあるく」とかいかないのかな?
スマートじゃないですけど。

558557 :06/04/07 09:00
Σ('-'つ)つ
ちょっと誤解の余地がありそうなので追記。
当方、556のBlog主では「ありません」

たまたまChaosにすんでるだけです(^^;

559(○口○*)さん :06/04/07 10:16
>>556
実際に使ってないからわからないけど、
敵のダメージモーションが3秒間読み取れなかったら、という判定材料だと
ケミ自身も敵を殴る場合はダメージモーションが出来てしまうから
完全に壁してるときにしか使えないような。

560(○口○*)さん :06/04/07 10:47
いっそ、1秒ずつ敵の周り回ればいいんだな。
ローリングアタック!見たいな感じで、うん。

Attack 出来てるかの判定ぐらい欲しいよなぁ。

561(○口○*)さん :06/04/07 12:23
>>538
機能的に満足していればverUPの必要無いと思うんですが。
私はどきどきAIに工体AIからほしい機能を加えて、
ついでにオリジナルコードも追加して使ってます。

542の言う通り改造してると更新されないほうがうれしかったりw

562(○口○*)さん :06/04/07 14:04
>556
そのAI見てみたけど、
まさしく553(くまの人)の言っているやつのようだ。

553> ホムのみが狩りをするって前提なら、
553> 敵の被ダメモーションとれるので座標ズレ判定できるんですが、
553> あんまり現実じゃないし・・・

くまの人や559が言うとおり、
ホム単体で攻撃しているときじゃないと効果ないけど、
ラグが生じるようなモンハウの時は
ホムとケミがそれぞれ違う敵を攻撃していることもあると思うので、
この判定に基づく処理もあったらいいと思う。

問題は、ホムとケミが同じ敵を目標としているときに
座標ズレによって、ホムだけ攻撃できな状態になったらどうするか・・・

563(○口○*)さん :06/04/07 14:09
くだらない質問ですがお願いします。
ホムの攻撃モーションをいつも完全に表示させるにはどうすれば良いのでしょうか?
がくがく震えながら攻撃しているのは見苦しいので・・・
ASPDが多少下がっても問題ないので解決方法があれば宜しくお願いします。

564(○口○*)さん :06/04/07 14:26
>>563
ケミスレにも書いてなかった?

--global
AttackTime = 0
A_Intarval = 150

--ATTACK_ST

if (MySkill == 0) then
    Attack (MyID,MyEnemy)
else
ってなってるとこを
if (MySkill == 0) then
    if (GetTick() - AttackTime >= A_Intarval) then
        Attack (MyID,MyEnemy)
        AttackTime = GetTick()
    end
else

簡単にはこうやれば。

565(○口○*)さん :06/04/07 15:03
エラーが発生してしまいます・・・
-- global variable
の中に
AttackTime = 0
A_Intarval = 150
を追加すれば良いのでしょうか?

ケミスレは最近の物を一通り見てみたのですが、解決法がわかりませんでしたので・・・

566(*○口○)さん :06/04/07 15:15
>>562
ふと思ったんだが、ケミが攻撃できているのならその時点で座標ズレは修正されないか?
座標ズレの敵を殴ろうとすれば正規の位置に飛ぶんだから殴れているなら
ズレは取れているとみなせると思うんだが・・・・

もしくは殴っていてもズレるのであればケミより射程の広いホムが
ケミの位置から攻撃すれば当たる・・・・MoveとAttackタイミングを工夫すれば
ケミに重なることは可能だから・・・・ってPPしにくいなorz

567(○口○*)さん :06/04/07 15:16
すみません、自己解決しました。
150のままではたまに挙動不審を起こすことがあったのですが、
180にしてみたところ、ほぼ全段モーションが表示されるようになりました。
これで更に愛を持ってホムを育てることが出来そうです。有難うございました。

568(○口○*)さん :06/04/07 15:36
>>567
遅レスでごめん、解決したようで良かった
指摘の通り
--global valiableに追加
AttackTime = 0
A_Intarval = 150

ってことで。
150は環境次第で変わるみたい。
うちの環境だと140〜145位がクライアントと等速だったので気分次第で…
|ω・) とりかわいいよとり

569(○口○*)さん :06/04/07 16:13
>>566
たとえばだけど、
 
    ↓ずれ位置
□敵□■□
□ケミ□□ホム
□□□□□

敵:サーバー上の敵の位置
■:クライアント上で見える敵の位置

こうなっていた場合、クライアントでズレててもケミは敵を攻撃することができるし、
ホムはクライアント上では射程内なので攻撃を続けるけど、
サーバー上では射程外になっているので攻撃が届いていないことになる。

座標ズレは敵が移動しないことにはリセットされなかったような気がする。
殴りに行けば修正されたように思えるのは、ズレた位置に向かうことで
PCが敵の射程外に出るため、敵がそれを追いかけて移動することで正しい位置に
修正されているからじゃないのかな。

570(○口○*)さん :06/04/07 16:38
一応、一定周期で再配置されるんじゃないかな。
クルーザー殴りに行くと、クルーザーは動いたり逃げたりしないのに座標飛ぶし。

571(○口○*)さん :06/04/07 17:13
うまく伝わるかどうかなのですが質問です

各製作者の皆様からAIをいただいてそれに加筆して使用させていただいております
ヴァージョンアップされたときに最新版をいただきますが
コレを元にまた自分仕様にする場合
いじったところがよくわからなくってしまったりするので

たとえばAI1とAI2の中身の違う箇所がわかるようなツールってありますでしょうか

572(○口○*)さん :06/04/07 17:18
>>571
windiffとか
ttp://www.vector.co.jp/soft/win95/util/se120332.html

エディタによっては、そういう機能を持っているものもある

573(○口○*)さん :06/04/07 17:19
ぐぐるだけでもいっぱいでてきた。
↑のも入ってるけど

http://www.vector.co.jp/vpack/filearea/win/util/text/diff/index.html

574(○口○*)さん :06/04/07 17:20
>>571
ttp://www.vector.co.jp/vpack/filearea/win95/util/text/diff/index.html

他にもここにたくさんあるから、自分に合うのを探してみればいい

575571 :06/04/07 18:57
ありがとうございます
どういう風に検索すればいいかおもいちゅきませんでした、アリガト!(´▽`)です

576(○口○*)さん :06/04/07 19:52
>571
良かったでちゅね!

577(○口○*)さん :06/04/07 20:32
(/ω\)ハズカシーィ

578(○口○*)さん :06/04/08 00:34
>554
うーむ、敵の座標へ移動して押し出されるかどうかで
座標ズレ判断はむずかしいかぁ・・・

じゃぁ、こんなのはどうだろう( ´(ェ)`)?

/**********************************************************/
ホムが攻撃中の敵をタゲっている[敵 == GetV(V_TARGET,GetActors()]者が他にいない場合、
  対象の敵に攻撃してる[Attack(ホム,敵)]のに,
  敵の被弾モーションがない[GetV(V_MOTION,敵)== MOTION_DAMAGED]時に、
  敵の座標ズレと判断し、(移動してMOB引きずったり)対策する。

ホムが攻撃中の敵をタゲっている者が他にもいる場合、
  敵の攻撃対象の座標[GetV(V_POSITION,GetV(V_TARGET,敵))]へ移動し
  隣で一緒に攻撃する。
/**********************************************************/

敵も敵の攻撃対象も、遠距離攻撃だったらダメだったり、
敵の攻撃対象の座標がずれてたらダメなのは承知してるんですが
ちょっとでも改善しないかしら・・・

適当な思いつきで申し訳ないけれども、
試してくれる奇特な方がいないかな〜

正直、My鯖あんまりラグないのと、
自分によゆうがないのと、
めんどk(ぶっちゃけ過ぎにて規制)ので!( ゚∀゚)

> このスレは
> 「ホムンクルスのAIを自分ではいじれそうにない」」
> 「アイデアは浮かんだけどどうプログラムしていいかわからない」
> 「AIについて語りたいけど専門用語がわからない」
> といった人達が語り合うスレです。
だからいいよね!
・・・ごめん、開き直りすぎた(笑)

579(○口○*)さん :06/04/08 00:55
リカバリーの手段はたぶんいくつかあるけど、
一番の問題はその一段階前、

「自分がスタックしているかどうか」を的確に判断できないとならないからね。

>>578
前者の、「被弾モーションがない」判定は判定時間を設けてその間に被弾していないとか
やるとは思うけど、もし「単にHitが足りないだけ」の場合、Miss連発しただけで
この判定に分岐しちゃいそうな気がするんだよね。
特に脅威じゃないけどウィレスとか相手にしてるときに無駄な発動をしそうで不安。

で、後者。
移動をするかしないか、したかどうかとか色々と判定を厳しくしないと、
戦闘中ひたすら主人に向かって移動を繰り返したり
ちょっと主人が動いただけで主人と同じ座標に突っ込んできたりとかしそう。
戦闘中多少ホムとの距離を置きたい時とかもあると思うけど、
この機能を入れてるとそれが出来なくなりそうだし…。


個人的には被弾モーションでの判定ってあまり信頼性が求められない気がする。
かといって代替案も思い浮かばないのでなんとも言えないけど…。

580(○口○*)さん :06/04/08 01:56
>>579
 
被弾モーションは結構ちゃんと取れるから、行けるんじゃないか?
MISS連発ならどうせ当たらないんだから問題なさそうだし。
で、ウィレスってどんなの?w
 
後者も、距離取って判定すれば、繰り返しは無いだろうし、
敵叩いているときは頻繁に移動しないんじゃないか?
そもそも、同じ敵叩くなら近く成らざるを得ないだろう。
あと、敵の攻撃対象ってのは主人だけじゃないな。
 
まぁ、試さないとなんとも言えないな。

581(○口○*)さん :06/04/08 02:02
>>580
確かに、揚げ足取りなツッコミだったと思う。
でも結構思ったより面倒な、というか手の込んだ条件で作らないとならなそうではある。

>ウィレスってどんなの?
∴ ←こんなの。リヒタル周辺か生体D1で見れます。

582(○口○*)さん :06/04/08 02:10
>>561
機能的に満足してないから色々加えたんじゃないんか
雛型としては優れてるのかもしれんが
技能が無い人間にとっては、そのままでは
機能も少なく使い辛いAIって事になるんじゃないのかなぁ

583(○口○*)さん :06/04/08 02:27
>>581
 
意見としては、おかしいものでは無いと思う。
ただ、アイデアを否定するのは簡単だけど、
アイデア出すのは大変なものだし、
有望かもしれない芽をむげに摘むのもなんなので
援護射撃してみた訳で…
 
俺もお節介なレスしてるなぁ。
ウィルスじゃなくてウィレスだったのか。
ウィレスって変な動作するの?
ホム育てしてて新マップまだ行ってないやw

584(○口○*)さん :06/04/08 02:31
そこそこfleeが高いだけで、HP低いからインベナムとかばり強とかで叩き落せる
ホムだと当たらないかもなぁ。

変といえばグラフィックが

∴→・→;→∴ みたいな手抜きもいいとこなアニメーションをするってくらい。

585(○口○*)さん :06/04/08 03:08
いや、Fleeの高さはそこそこどころじゃないがw
確か禿に匹敵するFleeだったと思う。
ただしHP100なので星武器で乙い。

586(○口○*)さん :06/04/08 08:02
む。582氏がいいこと言ってる。

確かに「使いやすいAI」って言うのには
「インストールしたままの状態で、無難に動かせる」っていうのと、
「改造する際にわかりやすい」っていうのと、
それぞれ別の2つの意味合いがあるように思う。

例えば工体AIなんかは設定も多々あるし独自構造も多いので、正直初心者が中を見ていじるのは
難しいと思う。だけどデフォルトの設定で使えないか?というとそんなことはない。
むしろ、余計な編集しなくてもデフォルトでいろんなことをしてくれるから、
そういう観点では「何も知らない/自分でAIプログラムをいじる気がない」ユーザーには
かえって便利かもしれない。
そういう意味で今のテンプレでの段階評価は「プログラムをいじりたい」人向けの評価のように見える。
後者の「プログラムをいじる気がない」人向けの評価は別にいるのかもしれない。

まあ最後はやっぱり「どのAIがいい?って言われたら、実際に試してみるしかないよ」だと思うけど。
# つーか俺は自力AI作成者なので、他の人のAIの使い心地まではわからん (^^;
# 「プログラムをいじる気がない人」にレポートしてもらいたいかも。

587556のとこの中の人 :06/04/08 08:48
ん、晒されてますね。よく見つけたもんですw

>>562
本体が移動するなり、CRで座標ずらすなりしたほうが現実的です。
もしくは、たかが1匹と割り切って本体で処理してしまうか。
正直なところ、AI側で根治目指すのは非現実的だと思います。
そうそう本体が叩けてホムが叩けない状況が頻発するものでも無いですし、
頻発するならその時間は避けたほうが。

AIで調整したのは1マスあけの時に起きる問題への対処です。
攻撃可能範囲にクライアント側で到着したとなっていても、
サーバー側では処理の遅延で到着していないときに、
クライアントが攻撃命令送り続けて引っかかること(見た目には攻撃可能範囲内)と、
1マスあけるので、移動不可能マスに移動命令出すことがあることですね。
ご指摘の通りMiss連続でもMOTION_DAMAGEがとれないと判定されますが、
実用に大きく支障がでるとは思っていません。

588(○口○*)さん :06/04/08 21:23
鳥ホムがL50になって初めて各サイトのAIを使ってみた。
いろいろ設定をいじっても、微妙に満足いかなかったりでむずかしかった。
主人のステ・レベル、ホムの種類・レベル、
狩場や狩りのスタイル、個人の好みによって最適なAI設定はさまざま。

どのAIがいいのかは、ホント試してみるしかない。
ちまちま設定をいじって、うまくいくとめちゃ楽しい。
最後に、AIを構築してくださった方々に感謝!!

589(○口○*)さん :06/04/09 00:08
>>585
(゚L゚;)エッ

RO初めてはや2〜4年、初心者時代にフェイヨンで見かけた禿に、
周りの4〜5人の一次職ともども転がされて
「こいつがRO最強の隠しキャラだ!」と思い込み、
いつか禿とタイマンで勝つことを目標としてきたおいらだが、
ウィレスには攻撃がそこそこ当たるんだ。

ってことは、被ダメさえなんとかすれば禿倒せるってことか・・・

590(*○口○)さん :06/04/09 01:29
>>585.589
ウィレスの要HITは243
禿げは286
ちなみにベアドールが270

591(○口○*)さん :06/04/09 03:13
いろいろAIいじってるんだけど、自力では色々厳しいので相談。
攻撃対象Mobがホムの射程内の場合:通常攻撃
攻撃対象Mobがホムの射程外の場合:スキル攻撃
ってのは出来るかな?
鳥のムーンライトとスライムのカプリスくらいしか使い道ないと思うけど。

592(○口○*)さん :06/04/09 13:25
OnCHASE_STの適当なところに
if(MySkill ~= 0 and GetDistance2(MyID,MyEnemy) < ("スキル用距離")) then
 if("スキルを使用するか否か、SP残量とかマスタが座ってるとか") then
  SkillObjedct(MyID,MySkillLevel,MySkill,MyEnemy)
 end
end
試してないけど、こんなのでいけないかな?
OnATTACK_STに入れば通常攻撃するわけだし

593(○口○*)さん :06/04/09 19:12
制作者に聞くのがよいのでしょうが、教えて下さい
工体AIrev87のconfig.luaで
-- SELF_SKILLが発動するSPのパーセント
SELF_SKILL_PERCENTAGE = 50,

と言う項目があるのですが、コレは普通に
SPが50%以上の時にスキルを使用するという事だと思うのですが
仮にコレを10%以上としても、SPがあるのにスキルを余り使用してくれません
ほかに、見なければいけない項目があるのでしょうか。

また、スキルの発動率は他にも発動条件があるのでしょうか?

594(○口○*)さん :06/04/09 19:18
ケミスレから誘導されてきました。マルチで申し訳ないのですが・・・

リーフの髪の毛で突き刺す攻撃モーションありますよね。
あれを、攻撃モーションに固定、又は確率を変える等はできないのでしょうか?(毛7他3など)
みたところ普通の攻撃力と大差ないようなのと、突き刺すモーションのほうが好きなので・・・

まったくのランダム要素でしたら、諦めます。。。

595(○口○*)さん :06/04/09 19:30
AIで出来ること

・指定した相手を攻撃する
・指定した相手に指定したスキルを使う
・指定座標へ移動をする

以上
他に出来ることはない

596(○口○*)さん :06/04/09 19:44
>>592
アドバイス感謝!
とりあえずそれで作ってみた。
最初の構想とはちょっと違うものになったけど完成したよ。
OnCHASE_STが一回しか呼ばれない&呼ばれないことも
あるというのは仕様なんだろう、ということで自己完結。
もうちょっと綺麗にプログラムできたら公開も出来るんだろうけどなあ・・。

597(○口○*)さん :06/04/09 20:08
>>593
工体AIの自動スキル発動率は
 x = GetPercentSP( MyID )
 a = (x^2-x*2) / 100
 r = math.random( 100 )
 a = a / count
上記で a > r のときスキルが発動します。式に直すと
(SP(%)の2乗-SP(%)*2)/(100*その敵へのスキル試行回数)
SPが10%のときには
(10^2-10*2)/(100*試行回数)=0.8/スキル試行回数
となり乱数で0.8未満の数字が返ったとき、
つまり最大約0.8%の確率でスキルを使用するということになります。
ちょっと自信ないけどこんな感じかな

598593 :06/04/09 21:48
>>597
なるほど、そう言う計算になるわけですか
エクセルで組んでみて、SPをどれくらいの割合にすればいいのか
調べてみました。

有り難うございます。

599(○口○*)さん :06/04/11 10:02
誰もいないな…
ぬるぽするなら、今のうち!
 
( ゚Д゚)<にるぽ! にるぽ!
 
スッキリ ( ´ー`)

600(○口○*)さん :06/04/11 10:24
(゚Д゚;)


(゚Д゚)

601(○口○*)さん :06/04/11 11:25
こっちみんな

602(○口○*)さん :06/04/11 11:31
ここで「ぬるぼ」という文字を描くように移動するAIが登場

603(○口○*)さん :06/04/11 12:45
function AI() {
 Move("ぬるぽ")
}

604(○口○*)さん :06/04/11 15:35
function OnAttack_ST()
MyEnemy=ぬるぽ
SkillObject (MyID,5,Skill_GALTU,MyEnemy)
TraceAI("ぬるぽ -> ガッ")
return
end

605(○口○*)さん :06/04/11 20:49
やっと自分で使う索敵ルーチンの形が見えてきたので、書き書き(長文失礼)
元AIだと、ケミ→ホムの順番で一番近いMobから攻撃というのが気に入らず
色々状況を判断できるような、ルーチンを作成。
(mobdata.luaを作ってくれた方に感謝)

自作 SerchAllActors(MyID)で
 Mobのカウントは、ケミ/ホムをタゲっている数、アクティブMobの数
 MobIDは、
  1.ホムをタゲっている、1番近い/1番Lv低く近い/1番Lvが高く近い Mob
  2.ケミをタゲっている、1番近い/1番Lv低く近い/1番Lvが高く近い Mob
  3.友達をタゲっている1番近いMob
  4.先行攻撃対象の一番近いMob
 その他に友達登録されていない一番近いPCまでの距離
ぐらいを一気にまとめて収集し、

攻撃対象を決定する際に、
1.ホムをタゲっているMobで一番Lvの低いMob
2.ケミをタゲっているMobで
   ケミが一定数以上囲まれていない場合には一番Lvの高いMob
   囲まれすぎの場合には低LvMob
3.友達をタゲっている一番近いMob
4.ケミがタゲっているMob (非攻撃Bob等)
5.先行攻撃対象判断
   設定距離内に友達で無いPCが居ない
   周りにアクティブMobが居ない
   一番近い先行攻撃対象の距離が 設定距離 以下の場合
の順番で判断するようにしてみた

後は
 1.攻撃対象の判断部分を簡単にカストマイズできるよにする
  →ケミが戦闘よりで今はホムのLvが低いので、ホムのタゲを減らすのが優先
 2.Mobのレベル以外で優先順位を付けられるようにする(Mobdataにあるものなら今でも可能)
  →嫌な敵を先に倒したいとか
 3.友達別に優先順位を付ける
  →PTで後衛のタゲを優先的にとか
を実装したいなぁ・・・

AI.lua自体は0-マテさんのを元にしてるので、それも完全オリジナルにもしたいし
先は長いです・・・

606(○口○*)さん :06/04/11 22:35
最近攻撃モーションをしっかり〜って見かけるけれど、
その辺しっかりさせるとデフォルトより攻撃速度遅く
(正確には本来のAspdにさせてるのかもしれないけれど)
なったりしないのかな

自分自身はAIいじれないのだけど、色々使わせてもらって
攻撃速度に差があるような気がしたので…

607(*○口○)さん :06/04/11 22:53
もちろん攻撃速度は遅くなってる
というか元々が遅くなってもいいから攻撃モーションを
最後までしっかり表示させたいってのが発端じゃないかな

608(○口○*)さん :06/04/11 22:56
>>607
あ、なるほど
どうもありがとうございました

609(○口○*)さん :06/04/11 23:31
実際のASPDを実測してそれにずれがなければ理論上ASPDを落とさないことは可能
と言いたいところだけどネットワークの云ミリ秒差とかもあるから
送れるときにAttackコマンド送りまくっとけw
ってのが一番速い

610(○口○*)さん :06/04/12 01:05
>>606-608

とりあえずAIスレでここしばらくその話題がメインだった。
ASPD落ちないギリギリの(つっても環境次第でころころ変わるけど)waitを掛けるか、
グラフィックなんてどうでもいいからwaitまったくかけないか、
ASPD落ちてもグラフィックを取るか、人それぞれだとおもう。

611(○口○*)さん :06/04/12 22:52
ホムから見た敵の位置を、東西南北などの方角で判別してみようと思い、
ふたつ座標の値を見比べて、その大小で判別しようとしたのですが、うまくいきません。

Util.luaにこのように書くのではいけませんか?

function EnePosi (id1,id2)
local x1,y1 = GetV (V_POSITION,id1)
local x2,y2 = GetV (V_POSITION,id2)
local result = 0
if (x1 > x2) then -- id2がid1の西にいる
result = result + 1
elseif (x1 < x2) then -- 東に
result = result + 3
else
result = result + 2
end
if (y1 > y2) then -- 南に
return result
elseif (y1 < y2) then -- 北に
result = result + 6
return result
else
result = result + 3
return result
end
end

わかりにくさや不便さは後々修正するとして、
根本的な間違いがあるようなんですが、どこがダメですかね?

612(○口○*)さん :06/04/12 23:14
>>611
id1がテンキーの5の位置にいて、
id2のid1に対する相対位置をテンキーの数字で返す関数でいいのかな?

一見よさそうだけど・・・

どううまくいかないのか、
書いたほうが良いんじゃないのかい?

613(*○口○)さん :06/04/12 23:49
ずれないことを祈って・・・・
□□□■□□□
□7□8□9□
□□□■□□□
■4■5■6■
□□□■□□□
□1□2□3□
□□□■□□□

>>611のソースなら上の図の5の位置にid1が居て、id2が1〜9の
ドコにいるか数字で返すってのは間違ってないと思うよ
ただ■■のラインから1マスでもずれれば1,3,7,9のどれかになるってのは避けられない


もし360度を8分割したいなら三角関数使うしか無いかな・・・
id1から見たid2の位置をラジアンで返すとか、120度とかの角度を返す関数は
過去に出てたからそれを流用するのが手っ取り早いかな

614(○口○*)さん :06/04/12 23:51
Ai.luaの方でEnePosi(MyID,MyEnemy)などと使おうとすると、
attempt to call gloval `EnePosi' (a nil value)
というエラーが出るんです。

615(○口○*)さん :06/04/13 00:00
>>614

- require "./AI/Const.lua"
- require "./AI/Util.lua"

+ require "./AI/USER_AI/Const.lua"
+ require "./AI/USER_AI/Util.lua"

なミスに1票。

616(○口○*)さん :06/04/13 00:07
関数内returnの直前でresultをトレースに吐いて見ればいいんじゃないか
それでわかんなけりゃxyを取得したところで全部吐いてみれば。

そうすりゃ原因がどこにあるかだけは最低分かるだろう

617(○口○*)さん :06/04/13 00:20
>>615
おおおおおおお、それっぽいです!
思えばUtilとConstは弄ることがなかったので、気にもかけてませんでした!

ありがとうございました。
そしてお騒がせしました^^;

618(○口○*)さん :06/04/13 00:57
エラーメッセージを読めとあれほど!言ってないな。

半分わからない単語でも残りの半分でエラー特定ぐらいなら出来るもんだぜ

call コール 呼ぶ
gloval グローバル
’EnePosi’ ''でくくられてるから何かの名称
nil ヌル(にる) 
value バリュー 値

EnePosiの何かが原因だろう
↑が呼ばれたときに何か起こったのだろう
ニルバリューだからnilが関係してると

EnePosiとやらに渡しちゃいけないnilを渡した?ちがうっぽい
EnePosiとやらから帰ってきちゃいけないnilが帰ってきた?ちがうっぽい

あれ?gloval?call gloval?グローバルが呼ばれた?
MyIDもMyEnemyもちゃんとあるよ?
後他に呼んでるのはEnePosiだけじゃ?
EnePosiは関数だからグローバル変数じゃないよ?
EnePosiがグローバル変数になってる?
そういや宣言しなかったものはグローバル変数として扱われるんだっけ・・・
EnePosi関数が見つからないからグローバルだと勘違いした?
EnePosiなんてほんとにあるの?ミススペルじゃない
Answer:EnePosiはあるはずなんだけど→読みこめてない?→requireミス
解決

ここまでが1時間で終われば十分じゃないかな
万年英語赤点だった俺でもこの手のメッセージは読める(というか試行錯誤で何とかなる)からがんばれ超がんばれ

619(○口○*)さん :06/04/13 01:03
英語がかろうじて読めても、nilが帰ってくる事と、関数が存在してないことが結びつかない
人はたくさんいるだろうな。

まぁトレースしてみる→通ってない。じゃあ関数の最初にトレース。→
やっぱり通ってない。→関数呼ぶ直前直後でトレース→通ってる

→関数呼べてないやΣ(゚Д゚;)→という筋道でも、たどり着ければそれでもいいとは思うけどね。

620(○口○*)さん :06/04/13 01:45
唐突に質問なんだけど、
配列に要素がいくつ入ってるか確かめる関数って用意されてる?

621(○口○*)さん :06/04/13 01:53
>>620
table.getn がそれなんだけど、RO/Luaではなぜか省かれている。
こういうことしないとダメ。
local length
for i,v in ipairs(table) do
 length = i
end

622(○口○*)さん :06/04/13 02:38
そっか、d。

あと、グローバルでテーブル定義してるとき、
中身をクリアしたかったらもう一度どっかで

table = {}

を宣言すればいいのかな?

623(○口○*)さん :06/04/13 07:08
要素0個のテーブルをtableに代入だからそれで言いはず

624(○口○*)さん :06/04/13 13:35
(a nil value) といわれる場合は大抵その行にある変数か関数の中身が空っぽなせいだな
つづり間違いとか、何の値も代入してないとか、関数の定義が呼び出しの後になってるとかだ
ものすごく多いからテンプレにうまいこと入れておけばよさそうだなあ

625(○口○*)さん :06/04/13 13:39
そもそもファイルと行数まで特定できるのだからその行見ればわかると思うんだけどね

626(○口○*)さん :06/04/13 13:48
テーブルをハッシュとして使うとキー値が連番にならないからipairだとちゃんと全部取得できないよね
どうにかならんもんかなと思ったら pairs ってのがあるんだな。今ごろ気づいた

627(○口○*)さん :06/04/13 23:30
>>625
その行の関数がnilを返してる、ってとこまで突き止めても、その先が分からない
ライトユーザーのためにはいいかもしれん。

628(○口○*)さん :06/04/14 00:10
どうでもいいけどあのエラー文、最初の行を0としてカウントしてる気がする
フリーの某テキストエディタでやると、指摘された行番号とミスった位置が1行ずれてる

629(○口○*)さん :06/04/14 01:18
うちのだと一番上の行が1と表示されて、エラー文の行数とも一致してるなぁ

630(○口○*)さん :06/04/14 04:03
エラーは最低でも原因の行の前後1行は見たほうがいい
文法や演算などがおかしい部分でエラーが出るので
判定がその行の最後から次の行に至ることもある。

631(○口○*)さん :06/04/14 09:29
ちょっと相談させてください
いま0マテさんのどきどきAIを使用しています
PT狩りをするときにPTMをタゲっているモブも攻撃するようにしたいのですが(いわゆる友達登録機能)
自分で書き換えるほどのスキルはないですorz

そこで0マテさんのAIに行動が一番近く、且つ友達機能のついているAIにしたいのですが
どれを選んでいいものやら途方にくれております
友達機能のついてて使いやすいAIの配布先を教えていただけませんでしょうか

632(○口○*)さん :06/04/14 10:13
>>628
フリーの某テキストエディタがなにかわからないけど
自動折り返しも1行と数えるエディタがあるのはたしかだ。

633(○口○*)さん :06/04/14 13:22
>>632
フリーじゃなくてシェアだけど秀丸とかがそうだよね
とある人が秀丸信者と知らずに目の前で使いづらいっていったら・・・orz

エラー行だけでわかるのはスペルミスだけだからね
エラー行の前後+エラー行で使われている値の直前の使用箇所
あとエラー箇所が関数なら関数そのものとかはチェックが必要だね

634(○口○*)さん :06/04/14 13:40
>>632, 633
信者じゃないけど、秀丸は使っている。
で、秀丸なら行のカウント方法はオプション設定できるよ、と言っておく。

つーか、ある程度有名どころのスクリーンエディタでは、そういう設定は充実していると思うけど。
ソフト屋と文章屋では、行の意味合いが違って当然だし。

635(○口○*)さん :06/04/14 17:16
>>634
すまない、見落としてただけのようだな
まぁ、これだけ使われてるエディタならあって当たり前か

確かに物書きから見ると行はページの端までなんだよな
視野が狭かったようだ

636(○口○*)さん :06/04/14 19:50
>>631
ぜろまてAIの何を好んで使っているかわからんから何とも言えんが、
自分は韓国AIや工体AIに周囲を歩き回るところねじ込んで使ってたことがある。

637(○口○*)さん :06/04/14 22:53
>>631
くまーAIでいいんじゃね?
テンプレからいける。

638(○口○*)さん :06/04/15 01:14
>>637
くまーAIの友達登録って使いずらくない?
リザホムの度に登録しなおしでかなりめんどくて、結局横殴り解除しての手動ML1でタゲ指定してた。

くまーAIに一時的な友達登録とは別に、一度登録したら削除しない限り解除されない友達登録機能が欲しい…。

639(○口○*)さん :06/04/15 01:23
>>638
当方ひつーじだもんでホムほとんど死なないし、主人がINT1のせいで
安息コールもしないので、その辺はほとんど不便に思ったこと無かった。

640(○口○*)さん :06/04/15 02:39
友プレイヤーのID取るところまでは実装されてるのなら、それをID取った直後に
書き出す+AIリロード時に読み込む処理だけ追加してあげればいいんちゃいます?

641(○口○*)さん :06/04/15 06:37
>>638
くまーAIのConfig.luaに、FRIENDS={}って言う配列がある。
そこに、キャラID書くと解除されない友達設定できるよ。

例えばこんな↓

IndexFriends = 4 -- ×友達を配列に追加するためのインデックス
FRIENDS = {1234567,2345678,345678} -- ×共闘する友達キャラを格納する配列

IndesFriendsは、登録数+1の数字を設定するみたいだ。
攻撃しない敵も同じように設定できる。
設定の説明がないけど・・・
くまの人は、解除されない友達登録必要ないと思ったのかな。

あと、IDは/traceaiすると出力されるようになってる。

642(○口○*)さん :06/04/15 10:22
IndexFriends = 4 -- ×友達を配列に追加するためのインデックス

これをかきたせばいいのですか?

643(○口○*)さん :06/04/15 11:24
それの数字を本当の数にあわせて
 IndexFriends = 5
 FRIENDS = {友達ID1, 友達ID2, 友達ID3, 友達ID4}
こんな風に書き直せばいい
同じ項目があるから

644(○口○*)さん :06/04/15 12:59
Gvで敵が画面内にいるかどうかの判定をしたいのですが
GetACTORで拾ったIDリストから同盟・自ギルドの判別をさせるにはどうしたら良いでしょうか?

645(○口○*)さん :06/04/15 13:10
ここがAI雑談スレかー。
こんにちは。
AIスレから誘導されてきました。

ゼロマテリアルのどきどきAIを使用している鳥使いなのですが
草刈り時に指定しないと一緒に叩いてくれないのがさみしいです。
スムーズに草刈したいよ!
とりあえずこのスレッドを検索したらさっそく>>68-71くらいで
既出の話題だったみたいですが…

646(○口○*)さん :06/04/15 13:19
>>644
今は、同盟、自ギルドの全プレーヤーIDを
友達登録することの出来るAIで登録してあげることくらいしか
解決法は無いはず・・・・
プレーヤーIDから判別できる情報はJOBデータと位置データくらいじゃないかな?

647(○口○*)さん :06/04/15 13:25
>>646
dクス

なるほど、ではまず自ギルド待機エリアで画面内のキャラのIDを全て取得して
それをリストに出力したいのですが、何か手段はあるのでしょうか・・?

648(○口○*)さん :06/04/15 13:41
>>642,643
さっき、くまーAIのとこ見たら、新しいの上がってて
その部分の説明が加えられてるー
雑談スレ見ているのではw
友達IDを並べれば良いみたい。

そして、ツールが完成したみたい
はやく公開してくれないかなぁ

>>645
くまーAIは、普段、草とか無視するけど、
ケミが叩いた時だけ手伝ってくれるよ
普通はそうじゃないのか?

649646 :06/04/15 13:42
>>647
自作なら、なにかトリガー(Alt+Tとか Alt+Tした後にマスタの一つ上のマスにX秒以内に移動させるとか)
を作っておいて、
FriendList = {}
function GetGMember()
  local actors = GetActors()
  for i,v in ipairs(actors) do
    if(vがプレーヤー and FriendListにvが登録されていない)then
      FriendListにvを登録
    end
  end
  FriendListをファイルに書き出す
end
こんなんじゃダメかな?
後はファイルをロードすればそのとき登録したメンバーは、いつでも使える
その代わり、関係ないキャラが範囲内に居た場合も登録しちゃうけどね

あと自作じゃない場合は知らない。
探してください

650(○口○*)さん :06/04/15 13:43
>>645
GetOwnerEnemyを変えれば良い。
以下に私が使ってるAIの該当部分を載せておくので、参考にどぞ。

for i,v in ipairs(actors) do
 if (v == owner ) then
  target = GetV (V_TARGET,v)
  if (IsMonster(target) == 1) then
   enemys[index] = target
   index = index+1
  end
 elseif (v ~= owner and v ~= myid and MOTION_DEAD ~= GetV(V_MOTION,v)) then
  target = GetV (V_TARGET,v)
  if (target == owner) then
   if (IsMonster(v) == 1) then
    enemys[index] = v
    index = index+1
   else
    local motion = GetV(V_MOTION,v)
    if (motion == MOTION_ATTACK or motion == MOTION_ATTACK2) then
     enemys[index] = v
     index = index+1
    end
   end
  end
 end
end

651(○口○*)さん :06/04/15 14:38
>>649
どうもです
が、度々すいません、friendlistをファイルに書き出す命令はあるのでしょうかorz

652646 :06/04/15 15:01
>>651
ファイルに書き出す場合は、個人個人でパターンを作って書き出して、
ファイルから読み込む場合は、そのパターンにしたがって読み込むの、
フレンドリストとかだとパターンは 
ID
例(数値は適当
30032
40532
でいいんだけども、例えばこれに、プレイヤーのジョブのデータも入れちゃおうとなると
パターン
ID = JOBID
例(数値適当
30032 = 12
40532 = 9
といった具合にしないとだめなんだよねパターンは"="じゃないとダメってことじゃなくて、
一例としてだから ID、JOBID にして 30032,12 ってしても良い訳、
その代わり 読み出す時も、ID,JOBID のパターンで読み出さないとだめ

で、自分で専用のパターンを造る事になるんだけども、
1、落っこちている中級者向け以上のAI(最近はどのAIでもいいかな?)を拾ってきて、基本的な保存方法読み込み方法を学ぶ
2、Luaリファレンスマニュアルの文字列操作の部分のパターンとかいう所といろんなAIを照らし合わせて、パターンについて学ぶ
って方法で学んだらいいんじゃないかな?

653(○口○*)さん :06/04/15 15:07
あ、すいません
こちらの書き方が悪かったみたいですorz

>>647,651の意味はファイルに書き出すファンクションは何か、という事でした
どうもありがとうございました、半年ROMってきます∧||∧

654(○口○*)さん :06/04/15 17:49
自分で試してないからうごくかどうかしらんけど、AIスレから引っ張ってきた

fp = io.open("AI/USER_AI/テキスト名.txt", "a") -- USER_AIフォルダを指定すること!("a"は追加書き込み)
fp:write( 書き出したい文字列)
fp:write("\n")
fp:close()

655(○口○*)さん :06/04/15 22:43
うーん、どこをどういじればいいのかさっぱり。

656(○口○*)さん :06/04/15 23:39
>>655
やりたいことが分からないとアドバイスのしようもないのだけど、
どこをどう弄ればいいのか、というのを勉強したいのなら、
AIスレのテンプレにのってる「くま〜AI」のページに、
デフォルトAIに詳しく解説コメント入れてくれてるのがあるから
それを落としてみて、一度目を通してみるといいよ

657(○口○*)さん :06/04/15 23:59
>>645
ケミWIKIのサンプルに乗ってる
SelectActorsにおまけでちょうどいい関数が入ってる
以下その部分だけ抜粋

--主人が攻撃中の相手を返す
function GetOwnerAttackEnemyID()
local target = 0
local owner = GetV(V_OWNER,MyID)

if GetV(V_MOTION,owner) == MOTION_ATTACK then
target = GetV(V_TARGET, owner)
end

return target
end

主人がアタックモーション中のときにその相手を返してるだけだね
優先度を一番低くしてコイツをつっこんで戻り値に対してアタック命令送ってやればいい

658(○口○*)さん :06/04/16 02:31
ケミスレでちょっと出てましたが、石化したMOBをホムが殴らないようにとかできないんですかね?

659(○口○*)さん :06/04/16 02:50
モーションの取得は出来るけど、ステータス異常は取得できないんだっけ。
出来たらいろいろ出来て楽しそうなのになあ。

660(○口○*)さん :06/04/16 03:19
状態異常を取得することは出来ませんが、659さんが言っているように、
ターゲットを決める際、モーションが移動モーションのモンスターのみをターゲットにするように変更すれば、
動かない系の状態異常は殴らなくなりますが、非常に非常に効率が落ちますし
スタンしているモンスターも殴らないなどなど、いろいろと不具合が・・・・

661(○口○*)さん :06/04/16 06:55
くまーAIツールが!
キタ━━━━(゚∀゚)━━━━!!!

すげ〜便利かも!

662(○口○*)さん :06/04/16 16:11
くまーAIツール、完成度高いな
AI自体も、標準的な機能は一通りあるし、
特殊なのが必要ないなら、
AIはこれ一択なかんじだな

663(○口○*)さん :06/04/16 17:53
くま〜AIのサイト見ると
<最新> 2006/04/15 07:06
ってなっているけど
くま〜BBSでは16日に更新したって言ってるし。
どーゆーこと???

664(○口○*)さん :06/04/16 18:01
いやそれはここでじゃなくて本人に直接聞けよw

665(○口○*)さん :06/04/16 18:14
15日完成版ver20060415とか
16日UP

と勝手に予想

666(○口○*)さん :06/04/16 19:48
>>663
どうでもよくね?

667(○口○*)さん :06/04/16 22:34
>>666
だって、15日にくま〜AIダウンロードしたのに
最新じゃなかったらイヤじゃない?

668(○口○*)さん :06/04/16 22:47
>>667
不安なら、DLしなおせばよくね?

669(○口○*)さん :06/04/17 09:12
質問です。

AIを語るスレにも一時期話題になっていたようですが、
モブを倒した時に、そのモブが横沸きした時などにすぐに殴りかかるという現象があるのですが、
殴りかからないようにするための対処法などありましたら、ご教授お願いします…
倒した時にモブIDを捨てるとか、そういう作業になるのかな…??

670(○口○*)さん :06/04/17 10:56
>>669
その通りなんだけど
即沸きの場合は「倒した時に」が一番の問題になる

あなただったらどうやって「倒した時に」を判別する?
MOTION_DEADをとる -> 倒したMobと死体は別物、別IDになっている
攻撃してたIDが一瞬消えたら死んだことにする ->
倒した次のAI()のときにはすでに沸いてて座標だけ変わったように見える

現状この方法の対策としての候補は2つ
1つは10万ルールといわれる死体IDの規則性を利用してさっきまで殴ってた敵の死体を見つけることが出来たら
倒したとしてターゲットを捨てて策敵をやり直す。
ただ、このルールは穴があって実際どういう動きをしてるのか
わからないので予測できない挙動をする可能性がある。
特に即沸きは狙って起せないから検証が難しいんだよね
常時TraceAIをオンにしてるとすぐファイルが巨大になって動けないほどのラグになるし

もう一つは攻撃中の敵の座標が変わったらターゲットを捨てて策敵をやり直す
ただし、敵がまだ生きていたとしても移動したら追いかけるのをやめて敵を探しにいくので注意
移動したMobより他に近いMobが居たらそっちを狙ってしまう(アクティブの場合)
ノンアクの場合だとタゲが外れてしまう。CRでふっ飛ばしても同じ反応をしてしまう。
同じ座標に即沸きした場合はそのまま攻撃続行してしまう。(たとえノンアクでも)

解:出来なくはないけど現状スマートなテンプレート的回答は難しい

倒したらターゲットを維持しないで次の敵を策敵し直す
この方法自体は正しいから各々の裁量で自分の動かしたいように組むしかない
「即沸き」だけを判別することは難しいから後はいったんターゲットを捨てるタイミングだね

671669 :06/04/17 12:14
>>670
詳しい説明ありがとうございますー!
すごく勉強になりました。(;´Д`)

実は今回書き込みをさせて頂いた経緯としましては、

『桃木を倒した際に、近くで(同じIDの)桃木が出現する。』
   ↓
『近くにいた別の人を桃木が攻撃開始』
   ↓
『その桃木をホムが攻撃しかける』
   ↓
『横殴りという結果になる』
(この状態になるのに最初は気付かないから、止めるに止められない
 しばらくしてAlt+Tなどで一旦停止させるなどの対処はするものの…)

で、670さんの対処法を見る限り、
桃木に限定するならモブが移動した場合に攻撃を中断させるだけでも
かなり効果はありそうな気はしますね。
同じ座標の出現の場合は諦めるしかなさそうですが;

あと(同画面内での)即沸きマップで知ってる限りでは、
火山D入り口前の黒蛇か、龍之城D1の黒いキノコ地帯でしょうか?

少し頭をひねって考えてみますね〜

672(○口○*)さん :06/04/17 18:28
くまーAI使わせてもらってるのですが、攻撃モーション表示に関してひとつ質問が(つД`)
上記の>>564での方法ですと、くまー氏がAI改変してらっしゃるようなので改変場所がよくわかりませぬ…

どのように改変すれば攻撃モーションを完全に表示できるのでしょうか…

673(○口○*)さん :06/04/17 18:52
>>672
要は
Attack()→鯖:攻撃、クラ:攻撃モーション初めから
Attack()→鯖:ディレイで攻撃不可、クラ:攻撃モーション初めから
Attack()→鯖:ディレイで攻撃不可、クラ:攻撃モーション初めから
Attack()→鯖:ディレイで攻撃不可、クラ:攻撃モーション初めから
Attack()→鯖:ディレイ終了で攻撃、クラ:攻撃モーション初めから
以下ループ
コレが現状の動き
下のほうに改変すればいい
Attack()→鯖:攻撃、クラ:攻撃モーション初めから
何もしない→鯖:ディレイ中、クラ:攻撃モーション続き
何もしない→鯖:ディレイ中、クラ:攻撃モーション続き
何もしない→鯖:ディレイ中、クラ:攻撃モーション終了
何もしない→鯖:ディレイ中、クラ:待機モーション
何もしない→鯖:ディレイ終了待機、クラ:待機モーション
Attack()→鯖:攻撃、クラ:攻撃モーション初めから
以下ループ

Attack()を送ると無条件で攻撃モーションの初めに戻ってしまうわけだ
だから何秒(数ループ)かの間前に攻撃してたらしばらく無駄なAttack()を送らないように改変する

俺は自作使ってるからクマーAIの具体的な場所はしらんが↑のを施すだけでどんなAIでも実装は可能

674(○口○*)さん :06/04/17 18:55
Ver0.48なら、671行目からがOnATTACK_STだからまずそこを探せ。

その中に2箇所Attack(MyID,MyEnemy)って書かれてる部分があるから、
そこを2箇所とも>>564のようなif文で囲ってやればいい。

    if (GetTick() - AttackTime >= A_Intarval) then
        Attack (MyID,MyEnemy)
        AttackTime = GetTick()
    end

グローバル変数の追加ももちろんやっとくこと。

675(○口○*)さん :06/04/17 18:57
>>672
素直に、くまーAIの作者にお願いしたらいいんじゃまいか?

676(○口○*)さん :06/04/17 19:16
くまーAIスレになりかけている件について

677(○口○*)さん :06/04/17 20:23
実際かなり優秀だからな、話題が多く出るのも仕方あるまい。

678(○口○*)さん :06/04/17 22:47
アップデートされれば、数日はそれが主題になってもおかしくない。

679(○口○*)さん :06/04/17 23:40
オリジナルAIなんかは語るスレに任せて
こっちは既存AIの改変や既出事項の対応
ちょっとした思いつきの要望とかでいいと思う

適度に質問レベルに応じて誘導しあっていけばいいんじゃないかな
幸いこっちがロジックって何?から始めた人の初心〜中級向けスレとして成り立ってるし
クレクレ君でなければOKでしょ

向こうは正直前提経験無いとレベルについてけないし

680(○口○*)さん :06/04/18 00:03
むしろクレクレ君向けスレとして活用。

681669 :06/04/18 10:08
自分なりに考えてみたんですが、モブが移動した時にモブを殴らなくする文です。

  local x, y = GetV (V_POSITION,MyEnemy)
  if (MyDestX ~= x or MyDestY ~= y) then -- モブの位置が目的地と違ったなら
   -- ここに入れるべき文が思いつかない〜(対象IDを捨てるって文を作りたい感じ)
  end

イメージ的にはこんな感じなんだけど、どこにこの文章そのものを入れるのかもわからない状況。
まだまだ苦戦中(`・ω・´)

682(○口○*)さん :06/04/18 11:33
MyEnemy = 0

これでターゲットはリセットされると思う。
入れる場所は Attack() ある場所の直前が一番分かり易いかな。
弄ってけば色々意図しない行動が出るだろうけど頑張れ。

683669 :06/04/18 16:00
>>682
ありがとうございますー
メンテ後に色々とエラーを吐きながらもなんとか成功しました!
これで1時間に1回は訪れる横殴りの謝罪もなくなります(多分!

だんだんと桃木専用のAIになってきた…(;´Д`)

684669 :06/04/18 20:21
成功したと思いきや、

『ホムが桃木攻撃→CRで桃木移動→ホム停止(ここまでは成功)
 →次から桃木を殴らなくなる(完全にミスったかと思いきや)→3匹めくらいでまた攻撃するようになる』

こういうパターンがあったり(うまく続くパターンもあったり)

『ホムが桃木攻撃→CRで桃木移動→関係なくホムは桃木を殴りつづける』

などのパターンもあったりで色々とAIをいじくってみたものの
プログラムの式は間違ってはいない感じ…なのかな
どうやら挿入してる場所がおかしいのかもしれない…のかな(´・ω・`)
ちなみにこんな感じです。

function OnATTACK_ST ()

 -- 桃木が同画面に横沸きした場合に殴りかからない(横殴り防止)
 local x, y = GetV (V_POSITION,MyEnemy)
 if (MyDestX ~= x or MyDestY ~= y) then
  type = GetV (V_HOMUNTYPE,MyEnemy)
  if (type == 1410) then -- 桃木の場合に限り
   MyEnemy = 0
  end
 end

 TraceAI ("OnATTACK_ST")
…(以下略)

685(○口○*)さん :06/04/18 22:26
>攻撃中の敵の座標が変わったらターゲットを捨てて策敵をやり直す
が提示された内容

>攻撃中の敵の座標が変わったら
if (MyDestX ~= x or MyDestY ~= y) then
OKっぽいんだけどMyDestX,Yってどこで設定したものを使ってる?
本当に敵の座標が入っている?
デフォだと移動目標だから主人の座標が入っていることも右クリックした座標が入っていることもある
敵が前回居た場所を見るならグローバル変数とかにMyEnemyX、MyEnemyYを追加して
OnATTACK_STの最後で設定するのがいいかな

>ターゲットを捨てて
MyEnemy = 0
OKだね

>策敵をやり直す
アクティブなら索敵をノンアクティブなら待機に
これをしないと延々ATTACK_STのままID0の敵を対象にしつづけてわけが変わらなくなる
索敵も待機もOnIDLE_STでの行動だからMyState = IDLE_STして
もうATTACK_STに用はないからreturnしてやる
敵ID0に設定したままいろいろ動かすと何が起こるかわからないからね

詳しく考えてないからなんともいえないけど
これで多少はましにならないかな?

686669 :06/04/19 07:37
新たにMyEnemyX、MyEnemyYのグローバル変数を作り
>>684の書式にMyDestのところをMyEnemyに置き換えたんですが。

問題はMyEnemyXとMyEnemyYの値をどこで収得すべきかにまた迷ってます。
local x , y = GetV (V_POSITION,MyEnemy) -- モンスターの位置を収得
MyEnemyX = x
MyEnemyY = y

GetOwnerEnemy()内の主人が攻撃する場合の条件文のところでいけるかなーと思い、
テストしてみたのですが、うまくいかず桃木には全く攻撃をしない。
OnATTACK_ST()内の最後にも置いて試したものの、やはり反応しない。

うーん、なんか初心者なのに無謀な挑戦を続けてる気がしてきた…(;´Д`)

687(○口○*)さん :06/04/19 08:39
>>669
OnATTACK_STの最初でMyEnemyX,MyEnemyYをチェックしているようだから、
OnCHASE_STでモンスターに近付いて、
MyState=ATTACK_STしている部分にその3行を入れてみるか、
もしくはOnCHASE_STでの最後の移動先を入れてみるか…。

移動完了してない場合もあるだろうから、1マスぐらい余裕見た方がよさそうだけどね。
画面内即湧きといっても、湧いた場所が倒したマスの周囲ぐらいだったら、
また自分が殴るだろうから、横殴りになりにくい気もするし。

688(○口○*)さん :06/04/19 09:24
なんかゼロマテAIとくまAIは一長一短だな
羊だとくまAI一択っぽいけど(初心者)
くまAIはなんかモッサリしてる。壁際歩くとよくひっかかる。
ゼロマテAIはキビキビしてるけどパケット投げまくり通信しまくり。

689(○口○*)さん :06/04/19 10:02
語るスレの邪魔になりそうなのでこっちで質問
ipairsに多次元配列を入れると帰ってくるのは何?
1:多次元配列総なめして値が全部帰ってくる?
2:指定した次元の配列に入っている下位の配列が帰ってくる?

tblA = {11,12,13}
tblB = {21,22,23}
Table= {tblA,tblB}
for i,v in ipairs(Table) do
---------------------------
1回目のループのとき
1:v == 11 ?
2:v == tblA かつ v[1] == 11 ?
テーブルは参照で扱うらしいから(内部はCだからポインタって言うべき?)
たぶん2のほうなんじゃないかと思うんだけど・・・
リファレンスにはいまいち多次元配列の扱いが書いてないからわからない

690(○口○*)さん :06/04/19 10:13
質問だけじゃあれなんで(もちつもたれつまったりと)

>>669
根底から覆すようであれなんだけど
local target = GetV(V_TARGET,MyEnemy)
if target ~= 0 and target ~= MyID and target ~= GetV(V_OWNER,MyID) then
MyEnemy = 0
MyState = IDLE_ST
return
end
自分たち以外の誰かを狙ってたら攻撃止め
横殴り対策だけならこれじゃいかんの?

最大の問題点でTargetが0に更新されないから誰かが画面内で1発攻撃もらって素通りしたら
主人かホムが攻撃されるまでこっちから攻撃できなくなるけど
タゲ外れたらTargetの値を0に更新するようにお願い出してるんだけどねぇ・・・

691(○口○*)さん :06/04/19 10:19
>>689
「たぶん2」という直感どおりです。
1回目のループ: i = 1, v ={ 11, 12, 13 }
2回目のループ: i = 2, v ={ 21, 22, 23 }
・・・になります。

蛇足ながら、Table[1][2]を参照すれば 12 が取得できます。

692(○口○*)さん :06/04/19 12:26
鳥だとこっこAIでもいいかな。
くまAIは反応悪いや。

693669 :06/04/19 12:46
OnCHASE_ST()内の攻撃状態前や移動完了時に
>>686の3行を加えてみたりとかしましたが、やはり誤認識での動作になります。
(結局その時々で座標を受け取ってるせいかな…)
攻撃をしている最中に座標が変わったと認識させるのがかなり困難な模様。

色々と試してきたけど、今の自分では解決は無理っぽいです…orz
悔しいけど今は諦めるとします。
良きアドバイスをくれた方々に感謝感謝です。(マジ勉強になりました)

694(○口○*)さん :06/04/19 13:55
>>669
結構惜しいところまで行ってる様に見えるだけにそれは残念
アクティブ策敵?非アクティブ策敵?
他にAI変えてる箇所ある?

ずいぶん悩んだようだし桃木専用でよければ
今途中になってるAIでもMMOBBSろだあたりに上げてくれれば
時間があるときにちょっとこっちで考えてみるよ?

「○○を対象からはずす」とかと違って根本的に動き方を変えるから
このタイプのAIの一番根源の設計書になる状態遷移図を書き換えることになる
1箇所の改変だけじゃなくて全体的に動きを把握してあちこちに仕掛けを入れないといけないかも

695669 :06/04/19 14:47
>>694
アップしておきましたー
ttp://www.mmobbs.com/uploader/files/165.zip

679と694行目が桃木対策用の文です。(今は隠してる状態)
他にAIは多少は変えてますが、基本は変わってないと思いますー
桃木に限っては主人が攻撃した際にホムも一緒に戦うという設定にしています。
(主人が桃木の攻撃を受けても、それに反応しないという感じ)
詳しくはGetOwnerEnemy(myid)の部分を参照してもらえればと思います。

色々と対処してくださっただけに、ギブアップ宣言して申し訳ないです。
また自分も時間ある時にもっかい考えてみたいと思います。
なんだかんだで、AIも理解してくると楽しいものですねw

696(○口○*)さん :06/04/19 16:01
>>669

>>687の言っていた
>MyState=ATTACK_STしている部分にその3行を入れてみるか
にあわせて679行目以降の3行を670行目に移動
>>685の言ってた
>索敵も待機もOnIDLE_STでの行動だからMyState = IDLE_STして
が抜けてるので
698行目と699行目の間に「MyState = IDLE_ST」を追加

これでひとまず普通に動くようにならないかね?
タゲをはずすのはMyEnemy=0とMyState=IDLE_STのペアが必要

会社で暇だからとAI組んでるおばかさんなので動く保証は帰ってからw
仕事中は頭がPGモードだからAIやるには効率いいんだよねw

697(○口○*)さん :06/04/19 16:12
>>688,692
ゼロマテAIから、くまAIに乗り換えたけど
言うほど、もっさりはしてないと思うけどなぁ。
むしろ、敵を倒してから、次の敵に移るのは
反応良くなってる気がする。
 
ファイル大きいから多少違うのかもしれんが、
おれには判らん。
 
でも障害物に引っかかるのは
なんとしてほしいなぁ。

698(○口○*)さん :06/04/19 16:31
障害物関連はMAPBBの人とかががんばって今いろいろやってるみたいだし
そのうち標準搭載されるかもね
敵倒した後の反応速度改善は10万ルールが今のところ優良候補

699(○口○*)さん :06/04/19 17:18
>>697
速度変化Pで常時高速移動してるんだけど(これの是非はおいといて)はっきりと体感できる。
あと行動途中に被弾するとそこで棒立ちしちゃうことがゼロマテAIより多いかな。
でもくまAIは草を一緒に殴ってくれるのはいいしオートスペルの設定が細かくできるのがいい。
障害物にひっかかるのが解決されればツールでラクに設定できるくまAIにしたいけど…
クレクレの身で偉そうなこと言ってもうしわけない

700(○口○*)さん :06/04/19 17:36
>>695
-- 桃木が同画面に横沸きした場合に殴りかからない(横殴り防止)
local type = GetV (V_HOMUNTYPE,MyEnemy)
if (type == 1410) then -- 桃木の場合に限り
    if (MyEnemyX == 0 and MyEnemyY == 0) then
        MyEnemyX, MyEnemyY = GetV (V_POSITION,MyEnemy)
    else
        local x, y = GetV (V_POSITION,MyEnemy)
        if (MyEnemyX ~= x or MyEnemyY ~= y) then
            MyEnemy, MyEnemyX, MyEnemyY = 0, 0, 0
            MyState = IDLE_ST
            return
        end
        MyEnemyX, MyEnemyY = x, y
    end
end

これでどう?
MyState=IDLE_ST はどうせすぐ下の条件で戻されるから必須って訳でもないけどね。

701(○口○*)さん :06/04/19 17:41
>>699
こっこAIは?

702(○口○*)さん :06/04/19 18:00
>>699
613行目の

FlagMoveDelay = FlagMoveDelay + 500 -- ■0.5秒おきに移動座標更新

ケミの追跡で止まるなら、これのせいじゃない?
一度移動したら0.5秒経たないと移動してくれないっぽいし。
とりあえず、+500 を +0 にして試してみそ。

どうでもいいけど、くまAIはマジックナンバー多いな・・・。

703(○口○*)さん :06/04/19 19:08
>>702
それはAIスレで出てたパケット送りまくり仕様を修正するためのディレイだから、
0にすると、パケット送りまくりんぐ。

500msのディレイなら移動に問題なし、みたいな結論だった気がする。

>>マジックナンバー
個人的にはすべてのリテラル数値をなくす必要はないと思う。
ソースの意味がわかって、修正が必要以上に大変にならなければ。

世の中には、同じ意味の数値を別の変数に置き換えたり、
マジックナンバーをマジック変数に置き換えただけだったりする奴も多いわけで・・・
(いや、マジでカンベンしてほしい)

そういう意味では、くまAIは許容範囲だろ。

704(○口○*)さん :06/04/19 19:30
>>703
同意。
ざっと読んだ感じだと「どこからその数字が出てきたの?」って
思うものがあまりない。

>マジックナンバーをマジック変数に置き換えただけ
true/falseでええやんと思ってしまう脳みそには、
YESとNOにそんな印象を受けてしまった。

705(○口○*)さん :06/04/19 19:42
>>701
こっこAIはシンプルでそこそこの性能だけど
友達登録とかが無いからなあ。
AI.lua単体で使えるから何もわからない人には勧めやすいかもしれないけど。

706672 :06/04/19 20:23
上のほうで攻撃モーションの質問してたものですが、
ようやくちゃんと表示させられるようになりました。・゚・(ノД`)・゚・。

アドバイス下さった方々、本当にありがとうございました!

※まるで、学生時代の数学の公式を意味を理解しようとせずに解いてるような気分でした…

707(○口○*)さん :06/04/19 22:40
最近たまに思うんだけど、簡単に言い換えることが出来るんなら、
マジックナンバーとかぐぐらないと分からないような言葉は言い換えて欲しい気がするな。
(仮にPGを職業にしてても、業種が違えばわからん単語って結構あるからな)

ソース追うのに集中したいのに、そこで分からん単語出されて
「ぐぐれば分かるだろ」っていわれてもな。

定数、とか変数、とかリテラル、とかのレベルは言い換えるのも
大変なのでしょうがないと思うんだが。

708(○口○*)さん :06/04/19 23:01
でも今後のいろいろ弄っていくことを考えると
ちょっとした用語くらいは知っていたほうがいいと思うんだけどな。

709(○口○*)さん :06/04/19 23:07
>>707
ああ、すいません、もしかしてAI語るスレの690のことかな?

正直、マジックナンバーを「常識的な用語」だと思っていたので、通じないとは思ってませんでした。
少々不用意だったかも。
「ソース内に特に理由などの記載もなく書き込まれた定数」って感じかな。

710(○口○*)さん :06/04/20 01:30
↑でもコロコロでてるね。マジックなんたら。
PG8年間やってて初めて聞いた言葉だったけど。

711(○口○*)さん :06/04/20 05:18
マジックナンバーって人間が一瞬で覚えられる数字の桁(7桁だかそこら)のことじゃないの?

712(○口○*)さん :06/04/20 07:57
仕事でPG始めた人はわからんかもしれん
仕事だとマジックナンバーよりオンコーディングとかそういう言葉使うし(ニュアンスがずれるけど)

趣味グラマーの方では普通に知ってると思った
少なくともWikipediaでもプログラミングのカテゴリにきちんと説明されているくらいには有名な言葉

713669 :06/04/20 09:33
>>700
試してみたところやっぱりダメでした;

色々と考えたけど、倒した時に横に沸くと、
殴ってるモンスターが移動しただけってホムには認識するのかな…確か。
戦闘中の継続してる中での変化を認識させるってところがポイントになる気がする…

今まで試した中では、OnCHASE_ST()のホムが移動完了(Move)した後に
>>686の3行を加えるのが一番効果があった気がした。
成功する場合もあれば失敗する場合もあったけど。
『主人が桃木殴る→ホムも殴る→桃木をCR→ホムが攻撃をやめる』
このコンボが少なからず成功した。
この辺が何かしらのヒントにならないかなぁ…とか思ったり;

714(○口○*)さん :06/04/20 09:39
用語じゃないと、その背景(なんで悪いと言われてるのか)まで
知ることが難しくなるんだよね。
それにリテラル埋め込みを「マジックナンバー」として忌み嫌われてる
理由をしらないと、>>703みたいな判断がつかなくなる。

>>707の気持ちもわかるんだ。
用語ばかり使っていればいいってもんじゃない。
でも今回はちょっと過剰反応だったと思う。
>>702も独り言のように言ってるだけだし。

>>711
「マジックナンバー7」?


ところで自分がなにかしたわけじゃないけど>>695読んで
なんかうれしくなった。

715702 :06/04/20 10:39
>>703
Move送らないようにしてるのはいいのだけど、
移動目標が変わってても送れない仕様だから、もっさり問題になってるんだと思う。
きちんとやるなら、ディレイ図る前に、移動目標が変わったかをチェックした方がよさげ。

マジックナンバーについては、別に1回、2回出てくる数字ならコメント付けとけば分かるしいいんだけど、
何箇所も同じ意味で使ってる定数は、きちんと定数にしたほうが修正は楽だなぁって思ったぐらいだから。
正直、なんでこんなに反発があったのか戸惑ってるぐらいだ。

716(○口○*)さん :06/04/20 10:53
>>713
1つの事にとらわれると簡単なところを見落とすから注意

というわけで別なアプローチで考えてみる
即沸きで他の人にタゲが行く場合って
たいていちょっとはなれたところに沸く場合だよね?
ホムから周辺2セル等攻撃可能範囲に沸く場合は仕方ないと考えて除外

この場合は離れている敵をわざわざ追いかけて横殴りしに行くのを対処
「攻撃」から敵が移動して「追跡」に行くところにトラップを仕掛ける
--------------------------------------------------------------------
if (false == IsInAttackSight(MyID,MyEnemy)) then -- ENEMY_OUTATTACKSIGHT_IN
--type = GetV (V_HOMUNTYPE,MyEnemy)
--if (type == 1410) then -- 桃木の場合に限り
----MyEnemy = 0
----MyState = CHASE_ST
----TraceAI ("ATTACK_ST -> IDLE_ST")
--else
----MyState = CHASE_ST
----MyDestX, MyDestY = GetV (V_POSITION,MyEnemy)
----Move (MyID,MyDestX,MyDestY)
----TraceAI ("ATTACK_ST -> CHASE_ST : ENEMY_OUTATTACKSIGHT_IN")
--end
--return
end
--------------------------------------------------------------------
これで桃木の場合は攻撃射程より遠くに移動したら
追いかけないで待機に戻るって事になるはず

717(○口○*)さん :06/04/20 10:55
ごめんミス
5行目は「MyState = IDLE_ST」に変えて

718(○口○*)さん :06/04/20 10:57
ここまで書いてふと・・・
GetOwnerEnemyのこの部分
--------------------------------------------------------------------
if (v == owner) then -- 主人が殴ってるモンスターも敵とみなす
--target = GetV (V_TARGET,v)
--if (IsMonster(target) == 1) then
----if (GetV(V_MOTION,v) ~= MOTION_DEAD) then -- 敵が死にモーションでなければ
------enemys[index] = target
------index = index+1
----end
--end
end
--------------------------------------------------------------------
この部分のせいでまた攻撃してるかも?
確か1発殴ったら他の誰かを殴るまでV_TARGETは固定されたままだったはず
「主人攻撃(タゲ桃木Set)->タゲ見てホムが攻撃開始->CR(敵移動)->ホム攻撃やめ->主人攻撃しない(タゲ桃木のまま)->タゲ見てホムが攻撃開始」
ってなってるとか
↓見たいに変えて試しなおしてみて
--------------------------------------------------------------------
if (v == owner) then -- 主人が殴ってるモンスターも敵とみなす
--if ( GetV (V_MOTION,v) == MOTION_ATTACK) then --主人が殴ってる瞬間だけタゲを見る
----target = GetV (V_TARGET,v)
----if (IsMonster(target) == 1) then
------if (GetV(V_MOTION,v) ~= MOTION_DEAD) then -- 敵が死にモーションでなければ
--------enemys[index] = target
--------index = index+1
------end
----end
--end
end
--------------------------------------------------------------------
理論的にはもともとのやつでも間違ってないはずなんだよね
先に696や700のやつ+↑で試してみて

719(○口○*)さん :06/04/20 11:12
>>690
画面内にタゲられてる人がいるかチェックすればいいと思う。

local target = GetV(V_TARGET,MyEnemy)
if target ~= 0 and target ~= MyID and target ~= GetV(V_OWNER,MyID) then
    local x,y = GetV(V_POSITION,id)
    if x == -1 then
        MyEnemy = 0
        MyState = IDLE_ST
        return
    end
end

これはこれで、画面外に撃ってるとあれだけど。

720(○口○*)さん :06/04/20 11:15
間違えた・・・

- if x == -1 then
+ if x ~= -1 then

721703 :06/04/20 11:36
>>715
移動したらMOVEだと、パケット送りまくりにならない?
一歩移動する間に、何回AI()ループが回るかによるのか…
 
マジックナンバーは、俺もついでで
言うほど多く無いんじゃないか?と思って
書いただけなんだが、なんか妙な話題に…

722(○口○*)さん :06/04/20 12:09
>>721
AI() 自体の呼ばれる頻度が、秒間6〜8回(環境次第だけど150ms前後で呼ばれるっぽい)だから、
其処まで大量に送られるってことは無いんじゃないかなとは思う。

とりあえず、どの部分でもっさり感が出てるのかがはっきりしてないんで、
ディレイ下げてもっさり感がなくなるなら、其処から最適のディレイ値を自分で入れてくれればいいかなと。

723(○口○*)さん :06/04/20 12:40
>> 697 他

こんにちは。
くまAIの中の人@昼休み です。
最近はこっちのスレもたまにチェックしてます(笑)

戦闘時の移動で引っかかるのは、
ケミとの相対位置から、ホムの移動先の座標を決定しているためだと思います。
今日帰ったら、ケミの移動方向を見るように修正しようと思います。

もっさりはしてます?(笑)他のAIあんまり試してないので・・・
というか、ホム自体あんまり・・・まだLv29!
目標が移動したかどうかのチェックを入れたらいいとの
ご指摘がありましたので試してみます。
移動ディレイもいじれるようにしようかしら。

攻撃モーションはそのうち攻撃ディレイを設定できるようにしたいと思います。
今ツールの方を集中的にいじってるので、そちらが一段落したら・・・

不具合や要望などありましたら、できる限りの範囲で対応したいと思いますので
配布ページの方にご連絡いただければと思います。

マジックナンバーはあんまり聞いたことないですね・・・
ソース中に数値/文字リテラルを使わないっていうのはよく言われますが、
私自身はあまり意識していなかったりします。
可読性を保つことと修正対応に支障がないようにすることには
気をつけているつもりですが。

ちなみに[true/false]を[YES/NO]としてるのは
いろいろ苦い経験があるので、人に見せたり修正させることを前提とする場合には
[YES/NO]とか[ON/OFF]とかあえてつかってます。
(falseってどういう意味?とか、tureとか、やられると・・・orz)

では熊顔ノ

はっ!会社のPCには顔文字が入っていない!
会社のPCでやんな!という突っ込みは無しでお願いします。(笑)

724(○口○*)さん :06/04/20 13:02
>>718の部分にバグ発見!
元のAIで1019行目
if (GetV(V_MOTION,v) ~= MOTION_DEAD) then -- 敵が死にモーションでなければ
          ↓
if (GetV(V_MOTION,target) ~= MOTION_DEAD) then -- 敵が死にモーションでなければ
上のじゃ「主人が死にモーション」になってる

725(○口○*)さん :06/04/20 13:07
>>713
殴ってるmobの死体を見つけたら殴るのをやめるとか。
いちいちループ回すのが重いけど…。

for i,v in ipairs(GetActors()) do
 if v == MobCarcassId(MyEnenmy) then
  MyEnemy = 0
  return
 end
end

function MobCarcassId(id)
 return 100000 - id
end

>>723
>[YES/NO]とか[ON/OFF]とかあえてつかってます。
設定ファイルのUIとしてはあり。
でもそれならそれでConfig.luaでは
YES = true
NO = false
として使って、AI.luaは素直にboolで処理するのもいいと思う。
直せっていうわけでもないけどね。

726(○口○*)さん :06/04/20 13:59
>>723
戦闘中の被ダメージによる引っ掛かりは、
ダメージを受けた時点で移動が止まる時に、鯖とクライアント位置のズレが起こり、
ずれたクライアント表示で敵が射程内にいると Attack() し続けて Move() を送らなくなるせいじゃないかな。

移動中にダメージ受けたら、再度 Move() を送るのもいいかと。
ラグや目標地点にPCやオブジェがあった場合の位置ズレ起こした場合は、また別処理が必要だろうけど。

727(○口○*)さん :06/04/20 14:04
と思ったけど、OnCHASE_ST() で位置ズレした場合の処理が無いからか。

728(○口○*)さん :06/04/20 18:46
ケミから数マス以内の敵1体を1回殴ってタゲを持ってくれるアクティブAI無いでしょうか?
倒すまで待って倒したらまた1体を1回どつくみたいな
少し単純なのは>>141さんが書いてくれてるらしいのですが見れなくなってますね

729過去ログから転載。 :06/04/20 18:50
514 名前:前スレ391[sage] 投稿日:06/03/19(日) 18:16 ID:JcDPrAGX
□ホムに1発だけ殴らせる機能
 ホム操作の[ALT]+[右クリック2回]に割り当て
 ※攻撃の成否判定が取れないのでもしMISSなら再度[ALT]+[右クリック2回]

-- グローバル定数
USEWALLMODE = 1 -- (1:壁モード 0:通常モード)
-- グローバル変数
ReadyWallMode = 0
FinishedAttackFlag = 0

OnIDLE_ST()関数内に以下の2行を追加

 ReadyWallMode =0
 FinishedAttackFlag = 0

OnATTACK_OBJECT_CMD関数内に以下の行を追加

 if USEWALLMODE == 1 then
  ReadyWallMode = 1
  FinishedAttackFlag = 0
 end

OnATTACK_ST()関数内の以下の部分を変更

 if (MySkill == 0) then
  Attack(MyID, MyEnemy) --←この部分を(1行)
 else

 ↓

 if (MySkill == 0) then
  if FinishedAttackFlag == 0 then Attack(MyID, MyEnemy) end -- ←このように
  if ReadyWallMode == 1 then FinishedAttackFlag = 1 end -- ←変更する(2行)
 else

以上。
これで1回だけ攻撃するようになります(ポポリンでテスト済み)。
#ホムのレベルが高いと低レベルモンスターなんて1撃だろうから壁の意味
#ない気がする…。

730(○口○*)さん :06/04/20 19:04
あれ?過去ログ見れなかったのになんでだろ・・・
とにかくありがとうございます
アクティブ化されたのが出てくるまで使わせてもらいます
自分で作るのは・・・無理orz

731(○口○*)さん :06/04/20 19:53
確かに過去スレは落ちちゃってる。
専用ブラウザ使えばスレ巡回も過去ログ保存も楽だから導入しる。

732(○口○*)さん :06/04/20 22:38
dat変換してUPしてもいいのかな・・・

733(○口○*)さん :06/04/20 23:37
質問なのですが、どこかに「接敵せずにせずにその場でスキルのみの固定砲台になる」というような動きのできるAI
もしくはそういったAIの書き方はないでしょうか?

734723 :06/04/21 00:15
こんばんは、くまAIの中の人です。

拙作のAIを皆さんのアドバイスを基に修正してみました。
ttp://www.kmzw.jp/nb/ai/files/KumaAI_v0_48b.zip

変更点をざっくり言いますと、
 引っかかり対策:ケミの移動方向からホムの移動先を決定
  もっさり対策:移動ディレイを使用せず、ケミ座標が変わった時にMove()

引っかかり対策はうまくいったみたいですが、
もっさり対策は体感変わらない気が・・・(笑)

BBSで使用感を聞いてみようと思います〜
では( ´(ェ)`)ノ

735(○口○*)さん :06/04/21 00:34
>>733
接敵しないということは、ALT+Tで戦わない状態にして
指定したスキルをその場で使うというイメージでいいのでしょうか?

その内、そんな動作を自作のAIに乗っけようと思って
メモってあるソースがあります。

--------------------------------------------------------
function  OnSKILL_OBJECT_CMD (level,skill,id)

  TraceAI ("OnSKILL_OBJECT_CMD")

  MyEnemy = id                      -- ホムの敵を設定
  MySkill = skill                     -- 使用スキルを設定
  MySkillLevel = level                  -- 使用スキルのレベルを設定
+  if (MyState == FOLLOW_CMD_ST) then
+    SkillObject (MyID,MySkillLevel,MySkill,MyEnemy)  -- 敵に指定されたスキルを指定されたレベルで使用する
+  else
    MyState = CHASE_ST                 -- ホムンクルスをターゲット追跡状態に変更
+  end
end
--------------------------------------------------------

こんな感じで関数を修正したらどうでしょう?
試していないので保障できませんが・・・

736(*○口○)さん :06/04/21 00:46
ホムスキルに射程が無くて、通常戦闘する時CHASE_STを通るから
OnCHASE_ST ()のIsOutOfSightのif文の後を
SkillObject(MyID,MySkillLevel,MySkill,MyEnemy)--Levelとかは適宜グローバル等で指定
にすればスキルしか使わない

737(○口○*)さん :06/04/21 01:28
MCツールでスプライト削ると
ホムのASPD190近くなるのを確認
理論上は186ぐらいが限度だけど

738(○口○*)さん :06/04/21 01:32
そんな話をもってくるなよ

739(○口○*)さん :06/04/21 01:54
ttp://bluecubic.jugem.jp/

740(○口○*)さん :06/04/21 02:15
>>734
敵をたおしたあとに次の敵を殴りにいくまでに少しタイムラグがあるからもっさりーーなのかな
10万ルールいれてみてもそこはかわらんかった

741(○口○*)さん :06/04/21 09:49
>>737
通報しますた

742(○口○*)さん :06/04/21 11:26
>>733
要はホムを「後列」として戦わせたいな、という要求ですよね。
735氏、736氏の提案方法で、うまくいくと思います。
なんですが、以前に似たようなことをやって満足できなかった人なので、参考意見をば。
733氏の依頼とはずれているといえばずれているので、興味があれば。

わたしも以前、ホムを「砲台」にする戦い方もあるな〜、と思ってそういうAIを作成・試してみたのですが、
以下のような理由であんまりうれしくありませんでした。
 ・SPがもたない。SPが無くなったあと、役立たず。
 ・接敵されても「逃げ」も「反撃」もしないのがうれしくない。

スキル攻撃する時点でバニルorフィーリルで、これらはそれなりに接近戦もこなせる
性能なのもマイナス要素で、「SPがなくなって接敵された場合にただ見ている」っていうのが
正直もったいなく感じました。

で、わたしのAIでは以下のような感じで動くモードを指定できるようにしています。
・特定の種類の敵を「射撃戦で対応」するモノとして指定。
・上記「射撃戦で対処」の敵が「フリー」もしくは「ホムを狙う」形で近くにいると、射撃モード。
・射撃モードでは、上記敵には接敵しないよう逃げ回る。SPがあれば射撃だけはする。
 上記以外の敵は、追いかけはしませんが、接敵されれば反撃白兵戦はする。

標準AIとはだいぶ構成が変わっている独自AIなので、他のAIへの流用は難しいとは思いますが。
ttp://tomose.dynalias.net/RO/index.php?%A5%DB%A5%E0%A5%F3%A5%AF%A5%EB%A5%B9AI

以上、趣旨にずれている内容での長文失礼。

743(○口○*)さん :06/04/21 11:26
あぁ、なんだ簡単なことじゃないか
クマーのもっさりの原因みっけ

>>734 の2038〜2046行目
---------------------------------------------------------------------------------
if (MyState == IDLE_ST) then
OnIDLE_ST () -- 待機状態の処理
elseif (MyState == CHASE_ST) then
OnCHASE_ST () -- ターゲット追跡状態の処理
elseif (MyState == ATTACK_ST) then
OnATTACK_ST () -- ターゲット攻撃状態の処理
elseif (MyState == FOLLOW_ST) then
OnFOLLOW_ST () -- ケミ追従状態の処理
elseif (MyState == ATTACK_OBJECT_CMD_ST) then
---------------------------------------------------------------------------------
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
---------------------------------------------------------------------------------
if (MyState == IDLE_ST) then
OnIDLE_ST () -- 待機状態の処理
end
if (MyState == CHASE_ST) then
OnCHASE_ST () -- ターゲット追跡状態の処理
end
if (MyState == ATTACK_ST) then
OnATTACK_ST () -- ターゲット攻撃状態の処理
end
if (MyState == FOLLOW_ST) then
OnFOLLOW_ST () -- ケミ追従状態の処理
end
if (MyState == ATTACK_OBJECT_CMD_ST) then
---------------------------------------------------------------------------------
倒した後とか策敵1回やった後MyStateが変わっても
次にAI()が呼ばれる150ms後まで実際の移動や攻撃を開始しないせいだ
0マテなんかは1度状態が変わったら状態が変わった後の処理を次の判定で開始する。

たとえば次の敵が隣に居た(囲まれてる)場合
0マテ
策敵・発見(IDLE→CHASE)->追跡・到達(CHASE→ATTACK)->攻撃開始(ATTACK):ここまででAI()1回の中で処理
クマーの場合
策敵・発見(IDLE→CHASE)->150ms待->追跡・到達(CHASE→ATTACK)->150ms待->攻撃開始(ATTACK):AI()が3回呼ばれないと到達しない

744(○口○*)さん :06/04/21 13:06
じゃあ、標準AIももっさりしてるってことか?

745(○口○*)さん :06/04/21 13:06
もっさり感を解消しようとして発見
function AI(myid)
 local aicount = 0
 while (aicount < "適当な数字3くらい?") do
  "function AI(myid)"で書いていた中身
  aicount = aicount + 1
 end
end

これをすると、当たり前だが重くて速い!!
重くて速いのが発見じゃなくて、上を実装すると東から西または北から南に移動する時
マスターより早く動けるようになる。逆だと遅れる。
ってこと・・・
あと、本当に連続してパケットを送るので、サーバーにもかなりの負荷が掛かるのではと心配・・・

746(○口○*)さん :06/04/21 13:40
AI()を数回まとめて実行するってことか。
やってることは変わらないけど、こう書ける。
for i = 1, 3, 1 do -- C言語に書き直すと for(i=1; i<=3; i=i+1)
 AI(id)
end

>重くて速い
AI()実行中はクラ固まるんだっけ…。

>東から西または北から南に移動する時マスターより早く動けるようになる
SGとかの「オブジェクト発生が優先される方向」と同じだね。
不死にFWするときのセオリー(南西側から進入させるとフルヒットしやすい)
のほうが関係深そうかも。

747(○口○*)さん :06/04/21 13:54
>SGとかの「オブジェクト発生が優先される方向」と同じだね。
>不死にFWするときのセオリー(南西側から進入させるとフルヒットしやすい)
そうなのですか、内部で引き算をたくさん使っているから遅くなっているのかと思いました

結構深刻(?)な問題、マップ移動するとほぼ100%の確率で鯖缶してしまう
みんなで使ったら鯖落ちちゃう?

あとAIとはあんまり関係ないですが
敵から逃げる時も北東の方向に逃げれば、逃げやすいのでしょうかね。

748(○口○*)さん :06/04/21 14:12
>>745,746
機械的に3ステップ回しているから重く感じるのだと思う。
こういうイベントドリブン型のお約束で、適切なタイミングで制御をOS側に戻してあげないとダメ。
ホムAIの場合なら、Move()なりAttack()なり、1つ「実際にホムが動く」命令を実施したら、
制御を戻さないと重くなって当然だと思う。
(ROクライアント本体が「ホムが動いた結果」「ホムが攻撃した結果」をサーバから受け取れない)

実際問題、上記743にある「if 〜else」でなく「if 〜end」にするようなやりかただと、
状態がIDLE→CHASE→ATTACKと3ステップくらい変わっても重くはならない。
というのは、この場合実際にパケットを飛ばしているのはATTACK状態でのAttack() が
呼ばれているときだけだから。

749748 :06/04/21 14:19
あ〜。
ちょっと考えたらいろいろ言ってることが変だ。
重いのはパケットとばす云々だけじゃないね。単にAI実施処理が長いだけでも
反応が鈍くはなるわ。

まあ、適当にOSに制御をもどさなければならないお約束、ってとこだけで、ご容赦を。

750(○口○*)さん :06/04/21 14:42
AIって同期実行?

751(○口○*)さん :06/04/21 15:01
>>750
AIは、クライアントから見て完了復帰の同期動作になっているみたい。
AIが動作している間、ROクライアントの見かけ上の動きは止まってる。
例えば極論では、AI内で無限ループを書くと、ROクライアント自体が固まる。
他にも時間のかかる処理をするとちょっと反応が鈍くなったりする。
(SS撮影すると一瞬クライアントが固まるよね?あんな感じで。)

752(○口○*)さん :06/04/21 16:00
>>747
MAP移動中にはホムはいない(lua走っていない)ような。
なんでだろ。

>敵から逃げる時も
ホムがmobとして処理されてる(北→南のときは移動速度が速く、そのため
FWを抜けやすい)と仮定すると、PCには適用されないかもしれない。
PCまで同じルールだったら、ホムに追い抜かれたりしないわけだしね。

>>749
「なにか起きるまでなにもしない」のがイベントドリブン。
AI()自体は「○○が起きたからAI()を呼び出した」というわけでは
ないから、イベントドリブンじゃないよ。
デフォルトAI.luaの中身こそイベントドリブンで設計されてるけどね。

それと結果を見るとROでの実装は「AI()処理はメインループの一部に組み込まれている
(だから適度にreturnが必要)」だったけど、AI()の仕様だけを見るとスレッドで
非同期処理されててもおかしくないと思う。

753748==749 :06/04/21 18:44
>>752
あう、恥ずかしい・・・突っ込まんといて・・・
書いてから間違いに気づいたので、「いろいろ言っていること変だ」なので(^^;

#つまりは、仕事中に内職などしちゃいけません、ってことです(苦笑)

754(○口○*)さん :06/04/21 18:56
もはやAI初心者が気軽に質問できるスレではないな。
語るスレのほうは換算としてるが。

755(○口○*)さん :06/04/21 19:02
>>754
そういう気持ちが一番ダメだと思うよ。
別に今語り合ってる人たちだってここが雑談要望ってわかってるから
すごい初歩的な質問でも親切に答えてくれるさ。

756(○口○*)さん :06/04/21 20:52
でもこの雰囲気を作ってしまったのはまちがいかな

難しいところだ

続けるなら語るスレ行こうか

757(○口○*)さん :06/04/21 21:15
くまーAI使ってて1つ判明した点。
ケミに向かってShift+BBされるとホムが反応する。
スキルも使ってるらしくSPも減るな。エフェクトやダメージは出ないけど。
他のスキルで釣れるか分からない。CRやBDS、魔法の類ではダメだった。

758(○口○*)さん :06/04/21 21:22
>>757
主人に対して攻撃モーションを取得したから敵と見なして攻撃しに行ってる模様。
BBとかスピアスタブ等の攻撃モーションを取るスキル全般でなるっぽい。

759(○口○*)さん :06/04/21 21:28
たしかにデフォAIでもそうなってるな
なんでわざわざIsMonsterの不成立時にそんな処理をしてるのか・・・
たしかPvとかGvだとプレイヤーもIsMonsterは1返すんだよな?

760(○口○*)さん :06/04/21 21:34
技術的にどうこうってのはよくわからんし、大したことではないんだろう。
ただギルドでだべってる時に連れまわされて少し笑いが取れたのでちょっと書いてみるかと思ってね。

761(○口○*)さん :06/04/22 00:04
よく、寝落ちケミのホムをィェァィェァするために、
主人ケミを的にCRしまくるが、それに反応して
ホムがついて来た事は無いと思う。

BBとかスタブとは、なんかちがうのか?

762(○口○*)さん :06/04/22 00:04
CRはスキルモーションになるからじゃないかな?

763(○口○*)さん :06/04/22 00:10
あ、なるほどそういうことか。THX

ちょっと調べて、これで遊べるスキルのリストでも作ろうかなぁ

764(○口○*)さん :06/04/22 00:11
>>755
なんだか
「おまえ隣の中学の奴にたかられてるって?じゃあ体育館裏に
 たむろしてる奴らになんとかしてくれるように頼んでみろよ。
 実際話して見ればいいヤツラだぞ」
みたいなストーリーが浮かんだ。

まぁ実際いいやつもいるだろうが、虐められッ子だと近づけないよな。

765(○口○*)さん :06/04/22 01:35
>>764
スレ住人を不良と重ねるお前もどうなのよw

766(○口○*)さん :06/04/22 02:32
>>733さんとかぶるのですが
ホムが固定砲台になるAIって無いでしょうか
ヒントが掛かれてたのでちょっといじってみたんですが
エラーでまくってわけのわからない状態になってしまったので;

767(○口○*)さん :06/04/22 02:39
>>766
ホムは敵を発見した場合

IDLE > CHACE > ATTACK

と状態遷移させるわけだけど、要はCHACE部分をカットしてやればいい。
IDLEの中にCHACEへ状態を変える部分があるけどそこを全部ATTACKに書き換える。
次に、ATTACKの中にも「射程距離外ならCHACEへ」と変化させる部分があるから、ここをごっそり無くす。
こうすれば基本的に「戦闘するために移動」する制御を削れる。
固定砲台っつか戦闘状態になったら一切その場から動かなくなるわけだけど、
もし「敵と一定の距離を常に取りたい」のであればCHACEの内部を弄ることになる。
その辺ならばすでに対応してるAIがあるのでそれを利用したらいいと思う。

768(○口○*)さん :06/04/22 03:08
工体更新したな

769(○口○*)さん :06/04/22 03:10
>>767
レスありがとうございます。
さっそくやってみたんですがスキル使用後殴りに行ってしまいます;
どこが悪いのやら・・・
もうすこしがんばってみますー

770(○口○*)さん :06/04/22 04:02
くまーAIは細かい更新しまくりだな
どのタイミングで落としていいか困る。

とりあえず、現時点での最新版はもっさりしなくなってて
人に居なくなったODで勝手に狩らせると気持ちいい。


スレ的に、だいたい工体AIかくまーAIの2択な感じになってきたか。

 工体AI=高機能で上級者向け
 くまーAI=ツールで設定楽な初心者向け

こんな感じか?
あとは、こっこAIとかも話題に出てるみたいだけど、よくしらん。

・・・あれだ、
くまーAIみたいな工体AI用のツール誰か作って く れ な い か

771(○口○*)さん :06/04/22 04:25
自動PPするのがらくちん

772(○口○*)さん :06/04/22 04:56
こっこAIはこれだね ttp://privatemoon.sakura.ne.jp/ro.html#homu

初期に開発されたAIにあるような機能は大抵入ってるぽいけど
友達登録とかMobごとの設定とか細かいところは実装してない。
特に設定変えなくてもそのままでそこそこの性能ではあるかも。
戦闘中に敵・主人との重なり回避は便利かもしらん。

773766 :06/04/22 22:22
あれからまたAIいじってみたんですが
やはりスキル使用後敵に近づいて殴り始めてしまいます;
ちょっと諦め気味orz
固定砲台AI置いてあるサイト探してみる事にします

774(○口○*)さん :06/04/22 22:32
>>735さんが書いてくれてるけど駄目なのかな
ところでくだらない質問だけど
このソースってどうやって使うの?
AIのファイルの中の何処に足すのかコレだけ書くのか
皆わかってるのかな〜

775(○口○*)さん :06/04/22 22:41
>>744
プログラムと言うものを触ったのが初めてで
正直なにがなにやらさっぱりなのですよorz
自分のおバカさ加減にあきれてきます;

776(○口○*)さん :06/04/22 22:48
>>773
数週間前の俺と同じことやってるな。
スキルを使ったあとにMobのTARGET IDを初期化してやらないとそのまま殴りに行ってしまうらしい。
CHACE部分で移動する/しないを判定できれば出来そうな気がするんだよなー。

777(○口○*)さん :06/04/22 22:53
固定砲台の概念がいまいちよくわからないけど、
とりあえず>>735のあたりにもある部分の
OnSKILL_OBJECT_CMD内のSkillObject の次の行あたりに
MyEnemy=0って入れてみるといいかもしんない。

778733 :06/04/23 00:58
>>776
どこをいじればいいのかさっぱりわかんないです;
>>777
固定砲台って言ってるのはSGの氷割りが目的なんです
手動or自動でスキル使ってケミ追尾移動無しでその場に固定にできないかなーってことです
殴りに行っちゃうとあっという間にホムが死んでしまってSPも心も苦しいわけで;

と今さっきまでまたいじってたんですがやっぱり動いて殴りにいってしまいます・・・orz

779(○口○*)さん :06/04/23 00:59
>>773-776

>>735のソースは試したのかい?

AI.luaに、OnSKILL_OBJECT_CMDがあるので、
>>735のソースの+の部分を追加すればいいはず。
スペースが全角だからそのままコピペしちゃだめよ。
めんどくさがらずに打つべし!

ALT+Tの待機のときに固定砲台なら>>735でいいし、
待機じゃない時は、>>777の言うように、MyEnemy=0を追加すれば?

わからんかったら、くまAIに実装されるのを待ったら?
>>735って、明らかにくまAIの中の人だしw

780(○口○*)さん :06/04/23 01:25
固定砲台ならこことかどうだ?
使ったことないからどういう動きのAIかよくわからんが自走砲台モードとやらがあるらしい

ttp://www.uzukisyou.nobody.jp/AIlist.html

781(○口○*)さん :06/04/23 01:26
>>778
プログラムの仕方がわからないのは、ある意味仕方ないところなのでかまいません。
自動車の運転の仕方を知らない人に、自動車を運転しろとはいいません。
でも「何が必要なのか」「何をしたいのか」をきちんと伝えないと、プログラム対応する側も
考えづらいですよ。

SGの氷割りが目的、という時点で、単なる「固定砲台」だけでは不満になりそうな気がします。
例えば
 ・SGのタイミングを見る必要がありそう(これはユーザー操作で起動でもいいかも)。
 ・SG中、複数の敵がいる場合、それぞれに1発ずつ撃ってそれ以上は撃たないほうがよさそう。
 ・SGが使われていないときは、どう行動して欲しい?何もしないでいる?
  接敵されても反撃しない?
・・・というような用件が必要になってくるはずで、これは単なる固定砲台じゃ実現できません。

782(○口○*)さん :06/04/23 01:57
問題はMobの状態異常をAIが取得できないことだな

移動していないMobに自動でスキル一発だけお見舞いするだけなら出来るかもしれないが
それだと今度は通常攻撃が難しくなりそうだし、睡眠のMobやアンクルにかかったMob、
草やキノコにも反応しそうだからな

783(○口○*)さん :06/04/23 03:11
氷割りにってことはたぶん鳥の月光だと思うけど、
あれも実は結構なスキルディレイがあるので
氷割りのために固定砲台で敵1体ずつに打ち込んでいくようにしても
氷割りとしての役割を果たすのはちょっと難しいかもしれない。
恐らくSGの効果時間中に2〜3発程度しか打てない。

この程度ならホムがわざわざ氷を割る必要がないかもしれないし、
状況によっては割らないほうがいい場合(SGで倒しきれないので凍ったままのをJTしたいとWizが考えてる場合など)
に余計なことをしてしまいかねないという問題もある。

「固定砲台で敵1体ずつにスキルを使っていく」
という機能そのものは実装できそうだけど、「それがどのくらい実用的であるか」
ということを考えるとちょっとアレかもしれない。

784(○口○*)さん :06/04/23 08:13
まとめ
どう動かしたいのかわからないからどう教えていいのかもわからない

手動スキル使用時に殴りに行かないようにするだけなら
function OnSKILL_OBJECT_CMD (level,skill,id)
 SkillObject (MyID,level,skill,id)
end
こう変えるだけで十分

785781 :06/04/23 09:39
ちょっと雰囲気が否定的になっちゃったので、補足すると・・・
一応「氷割り」という主目的はわかっているので、それなりの動きをするAIを
作ることは不可能ではないと思います。標準AIなら・・・

・OnCHASE_ST() 内にMove() が呼ばれている行があると思います。
 その1行を削除して、変わりに以下のものを入れてください。
 (以下の行頭の_ は、実際のソースではスペースにしてね)

__if(MySkill == 0 )then
____Move (MyID,MyDestX,MyDestY)
__end

・OnATTACK_ST()内に「MySkill = 0」としている行があるはず。
 その直後の行に、以下のようにいれてください。

__MyEnemy = 0
__MyState = IDLE_ST

・OnIDLE_ST() 内、いくつかある「MyState = CHASE_ST」となっている部分をコメントアウト。

これで
「周囲に敵がいても、自分からは移動や攻撃を仕掛けない」
「手動スキル使用時、敵が射程外にいても移動しない。その後は待機になる」
動作になるはずです。
それ以外のAIなら、そのAI作者の方に聞くのが一番速いです。

ちなみに。
もしわたしが「氷割り」用のAI動作を作ろうとしたら、結構大きな改造をする
ことになるので「簡単に数箇所直せばOK」とはいかないと思います。
殴りに行くと死んでしまうというようなレベルのマップだと、
殴りに行かなくてもホムは狙われやすいので「普段は逃げ回る」アルゴを
いれないとならないと思いますし。

単純に「氷割り」といっても、人間は結構あたまがいい作業をしているんですよ〜。

786(○口○*)さん :06/04/23 10:24
工体AIがクライアントとAIの間に割り込んでAIを変更出来る
ツールを作ってるみたいだけど、ちょっとグレーにならないか?

PC側クライアント
 →工体ツールでAI処理(USER_AIの中身を変更せず誤認識させる?
  →RO鯖処理

になるっぽいし。

787(○口○*)さん :06/04/23 10:39
>>786
実体を見ているわけじゃないけど、問題ない範囲だと思うよ。
おそらく挙動は以下のようになるはず。

・USER_AIの下の AI.luaを、ツールから自動生成
 (エディタからセーブしているのと同じ。
  これが違反なら、AIの編集自体がそもそも違反になってしまう)
・上記自動生成AI.luaから、他フォルダにあるAIをrequireする。
 (他のluaファイルをrequireするだけなので、問題ないはず。
  これが違反なら、標準AIですら他のluaファイルをrequireしているので違反になる)

788(○口○*)さん :06/04/23 10:40
>>786
こうじゃないかな。

AI処理部分
→AI()実体 (ここがツールと連動)
→クラ
→鯖

工体ユーティリティのAI.luaに差し替えて、元のAI.luaのファイル名を
工体ユーティリティ指定のものに書き換えるという構造なら確定。

789766 :06/04/23 10:44
なんだかたくさんレス頂いてしまってありがとうございます;
んー氷割りはむずかしいんですかね
えっと遅くなってしまいましたが私の希望は
ALT+クリック以外では移動せずにケミ追尾もなし
その場でスキル使用。スキル使用後もその場に留まる
敵に殴られたら反撃。固定されてる場所から殴れる範囲に敵がいたら殴る。
こんな感じです。
頂いたアドバイスでなんとかなりそうかな?
掲示板とAIにらめっこしながら色々試して見ます
皆さん本当にありがとうございましたー

790(○口○*)さん :06/04/23 10:49
かぶった。
ところでROMapSelect.htaがRO2のパクりっぽいんだけどあれはOKなのかな。
同じことをしようとして自粛したんだけど…。

791(○口○*)さん :06/04/23 10:50
ってよく見たらblogのほうにも書いてあった。orz

792(○口○*)さん :06/04/23 13:57
>>790
どこのサイトさんでも出元のデータは同じだろうハズなので
個人的にはあまり問題ない奇ガス

----ちらしの裏----
と、書いていて思い出した
ttp://sakage.main.jp/ro/mapbb/mapxxx.html
Fileの作成日付を見ると2年近く前、狩場情報賛が更新停止を
宣言されて、さて困ったなと作り始めてみたものの
RagnarokOnlineMAP賛やRO2賛が素敵に登場されたため
お蔵入りになった記憶がありまする
その後BBMAP専用にして公開しようと思いつつ記憶の彼方に(´・ω・`)/~~

793(○口○*)さん :06/04/23 14:23
ROMapSelect.htaってダンジョンしか読み込まないの?
フィールドはどうするりゃいいんだ?手書き?

794(○口○*)さん :06/04/23 15:50
ユーザーAIをいくつもつかいわけしたいんだけど

/hoaiでユーザーAI切り替えられないのかな。
/hoaiを1回で基本AIからユーザーAI1に切り替え
もう一回/hoaiでユーザーAI2に切り替え
さらにもう一回/hoaiでユーザーAI3に切り替え
4回目の/hoaiで基本AIに戻る。とか。

795(*○口○)さん :06/04/23 16:24
>>790,792
デザインだけならいいけどアレ、ソースも画像もコピペだしねぇ
一応、規約で画像転載は禁止だから画像は自力入手した方がいいのかもしれん

htaの予想としてはUSER_AIにKUMA_AI、0MATE_AIフォルダ作って置いて中に各AIを用意しておく
それで選択したフォルダから中身をUSER_AIにコピーしてくるって感じになるかと

796(○口○*)さん :06/04/23 16:56
>>794
工体研究所を見に行ってみな。
まさにそれをやってる。まだ完成してないけど。

797(○口○*)さん :06/04/23 18:41
>>794
>>796

ちがうちがう。/hoaiはあくまでデフォルトとカスタマイズを切り替えるだけにしか使えない。
これはクライアントの動作だろうから変えられないだろ。

工体のは、カスタマイズAIを使ってるときに、どのカスタマイズAIを使用するかを
切り替える、というアプリケーションを作ろうとしてるんだろ。

798(○口○*)さん :06/04/23 18:44
>>794
基本AIを使う気がなければ、USER_AIじゃなくてAIにカスタムAIをぶちこんで、
ソースの中のパス(AI/USER_AI)を書き換えてあげれば、クライアントの動作(/hoai)だけで
二つのAIを切り替えることは可能だけどね。

うちは面倒なんでAIとUSER_AIにconfigだけ違うものをぶち込んで先行/非先行を/hoaiで
切り替えてる

799(○口○*)さん :06/04/23 21:51
流れぶった切りますが、プラントのジオを殴らない仕組みをデフォAIに組み込みたいのですが
どのようにすればよいのでしょうか?
色々と試してみたのですがどうしても殴りにいってしまいます。
ファイルを増やさない方向でお願いします

800(*○口○)さん :06/04/23 22:01
ジオグラファー(ケミ)のV_HOMUNTYPEが1590だから敵判定の時にチェックして除外すればOK

801(○口○*)さん :06/04/23 22:03
>>799
色々と試したことを一応教えて欲しいのだが、プラントにも固有のIDがあるから、
敵のIDを拾ったときにそれがプラントだったらEnemyの候補にしない、ということを
すればいいのではないかとおもう。

くまーAIに、「プラントを攻撃しない」というコンフィグがあるから、そのコンフィグの値が
どこで使われているか確認し、そこの処理を真似るのが手っ取り早いかとおもうけども。

802(○口○*)さん :06/04/23 22:13
function  GetMyEnemyB (myid)の中に、enemys[index] に敵のIDを登録して行く部分が
あるので、そこでもしプラントだったらenemysに追加しないようにすればいいんじゃね?

クマーから該当部分を引っ張り出してみると
(ignoreflag:その敵を無視する場合はYES
 FlagIgnorePlantMob:プラントを無視する場合はYES)


 if (FlagIgnorePlantMob == YES and ignoreflag == NO) then
                   -- ■ケミ召喚植物を無視する設定が有効であれば
   MobID = GetV(V_HOMUNTYPE,v)  -- ■敵の種類を取得して
   if (MobID == 1589 or MobID == 1579 or MobID == 1575 or
     MobID == 1555 or MobID == 1590 or MobID == 1142) then
                   -- ■敵がケミ召喚植物であれば
     ignoreflag = YES   -- ■無視フラグをYESに
   else             -- ■敵がケミ召喚植物で無ければ
     ignoreflag = NO    -- ■無視フラグをNOに
   end
 end

 if (v ~= owner and v ~= myid) then  -- オブジェクトがケミとホム自身じゃない場合
   if (1 == IsMonster(v) and ignoreflag == NO) then
                   -- ■オブジェクトがモンスターで、無視フラグがNOであれば、
     enemys[index] = v   -- ■無条件で敵の配列にオブジェクトを追加し
     index = index+1     -- ■敵の配列をインクリメント
   end
 end

803(○口○*)さん :06/04/23 23:53
なるほど、V_HOMUNTYPEが1590だったんですね
ずっと別の物を1590で条件つくってました
助言ありがとうございます

804(○口○*)さん :06/04/24 08:09
>>798
あ。それ頭いい!
さっそくやってみます。

805(○口○*)さん :06/04/24 09:08
自分はそれを知らずにやっていて、なんで基本設定でカスタムAIが動くのかと思ってた

806(○口○*)さん :06/04/24 14:08
えっと、質問っすー

先行型のホムに設定してる場合に、
ホムから半径Xマス内のモブにしか自らは攻撃しないという具合にしたいのですが、
何かいいアイデアとかないでしょうか?
とりあえず、OnAttack_ST()内の一番初めに下記のように文を作ってみたんですが…
やっぱり上手く動きません(;´Д`)

 local x , y = GetV (V_POSITION,MyEnemy)
 local myX, myY = GetV (V_POSITION,MyID)
 if (math.abs(x-myX)>2 and math.abs(y-myY)>2) then
  MyState = IDLE_ST
  TraceAI ("ATTACK_ST -> IDLE_ST")
  return
 end

807(○口○*)さん :06/04/24 14:35
>>806
ちょっとなぞかけ式に。

>if (math.abs(x-myX)>2 and math.abs(y-myY)>2) then
「横が2セルより遠く、かつ縦も2セルより遠い場合」

では次の場合、1と2はどうでしょう?
□□□□□□□
□□□□1□□
□□□□□□□
□□□□□2□
□ホ□□□□□
□□□□□□□

808(○口○*)さん :06/04/24 14:48
>806
アルケミのAIを語るスレ2の625の奴じゃダメかね?
function GetMyEnemyB (myid)を書き換える奴

for i,v in ipairs(actors) do
 if (v ~= owner and v ~= myid ) then
  if (1 == IsMonster(v) and IsNotNoManner( myid, v )) then
   if (5 >= GetDistance2 (GetV(V_OWNER,MyID), v)) then
    enemys[index] = v
    index = index+1
   end
  end
 end
end

809806 :06/04/24 14:48
>>807
あ!初歩的なミスしてました…andじゃなくてorですね;
andだと1には攻撃しなくとも、2には普通に攻撃しますね…

と、修正して試したところ、やはりどのモブにも位置に関係なく攻撃始めた…
つかの間の喜びでした。・゚・(つД`)・゚・

810(○口○*)さん :06/04/24 15:07
actors = GetActors()
for i,v in ipairs(actors) do
の間に
actors = SelectActors(SELECT_IN_RANGE, actors, MyID, 2)
を追加で、とかどうよ?

これはactorsの中からMyIDとの距離が2セル範囲の物だけ取り出してactorsにセットしなおすやつ
ケミWIKIのSampleにおいてあるSelectActors.luaをrequireすれば使える
(と、布教活動してみる。つかってやってくれるとうれしい)

811806 :06/04/24 15:09
>>808
IsNotNoMannerが定義されてなくてエラーを吐いたり…
>>133のところでも話題に出ているみたいですが、この関数は一体ー?
自作のオリジナル関数なのかな?

812(○口○*)さん :06/04/24 15:26
工体AIだね
function IsNotNoManner( myid, id )
local target = GetV( V_TARGET, id )
return target == 0 or ( target == myid or target == GetV( V_OWNER, myid ) )
end
だそうだ(本家より転載)
誰か他の人を狙ってなければって感じかな

813806 :06/04/24 15:33
ありがとうございますー!
関数組み込んだら無事にうまく動きました…(;´Д`)
てか、工体AIってこんなことまでできるんですね…ちょっと感動しました。

814(○口○*)さん :06/04/24 19:21
テンプレのAI配布サイトの説明が、
矛盾してたり古かったりしてたのが気になったので、
一通りのAIを試して、説明を修正してみた。
あと、くまーAIを入門者用、ぜろまてAIやこっこAIを初心者用って直した。
さらに、スレに登場した配布サイトを追加した。

なんか、おかしかったら修正よろ。

# 同じ機能でも、AI毎に動作が微妙に違うのね。
# けっこうとまどった・・・orz

815(○口○*)さん :06/04/24 20:31
自動PPグレーだけど最強

816(○口○*)さん :06/04/24 21:23
工体AI使って見たけど敷居高いね。
くまーAIに詠唱妨害と再読み込みで消えない友達登録、あとエサやりから一定時間での合図が欲しいなぁ…。

817(○口○*)さん :06/04/24 21:32
エサやりからの合図なんて実装してるAIあったか?
ていうかそもそも実装出来る気がしないんだが。

818(○口○*)さん :06/04/24 21:48
一定時間放置すると回るだけ
ぜろまてのくるくる回るやつを30分置きとかにしたような感じ

819(*○口○)さん :06/04/24 21:53
エサやり自体はどうにも出来ないけど、前回のAlt+Tから10分経ったら
主人の周りをグルグル回る10分タイマーとかなら出来る。
ただ、コピペで動くような機能じゃないしトリガに使えるコマンドも
個々のAIで既に使っていたりするからどっかが実装してくれるのを待つしかない

820(○口○*)さん :06/04/24 22:10
そういうんでよければ既出の回転機能の周期を10分とかにすればいいんじゃない?

821(○口○*)さん :06/04/24 23:22
重なったときにPPできないのが痛いので
ムーンライトレベル1を使ったらホムにPPレベル2ってのをやってみた。
たぶんカプリスレベル1でも動くんじゃないかな?混戦でPP出来るのはデカイと思う。
function OnSKILL_OBJECT_CMD (level,skill,id)
のすぐ下にこいつを追加ね。

if (level == 1) then
SkillObject(MyID,2,231,MyID)
return
end

822(○口○*)さん :06/04/24 23:48
結局PPをAIで制御する以上グレーな気分になってしまうのと、
月光もカプリスもディレイが長いのでPPを連投したいときには
ディレイのせいで追いつかなくなるかもしれない。

素直に戦闘中敵と重ならないように移動させるとか
そういうことしたほうがいいと思う。

823(○口○*)さん :06/04/24 23:50
>>821
荒らそうとしてるのか、単純にAIの便利さを突き詰めようとした結果なのか、
今までの経緯を知らないのかは分からないが、AI中の命令からアルケミストの
スキルを使用するのは、荒れる原因になるよ。

Ganghoに問い合わせても、それがグレーなのかどうなのかすら
答えてくれないので断言できないのがアレだけど、あくまでホムンクルスの
挙動を制御するために用意されてるもの、というのが一般的な見方なので。

ムーンライトかカプリスをLv1で使ったら、東西南北どっちかにずれた座標に
移動する、という風にしておけばまぁPPしやすくはなるかもしれない。

824(○口○*)さん :06/04/25 00:00
すまん。タブーだったんだな。スルーしておくれ。
ODだとアイテムがそこらじゅうにあってPPできんから苦肉の策だったんだ。
しっかしカーソル優先度だけはなんとかしてほしいわ。

825(○口○*)さん :06/04/25 10:36
トリガに使えるコマンドって今何があるんだっけ
Alt+T、Alt+右地面(x2OBJ)、Alt+Shift+右地面(x2OBJ)、ML、CPRS
だけ?
やっぱり座標判断が一番いいのかねぇ

826(○口○*)さん :06/04/25 10:47
>>825
x2OBJが攻撃コマンドのことならあとは座りモーションくらいかな

827(○口○*)さん :06/04/25 12:45
>>825
ホムAIに直接メッセージを送り込める、という意味なら、そこまで。

上記に加えて考えられる可能性としては、826にあるようなケミ関連のモーション監視がある。
ただし、「座る」以外のモーションは難しそう(スキル使用モーションも拾えるけど、タイミングがシビア)
「バイオプラント使う」ってのもトリガーにできそうだけど、これだと他キャラのBPにも反応するしなぁ。
そもそもBP無しっていうケミもいるだろうし。

828827 :06/04/25 12:49
今上記を書いてて気がついたんだけど・・・
ホムって「火壁」「氷壁」「火炎瓶の炎」みたいなオブジェクト、認識できる?
できるなら、例えば「FW検出」→近くに魔法使いがいなければコマンドと判断・・・
なんてこともできそうな気が。

829(○口○*)さん :06/04/25 13:02
>>828
できないね。あとピットマンのクレイモアも認識できなかった。
IWやハンターの罠もそうなのかな?
この辺検証した人いるかな?

830(○口○*)さん :06/04/25 16:45
既にご存じの方も多いと思うけど、二つのファイルを比較して
その差違がみれるモノ
つ「winmerge」ググればTopに日本語版出て来るので、ご参考までに。

831(○口○*)さん :06/04/25 21:02
すみません、当方初期の基本AIを改造して使っている者なのですが、
召喚ジオをホムが攻撃しないようにするには、どの部分にどういう文を追加すれば良いのでしょうか?

832(○口○*)さん :06/04/25 21:14
30レス前くらい読んでくれ

833(○口○*)さん :06/04/26 00:52
初心者ながら固定砲台というのに興味があったので
テンプレの「先攻攻撃で困ってる人へ応急処置AIファイル」
>>735さんのを足して作ってみました

で、質問がいくつかあります
テンプレのLua/Sample「ホム等速」なんですが
+を付け足して-を削るのはわかります
でも「変数宣言」ってのをどこに足していいのかわかりません
解説お願いします!

834(○口○*)さん :06/04/26 01:01
function 〜 end の外に適当に置いておけばいいよ。

835(○口○*)さん :06/04/26 01:27
ありがとうございます解決しました
更に質問です
今の状態だと飛ぶ度にALT+Tが必要なのでテレポ狩りに不便です
基本をALT+Tの待機状態には出来ないでしょうか?

836(○口○*)さん :06/04/26 01:33
>>835
くまーAIとかにそういう機能付いてるから、参考にしてみたら?

837(○口○*)さん :06/04/26 01:45
>>835
ifとelseの中身を逆にすればいいだけだと思うけど。

838(○口○*)さん :06/04/26 02:19
全部を逆にするんですか?

>>836
機能自体は見つけたんですが
別の設定ファイルで設定するみたいでちょとわかりませんでした
1から勉強する時間があればいいんですけどね・・・

839(○口○*)さん :06/04/26 02:30
最近露店してても消滅しないホムいるのですが、自動餌やり機能のあるAIがあるのでしょうか?

840(○口○*)さん :06/04/26 02:35
>>838
>>735のをそのままなら、SkillObjectとMyStateの行を入れ替えればいい。
全部っつかそれぞれ1行しかないじゃん…。

>>839
本気なのか釣りなのか知らんが
お前の中の露店とは数時間一切画面を見ることなく放置することなのかと。
露店したら必ずホムが消えるのかと。

841(○口○*)さん :06/04/26 02:51
AIファイル丸ごと検索してました・・・
735さんのは待機の時だけ固定なだけで普段の動きは関係ないと思って。
ありがとうございました

842(○口○*)さん :06/04/26 03:28
>835
>840
設定ファイルを読み込むにはどうしたらいいのですか?って質問が来そうだから
無理やり移植させるより、AI.luaファイルのかなり上の方で

------------------------------------------
-- global variable
------------------------------------------
MyState = IDLE_ST -- 最初の状態は休息

MyState = FOLLOW_CMD_ST -- 最初の状態は待機

と、直接書き換えたほうがいいんじゃまいか?

843(○口○*)さん :06/04/26 03:29
つまりあれだ、リロードしろ俺。

844(○口○*)さん :06/04/26 18:18
ありがとうございまし
同じ効果だと思うんですけど違いはあるんですか?

あと、これで完成したと思ってましたが駄目でした・・・
予定というか使い道は
ホムは鳥でMLにLAが乗らないので共闘用に手動ML1してLAメマー。
ML1でタゲを取ってそのまま壁。
だったんですがタゲを取ると反撃しちゃって壁になりません。
既に待機中なはずなんですが、無抵抗というのは出来ないでしょうか?

845(○口○*)さん :06/04/26 18:52
>>844
なぜホムが攻撃するのかといえばATTACK_STのときにAttack()というコマンドを実行しているから。
条件に合わせてこの部分をif文で囲むなどしてやれば無抵抗状態も実現できるよ。

846(○口○*)さん :06/04/26 23:33
Gvにホム連れて行ってる方いますか?
AI次第ではGvでもホム使えると聞いたので
もし要らしたらどんなAI使っているか教えていただきたいです。

847(○口○*)さん :06/04/27 08:51
>>844
遅レスですが。

「ML1でタゲを取って」というところが問題:今出回っているAIのほとんどは基本AIベースで、
基本AIはスキルを使うという時点で「待機状態」ではなくなっています。
結果、MLを使った時点ですでに普通の(待機ではない)戦闘状態なので、反撃を行います。
(逆にいうと、少なくとも基本AIでは待機状態では絶対に反撃しません)

手動でMLを使った(つまり手動で待機を解除した)のですから、
再度手動ALT+Tで待機にするのが自然といえば自然です。

待機状態から手動でスキルを使ったら、スキル使用後に待機に戻る・・・っていうモノはできないことはないです。
あんまりお行儀はよくないですが、以下のようなことをすればできます。

・global変数で適当なフラグとなる変数を作る。
・OnSKILL_OBJECT_CMD()の最初のほうで、
 「もしMyStateがFOLLOW_CMD_STなら、フラグをセット」という処理を入れる。
・OnATTACK_ST()内、SkillObject()呼出し後
 「もし上記フラグがセットされているなら、MyStateをFOLLOW_CMD_STに」という処理を入れる。

848(○口○*)さん :06/04/27 09:37
function OnSKILL_OBJECT_CMD (level,skill,id)
SkillObject (MyID,level,skill,id)
end
俺が使ってるのはこれ
スキル使うって言ったらスキル使うだけ。
余計なことはしてくれるな。とね
一部の状態だけって定義したいなら条件分岐でも切ればいい

849(○口○*)さん :06/04/27 10:03
>>848
それって、射程無視だから、あんまりお勧めしない。
まあ、SKILL_RANGEが未実装ってほうに問題があるとは思うけど。

850(○口○*)さん :06/04/27 12:57
あれ
このスレだと接敵しないスキル使用はタブーなんだっけ

851(○口○*)さん :06/04/27 13:01
他に唯一射程っていえるのはデフォAIにあるInAttackSightの2セルぐらいかな?
ケミから弓が届くぐらいの範囲で射程設定されてるんだと思ってた

もしかして適当なID指定すればMAPの端から端まで届く?

852(○口○*)さん :06/04/27 13:06
タブーじゃないけど、教える側としては無責任にやっていいもんじゃないかな、と。
教えるなら前置きで「仕様かどうかはあやしいよ」というべきだと思ってます。

一応デフォルトAIでは「射程内に入ってからスキルを使う」という流れが記載してあるので、
もし突然スキル射程が実装されたら、困るのは(背景を知らずに)意見を受けて改造した人ですから。

853(○口○*)さん :06/04/27 15:29
うと

854(○口○*)さん :06/04/27 15:47
>>848
これをどこに書けばいいのか教えてくれない?
情け無いがプログラムの文書いてくれてもどうしていいやらさっぱりだわ。
なんか射程が必要らしいからよければそれも。

855(○口○*)さん :06/04/27 18:28
過去ログにかいてあったらすんません。

「ホムが攻撃時に敵と重ならないようにする&主人と同速移動」

これの設定の仕方教えてくれませんでしょうか・・・orz

856(○口○*)さん :06/04/27 19:18
>>854
現在はスキルそのものには射程設定がないって言われてる
もしかしたら>>851の言うようにケミから15セルとか30セルとか長大な射程を持っているだけかもしれないけど
これらの可能性を除くと現在射程を認めることが出来るものは通常攻撃の射程が帰ってくるInAttackSightだけ
つまり近接魔法ってことになる。

なので射程を考えると隣に持っていかないと手動スキル使っても何もしなくなる。
>>848を使うなら射程無視でやるしかないかな

AI.luaに同じ名前の関数があるから
全部をコメントアウトするなり消すなりしてあれと置き換えるだけ
ちなみにデフォAIならアレでいいけど他のところのAIだと知らないよ

857(○口○*)さん :06/04/27 19:21
自作に「処理追加」したいのか、大手のAI使ってて「設定の仕方」がわからないのか。

858(○口○*)さん :06/04/27 21:09
ちなみに誤解がないようにいうと、実装されていないのは「スキルが射程外に使われた場合の禁止処理」ね。

わたしはバニル使いなのでバニルについてしか話せないけど、バニルのカプリスに限っていえば、
GetV(V_SKILLATTACKRANGE,〜)では「9」という値が帰ってきている。
なので、本来は「射程9よりも遠くへスキルを使おうとしたら、失敗」というのが正しい姿と考えられる。
つまり「射程が9以上のところにカプリスを撃とうとしたら、9セルまで近づいてからスキル使用」
というのがAIに本来期待されるされる姿。

#実際、ホムでない一般的ROキャラの射程スキルでも、同じよう動くし、
#標準AIでもそういう動作をするようになっている。

859(○口○*)さん :06/04/27 23:06
>>847
ありがとうございます
ちょっと用語が分からないのでまた休みの日にでも調べてみます
それでは

860(○口○*)さん :06/04/27 23:13
>>855
ケミテンプレのAI関係も一通り読んで見るといいぞ。等速移動は載ってる。
ttp://f31.aaa.livedoor.jp/~alchemi/pukiwiki.php?cmd=read&page=Lua%2FSample%2F%A5%DB%A5%E0%C5%F9%C2%AE

重ならないのは、いまいちどうすりゃいいか分からんが、

OnATTACK_ST ()の
 MyDestX, MyDestY = GetV (V_POSITION,MyEnemy);
 Move (MyID,MyDestX,MyDestY)
 TraceAI ("ATTACK_ST -> CHASE_ST : ENEMY_OUTATTACKSIGHT_IN")

とOnCHASE_ST ()の
 MyDestX, MyDestY = GetV (V_POSITION,MyEnemy);
 Move (MyID,MyDestX,MyDestY)
 TraceAI ("CHASE_ST -> CHASE_ST : DESTCHANGED_IN")

のところで、MyDestX, MyDestYを求めたあと、move命令実行前に
どっちかを+1なり-1なりしてあげればいいんじゃないか。

まぁこのスレの>>221-223に書かれているような問題は出てくると思うが。

861(○口○*)さん :06/04/27 23:26

ちゃんと帰ってきてたんだw
それなら
functionOnSKILL_OBJECT_CMD (level,skill,id)
if GetDistance2(id,MyID) <= GetV(V_SKILLATTACKRANGE,MyID,skill) then
SkillObject (MyID,level,skill,id)
end
end
でいいね。

862(○口○*)さん :06/04/27 23:37
>>855
こっこAIでも試してみたら?
敵・主人との重なり防止やってるよ。

863(○口○*)さん :06/04/27 23:51
重なり防止なら、工体AIが優秀だと思ふ。

864(○口○*)さん :06/04/28 00:39
>>860
なる、こんな感じか

function OnCHASE_ST ()
Move (MyID,MyDestX,MyDestY)  →  Move (MyID,MyDestX - 1,MyDestY - 1)

865(○口○*)さん :06/04/28 00:46
本スレで書くとあれそうだからここで聞くけど
Lv70↑ホム鳥とLv90↑AGI戦闘ケミでどれくらい効率でるの?

866(○口○*)さん :06/04/28 00:47
>>865
ホム狩り場スレにたくさん報告あるから見に行くといいよ

867(○口○*)さん :06/04/28 01:04
OnCHASE_ST()を省くと若干ASPDあがった気がする。
function AI(myid)のOnCHASE_ST ()をOnATTACK_ST ()に書き換えてみただけ。
攻撃範囲外だったら勝手に追いかける仕様みたいだからこれでもいいんかな。
次のターゲットに移るのもかなり早くなったかもしれない。
横殴り防止をOnATTACK_ST ()にいれんといかんけどな。

868(○口○*)さん :06/04/28 06:53
それはちょっと前クマーAIで話題になったね
AI()のCHASE_STからATTACK_STまでのelseifをendとifに変えてやれば1回の処理でまわるようになる

869(○口○*)さん :06/04/28 07:40
工体AI使おうと必死

設定多すぎてぱにっく状態・・・。
やっぱり上級者用か

870(○口○*)さん :06/04/28 07:46
ぶっちゃけアレの設定位できないとPCの操作も危いと思うんだ 思うんだ
親切なコメントが付いてると思うんだけどなぁ

871869 :06/04/28 08:18
>>870
そうなのか・・・。
勉強しなおしてきます(汗)

872(○口○*)さん :06/04/28 08:23
工体はデフォルトだとスキルまわりがバニル専用なんだよなぁ。
鳥だとconfig弄ったくらいじゃどうにも…。

873(○口○*)さん :06/04/28 08:33
GUIじゃないソフトへの慣れとか、AI(ホムに限らず思考ルーチン)への
理解とかもあるから、>>869みたいな反応はそこまでおかしくないと思う。

PC初級者でもROプレイヤーなら、支援ツールのINIいじった経験のある人が
それなりにいるから問題になりにくいけどね。

ただ自分の手に馴染むものがほしいなら、あのぐらいの設定というか
調整は必要になる。>>869がんがれ。

「いじれるところ≠いじらないといけないところ」ということはお忘れ無く。
工体AI使ってないからわからないけど、普通はデフォルトが最大公約数的な
おすすめ設定になっているから。

あーあと、パニック起こすなら印刷してみるといいよ。

874873 :06/04/28 08:34
>>872
すまんかった。orz
そりゃ自分用に調整するよなぁ…。

875(○口○*)さん :06/04/28 08:46
872,873各氏を見てて&自分も「バニル基本でAI公開」している身からして思ったんだけど、
今公開されているAIたちについて「どのホム使いならお勧め」系の分類情報って
どこかに作るべきかもね。

ホムごとのスキル差や、各プレイヤー自体のプレイスタイルの差はもちろんあるだろうけど、
アサシン的なフィーリル、魔法使い的なバニル、プリ的なリーフ、VIT戦士的なアミストル・・・と、
基本的な性格が違うんだから、要求される立ち回り傾向も微妙に違うような気がする。

876875 :06/04/28 08:53
ちょっと言葉が足りなかったから追記。

多くのAIは、「設定をいじれば」どのホムにも対応できるようになってますけど、
その設定をいじるのさえ苦手な人ってのは間違いなく存在するので・・・
例えば『工体AIは「デフォルトではバニル向け」「いじればどれにでも」』というような
そういう初期情報はあってもいいと思った、ってことです。

877PC一年生 :06/04/28 10:41
>>869です

今まで工体AIに入ってるの読んでたけど、根本的にダメらしい。
どこをどういじるのか、どれをどこへ持っていくのかすらわからなかった。
もうちょっとがんばるかぁ・・・。

878PC一年生 :06/04/28 10:55
こんなダメなのもいるんですよーって感覚で書いてたけど、
わかるやつには駄レスだな(汗)

失礼。

879(○口○*)さん :06/04/28 11:08
上でちょっと、ゼロマテがスタックするって話が出てるけど、
くまーもスタックは、頻繁にあるね

共闘中とかなら、本体が一歩歩くとか、手動でホムを一歩歩かせる
とかすれば、すぐに解消するんだが、テレビ見てたりとか余所見がちで
狩りしてるときには、意外にこれがきつい。

『同一モンス相手に○○秒間、ホムがATKモーションをとり続けた場合、主人方向へ1歩歩く』

とかいう感じの命令を組み込めば、これって比較的簡単に解消できないかな?
○○は各ユーザーが好みで設定できる感じで。

880(○口○*)さん :06/04/28 11:33
>>879
ゲームしてんだから余所見しないほうがいいんじゃない?・・・っていうチャチャは置いておいて(笑)

単純に「長時間攻撃中」ってだけだと、スタックして長時間なのか、単純に敵が固いだけなのか、
判断できないのが苦しいところか。つまり、移動しなくてもいいのに移動してしまう可能性がある。
まあ、1歩歩いてまた普通に移動して戻ればいいっていえばいいので、攻撃スピードをちょっと
犠牲にしていいなら、狙えるかもね。

そこまでやるならもう1手、すでにボスケミに隣接してたら移動方向をちょっと変える、ってのまで追加するといいかも。

881(○口○*)さん :06/04/28 11:39
>>879
ホムのモーションは取れないのです。
スタックの対策は、スタックした場合にどうするかより、
スタックしているかどうかを判断するのが問題だったり・・・

882(○口○*)さん :06/04/28 11:48
こんな感じで、Moveしてるとこに入れてみるとかどう?
今試せないんで動くかわからんけど。

function CheckMove()
    if MyDestX == 0 and MyDestY == 0 then return end
    local myX,myY = GetV(V_POSITION,MyID)
    if myX == MyDestX and myY == MyDestY then
        MyDestX,MyDestY,MyStop = 0,0,0
    elseif myX == MyLastX and myY == MyLastY and GetV(V_MOTION,MyID) ~= MOTION_MOVE then
        MyStop = MyStop + 1
        if (MyStop > 5) then
            MyStop = 0
            Move(MyID,MyDestX,MyDestY)
        end
    else
        MyStop = 0
    end
    MyLastX,MyLastY = myX,myY
end

883(○口○*)さん :06/04/28 11:50
>>881
んじゃ、
『対象モンスの死亡が○○秒間確認出来なかったら』
かな?

はっきり言って、余所見狩りのときは効率なんて気にしちゃいなのでw、
いっそのこと
『戦闘状態では、○○秒に一回1歩歩く』
でもいいかもしれないけど。

884(○口○*)さん :06/04/28 12:35
言われてるほど工体難しくはないとおもう
モブ指定とかもできるし なによりピンチの時にくるくるするからPPしやすいし
ここ雑談スレなんだからわからないとこ聞くといいとおもうよ

885(○口○*)さん :06/04/28 12:43
くまAIの作者さんがここをヲチしてることを祈りつつ
スタックも重力座標以外はほぼなくなり
連戦のモッサリも解消し
GUIで変更もラクチン…

でもまだぜろまてAIから乗り換えられない。唯一の問題はぐるぐる。
くまAIだとぐるぐるするのは待機中のみなのが残念。待機中じゃホムがタゲられても反撃しない…。
ぜろまてAIだとぐるぐる半径を4ぐらいにしてホムか主人がタゲられたときのみ反撃するようにできる。

886(○口○*)さん :06/04/28 13:29
要望だから書き込むこと自体はかまわないけど、
「通常時のくるくる」はどっちかというと趣味の域だと思うので、全AIに入ってる必要はないかなぁ。
AI作成者も「自分がいらない」と思う機能についてはあんまり気乗りしてないからやってない、
っていう可能性も十分あるし。

つーか、既存機能の個別AIごとへの追加反映って、ここに意見書き込みするよりは
AI提供者に直接言ったほうが早い気がする。

887PC一年生 :06/04/28 13:59
えーっと、根本的に工体AIさんのファイルが多すぎて、
どれをUSRU_AIに入れていいのかわからなかったりします・・・。
全部つっこみゃいいんかなぁ。

こんなこと聞いていいのだろうか_no

888(○口○*)さん :06/04/28 14:08
>>885
くまAIは前は戦闘中ぐるぐるだったけど、途中から待機中に変わった。
俺は、戦闘中まわるとうっとおしいので前は切ってたけど、
待機中になったので、HPSPの回復確認代わりに使ってる。

変わる前のAIから移植してみたら?

889867 :06/04/28 17:22
攻撃前に前にソバに行くためのmove命令っていらないんじゃないか?って趣旨ね。
PCが離れた敵を直接クリックして攻撃するのと
いったんソバをクリックして隣接して敵をクリックするって違いかなっと。

890(○口○*)さん :06/04/28 17:35
工体AIで、鳥のフリットムーブの使用状況を、くまAIと同じようにしたいんだが、どうすればいいかな…。

891(○口○*)さん :06/04/28 17:41
>>888
やってることは同じかな。
ぐるぐる開始設定をSP100%時のみにして回復確認してるけど、
くまAIだとタゲられてもそのままじゃ反撃してくれないのよ…

まあぶっちゃけるとOD1とかでぐるぐる半放置えさやりオンラインがやりたいだけなのだがw
そもそもぜろまてAIで事足りるんだからくまAIに拘泥しててもしょうがないか。

892(○口○*)さん :06/04/28 17:42
>>890
発動計算部分を移植すればいいと思うよ

893(○口○*)さん :06/04/28 23:10
OnATTACK_ST()時重力座標にハマって攻撃出来なくなる現象
敵との距離がクラ上では2マスだが鯖上で3マスなんかになってOnATTACK_ST()のままOnCHASE_ST()に戻る事も出来ない状態
OnATTACK_ST()で設定さてたオートカプリスは発動しつづけるのでクラ上通常攻撃射程内にいて、AIもそれを受け取って
スタックしてる模様、なので
一定時間攻撃モーションが帰ってこなかったら自分の座標を中心に東西南北へ移動する関数を作ってみたが
if (AttackFailTime == 0 or GetV(V_MOTION,MyID) == MOTION_ATTACK or GetV(V_MOTION,MyID) == MOTION_ATTACK2) then
AttackFailTime = GetTick()
end
if (GetTick() - AttackFailTime > 2000) then
Secession ()-- 現在座標を移動する
AttackFailTime = 0
else
AttackFailTime = 0
end
だと、スタックしても移動してくれず
if (AttackFailTime == 0 or GetV(V_MOTION,MyID) == MOTION_ATTACK or GetV(V_MOTION,MyID) == MOTION_ATTACK2) then
AttackFailTime = GetTick()
end
if (GetTick() - AttackFailTime > 2000) then
Secession ()-- 現在座標を移動する
AttackFailTime = 0
end
だと、スタックの有無に関係なく時間が来たら移動してしまう
なんとか良い方法はないでしょうか?

894(○口○*)さん :06/04/28 23:26
>>893
まず上の。

if (GetTick() - AttackFailTime > 2000) then
Secession ()-- 現在座標を移動する
AttackFailTime = 0
else
AttackFailTime = 0
end

ここでどう足掻いてもelseに行ってしまいAttackFailTimeが初期化されてしまうので、
いつまでたってもifの方に行けない。だから動かない。



というか、そもそもホムの攻撃モーションが取得できるものだったか?
なんか↑の方で出来ないって書き込みなかったっけ。
出来たにしても、スタック中は攻撃モーションを取ってないわけじゃないみたいだから
この条件だと常に真になってしまって上手い動作にはならないと思う。

895(○口○*)さん :06/04/28 23:30
と、追記。

>>893
下のほうがスタック関係ないのは、攻撃モーションを取得できないために
常にAttackFailTimeが0のときでしかif条件に合致しないからだと思う。
そうなると常に時間通りに動くことになる。

>>834の最後の二行ちょっと日本語変だな無視してくれ。

896(○口○*)さん :06/04/29 00:25
と、云う事は…一定時間同じ座標ってのじゃ判定無理か
攻撃中は移動してないわけだし
>>834
最後の2行はつまり。
スタック中でも鯖側では攻撃モーションをとってるつーか、攻撃してる事になってるって事?

897(○口○*)さん :06/04/29 02:05
>>896
鯖側じゃなくて、ホムの挙動は全部ローカルで判断してる。

ローカル:射程内→攻撃パケット送信

鯖:射程外→攻撃パケット無効

っていう関係がずっと続くからスタックになる。
だからローカルじゃ攻撃命令をひたすら送ってるわけで、
AIとしては攻撃してることになってる。
鯖としてはこれはむしろ攻撃してないことになってると言うべきか。

とにかくクライアント上の表示で全て判断するAIの性質上
このスタック問題はそもそもの座標ずれが直らないことには防ぎようが無いし、
これをAIでなんとかしようと思ってもAIは「見かけは問題ない状況しか読み取れない」から
この問題の解決は難しい。

898(○口○*)さん :06/04/29 06:32
話の流れをぶった切って申し訳ないが。
キャラクターのIDって、プレイヤーキャラについては完全に一意なんですかね?
同一アカウントでも。

何を知りたい/やりたいかというと、
「同一アカウント内に複数のホム持ちケミを持っている場合に、
 GetV(V_OWNER,〜)でオーナーを見ることで、
 そのケミごとに各種設定用iniファイルを使い分ける」
・・・ってことができるのかな?と。

自分は2アカでそれぞれにケミがいるから、別アカで上記の判断はできるんだけど、
同一アカでそれができるのかどうかで、更なる追加がいるかどうかが変わってくるので・・・
誰か情報お持ちだったら、お願いします。

#ちなみに、別のフォルダにAIをそっくりコピーしてキャラごとに手動切り替え・・・ってことはできるのはわかってます。
#自動判断したくて、その材料としてキャラIDを使えるかどうか知りたい、ってのがポイントです。

899(○口○*)さん :06/04/29 07:46
>>897
つまりは、状況を読み取らないで済む仕様にするしかないわけだろ?

・同じ敵にATKを○○回繰り返したら
もしくは
・同じ敵にATKを○○秒間続けたら

それでダメなら、
・戦闘状態が○○秒続いたら
もしくは
・主人かホムがATKを受けて○○秒経過したら

とか、とりあえずよそ見中にスタックしないためだけのロジックなら
実装可能じゃね?

900(○口○*)さん :06/04/29 07:47
>>898
アカウントIDが取れるだけじゃなかったか
つまり同アカウントなら別キャラでも同じものが返ると思うが。

901(○口○*)さん :06/04/29 12:06
くまAIもどんどんバージョンアップしているんだなぁ。
バージョンアップしたら新しいのに入れ替えたほうがいいのかな。

902(○口○*)さん :06/04/29 12:41
iniだけ複数用意してリネームでいいがな
もしくはホムの種類でみるか、種類も一緒ならホムのMHPで大雑把に分けるか、自動判別にせずにカスタムと基本(の中身を置き換えたもの)で切り替えるか。
一度のリロードですむんだし、どれでも好きなのどうぞ。

903(○口○*)さん :06/04/29 12:46
>>901
そりゃ完全に好みの問題だな。
新バージョンでなくなった機能があったり、使いたくない機能が追加されたりしてるなら入れ替えないほうがいいし、
旧バージョンに自分で処理を追加してる場合なんかも、
簡単に入れ替えることはできないし。

904(○口○*)さん :06/04/29 12:48
>>898
PCのIDは一意だと思うけど、アカウント内の3キャラ同一だと思うから、
アカウントが別のケミ間ならそれは可能だろうけど、
同アカウント内の別キャラとなるとキャラIDじゃ無理かもしれない。

あとはなんだろう…。クリエとケミなら同アカ内でも職業判定も同時に行えばいいだろうけど、
それもダメとなると他に判定材料あったかな…。

905(○口○*)さん :06/04/29 12:52
>>900
ホム種類も見るとしても、同一垢同一ホム種は判断できないってことか。

…そんな人めったにいないし、切り捨てていいか。

>>901
ソフト全般に言えることだけど、バグ修正に致命的な内容(セキュリティ関係とか)が
なく、機能の追加や修正にも特に食指が動かないなら、そのままでも。
ただ何らかのサポートを受けたいとき(質問とか改造とか)は、まず最新版に差し替えて
試すのが礼儀。古いバージョンまでサポートするのは大変だから。


ところでまだちょっと早いけど、初めての次スレだからテンプレ修正考えてみない?
とりあえずこのへんの追加を提案。

・どんなに初歩的な質問でも歓迎します。けれども伝える努力は忘れずに。
・高度な話題はほどほどに。続くようなら、AI語るスレに移動をしましょう。

906(○口○*)さん :06/04/29 12:58
ホムをケミが追いかけてこないようにしたいんですが
どこを変更すればいいんでしょうか?

907(○口○*)さん :06/04/29 12:59
反対だ・・・
ホムがケミを追いかけてこないようにしたいです

908(○口○*)さん :06/04/29 13:06
>>906
追尾を切るってだけなら簡単、だけど…。

たぶん手動操作前提ってことなんだろうけども、
ホムがケミ視野外に出るといっさいの行動ができなくなるから
最低限の追尾は(保険として)必要不可欠になるよ。

909(○口○*)さん :06/04/29 13:18
>>906
AI.luaのOnIDLE_ST()内

if ( distance > 3 or distance == -1) then
 MyState = FOLLOW_ST
 TraceAI ("IDLE_ST -> FOLLOW_ST")
 return;
end

をコメントアウトすればできそう。(コメントアウト:上の全ての行頭に--をつける)
最低限の追尾が必要ならdistance > 3ってなってるところが
3マス以上離れたら追尾って意味だからここの数字変えればよろし。
プレイヤーの視界は15だから9〜13ぐらいがぎりぎりのラインかなー、と思うんだが。

910(○口○*)さん :06/04/29 13:33
>>899
実際に○○秒ってのは判断が難しいところだね
MobのHPもピンキリだから10k超えるような相手だと
ケミ+ホムのパワーじゃ1分以上掛かる場合もあるだろうし
でも、多少挙動不審になるだろうけど○○秒間隔で
敵の周りを移動するのは有りかもね
理想としてはHPSPRの4秒の倍数辺りかね
Move(id1,id2)で敵の背後をとるか
GetDistance2、Move(id,dis)を使って敵を中心に西北東南に移動するようにして
移動毎に○○秒の待機時間を設けてやれば
敵の周りをぐるぐる回りながら攻撃させることが出来るね
欠点は移動するぶん攻撃が手薄になることだけど

911(○口○*)さん :06/04/29 13:43
「どっちの方向に座標ずれしているのか」という判別も問題になる気がする。
たとえば

   ↓実際の座標
□□敵□□ホム
□□□■□□
    ↑クラ上の座標


ってなってスタックしてるとき、この移動方向が←に行けば
スタックは解消できるけど、逆方向の→とか、あるいは上下方向では
解消できない気がする。

とりあえずクラ上の敵座標に向かってやれば
そこまでズレてることもないと思うから問題ないかもしれないけど。

912(○口○*)さん :06/04/29 15:03
スマン、教えて欲しい。
工体AIの設定なんだが

-- SELF_SKILLが発動するSPのパーセント
...SELF_SKILL_PERCENTAGE = 50,
〜略〜
-- スキルをより多く使う際のSPの最低パーセント
...-- この値から SELF_SKILL_PERCENTAGE を引いたものがバースト時のために温存されるSPになるため、
...-- バースト時により多くのスキルを使うには、この値を下げると同時に
...-- SELF_SKILL_PERCENTAGE の値を高くすると効果があります
...SELF_SKILL_BURST_PERCENTAGE = 20,

この二つなんだけど
「この値から SELF_SKILL_PERCENTAGE を引いたものがバースト時のために温存されるSPになる」
という事なので
ホムのSPが1000あったとすると
SELF_SKILL_PERCENTAGE = 50→1000*0.5=500
SELF_SKILL_BURST_PERCENTAGE = 20→1000*0.2=200
200-500=-300
で、マイナス300が温存される?という事なのでしょうか。
それとも、マイナスは考えずに、300が温存される?

実際色々と数値を変更して実験してみると、SELF_SKILL_BURST_PERCENTAGEで設定した数値まで
SPが回復すると、スキルを使っているみたいで。
※上の例だと200までSPが回復するとスキルを使うらしい。

分かっているようで分からなくなってしまって、何方か説明お願いできますか?

913(○口○*)さん :06/04/29 15:16
>>911
ちょこっと動かすだけで解消するから、どこに移動しても大丈夫な気がする
いっそのことMoveToOwnerを定期的に送ってしまうとか

914(○口○*)さん :06/04/29 16:29
ボスにあったらボスに一発攻撃してから飼い主の上を横切って本体だけなすって取り巻き抱えたまま攻撃しないで5セルぐらい離れて動かないで誰かがMVP取ったら通常行動に戻るようにできませんか?

915(○口○*)さん :06/04/29 16:43
>>914
そんな都合のいい命令はない

916(○口○*)さん :06/04/29 16:59
可能
誰も作ってる人はいないから自分で作ればね

917(○口○*)さん :06/04/29 17:03
>>914
意外と間単に作れるよ

ボスにあったらボスに一発攻撃してから飼い主の上を横切って本体だけなすって取り巻き抱えたまま攻撃しないで5セルぐらい離れて動かないで誰かがMVP取ったら通常行動に戻るようする、だけど
ボスに限らず一発だけ殴るIAは作れる。BOSSのIDを予め調べておいてOnATTACK_ST ()でBOSSのIDを取得した場合ケミの座標を通過して後方へ移動し待機状態にする関数を設置しておく
後は誰かがMVP取れば取り巻きは消えるので勝手に通常行動に戻る
だけど、本体だけなすって取り巻き抱えたままってのは無理、殴らないとタゲは取れないのでなする事自体不可
更にBOSS本体だけ殴ってタゲをとっても取り巻き呼び戻しで結局取り巻きも戻ってくる
上のAIで何がしたいか判らないけど、もしACDクリエでソロMVPでも取りたいなら、敵に重ならない&敵から1マス開ける関数にして置けばPPもミスしないし
後はACDしてればOK

918(○口○*)さん :06/04/29 17:06
>>912
普段は500以下だとスキルを使用しない
バースト時は200以下だとスキルを使用しない
で合ってるはず。

で、
>実際色々と数値を変更して実験してみると、SELF_SKILL_BURST_PERCENTAGEで設定した数値まで
>SPが回復すると、スキルを使っているみたいで。
>※上の例だと200までSPが回復するとスキルを使うらしい。

常にバースト状態になってない?
攻撃するときにトレースかけて、"Burst Skill"とか出てたらバースト状態になってるから
バーストの条件を弄るといいよ。

919(○口○*)さん :06/04/29 17:10
>>914
MVP_ST とかいう状態を作って、
MVPボスが横殴りにならない範囲に居たらMVP_STに遷移

ボス(と取り巻き)のターゲットが自分に向くまで攻撃して
こっちにターゲットが向いたら、いろんな人が作っている逃走を使用して逃げる
で、MVPが居なくなったら待機状態に遷移する

というのではだめ?

920(○口○*)さん :06/04/29 17:16
書いてからふと思ったんだけど
ホムがBOSSに与えたダメはどう云う扱いになるのんだろうか…
ホムの与ダメ=ケミの与ダメなら、無理に待機させる必要はないんだよね

921(○口○*)さん :06/04/29 17:20
他PC扱いじゃないの?

と思ったけどMVPボス撃破動画でちゃんと主人の頭上にMVP文字出てたしなぁ。

922(○口○*)さん :06/04/29 17:34
>>910
そうだね。
攻撃が手薄になる、と言う点は、>>899(俺だけど)や>>879>>883を見る限り、
「よそ見中のスタック防止」という目的からすれば容認すべきところだし、

>Move(id1,id2)で敵の背後をとるか
>GetDistance2、Move(id,dis)を使って敵を中心に西北東南に移動するようにして
>移動毎に○○秒の待機時間を設けてやれば
>敵の周りをぐるぐる回りながら攻撃させることが出来るね

これが、解決策として具体的かもね。

923(○口○*)さん :06/04/29 17:41
主人がスタンしたら代わりにタゲとって欲しいんだけど…
なんかいい方法ないですか?

924(○口○*)さん :06/04/29 17:43
>>923
そもそもホムがタゲを取るのって
最初の敵の索敵時だけだし
ノックバックスキル無いと無理だろ

925(○口○*)さん :06/04/29 17:50
ごめん、訂正

羊だけキャスリングで可能(忘れてた)
ただし、スタンを自動検出できないはずだから
任意コマンドを作る必要性がある

926(○口○*)さん :06/04/29 17:53
そのくらい手動でキャスリングすればいいと思うんだが。

927(○口○*)さん :06/04/29 17:58
ホムはばにるみーです。
HP増強cと+7装備してるのにDOPまーちゃんのスタンくらって
全快状態から何もできないまま死亡なんて…orz

928(○口○*)さん :06/04/29 18:32
>>917
MVPは横切るとタゲ移るAI
取り巻きは最初にタゲった人にずっと張りつき死ぬまでタゲはずれないAI
再召喚は画面内にいれば必ず同じ人をタゲりに行く

929(○口○*)さん :06/04/29 18:37
>>927
現状ではホム単体の行動で敵のタゲを取るのは難しい。
主人の状態異常も確認できないから、>>923の要望を叶えることは非常に難しい。

・先行テレポ
・アンソニ服
・狩場変更
ホム頼みをする前に自己防衛も考えては如何か。

930(○口○*)さん :06/04/29 18:44
ありがとう。とりあえずテレポ入れてみます。

931(○口○*)さん :06/04/29 18:46
試した事無いけどmobと重なって攻撃してもタゲ取れない?
取れるなら手動で何か命令すれば出来そう

932912 :06/04/29 19:02
>>918
有り難うございます。
ご指摘いただいた部分などを工体のAIツールで見てみたところ、
色々と分かりました。
 -- SELF_SKILLが発動するSPのパーセント
 :SELF_SKILL_PERCENTAGE = 80
 -- スキルをより多く使う際のSPの最低パーセント
 :SELF_SKILL_BURST_PERCENTAGE = 30,
の他に、その下にある
 -- このレベル以上の敵は強敵モンスターとして認識
 -- 高DEFの敵に対し、通常よりも高確率で魔法を使う
  -- これより高いDEFのMobに対して高確率で魔法を使う
   -- DEF_TOTAL 乗算+減産の合計DEF
この2項目3ヶ所が関係していたようです。

また、サスカッチを実験に試した見たところ
RO公式ガイドに従ってDEF5としていたため、減産DEFの+60が設定されておらず
バースト状態になっていたようです。
減算はRagnarok Managerで調べました。

なんとか理解できそうなので、もう少し色々と弄ってみます。
有り難うございました。

933(○口○*)さん :06/04/29 19:34
つーか、なんでもAIに頼らないで
自分でAltクリックして能動的に動かした方がいいと思うMVPなすりつけとか。

934(○口○*)さん :06/04/29 19:50
SG詠唱開始→ホムを動かして遠くの敵をフィッシング→SGブチ当て

ならやった事ある、多分手動動作ならでは

935(○口○*)さん :06/04/29 22:34
あらゆる事を自動化すると逆に不便になったりすることもある
手動の方が的確に出来るなら無理に自動化することもないと思う

936(○口○*)さん :06/04/29 22:37
ならそれでもいいんじゃないの?
ここは自動化しようと頑張る人たちのスレじゃないの?

937(○口○*)さん :06/04/29 22:41
ここ雑談と要望のスレだから別に意見ぐらい言ってもいいんじゃない?

938(○口○*)さん :06/04/29 22:55
>>914
のあたりの流れを受けてのコメントだったんだが、
個人的には>>914の挙動は全てを自動化するのって逆に不便じゃないかと思ったわけだ。
不便っつか、状況次第で色々と工夫しなきゃならないことが多いと思うMVP戦で
一定の動作しかしないようでは思い通りの結果が得られない可能性が高い。
特に>>914のケースは競争相手とかが居ない場合だと思うけど、
他PCの介入を想定するとホムに予め予告しておきたい事項はキリがなくなってくるんじゃないかな?

そりゃあ自動化できれば楽なことの方が多いと思うよ。
でも何でも自動化すりゃいいってもんじゃないってことはあるし、
設計前に色々と考えていくことが大事だと思うんだ。

939(*○口○)さん :06/04/30 00:33
>>925,926
ケミがスタンした時、ホムってスキル使えたっけ?

940(○口○*)さん :06/04/30 01:19
手動は試してないけど、オート使用の月光は発動してた気がする。
まぁハイド中でも使えるってんだから、たぶん主人が座ってたり露店チャット中でさえなければ
状態異常は関係なく行動するなじゃないかな。

941(○口○*)さん :06/04/30 10:33
自動化できても処理がハンパなく重くなったり
動きがぎこちなくなったり、他の処理と競合したりと不都合もあるかな。

942(○口○*)さん :06/04/30 14:17
ホムが弓系(遠距離型)モブとかにタゲられた時に、
弓系モブを優先的に倒したいんですが…、そういうのって可能なんでしょうか?
今のところだとホムの側にいるものから順に倒していく感じです。

もしよろしければご教授お願いします。
一応使っているAIは0マテのです。

943(○口○*)さん :06/04/30 14:25
敵をえらんで攻撃さすなら工体研究所のを使うんがいいんじゃないかな?
慣れるまで設定が大変だけど、優先順位とかの設定が出来るのは便利だね。
特定の敵に全力でスキルを使うってのもできるよ。

944(○口○*)さん :06/04/30 14:37
即レスありがとうございますー
さっそく調べてみますね(´・ω・`)

945(○口○*)さん :06/04/30 16:19
LUAの仕様がよくわからん
Cが使えるとか書いてあるけど、ソースファイルのままでいいんかいな?
それともDLLとかにコンパイルせなあかんのかいな?

ところでLUAって本屋で本買ってまで覚える必要あると思う?

946(○口○*)さん :06/04/30 16:27
>>947
やっぱりそうか。ありがとう。
その通りにやってみることにするよ。

947(○口○*)さん :06/04/30 16:39
次スレ作成は970、980くらいまで待って、そろそろどうするか話し合おう。
語るスレといっしょにして良いのかとか、テンプレをどうするとか。

948(○口○*)さん :06/04/30 16:40
うはwwwボケ忘れたwww>>946スマンwwww

949(○口○*)さん :06/04/30 17:15
>>945
DLLが読める。けどROでは殺されてるから無関係。

Luaの本はProgramming in Luaぐらいしか知らない。
日本語のものはないかも。

ROのAIいじり程度なら、Luaはリファレンス邦訳程度で十分かな。
C書けるようだから、それを「翻訳」する気持ちでなんとかなる。
アルゴリズムの本買ってしっかり勉強した方がよほど役に立つよ。

>***って本屋で本買ってまで覚える必要あると思う?
CだろうとJavaだろうと、この質問には「必要は無い」としか答えられない。
本当に必要がある人は、こんなこと聞かないと思うから。

>>947
>>905もアイシテ。
あと統合不要に一票。

950(○口○*)さん :06/04/30 19:24
統合不要1票。

スレのタイトル判りにくいよね。
ホムンクルスAI 雑談・要望スレ
ホムンクルスAI 開発スレ
な感じにしない? 特に、向こうのスレをw


あと、テンプレ案

スレタイ:ホムンクルスAIについての雑談・要望スレ
//--------------------------------------------
このスレは、質問や要望、思いついたアイデアなどに関して雑談するスレです。
AIプログラムを作成している方が具体的な質問やアイデア提案などをする場合は
「AIを語るスレ」にお願いします。

質問をする場合は、礼儀として
 ・過去ログの確認
 ・状況を伝える努力
は最低限行ってください。

守らない悪ケミ子は、ばにるみーが触手で御仕置きだ!
  ヘヘ
 | ̄ ̄ ̄|
∠|_( ゚Д゚)ゝ <おしおきだべ〜

951てんぷれ案つづき :06/04/30 19:25
■前スレ
ホムンクルスAIについての雑談・要望スレ
http://enif.mmobbs.c#

■関連スレ
ホムンクルスのAIを語るスレ その4
http://enif.mmobbs.com/test/read.cgi/livero/1143193717/
アルケミスト・クリエイター情報交換スレ第74巻
http://gemma.mmobbs.com/test/read.cgi/ragnarok/1145961114/

■テンプレサイト
アルケミスレテンプレサイト
http://cgi.f31.aaacafe.ne.jp/~alchemi/pukiwiki.php?

■AI配布サイト
▼入門者向け
くま○〜@ガルムのAI 通称:くまAI
ttp://www.kmzw.jp/nb/ai/
▼初心者向け
0-material 通称:ぜろまてAI
ttp://www.kogarashi.jp/0-material/
PrivateMoon 通称:こっこAI
http://privatemoon.sakura.ne.jp/
▼中級者向け
Winter's Tale 通称:韓国AI
ttp://www.sgv417.jp/~winter/
▼上級者向け
工体研究所 通称:工体AI
ttp://blog.livedoor.jp/aidev/
//--------------------------------------------

はっ!スレタイに その2を入れ忘れた。脳内補完発動で!
まぁ、こんな?修正ヨロ!

952(○口○*)さん :06/04/30 21:47
二つに分けるんだったら1個目に
関連スレ、サイトへのリンクは>>2
っているかな。
ばにるみーの上あたりに。

953(○口○*)さん :06/05/01 01:23
なぁなぁ
パトロールはどうしたらできるん?
Alt+Tで待機なのはわかるんやけど・・・

954(○口○*)さん :06/05/01 01:40
質問がよくわからないから逆に質問
パトロールってどういう状態の事?
使ってるAIは何?

955(○口○*)さん :06/05/01 01:49
>>953
未実装。

>>954
AIマニュアルPDFとConst.luaに定義されてる。

956(○口○*)さん :06/05/01 01:50
ぜろまてのことかとオモタ

957(○口○*)さん :06/05/01 01:53
>>955
そか。さんくー(´・ω・`)

958(○口○*)さん :06/05/01 01:56
あ〜そういう名前の機能が存在してるんだ
それ実装されれば何する機能なの?

959(○口○*)さん :06/05/01 02:03
二点間を行ったり来たり、のロジックが入ってるって言った人が
ホム実装直後にいたようないなかったような。

960(○口○*)さん :06/05/01 02:30
つまり今どきどきAIとかでやってるくるくる動作に近いものが
デフォで組み込まれる予定だったってことかな。

961(○口○*)さん :06/05/01 08:15
標準AI内に入っている「パトロール」は、以下のような挙動をします。

・ユーザーからの「位置指定」で開始。
 (ただし、その指定方法は実際にはないため、動作することがない)
・「現在のホムの位置」と、上記の「指定位置」を記憶。
 この2点の間を往復する。
 ユーザー操作や敵出現がないかぎり、いつまでも往復を繰り返す。
・近くに「ケミorホムを狙う敵」がいると、それに対して戦闘開始。
 戦闘終了後は(普通の戦闘同様)IDLE状態になる。

962(○口○*)さん :06/05/01 12:04
テンプレに>>45あたりと
ホムに出来ること
・移動
・通常攻撃
・スキル使用
・ホム自身、主人ケミのHP、MHP、SP、MSPの取得
・画面内の全員の座標、モーション、ターゲット※1、種類※2の取得
(※1ターゲットは1度攻撃が見えるまで取得できない。攻撃を止めてもそのままになる不完全仕様)
(※2種類の取得は現状バグなのか正しい仕様なのか判別不可能)
ほかの事をさせたければ上記の組み合わせで作る必要有り。

あとはたびたび質問でてるホムに送れる命令
Alt+T、地面をAlt+右、敵をAlt+右x2、地面をAlt+Shift+右、敵をAlt+右x2

963てんぷれ案 :06/05/01 13:49
ホムンクルスAIについての雑談・要望スレ その2

/--------------------------------------------

このスレは、質問や要望、思いついたアイデアなどに関して雑談するスレです。
AIプログラムを作成している方が具体的な質問やアイデア提案などをする場合は
「AIを語るスレ」にお願いします。

質問をする場合は、礼儀として
  ・過去ログの確認
  ・状況を伝える努力
の2点は最低限行ってください。

守らない悪ケミ子は、ばにるみーが触手で御仕置きだ!
  ヘヘ
 | ̄ ̄ ̄|
∠|_( ゚Д゚)ゝ <おしおきだべ〜

関連スレ・サイトは>>2、良くある質問は>>3

964関連スレ・サイト案 :06/05/01 13:50
■前スレ
ホムンクルスAIについての雑談・要望スレ
http://enif.mmobbs.c#

■関連スレ
ホムンクルスのAIを語るスレ その4
http://enif.mmobbs.com/test/read.cgi/livero/1143193717/
アルケミスト・クリエイター情報交換スレ第74巻
http://gemma.mmobbs.com/test/read.cgi/ragnarok/1145961114/

■テンプレサイト
アルケミスレテンプレサイト
http://cgi.f31.aaacafe.ne.jp/~alchemi/pukiwiki.php?

■AI配布サイト
▼入門者向け
くま○〜@ガルムのAI 通称:くまAI
ttp://www.kmzw.jp/nb/ai/
▼初心者向け
0-material 通称:ぜろまてAI
ttp://www.kogarashi.jp/0-material/
PrivateMoon 通称:こっこAI
ttp://privatemoon.sakura.ne.jp/
▼中級者向け
Winter's Tale 通称:韓国AI
ttp://www.sgv417.jp/~winter/
▼上級者向け
工体研究所 通称:工体AI
ttp://blog.livedoor.jp/aidev/

965良くある質問案 :06/05/01 13:51
▼Q.配布されているカスタムAIを使うには?
▲A.以下の手順となります。
  1.ROのインストール場所にある「AI」フォルダに「USER_AI」フォルダを作成
    (例:C:\Program Files\Gravity\RagnarokOnline\AI\USER_AI)
  2.作成した「USER_AI」フォルダに配布されているAIをコピー
  3.RO内で「/hoai」コマンドを実行した後、ホムを呼び出す

▼Q.AIでホムにできることは?
▲A.以下に挙げたこと以外はできません。空腹度・新密度取得やエモーションは不可です。
  ・移動
  ・通常攻撃
  ・スキル使用
  ・ホム自身、主人ケミのHP、MHP、SP、MSPの取得
  ・画面内の全員の座標、モーション、ターゲット※1、種類※2の取得
   (※1ターゲットは1度攻撃が見えるまで取得できない。
     攻撃を止めてもそのままになる不完全仕様)
   (※2種類の取得は現状バグなのか正しい仕様なのか判別不可能)

▼Q.ホムに送ることのできる命令(トリガー)は?
▲A.基本は以下の5つのみです。
    Alt+T、地面をAlt+右クリ、敵をAlt+右クリx2、
    地面をShift+Alt+右クリ、敵をShift+Alt+右クリ
   他は移動命令や主人の座り状態を組み合わせて工夫するしかありません。

▼Q.AIでホムにスキルを使わせるためのスキルIDは?
▲A.以下となります。
SKILL_TOUCH_OF_HEAL = 8001 -- リーフ 治癒の手助け
SKILL_EMERGENCY_AVOID = 8002 -- リーフ 緊急回避
SKILL_CASTLING = 8005 -- アミストル キャスリング
SKILL_DEFFENCE = 8006 -- アミストル ディフェンス
SKILL_MOONLIGHT = 8009 -- フィーリル ムーンライト
SKILL_FLEET_MOVE = 8010 -- フィーリル フリットムーブ
SKILL_OVERED_SPEED = 8011 -- オーバードスピード
SKILL_CAPRICE = 8013 -- バニルミルト カプリス
SKILL_CHAOTIC_VENEDICTION = 8014 -- バニルミルト カオティックベネディクション

▼Q.その他のFAQは?
▲A.AlchemyNote−ホムンクルス基礎で確認を!
ttp://www15t.sakura.ne.jp/~privatemoon/alc/

966(○口○*)さん :06/05/01 13:55
( ´Д`)'`ァ '`ァ

こんな感じ?テンプレでかすぎ?
修正ヨロシク

967(○口○*)さん :06/05/01 14:03
配布サイトはケミWikiのAI研究室にあるし、スキルIDとかもそっちに書かれてればいい気がする。
Wikiの充実でテンプレの軽量化を目指すべきじゃないか?

968(○口○*)さん :06/05/01 17:26
ホムに送れる命令(Alt+Tとか)がどのコマンド?(メッセージ?)に対応してるかも書いてくれた方がいいなー

969(○口○*)さん :06/05/01 17:37
モンスターのIDが載ってるサイトとかって、ありませんかね?
一応、アテナサーバーの中にあるIDを調べてみてみたら、
こんな感じになったのですが。
バイオプラントのIDが合っているのであれば、
多分他のも合ってそうで、調べながら出来るのかな、と。
IDが、同じMOBで2個以上あるのが、謎なんだが。

--------■バイオプラント、スキルによる召喚■--------
MonstarLibrary[1] = 1579 -- ヒドラ、バイオプラントLv1
MonstarLibrary[2] = 1589 -- マンドラゴラ、バイオプラントLv2
MonstarLibrary[3] = 1575 -- フローラ、バイオプラントLv3
MonstarLibrary[4] = 1555 -- フェアリーフ、バイオプラントLv4
MonstarLibrary[5] = 1590 -- ジオグラファー、バイオプラントLv5
MonstarLibrary[6] = 1142 -- マリンスフィアー、スフィアーマイン
--------■崑崙ダンジョン1F■--------
MonstarLibrary[11] = 1510 -- 人面桃樹
MonstarLibrary[12] = 1550 -- 人面桃樹
MonstarLibrary[13] = 1408 -- パピヨン
MonstarLibrary[14] = 1526 -- パピヨン
MonstarLibrary[15] = 1417 -- チャッキー

970(○口○*)さん :06/05/01 17:47
GetMsgで取得できるメッセージ
Alt+T      :1FOLLOW_CMD、2以降なし
地面Alt+右   :1MOVE_CMD、2X座標、3Y座標、4以降なし
敵Alt+右    :1ATTACK_OBJECT_CMD、2対象ID、3以降なし
対象指定スキル :1SKILL_OBJECT_CMD、2スキルレベル、3スキルID、4対象ID、5以降なし

GetResMsgで取得できるメッセージ
地面Alt+Shift+右 :1MOVE_CMD、2X座標、3Y座標、4以降なし
敵Alt+Shift+右  :1ATTACK_OBJECT_CMD、2対象ID、3以降なし
こんなところ?

971(○口○*)さん :06/05/01 17:51
>>969
パ ン ド ラ の 箱 は 開 け ん な 。

972(○口○*)さん :06/05/01 17:52
>>969
MobIDなんて超既出。つーかエミュは帰れ。

973(○口○*)さん :06/05/01 18:00
Shift+Alt+TとShift+スキルで
GetResMsg取得できたっけ?
誰か検証よろ(逃

974966 :06/05/01 22:29
>>967
配布サイトの詳細はテンプレサイト見てもらうとして、
よく話題に上がるから、配布サイトはあったほうがいい気がする。

スキルIDのほうは、WIKIとかにあればアドレスで済ませたかったんだけど
書いてあるサイト見つからなかったんだよね。
誰かテンプレサイト充実させておくれよ。

>>970
そこまで、詳しく書く必要あるかなぁ。
つーか、それ増やすとテンプレが4レスになってしまう!
これもテンプレWIKI行きだよね。誰かヨロ!

975(○口○*)さん :06/05/01 22:49
>>974
>誰かテンプレサイト充実させておくれよ。

思いついた人間が更新できるようにwikiになってるんだとおもうぞ
携帯ならしょうがないが。

976(○口○*)さん :06/05/01 23:17
>>974
乙。
wikiが充実することを期待して、ばっさり削除でいいと思う。

>>975
たとえ正論でも、この状況で>>974にそれを言うのはただの甘え。

977(○口○*)さん :06/05/01 23:19
別に>>975は甘えでもなんでもないと思うが。

978(○口○*)さん :06/05/01 23:40
>>977は誤解してるようすw

979966 :06/05/02 00:23
あー残りレス少ないんだからもったいないー

ここみたいなスレとか、WIKIっていうのはできる人が
協力してやるのがあるべき姿だと思うんだ。
自分で言うのもなんだけど、テンプレ時間かけて練ってるのに
WIKIまでっていうのは正直負担。

いや、>>975さんもそんなに悪気無いと思うけど一応さ。
ただ、何もやらずに「誰かやって〜」っていうのは、
「お前がやれよ!」で良いと思うんだけど、
そういう奴はやらないから、レスするだけ無駄なんだよね。

と、いうわけで今回はWIKIのFAQに追加してきたよ( ´Д`)'`ァ '`ァ
以前にWIKIのAI配布サイトの修正もやらせているので、
AIページの大半の体裁がかなり俺っぽくなってるかもしれん。
いいのかしら?

とりあえず、テンプレ案をWIKIの追加に合わせて修正しよっと。

980(○口○*)さん :06/05/02 00:51
テンプレWIKIにつくっておけばいいじゃん

981テンプレ案 :06/05/02 00:52
このスレは、質問や要望、思いついたアイデアなどに関して雑談するスレです。
AIプログラムを作成している方が具体的な質問やアイデア提案などをする場合は
「AIを語るスレ」にお願いします。

質問をする前には、最低限『過去ログの確認』や『状況を伝える努力』をして下さい。

守らない悪ケミ子は、ばにるみーが触手で御仕置きだ!
  ヘヘ
 | ̄ ̄ ̄|
∠|_( ゚Д゚)ゝ <おしおきだべ〜

■AIに関して、良くある質問は「Alchemist_TemplateのFAQ」に。
http://f31.aaa.livedoor.jp/~alchemi/pukiwiki.php?%A5%DB%A5%E0%A5%F3%A5%AF%A5%EB%A5%B9%2FLua%2FAI#content_1_4
■ホムに関して、良くある質問は「AlchemyNote−ホムンクルス基礎」に。
ttp://www15t.sakura.ne.jp/~privatemoon/alc/

■前スレ
ホムンクルスAIについての雑談・要望スレ
http://enif.mmobbs.c#

■関連スレ
ホムンクルスのAIを語るスレ その4
http://enif.mmobbs.com/test/read.cgi/livero/1143193717/
アルケミスト・クリエイター情報交換スレ第74巻
http://gemma.mmobbs.com/test/read.cgi/ragnarok/1145961114/

■テンプレサイト
Alchemist_Template
http://cgi.f31.aaacafe.ne.jp/~alchemi/pukiwiki.php?

■AI配布サイトは「Alchemist_TemplateのAI配布サイト」を。
http://f31.aaa.livedoor.jp/~alchemi/pukiwiki.php?%A5%DB%A5%E0%A5%F3%A5%AF%A5%EB%A5%B9%2FLua%2FAI#content_1_2

982(○口○*)さん :06/05/02 01:56
こんなで感じで良いかなっと。
適当に修正ヨロ

くまAIのツールの新しいのが配布サイトの掲示板にアップされてるよ〜
と言おうと思ったら、サイト自体見れなくなってる・・・
オリジナルドメインぽいから、鯖おちたかな。ぎりぎり落とせたみたいだ。

新ツールは敵登録がいい。
敵をLvとかFLEEとかHITとか属性とかで、ソートできるようになってて
攻撃しない敵を簡単にフィルタリングできる。
あとは、共闘登録とかメモが入れられるようになってたりしてるけど、
こっちは、あんまりつかわなそう。

くまAIツールって、Config.lua吐き出すだけみたいだから、
Config.luaだけ流用して、AI.luaは自分の奴とかいいかもしんない。

983(○口○*)さん :06/05/02 01:59
>Config.luaだけ流用して、AI.luaは自分の奴
それはひょっとしてギャグで(ry

984(○口○*)さん :06/05/02 04:44
言いたいことはなんとなくわかるが

くまAIベースにして自分好みに弄るだけでよくね?

985(○口○*)さん :06/05/02 14:56
くまAIの最新テスト版?の今後にwktk
GUIで友達登録、mob登録できるのはかなりいいね。
/traceaiじゃなくてプレイ中のALT+SHIFT+右クリックで一時的に登録してるのを
そのままリストに追加して適用できるボタンがあればもっといいな。
まあどうせROからフォーカス外してツール起動するから
/traceai→検索→コピペ→適用でもあんまり変わらないか

あとは先行型以外でも登録mobには接近・反撃しない(手動は可)ってのと
砲台モード、一撃離脱の共闘モードができればいうことなしだね

986(○口○*)さん :06/05/02 15:03
ああ、あと登録mobごとに砲台か忌避か指定できるといいなあ
夢が無責任にひろがりんぐ

987(○口○*)さん :06/05/02 17:40
>>985>>986
横から更に欲を言えば、登録mobごとの…

全力攻撃モード
攻撃優先グループ登録
攻撃スキル不使用グループ登録
登録mobのみ適用されるHP低下時逃亡

ついでに、
HP低下での逃亡時、逃亡パターンの設定(円軌道、後方待機、待機等。半径、距離指定可)
旋回行動開始の条件指定(休戦状態、索敵状態)
ケミ、ホムのHPから、敵攻撃時ケミ優先かホム優先か指定
詠唱妨害の可否指定
エサやりからn秒経過すると特定行動を行う、おねだりモード(円軌道、∞軌道、停止等)
停止から移動する際に、停止時n秒経過していたら、SPR発動まで待機するSPR発動待ちモード
機能を最小限に抑えたASPD重視モード

あと、これは工体もなんだけど、支援スキル使用タイミングを、常時or交戦開始時で設定できるといいなぁ…。
…もうすぐ次スレなんで好き勝手書き散らしてみた。

988(○口○*)さん :06/05/02 19:03
いちおーつっこみ。
上記にあるものの多くはどれもその気になればできそうだけど、1つだけ無理。

>エサやりからn秒経過すると特定行動を行う、おねだりモード(円軌道、∞軌道、停止等)

これ。
餌をもらったというのがAIからわからないので、何か他の方法で
「餌をあげた」ってのをAIに教えないと実現不能。

SPR待ちは実用的に意味があるし面白そうなので、うちのAIでもちょっと考えてみるわ。
いいネタさんくす(笑)

989(○口○*)さん :06/05/02 19:11
>>988
自作で実装してます。(が、新密度MAXになってから機能オフのまま・・・)

仕様は10分ごとに円軌道。円軌道を止める場合はケミのセルをALT右クリック。
「餌をあげた」ことを通知する行為はユーザに何らかのアクションを要求するものなので、
餌は「貰ったものとみなす」のがいいです。

最初はおねだり停止で再設定にしてましたが、時間が少しずつずれるのでオヌヌメしない。
機能オフにするときはグローバル変数でフラグ書き換えて安息コールホム。

どっちにしても街中でしか使えない機能です。
狩りの最中に被弾しながら回りだしたときは吹いた。

990(○口○*)さん :06/05/02 20:56
寝落ち対策にクライアント落とすってのはあるんですが、自動でケミに安息を使わせてホムだけ引っ込ませることは出来ないんですか?
溜まり場で会話してるとき、落ちると困るので

991(○口○*)さん :06/05/02 21:03
AIスレではケミの行動制御は基本的にタブー

992(○口○*)さん :06/05/02 21:06
>>990
イクラして貰うと良いねェ

993(○口○*)さん :06/05/02 21:14
そうか自動的にイクラさせて、そのイクラに一発入れてから
イクラについていくAIにすれb(鯖缶

>>990
いちおう言っておくけど、露店中だとそのまま泣き出す。

994(○口○*)さん :06/05/02 21:28
>>990
>>991ってのもあるが、基本的にそういうのが役に立つのって

・露店で寝落ち
・たまり場で座ったまま寝落ち
・買いチャ中に寝落ち

とかそういう状況が多いと思う。
んで、上記の場合安息スキルはAIで指定したところで使用不可能であるので無意味。
クラごと落とすのが一番確実って話だ。

995(○口○*)さん :06/05/02 21:30
うーんここでいいのかな?

普通にホム作って、壁してレベル上げてるん(くまーAIで臨戦、非先攻)ですが、
敵をケミが殴ってタゲを取っても、ホムが殴ってくれないときがあります。。なんとなく位置の関係かも?

これはAIいじってなんとかなるもんでしょうか?

まあちょっと動いて位置調整すればいいだけではあるんですがね。
なんとかなるならなんとかしたいと思いまして。

996(○口○*)さん :06/05/02 21:44
それはここでよく言われてるスタックのことだと思う。
とりあえず現状これといっていい解決策はあんまり無い。

気になったらこのスレを「スタック」でキーワード検索して調べてみるといいよ。

997(○口○*)さん :06/05/03 00:32
テンプレとくに問題なさそうなので、
次スレ立ててきまっす。

998次スレ誘導 :06/05/03 00:46
( ゚∀゚)つ[次スレ]

ホムンクルスAIについての雑談・要望スレ その2
http://enif.mmobbs.com/test/read.cgi/livero/1146584661/

999(○口○*)さん :06/05/03 00:48
乙! ギリギリだったが立ってよかったよかった

              踏み台

               _д_

1000(○口○*)さん :06/05/03 00:57
   __лл_
  _|。・ω・|_ 埋めゼリー

10011001 :Over 1000 Thre
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。