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

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

1テンプレ :06/05/03 00:44
このスレは、質問や要望、思いついたアイデアなどに関して雑談するスレです。
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/hom_100.html

■前スレ
ホムンクルスAIについての雑談・要望スレ
http://enif.mmobbs.com/test/read.cgi/livero/1142513331/

■関連スレ
ホムンクルスの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

2(○口○*)さん :06/05/03 02:03
2げと?

3(○口○*)さん :06/05/03 02:43
AIが止まらない

4(○口○*)さん :06/05/03 16:56
4ゲット&さっそく質問です。

モンスターの種類によって攻撃する優先順位ってどうやってやるんでしょう?
工体AIでできるって話を聞いたんだけど…難しすぎてよくわかんないし;
ailib.luaにあるとは思うのですが。
もしわかる方いらっしゃれば、ヒントでもいいのでお願いします…

5(○口○*)さん :06/05/03 17:23
>>4
工体の最新AIを使ってるなら、config.luaの書き換えだけでいいはず。
「MONSTER_PRIORITY」で検索をかけて、
『MONSTER_PRIORITY = { ANY_ID },』
を変更すればいい。
例はすぐ上に書いてあるからそれを参照すること。

6(○口○*)さん :06/05/03 17:40
>>5
ありがとうございます、さっそく調べて勉強してみますー(`・ω・´)
工体むずかしー;;

7(○口○*)さん :06/05/03 17:52
工体は難しいのが難点。

8(○口○*)さん :06/05/03 18:30
内容自体はそう難しくないんだけどね。
設定できる項目が多いだけに、「どこを変更すればいいのか」が分かりにくいってのはあるかも。
まあ、自分でいろいろやってみてそれでもわからなければこのスレで聞けばいいんだしね。

9(○口○*)さん :06/05/03 19:01
そろそろ友達登録の方法が解らない奴が出てきそうだ。

10(○口○*)さん :06/05/03 19:07
工体と言えばですが、
このたびケミに転職できまして、
いいAIないかなーと色々見てたわけなのですが、
この工体AI、お恥ずかしながらこれを変更するならどこを……とか言う前に、
根本的に設定の変更の仕方からいきなり分からないのですが、
これは>>5から察するに、config.luaをメモ帳かなんかで書き換えれば色々設定できるって事でいいんでしょうか?

11(○口○*)さん :06/05/03 19:14
まずは設定項目の少なめのくまーあたりで始めて、
書かれてることをおぼろげながらでも読み取れるようにした方が良いと思われ。

12(○口○*)さん :06/05/03 19:32
現在はくまー使用中で、これはなんとか分かりました。
が、この辺は変更用のアプリケーションがあったので、楽に設定できただけかも知れません。

というかこのプログラム言語の動作の仕方から分からないのです。
と言っても、分からないから……で放っておくつもりもないので色々調べた結果……。
多分config.luaを編集すればよさそう……かな?と言うところまで分かりました。

で、実際に工体のconfig.luaを開いてみたのですが……。
まあ正直分からない所もありますが、説明も書いていただいてるので大体なんとなく分かりました。

でもそもそもこれいじるのであってるのかな、変な事になったら怖いなあと思って質問させていただきました。


で、ここまで書いて、くまーの方はConfig.luaを書き換えてるじゃないかと気づいた……。

すいません、アプリに頼りすぎですね、工体もぼちぼち使って行こうかなっと。

13(○口○*)さん :06/05/03 20:09
いま動いてるAIを全ファイルバックアップしてからいじれば、
すぐ元に戻せるので好きなだけいじってください

14(○口○*)さん :06/05/03 20:19
へたに「書き替えたファイルだけ元に戻せればいいや」とか
考えると、他のファイルと整合性とれなくなるから、
自信ない人は何か書き替える前にUSER_AIの中身すべてバックアップして、
何代分かは取っておくといいよ。

ついでに外部記憶媒体にでも保管してりゃ尚よし。

15(○口○*)さん :06/05/03 21:09
外部記憶はネカフェ組には必須だな
落としたAIそのまま使ってるにしても設定めんどくさいし

16(○口○*)さん :06/05/04 07:25
工体AIのroaiplus.js のを落としてみたのですが
開こうとするとドリームウェーバーが起動してソースの表示になってしまうです。orz
何がいけないんだろう・・

17(○口○*)さん :06/05/04 07:44
>>16
何がいけないかといえば、DWの関連づけがいけない。

jsファイルをその場に右ドラッグ→ショートカット作成。
ショートカットのプロパティから、ショートカット - リンク先の先頭にwscriptを追加して
wscript c:\〜\roaiplus.js
という形になるようにする。(パスに半角空白を含むならwscript "c:\〜\roaiplus.js")
ついでにショートカットの名前もそれっぽいのに変えれば動くはず。

つーかwsf形式使おうよ。>工体の人

1816 :06/05/04 08:04
>17
ありがとうございました。
階層ちがったからかそのやりかたで出来なかったんですが
wscript.exeをプログラムから選択したらできました。

19(○口○*)さん :06/05/04 22:09
くまーAIもいまいちよくわからないので
こっこAIをそのまま使ってます。

20(○口○*)さん :06/05/04 22:25
どう分からないのか書き込めば答えてくれる人もきっといる

21(○口○*)さん :06/05/05 01:04
わからないという人は、わかろうとしているかどうか疑問。

22(○口○*)さん :06/05/05 01:23
愚痴を聞いてください〜 もう少し〜♪
なんにも 分からな〜い わかりたくない〜♪

23(○口○*)さん :06/05/05 01:33
くまーAIツールいいね。
でも自分で召喚したジオにヒールもらうと猛然と殴りにいってしまう。
これはどうしようもないのかな…

24(○口○*)さん :06/05/05 01:55
先行で?非先行で?
くまーってプラントを攻撃対象にするかどうかのチェックがあったとおもうけど、
それをつけた上で、だよね。

もしつけた上で詠唱反応するのなら、そこらへんは自分で書き換えないと
どうしようもないかもね

25(○口○*)さん :06/05/05 02:12
ああ、非先行にはプラント無視ロジックないのか。
ケミがタゲられたら、っていう条件もないから>>23の原因かどうかは知らないけど。

26(○口○*)さん :06/05/05 02:13
>>24
非先行で臨戦。
プラント除外チェックも個別に登録も両方やってみたけどだめだった。
これらはただ発見時に殴りにいかないだけで、攻撃されたら反撃はしちゃう。
反撃もしない無視設定ってのはできないっぽい。

27(○口○*)さん :06/05/05 02:26
>>25に書いたように、プラントチェックは先行型のロジックにしか搭載されてないから
そこの部分をごっそりと非先行にも取り入れればいいとおもう。

なんか非先行のほうがめんどっちい組み方してるから、入れる位置には気を使わないと
いけないけど。

つまりは設定変えただけじゃどうにもならんよ、と。AI.lua書き換えないと。

28(○口○*)さん :06/05/05 02:28
ID調べてプラントだったら無視フラグをYESにして、
それぞれ敵リストを配列に追加する部分で、
無視フラグが立っていなければ配列に追加、という風に
変えてあげればいいと思うよ

29(○口○*)さん :06/05/05 02:30
>>19-21
「雑談」スレだし、いいんじゃない?

>>26
ヒールによるジオ誤認は盲点だなぁ。非先攻(反撃)AIならではというか。

くまーの人もここ見てるはずだから大丈夫だろうけど、
BBSに書いてきた方がよさそう。

>>27-28
オマエラなんで改造前提なんだw

30(○口○*)さん :06/05/05 02:31
それでも反撃してしまうなら、
・ケミをタゲってる敵を対象にする
・ホムをタゲってる敵を対象にする
というのがどこか別にあるはずだから、そこで除外してあげればいいとおもうね。

31(○口○*)さん :06/05/05 02:33
>>29
>オマエラなんで改造前提なんだw

ごめんねそれどっちも俺
このスレ的な回答としては、改造しないと無理だから。
くまーの人にお願いする、ってのは個人で働きかける分にはいいだろうけど。

32(○口○*)さん :06/05/05 02:34
まぁ作者わかってるなら本人のページで直訴したほうが早いと思うけどね

33(○口○*)さん :06/05/05 02:37
あ、それと、くまーをデフォのまま使ってる人なら、くまーBBSでお願いして見るのも
手だろうけど、くまーを元に結構手を入れちゃってる人とかだと、
場合によっては改造したほうが楽だから。

34(○口○*)さん :06/05/05 02:38
つってもGetEnemyAだけ移植すればいい話か。

35(○口○*)さん :06/05/05 02:53
なんにせよ、くまーの人に、いちいちユーザの要望聞き入れる義務があるわけじゃないしな。
いい人だから対応してくれてるだけであって。

それに、開発元が対応するにしろ、ユーザが独自に対応するにしろ、
今回の問題についてはAI改造前提なんだから、改造の方針は
明確にしといたほうがいいだろ。万人にとって。

36(○口○*)さん :06/05/05 09:39
個人色の強い要望ならそれでいいんだけど、今回のは配布AIの不具合の可能性が高い。

先行モードにのみプラント無視設定が存在しているというのは、
非先攻AIは「プラントは決して主人を攻撃しない」前提があるから
プラント対策そのものが不要と判断したと予想できる。
実際にはヒールという「攻撃」があったから、多くの人が望まないような結果になった。

文章からは>>26が自力改造する(できる)レベルかわからないこともあったから、
素直にサポート受けておけって返答をした。

>>33,35のスタンスは語るスレならわかる。
でもここは雑談スレ。不具合まで自分でコード書いて直せは厳しすぎる。
それともそんなに敷居の高いスレにしたいの?

口だけなのもあれなんで、くまーAIも見ずに応急処置コードを書いてみる。
ホムAPIそのものをいじって、プラントなIDの存在をホムから見えなくさせる。
AI.lua末尾に追記。動作未確認。
あんまりお行儀よくない&非効率的なので、あくまで応急処置で。
do
local _getactors = GetActors
local IgnoreType = {[1555]=true, [1575]=true, [1579]=true, [1589]=true, [1590]=true}
function GetActors()
local actors = _getactors()
local result = {}
local i = 1
for _,v in ipairs(actors) do
if IgnoreType[GetV( V_HOMUNTYPE, v)] then
break
end
result[i] = v
i = i + 1
end
return result
end
end

37(○口○*)さん :06/05/05 09:42
break間違えた…。しかもnextがない。orz

> for _,v in ipairs(actors) do
>  if IgnoreType[GetV( V_HOMUNTYPE, v)] then
>   break
>  end
>  result[i] = v
>  i = i + 1
> end

for _,v in ipairs(actors) do
if not IgnoreType[GetV( V_HOMUNTYPE, v)] then
result[i] = v
i = i + 1
end
end
に変更お願い。

38(○口○*)さん :06/05/05 09:49
>>29
>「雑談」スレだし、いいんじゃない?
いいとは思うけど、普通に聞けば教えてもらえる解決策を教えてもらえないまま雑談に終わっちゃうから
他に同じ悩みを持ってる人もいるしあんまり良い方向とはいえないねー

改造しか方法がないなら改造で
というか、設定ファイルの書き換えと変わらないレベルだしね
アルゴリズム新しく加える必要があるようなものなら語るスレへの誘導か
誰かが作ってあげれば良い

でも、それで終わらせずに作者さんへの報告も忘れずに
搭載されるかどうかは作者さん自身の判断だけど
過去このスレのアドバイスでくまーAIのもっさりが解消された例もあるしね

39(○口○*)さん :06/05/05 10:48
>>36-37
無事動作確認OKです。ありがとうございました。
くまAIのAI.luaの末尾に以下を追加しました。

do
local _getactors = GetActors
local IgnoreType = {[1590]=true}
function GetActors()
local actors = _getactors()
local result = {}
local i = 1
for _,v in ipairs(actors) do
if not IgnoreType[GetV( V_HOMUNTYPE, v)] then
result[i] = v
i = i + 1
end
end
return result
end

ヒールするジオのみが問題だったので他のプラントのIDは削りました。

40(○口○*)さん :06/05/05 10:50
>>36
コード書いて直せ、じゃなくて、コードを修正する or 修正してもらうしか
対処法はない、ってことだろ

人によってはその対処法を知りたい人間もいるんだし、いいんでないかい
直せないと分かれば自分でBBSとかにお願いにいくだろ。

というか、そこまで(設定だけじゃ直せない、でなく、設定では直せないからくまーBBSに書いて来い)
言わないといけないのか

41(○口○*)さん :06/05/05 10:53
ごめんなさい間違えてました。
>>39の retuern result の下は

end
end

でした。感動しすぎてコピペミス   _|\○_

42(○口○*)さん :06/05/05 10:59
retuern てなんやねん……  return やがな……   とにかく一件落着ってことで。
これで思う存分           寝れます。

43(○口○*)さん :06/05/05 15:49
過去ログを読んだのですが、ちょっとわからなかったので質問させて下さい。
いま工体研究所さんのAIを使い始めたばかりの初心者なのですが、
移動中のケミとホムの距離の設定はできるようなのですが、
立ち止まった時の距離の設定はできるのでしょうか?
今はすぐ隣に立ち止まるので、PPを間違って自分にかけてしまうorz

44(○口○*)さん :06/05/05 16:00
>>43
移動中のケミとホムの距離の設定は「FOLLOW_DISTANCE」かな?
立ち止まった時の距離は・・なんだろ。
そんな設定項目あったかなあ。

45(○口○*)さん :06/05/05 16:09
>>44
ですです、移動中はFOLLOW_DISTANCEというところみたいです。
その辺に書いてあるかなーと思ってAIファイルを見たりするんですが、
やっぱり素人にはさっぱりわからないですね・゚・(ノД`)・゚・

46(○口○*)さん :06/05/05 16:16
あったあった。自分は工体使ってないから試してないけどたぶんコレ。


AIlib.lua 内 (AI.luaじゃないので注意!


function MoveToOwnerEx( myid ) -- 等速版
local owner = GetV( V_OWNER, myid )
if GetDistance2( myid, owner ) > 1 then -- 離れている時のみ移動
MoveToNear( myid, owner, 1 )
end
end


MoveToOwnerExを検索する。

-MoveToNear( myid, owner, 1 )
+MoveToNear( myid, owner, 2 )

MoveToNearの3番目の引数の1を2に変える。これで上手くいくんじゃないかな?

47(○口○*)さん :06/05/05 16:26
できました!>>46さんありがとうー!
立ち止まってPPしやすいし、街中移動やホム右クリックなんかもすっきりしてすごく快適になりました。
本当にありがとう。

48(○口○*)さん :06/05/05 16:31
ちなみに注意点。あんまり気にならないかもだけど

□□■□□
□□□□□
■□●□■
□□□□□
□□■□□

● ケミ
■ ホム

ホムは必ず■の位置を目指すことになる。
追従のときに主人が微妙な斜め移動をするとちょっと変な動きになるかもしれない。多分だけど。
いわゆる桂馬の位置には来てくれないようになってしまうので、場合によってはやや不自然な移動になる。

同じ要領で2マス空けとかも出来るけど、この現象が酷くなると思うのでお奨めしない。

49(○口○*)さん :06/05/05 16:57
言われてみると確かに、移動にちょっと以前と違う違和感があるような…
他には、3割くらいの頻度で、攻撃がワンテンポ遅れるようになりました。
いずれも、自分はあまり気にならない感じです。
ご報告までに…。

50(○口○*)さん :06/05/05 23:10
ちとお聞きしたいが、ムーンライトをLv1で自動で使わせてるひとっているよね?
うちも、今まで
MAXLV_MOONLIGHT=5

として、最大レベルで使ってたんだけど、
それを
MAXLV_MOONLIGHT=1

に書き換えて、

MySkillLevel = MAXLV_MOONLIGHT
SkillObject (MyID,MySkillLevel,MySkill,MyEnemy)

で使ってるんだ。
ぶっちゃけスキルLvの定数部分を変えただけなんだけど、
なぜかムーンライトが1HITしかしてないようなダメージなんだよね。黄文字にもならないし。
(Lv5で使わせると黄文字1200、Lv1だと白文字320くらい。通常攻撃が150とかそんくらい)

同様に、Lv3とかだと3HIT分のダメージしか入ってない気がするんだけど、
手動で使う場合も自動で使う場合も、スキルの性質って変わらないよね?

51(○口○*)さん :06/05/05 23:14
言い忘れた。手動でスキルをLv1で使う(ショトカにLv1で設定)と、普通に
5HITしてると思うんだけど・・・

52(○口○*)さん :06/05/05 23:32
黄文字になるのは2HITになるLv2から
1だと通常攻撃に混ざってわかりにくいけどダメージは220%になってるはず。

53(○口○*)さん :06/05/05 23:34
ちなみに1,2,2,3,3HITの順で増えるのでレベル=ヒット数ではない。
最大レベルでも3HIT合計660%にしかならない。

54(○口○*)さん :06/05/06 01:56
あれま。やっぱりLv1は1HITですか
じゃあ手動でLv1を発動したときのAIの挙動がおかしいんだな・・・黄文字になるってのは

ありがとう

55(○口○*)さん :06/05/06 18:35
>>23-42

AI雑談スレの皆様。
なんか、色々ありがとうございます(ノ(ェ)`)

GWは、すっかり風邪引いてダウン中のくまAIの中の人です。
皆様のご指摘・議論を基に拙作のAIを修正させていただきました。

では!( ´(ェ)`)ノ

56(○口○*)さん :06/05/06 23:36
>>55
おおっ、ありがたく使わせていただいております。
これからも頑張ってください

57(○口○*)さん :06/05/07 07:42
ケミが座ってると、ホムの回復速度も倍になるの今気づいた
それはそうと、なにかいいAIありませんか?
0マテ、くま、工体など使ってみたのですが、それぞれ一長一短があってどうにも・・・
欲しい機能としては
・簡単に設定できる(設定ファイル内のコメントを読めば素人でも何をしているか判る)
・アクティブ(攻)の時は実際に殴る直前まで絶えず横殴り判定を行う
・ノンアク(受)の時はマスターやお友達が確実に初撃を与えたのを確認してから攻撃開始する。もしくは敵から攻撃を受けたら反撃する
・攻と受をRO内で簡単に切り替えられる
・アクティブモードでもあの敵には攻撃を仕掛けない、ということをゲーム内で設定できる
・通常戦闘のほかに、遠距離からのスキルのみでの攻撃をさせられるように設定可能
・殴る際は必ず1マス空けて殴る
・スキルの使用率や使用開始条件の簡単な設定
といった感じのは無いでしょうか?

58(○口○*)さん :06/05/07 09:00
>>57
ちょっとAIに求めるものが多すぎるんじゃないかな。
簡単に設定できるってのは機能の簡略化とトレードオフだから、
その全ての要求を満たすAIってのは難しい気が。

欲しい機能を削って設定の簡単なAIを使うか、
がんばって設定の難しい(≒機能が多い)AIを使うかになるんじゃないかな。

59(○口○*)さん :06/05/07 09:07
>57
「素人にも簡単」というのがかなり主観なので、なんともいいづらいですね・・・
ほとんどのAIでは上記はそれなりにサポートしている「つもり」だと思いますけど。

参考までに、わたしのAIでは「1マスあけて殴る」以外は全部サポートしているつもりですが、
これを「簡単」と思えるかどうかは、わかりません。
ttp://tomose.dynalias.net/RO/index.php?%A5%DB%A5%E0%A5%F3%A5%AF%A5%EB%A5%B9AI

60(○口○*)さん :06/05/07 09:32
他人の作った物を使う以上どこかで妥協しなきゃならんね
気にくわないなら自作するしかない

61(○口○*)さん :06/05/07 13:21
まぁ、答えとしては「ない」でいいんじゃないか
そんな万能型(かつ設定簡単なのが)あれば、テンプレに乗せないはずがないよ
まずは一番カバー範囲の大きなのを選んで、使い慣れるのがいいとおもうよ
自分でいじれるなら別だけど。

62(○口○*)さん :06/05/07 13:35
>>61に同意
ちなみに俺の場合、最初は自分でデフォAIに機能追加してたが、いまは某AIをカスタマイズして使ってる
ほしい機能は個人差はあれど大体同じなんだから最終的には公開されてるAIの機能は似通ってくる
他の人に需要がないような機能は自分で追加するしかないと思う

63(○口○*)さん :06/05/07 13:46
おぉう。久しぶりに見に来てみたらくまAIの人が来てる。
もう遅いかもだが、使わせてもらってます。本当にありがとー。

64(○口○*)さん :06/05/07 15:48
一月ちょい過ぎてスレを覗いてみた今日この頃。
最近ではAIのカスタマイズが簡単になってるんですねぇ(しみじみ

お土産になるかどうかはわかりませんが
先行型で使っている際に、
ホムンクルスが生成されてから一定秒数の間非先行と同じ動きをする
ってコードを書いたのですが、必要な方はいらっしゃいますか?

居たらAIスレの方にコードはっつけてきますよ。

まぁ、ホム出現時に待機状態ってのと似通ってますが、ちょっと狩りがスピーディになるかな、とか…(微妙

65(○口○*)さん :06/05/07 17:40
>>57
RO内で全て設定するのでは無く、
外部アプリで設定した内容(敵ごとに先攻するか、スキル使うか、等)を
動的にホムに伝えるようにしたAIを今作ってる

中継ファイルで「ホム<->設定アプリ」の通信をするようにしてたが
pipeが使えるようだから(語るスレその4-770参照)もっとスマートに動的更新は出来ると思う
RO外でGUIで設定できるやつだとダメなのかしら

(まだ完成度が低くて公開なんて出来んが…
 誰か猛者が作ってくれないかなぁ)

66(○口○*)さん :06/05/07 18:15
発言でホムに指示出せるとかマジ楽しそうなんだけど…
前にどこかで見たネタレスに、ホムの名前を呼んだプリの周りを手動で回らせて、自動だと思い込ませたのがあったが、ネタじゃなく自動で出来るようになるんだろうか…?

67(○口○*)さん :06/05/07 18:53
>>66
できるけどパケットかメモリを読まないといけないから、ほぼ黒。

キャラ名→キャラIDのデータを手動登録しておいて、呼ばれたときに手動で/savechatして
txtファイルをAIが解析するという手もあるけど、さすがに現実的じゃないし。


あと、支援ツール連動系のネタが出てきそうな流れがあるけど、語るスレ・雑談スレでは
支援ツール連動系AIを扱わないというほうがいいかもしれない。
それこそBOTとの境界が曖昧になる。

68(○口○*)さん :06/05/07 19:16
>>64
ちょいと気になる
コードはっつけよろしく頼むよ

69(○口○*)さん :06/05/07 21:02
>>57
ROBBS配布元でもAI公開してた。
使い始めたところなんでどこまで設定いじれるか分からないけど、
要望に近い機能は揃ってる気がするよ。
ttp://www5e.biglobe.ne.jp/~anka/

70(○口○*)さん :06/05/08 00:48
どっちに書こうか迷ったが、こっちの方が幅のある意見がありそうなので
こちらに。

ttp://www.mmobbs.com/uploader/files/212.jpg

仕事の合間を縫ってこんなモノを作り始めてます。
(といっても仕事中じゃないですがw)
基本的な選択入力部分しか代行できないですが、configを編集するよりは楽になればなぁと。

中の人が趣味の範囲で作ってますが折角なのでよりよいモノを作れれば、と言う事で。

今日思いつきで作り始めたので、いつ出来上がるか分かりませんがっ・゚・(ノД`)・゚・
GUIの代行でエクセルでもこんな事が出来るんだという方向性の一つと捉えていただければ幸いです。

公開できそうでしたらまた書きに来ます。ノシ

71(○口○*)さん :06/05/08 00:58
いい意味でよくやるなぁ

72(○口○*)さん :06/05/08 01:34
Excelのマクロで実装とは、うまいやり方ですね。
VBやVC++で一から書くよりも効率良さそう。
あとはバージョンが上がるたびに項目が増えそうなconfigに
どれだけ追随できるか、にかかってますね。

7370 :06/05/08 01:46
>>72
入力規則と基本関数でどこまで対処出来るか…

無理なとこはバッサリ切る予定です。

74(○口○*)さん :06/05/08 05:48
>>68
内容的に大したものじゃないのでこっちでいいや。ということでぺたり
GetMyEnemyをまるごと書き換えて貰うことになりますが。

前提が
MyEnemy_Type==1が非先行型
MyEnemy_Type==0が先行型って形になってます。

function GetMyEnemy (myid)
local result = 0
local Wait_time = 2000
if (MyEnemy_Type == 1) then -- 非先行型だと判断できた場合
result = GetMyEnemyA (myid) -- 非先行型
elseif (MyEnemy_Type == 0) then -- 先行型だと判断できた場合
if(Generation_Time + Wait_time < GetTick()) then -- 先行型でも最初のX秒は非先行型と同じ処理
result = GetMyEnemyB (myid) -- 先行型
else
result = GetMyEnemyA (myid)
end
end
return result
end

ローカル変数Wait_timeに突っ込んだ秒数だけは非先行です。
単純に時間見てして分岐させてるだけなので
まぁ、みたまんまの処理ですね(ノ∀`)

他の職人さんのをみると稚拙極まりないので引っ込んでおくとします。
壁|ミ

75(○口○*)さん :06/05/08 10:37
>>48
function GetDistanceObject(id1,id2)
    local x1,y1 = GetV(V_POSITION,id1)
    local x2,y2 = GetV(V_POSITION,id2)
    if (x1 == -1 or x2 == -1) then return -1 end
    return math.floor(math.sqrt((x1-x2)^2+(y1-y2)^2))
end

function GetRadius(id1,id2)
    local x1,y1 = GetV(V_POSITION,id1)
    local x2,y2 = GetV(V_POSITION,id2)
    return math.atan2(y2-y1,x2-x1)
end

function GetRound(value)
    if (value - math.floor(value) >= 0.5) then
        return math.ceil(value)
    else
        return math.floor(value)
    end
end

function GetMoveRevise(id,dist)
    if (id == nil or id <= 0) then return end
    if (not dist or dist < 1) then dist = 1 end
    local distance = GetDistanceObject(id,MyID)
    if (dist > distance) then dist = distance end    -- 今の位置より遠くならないように
    local rad = GetRadius(id,MyID)
    local x = GetRound(math.cos(rad) * dist)
    local y = GetRound(math.sin(rad) * dist)
    return x,y
end

なんとなくこんなのを。
GetDistanceObjectは名前違うだけで元から有るけども。

76(○口○*)さん :06/05/08 13:05
function MoveToDist (id,dist)
local x,y = GetV(V_POSITION,id)
if (GetDistance2(MyID,id) > 4 and id == GetV(V_OWNER,MyID)) then
 Move (MyID,x,y)
else
 local mx,my = GetV(V_POSITION,MyID)
 if (x < mx) then
 if (x+1 == mx or dist == 1) then
  x = x + 1
  else
  x = x + dist
 end
 elseif (x > mx) then
  if (x-1 == mx or dist == 1) then
  x = x - 1
 else
  x = x - dist
  end
 end
 if (y < my) then
  if (y+1 == my or dist == 1) then
   y = y + 1
  else
  y = y + dist
  end
  elseif (y > my) then
  if (y-1 == my or dist == 1) then
  y = y - 1
  else
   y = y - dist
  end
 end
 Move (MyID,x,y)
end

77(○口○*)さん :06/05/08 13:06
続き
■ホム
●id(MyEnemy,MyOwner,MyID,)
■□■□■
□□□□□
■□●□■
□□□□□
■□■□■
の位置に移動し、斜め移動もカバーできる…と思う

78(○口○*)さん :06/05/08 13:57
>>77
なんか、微妙に条件分岐ちぐはぐでない?
「距離4より大きい場合、ケミなら重なる」とか、「距離1の場合のみ特殊」とか。
いや、意図通りならいいんだけど。

79(○口○*)さん :06/05/08 16:31
if (GetDistance2(MyID,id) > 4 and id == GetV(V_OWNER,MyID)) then
は主人追尾時の時のみに
ケミから4マス以上なら通常追尾、4マス以下ならマス空けで追尾してきます
これは常時マス空けで追尾すると
□壁
■ホム
●ケミ矢印はケミの動き
 ●←←← ←
□□□□□■
□□□□□↑
と角を曲がったり、角垂直に進入したときホムが引っかかるのでそれの予防処置です
- GetDistance2(MyID,id) > 4
+ GetV(V_MOTION,GetV(V_OWNER,MyID)) == MOTION_MOVE
なんてのもOK

80(○口○*)さん :06/05/08 16:42
orzエンター押しちゃった
距離1の場合〜っていうのは
既に距離1の処に居る場合、何らかの理由で距離2以上
1+distの場所が進入不可な場合の処置です
以前敵から2マス空けて攻撃すると云うAIを使用していた処
2マス開けられないと移動が完了せず、攻撃状態に移行できなかったのが
歯がゆかったので、こんなチグハグな分岐に

81(○口○*)さん :06/05/08 17:02
>>76-77,79-80
function MoveToDist (id,dist)
 local x,y = GetV(V_POSITION,id)

 if (GetDistance2(MyID,id) > 4 and id == GetV(V_OWNER,MyID)) then
  Move (MyID,x,y)
 else
  local mx,my = GetV(V_POSITION,MyID)
  if (math.abs(x - mx) > dist) then
   if (x < mx) then
    x = x + dist
   else
    x = x - dist
   end
  else
   x = mx
  end
  if (math.abs(y - my) > dist) then
   if (y < my) then
    y = y + dist
   else
    y = y - dist
   end
  else
   y = my
  end
  Move (MyID,x,y)
 end
 
end

その動きならこれでよくない?

82続き :06/05/08 17:06
これだと■の中で最寄の場所に移動して
内周だと移動しない。という動きになるはず。

●id(MyEnemy,MyOwner,MyID,)
■■■■■
■□□□■
■□●□■
■□□□■
■■■■■

83(○口○*)さん :06/05/08 17:53
現在フィーリルタイプのホムを育成している者です。
今はこっこAIを使用しているのですが、これの旋回についての相談が在ります。

あくまで個人的趣向で申し訳無いのですが
私的にはこっこAIよりゼロマテAIの旋回方式が好きなのですが
普通の戦闘方式では草も一緒に殴れたり、座ってる時のアクティブ化の切り替えの出来るこっこAIが便利と言う感じです。

ここで改めて質問なのですが、ゼロマテAIの旋回方式をこっこAIで行わせるには
どの部分をゼロマテから持ってきてこっこAIに修正を加えれば良いのでしょうか?

もしこの様な他所の何々の部分をこっちのAIでやりたいーの要望がNGの場合はするーでお願いします。
ですが、もしOKの様でしたら、お手数ですがアドバイスの方をよろしくお願いします。

84(○口○*)さん :06/05/08 17:55
>>81
成る程〜
idと重なった場合の処置は別の関数でidを中心に全方向へ順番に移動を試みると云うのを使ってるから
この関数の方がかなりスマートですね
x < mxとy < myの分岐だけじゃイビツにならないですか
逆の不等号の分岐もあった方が良いかなと思ったりするのですが

現在接近にこの関数と、重なり時に全方向への移動試み、
それでも移動できなかった場合or対象がバックステップなどで退いた場合に背後へ移動する関数の
三段構えで移動を処理してます

85(○口○*)さん :06/05/08 19:55
>>76
これ関数名違うけどこっこAIとまったく同じだな

86(○口○*)さん :06/05/08 20:19
>>83
こっこAIがぜろまてAIの旋回をほぼ流用してるので、
恐らくだけど

ぜろまてAI:function RollingAround () の中身を
こっこAI:function Rondo(pattern) の中身へごっそり入れ替えてやればいい。

あと、Rondo(pattern)のpatternをPartolTypeに書き換えれば多分動くはず。
これを忘れるときっと動かない。

87(○口○*)さん :06/05/08 20:48
>>85
こっこAIと同じ関数と云うよりAI語るスレ2の674の関数を利用したものです
分岐以外はオリジナルの其れと同じものを使用してます
恐らく殆どの追尾関数がスレ2、674が元ではないかと

88(○口○*)さん :06/05/08 21:15
>>86
返信ありがとうございます。さっそく入れ替えを行ってみたのですが
ゼロマテAIの様に主人を中心に四角形に回ると言うのはやってくれませんでした…。

ご指摘の通りにpatternの部分をすべてPartolTypeに書き換えたのですが
それでも動きとしてはこっこAIの自分の位置でくるりと回るしかしてくれませんでした。
きちんとこっこAIの方の旋回の部分は削除したはずなのですが何がいけなかったのでしょう?

89(○口○*)さん :06/05/08 21:21
>>87
それもそうみたいだが、手の加え方までまったく同じだから気になっただけ。

>>88
PatrolRange = 3 -- くるくる半径/この距離以上開くと主人の元へ追尾

パッと見このグローバル変数が足りなかった。
これが無いからだったかもしれない。試してみて。

90(○口○*)さん :06/05/08 21:32
>>89
返信ありがとうございます。おかげさまで無事にこっこAIで
ゼロマテAIの旋回の動きをこちらでも再現してくれる様になりました。

お二方本当にありがとうございました。

91(○口○*)さん :06/05/09 08:39
今自分で確認出来ない状況なので誰か教えてください。
そのホムが使用出来ないスキルを無理矢理使用した場合、
(例えば、ばにるみーでムーンライトとか)
スキル使用失敗とか出るのでしょうか、それとも無視されるのでしょうか

失敗と出るなら、何か処理の結果表示に使えるかなーと思ったもので。

92(○口○*)さん :06/05/09 14:30
>>91
何も出ない。まったくの無視。
トリガーにも使えないね。

ところで↑でもあったこっこAIだけど何か面白いことしてるな。
共闘相手を自動で友達登録するみたいね。誤登録がありそうで怖いけど。

93(○口○*)さん :06/05/09 16:04
ごめん、工体で友達登録ってどうやるの??
「一括で…」とかよくわからないのだけど。Readmeファイルもないし、サイトにヘルプもないのでやり方がわからんのです。

94(○口○*)さん :06/05/09 16:59
工体以外のAIでもモンスターの優先順位を決めてモンスターを殴るにはどうすればいいでしょうか?
なんか難しくて工体のをそのまま使えないという感じです。
自分が使ってるのはゼロマテのAIなんですが…。

95(○口○*)さん :06/05/09 17:01
>>93
Archivesの3月を読めばいいと思う

96(○口○*)さん :06/05/09 17:12
>>94
そういうことするにはモンスターデータを読み込んで判別しなくてはならないので
今一般的に使われてるようなmobdeta.luaを利用してないAIだと実現は無理。

97(○口○*)さん :06/05/09 17:22
mobdata.luaを使ってなくても「敵ごとの優先順位」をつけられるAIもあるよ〜。
ttp://tomose.dynalias.net/RO/index.php?%A5%DB%A5%E0%A5%F3%A5%AF%A5%EB%A5%B9AI

まあどっちにしても、そういう機能を盛り込んだAIでしかできないのは事実で、
絶対数は少ないのは確かですけど。

98(○口○*)さん :06/05/09 22:53
>>93
自分が使っている纏めreadmeです。
もし宜しければどうぞ。
ttp://www.mmobbs.com/uploader/files/235.lzh

99(○口○*)さん :06/05/10 02:35
>>97
でもそれも結局はmobdata.luaの中身と同じものをAIの中に実装してるだけじゃない?
いや、まぁ中見ないでいうのも失礼な話なんだが、時間が時間だ。

100(○口○*)さん :06/05/10 02:40
>>95>>98
うほおぉぉ!ありがとおお!!

101(○口○*)さん :06/05/10 08:22
>>99
97で紹介されてるのの開発者です。
うちのAIは GetV( V_HOMUNTYPE, ) で敵種別だけ判断して、その敵に対してどう対処するかを
ROクライアント上操作でユーザー設定させるタイプです。
「ポリンなら攻撃しない」と判断するだけなら「敵がポリン」とわかれば十分なので、
mobdata とかそれに類する細かいデータは不要として、採用していません。

その結果、逆にうちのAIでは「レベルn以下の敵は無視」「HIT不足の相手には魔法重視」とかはできません。
同じことをやるには、その敵ごとに「無視」「魔法重視」などを実地で教えていくかんじです。
テキストエディタを触らなくていいので、そのあたりはラクかと。

単に「敵ごとの優先度」という目的を達するだけなら、手段はいろいろある、ということの参考まで。

102(○口○*)さん :06/05/10 08:25
>>92
ありがとうございました。
昨晩は自分でも色々と試してみましたが、
(あり得ないレベル、スキルID、ターゲット等の組み合わせ)
やはり完全に無視されました…(つд`)

103101 :06/05/10 08:38
誤解を生みそうな気もしたのでちょっとだけ補足。

うちのAIでは、正確に言うと「敵がポリン」ということすら知りません。
ホムAIの内部的には敵種別のIDだけはわかりますが、その敵の名前はわからないので。
うちのAI内部的には「IDxxxxの敵に対しては優先度高く」「IDyyyyに対しては低く」という動作をしてます。
(IDxxxxがポリン、という判断をするには、mobdataのようなものが必要です)

以上、だいぶ実装的になってしまう蛇足ながら。

10494 :06/05/10 10:57
たくさんのコメントありがとうござました。
色々と自分なりにもう少し頭をひねって頑張ってみますね。

105(○口○*)さん :06/05/10 20:00
質問させてください。
現在くまAIを使っているのですが、臨戦状態でもケミの周りを旋回させるには、どこをどういじればいいのでしょうか?
1045行あたりかな?とはおもうのですが…

106(○口○*)さん :06/05/11 04:16
ド素人っぽい質問だけれども、
AIスレ覗いてもナノセカンドがどうのとかサッパリなんでこっちで……。
アルケミテンプレで、ASPDの表示値は実は関係なくて、
AIの処理速度=ASPDみたいなことが書かれてるけど、
それってつまりAIを可能な限りASPD重視に仕立て上げれば、
AIを読み込む周期ごとに殴る高速打撃ホムにする事も出来るってことなのかな?

107(○口○*)さん :06/05/11 05:03
>>106
後ディレイがあるから高速打撃は無理のはず・・・・

どっちのAIスレか忘れたけども、攻撃モーションをちゃんと表示させたいって話題が上がったんだけど
あれは、ディレイ中も攻撃モーションをしちゃってホムンクルスが痙攣するのが気持ち悪いor可愛そう
ということだったはず
実際の攻撃速度は、一秒に6〜7回ほど攻撃するくらいの速度だったはず

で、ASPD重視って何をするんだろ・・・?

108(○口○*)さん :06/05/11 05:16
>>106
本来の攻撃速度より早くはならない。
例えば1秒に1回攻撃できるホムに0.25秒に1回ずつ、
秒間4回の攻撃命令を送っても最初の1回目以降は捨てられる
次の攻撃が始まるのはさらに1秒後の5回目にあたる部分。

109(○口○*)さん :06/05/11 05:19
>>106
結論だけ言うと「遅くすることは出来るが早くすることは出来ない」。
AIでのデフォルトの状態が「ホムのASPD設定値毎に攻撃命令」。
これが大抵ホムの攻撃モーションより早いので、AIを変えないとホムの攻撃モーションがキャンセル状態になりキモい動きになる。

ちなみにホムにもASPDはキチンと設定されているので、AIの処理がこれを上回ることはないよ。

110(○口○*)さん :06/05/11 05:20
「OnATTACK_ST内を極限まで軽量化」しか思いつかないな。

・10万ルールは画面内オブジェクト全部見る手間があるので使わない。
・IsNotNoManner(横殴り判定)も同様。OnCHASE_ST内で済ませておく。
・自動ムーンライト・カプリスはrandom関数とかいちいちSP監視とかあるから使わない。
・ブースト系スキルは手動で使う。どうしても自動で使わせたい場合にはATTACK_ST時は使わないようにしておく。
・IsOutOfSight、IsInAttackSightを作り直す。具体的にはGetDistanceを使用しないように。

ざっと見る限りこんなとこかな。

111(○口○*)さん :06/05/11 06:33
攻撃→移動→攻撃 って超高速でやるのもムダってこと?
ババッシュとかみたいなw

112(*○口○)さん :06/05/11 10:48
>>111
>>107,108でもあるけど実際の攻撃速度が秒間5〜7辺りだから約160ms/回ほど、
AIの呼び出し周期も同程度で、移動もPCと同じで150ms/セルだから無理
毎回Attack送るしかないね

113(○口○*)さん :06/05/11 11:19
なるほど、だから、くまAIの攻撃ディレイの初期値は166msなのか。

114(○口○*)さん :06/05/11 14:55
一回休むorデフォの最速でピクつく

115(○口○*)さん :06/05/11 17:56
現在0マテAIを使っているのですが、攻撃設定で質問があります。
草や卵を殴っているときに一緒に攻撃してくれるようにし、
バイオプラントは一切攻撃しないようにしたいのですがどこを
どのように書き換えればいいのかさっぱりです…。
どなたか知恵をお貸しください。

116(○口○*)さん :06/05/11 18:23
他のAIに乗り換えた方が早い

117106 :06/05/11 22:41
なるほど、これ以上ないほど完璧に理解できました、有難う御座います。
やっぱりホムにもASPDはあるのですね。
アルケミテンプレのホムステータスページのASPDの項、
あの書き方(表示ASPDに意味は無くAI次第、みたいな)じゃ、
自分みたいな勘違いする人また出そうな予感……。

>>107
速さこそ力、速さこそ正義です。
つまりホムンクルス最速伝説を作りたかったのですけど、
素直に鳥を育てて発光させつつ進化実装待ちが賢明そうですね……。

よーうし、ASPDは諦めて根性で工体AIに0MATE AIの旋回組み込む作業するぞーッ

118(○口○*)さん :06/05/12 20:49
ココも語るスレもかなり停滞だね
大体出きったのかなあ

119(○口○*)さん :06/05/12 23:15
今はホム動かしたくないってのもある

120(○口○*)さん :06/05/12 23:34
やばめのネタが振れないというのもある

121(○口○*)さん :06/05/13 00:32
>>115
他AIを見てみるとよろしいかと。多分入ってるAIとかあるかも
知る限りその要求はホム実装から一週間以内に実現されてた。
AIスレの過去ログにコードそのものがあるかも。(多分初代スレか2スレ目


たまに来る質問者がログを確認していた場合、
停滞どころか停止しかねないほど出尽くしてるかねぇ?
やばめのネタが出るぐらいなら、流れて消え去るのを待つのみです。

122(○口○*)さん :06/05/13 00:54
liveroは過去ログ残らないよね

123(○口○*)さん :06/05/13 04:58
AIもくまAI以外はほとんど更新されなくなってるしな
くまAIがんばるなw

124(○口○*)さん :06/05/13 14:32
りとる2うぃっちがdat落ちをhtml化してる

125(○口○*)さん :06/05/13 19:58
完成品が一通り流通しているから、流石にここやAIスレで新規にコードを起こす必要はなさげ。
既製品の改造も過去ログ嫁とここのAI使えで全部流してしまってる以上、スレがある意味は無さそう。

次スレを立てなければいつか消滅するから、ほっとけばいいんじゃないかね?
ログが残るのは問題ないかと

おつかれさまでした。と前スレを代理で立てた人が言ってみる。

126(○口○*)さん :06/05/13 20:23
向こうよりこっちの雑談スレのが生き残るきがする

なんていうか敷居が低いんだとな、こっちのが

127(○口○*)さん :06/05/14 01:09
ケミ本体が死んで、普通はホムが自動で安息になるけど
何かの拍子でホムだけ残ったときに
バニルでCVつかってみたら死体のままのケミを回復した。

そのときバニルがCV発動する瞬間に表示が ヒール!!→カオティックベネクション!! のように
一瞬 ヒール!! がでてるんだけど内部処理的には通常のヒールで
ターゲットだけが確率で指定されるのがCVということだろうか?

同様にCPも各ボルトがランダム指定されるだけの通常ボルトだと推測すると、
なんとかAIでCVの対象固定、CPボルトの種類指定とかできないだろうか?

CVに関してはmobにかかるときにmobがいなければその分はホム自身に振られるから
CV使用時のホムにmobもケミも見えてない状態なら全部ホムに向けられるかも。
例えできても現状ホムは回復しないけど。ケミ固定ができればすごい便利。


と、仕様をあまり気にしないで「できたらいいな」的なことを無責任にレスできる。
だがそれがいい。

128(○口○*)さん :06/05/14 01:28
気持ちはわかるが、その乱数部分がクライアント内に隠されてしまっているので、調整はできん(^^;;>CV対象&CP種類

でもまあ、CVが内部的にヒールが使われているのは確かなようで、通常時でもたまに「ヒール」って出ますね。
で、たぶんその結果、バニルの「CVでの自力回復」が動作していないんだと思う。
(ホムにはヒールが効かない→CVでバニル自身に回復が当たっても「ヒール」なので効かない)

129(○口○*)さん :06/05/14 10:43
バニル自身や敵にヒールを使う処理はしない、とか、




初心者の戯言乙。

130(○口○*)さん :06/05/14 11:02
先日ASPDにかんして質問があったので便乗で質問です。

今更ながら、自分でAIをそれなりにカスタマイズして遊んで居るんですが、
ASPDの処理に関して、以下のような処理を入れたところ、攻撃が非常に
おそくなってしまいました。
ダンサーバードWIKIを参照して作成したのですが、計算式が間違っているのでしょうか。
それとも、ホムのASPD表示が正しくないのでしょうか?

よろしくお願いいたします。

ASPD = 190 -- ●ホムンクルスの攻撃速度 面倒なら0にします。計算式おかしい?
ASPDDelay = 0 -- 秒間攻撃速度 ASPDから計算されます

if (ASPD > 0 ) then
 ASPDDelay = 1000/(50/(200-ASPD))
end

ちなみに、本来のASPDは151 LV30の鳥です。
ASPDの計算を190にすると、ほぼ攻撃モーションが表示され、それなりの速度で攻撃します。

131(*○口○)さん :06/05/14 11:32
計算式は合ってる、ASPDが表示よりも速いのはケミテンプレの「ホムンクルス関連の不具合」に書いてある
攻撃速度はAIの周期に依存するし、内部で決められた速さ以上には出来ない

132(○口○*)さん :06/05/14 12:29
ASPDとAIの処理速度があるから、ASPDをきっちり揃えようと設定すると
AI処理の分実際のASPDが遅くなるわけだ。

133(○口○*)さん :06/05/14 18:00
>>131-132
ありがとうございます。
ホムのASPD表示が正しくないわけですか。

AIの周期に依存すると言うのは、毎処理毎に攻撃処理を行っても、
攻撃>>ASPD分の時間経過>>経過後最初のAI処理>>攻撃
となると言うことですよね。
ASPD時間のあと、最初のAI処理が行われる時間分、攻撃速度が遅くなる。

あと、実際のASPDを知る手段は現状無いのですね。
ありがとうございました。

134(○口○*)さん :06/05/15 17:57
くまAIで、
基本設定とカスタム設定の両方に設定変えたくまAI入れて
/hoaiで切り換えようとしたんだけど基本設定に入れたほうがうまく動作しない…
くまAIって基本設定のほうじゃ使用できないのかな?
試しに同じファイルをカスタム設定のほうに入れたらちゃんと動いた。
基本設定に置くとConfig.luaが読み込まれないっぽい。

135(○口○*)さん :06/05/15 18:26
AI.luaにある「require」を直しな
USER_AIの中を読みに行ってるはずだから

136(○口○*)さん :06/05/15 18:48
>>135
うわホントだw 冒頭におもいっきり参照先書いてあったのね。ありがとー

137(○口○*)さん :06/05/15 22:47
すみません。私も>>134さんと同じ症状なのですが。
AI.luaにある「require」を直すというのは
具体的にはどのように直せば良いのでしょうか?

138(○口○*)さん :06/05/15 22:58
AI.luaを開けば目の前にあると思うが…


require "./AI/USER_AI/Const.lua"
require "./AI/USER_AI/Util.lua"
require "./AI/USER_AI/Config.lua"


これはどういう意味かっていうと、簡単に言えばAI.lua以外にConst.luaやUtil.luaなどに書かれている
プログラムも実行しますよ、という意味。プログラミングの際に、ファイルが膨大になってしまいそうなときに
役割ごとにファイル分割しておいて、こういった命令文でリンクさせるというのは常套手段なのだ。

で、これだとUSERディレクトリ内のものを参照するようになっているので、
AIディレクトリ内にAI.luaがあってもUSERの中のUtiliやConstを使うようになってしまう。
したがって、


require "./AI/Const.lua"
require "./AI/Util.lua"
require "./AI/Config.lua"

139(○口○*)さん :06/05/15 23:08
なるほど。上の3行を下の3行に直せば良いということですね。
わかりました。ありがとうー。

140(○口○*)さん :06/05/16 17:46
ASPDについてのうんちく
AttackIntarval = x
if (GetTick() - AttackDelay >= AttackIntarval) then
Attack (MyID,MyEnemy)
AttackDelay = GetTick()
この場合、攻撃後ディレイを格納しreturnまで処理しループに入りif (GetTick() - Attack〜に戻るわけだが
前後の関数に掛かる処理に関係なくAttackIntarval中に前後の関数を処理するため
一般的にみて余程変な関数を並べてない限りAttackIntarvalの値を超えることはないと思われる
AttackDelay = GetTick()
if (AttackTime - AttackDelay >= AttackIntarval) then
AttackTime = GetTick()
Attack (MyID,MyEnemy)
この場合、この部分の処理に入る前に強制的にAttackIntarvalを待機させられるif (AttackTime - Attack〜後に
攻撃ディレイを格納するため、Attack (MyID,MyEnemy)に入る前に前後の関数の処理時間+AttackIntarval分だけ
待ち時間が発生する為、ASPDに合わせてAttackIntarvalを設定してる場合関数の処理時間が加算される分だけ
実ASPDとAIASPDがずれる為、本来より遅くなるってわけ
前者の関数を使ってAttackIntarvalを200に設定すると理論上は遅れずにASPD190で処理を行う事になる
1ループのIA処理に0.2秒以上かかる場合はPCに問題ありかと…
尚ホムの実ASPDは以下で算出できます
ttp://www.amesani.org/ro/calc/homunstats.php

141(○口○*)さん :06/05/18 19:27
GGでも使えるAIツールって出てないですかね?
10秒に1回索敵したり、1秒に1回攻撃したりするくらいならば、GGでもホムが使えると思うのですが。

142(○口○*)さん :06/05/18 19:30
GGってなんだか、最初本気で悩んだ

はともかく。
攻撃や索敵より、むしろ移動が問題なんじゃない?

143(*○口○)さん :06/05/18 19:58
使えるか使えないかであれば使えるだろうけど色々制限は多くなる
ケミが動くのであれば、位置固定でケミへの支援か砲台が上限
逆にケミが居るだけでALLホム任せでも移動はどの道、難しい

一番の問題はGvで使えるAIを作るのはGvをやっている人であって
敵にも有利なAIを普通、公開する訳ない事

144(○口○*)さん :06/05/18 20:41
>>143
「使える」の定義次第じゃないか?
ケミ本体を犠牲にしてまでホムを動かして、はたして有利になるほど
「使える」かどうかって話。

>>141の「使える」は、Gv中でも一緒に居られるヽ(^o^)ノって話だと。

145(○口○*)さん :06/05/18 22:00
>一番の問題はGvで使えるAIを作るのはGvをやっている人であって
>敵にも有利なAIを普通、公開する訳ない事

コレに尽きるだろ
つまり、欲しけりゃ自分で組むしかない

146(○口○*)さん :06/05/18 22:13
いっしょにいられるだけのAIなら以下のとおり

function AI(myid)

end

147(○口○*)さん :06/05/18 23:20
>>146
せめてケミへのMoveくらいつけないと置き去りになるぞw

148(*○口○)さん :06/05/18 23:56
>>144
索敵や攻撃の話が出ている以上、「一緒に居られれば良い」では無いかと
居ればいいだけなら>>146でも普段使っているAIでも何でもいいはずだしね

カーソル優先度低いからタゲられにくいとか、ハイドクロクトンドルも見つけられるとか
割と固定砲台だけでも役には立つとは思うけど正直、そんな危ない所に連れて行くなと小一時間

>>147
割と前に出た付いてくるだけAI改

MoveTick = GetTick()
function AI(myid)
  if ( 3 < GetDistanceFromOwner(myid) and 5000 < GetTick() - MoveTick ) then
    MoveTick = GetTick()
    MoveToOwner (myid)
  end
end
5秒置き位ならパケ死には減るはず。。。

149(○口○*)さん :06/05/19 00:04
>>148
いやごめんw、「一緒に〜」は比喩的な極論だった(^^;
パケットが気になるから、普段のAIは使えない、でも
つれてって、ちょっとは一緒に戦ってる気分になりたい。
そういう話だと思った。

が。
確かに、居てちょこっと働くだけでも、他人のギルドには
居て欲しくないか。
Gvやら無い俺は認識が甘いかもね。

150(○口○*)さん :06/05/19 00:37
敵アサシンに優先的に攻撃

って指定ができたらクロキン封じは出来そうだね。
色々と問題ありそうだけど。

151(○口○*)さん :06/05/19 17:41
>>150
ふと思った。
ホムの敵探索AIを使って、クローキングとかして隠れていても、
VBとかでツールを作ってそこにトレース出力すれば、
大体の位置を確認できるんじゃねw?

152(*○口○)さん :06/05/19 17:54
やろうと思えば出来るがそういうのはココではタブーだし>>145

153(○口○*)さん :06/05/19 17:58
大体どころか、もとから入ってるAIなら隠れてるMobの横まで行く
これを応用すれば簡単にできるでしょ

154(○口○*)さん :06/05/19 18:10
>>151
あえて触れなかったのに。とりあえずこれ読んできなさい。
http://enif.mmobbs.com/test/read.cgi/livero/1143193717/798

155(○口○*)さん :06/05/19 18:21
とはいえ、隠れているキャラを出力してリストアップするようなのはアレだが、
「ホムが隠れてるキャラを検知可能」というのは「そういう特性」ってことになればいいんだけどな。
オーラ付近まで育てたとしても所詮防具の無いMobに近い存在だから、
すぐやられるけどクロキン対策に、というGvでの運用としてはおもしろいとおもう。

156(○口○*)さん :06/05/19 18:30
>>155
ホムがハイド見つけるのを、さすがに「バグ利用」と言われる事は無いと思う。
デフォルトAIで連れ歩いてるだけで、勝手に見つけてしまうわけだから
ホムケミ全員が黒になっちまうしな。

157(○口○*)さん :06/05/19 18:35
Gv用AIの話題が出ているので、燃料投下を・・・

今、ちょうどGv用の簡易AIをコソコソ作っています。
どんなAIかといいますと、
画面内のキャラ全員を友達登録する機能があって、
詠唱をしている友達以外のキャラ(職指定可)がいたら
カプリスorムーンライトを打ち込む動作モードと、
一定範囲内に友達以外のキャラがいたら
追尾する(ハイドなどの発見)動作モードを、
切り替えられるような感じです。

移動はマスターが一定の距離以上移動したときのみ
MOVEコマンドを送るようにしています。

まだ、完成してませんがもうすぐできそうなので
次回のGvで試してみようかと思います。
需要があるようなら配布してもいいと思っていますが、
隠れている敵をホムで発見していいのかどうかが問題なんですよね。
バグなのか仕様なのか・・・どうなんでしょうか?

公開する場合には運営会社に質問するつもりではいますが、
おそらく、AI設定ツールの際の質問と同様に
あいまいな返答したいただけないような気がします。
駄目なら駄目とはっきりしていただけると有難いんですけどね。

>>151さんのおっしゃることは、
登録した友達以外のキャラのIDの座標を取得できますので、
外部に吐いてドラゴンボールレーダーみたいに表示とか可能だと思いますが、
仮にホムで隠れている敵を見つけるのがOKだったとしても、
そこまでやると明らかに
「通常のクライアントでは表示されないデータを表示させることができるもの」
という不正ツールの定義に引っかかると思いますので控えましょう。

それはそうと、私の貧弱な発想だと上記のようなAIになっちゃうんですが、
Gvで役立ちそうなAIアイデアを出し合って、いろいろなGv用のAIが出てくると、
ホムにもGvの出番が増えるかもしれませんね!

では、くまAIの中の人でした。( ´(ェ)`)ノ

158(○口○*)さん :06/05/19 18:38
>>157
ドラゴンボールレーダーという表現にワロタw

159(○口○*)さん :06/05/19 18:54
誰かとおもったらくまさんかw


有用なAIだと思うけど、実用化するには結構なサイクルでGetActorからの対象判別を回さないとならない気がする。
Gvだと結構負荷に敏感みたいだから、うまい方法で重くならないようにしないとならんねぇ。

「デフォAIで出来ることは仕様」と捉えていいのであれば、ハイド検知はアリなのかもですが
遠距離ムーンライトは難しいところかもしれない。

160(○口○*)さん :06/05/19 19:18
遠距離ムーンライトってオート発動できるのか・・
今まで手動でやってた・・

161(○口○*)さん :06/05/19 19:20
>>156
この場で意図的にハイド透過を扱うのが>>154(のリンク先)だって言ってるの。
通信の件も含めて、個人でこっそりやるなら好きにしてくれ。

>>157,159
というわけで公式サイトのバグ情報に「仕様」と明記されるまでは自粛した方が無難。

あとGvの負荷云々っていう話は基本的にパケ送受信周り(過剰な先行入力で鯖缶?)で、
GetActors()は受信済みのオブジェクト情報をクラ側からLua側へ引っ張り出すだけだと
思うから、GetActors()回している分には大丈夫じゃないかな。試してないけど。
荒れ狂う大魔法エフェクトでクラ処理重いっていう人はシラネ。

162(○口○*)さん :06/05/19 19:32
なんか最近、「通り抜け無用で通り抜けを知れ」になってる気がするんだよな
堂々と「白!」って言ってりゃいいことまで、自分らで「真っ白じゃないかも」って
おびえてるって言うか。

>>161
水掛け論になるからあんまり多くはレスしないが、
この程度をダメとすると、本当に何も出来なくなる。
例えばアチャの逃げ撃ちも「モーション最後まで表示されないでも、
矢は飛んでいく」という「不可避」な現象をわざと起こしていると言えなくもない。

163(○口○*)さん :06/05/19 19:49
ま、いくら「勝手にそうなるから」といっても、程度問題はあるけどな。
ゼニー増加系とか。

164(○口○*)さん :06/05/19 20:12
つーか、ホムから見える世界を外部に表示するツールの是非は別として、
「ホムから見て、キャラがハイドしてるかどうかが判断できない」というのが本質的な問題なんだよね。
人間から「見えない」んだから、ホムからも「見えなくする」のが適切。

俺は「ホムがハイドしている敵を見つけられる」というのは好ましいとは思ってなくて、
それが検出できるなら「ハイドの敵は無視する(気が付かないように装う)」AIを書くんだが、
それを検出することができないので仕方なくそう動かしてる(それしかできない)。

165(○口○*)さん :06/05/19 20:29
ホムはみんな悪魔なんですよ!
ってことにしておかないか?w

ガンホーがきちんと禁止は禁止と掲載してくれればここまで来ないんだけどなぁ

166(○口○*)さん :06/05/19 20:52
好きなように改造してくれて結構、まずかったら修正しますってのがガンホーの姿勢じゃなかったか?
自ら足鎖をはめたがるのがワケわからん。

167(○口○*)さん :06/05/19 20:54
>>165
そう言われれば、ホムンクルスってなんなんでしょうね?
悪魔?無形?植物?動物?
無属性?聖?悪魔?

168(○口○*)さん :06/05/19 20:57
>>161はいい事言ってるつもりでなんにもわかってない

169(○口○*)さん :06/05/19 21:01
>167
鳥・羊:動物
にこごり:無形
幼女:人

こーゆーのはテンプレにあると思うぞ

170(○口○*)さん :06/05/19 21:01
いつぞやの著作問題の結論がそうだった事より、「本当にダメならば直接警告を飛ばします」
というのがガンホーの意向らしいから、出来ることは自己責任の元にしてしまってもいいとは思うよ。
もちろん本家に修正されたり警告メールがきたら素直に引っ込めるべきだけど。
逆に問題があると思う人はその機能を作らずに素直に公式サポートへ修正要望を。

現状では、お互いがそれぞれ相手に自分の考えを強要しないことがユーザーが出来る唯一の事かな。

その辺くま〜の中の人はちゃんと分かってるみたいなので、後は自分達が口出ししなくても大丈夫だと思う。
自分はGVやらないが、GVやる人の手助けになるAIは未だほぼ未開拓地なのでまだまだ発展して欲しいところ。

(´-`).。oO(この手の問題は掲示板じゃ絶対に結論が出ないから難しいね…)
(´-`).。oO(PP問題とかのさらにややこしい問題まで含めて、ホムAIのそう言う部分はまだまだ未発展だねぇ)

171(○口○*)さん :06/05/19 21:39
うん…。というか重力ガンホーがちょっと大雑把な気がする。
あらかじめ問題になりそうなところはつぶしておくとかしてもいいのに?
それともつぶした結果が今の状態なのヵな。

172(○口○*)さん :06/05/19 22:14
でもこの問題って、例えばガンホーが禁止ですって言ったところで
俺らにはどうしようもないっつーか…。

意図的にハイド可視を利用したAIを作らないことはできるけど、
ハイド可視を絶対に無視するAIを組むことは不可能なんだよね。

だからなんつーか、議論するだけ無駄ぽい。
こんなことでぐだぐだ言うくらいなら、もっとバグ技っぽいものもいっぱいあるしな。

173(○口○*)さん :06/05/19 22:17
禁止ですって言うんじゃなくて出来ないようにすればいいじゃない
っていう話だったとおもうんだ

正直、対人とかやらないおいらにとっては、隠れたMOBに全力でムーンライト撃つ
鳥公のばかっぽさがいいが。

(´・ω・`)MOB見えてる
(´・ω・`)見えてるのにとどかない
(´・ω・`)?

174(○口○*)さん :06/05/19 23:13
>>173
それはガンホーじゃなくて重力にしかできないんだよ…。
で、韓国実装からこれだけ時間が経ってるのに変わらないみたいだから
多分そのへんを修正する気はないんだろうな、ってこと。

175(○口○*)さん :06/05/19 23:16
>>170
おおむね同感。
最終的な判断は、製作&配布者さん方個人個人の判断に任せるしかないんだよね。

176(○口○*)さん :06/05/19 23:32
>>174
>というか重力ガンホーがちょっと大雑把な気がする。

だったからさ

177(○口○*)さん :06/05/20 01:56
ガンホー側が「仕様」を発表することはまずないからねぇ。
質問してもテンプレで「個人向けには回答できません」って返ってくるし。

バグと発表のあるもの以外は現時点での仕様。
バグって発表されたり、出来ないようなパッチが来たらその時点で「仕様変更」ととらえるべきなんだろうね。

178170 :06/05/20 02:37
読み返してたらくまーの中の人〜の部分が随分上から見下してるみたいな文章になってしまっていた事に今更気付く。

くま〜の中の人すみません。そう言う意味合いで発言したのではないのです_| ̄|○ユルシテクダサイ
便利なAIいつもありがたく使わせて頂いてるというのに_| ̄|・∴:'   ...○ツッテキマス

179(○口○*)さん :06/05/20 02:47
この手の議論したがりは結局は議論じゃなく自説を認めさせたいだけだから相手してもしょうがない。

180(○口○*)さん :06/05/20 03:36
忘れてはいけない。
くまーの人は過疎鯖の人だということを!

古鯖でも通用するんだろうか…。

181(○口○*)さん :06/05/20 04:58
よし、隔離スレ立てた。
ヤバげな話題はこっちでやっとくれ。

ホムンクルスAIスレ・隔離研究室
http://enif.mmobbs.com/test/read.cgi/livero/1148068651/

不要だと判断されたら使われず寂れて落ちるだろうし。

182(○口○*)さん :06/05/20 10:12
股立てたのか・・・

183(○口○*)さん :06/05/20 10:46
こんにちわ、130で質問した者です。
無能ながらもこつこつAI作って居るのですが、第一段階の目標に大分近づいたので
面白いと思って頂けるかご意見をお聞かせ下さい。

現在、極一部の知り合いにのみ公開しているのですが、面白いと思われますでしょうか。
この程度は既出すぎ−なら、自分専用で遊んで行こうと思います。

内容としては、とにかく、くるくると行動の最適化に特化しようと考えてます。
現状で何種類かのくるくるをホムへの指示で切り替える事が出来ます。
しかし、まだまだスタックが発生するなど、完成にはほど遠い状況です。
現在の(自分で考える)最大の特徴のコマーシャルダンスは、ランダムダンスなど
もっとパターンを増やしたいと思っています。
そして、自分の趣味の構造に変更して書いたので、読みづらいソースになってると思います。

よろしければ感想などお願い致します。
ttp://www5e.biglobe.ne.jp/~akemino/upload/mmobbs/files/3169.lzh

184(○口○*)さん :06/05/20 16:33
>>183
落としました、まだ動かしてないけど。
ガンジーってなんだろうと聞こうと思って1分考えて、下読んで(無攻撃)で納得w

コマーシャルダンス、良いですな。
ランダムに動くのは、前から欲しいと思って多機能なので期待しています

185(*○口○)さん :06/05/20 16:34
要点だけ書くと
・IsOutOfSight(id1,id2) -- 射線が通るかのチェックではない
・配布公開するなら旋回半径とか旋回パターンは自由指定できる方がいい
・RondoWaitを短くした時にコマーシャルダンスで旋回対象が遠いと旋回が歪になる
 旋回基準位置到達前に旋回プロセスが始まる
・GetEnemyの攻撃対象選択モードで対象が居なかった場合、攻撃無し?
 優先対象が居ない時は再抽出を行う

コマーシャルダンスのアイディアはいいんだけど勝手に自分の周りを回られる
他PCが苦情を言ってくる可能性がある+コマンドが面倒
カプラやWPの周りを回ったのには笑わせて貰ったがw

186(*○口○)さん :06/05/20 16:43
追記
GetPersonが人検索関数ってなってるけど、NPC、ペット他
攻撃不可対象の全オブジェクトになってるね
意図した物ではなさそうだけど悪くないと思う
ただ、WPの周りは移動不可セルになることが多いので除外した方がいいかも

187(○口○*)さん :06/05/20 18:41
>>184
ありがとうございます〜
まだまだなAIですが、評価よろしくです〜

>>185-186
ありがとうございます〜
>・IsOutOfSight(id1,id2) -- 射線が通るかのチェックではない
がーん。勉強してきます。
>・配布公開するなら旋回半径とか旋回パターンは自由指定できる方がいい
その辺はコマーシャルのランダムダンスと一緒に作成中です。
>・RondoWaitを短くした時にコマーシャルダンスで旋回対象が遠いと旋回が歪になる
> 旋回基準位置到達前に旋回プロセスが始まる
やっぱり問題ですかねぇ。到着確認を付ける事を検討します。
>・GetEnemyの攻撃対象選択モードで対象が居なかった場合、攻撃無し?
> 優先対象が居ない時は再抽出を行う
!。大丈夫なつもりでしたが再度確認します。

>コマーシャルダンスのアイディアはいいんだけど勝手に自分の周りを回られる
>他PCが苦情を言ってくる可能性がある+コマンドが面倒
その辺は僕も悩んでいます。とりあえず、攻撃範囲ではなくダンス専用に範囲を考えてます。
コマンドは誤操作防止に難しくしてますwもうちょっと簡単な方が良いですかね。
>カプラやWPの周りを回ったのには笑わせて貰ったがw
カプラの周りは意図して回ってますが、看板まで回って僕も笑いました。(よく考えれば当然
本当に公開するまでにはPCに限定するか選択を付けるつもりです。
しかし、ペットやWPの周りまで回りましたか。直さないと。orz



(:D)rz ペットやMOBの周りも回る設定があるのも良いかもw

188(○口○*)さん :06/05/21 18:28
あの、ホムって例えばほったらかしにして置いても勝手に狩ってくれたりするのでしょうか?
敵がいたら勝手に攻撃とかで。
グラナドエスパダのキープモードみたいな感じだとLv上げ楽だろうなぁと思いまして。

189(○口○*)さん :06/05/21 18:28
sage忘れ済みません。

190(○口○*)さん :06/05/21 18:57
鳥か羊のホム持ってるなら、デフォルトのAIで起動してみてごらん。
自分のターゲットだろうが他人のターゲットだろうが構わずに
自分で殴りにいくから。

つまりできる。横殴りしないように、とかは対応したAIを使うなり
自分で工夫するなりしないといけないし、そもそもエサやりを
自動では出来ないから結局は見てないといけないけど。


それと、そういう「放置狩り」は十中八九非難されるのが今の風潮。
放置しててアルケミ本体を枝で殺されたりしても泣かないように。
それと、他人に迷惑かけないように。

それ以前に、もうすこしちゃんとアルケミテンプレのAI研究室とか
見れば、その程度の疑問は自分で解決できるよ

191(○口○*)さん :06/05/21 22:06
>>188
勝手に敵を攻撃してくれるけど、
放置狩りしてたらいつの間にか消滅してると思うよ^^

192(○口○*)さん :06/05/21 22:53
>>190
下らんツッコミだが、「鳥かバニル」の間違いだな。

193(○口○*)さん :06/05/22 01:54
工体AIでのスタックを解消するためにやってみた
TraceAIしてみるとATTACK_STでずっとループしてるので
5秒ATTACK_STが続くとタゲをリセット、IDLE_STにして移動
わかる場合は適当なとこに組み込んだほうがスマートだね
一応スタックから自力で復帰してるみたい

これをグローバル変数で宣言しといて
stuckcheck=0

以下をfunction AI(myid)の終わり付近に追加
if (MyState == CHASE_ST) then
stuckcheck=GetTick()
end
if (MyState == ATTACK_ST) then
if GetTick()-stuckcheck>=5000 then
MyState = IDLE_ST
MyEnemy = 0
MoveToOwner( MyID )
end
end

194(○口○*)さん :06/05/22 14:16
それって別にスタックしてなくても戦闘時間が長引いて5秒以上かかるときは
5秒ごとにその処理をするんだよね。状況によっては勝手にタゲを変えたりしそうだなぁ。

195(○口○*)さん :06/05/22 15:11
くまAIで
特定の敵にだけオートスペルしない設定はそのままじゃ無理?
草殴るときみたいにスキル使わない敵を個別に指定したい…
バニルだとバースリーとかタムランとかのボルトの効かないやつとか
ファミリアとかポイズンスポアとか明らかにオーバーキルでSPもったいないやつとかで
カプリスださないようにできたらいいんだけど。

改造するしかないとは思うけどどうすればいいのやら。
ID指定して草と同じような処理をもってくればいいのかな?

196(○口○*)さん :06/05/22 15:19
>>195
詳しくみてないから憶測で書くが、
草と同じ設定にすると主人が殴るまで殴らないと思う。

攻撃された場合にどうなるかはしらないけど。

197(○口○*)さん :06/05/23 01:08
草IDのトコロにandでスキル使わせたくないMobのID入れてみては?

198(○口○*)さん :06/05/24 18:47
ver0.52だとAI.luaの1218行目〜に
オートスキル使わないMobのIDならオートスキル使用判定を打ち切る
ってコードがあるから、そこに希望のIDぶち込めばOKじゃないの?
or MobID = 婆のID or MobID = タムランのID
とか

199(○口○*)さん :06/05/24 18:50
×or MobID = 婆のID or MobID = タムランのID
○or MobID == 婆のID orMobID == タムランのID
だな、一応訂正

200(○口○*)さん :06/05/24 18:52
絶望したッ
訂正も間違っていることに絶望したッ

201(○口○*)さん :06/05/25 01:16
いっそのこと、こんな風にしたらどうだろうか?

NoUseKillMob = {xxxx,xxxx,xxxx}
function IsNoUseSkillMob(mobtypeID)
__for i,v in ipairs(NoUseSkillMob) do
____if(mobtypeID == v) then
______return 1
____end
__end
__return 0
end

if(IsNoUseSkillMob(GetV(V_HOMUNTYPE,MyEnemy)) == 0) then
〜〜〜スキル使用処理〜〜〜
end

こんな感じにしとけば、解除とか追加とかメンテが楽だぞっと。

202(○口○*)さん :06/05/25 02:57
1/0よりtrue/falseの方がいいと信じてる私は異端でしょうか

203(○口○*)さん :06/05/25 03:48
>201の関数なら true / false のがいいだろうね。
これがCとかなら 1 / 0 でもいいけど。

204(○口○*)さん :06/05/25 04:50
0をtrue判定する仕様にどうしても馴染めない俺は
間違えないようにと1/0をできるだけ使わないように心がけているな。

205(○口○*)さん :06/05/25 12:32
Gv用にカスタマイズされたAI公開してるサイトってありませんか?

206(○口○*)さん :06/05/25 12:46
>205
>143

207(○口○*)さん :06/05/25 12:55
>>205
非移動でたたずんでるだけでも良いじゃない。
手動でアダマンチウムかけたり、速度かけるだけで羊や幼女は役に立つわけだし。

208(○口○*)さん :06/05/25 19:06
一応作ってるんだがな
さすがに自G内限定で配布してる

209(○口○*)さん :06/05/25 21:44
>>203
真偽値が特殊だからなあ
nilとfalse以外は全部not falseになるんだっけ

210 ◆g37UcEp//g :06/05/26 12:46
Gv用AI
どういう動きにしたいのか細かく抜けなく提案してくれたら作ってみるけどどうだろう?

ロジックはスクラッチから起こし直すから多少時間かかりそうだけど
Gv中の重さで正しく動くかどうかのテストはこっちじゃ出来ないのでだれかにまかす

あと○○AIの△△機能みたいなって言う指定は止めてね
基本的にケミWIKIで公開していくからもし私が消えたら勝手に更新してくれ(笑

211(○口○*)さん :06/05/26 14:17
ウザw

212(○口○*)さん :06/05/26 20:24
範囲内一括友達登録機能
再読み込み時のみ各種オート支援/常時各種オート支援の切り替え(スキル設定できること)
移動パターンの複数種登録(固定/n秒毎に移動 の切り替えが行えることが望ましい)
n秒毎に索敵のoff/on
索敵時、詠唱反応で遠距離スキル使用
HP低下時のオートキャスリング
HP低下時のオート治癒の手

213 ◆g37UcEp//g :06/05/26 22:45
キャサリンはGv中無効

Gv中の移動は鬼門だから難しそうだなぁ
Move送ってから何秒後に動きだすか分からんし
そもそもMoveがラグで消えてる可能性も考えないといけない
かといってデフォのようにMove連打したら鯖から蹴られる

同じ理由で詠唱反応とオート系やスキル・攻撃も確実性が乏しいけど
移動完了を待ったりする必要はないから1回命令送って撃ったことにしてしまえばいいか

・一括友達登録
・詠唱反応遠距離スキル
・タイマー支援
・Alt+右クリック移動

ひとまず第一フェーズでリリースするとしたらこれぐらいかな?

214(○口○*)さん :06/05/27 10:53
一度殴りだしたのを停止させた場合は、再び殴りに行かないようにする機能も欲しい。
もちろんON OFF選択式で。
MBr教授とか、遅延防衛のときに便利だと思われ。

215(○口○*)さん :06/05/27 13:54
工体AI、最近更新ないね・・・。
飽きちゃったのか、他の事(リアル含む)で忙しいのか。
実はとんでもない機能実装に向けての開発期間中だったり・・しないよね。

他のAI使ってる人、最近のアップデートとかどんな感じ?

216(○口○*)さん :06/05/27 16:41
くまAIは今日更新されてた。

他のAIの最新の更新状況は、くまAIの配布サイトの
AI更新情報をみるといいよ。頻度はわからんけど。

217(○口○*)さん :06/05/27 23:56
工体AIもうちょっと安定すりゃなー
新機能とかいらんから既存のがキッチリ動くようになってほしい

218(○口○*)さん :06/05/28 17:55
語るスレにも晒しといたけど、一応こっちにも。
GUIから各種設定&設定保存で即時切替できるAIとその専用エディタ。

ttp://mmgguild.hp.infoseek.co.jp/lif0.zip

まだテスト段階だから、色々不安定だとおもいますけどね…
AI自体も暫く開発してないからしょぼいですし。

219(○口○*)さん :06/05/28 21:09
io.openで外部ファイルに書き込んだ場合、ファイルの中身全てまたはファイル自体を削除するにはどうしたらよいのでしょうか?

220(○口○*)さん :06/05/28 21:16
試してないけど、書き込み(上書き)オープンしてそのまま閉じれば
サイズ0になるんじゃない?

221(○口○*)さん :06/05/28 21:49
ファイル自体を削除するには、os.remove() を使う。

222219 :06/05/29 00:10
ありがとうございます、おかげさまで上手くファイル削除ができました。

223(○口○*)さん :06/05/29 01:58
ttp://bluecubic.jugem.jp/
コレ使ってる人います?感想ききたい

224(○口○*)さん :06/05/29 14:20
>>223
感想聞くぐらいなら、まずは使ってみればいいじゃないか・・・

225(○口○*)さん :06/05/29 20:31
本人に言ってやるなよ。

226(○口○*)さん :06/05/29 21:23
>>223の行間を読んでみる。

その1 [>>224 ver.]
コレ使ってる人います?(試すのめんどくさいから)感想ききたい(報告ヨロ!)

その2 [>>225 ver.]
コレ(俺作ったんだけど)使ってる人います?感想聞きたい(なぁ)

その3 [>>My ver.]
コレ使っている人います?(俺使ってるんだけど)感想聞きたい(?)

教訓。
人に尋ねるときは、明確にネ! デン子からのオネガイ!

227(○口○*)さん :06/05/29 23:14
リーフに速度増加を自動で使わせるAIを考えていて

SkilltickA = 0

if (SkilltickA == 0) then
SkilltickA = GetTick() + 35000
casting = false
else
if (SkilltickA <= GetTick()) then
SkilltickA = GetTick() + 35000
casting = true
end
end
if (casting == true) then
SkillObject(MyID,5,8002,MyID)
end

ってのを作ってみたんだけど・・・うまくいかないorz
もう1時間以上悩んでて、よくわからなってきました
誰か「ここが変!」とかアドバイスいただけないでしょうか・・・?

228(○口○*)さん :06/05/29 23:19
まさかと思うけど
>SkilltickA = 0
これ毎回回してるんじゃないよね?w
あと、localとかで宣言してないよね?
あと、スキル使った後はcasting=falseしないと
もしくは2個目のelseか

if (SkilltickA == 0) then
SkilltickA = GetTick() + 35000
casting = false
elseif (SkilltickA <= GetTick()) then
SkilltickA = GetTick() + 35000
casting = true
else
casting = false
end
if (casting == true) then
SkillObject(MyID,5,8002,MyID)
end

やるならこんな感じかな

229(○口○*)さん :06/05/29 23:25
>>223
助言ありがとう

今まで他人のAIとか見て無理やり作ってたもんで
壁に当たってしまいました
助言のおかげでなんとか作れそうですw

…もっと早く書き込めば良かったのか?(^^;

230(○口○*)さん :06/05/29 23:27
アンカーミスorz
>>223>>229 で…
そりゃAIもうまく作れないよな・・・(;´∀`'`,、'`,、

231(○口○*)さん :06/05/29 23:37
>>227
つまり常に緊急回避をかけておきたいってことでいいんだよな?
だったら、


SkilltickA = 0

function AI(myID)
 ...
 local nowTime = GetTick()
 local casting = false
 if (SkilltickA + 35000 < nowTime) then
  casting = true
  SkilltickA = nowTime
end
 if (casting == true) then
SkillObject(MyID,5,8002,MyID)
 end
 ...
end


このくらいシンプルにやっちゃってもいいのではないかと。

個人的には、タイマーは「次にスキルを使うタイミング」ではなく
こういうふうに「最後にスキルを使ったタイミング」を管理させたほうが
扱いやすいと思っていたり。初期値ゼロでスムーズに動くしね。

232(○口○*)さん :06/05/30 11:46
適当な思いつきだけど、AIでできる行動って、Move() Attack() Skill() の3つだよね?
それなら状態移行なんて見ないで、各行動タイミング見るほうがいい気がした。

わりと問題大量な気がしないでもないけど。

233(○口○*)さん :06/05/30 13:29
そのタイミングを図るのに状態遷移使ってるだけじゃないかな?

複数の行動は同時にできないから何とかSTとして他の行動を抑制していまなにしてるのかを明確にしてる
今自分の置かれている状態と周りの環境に合わせて移動するか攻撃するかスキル使うか決めてる


タイミングを見て処理っていうのがちょっとどういうのか気になるけど結局おなじにならない?

234(○口○*)さん :06/05/30 14:29
>>232
何が”いい”のかが分からないけども
function AI(myid)
 事前処理
 if(IsMoveTiming())then
  Move(MyID,MyDestX,MyDestY)
 elseif(IsAttackTiming())then
  Attack(MyID,MyEnemy)
 elseif(IsSkillTiming())then
  SkillObject(MyID,MySkillLevel,MySkill,MyEnemy)
 end
 事後処理
end
という風にすることが各行動タイミングを見るってことならば
function AIのステップ数を少なくしたいや、グローバル変数とかをすっきりしたい
という意味ではいいかもしれないけども
新しい行動 SkillGround() とかが出た場合や、行動タイミングを更新する場合に大変になる気がする
開発者に作りやすいってのは、バグが出にくいってことだと思っているから
見た目がスッキリしているっていうことより、構造がスッキリしているほうが好き

何がいいかは人それぞれだしね

235(○口○*)さん :06/05/30 22:44
>>234
それもアリだと思う。
コードの長さに制限のあったカルネージハート(古い!)なんかの世代だと
そういう書き方が主流だったし。

236(○口○*)さん :06/05/31 10:54
複数行動(指示)って、できないんだっけ?

それは置いといて、タゲが居るなら距離なんて見ずに、常に Attack() 出してるとか、ダメかしら(笑)

237(○口○*)さん :06/05/31 11:29
>>236
距離無視Attack()は、ダメじゃないさ
ただ、攻撃範囲内(範囲2以内?)にタゲが居なかったら痙攣を起こして何もしてくれないってだけで

まぁ だから実際、距離無視Attack()はお勧めできない

でも スキルは、今のところ遠距離でも出るから
距離を見ないっていう前提ならスキルの方がお勧め

238 ◆g37UcEp//g :06/05/31 13:15
支援スキルのディレイと効果時間はWIKIにあったんだが
カプリスとムーンライトの細かいディレイまとめてるところないかな?


あとGv用目玉機能の詠唱妨害なんだけどかなり効果低いかも知れない
できるかぎり即反応するようにはしてるんだが相手の詠唱短いと間に合わない

DEX60位のHLだと詠唱バーの真ん中ぐらいでカプリス1当たるんだが魔法は発動する
無詠唱は諦めるにしても
これじゃ一番止めたいロキ切れ目のLPとか止まらないかも

進捗
詠唱妨害80%
友達登録70%
指定移動100%
自動支援20%
拡張前提5%

以上中間報告

239(○口○*)さん :06/05/31 14:27
クライアントが対象の詠唱モーション表示→検知→妨害

って流れで、AIのサイクルがだいたい150msくらいだから、
タイミング次第じゃ妨害に流れるまで300ms近くかかる場合もあるのかもね。
0.5秒以下くらいの詠唱だと厳しいのかもしれんなあ…。

240(○口○*)さん :06/05/31 22:23
おまけにそこからさらに
スキルコマンド送る->受理されてスキル射出->敵に当たる->当たった敵が詠唱中なら詠唱を止める
までがあるしね
しかも
詠唱開始->クライアントに詠唱状況を送る->詠唱モーション&ゲージ0から表示
こんなだから初めにクライアントに詠唱が表示されている時点ですでに鯖内では詠唱半分終わってる可能性もあり

241(○口○*)さん :06/06/01 03:50
詠唱を見て詠唱妨害用スキル発動ではなくて、
事後承諾的ではあるが、
状況から詠唱をしている可能性が高い場合、詠唱をしているであろうPCに無差別に詠唱妨害を行うか
詠唱をしていないが、詠唱をするであろうPCに詠唱妨害を行う
という方法はどうだろう?
無駄撃ちが増えるという可能性もあるが、
詠唱が終わっているPCに詠唱妨害を行うという可能性と天秤にかけても悪くは無いと思うのだが

242(○口○*)さん :06/06/01 04:17
まぁ確かに、教授やWizあたりに連打しとくだけでもかなり嫌かもな。
でもディレイがあるからそれほど脅威じゃないかもしれん。

ちょっとアレかもしれないが、敵ギルマスのID覚えておいて
EMC妨害を確実に〜ってのならいけそう。

243(○口○*)さん :06/06/01 16:34
二日前に転職していろいろ弄ってるんだけど
みんなこれどーやってデバッグしてるの?

構文ミスったまま狩場にログインしてエラーメッセージで死にかけた(´・ω・`)

244(○口○*)さん :06/06/01 16:36
アクティブ居る狩場であんま実験しないほうがいい。


なんかコマンドプロンプトでシミュれるやつがなかったっけ?
WinterTaleあたりにリンクあるきがする。

245(○口○*)さん :06/06/01 23:52
>>243
前スレか前AI語るスレに、エラーが出てもエラー窓出さずに
ログはくだけ(ホムは動かないが)にする改造方法あったぞ

正直、アインブロック↓のメタリンならアクティブが居ないから
どうにでもなるがな。

246(○口○*)さん :06/06/01 23:58
>>デバッグ
AI語るスレあたりで以前に紹介されていた、
「起動時にエラーになったらテキスト吐いて止まるコード」がお手軽でお勧め。

今まで使ってたAI.luaをAImain.luaに変更。同じファイル内のAI()を AImain()に変更。
新規にAI.luaを作って、その中身は以下の通り。


function try(func, ...)
 local ok,err = pcall(func, unpack(arg))
 if (not ok) then
  TraceAI(err)
  AI = function() end
 end
end

function AI(id)
 try(AImain, id)
end

try(function()
 require 'AI/USER_AI/AImain.lua'
end)

247(○口○*)さん :06/06/02 09:45
そのAIを語るスレ落ちた?

248(*○口○)さん :06/06/02 10:12
落ちた
ttp://himenomikoto.web.infoseek.co.jp/kulus_project/mmoAI4.html

249(○口○*)さん :06/06/03 02:12
こっちも落ちそうだねえ。どうしよっか。

250(○口○*)さん :06/06/03 02:31
好きにしろよw

251(○口○*)さん :06/06/03 07:57
そろそろホムスレは統合したほうがいいんでないかい?
最終的にはケミスレに吸収の流れで。

252(○口○*)さん :06/06/04 19:34
ほむーほむー。

253(○口○*)さん :06/06/04 20:35
ジャルゴン食べて学校いくよ〜

254(○口○*)さん :06/06/05 12:41
どこにやればいいか解らないからここで報告する
ホムのバグなんだけどバグスレいったほうがいいかな?
まぁ何て言うか↓みてくれ
http://sarafiler.hp.infoseek.co.jp/cgi-bin/img-box/img20060605123702.jpg

255(○口○*)さん :06/06/05 12:41
ごめん揚げちゃった

256(○口○*)さん :06/06/05 12:44
>>254
まぁ何て言うか、激しく既出。

257(○口○*)さん :06/06/05 12:45
>>256
これってなんなの?
掲示板とかあんま見ないから教えて欲しいのです
よかったら先導してくれさい

258(○口○*)さん :06/06/05 13:01
>>257
状態異常(スタン石化など。行動不能系?)時に死亡あるいは安息すると、
次に呼び出すときにハイド呪いサイト状態で出てくるというもの。サイトエフェクトにあぶり出し効果は無い。
再度安息コールすれば良いらしい。

259(○口○*)さん :06/06/05 13:06
>>258
めっちゃありがとう
なにかわかんなくてかなり不安だった
そう言う条件なら結構頻出そうだね

260(○口○*)さん :06/06/05 16:28
前書き込んだものですが、あらかたバグも取り終わったので再度晒し。
ttp://mmgguild.hp.infoseek.co.jp/lif2.zip
AI&専用AI設定アプリです。
使い方は説明書を参照してください…

261(○口○*)さん :06/06/05 23:48
数種類いるモブの中から○○を優先して戦う
っていう設定ってできますか?

262(○口○*)さん :06/06/06 00:13
>>261
できる。
乱暴なやり方としては、たとえば公式配布AIにおけるGetMyEnemyA/Bの、

for i,v in ipairs(enemys) do
 dis = GetDistance2 (myid,v)
 -- ここから
 if(GetV(V_HOMUNTYPE,v) ~= {優先したいモブのID}) then
  dis += 20
 end
 -- ここまで追加
 if (dis < min_dis) then
  result = v
  min_dis = dis
 end
end

……のようにすればよい。
距離の近い敵を優先して狙うルーチンに割り込んで、

ただし当然狙いのモブのID番号が分かっていないと出来ない。
mobdata.luaを拾ってくるなり、自分でTraceAIに吐き出させるなりすること。

263(○口○*)さん :06/06/06 00:16
途中で送信しちまったい。自己レス。

>> 距離の近い敵を優先して狙うルーチンに割り込んで、
の後に以下の文章を追加。

狙いのモブ以外を20セル分遠くにいるとして扱わせることで
実質的に
・狙いのモブがいるときにはそいつらの中から一番近い奴を選ぶ
・いないときにはそれ以外の敵の中から一番近い奴を選ぶ
というルーチンとして機能させる。

264(○口○*)さん :06/06/06 00:22
最優先したいやつなら、範囲内で見つけ次第result設定してreturnしても
いいけどね。

でも近くに居るアクティブとかを微妙にトレインしてしまう結果になるから、
せめてノンアクの優先順位を下げる、くらいに抑えたほうがいい気もするけど。

265(○口○*)さん :06/06/06 00:54
>> でも近くに居るアクティブとかを微妙にトレインしてしまう結果になるから、
>> せめてノンアクの優先順位を下げる、くらいに抑えたほうがいい気もするけど。
確かにその通りなので、ちょっとGetMyEnemyそのものをいじって
アクティブ時の優先順位を「自分を殴る敵>指定した敵>それ以外」にさせてみた。
あまりスマートな構文になってないしバイオプラント回避とかは入れてないけど、
まぁ参考までにということで。

--
priority = {優先して狙いたいモブのID}
activity = {アクティブなら1、ノンアクティブなら0}

function GetMyEnemyX (myid)
 local result = 0
 local owner = GetV (V_OWNER,myid)
 local actors = GetActors ()
 local target
 local min_dis = 100
 local dis
 for i,v in ipairs(actors) do
  if (v ~= owner and v ~= myid and IsMonster(v) == 1) then
   target = GetV (V_TARGET,v)
   if (activity == 1) then
    dis = GetDistance2 (myid,v)
   elseif (target ~= myid) then
    dis = GetDistance2 (myid,v)+40
   else
    dis = 100
   end
   if(GetV(V_HOMUNTYPE,v) ~= {優先したいモブのID}) then
    dis += 20
   end
   if (dis < min_dis) then
    result = v
    min_dis = dis
   end
  end
 end

 return result
end

266(○口○*)さん :06/06/06 01:02
>>261
参考までに、当方の作成・公開しているAIでは対応している。
ttp://tomose.dynalias.net/RO/index.php?%A5%DB%A5%E0%A5%F3%A5%AF%A5%EB%A5%B9AI

ただしコイツ、索敵関連はごっそり差し替えている代物。
標準AIベースのモノに単純に移植するのは難しいと思う。
興味があるなら、上記の actors.lua内を参照してみておくれ。

267(○口○*)さん :06/06/06 14:54
ちょっと質問いいですか?
mobdata.luaなんですけど、ルートリンクアクティブ遠距離など返り値が0,1な
定数を使うとエラー吐いてしまうのです
例えばルート属性のMOBを取得させようと
routemob = MOBDATA[V_HOMUNTYPE,id][M_V_LOOT]
として
if文中でroutemob = 1略で構文したところ吐くエラーはroutemob = MOBDATA[V_HOMUNTYPE,id][M_V_LOOT]の行を指しています
なので、構文以前にlocalで呼び出してるMOBDATA[V_HOMUNTYPE,id][M_V_LOOT]に問題が有ると思われるのですが
どなたか判る方はいませんか?
因みに種族属性HPLv等オプションが設定されてるものはエラー吐かずに使えるのでどう対処して良いやらさっぱりです

268(○口○*)さん :06/06/06 14:59
routemob = MOBDATA[GetV (V_HOMUNTYPE,id)][M_V_LOOT]



すっごい基本的なとこだと思うんだけど。

269(○口○*)さん :06/06/06 16:37
>>268
すいません表記ミスです
MOBDATA[V_HOMUNTYPE,id][M_V_LOOT] = MOBDATA[GetV (V_HOMUNTYPE,id)][M_V_LOOT]
脳内補完して下さい

270(○口○*)さん :06/06/06 16:52
つーかもうちょいソース具体的に示してくれないとわからん。
インクルードはちゃんとしてる?

271(○口○*)さん :06/06/06 17:13
吐くエラーの文もほしいね。

272(○口○*)さん :06/06/06 17:27
ええと、まず敵取得ですがこっこさんとこのを参考に主人が攻撃、主人を攻撃、ホムを攻撃、優先する敵、フリーの敵
と分けて処理してるのですが
GetOwnerEnemy
  for i,v in ipairs(actors) do
〜略〜
    if (IsMonster(v) == 1 and PlantCheck(v) and v ~= (100000 - LostEnemy)) then
GetMyEnemy (myid)
  for i,v in ipairs(actors) do
〜略〜
    if (IsMonster(v) == 1 and GetV(V_MOTION,v) ~= MOTION_DEAD and v ~= (100000 - LostEnemy)) then
GetFreeEnemy (myid)
  for i,v in ipairs(actors) do
〜略〜
    if (1 == IsMonster(v) and TargetCheck(v) and PlantCheck(v) and GetV(V_MOTION,v) ~= MOTION_DEAD) then
などそれぞれTargetCheck(id) 、PlantCheck(id)にてlocal MOBDATA[GetV(V_HOMUNTYPE,id)]略でLv、種族、属性、属性Lvなど呼び出し真偽値を返しているのですが
これらに関しては問題なく動作してるのですが、この他にPriorityTarget(id)優先する敵を設け新たにGetPriorityEnemy (myid)を設け、GetOwnerEnemy、GetEnemyには
遠距離攻撃している敵を取得させる為、新たな関数を加えたのですが
mobdata.luaからの返り値が0、1とされているルートリンクアクティブ詠唱反応位置固定遠距離範囲攻撃等の定数を使用した場合エラーが出て動作してくれないのです

273(○口○*)さん :06/06/06 17:36
訂正:
GetOwnerEnemy、GetEnemyには 遠距離攻撃している敵を取得させる為、新たな関数を加えたのですが×
GetOwnerEnemy、GetEnemyとは別にそれぞれを遠距離攻撃している敵を取得する、新たな関数

274(○口○*)さん :06/06/06 17:37
>>273
だからエラーメッセージ書けよ

275(*○口○)さん :06/06/06 17:56
つ「MMOBBS@アップローダー」
TargetCheck(id) 、PlantCheck(id)含め全部うpした方が早い
その独自関数と関数の扱い方に問題があると見るのが普通かな

ちなみにエラーメッセージに書かれている行周辺のソースも書かないと分からないからね

276(○口○*)さん :06/06/06 18:37
>>272
その説明じゃさっぱりわからんw
周辺のソースを晒せと言ってる

277(○口○*)さん :06/06/06 18:53
ソース晒したくないなら、古典的なデバッグの話をしておこう。
落ちたときのvの値はいくつになっているか?
落ちたとき、そのループは1回も回っていないのか、それとも特定のvの値で落ちるのか。
そういうところを見ると、案外答えはわかる。

278(○口○*)さん :06/06/06 20:15
一番基本的なことを教えてあげる
「答えはエラー文に書いてあるからまず嫁」

新人プログラマーにまず教えなければならないことのひとつd

279(○口○*)さん :06/06/06 22:00
>>267の解読を楽しんでる自分がいるw
こんな感じの関数と読み取ってみました。

--遠距離攻撃をしている敵を取得する
GetPriorityEnemy( myid )
 local owner = GetV(V_OWNER, myid)
 local actors = GetActors()
 local priorityEnemysCount = 0
 local prioriryEnemys = {}

 for i,id in ipairs( actors ) do
  
  --自分か主人を攻撃している⇒ isTargetUs = true
  local target = GetV(V_TARGET, id)
  local isTargetUs = ( ( target == owner ) or ( target == myid ) )

  --遠距離攻撃していて、自分か主人を攻撃していたらprioriryEnemysに追加
  if( 1 == MOBDATA[Get(V_HOMUNTYPE,id][M_V_遠距離] and isTargetUs) then
   priorityEnemys[ priorityEnemysCount ] = id
   priorityEnemysCount = priorityEnemysCount + 1
  end
 end

 return priorityEnemysで一番自分の近くにいる敵

end

でどこが悪かったかといとそれは解らん。解読したかっただけですごめん。
ただまぁ
「if文中でroutemob = 1略」
てのが気になる。「==」じゃね
てかこの書き込み自身もそういうミスしてそうで怖い

280(○口○*)さん :06/06/07 04:11
こんばんはです。

友人と話をしていて共闘には砲台IAでLv1スキルいいらしいと聞いたのですが、
IAのくみ方がわかりません。
その友人に聞いてみたのですがチャットじゃ言うの大変だといわれました。。。

お暇な方がいらっしゃいましたら。迷える初心者をお助けください!

281(○口○*)さん :06/06/07 05:42
要するにLv1で1発スキル撃って、それ以外の攻撃はしないようにするということかな。

簡単な方法を一つ。デフォルトのAIをベースにする前提な。

全文検索して、 MyState = ATTACK_ST を全てコメントアウト(行頭に--を追加)する。
デフォルトAIだとOnCHASE_ST内にある1箇所だけのはず。
これで攻撃はしなくなる。

で、Lv1スキルは手動で撃つ。

あと基本的なことだけどバニルorフィーリルじゃないと駄目。
ちなみに非先行型にしておくと良い。
非先行型にする方法は、Wiki見て調べるかその友達に訊くかしてくれ。

282(○口○*)さん :06/06/07 07:36
共闘用っぽいな
アレは敵の選定にかなり難がある

細かい設計書を
・ホム視点から見て
・何が
・どういう状態になったときに
・何をするのか
コレをきれいに書き出すと作りやすいよ

283280 :06/06/07 16:56
ありがとうございます。

頑張っていじってみます!

284281 :06/06/07 18:22
ごめん、上のやり方だけじゃ足りないことに今気付いた。
OnSKILL_OBJECT_CMD内を変更しないとスキル撃たないわ。

function OnSKILL_OBJECT_CMD (level,skill,id)

    TraceAI ("OnSKILL_OBJECT_CMD")

    MySkillLevel = level
    MySkill = skill
    MyEnemy = id

-- ここから削除
--    MyState = CHASE_ST 
-- ここまで削除

-- ここから追加
    SkillObject(MyID,MySkillLevel,MySkill,MyEnemy)
    MySkill = 0
    MySkillLevel = 0
    MyEnemy = 0
-- ここまで追加

end

俗に言う射程制限解除ロジック。
あと、砲台タイプなら
MyState = ATTACK_ST を消すより
MyState = CHASE_ST を消したほうがそれっぽい動きになるな。

285(○口○*)さん :06/06/07 22:37
当方、鳥使い。
教えてください。

鳥は主人の側でしか行動せず。
遠くの敵に対してはスキル攻撃だけを行う。

このような事は出来ますでしょうか?
鋼体ベースで改造方法を教えてください。


動き回ると動き止ってしまうことがあるし、SPもきついよう。

286(○口○*)さん :06/06/07 22:54
>>285
>>281-284

287(○口○*)さん :06/06/07 22:56
っと、これだけじゃ手動スキルしか打てないか。

288(○口○*)さん :06/06/08 00:53
その手の行動はいちから起こしなおして一部だけコピッて作ったほうが早いんだけどねぇ
数箇所の指摘だけで実現できるようなものじゃないから
ここでのアドバイスだけって言うのはつらいかもしれん
待機、追跡、攻撃、移動、全状態でロジックの差し替えが要るしね

自分でいじって行って躓いた箇所をここで聞くか
もしくは誰かが作ってくれる可能性に賭けてお願いするか
どちらかに切り替えて絞った方が効果的

289(*○口○)さん :06/06/08 01:43
グローバル変数に
SKILL_ST=99
SKILL_ST_RANGE=5 スキルにするケミから敵の距離

function OnSKILL_ST() -- スキル攻撃中の状態
local EnMo = GetV(V_MOTION,MyEnemy)
if (EnMo == -1 or EnMo == MOTION_DEAD) then
MyEnemy = 0
MyState = IDLE_ST
return
elseif (true == IsInAttackSight(MyID,MyEnemy)) then
MyState = ATTACK_ST
return
end

UseAttackSkill(MyEnemy) -- events.lua内関数
end


AI()の状態処理に回りを真似てOnSKILL_ST()追加し、
OnCHASE_ST()の中でCHASE_ST -> ATTACK_STがあるifブロックの直前に

if (SKILL_ST_RANGE <= GetDistanceFromOwner(MyEnemy)) then
MyState = SKILL_ST
end

スキルディレイは欲しけりゃ適当に組むべし(工体のタイマー関連読み辛いからパス
敵選別やオーバーキル処置も欲しけりゃ自分でしる

290(*○口○)さん :06/06/08 01:46
- elseif (true == IsInAttackSight(MyID,MyEnemy)) then
+ elseif (GetDistanceFromOwner(MyEnemy) < SKILL_ST_RANGE) then
に修正

291(○口○*)さん :06/06/08 19:20
ふと思い立ったんだが
OnFOLLOW_CMD ()内にスイッチを設けてOnFOLLOW_ST ()を2種に分けるのって使えるかな
1つは従来の追従でもう1つは常にケミの前を歩いて、敵が来ても反撃しない
要はケミの前歩く事でアクティブをホムに集めるっていうの
まぁ用途はトレインなんだけど…城とかで活躍できないかなぁって思ったんだ

292(○口○*)さん :06/06/08 22:02
移動速度の関係上、常にホムが主人よりかなり早い状態でないと難しいと思う。
主人が方向転換すると状態が崩れるからね。
無論、方向転換してから一呼吸おいてやれば前に出てはくれると思うけど。
それでもいいならできるんじゃない?

293(○口○*)さん :06/06/09 01:36
前地点の座標から主人に追従するときに適当に座標を何セルか足してやるとか

294(○口○*)さん :06/06/10 00:31
ホムって転生すると消えるのかな?

295(○口○*)さん :06/06/10 00:37
スレ違いだった上に解決しましたすみません

296(○口○*)さん :06/06/10 23:06
ほむーほむー

297(○口○*)さん :06/06/11 14:57
もうみんないじるとこないのか?

298(○口○*)さん :06/06/11 15:10
ネタを出し尽くした感はあるな。実際、AIを語るスレは落ちたし。
現状、特に困っていることはないし、今出来ないこと(位置ずれ対策など)
をするにはAIの仕様が変わらないと無理だ。

299(○口○*)さん :06/06/11 20:16
自分や主人の標的が同じHOMUNTYPEのときは主人の攻撃中のを最優先にするってのはやってる
OnATTACK_STの先頭で自分と主人の標的のHOMUNTYPEを比較している。
これをやると婆なんかに集中攻撃して即倒せる。
トレインなしで殴るケミの場合にしか有効ではないだろうけどね。
あと、火力がホムに劣るとドロップ権がでないとかあるけどわりと便利。

300(○口○*)さん :06/06/11 22:39
ここで質問ってしていいのかな?

まったり製造工場のAIで寝落ち機能ってのがあるんだけど
何回かは通常に動作していて急にちゃんと動かないときがある。
(テロとかIWBBとかとにかくそういう関係のものはないしちゃんと/hoaiでそれにした)
寝落ち機能を使って出かける前と寝る前にギリギリまでエサあげて寝落ち機能使わせれば1日2時間分は多く稼げると思ったんだが。
すこしでも機能しない可能性があるならやめようと思うんだが(出かける前にしかけて10時間も放置したら洒落にならんし
やっぱり不可抗力?それとも他の完璧に動くAIってある?もってる?

やっぱりWINDOWS自体を落とす奴を使うしかないのかなぁ

301(○口○*)さん :06/06/11 23:28
>>300
一番の対策は少しでも眠気を感じたら安息する。

302(○口○*)さん :06/06/11 23:37
いや寝る前と出かける前に仕掛けといたら2時間分放置で稼げるじゃん?

303(○口○*)さん :06/06/12 01:27
>>299
それくまAIのとどう違うの? くまよりいい?

>>302
やっぱりWINDOWS自体を落とす奴を使うしかない
というかそれでなんか問題あるのか?

304(○口○*)さん :06/06/12 02:05
>>302
ママかパパに頼めばいいじゃん
つうか2時間稼げると言えば凄そうだが2,30分普通に狩る方が稼げてしまう
無駄にPCの寿命を縮めながら嫌われてデスペナのリスクもあるぞ
あと行儀の悪い方法はスレ的にタブーなのでよろしく

305(○口○*)さん :06/06/12 09:16
>>238はAI開発やめちゃったのかな
期待してたんだけど・・・残念;

306(○口○*)さん :06/06/12 09:50
親密度を稼ぐ話に見えるが

307(○口○*)さん :06/06/12 13:57
どう見ても新密度だな。

308(○口○*)さん :06/06/12 15:36
BOTer&BOTもどき
放置してんじゃね横殴りしてんじゃね
電車してんじゃね溜め込みしてんじゃね
晒しうけて逆切れしてんじゃね
良心あるなら今すぐ消せ。

309(○口○*)さん :06/06/12 17:12
>>304,308
親密度です。ちなみに街の人がはいらなそうな建物の端っこです

310(○口○*)さん :06/06/12 17:19
放置以外は「そうしない」為の雑談要望だし?
そういう行動してる奴は晒されても仕方ないくらい半端な設定なんだろうよ。

ただ「安全な」不特定板でコピペとか「簡易的」な上消すのが良心とか「短絡的」じゃ
俺のようにlv低くないとスルーされるだろうよ。

311(○口○*)さん :06/06/12 17:31
本スレでも荒らしてるのがいるからほっとけ。
ま、オートで空腹度下げるなんてホム失いたくなきゃやめといたほうがいい。
あと露店しながらエサやりとかもな。あっさり忘れたり寝る。
一度失わないとこのへんのはわからんが結構辛いぞ?

312(○口○*)さん :06/06/12 23:34
>>311
ペットで散々味わったからな。その辺はばっちり・・だ・・OTL
ホムは空腹度が数字で出るから、ペットよりは楽なんだよな。
もちろん、油断は禁物なわけだが。

313(○口○*)さん :06/06/13 03:00
一つ疑問に思ったことなのだけど
先攻AI組んでいて、タゲが他人にいってれば殴らない仕様にしているのに
騎士がBDS使うとそっちに行ってしまったことが2,3度あったんだ。
あれはタゲがリセットされてしまってるのかな。

314 ◆g37UcEp//g :06/06/13 08:13
>>305
期待されてた事に驚愕
一番やりたかった事が出来なくて萎えたのは事実

まぁやると言ったからには少なくとも初回リリースまでは持って行くけど
イマイチこれだ!ってのが無いんだよね

315(○口○*)さん :06/06/13 20:50
>>313
とりあえずそっちが組んでるAIがどう敵のタゲを判定しているかわからん。

なのでどうコメントしていいかわからん。
とりあえず解決してほしいならその判定部分のプログラムをだしてから質問しる

316(○口○*)さん :06/06/13 20:54
とりあえず推測で話をするが
他プレイヤーと該当敵モンスターの距離で判定している場合(工体AIと同じ)
BDSによって距離が離れて判定がタゲられていないとなっている可能性がある。
その場合判定距離を多く設定してやることである程度回避は可能。

317313 :06/06/14 00:00
>>315,316
GetActors()で IsMonster == 1 のmobを取得

主人がmobを攻撃→攻撃する
↓NO
mobのV_TARGETが他プレイヤーか他ホム→攻撃しない
↓NO
mobのV_TARGETが主人かホム自身→攻撃する
↓NO
mobのV_TARGETが0(=フリー)→周りに人がいなければ攻撃
↓NO
攻撃しない

こんな感じで攻撃対象を絞ってその中で一番近いのを攻撃させてる
んで、「mobのV_TARGETが0(=フリー)」のところしか攻撃方法ないのだけど
突っ込んでいくのでおかしいなと

318(○口○*)さん :06/06/14 00:24
V_TARGETで取得できるデータはあくまで殴っている最中の相手なので、
「狙いをつけた相手に向かって近づいていく最中」のMobからはデータがとれない。

非先行AIを見るとそのあたりは分かりやすい。
「こっちに向かってくる」敵はこちらをターゲットしているとみなさず、
一度殴られてからようやく反撃を始めるだろう。

とまぁ、そういうことかと。

319(○口○*)さん :06/06/14 01:34
それが困ったことに
画面内で一度攻撃したら他の誰かを攻撃するまで永遠に同じ値を取得し続けるはずなんだよ
たとえ一度死んで横沸きしても
前に攻撃されてたのは自分&現在狙って移動中なのは他人->でもV_TARGETは自分のまま
索敵時だけのチェックだとコレで横殴りしまくることになる

その対策で誤爆の可能性は残ってしまうけど移動中も常に調べつづけてすぐにタゲを外せるようにする物と
多少反応が遅くなるものの確実な値が取れるMOTION_ATTACKのV_TARGETを設定した瞬間しか信用しない物
の2種類が主に使われている

320Glenelgの人 :06/06/14 08:12
上記の流れに続いて、関連話題というか情報というか。
最近気が付いたんだけど、この GetV(V_TARGET,〜) の値が「新しいタゲを取らないと変化しない」という件。
当然のようにケミ自身:つまりGetV(V_TARGET,MyOwner) についても同じことが言えている。
なので例えば、以下のようなことが起こりうる。

・ケミがタゲを取るために敵Aを1発殴る。この時点で、GetV(V_TARGET,MyOwner)は「敵AのID」が取れるように。
→その後のケミやホムの攻撃で、敵Aが死ぬ。
 敵Aが死んでも、GetV(V_TARGET,MyOwner)は「敵AのID」が取れる。
→敵Aと同じIDを持つ敵・敵A'が新たに湧いて、画面内どこかに出現する。
 この時点でもGetV(V_TARGET,MyOwner)は「敵AのID」が取れるので、
 ホムから見ると、「ケミが湧いたA'をタゲっている」ように見える。
 (もちろん、ケミはこの時点ではA'に対してはまだなにもしていない)
→「ケミと同じ敵を殴る」動作をするAIだと、ケミがまだなにもしていないのに
 ホムは「共闘しようとして」A'を殴りに行ってしまう。

313氏のAIも「ボスが攻撃している敵を一緒に攻撃」のアルゴがあるようなので、
このあたりはチェックする必要はあるかと。

以上、長文にて失礼。

321(○口○*)さん :06/06/14 09:39
4日ぶりに狩りに行った。
BOTが人反応でぴゅんぴゅん飛び回って、目に見えない勢いでMOBを倒していた。

画面内に入った後、1s以内に再度消える動作を10回以上連続したIDをTraceAIで
書き出すAIなんて作ったら価値があるのかなぁ orz

322(○口○*)さん :06/06/14 10:21
>>321
ダブルテレポも晒す羽目になるから注意ね。

323(○口○*)さん :06/06/14 12:28
先日砲台AIについて聞いたものなのですが
どうもうまく機能してくれません(汗)
私のやり方がおかしいのかもしれませんが・・・。

どこは配布してあるとこなどはないでしょうか?(汗)

324(○口○*)さん :06/06/14 12:49
プラントもどきでいいなら今日中に作って上げる事も出来るけど…
流石にそれはちがうっしょ?

325(○口○*)さん :06/06/14 12:59
>>324
それはそれで役に立つので欲しいかも・・・

326(○口○*)さん :06/06/14 18:13
>>324
うぁ、それほしいかも…。
前にちょっと挑戦しようとして、うまくいかなかったので。

固定PT狩りとかGv防衛とかで使えないかなぁと思って。

327(○口○*)さん :06/06/14 20:04
んじゃ仮を置いといたので勝手に使ってちょ
WIKIのサンプルページ
http://f31.aaa.livedoor.jp/~alchemi/pukiwiki.php?Lua%2FSample
プラントAI(仮)ってのがそれ

現状仕様:右クリックで移動、見えた敵にスキル撃つ、近づいた敵を殴る、行動ONOFF(デフォOFF)
問題点:無差別、もっとも近い敵が対象優先(距離によってころころ変わる)

多分挑戦して失敗した人は今の動きまくるAIを改造しようとして失敗してるだけかと一から起こした方が早いよ
一応コレに横殴り防止とタゲの維持選択を組み込めばちょっと優秀なプラントになる

328(○口○*)さん :06/06/15 11:06
>>323
砲台というか、共闘ボーナス目的用に興味があったので、
自分のところで配布しているAIにその機能を追加してみました。
設定はある程度変更できますが、一応共闘ボーナス目的用の設定にしてあるので、
まずはそのまま動かしてみてください。

非先攻型で、身内がタゲったりタゲられたりしたら、
その敵に対して一発、Lv1スキルをぶちかまします。
鳥とゼリーは勝手に判断するので、気にしなくていいですが、
ゼリーはLv1でもSP消費が激しいので、鳥がいいかも。

ttp://www5e.biglobe.ne.jp/~anka/f_etc/ai_p011a.lzh

329(○口○*)さん :06/06/16 06:49
AI改造してから、テレポを使うかマップ移動で唐突に(エラーメッセージなしで)
ゲーム画面からログイン画面に遷移する事が多くなったんだが原因ってなにかわかる?
予想としてはGvの同期落ちと同じだと思うのだが、
エラーメッセージ無しでログイン画面に戻るので気持ち悪い。同じ症状の人いる?

330(○口○*)さん :06/06/16 07:09
どう改造したのかわからんのに同じもクソもない

331(○口○*)さん :06/06/16 07:37
もしAIが直接何かしてるとすればソース全部を「os.」で検索して見れ

そうでないなら初回ロード〜2・3回目までを机上とレースしてみればいい
テレポもMAP移動もAI捨てて読み直すから


それはそうと
正常コード中にstack over flowとか言われるんだけど

Luaの仕様にその手の制限何かあったかね?
多重ループさせてるから何かの領域が足りなくなったのかな?
それともどこか内部でネストしすぎた?

332(○口○*)さん :06/06/16 08:48
>>331
ネストしすぎというか、再起呼び出しとか関数同士が相互に呼び出しあってたりしない?

StackOverFlowは、うちも前に出したことがあった:そのときの状況は、
再起呼び出しの脱出条件をミスって無限ネストしてた。

333(○口○*)さん :06/06/16 13:31
本スレでちょっと話題になってたから面白そうだったから
画面上に敵がいなくなった時に自動テレポ機能追加してみたんだけど、
うまく動くときと動かないときがあるんだけど、誰か原因わかります?

ちなみにテレポLv1じゃなくてPPLv1に置き換えると毎回問題なく動くけど、
テレポにすると100回位SkillObject使ってやっと動くって感じ。

334(○口○*)さん :06/06/16 13:51
ヒント:このスレを100回読み直せ

335(○口○*)さん :06/06/16 13:53
AIからのケミ操作はタブー
以上

336(○口○*)さん :06/06/16 14:00
>>334
101回読んだので書きました^^;;;

で、ケミスキル使っちゃいけないなんてどこに書いてあるんだ?

337(○口○*)さん :06/06/16 14:04
798 :(○口○*)さん [sage]:06/05/08(月) 19:50 ID:8PXmN+P1
実際に黒だとか白だとかが問題なのではない。

「黒と取れる可能性が少しでもある」場合、それを黒と捉えて
鬼の首を取ったように叩きに来る人物が現れる可能性があるから
面倒を回避するために自粛すべきだって言ってるんだ。


至言だな…

338333 :06/06/16 14:15
過去スレ読んできた。スマンもう書かない。スレ汚し失礼しました。

339(○口○*)さん :06/06/16 14:30
うわ、素直だっ!?
すまんまたホムBOT煽りの類かと思ってそっけなく答えてしまった…

340(○口○*)さん :06/06/16 17:42
だからといってさも真っ黒であるかのように語るのはどうかと思うが
>337に書いてあることを徹底して後は各自でやればいい

>333
テレポートはEnter押さないといけないから出来ないと思ったが違うのか

341(○口○*)さん :06/06/16 21:38
公式AIに地面指定系のスキル使用関数らしきものすら記述されてるしね…。

でもこれって完全に未実装なのかな?
バグ報告とかするつもりで、一応値入れてみたけど動かないわ。
まぁもし何かでふさいでるとしたら…それなりに褒めてあげるべきなのか。
だが、それならそうと何故ハナから書かれているのだろうか…。

342333 :06/06/16 21:39
ごめんもう一度書きにきた

>>340
もちろんそうですよ。
本を読みながらまったりと狩りしてるので、
窓が出たときにENTER押すだけでよければ楽だなぁと思ったんですよ。

ただ何回かやってると、数歩歩くまでテレポが発動しなくなるんで
その辺は対策してあるって事だと解釈して諦めました。

343329 :06/06/16 22:39
329です。

単に重いだけなのかと思い、PCを性能のよいものに乗り換えると
症状がなくなった。やはりたんに重いだけの模様。
でも同気落ちのメッセージなしにタイトルまで戻るのは謎。
>>331さん
os.も見たけど悪さはしてないっぽい。

ついでに改造したAIっていうのは工体をベースに以下の機能を追加したもの
・敵に与えたダメージ蓄積量の概算
・敵の概算残HPごとに使用スキルのレベル自動調整
・500msecごとのGetActors()の実行とターゲット切り替え(横沸き対策)
・攻撃終了時にSP回復まで1.5秒切ってたら回復してから次のターゲットまで移動
・高FLEEの相手にバーストモード
・高HITの相手にバーストモード
・ギルメンが通りかかったらそのまわりをうろつく
・くるくるAI

344(○口○*)さん :06/06/17 00:56
PC変更で症状でなくなったっつー事はAI処理が重いんかの…
ルーチンのシェイプアップをしてみるのが吉かな
・敵に与えたダメージ蓄積量の概算
これはホムATK、ASPDから算出かな?
どんなルーチン組んでるのか気になる…
・500msecごとのGetActors()の実行とターゲット切り替え(横沸き対策)
メインループ呼び出し間隔が150ms〜180ms(勿論AIの組み方で違うが)だし
厳密に時間管理はできんから、ループn回ごとorタゲ死亡時に〜程度で十分じゃないかな?

345(○口○*)さん :06/06/17 04:19
カオティックベネディクションを自動化しようと関数を組んでみたんだけど上手く動作してくれません
function OnAutoCV_ST ()
if (Flag_AutospellCVSkill == 1) then
  for i,v in ipairs( GetActors() ) do
   if (IsMonster(v) == 0) then
    MySkill = 8014
    MySkillLevel = 5
    if (MySkill ~= 0 and MySkillLevel ~= 0) then
    local type = GetV(V_HOMUNTYPE, MyID)
    local HomunculusSP = GetV (V_SP,MyID)
    local HomunculusMaxSP = GetV (V_MAXSP,MyID)
    local OwnerHP = GetV (V_HP,MyOwner)
    local OwnerMaxHP = GetV (V_MAXHP,MyOwner)
     if (type == VANILMIRTH or type == VANILMIRTH_H or type == VANILMIRTH2 or type == VANILMIRTH_H2) then
      if (HomunculusSP == HomunculusMaxSP and OwnerHP ~= OwnerMaxHP and GetTick() > SkillDelay) then
       SkillObject (MyID,MySkillLevel,MySkill,MyID)
       SkillDelay = GetTick() + 1000
      end
     end
    end
   end
  end
  MySkill = 0
  MySkillLevel = 0
end
end
一応CVはしてくれるのですが、各HPSP条件を満たすと敵が居てもCVしてしまうのです
最初は
object = GetEnemy (MyID)
if (object ~= 0) then
で分岐させようと思ったのですが、策敵範囲を設けてるため視界内に敵が居る事もあるので
for i,v in ipairs( GetActors() ) do
で分岐させた次第です

346(○口○*)さん :06/06/17 04:21
追記
function OnAutoCV_ST ()関数はfunction OnIDLE_ST ()内で呼び出してます

347(○口○*)さん :06/06/17 06:39
>>345
上記関数は詳しくみていないけど、「使って欲しくないタイミングで勝手に使ってしまう」という
時点で上記関数自体の問題ではなく、それを呼び出す場所の問題だと思います。
(HP/SP条件が合えば使っている時点で、関数そのものは大きな間違いはないんじゃないかと)

OnIDLE_STでの基本的動作は
「周囲に敵がいれば OnCHACE_STに移行」
「敵が周囲にいなくてかつケミとの距離が離れていれば、OnFOLLOW_STに移行」
・・・というもの。
敵がいてもCVを使ってしまうってことは、上記の判断よりも前にそのCV使用関数を呼んでいるからだと思います。

標準AIだとしたら、OnIDLE_ST()の一番最後で呼び出すようにすればいいんじゃない?

348(○口○*)さん :06/06/17 07:24
こういうのは机上とレースするのが一番いい
for文で1回目でもし自分自身のIDが取れたらどうなる?
もしその後ろに敵IDが続いていたとしても中に入ってしまうよ

やるなら
  for i,v in ipairs( GetActors() ) do
   if (IsMonster(v) == 0) then
    MySkill = 8014
--------------↓----------------
  MobFlag = 0
  for i,v in ipairs( GetActors() ) do
   if (IsMonster(v) ~= 0) then --まず先に全IDを調べて
    MobFlag = 1 --Mobが1匹でも居たらフラグ立てる
    break
   end
  end
  if MobFlag == 0 then --フラグがたっていない=Mobが1匹も居ないならスキル処理
   MySkill = 8014
に書き換え(ついでに後ろのend個数を合わせて)

349(○口○*)さん :06/06/17 10:24
重くてやめた処理にプレイヤーの攻撃範囲の計測があるなー
GetDistanceで敵との距離はかって先攻するかを判定してた時があったけど
とんでもなく重くなるからやめた。町中だとクライアント完全に固まるし

350(○口○*)さん :06/06/17 12:56
亀レスだが固定砲台実装してるAIは3月からあった気がする
横殴り防止の機能でID索敵繰り返すせいでホムのASPDが下がるという致命的バグを内包してるが

ケミテンプレのAIのリンクから探してみ

351345 :06/06/17 14:56
>>347-348
感謝ですフラグ追加のお陰でなんとか動いてます
ただ画面内即沸きの敵IDを取得させない様になってるので、そこの問題が残ってますが
基本動作は完成したっぽいです
これでカプリスを使わない狩場でSPを無駄にせずに済みそうです

352(○口○*)さん :06/06/18 18:01
質問なのですが、「右クリックで移動・スキルコマンドでスキル発動」以外一切の行動をしないAIというのを作りたい場合
デフォルトからOnMOVE_CMDとOnSKILL_OBJECT_CMD以外の処理を消せばいいのでしょうか?

353(○口○*)さん :06/06/18 18:27
>>352
それやると、スキル行動もしなくなるよ。
くまーAIの人のところの解説読んで、ポイントになるところをきちんと探さないとダメ。

今、ざっと考えたところだと・・・
・OnATTACK_OBJECT_CMD() の中身を空に
・OnFOLLOW_CMD() の中身を空に
  以上2つで、ALT+右での移動以外の入力を無視。
・OnIDLE_ST() の中身を空に
  以上で、やることがなくても自分からは何もしない。

・・・となるはず。
あとは調べて。

354353 :06/06/18 18:36
上記した内容では、たぶんこういう不満(というか機能削りすぎという声)がでると思うので、
もうちょっと補足しておく。

・上記した変更をすると、「ケミがホムから離れたら追従移動」という動きもしなくなる。
 追従をしたいときは、OnIDLE_ST()内を全部消すんじゃなくて、一部分を残さなきゃならない。
 「local distance = GetDistanceFromOwner(MyID)」から始まる数行を残すこと。
 
・標準AIだと、スキル攻撃するとその後自動的に白兵戦を始める。
 それをさせたくないときは、OnATTACK_ST()内にちょっと手をいれないとならない。
 OnATTACK_ST() 内で「MySkill = 0」としてある行があるはず。
 その後ろに「MyState = IDLE_ST」「MyEnemy = 0」の2行を追加すること。

355(*○口○)さん :06/06/18 19:10
>>353で「スキル行動もしなくなる」って言ってるのはスキルを使う部分がOnATTACK_ST()の中にあるからで
SkillObject (MyID,MySkillLevel,MySkill,MyEnemy)をOnSKILL_OBJECT_CMD()のend前に入れてやれば
>>352で言っているやり方で概ねおk
但しProcessCommandとAIの中身は消さない+他は中身のみ消すこと(function 〜 endは残す

function ProcessCommand(msg)
  if (msg[1] == MOVE_CMD) then
    OnMOVE_CMD (msg[2],msg[3])
    TraceAI ("MOVE_CMD")
  elseif (msg[1] == SKILL_OBJECT_CMD) then
    OnSKILL_OBJECT_CMD (msg[2],msg[3],msg[4],msg[5])
  end
end

とすれば他の中身は消さずに出来る

356(*○口○)さん :06/06/18 19:16
あ〜スマン中身は消さずには出来ないや・・・
OnMOVE_CMDとOnSKILL_OBJECT_CMDでMyStateに代入してる行消さないとダメやね

一応予想を入れておくと
「これやってもGvでラグの中で問題なく使えるAIにはならない」

357(*○口○)さん :06/06/18 19:24
さらにスマンGvで問題なく使えるわorz

到着したかどうかは関係なくコマンドに対して一回しかMoveを送らず、
発動したかに関係なく連打したコマンドの回数だけSkillObjectが送られるから
指示以外の動作は「動かない(ラグ等)」で居て欲しいなら十分使える

358(○口○*)さん :06/06/20 06:42
ホムにできる事出来ない事のまとめってどこかに載ってたっけ

359(○口○*)さん :06/06/20 06:59
>>358
テンプレサイトにある分じゃ不足?
ttp://f31.aaa.livedoor.jp/~alchemi/pukiwiki.php?%A5%DB%A5%E0%A5%F3%A5%AF%A5%EB%A5%B9%2FLua%2FAI

360(○口○*)さん :06/06/20 16:13
ネタ投下。
こっこAI Ver2.10

■ステップコマンド入力
 こっこAIにはステップコマンドによる入力体系を実装しています。
ホムと主人が隣接している状態で、主人の上下左右1セルの位置をAlt+クリックで移動させることで、
十字キーの↑↓←→のようなコマンドとして認識します。このコマンドを3回入力したときの組み合わせで
特定の命令を行わせることが出来ます。


□■□
■○■
□■□       ○主人 ■移動先


プログラム上ではテンキーの数字(2,4,6,8,)を用いて表現しています。
このコマンド入力は、「主人とケミの距離が1以下」でなければ有効になりません。
隣接した状態からコマンド位置へクリックすることで正しく入力されます。
距離が2以上の場所から■の位置へ移動させても入力されませんので注意してください。
 現在は2種類のコマンド命令しか実装しておりません。今後必要に応じて増える予定です。
AI改造が理解できる方は、JudgeCommand()の中にコマンド判定を追加していけば、
任意の命令をステップコマンド入力で実行させることも可能になります。

現在実装しているコマンド

◆ばくれつけん(フルブースト)
コマンド:←→←
・フリットムーブLv5発動(フィーリル限定)
・オートムーンライトの発動率が100%に(ディレイ中は通常攻撃)



コマンドバリエーション増やせば色々拡張出来そうかなぁと。
わざわざコマンドさせる必要性云々は置いといて、なんかこう
必殺技入力みたいな感覚が楽しいかなと思ったので。

361(○口○*)さん :06/06/20 17:52
他人のIDは取得できるけど名前は取得できないんだっけ
工体のフレンドリストだとIDと職しか出ないから整理する時困る

362(○口○*)さん :06/06/20 20:11
無理。MOBだって名前はとれないしな

363(○口○*)さん :06/06/20 20:19
直接AIには関係ないけど、VxEditor用の、
「タブを全角空白二つに変換してクリップボードにコピー」するdms書いてみたよ。
下のコードをてきとうな名前("tab2jspace.dms"とか)で保存して、
ツールの設定で追加すればよろし。

/* タブ->全角空白x2 コピー */
new Clipboard.asText = new Editor.SelText.replace(/\t/g, "  ").replace(/ /g," ");
/* ここまで */


で、逆にテンプレスレのコードを貼り付けるのも書いてみたんだが、
こちらは微妙・・・
/* 全角空白インデントをタブに変換して貼り付け */
var str = new Clipboard.asText;
/* * ブラウザからの貼り付け対策 * */
// 文頭の半角空白⇒削除
str = str.replace(/\n /g,"\n").replace(/^ /,"");
// 文末の半角空白⇒削除
str = str.replace(/ \n/g,"\n").replace(/ $/,"");
/* 全角空白インデントをタブに変換 */
if( str.match(/\n [^ \n]/) ){
  // インデントは全角空白1個派
  str = str.replace(/\n /g,"\n\t").replace(/^ /g,"\t");//文頭のインデント
  str = str.replace(/\t /g,"\t\t");//2階層以上のインデント
} else {
  // インデントは全角空白2個派
  str = str.replace(/\n  /g,"\n\t").replace(/^  /g,"\t");//文頭のインデント
  str = str.replace(/\t  /g,"\t\t");//2階層以上のインデント
  str = str.replace(/\t /g,"\t ");//全角空白が奇数個のとき
}
/* * 貼り付け * */
new Editor.SelText = str;


>>361
登録時間も記録して、フレンドリストに登録したときに手動でとった
SSを見ながらフレンドリストを整理できるツールをつくるというのはどうよ
(ファイルのタイムスタンプが記録したのと一番近いSSがほげほげ)

364Glenelgの人。 :06/06/20 22:25
>>360
情報さんくすandうちのAIでも似たようなことをやる土壌は作っているので、逆に情報提供。

うちの場合は「隣接1セル」ではなくて、「画面を大きく9分割」して同様のテンキー的コマンドができる下準備をしている。
範囲を広くした分通常移動との区別が必要なので、コマンド入力操作はALT+SHIFT+右クリックを利用。
まだ実装しているコマンドは「52入力で草捜索実施」くらいだけど。

隣接1セルだと、乱戦時には入力が難しいから上記のようにしたけど、
その代わり予約入力は廃止したし、マウス移動量は大きくなってるから、よしあしではある。

なにかの参考になれば。

365(○口○*)さん :06/06/21 08:19
>361
IDが取れたら○○らくえにアクセスしてIDと職業から該当する名前を取得、
FliendListのID欄に項目を追加・・・

ごめん言って見ただけだ

366(○口○*)さん :06/06/22 23:19
アクティブモンスターがホムに向かって移動中のとき
ホムの半径nセル以内に近づくかつ射線上に他の人がいなければ
ノンアクティブ状態でも攻撃しに行く、ってのを考えてるんだけど時間経過をどうしようかで詰まる。

これできればトレインとかも殴りに行かないんじゃないかなぁ、とか妄想。
でも動作重くなりそうだなぁ・・・。

367(○口○*)さん :06/06/22 23:59
ぶっちゃけ、ケミから半径nセル(だいたい10に指定してる)以内に他人がいればノンアクに、
人がいなければアクティブになるようにしてるが、流石にこれだと横殴りはないな。


込んでる狩場だとほぼノンアクティブになるけど、それはそれでケミで
一発小突いてあげればいいだけだし。

368(○口○*)さん :06/06/23 00:28
工体の人更新とまっちゃってるけど
あそこにないMAPを認識させたい場合はどうすりゃええのだろ
コンフィグにかきこめばいいのかな、でもその機能削除したとかなかったかな

369Glenelgの人。 :06/06/23 01:04
>>366
うちのAIでもそれに近いことができないか考えて、周囲のオブジェクトのヒストリー管理をする仕組みを作るまではやってる。
索敵関連は完全に独自処理なので、参考になるかどうかはわからないけど、一応紹介。
ttp://tomose.dynalias.net/RO/index.php?%A5%DB%A5%E0%A5%F3%A5%AF%A5%EB%A5%B9AI

actors.lua 内、CheckNearActors() と AddObjList()。
うちのAIでは、AI()が呼ばれるたびにまず CheckNearActors()を呼んで、周囲のオブジェクトを全部チェックして、
「前回Checkしたオブジェクト群」と比較して、以前からいるものはヒストリー情報を記録、そうやって見えているモノ
全てを ObjList[]の中に整理して、以後、普通のAIでGetActor()するようなところでは、この配列ベースで運用している。

あんまりお行儀いいソースじゃないけど、参考になれば。

370(○口○*)さん :06/06/23 14:09
>>368
あのマップセレクトのファイルは
MAPフォルダ内のcurrent_mapcode.luaの内容を変化させてAI側はホムの行動時にそれを参照、座標を割り出すという感じになっとる。
(マップ名の読込先が別ファイルになってるからAI実行したままの変更が可能なわけだな)
というわけでcurrent_mapcode.luaの中の
「return "anthell02"」
とかなってる部分を必要なマップ名に変えてやれば変更用プログラムにないマップでも追加可能だ

371(○口○*)さん :06/06/23 14:10
30 02 00 02 __x2 00 00 18 00 00 00 = 2d 02 00 00 01

372(○口○*)さん :06/06/23 14:12
あとプログラム自体はメモ帳で編集できるから自力で追加するという手もあるな。

373368 :06/06/23 15:47
>>370,372ありがとうございました
current_mapcode.luaでの変更方法わかりました
追加というのがいまいちよくわからんのですが
ROMapSelect.htaに書き加えればいいってことでしょうか

374(○口○*)さん :06/06/23 16:42
>>373
そういうことだな

ただ画面内にマップ表示とかするには適当なマップ画像用意したりと何かと面倒だけど
まああとは普通のHTMLの知識さえあればほとんど困らずに追加できるはずだ
(ちなみにHTMLの書き方がわからんとかはここで聞かないように、そんなもん自分でしらべるべし)

375366 :06/06/24 14:59
>>369
とても参考になりました。
でもかじった程度のlua知識だとよく分からないところも多いので
リファレンスとにらめっこしながら試行錯誤してみようと思います。

376(*○口○)さん :06/06/24 19:09
MapReader用MAP指定アプリ(工体AIに対応済)
http://himenomikoto.web.infoseek.co.jp/kulus_project/index.html#hta.zip

htaファイルと関連ファイル、設定対象のMapReader_c.luaと、current_mapcode.luaが同梱されています。
デスクトップ等に解凍後ReadMe.txtを参考にUSER_AI/MAPフォルダ内に配置してください。

使い方はおおよそ直感で判る様に作ったつもりですが、判りづらい等あればコメント欄からどうぞ
右下のホム画像関係は遊び(後付)で付けたも物なので面白い案があれば後々手を加えます。

-- 就活でかなり作業や反応は遅いですが・・・_| ̄|○

377(○口○*)さん :06/06/25 10:13
このスレのGv用のAIって結局公開されなかったんかな?
ホム育ってきたからGvで使ってみたかったんだが

378(○口○*)さん :06/06/25 12:57
作っても公開したら他のギルドも使えるようになるわけで
公開を期待するのは望みが薄い気がするよ

早い話が自分で作ればいい
スキルアップにもなってちょうど良いじゃな〜い

379(○口○*)さん :06/06/25 15:52
いっぱしのAI書きで、Gvモードも作ってみたいけど自分がGvやらないので
Gv用ってのが具体的にどんな動きを望まれるのかよくわからない。

380(○口○*)さん :06/06/25 15:54
まず第一にとにかく処理を出来る限り軽くって感じじゃないかな?
で、その軽い範囲で出来ることを…ってところだと思う。

381 ◆g37UcEp//g :06/06/25 16:02
でも、正直どうなんだろうね
自分はGv出ながらも他の要職やってるからケミは出せないんだけど
自分で作って身内配布してる人にとっては邪魔かね

>>377
一応配布はしますよそのうち
たいした効果がないってのがわかっちゃったのと
1.5倍期間のおかげで手をつけてないだけです

進捗的には
詠唱妨害 100%
手動移動 100%
友達登録  70%
自動支援   0%

友達登録は画面全体の登録しかサポートしてない
人が増えたらもう一回実行すれば前のリストに追加して増やしていくけど
敵がリストに入ってしまった場合は一度呼びなおして消さないといけない
ファイル書き出しをしないから呼びなおしとMAP移動で再登録がいる

今はこんな感じ
ファイルの入出力系を調べるのがだるくて先に進んでいないって感じかな

>>380
うちのAIは処理自体を軽くっていうより
「余計なことをさせない」のと「鯖に送る命令は最低最小限」
コレだけかな
余計なことをさせないでさせたいことだけするために一から書き起こしてる

382(○口○*)さん :06/06/25 16:29
ローカルが余程重くならない限り、Move、Attack、SkillObjectとかの関数でパケットを
連続して送らなければあまり問題にならないと思うんだよね。
GetActorsとかは多分ローカルで済ませてるから多少回しても大丈夫だろうし。

383(○口○*)さん :06/06/25 21:40
GvGでアクティブにしても先行攻撃しないんだが…(同盟外
対人はこういう仕様なん?

384(○口○*)さん :06/06/25 22:07
索敵条件にIsMonstarっていう関数を使ってる場合、
攻撃可能かどうかではなく、対象がMobであるかどうかを判定しているので(多分)
これが含まれていると対人で攻撃可能であってもMobではないので
PCに攻撃に行かないと思われる。

対人でアクティブに攻撃させたいのであれば、IsMonstarを省く必要がある。

385(○口○*)さん :06/06/25 22:36
そういえば、工体AI使ってるんだけど
ウルドで人間シフト右クリとかやっても攻撃してくれなかったなぁ
シフト押しながらムーンライトしたらケミがてくてく相手に近付いて密着し
ホムは離れたままムーンライトとか妙なことやってたよ

386(○口○*)さん :06/06/25 22:38
シフト右クリじゃなくAlt右クリだった
で、自分で工体AIをウルド仕様に改造してみようとやってみたけど
よく分からず断念

387(○口○*)さん :06/06/26 01:18
あれ、IsMonsterって人でも攻撃可能だったらTrue返すよね?

388(○口○*)さん :06/06/26 01:41
場所によるがGvGってかなり重いじゃん?
たまに狩場でなってるみたく、ラグってスタックしてるんじゃないか?

389(○口○*)さん :06/06/27 00:33
>>381
友達登録はできればファイル使ったほうがよいと思う。
砦はWPが山ほどあるし事故で死んでも再登録になってしまうから。

ファイル入出力はThe Winter's taleで使いやすいライブラリ配ってたからそれ使うとよいかも。
ttp://www.sgv417.jp/~winter/alchemy/user_ai.html#setini

390(○口○*)さん :06/06/27 01:18
IsMonster省いたら同盟キャラとかでも攻撃しにいきませんか?
実際に攻撃が当てられるかは分かりませんが。

391390 :06/06/27 01:39
自己解決…
事前に友達登録するんですね。
しかし面倒ですね。

392(○口○*)さん :06/06/27 19:10
イマイチ流れが掴めない
結局IsMonsterをかけると

敵対Gの人は True or false
敵対Gの植物は True or false
敵対Gのガーディアンは True or false

同盟Gの人は True or false
同盟Gの植物は True or false
同盟Gのガーディアンは True or false

自分Gの人は True or false
自分Gの植物は True or false
自分Gのガーディアンは True or false

どうなるのかな

393(○口○*)さん :06/06/27 21:58
とりあえず植物とガーディアンは敵味方関係なくtrueが返ると思う。
一般フィールドで自分のジオすらtrue返るし。

394(○口○*)さん :06/06/27 23:22
とりあえずIsMonsterの戻り値はTrue/Falseじゃなくて1/0だと思った。

395(○口○*)さん :06/06/28 22:17
ホムが全く攻撃しないAIって作れないんですかね・・・ペットのようについてくるだけ。主人が交戦中だろうが、
ホム自身が殴られていようが攻撃しないという(´・ω・`)

396(○口○*)さん :06/06/28 22:35
ちょっと勉強すればそれくらいは簡単にできますよ

397(○口○*)さん :06/06/28 23:47
>>395
状態によっていろんなロジックに飛ばすように場合わけしてるところで、
常に移動用のロジックに飛ばしてあげればいいんじゃね?

とか適当なことかいたけど、たぶん1から作って追従ロジックだけを
入れたほうがいろいろと便利だと思う

398(○口○*)さん :06/06/28 23:49
AI()のコマンド受付の直下あたりに
MyState = FOLLOW_ST
入れるだけでよかったりしない?

399(○口○*)さん :06/06/29 00:50
標準AIベースなら OnIDLE_ST()関数内の
GetOwnerEnemy や GetMyEnemy 等の策敵関数の呼び出し部分を削る形にすれば
必要になったら手動入力で戦ってくれるので便利だと思う。

400(○口○*)さん :06/06/29 00:51
過去ログから

複数ファイルを使うやつ
require "./AI/Const.lua"
require "./AI/Util.lua"
function AI(myid)
  if(GetDistanceFromOwner(myid) > 3) then
    MoveToOwner(MyID)
  end
end

とAI.luaだけでいいやつ
--------------------
-- 擬似ペット化AI --
--------------------

MS = 0

function AI (x)
  if (MS == 0) then
    if ( GetD(x) > 3) then MS = 1 end
  elseif (MS == 1) then
    if (GetD(x) <= 2) then MS = 0
    elseif (GetV (3, x) == 0) then MoveToOwner (x) end
    end
end

function GetD (y)
  local a, b = GetV (1,GetV(0,0))
  local c, d = GetV (1,y)
  if (a == -1 or c == -1) then return 99 end
  return math.floor(math.sqrt((a-c)^2+(b-d)^2))
end

まぁログhtml化してあるサイトは複数あるからどっか嫁

401395 :06/06/29 02:47
お騒がせしました(´∩ω∩`)ありがとうございました。

402(○口○*)さん :06/06/29 08:31
AIはどれでもいいから遅れずに追従してくるのにして
あとはALT+Tで待機にしとけばいいだけじゃないん?

403(○口○*)さん :06/06/30 18:26
Alt+Tは後ろ着いて来たあと索敵モードに戻るバグあり

404(○口○*)さん :06/06/30 18:42
↑初耳だ。まさかとは思うがAIいじってたとかいうオチじゃないよな? AIで待機状態の挙動も変わるぞ?

405(○口○*)さん :06/06/30 22:21
>>403
単に付いてきただけでは戻らない。

ユーザーが一度でもALT+右クリックでの移動/戦闘を指示すると、戻る。
バグというよりは仕様かもしれん。

406(○口○*)さん :06/07/01 01:57
デフォAIが無改変で”一切のバグが無ければ”、>>404,405の通り画面(視野)外に出たりテレポ等AIリセットや
各種ユーザーコマンドを送らない限りは追従状態を維持する。
逆にデフォ以外の良く使われているAI系だと、ALT+Tで待機させてもHPが減ると逃げたり反撃したりで、自動解除される物はよくある。

逆に、実際になる回数はそこまで多くは無かったけど、>>400にある様な攻撃ルーチンの無いAIを使っているのに、
mobから攻撃を受けると勝手に反撃を行い、そのままスタックする事もあったし、>>403みたいな話も全くのデタラメとは言い切れない部分はある。
もっとも、そういうバグが実際にあるのならもっと再現して話題に上るだろうから現状(初出だし)そこまで気にする必要は無いかと

407(○口○*)さん :06/07/01 23:04
まぁただ付いて来させてるつもりで自分で移動命令おくってたオチだろうね

408(○口○*)さん :06/07/02 03:42
ちょっと散々言われてて発言しにくいかもしれないが、
>>403は再現性があるかとか、ある場合はどんな手順で発生するのかとかは興味がある。
興味はあるが、どのAIでも発生するならAIでは対応できないか。

ちょっと詳細希望。

409(○口○*)さん :06/07/02 06:54
可能性としては、406氏の書いている「画面外に出た」ってのが高そう。

初期AIは追従速度が遅いから、ケミに対してちょっとずつホムが遅れていく。
だから、ALT+Tしたあと『ついてくるだろう』と何も考えずにどんどん歩いていると、
ホム画面外→ケミ数歩戻る→ホム再ロード(通常状態)
・・・っていうストーリーは起こりやすいと思う。

410(○口○*)さん :06/07/03 00:17
Gv用AIが欲しいけど言語とか全然わからない文系の俺orz
知り合いに詳しい人でもいればなぁ・・・

411(○口○*)さん :06/07/03 00:23
>>410
とりあえずGvで何をさせたいのか書くと誰かが作ってくれるかもよ
大抵Gv用のは身内配布だろうけど、そんなの興味ない人もいるだろうしね
時間があれば作ってもいいけど(出来は本職の人には及ばないが)、時間がない・・・

412(○口○*)さん :06/07/03 01:49
ここでも何度か出てるけど、>>410みたいに書く人がいつも
具体案を出してくれないので協力しようにも出来ない俺ガイル。

413(○口○*)さん :06/07/03 02:26
Gv用AIと一口にいうけど実際のところ何がしたいのか出さないと作るほうも作れないと。

たとえば呼び出されたときに緊急回避Lv5を使用して、あとはずっと棒立ちしているのもGv用AI 。
呼び出されたときに手近な雷鳥に全力でスキル攻撃するのもGv用AI
WP付近を監視して、友達以外がきたらスキル使用するというのもアリ。というか、コレが一般的?

ホムに何してほしいのかAI製作者がまず分らない事が多いんだよね。
AIつくれてGvやってる必要があるし、自分のホム以外だと仕様が分らない事も多いから。

ちなみに俺は上記3つは作らないよ。羊飼いだし。

414410 :06/07/03 03:44
(´・ω・)丸投げみたいな書き方して申し訳ありませんでした
羊羹使いなので欲しい機能としてはこんな感じです・・・
◆登録したキャラ以外に攻撃する
◆EMC、ADS、阿修羅等詠唱のあるスキルに反応してカプリスLv1で詠唱妨害
◆キャラIDを指定してそれを優先的に狙う(ギルマスや相手Gの要職狙い)
◆ホム自身による移動は無し、ケミ側からの操作でのみ移動

あれから自分でもやってみようと思ったのですが
>>対人でアクティブに攻撃させたいのであれば、IsMonstarを省く必要がある。
まずここでつまづきましたorz

415(○口○*)さん :06/07/03 04:18
基本的に攻撃を受けたら反撃するんだけど
指定スキルのLv1で攻撃した相手に限り反撃しないようなAI無いかな?
土精の壁をしてもらってるんだけどマンティスが邪魔で仕方ない
愛用のくまさん頼みたい所だけど冬眠中(?)だしなぁ・・・
知識が全くないので既にあるAIがありがたいです

416(○口○*)さん :06/07/03 07:19
>>414
◆キャラIDを指定してそれを優先的に狙う(ギルマスや相手Gの要職狙い)

これって戦闘中にID取得するならその要職やギルマスの姿見えるところ行かないとだめだし
あらかじめID入れておくなら相手ギルドのギルマスやら探し出してID取得しないとだめやね

現実的な実現方法としては
・Gvに参加する敵対ギルドの溜まり場を探し出しメンバーのIDを取得
・ギルドごとに名前と職とIDの数字をどこかにリスト化
・Gv前に必要なIDをAIに入力
って感じかな

417(○口○*)さん :06/07/03 08:11
>>415
AI作者の1人です。
ちょっと真意というかやりたいことが読めないので、もうちょっと教えてください。

マンティス(アクティブ)にホムが襲われたとき、反撃しないでどうするんでしょうが?
AI作者としては「〜〜しないでほしい」よりは「〜〜してほしい」っていう書き方のほうが、
比較的対処しやすいです。
例えば「特定の敵に反撃しないでほしい」というのは、敵が来たら何していいかわからないです。
「特定の敵から逃げ回って欲しい」とか「特定の敵相手は単に無視・一方的に殴られていい」とか。

ちなみに当方のAIでは、特定の敵に対して接敵しない(近づかれたら主人の周りを逃げ回る)機能を実装しています。
興味があれば。
ttp://tomose.dynalias.net/RO/index.php?%A5%DB%A5%E0%A5%F3%A5%AF%A5%EB%A5%B9AI

418(○口○*)さん :06/07/03 10:04
GvPはGetActorsを頻繁に回すだけで落ちそうな印象があるが、
詠唱妨害を組み込んで大丈夫なものであろうかと少し心配。

>415
おおむね417の言うとおり。
敵に対する優先順位をつけたいだけなら、工体AIでいいんじゃない?

419(○口○*)さん :06/07/03 11:20
>>418
GetActorsはローカルで読み込むだけだから、PC性能が悪くなければ
多少は回しても平気だと思うな。そもそもの情報が取得できてればだけど。

>>410
◆EMC、ADS、阿修羅等詠唱のあるスキルに反応してカプリスLv1で詠唱妨害

ホムは「対象が詠唱中かどうか」は判別できるけど、そのスキルが何であるかは判別できない。
とにかく何のスキルだろうと中断しにいくけどそれでもいいなら実装可。
「”何職の”詠唱を妨害」って指定すればある程度絞れるけどね。

420415 :06/07/03 12:22
>>417
わかりにくくて申し訳ない
マンティスには攻撃して欲しい
土精には攻撃しないで欲しいって事です
敵毎に攻撃、無視ってAIで出来そうですね
無視するmobには手動で攻撃出来ないと勘違いしてました
そのAIで早速試させてもらいます

421410 :06/07/03 12:54
>>416
現在配布されているカスタムAIの友達登録機能を利用して他のGのIDを取得しているところです

>>419
詠唱のあるスキルを具体例として出しただけなので詠唱のあるスキルの妨害だけで問題ないと思います


要望を出すことぐらいしかできませんが自分の意見がAI作者の人達の参考になればいいなぁ

422 ◆g37UcEp//g :06/07/03 13:57
いいねぇ
そうやって可能不可能は別としても
色んな案が出てくるとやる気も出てくるって物

難しいことやってるわけじゃないしリアルお仕事次第では今週中にはうpるよ
上の設定保存ライブラリ教えてくれた人遅ればせながらありがと

時に友達登録の方法だけど
今は開始前に集合したときに登録するように画面内一括追加保存させてるんだけど
他に友達関係で追加削除どんなのが欲しい?

423410 :06/07/03 14:54
>>422
一人、二人追加したい時にまた画面内に集めて〜は大変そうなので一人ずつ追加できるような機能が欲しいですね
あとは工体AIのように登録時にPCの周りをグルグルさせるとか分かりやすい動きがあるといいかなと思います

AI楽しみに待ってます(*・ω・*)

424(○口○*)さん :06/07/03 16:12
>>423
ID取られるってのを嫌う人もいるから露骨にID取得してますよ的な動きはまずいかも
やるなら登録時に自分の周りグルグルする程度がいいと思う
あと個別取得だけど、主人がターゲットした相手をリストにいれるようにすれば
CRをシフトクリック等で個別にID取得はできる(自分のAIはこれで友達登録してる)

425 ◆g37UcEp//g :06/07/03 18:06
そうするとGv中に攻撃した敵が登録されるから逆に削除コマンドには出来そうだね

座標ズレに弱いけどShiftクリック当たりが妥当かな
レスポンスはさりげなく
登録したら現在位置から一歩下へ
登録済みなら現在位置から一歩右へ
ぐらいかな

426(○口○*)さん :06/07/03 18:26
ちょっと確認したいんだけど、RO用のLuaってtabel操作のライブラリは使える?

ttp://sugarpot.sakura.ne.jp/yuno/html/lua5_manual_ja.html#5.4

マニュアルのこのへんなんだけど。
便利そうなのに誰も使ってないってことは使えないのかな?

427(○口○*)さん :06/07/03 18:58
>>425
個人的な考えだけど、ID取得用AIとGv戦闘用AIを分けておいたらどうかなぁ
戦闘中に取り込むとなると処理重くなるだろうし、Gv用には適さない気がする

428(○口○*)さん :06/07/03 19:44
>>426
ROではTableは使えない。
昔、工体の人がライブラリとして実装してた気がする。

429410 :06/07/03 20:27
IDはGv前に各Gの溜まり場等で取得しているので個人的には別で構わないと思います
一緒にすると操作がめんどくさそうですしね

430(○口○*)さん :06/07/03 23:09
Gv用AI作ってます。配布はしないけど俺が作ったのは以下の物。
基本的に非移動のAI。

1.動作レベル1
コールホムした瞬間ははこの動作レベル。
何もしない。
手動カプリス後、その敵が死ぬまでカプリス粘着。
このレベルだと同期落ちは多分しない?(経験なし)

2.動作レベル2
ALT+T一回で動作レベル2に変更。
あらかじめギルマスIDなど登録した敵がいた場合にのみ、カプリス粘着。
あらかじめ登録した職業がいた場合にのみ、カプリス粘着。
このレベルでは同期落ちがよくある。

他の機能
ALT+クリックで2箇所の座標指定を行い、
その2箇所の座標を頂点とする四角内に敵が入ったときのみ攻撃する。
アサ・チェイサのあぶり出しにどうぞ。

431(○口○*)さん :06/07/03 23:48
>>430
2の動作でも同期落ちがありえるのか…。
GvやらないけどGv用AI作ってみたいいちAI書きなんだが、ソース見てみたいな。
無理な要求だとは思うけど。せめてGetActorの回し方とSkillObjectのあたりを見てみたい。

あとその他の機能が素直に感心した。
クロークハイド見破りをどう取るかだけどかなり効果ありそうだな。
下手するとツール使いとして通報されそうだが……。

432(○口○*)さん :06/07/04 01:15
ちょいと空気を読まずに書き込み

メモ:テコン系列のGetV(V_HOMUNTYPE,id)の返り値を調べる
もう既に返り値が分かっているという人がいたらひっそりと教えてほしいです

433(○口○*)さん :06/07/04 07:59
ググってみたところでは
4046 TaeKwon
4047 Star Gladiator ←拳聖
(4048 Star Gladiator2)? ←これは使われない可能性大?
4049 Soul Linker
で、Super Babyの後に来るらしい。
勿論、現時点ではあやしげな未確認情報って事になりますけど。

434(○口○*)さん :06/07/04 12:43
予想と妄想だけでスマンが、
4048 Star Gladiator2 は「太陽と月と星の融合」使用時の拳聖じゃないかなーと。

435               :06/07/04 13:10
   ∧∧ \  /
    ( 'A `) V
     (⊃⌒*⌒⊂)
      /__ノωヽ__)
                   
                     \    _
                    r-''ニl::::/,ニ二 ーー-- __
 肛門がしゃべった!!  .,/: :// o l !/ /o l.}: : : : : : :`:ヽ 、
                  /:,.-ーl { ゙-"ノノl l. ゙ ‐゙ノノ,,,_: : : : : : : : : :ヽ、
              ゝ、,,ヽ /;;;;;;;;;;リ゙‐'ー=" _゛ =、: : : : : : : :ヽ、
              /  _________`゙ `'-- ヾ_____--⌒     `-: : : : : : : :
...-''"│    ∧  .ヽ.  ________   /   ____ ---‐‐‐ーー    \: : : : :
    !   /   .ヽ  ゙,ゝ、      /  ________rー''" ̄''ー、    `、: : :
    .l./     V   `'''ー-、__/__r-‐''"゛     ̄ ̄   \   ゙l: : :
                   l     .,.. -、、 _ ‐''''''''-、    l   !: :
                  |   /    .| .!     `'、  |   l: :
                      l   |     .l,,ノ     |  !   !: :
                       / '゙‐'''''ヽ、 .,,,.. -''''''''^^'''-、/  l   !: :
             r―- ..__l___    `´            l   /   /: :

436(○口○*)さん :06/07/04 13:11
orz

437(○口○*)さん :06/07/04 13:27
つ 懲罰用 ハバネロ*3

438(○口○*)さん :06/07/04 15:51
いきなりの流れに吹いたw

自分でAIいじれるようになると本当に楽しいな。
土星さんは一発殴ってサークルトレイン(95%回避出来るけどなんとなく)
寄ってきたアクティブマンティスには自動でML打ち込む
(ただし横殴りにならないように条件追加)

親鳥にエサもらってる雛の気分だぜハッハー

439(○口○*)さん :06/07/04 22:55
大変だ。くまさんが冬眠から目覚めた。
この調子で工体さんとかも中の人帰ってくると良いと思うんだけど。まあ、仕方ないね。

440(○口○*)さん :06/07/05 00:14
WIKIの

▼上級者向け

工体研究所  通称: 工体AI 等 
    ○オリジナル機能の多さと更新頻度は随一
    ○攻撃対象をレベルフィルタリングできるなど廃ユーザでもok
    ×使いこなすには多くの自己設定が必要で初心者には不向き

更新頻度どうしる?

441 ◆g37UcEp//g :06/07/05 00:46
Gv用(?)AIやっと出来たので投下

配布場所は以下
ケミWIKI->AI研究室->サンプルライブラリ
ttp://f31.aaa.livedoor.jp/~alchemi/pukiwiki.php?Lua%2FSample
zipファイル直リンはこっち
ttp://f31.aaa.livedoor.jp/~alchemi/pukiwiki.php?plugin=attach&openfile=GvAI.zip&refer=%A5%DB%A5%E0%A5%F3%A5%AF%A5%EB%A5%B9%2FLua%2FAI

機能は
・右クリック移動(Move1発送るだけ)
・詠唱妨害(詠唱モーション見てから通常攻撃or遠距離スキル)
・友達登録(画面全体、指定範囲)

設定はAI.luaの一番上
設定ディレイを早くしすぎると同期落ち、遅くしすぎると2発目が遅れる
その辺りの調整は個々でやるようになってます
デフォAIの面影は影も残ってないので読み解こうとする人は覚悟スキルLv1必要

エラー出無い程度にしかテストしてないのでなんかあったら報告よろ
他の職でGvでてるので負荷テストは不可能なので実際のGvで使った人は感想くれるとやる気+100
実運用する前にPv辺りで試してみることをお勧め
コレをベースに追加要望も受け付けてみたり

以上、おやすみ

442 ◆g37UcEp//g :06/07/05 00:46
そうそう、名称募集中なので何かかっこいいのつけてくれー

443410 :06/07/05 01:50
>>441
早速今週のGvで使ってみたいと思います。感想等はその時に・・・
そして、ありがとうございます!!

444(○口○*)さん :06/07/05 03:37
>>442
「詠唱すんじゃねこの野郎」で

445410 :06/07/05 04:08
Pvで試したところゼリーが詠唱妨害しようとする度に
AIiua:195: global variable“SkillDelay“is nil value. (probably uninitialized)
という警告画面が出てしまうのですがこれはスキルディレイの設定が悪いからなのでしょうか

446(○口○*)さん :06/07/05 05:01
作者様じゃないけど
181行,195行のSkillDelayをgSkillDelayに書き換えればいいような気がする

447 ◆g37UcEp//g :06/07/05 08:22
>>445
>>446氏のが正解です
とりあえずSkillDelay->gSkillDelayのつづりミスだけ直して再Upしておきました
こんな調子でどんどん出していってくれれば日曜までには完成するかなぁw

448 ◆g37UcEp//g :06/07/05 10:05
ついでにディレイ関係のバグというかつづりミス修正

どんな言語つかっててもいつもつづり間違える自分にはLua環境はかなり厳しいw

449 ◆g37UcEp//g :06/07/05 10:07
名称の募集期間は今週末までってことで
他に案が出なければ>>444氏の案で決定します。

450(○口○*)さん :06/07/05 12:09
誰かかまってやれw

451(○口○*)さん :06/07/05 12:50
>>442
Gvにはこれ!
ってことで「GコレAI」
G無いほうが語呂がいいような気もする。

452(○口○*)さん :06/07/05 14:07
わざわざBOT扱いされやすい名前をつけることもなかろう…

453(○口○*)さん :06/07/05 15:05
>>452
今は反省している

454(○口○*)さん :06/07/05 16:50
>>442
お邪魔虫AI

455(○口○*)さん :06/07/05 20:13
普通に「GvAI」いいんじゃないですか?
次週試してみようと思います
その後不具合カキコしたら対応していただけますか?

456 ◆g37UcEp//g :06/07/05 21:26
>>455
それだと他の人が新しく公開するときに被りそうかなーとね
まぁ、今まで出てこなかったのを考えると心配無用かも?

対応する内容にもよるけどバグの類ならすぐ
不具合なら近いうちに、改善要望ならそのうちって感じかな

457(○口○*)さん :06/07/06 00:13
「うはwwwAI」

458410 :06/07/06 03:24
「オジャマンボウAI」とか・・・
え、どっかで聞いたことある? 気のせいですよ^^;

459(○口○*)さん :06/07/06 05:08
詠唱してる相手や要職の敵をピンポイントで妨害するので
「ゴノレゴAI」

460(○口○*)さん :06/07/06 11:12
GAIジョーで

461(○口○*)さん :06/07/06 14:11
なんかホムを進化させたら攻撃速度が遅くなったように思えるんだけど
これってAIが進化後に対応してないからなのかな?
PCの表示ASPDにあわせたならもっと遅くなるだろうし
工体愛用してたけど更新されないしなぁ

462(○口○*)さん :06/07/06 16:18
「魔法少女AI」で

463(○口○*)さん :06/07/06 17:44
工体AIの中の人行方不明なのか
あそこのAI愛用させていただいてたんですが
今日テコンの人に激しい横殴りをしてしまって困ってます
どうしたらいいのやら・・・

464(○口○*)さん :06/07/06 18:49
>>463
ざっと見ただけだけど、

playerjobdata.lua をテキストエディタで開く


function IsPlayer (id)
 if (id < 100000) then
  return 0
 end

 local Ty = GetV(7,id)

 if (0 <= Ty and Ty <= 23) then
  return 1
 elseif (4001 <= Ty and Ty <= 4045) then  ←ここの所の4045を4049に変える
  return 1
 else
  return 0
 end
end


とりあえず、試してみて下さいまし。

465(*○口○)さん :06/07/06 18:51
ホムンクルス用ライブラリplayerjobdata.lua。
http://himenomikoto.web.infoseek.co.jp/kulus_project/index.html#playerjobdata.lua

テコン系追加しました。
公式サイトのデータベース>職業から
テコン/1次、拳聖/2−1次、ソウルリンカー/2−2次
と分類しています。


>>463
工体AIは対人チェックにplayerjobdata.luaを使っているので更新すれば直ると思います。

466(○口○*)さん :06/07/06 19:14
>>464,465
ありがとうございます
さっそく置き換えておきました
助かりました

467(○口○*)さん :06/07/06 20:00
少々大雑把になってしまうが、4001-4049付近はプレイヤーの職業として使用しているようだし
4070くらいまで許容してしまったほうが、
次回忍者&ガンスリンガーが追加されたときに同じの騒ぎをしなくてすむ気がする。

誤動作しても責任は取れないけどね。

468(○口○*)さん :06/07/06 20:45
こっこAIのステップコマンドに草を自発攻撃するかどうかのオプションつけてみた

469(○口○*)さん :06/07/06 22:41
工体AIでノンアクティブ設定で攻撃指示出す事って出来ないよね?
初回限定AIだったかな、mobをalt(shiftだったかも)+右ダブルクリックで攻撃出来たんだけど

例えば枝mobとかに攻撃したい場合、工体でノンアクティブにしておくとケミが攻撃するかされるかしないと
ホムに攻撃させる方法が見当たらない

470(○口○*)さん :06/07/06 23:25
>441
SelectActors.Lua 456行目
function GetAriaEnemyID()

function GetAreaEnemyID()

ではないでしょうか?

471 ◆g37UcEp//g :06/07/07 00:55
現在ゴルゴAIがつぼったので他にいいものがなければ決まるかも
ただ、そうすると敵味方問わず後ろに立った相手に殴りかかる機能をつけないとね・・・w

>>470
あぁ、それはアリアであってる「詠唱」の機械翻訳なんだ
語感が好きだったらかそのまま使ったんだけど

今考えればROではCastで通ってるんだよね
モーション定数はCASTINGでこぴって来たの使ってるし
紛らわしいから直しておくことにするよ

でも今日は眠いのでzzZ

472(○口○*)さん :06/07/07 07:09
>>469
そうだっけ? ウチのは普通にALT右クリで攻撃してってくれてるような。

あと、工体AIを対人可能に作り変えるのってどうすればいいんだろう?
工体AIと機能ほぼ同じで更に対人可能ってAIがあればそっちに乗り換えるけど……。

473(○口○*)さん :06/07/07 08:53
工体のコードを流用して自分の目的のために自分で書き上げるのが何より早くて正確だと思う
あるいはやりたいことを書き並べれば誰かが書いてくれるかもよ

474(○口○*)さん :06/07/07 15:56
工体のコードは複雑なううにファイル多くて上級者以外には流用が難しい

ある程度多機能だけどコードが単純で流用しやすいのってどこだろう

みんなはどこのAI流用してる?

475(○口○*)さん :06/07/07 16:48
こっこ改造して使ってる

476(○口○*)さん :06/07/07 16:55
デフォルトAIをベースにどきどきやこっこから欲しいのだけ切り取って繋げてる

477(○口○*)さん :06/07/07 17:02
工体AI一番使いやすいんだけど
いらない機能が多すぎるのが難
友達登録とかは凄く便利だ

478(○口○*)さん :06/07/07 17:35
初回限定さんのAI機能比較アンテナ、見やすくて便利。
ttp://pc3merchant.net/ai_antenna/

きのこAI、多機能でソースも1ファイルなのでやりやすいかと思ったけど、
単に1つにまとめてるだけで結構なボリューム…orz
コメントは振ってあるけど、処理の流れがいまいち分からなくて断念した。

というわけで、こっこ。

479(○口○*)さん :06/07/07 17:56
デフォルトをベースに
ターゲットチェックとオートスキル関連は韓国産を参考に
移動関係が昔のAIスレで上がってたソース+どきどきさんの旋回
あとは自前の細々とした機能がくっついてる感じ。

最近はヒットストップを抜け出すためのテストでMoveコマンドがもさもさっと増えてる。
そろそろ仕様絞る所から作り直さないとダメかなと思ってる。

480(○口○*)さん :06/07/07 17:57
標準AIをカスタマイズ。上に同じくMoveがどんどんスパゲッティーになってくよマ・マー orz

481(○口○*)さん :06/07/07 17:57
そういえばAIによって攻撃速度が違うような話以前聞いたんだが
その辺の差って実際あるの?

482(○口○*)さん :06/07/07 18:03
>>481
AIの実行速度に依存。といってもコンマ1秒ぐらいの差だと思う。
AIスレの過去ログに載ってるはず。

とりあえず、遅くする分はコードで制御できる。
表示ASPDに限りなく近づけるのはちょっと難しい。

483(○口○*)さん :06/07/07 19:53
こっこ意外に使われてるな…。

最近更新頻度高めだけど、改造してるって人は
本家が更新されるとどうしてる?新しいのにまた同じ改造したりする?

484(○口○*)さん :06/07/07 20:02
特に問題なければそのまま古いの使って、新しいVerに魅力感じたら移行作業する

それはそうとホムがあらかじめ設定したアイテムをルートするようになればいいのにな
あとは満腹度の取得と自殺機能。

485(○口○*)さん :06/07/07 20:25
ただでさえODでエライコトになってるから、
それが万が一にも実装されると本格的にヤバイんじゃないかと思う

486(○口○*)さん :06/07/07 20:34
手を加えたところを関数化してるので移行は関数のコピペと数行の挿入で終わる。
大幅な更新があったときは大変なことになることもあるけど大体は対応可能。
でもファイル化してrequireしたほうが早いってことに書き込もうとしてから気づいた・・・。

487(○口○*)さん :06/07/07 23:48
工体のAI使ってるんですが〜
今回の07/07のパッチで
「寝落ち対策によるクライアント終了」の機能が、使えなくなってる気がします。
勘違いかもしれませんが、もし使えないなら寝落ちには十分注意しないと・・・

488(○口○*)さん :06/07/07 23:50
遠距離攻撃MOBに攻撃されて移動中スタックした場合の微妙な対策AIを書いてみた。

(´・ω・`)需要あるかな?
結局、ALT+右クリックの操作をAIにやらせてるだけなのですが

中身は、
移動前のHPと移動後のHPを取得
HPが減少してたら、1.5秒間Moveを繰り返す(敵の周りを移動するように設定)
これだけなのですが、比較的効果あるかなーと。

需要ありそうならソース整理して貼りますのでご一報を

489(○口○*)さん :06/07/08 01:39
>>488
主人のHPを見るのならほしい

490(○口○*)さん :06/07/09 21:09
>441
実に良いAIです、GvGにて周りのウィズ詠唱出来なくて慌ててました。

動作も軽いですし、毎週使わせていただきますorz

491490 :06/07/09 21:16
要望を少し書くと、詠唱反応時に使用するスキルをLvにしてもらえると尚嬉しいかも。

結構馬鹿にならない威力みたいなので

492410 :06/07/09 21:34
Gv用AIを使っていたのですが途中から
setini.lua:28 bad argument #1 to `lines' (No such file or directory)
というエラーが出てしまい、AI全てを入れなおしても直りません。
最初は全然問題なかったのですが・・・orz

493(○口○*)さん :06/07/09 22:52
>>492
GvAI使ってないんでわからんけど、ソースみたところリストを読み込んでループ回すとこでエラー吐いてる。
リストがちゃんと作られてない可能性があるね。ギルメンを友達登録したあとに何か弄ったりした?

494 ◆g37UcEp//g :06/07/09 23:42
手動スキルにも対応しました
手動スキルはロジック中のディレイ等は考慮しないつくりになってるのでおまけ程度に
友達登録したけどガーディアンを引っ張るのにどうしても攻撃したいときなどなど

>>490
スキルレベルも設定項目を設けました

>>492
ioの仕様は押さえてないのでなんともいえないですが
>>493氏の言う可能性が一番高いと思います。
中身空っぽのファイルとか出来ていませんか?
ファイルパスを変更していたらデフォルトに戻して
友達登録ファイルそのものを一旦消してから試してみてください
中身を消すだけだとエラーになると思います。

495(○口○*)さん :06/07/10 02:37
工体の人もう更新しないのかのう・・・

496(○口○*)さん :06/07/10 14:09
長期休暇の時期に入ったらいくつか更新再開するとこがあるんじゃないかな

497(○口○*)さん :06/07/10 18:32
こっこが使われているのは鳥使いが多いからだ

498(○口○*)さん :06/07/10 18:49
バニルのがつえーよ、鳥なんざ(ry

499(○口○*)さん :06/07/10 19:15
羊のことも思い出してあげてください@(=ω=)@

500(○口○*)さん :06/07/10 20:27
>>497
あれは意外に他のホムにも対応してるぞ。
てか、ホムならバニルが一番多いと思うが。

501(○口○*)さん :06/07/10 21:46
こっこが普及してるのはシンプルかつ必要な機能が揃ってるからだ

AIの素体にするには丁度良い

改造しないならクマと工体、改造するならこっこ、パーツとして使うならクマとどきどき
あとはマイナー所から適当に切り貼り

俺は他AIの機能を単純化してからスパゲティしてる某所のが機能引っこ抜き易くて一時期お世話になった

502(○口○*)さん :06/07/10 23:26
えっと工体AIを使用してます
新職業きてから
>>465さんのplayerjobdata.luaをDLして更新しましたが
リンカーに横殴りしてしまいます
playerjobdata.luaだけ入れ替えてもだめなんでしょうか
私だけでしょうか

503(○口○*)さん :06/07/10 23:38
TRACEでリンカーのIDを出力して
そのjobdataのIDと見比べてみればいいと思うよ

工体の横殴り防止がどういう処理になってるかわからないのであれだが、
リンカーの攻撃方法が特殊、とかいう場合もあるのかな。

504(○口○*)さん :06/07/10 23:42
言い忘れた

>>502
テコン、拳聖に横殴りしないのなら、入れ替えだけじゃダメってことも
ないんじゃなかろうか

505(○口○*)さん :06/07/10 23:59
>>501
具体的にどういう改造してるのか気になる…!
マップ認識とか敵データ認識とかかな?

>>502
それで問題無いような気もするけど…。
リンカーがどういう行動の時に横殴りするの?普通に戦闘中?

506(○口○*)さん :06/07/11 00:57
>>501
ホムAIぐらいの規模ならむしろスパゲティのがよくない?
各機能ごとにパーツだけそろえて好きなのコピペしてどんどん追加。
ROが普通に動くPCなら実効速度に影響なんてまずでないし。

507(○口○*)さん :06/07/11 01:17
>>502
function IsPlayer (id)
の中の
elseif (4001 <= Ty and Ty <= 4045) thenを
elseif (4001 <= Ty and Ty <= 4050) then
と書き換えればガンスリンガーまで一気に対応、殴らないハズ

>>505
こっこをベースに欲しい機能適当にスパゲティにしてるだけだー

パーツとして使ってたAIは工体の横殴り防止を単純化したようなソースがあったんでそこを使わせてもらった
あとは最初だけスキル使ったりMove送りまくるのを直す処理とか落ちたAIスレで出てた各機能がコメント付きで入ってたんでパーツに使わせてもらっただけ
そこは友達登録とか無いんで欲しい機能抜いた今はもうゴミ箱いってる
マップ認識とかは他AIから盗もうとしたけど難しくて挫折ぽ
あとスレで出てたMove修正コードとかも突っ込んでる

>>506
言い方が悪かった、
「他AIの機能を単純化してからスパゲティしてる某所」のAIから引っこ抜いて使ってたって意味
俺のAIもスパゲティだ

508(○口○*)さん :06/07/11 01:32
今はどこも機能充実してて今やパーツに使ったAIは古いものになっちまったけどな
3月〜4月の当時は結構新しい機能だったんだ

509(*○口○)さん :06/07/11 02:46
>>502
現状、出来るだけ厳密に分類出来る様に
idが10000以上 かつ V_HOMUNTYPEが特定の範囲
に対して1を返しているので

function IsPlayer (id)
  if (100000 < id) then return 1 end
  return 0
end

とすればプレイヤーID(とみなせる範囲)に対応は出来ます。
(むしろこっちの方がいいのだろうか・・・・

510(○口○*)さん :06/07/11 08:46
工体AIを使っています。
以前はうまくいっていたのですが、設定を少しいじった所
スキルを自動で使ってくれなくなってしまいました。
設定は以下の通りです、助言お願いします。
SELF_SKILL = ture,
SELF_SKILL_FIRST_ATTACK = false,
SELF_SKILL_PERCENTAGE = 5,
SELF_SKILL_DELAY = 2000,
SELF_SKILL_MOONLIGHT_LEVEL = 5,
SELF_SKILL_BURST_PERCENTAGE = 20,
SELF_SKILL_RIVAL_BURST = true,
SELF_SKILL_RIVAL_TABLE = { 1613,},
狩場はein_fild08で、メタリンを強敵認識させてあります。

511(○口○*)さん :06/07/11 08:55
trueのスペルがまちgくぁwせdrftgyふじこlp;
自己解決しました(´・ω・`)

512(○口○*)さん :06/07/11 09:08
とぅれ

513(○口○*)さん :06/07/11 12:40
つれ
どうせならturiにしてしまえw
といいつつ自分もなんどもやってるので馬鹿にできなかったり。

514(○口○*)さん :06/07/11 22:38
自動エサやり機能ないのか?

515(○口○*)さん :06/07/11 23:02
>>514
無いし、ホム以外を動かすことはタブーじゃない?

それに餌を自分でやるくらいの愛をもとうよ

516(○口○*)さん :06/07/11 23:41
>>514
どうなってもいいならチートスレにでも行けば?

517(○口○*)さん :06/07/12 00:16
>>514
エサをやる命令が存在しない
満腹度を取得する命令が存在しない

よって無理

518(○口○*)さん :06/07/12 02:54
ホムが自動でケミにエサ(経験値)をやる機能?

519(○口○*)さん :06/07/12 13:39
自動いい子いい子機能が欲しい

520(○口○*)さん :06/07/12 14:54
ここのGvAIでも使われてる setini.lua が工体のROAIPlus rev12に対応していないようです。
正確には工体のROAIPlus rev12が io.linesでのファイルの読み込みに対応していないみたいです。

ROAIPlus rev12の11行目付近に
local raw_io_lines = io.lines

138行目付近に
InjectFileIO( _G.io, "lines", raw_io_lines, name )

と、他の命令と一緒に書き込むと使えるようになります。

Gv中はなるべく余分な処理させたくないからROAIPlusは使わないだろうけど報告だけ。

521(○口○*)さん :06/07/13 04:08
リーフ使いでどきどきAIつかってるんだけど
オートヒールで主人じゃなくてホム自身にヒールするようになってもうた
これはどこを変えればいいのでしょうかね?

522(○口○*)さん :06/07/13 08:37
ヒールのタゲのIDを入れるところに主人のIDが入るようにすればいいんじゃないかな?
SkillObjectで検索するといいよ

多分今回のパッチでAIでヒール使わせたとき主人のID認識しなかったのが修正されたんだろう

523(○口○*)さん :06/07/13 08:39
ついでにどきどきだとif文の周辺もうまく変えないと今度はホム自身へのオートヒールをしなくなると思う

524(○口○*)さん :06/07/13 13:13
一通りの機能揃ってきたからなぁ

これからはいかに機能を抑えつつ使いやすいか、ってのが重要になるんだろうか

工体は確かに多機能で便利なんだが機能が多すぎて、ホム操作に慣れてくるとちょっと煩わしいのが欠点だ・・・・・
くまAIも最近中身が見づらくなってきたし、こっこもちときつい

なんだかんだでデフォAIベースになっちまう

525(○口○*)さん :06/07/13 15:46
くまAIはGUIで設定できるけど各機能のON、OFFじゃなくて
GUIでONにチェックした機能だけのAIを生成してくれればいいんだけどなあ。
みやすくなりそうだし。

526(○口○*)さん :06/07/13 16:25
>>522-523
なるほど・・・わかりました
すこしAIをいじってみますね
ありがとうございました

527(○口○*)さん :06/07/13 17:08
一通りの機能が揃ったなら尚のこと、配布されてるやつそのまんま使えばいいんじゃないの?

528(○口○*)さん :06/07/13 19:29
PCは自作が醍醐味だ!派と
簡単に使えればなんでもいいよ。派

みたいなのがホムAIにもあるんだよ

あとは自作派やカスタマイズ派には機能美に魅力を感じるのも多いはずだ

『無駄を減らしてスマートに』
まぁ、自己満足の領域だな

529(○口○*)さん :06/07/13 20:08
AUTOPPマジオススメ

530(○口○*)さん :06/07/13 21:43
>>529
君はここにふさわしくない

531(○口○*)さん :06/07/13 22:18
ぶっちゃけ俺は見殺しリザ派なんで自動PPなんぞ邪魔。

ところで、今工体AI使ってるんだけども、
モンスターによってホムがアクティブ化・ノンアクティブ化・攻撃優先度の設定できるよね。
あの機能付いてるAIって他にどこのヤツがあるかな、使い比べてみたい。

532(○口○*)さん :06/07/13 22:21
>>531
ttp://pc3merchant.net/ai_antenna/
こんなところを参照にしてみては?

533(○口○*)さん :06/07/14 00:02
>>528
探し回っちゃったじゃないか。

173 名前:こんなの作ってみた 投稿日:06/03/05 14:55 ID:AH7WUC4l
ホムAIに関する立場ツリー(暫定)

改造派  ─┬─ スキルあるから自分で作るよ派
        │    │
        │    ├─ デフォAIを改造するよ派
        │    │
        │    ├─ 韓国ユーザの作ったAIを改造するよ派
        │    │
        │    └─ 1から全部自分で作るよ派
         │
         ├─ スキルないから他の人の作ったのを使うよ派
         │    │
         │    ├─ 日本ユーザの作ったAIをそのまま使うよ派
         │    │
         │    ├─ 韓国ユーザの作ったAIをそのまま使うよ派
         │    │
        │    └─ 罠入りAI踏んじゃったよ派
        │
        └─ ホムだけじゃなくてケミのAIまで改造しちゃったぜ派

無改造派─┬─ AIいらないよ派
        │    │
        │    ├─ ホムは全部手動で動かすよ派
        │    │
        │    └─ 観賞用だからホムには戦闘させないよ派
         │
         ├─ デフォAIで十分だよ派
         │    │
         │    ├─ 鳥やスライム使うからアクティブ設定だけでOK派
         │    │
         │    ├─ そもそもAI変更ってどうやるか分からないよ派
         │    │
        │    └─ 変更方法は分かるけどバグや罠が怖いから変更したくないよ派
        │
        └─ AIじゃなくて毒電波でホム動かしちゃうよ派

534(○□○) :06/07/14 01:29
間違えてdelボタン押しても反応しないAIなんてどーすか?

535(○口○*)さん :06/07/14 01:56
むりっす

536(○口○*)さん :06/07/14 02:12
クライアントから渡されるデータがそもそも少ないし
クライアントが反応するAIからのデータがもっと少ない

537(○口○*)さん :06/07/14 03:45
逆に考えるんだ、「skill」ボタンと「del」ボタンが近いのではなく
「エサをあげる」ボタンだけが離れてるんだ、と

538(○口○*)さん :06/07/14 03:46
誤爆した('A`)

539(○口○*)さん :06/07/14 08:49
>>531
おまいは生命倫理からやり直したほうがいい

540(○口○*)さん :06/07/14 12:06
死が見える狩り方をする時点で何かが間違ってる気がする

541(○口○*)さん :06/07/14 12:11
リーフの治癒の手。
前は、AIで主人を対象にすると発動しなかったり、
ホム自身やモブや他PCを対象にすると、エフェクトはその対象に出るけど、
回復してたのは主人のケミだったりしてたんですが、
修正されたのでしょうか?

542(○口○*)さん :06/07/14 15:21
リーフ持ちケミに聞くしかないんじゃないか?

543某AI配布者 :06/07/14 15:27
質問があります

もしもワザとバグを入れたAIを「バグ入りAI」とかいう名前で配布したら、需要ありますか?

バグの答えと直し方を書いたページも用意しておけばパズル感覚で楽しめそうな気がしたのだけど…一過性のネタにしかならないですかね…(汗

544(○口○*)さん :06/07/14 16:12
それはAIである必要が無いような気がするんだが

545(○口○*)さん :06/07/14 16:23
エラー吐かないけど狙ったとおりに動かないとかいうやつなら初心者のトレーニング用にはなりそうだ

答えtxtと一緒にテンプレに貼り付けるくらいなら興味あるヤツだけ拾っていくかもしれない

546(○口○*)さん :06/07/14 16:33
必要なコードはあるのに、状態繊維や条件付けをワザと間違えて巧みにそれが働かないように仕組まれたAI

[脳を鍛えるホムケミのAIトレーニング]

547(○口○*)さん :06/07/14 16:34
[せんい]じゃなくて[せんと]

548(○口○*)さん :06/07/14 16:42
遷移だろ?せんとってどういう字だ?

549(○口○*)さん :06/07/14 16:48
もちろん遷都だろう

550(○口○*)さん :06/07/14 17:17


551(○口○*)さん :06/07/14 19:39
>>543
ケミがパスワードやIDを叫ぶようになる罠入りAI?

552某AI開発者 :06/07/14 20:27
ID変わってます

>>544
遊び要素で考えたので、必要性は考えてないです

>>546
イメージはそんな感じです

>>551
パスやIDを取得できないので技術的に無理では…
というかそんな危険なもの作りません…

需要がなさそうなので、しばらく様子を見ても反応がなかったらお蔵入りすることにします
レスありがとうございました

553(○口○*)さん :06/07/14 20:48
今、こっこAIを利用しているのですがAI機能比較表を
見てみたところ『』寝落ち防止機能(強制終了?)
に惹かれました。

ただ、現在こっこAIで機能面ほぼ満足しており工体AI
に移動するのも…と思い改造を行なおうと思ったので
すがこの機能単体のソースがなかなか見つかりません。

既存のAIから〜以外に情報がありましたらヒントで
構いません、教えて頂けると幸いです。

554(○口○*)さん :06/07/14 21:05
ケミwikiに載ってるよ。

555(○口○*)さん :06/07/14 21:09
AIのことはわからないけど 寝落ち対策部分はスグ見つかった
config.lua の寝落ち対策部分 『EXIT_TIME』で 他のluaファイル検索したところ
 
events.luaにあったです

556⊂(*'ω')⊃ :06/07/14 21:23
>>553
|・ω・) よかったら次で実装しときますが。

557553 :06/07/14 21:56
レスありがとうございました。

>>554さん
AIのSample欄がまったく見えてませんでした…
こんな便利な場所があるのですね、、。

>>555
これって、どのAIを参照したの…でしょうか?

>>556
…もしかして、本人様ですかΣ
もしそうでしたら、是非ともお願いしたいところですが。。

これから一度テンプレのAIを読んでみて、どうやったら
こっこAIとリンクできるのか考えたいと思います。

書込み頂いた方、有難うございました。

558(○口○*)さん :06/07/15 02:02
バグなのだろうか……

稀に主人が切り替わったようにホムが他の人を永遠追いかけるように
なるんですけれども、他の人はそんな事あります?

ちなみに工体研究所AI使ってます、でも友達はデフォルトAIでも
なったって言ってました(´・ω・`)

自由に使えたら可愛いだろうなぁ〜………

559(○□○) :06/07/15 02:36
あの〜ホムAIがんばっていじってたら・・
ログイン出来なくなってしまいましたorz
対処法を教えてくださいお願いします。

560(○口○*)さん :06/07/15 02:37
弄ったAIをデフォAIに入れ替えてログインでいいと思うけど。

561(○口○*)さん :06/07/15 02:42
工体の寝落ち防止は放置露店未対応なうえに露店中幾ら餌やっても落ちるんだよね

562(○口○*)さん :06/07/15 02:55
>>558
うちも昔たまになったな
同じく自由に他人追尾できたら楽しいだろうなと思った

563(○口○*)さん :06/07/15 02:58
おそらくMOBと認識してしまってるんだろうね

IsMonsterあたりにバグでもあるのかな?

564(○口○*)さん :06/07/15 03:07
>>559
ログインできないわけでなく、ログインしてホムが出現するタイミングで
エラー吐きまくり、というのなら>>560

もしくはエラーの内容を見ながらその場でAIのマズイ部分を直して
エラー窓でOK押す。全部エラーが取れたらちゃんとそれで起動する。


ログインすら出来ないというのならAIは余り関係ないと思う

565(○口○*)さん :06/07/15 03:09
>>563
昔、速度なんかの支援をアルケミに掛けてくれた人を
「アルケミに詠唱してきてる人」=「敵」と認識して
攻撃しにいってたAIならあった。

最新のならどこのAIでも対応できてルとはおもうけども。

566(○口○*)さん :06/07/15 03:38
>>558
工体のそれは擬似オーナー機能というやつらしい
キャラの東側のセルをAlt右クリックして、次に西側のセルをAlt右クリックすると
その相手が主人になったかのように動く

デフォAIでは主人にBBやBDSをされると相手を敵と認識して追いかけるっぽい

567553 :06/07/15 04:16
ケミテンプレの寝落ち対策2がいい感じに思えたものの
>>561さんがまだ不満(?)を保たれているということは
既存の寝落ち対策では不完全…なのでしょうか。

あまりにも分岐を増やすのもどうかと思いますが判定
条件として他にあったらよさそうなものってありますか?

568⊂(*'ω')⊃ :06/07/15 05:00
>>553
寝落ちの状況をどう捉えるかがキーだと思いますが、
露店に対応するのは非常に難しいと思います。
露店を出している状態を把握できないので。

逆に露店中の寝落ちもありえるため、露店かどうかは判定出来たとしても
条件に加えるのは微妙かと。

で、テンプレの寝落ち防止策は主人の座標が一定であることを見てますが、
座標ではなくモーションで見たらどうかと思い、そこを改変してみました。
寝落ちしたときは座標が動かないのもありますが、モーションも動かないだろう、というのが前提で、
なおかつ露店中など、座標を動かすつもりがなくても簡単に時間カウントをリセットできることを考えて
こういう条件にしました。(露店中でも立つ→座るなどの動作でリセット可)

もちろん枝テロ等で寝落ち中にモーションが変わることもありますが
座る→立つはあっても立つ→座るはありませんし、死体になった場合も
ホムがIDLE状態なら自動的に安息になるので、そうなってくれれば余分な時間経過もないと考えます。

もっとも、OSに直接働きかける機能なので個人的にはあまり使うつもりの無い機能なのですが、
一応使い手になることを考えるとこれが妥当かなぁ、というところでした。

569(○口○*)さん :06/07/15 09:22
うちで実装してる寝落ち対策はデフォルトoff
ホム以外への操作であることを説明してユーザの責任においてonにするようにしてある

といいつつモチベが下がって身内にしか公開してない…

570(○口○*)さん :06/07/15 09:31
寝落ち対策は…
そもそも寝落ちしなけりゃいいじゃん!
ということで眠いなときはケミを使わない。

571 ◆g37UcEp//g :06/07/15 11:05
GvAIの手動スキル部分でバグ確認したので再Up
これまたいつものつづりミスなので×msg[○Msg[
落としなおすよりもさくっと置換した方が早いです

名称ですがシンプルにGvAIのままいくかネタに走ってゴノレゴAIにするか悩んだ結果
GvAIのまま通すことにしました

Gv用追加機能案も随時募集中

572(○口○*)さん :06/07/15 11:12
>>570
せめて「眠いときはホムを安楽させる」くらいにしてあげてください

573553 :06/07/15 16:03
>>568
座標判定でなくて、モーション判定としたのは正解のように
感じます。座る→立つだけなら楽ですし…b

一応、例外処理として死亡時にごく希に安息状況へ移行
しないことがありますが…これはもう自己責任というか
この機能に頼りすぎる事となるので無くてもいいかと思い
ます。(むしろ…処理的に厳しいかも)

>>570 >>572
当然、ホムを育てるなら寝落ちしない細心の注意と心がけ
が必要に感じます。普段は存在を意識することなく育てて
緊急事態に助けて貰える…ぐらいの認識で私は使用をし
たいと思います。。っ

初めソースの場所のヒントをと言った者の意見で実装して
頂いたり、色々と意見を頂けたりしてありがとうございました。

#今晩やっと、鳥が大きくなれそうです( *´∀`* )

574(○口○*)さん :06/07/15 20:22
>>573のホムが調印様に進化する夢を見た

575(○口○*)さん :06/07/16 00:37
>>566
そうですかー、ありがとうございましたー(*´∀`*)ノシ
これでさらに可愛い可愛いできます!!

576(○口○*)さん :06/07/16 11:25
調印様がホムになるなら、かなり嬉しいんだが。

577(○口○*)さん :06/07/16 13:40
AIの記述の問題ってここでいいの?
ダメならスレタイだけでもいいのでOKなとこ教えてちょ

578577 :06/07/16 13:54
すまねぇ 自己解決した うん スペルチェックは重要だ λ....

579(○口○*)さん :06/07/16 13:54
実質ここがAIスレになってるし、ここでいいんじゃない?

580(○口○*)さん :06/07/16 15:04
>>577
昔は「AIを語るスレ」ってのがあったけど、そんなに頻繁な質問がでなくなったのでdat落ちした。
ここでやるしかないでしょうね。

581(○口○*)さん :06/07/16 17:37
mobdataとかマップとか
いろいろと便利なライブラリが作られていってたんだけどね
結局やれることが少なすぎてネタ切れっぽい

582(○口○*)さん :06/07/16 21:33
ノーグハルトパッチ追加モンスターのMobIDが
分かる場所or調べる方法ってないでしょうか?

MobdataをAIに使わせてもらってたんですが
テロで出てきた新モンスターに襲われたら
IDが対応してないからかエラー吐いてその間にボコられてしまいました…
テロの度にエラーで止まる危険があるのはなんとかしたいんで
教えてもらえると嬉しいです。

583(○口○*)さん :06/07/16 22:59
アルケミテンプレのAIライブラリのとこに、エラーをtraceaiに出力させる方法が載ってたような気がする
それ使えばホムの動きは止まるけど、本体は動かせるそうな
個人的にはMobdataの配列を使う時は、返り値がnilかどうか毎回調べるのオススメ
IDを調べるにはGetV(V_HOMUNTYPE,id)で適当なファイルに出力させればいいんじゃないかな

おもくそテキトーですが参考になれば幸い

584(○口○*)さん :06/07/17 00:17
TraceAIでIDの確認は出来るには出来るが、
ホムつれたケミで今回新規追加されたMob全部に会いに行くとかかなりしんどいだろう…。

毎回ああいうのって誰がどっから拾ってくるのかな。

585(○口○*)さん :06/07/17 01:05
エミュ鯖のソーs

586(○口○*)さん :06/07/17 02:34
極論、いかないとこのMOBIDなんかいらないんだから、
mobdataでエラーで帰ってきたIDを吐いておけばいいんじゃないか


MOBDATA = {}
MOBDATA.default = {'未定義',81,668000,107250,37895,6,7,3,3,0,0,1,0,0,0,0,3220,4040,35,96,229,374,45,133,3,161.6,2,253,276,}
setmetatable(MOBDATA, {__index = function(t,v) return MOBDATA.default end})
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}



こうやっとけば、mobdataにないIDの場合はエラーにならずに
defaultに設定したものが帰るから、未定義がNAMEで帰ってきたら出力、
とかでいけるんだけどな。

でももともとのMOBDATAにはこれ入ってなかったかな。
確か別の方法もあるはず。

587(○口○*)さん :06/07/17 02:35
って>>583みたいにnil判定先にかましとけば問題ないか。

588(○口○*)さん :06/07/17 03:16
>>586
>未定義がNAMEで帰ってきたら出力

__index = function(t,v)
 traceai("unknown mobid: " + v)
 return MOBDATA.default
end

589(○口○*)さん :06/07/17 08:59
586-587
とりあえず、メ欄。

590(○口○*)さん :06/07/17 11:19
>>582です、遅ればせながら沢山の助言ありがとうございます。
Mobdataでエラーの返ってくるIDがあっても動きを停止させないで、
そのIDを出力しておける方法があるんですね。
素人もろだしの為ファイル出力というものもやった事がないんですが、
これをステップアップの機会として
>>586さんと>>588さんのコードを参考に頑張ってみます。

>>584さんの言う通りケミで新MAPを巡るのはかなり厳しいので、
とりあえず不意の事態に対応できる程度のものにしたいと思っています。
いつかできる限りのIDを収集しに赴きたいものですが、
それにはタナトス上層の為に転生したりしなくてはならないので
遠いというか永遠に来なさそうな未来です…。

ともあれ早速色々いじって、実験してみます。
本当にありがとうございました。

591(○口○*)さん :06/07/17 12:21
>>590

まぁ俺は未知MOBに遭遇したときのデフォルトの動きが欲しかったから
>>586みたいに仕込んでるけど、MOBDATAって改版されたりするし、
できれば>>583みたいに

if (MOBDATA(うんちゃらかんちゃら) == nil) then
  TRACEAI(MOBのID)
  MOBDATAを使うためのフラグクリアか、MOBDATAの代替処理
else
  MOBDATAを使うためのフラグ立てか、MOBDATAそのものの処理
end

みたいにしたほうがスマートだろうね。

592(○口○*)さん :06/07/17 14:39
テンプレにあるAI配布サイトで範囲攻撃をしてくれるようになるのってどのサイトですか?

593(○口○*)さん :06/07/17 16:13
お前は何を言っているんだ。

594(○口○*)さん :06/07/17 17:00
枝でタナトスmob出たらエラーががが
と思ったらmobdata.luaに入ってないのね。
最新ってどこにあるんでしょうか?
googleしても出てこない〜

595(○口○*)さん :06/07/17 17:31
すぐ上のレスも見えないのかね?

596(○口○*)さん :06/07/17 17:37
>>594
ttp://himenomikoto.web.infoseek.co.jp/kulus_project/

ただしmobdata.luaの最新版は06年4月時点のものだから、
タナトスなんかは入ってないだろう。

まぁ>>582以降でついぞ最近語られた、
過去ログというのもおこがましいほど新しいレスをよく読んで
対応してくれ

597(○口○*)さん :06/07/17 17:40
mobdata.luaの公式サイトみたらちゃんと載ってたな。未定義MOB対応方法。


if (IsMonster(v) == 1) then
if MOBDATA[GetV (V_HOMUNTYPE,v)] then -- 未定義チェック
mobname = MOBDATA[GetV (V_HOMUNTYPE,v)][M_V_NAME]
end
end

まぁ必要最小限だけど。

598(○口○*)さん :06/07/17 18:10
582です。頑張ってなんとかエラーを出さずに未知のIDを出力する状態までこぎつけました。
自分の場合はMobdataを参照する箇所がAIの中にごちゃごちゃと点在していて
どこに583さんや591さんの例示してくれたコードを入れたらいいのか分かりづらかったので、
最終的に>>586さんの手法でいきました。

それと何故か使うとホムが一切動いてくれなくなったので一旦使用は断念しましたが、
そのうち原因を解明してAIライブラリのメッセージウィンドウ抑制コードも
入れておこうと思います。これでエラーもあんまり怖くなくなります。
教えてくれた583さんに感謝です。

>>597
ごふぉ、すっかり見落としていました。
けど満足のいく対処を自分でできるようになったので
結果オーライ…という事にしておきます、はい。

なんだかだらだらとすみませんが無事解決したという報告でした。
重ね重ねありがとうございました。

599(*○口○)さん :06/07/17 19:00
ホムンクルス用モンスターデータライブラリmobdata.lua
http://himenomikoto.web.infoseek.co.jp/kulus_project/index.html#mobdata.lua

ノーグハルトパッチ分追加しました。


また、現状の2次元配列型が若干メモリ占有が大きいので、
1次元化&未定義対処済み関数の実装に向けて作業中です。

600(○口○*)さん :06/07/17 19:40
乙であります。

今日はいろんなサイトが更新かかってるなぁ。
RO2とmobdataの人のとこと。
みんな普段は忙しくてまとまった時間取れないんだろうなぁ

601(○口○*)さん :06/07/17 22:03
>>592
範囲攻撃ってのはバイオエクスプロージョンのこと?
通常攻撃をスプラッシュ攻撃にできないかってこと?

602594 :06/07/18 00:19
いやー・・
コードで対応できるのは分かってますけど
タナトスmobのデータが入ったmobdata.luaがほしいと思いまして。
>>599様感謝いたします。

603(○口○*)さん :06/07/18 03:06
>>602
あの時点ではコードで対応しか方法がなかったゆえの
反応だから、一応気に留めておくように。

604(*○口○)さん :06/07/18 03:51
mobdata.luaの次期Ver
http://himenomikoto.web.infoseek.co.jp/kulus_project/index.html#mobdata.lua
変更点:占有メモリ削減、1次元配列化、未定義対処関数有

AIではチェックしてませんが、多分平気だと思います。お休みなs(ZZZzzz

605(○口○*)さん :06/07/18 06:31
おはようございます
mobdataの人更新おつかれであります
var.2006/07/18 の>>599のluaにしたところ
工体AIで先行攻撃に名前で指定していたモンスターを攻撃しなくなりました
mobdataを以前のに戻したら攻撃始めたので
一応報告しまする
ver2は試しておりません

606(*○口○)さん :06/07/18 16:27
工体のVerと古いmobdataのVer、攻撃しなくなった敵の名前をお願いします。
>>599のmobdata.luaは名前指定が、[[ヒドラ]]の形式である必要があります。>工体rev87参照
変更点詳細は名称が X_ゲート制御装置 > ゲート制御装置、コンロンmob以降の未入力だったMATK等も設定しています。

次期Ver(現mobdata2.lua)用修正点
下記2箇所の修正で対応出来ると思います。(ファイル名をmobdata2.lua > mobdata.luaに変える
工体AI(rev103) ailib.lua(487 to 515 line)

function GetMobInfo( mv, id )
local table = GetMobTable()
if not table then
return nil
end
- return table[id] and table[id][mv]
+ return GetMobData2( mv, id )
end

do
local FILE_NAMEREF = PACKAGE_DIR.."/mobnameref.txt"

local nameref = {} -- キャッシュ

function GetMobIdByName( name )
if nameref[ name ] then
return nameref[ name ]
end
local table = GetMobTable()
if not table then
return nil
end
for k,v in pairs( table ) do
- if v[ M_V_NAME ] == name then
+ if v == name then
nameref[ name ] = k
return k
end
end
return nil
end

607605 :06/07/18 16:47
レスありがとうございます
工体AI(rev103)
mobdata.luaはVar不明ですが2006/04/16にDLして使用させていただいてます

指定対象モブは
スティールチョンチョン
ゼノーク
です
OD2で使用、2種以外のモブは先行攻撃無しです

608(*○口○)さん :06/07/18 18:42
mobdata.luaのVarはエディタ等で開いた一番上に記載しています。

×スティールチョンチョン
○スチールチョンチョン

工体AI(rev103) config.lua
ACTIVATE_MONSTER_NAME_TABLE = {
[[スチールチョンチョン]],[[ゼノーク]]
},
として>>599で動かなければちょっと分からないです・・・

609(○口○*)さん :06/07/18 18:50
>>571
いつもGvAIにお世話になってます
ホムでも活躍できて嬉しい限りです

使っていて気になった点がいくつか
メンバーを友達登録しても、安息やWP移動でホム再読み込みした後に再度友達登録すると、
ホム再読み込み前に蓄積されていた友達リストがリセットされてしまうようです。
EMCや死に戻りなどで再読み込みする機会が多いので、できるなら是非改善して貰えたら嬉しいです。
あと、近いと通常攻撃をする動作ですが
ラグってる間に敵が離れてしまった時等に不安定なので、
近くても遠距離攻撃をする、と言うような設定項目があれば便利かな?と思います。
(当方バニル使いなので、必中のカプリスの方が頼れるというのもありますが)

知識も技術もないくせに要望だけ出して申し訳ないorz

610 ◆g37UcEp//g :06/07/18 19:51
友達登録の方はそう作っているので働いていないということはバグですね
AI.luaで指定した場所(デフォルトならUSER_AIの下)に友達登録のINIファイルが出来ているか確認してみてください
できていた場合は中身が書かれているかどうかを

家帰ったら確認しますがこちらで再現しなかった場合の参考になりますので

接近時のスキル優先については承りました
気長にお待ちを

611(○口○*)さん :06/07/18 20:38
返答どうもです
INIの内容は確認しております
例でいいますと
通常なら、10個のIDを登録→新たに5個のIDを追加→合計15個のIDがINIに、となるんですが、
10個のIDを登録→安息&コール→新たに5個のIDを追加→コール後の5個だけがINIに、といった感じです

612605 :06/07/18 20:45
鉄蝿の名前はこちらに書いたのが間違いです
申し訳ありません
きちんとスチールチョンチョンで記述してあります
そうじゃないと旧Verのmobdataでも動きません

mobdata.lua
--
--  var.2006/04/14

で、ありました申し訳ありませんでした

613(○口○*)さん :06/07/18 22:36
>>611
原因判明しました

setini側の数値型を添え字として持つ配列をSaveIniしてから
それをLoadIniすると文字型を添え字に持った配列として帰ってくる
という仕様(?)によるものでした
そのため「for index, value in ipairs(teble) do」の形では値の取得が出来なくなっていました
-----------------------------
local testtable = {}
testtable[1] = 1
SaveIni(testtable)
testtable=LoadIni()
-----------------------------
結果
testtable[1] = nil
testtable["1"] = 1
-----------------------------
-----------------------------
local testtable = {}
testtable["1"] = 1
testtable["2"] = 2
testtable["3"] = 3
TraceAI('START')
for a,b in ipairs(testtable)do
  TraceAI('a'..a..'b='..b)
end
TraceAI('END')
-----------------------------
結果
START
END
-----------------------------

GvAIでは「for index, value in ipairs(teble) do」を多用しているため
現在対策を検討中です

614(○口○*)さん :06/07/18 23:53
>>612

>>608の記述には直したのかい?
それと、他のMOBだったらちゃんと動作するのかい?
そこらへんは試さないと、何が悪いのか原因が特定できないぞ。

615(○口○*)さん :06/07/19 00:01
>>613
文字列型で帰ってくるのはsetini.lua の方の修正で対応できるかと。
str2table関数ではしっかり対策されいたので同じコードを使用して
LoadIni関数を少し修正。

修正前
  set_table[k] = v -- 設定テーブルに値を格納

修正後
  if(tonumber(k) ~= nil) then -- kが数字ならば
    set_table[tonumber(k)] = v
  else
    set_table[k] = v
  end

616 ◆g37UcEp//g :06/07/19 00:48
>>615
thx

というわけでsetini.luaの方を勝手に書き換えさせてもらってkもvも数値だったら数値変換
動作確認したので再upしました
ttp://f31.aaa.livedoor.jp/~alchemi/pukiwiki.php?plugin=attach&pcmd=open&file=GvAI.zip&refer=%A5%DB%A5%E0%A5%F3%A5%AF%A5%EB%A5%B9%2FLua%2FAI

それにしても今回は結構強敵だった・・・
変数に型を持てない言語なんだから暗黙の変換くらいはきちんとやっておくれorz

617609 :06/07/19 01:01
素早い対応ありがとうございます。
これからも愛用させていただきますねー
今後の更なる新機能や操作性の向上等期待してます
また気づいた点があれば報告します

618(○口○*)さん :06/07/19 03:24
GvAIでの要望になるのですが、
ADS(塩酸)を相手に使用する場合、同じ相手にカプリスLv5を撃つ。
と言うのは出来ないものでしょうか?
しばらく自分でも格闘していたのですが、なかなかできません_| ̄|○

使用するスキルを特定する事は不可能、と聞いていたので、
主人が詠唱モーションを取っていて、相手が友達で無い場合カプリスLv5を使用。
と書いていたのですが、思うように出来ず、エラーだらけ…

もしよろしければ作っていただけないでしょうか?
よろしくおねがいします

619605 :06/07/19 06:09
>>614
OD2以外は試してないのでいってみてからまた報告します

    ACTIVATE_MONSTER_NAME_TABLE = {
    -- 伊豆マップ
    [[ヒドラ]],[[バドン]],[[ククレ]],[[マリナ]],[[フェン]],[[オボンヌ]],
    -- 蛇マップ
    [[ポポリン]],[[アナコンダク]],[[ドロップス]],
               -- OD2
              [[スチールチョンチョン]],[[ゼノーク]],
               -- リヒタルゼン
              [[メタリン]],[[キャラメル]],
               -- その他
              [[ダスティネス]],
        
    },


記述はこんなふうにしています

620 ◆g37UcEp//g :06/07/19 12:17
>>618
その辺は即答できないのでしばしおまちを
ターゲットが発動時設定なのか詠唱開始時設定なのかで実現出来るかどうか変わってきます

V_TARGETはかなりいい加減な仕様なので…

621(○口○*)さん :06/07/19 12:28
>>618
スキルモーションじゃなくて投げモーションでやってみたらどうかな。

622(○口○*)さん :06/07/19 13:35
GVAIの作者方に質問があります

今、GVAIを素体に改造したGV向けAIを試作しており、ある程度エラーが取れたら一般公開したいと考えているのですが
このような再配布紛いの行為をしても良いのでしょうか?

許可が出たら八月初旬〜中旬の公開を目途に開発を早めるつもりです

623(○口○*)さん :06/07/19 17:41
>>620
ADSにあわせて撃つのは詠唱開始時が良いと思われます。
先にカプリスがHITするとカウプ剥がしにも有効ですし、
相手のHPが少なければカプリスで倒してADSのボトルの消費を防げるかもしれませんし。

624 ◆g37UcEp//g :06/07/19 18:35
>>622
素体にするのも再配布するのも全然構いませんよ
完成楽しみにしてます

そもそも人のライブラリ勝手に改変して組み込んでるくらいですから
ライセンスは気にしてませんよ
…そろそろライブラリ作者さんに軽く報告いかないとなぁ

>>623
「誰に投げようとしているのか」の部分が綺麗に取得できるようであればやってみます

625(○口○*)さん :06/07/19 19:47
>>605
工体で新しいmobdata.lua使うと[1704]={[[タナトスの憎しみ]]以降の
データを削らないと正常に読んでくれないようです。
それ以上データがあると配列が吹っ飛んでしまうのか、
全ての値を参照できなくなるような気がします。

Luaのテーブルって上限64KBとかの制限ってありましたっけ?

626(○口○*)さん :06/07/19 20:21
>>624
ADSは詠唱では取れず、SPPの方で取れるようです。
ちなみに投げでも取れませんでした。
そして未だにエラーが出て完成せず_| ̄|○

627(○口○*)さん :06/07/19 20:34
すみません、もしかすると違ったかもorz
もっかい格闘してきます
ドコカ| λ...

628(○口○*)さん :06/07/19 21:08
ほんっとスミマセン…連続投稿でorz
一部自己解決できたので報告に参りました

function ADS()
local targetID = 0
targetID = GetV(V_TARGET, gMyOwner)

if GetV(V_MOTION,gMyOwner) == MOTION_SLIMPP then
SkillObject(gMyID, LEVEL_CAPRICE, SKILL_CAPRICE, targetID)
end

end

これでADSの対象にカプリス撃ってくれました
やっぱりADSはMOTION_SLIMPPでした…CASTでやってもできないわけですorz
しかしこの先の友達関係のはどこから呼び出せばいいやらさっぱり(汗)

629(○口○*)さん :06/07/19 21:10
自分専用で、スキルそのものを持ってないなら試せないかもしれないけど
それでSPP打つとどうなっちゃうの?

630(○口○*)さん :06/07/19 21:18
SPPは地面指定スキルでIDを取得しないようなので平気でした
…じゃあ友達登録とかを書かなくても、
同盟内の人にシフト+ADSしない限りこのままでも平気なのかな…?

長い間お騒がせしてすみませんでしたorz

631(○口○*)さん :06/07/19 21:28
>>630
試しに使ってみました
ADSでちゃんとカプリス撃つけどSPPでもモロ撃ってますよ!!
改善する必要がありそうですね〜
私もこの機能欲しかったですし、ちょっと頑張って来ますっ

632(○口○*)さん :06/07/19 21:49
>>625
望 の文字コードが965D
] の文字コードが5D
[[タナトスの絶望]] が [[タナトスの絶*]]] ("*"は0x96)となって
最後の"]"が余るからパースエラー。

[[ ]]を使わずに"タナトスの絶望"とすればいい。

633(○口○*)さん :06/07/19 21:50
TargetIDが保持されてる場合はそっちにカプリスがいっちゃいそうだな。
targetIDが同盟かどうかチェックするのも必要だと思う。
直前にPPで単体指定してるとそれがtargetになってそうな気もするし。

大抵はADSで相手が沈んでくれればその後PP打っても平気かもしれないけど。

634 ◆g37UcEp//g :06/07/19 22:22
こまった・・・うちのケミADSも塩酸もないから実験が・・・w

ADSの詠唱中は誰がオーナーのターゲットなのかな?
AにPP→(ここではもちろんAがオーナータゲ)→BにADS詠唱→(オーナータゲはA?B?)→BにADS発動→(ここではもちろんBがオーナータゲ)
真中でBがタゲなら誤爆は友達登録で回避することで一応実装は可能ですね
ただ、友達以外のCさんを1発殴った後SPP使うとCさんにカプリス撃つことになりますが仕様というしかないですね

あとちょっと気になるのは
SPPモーションなのはSPPとADSと塩酸だけ?
他にもあるとちょっと考えないといけなくなりそう

635(○口○*)さん :06/07/19 23:00
上のやつのタゲの取得位置をif文の後、スキル使用の前に変更してPv行って来ました

自分含めて3人居て、まずAを一発殴り、BにADSをするとBにカプリスが行きます、が…
AにPPをし、SPPを適当なところへ置くとAにカプリス撃ってしまいました
Aが同盟の人だったら…うん、ダメですねorz
カプリスを撃つ前に友達の確認させたいんですが、どうすれば良いのでしょう?

SPPのモーションと同じなのはADSだけなようで、塩酸は違うようです
塩酸は詠唱が終わってから投げてますよね?
ADSとSPPは詠唱と投げるモーションが同じ時になってます

636 ◆g37UcEp//g :06/07/19 23:48
GvAI再up
変更点
近接時のスキル優先用の設定項目追加しました
PRIORITY_SKILL = 1 でスキル優先するようになります
もちろんスキル撃てないときは通常攻撃
一応初期設定はコレまで通り通常攻撃優先の0となっています

setini.lua作者の冬物語の人がGvAIでの変更点を吸収してくださったようですので
setini.luaを正規版に置き換えました

>>635
友達に含まれるかを調べるのであれば
temp = SelectActors(SELECT_NOT_IN, { EnemyID }, gFriends)
if temp[1] ~= nil then
以下省略+説明略ってな感じです
といいたいところですが、コレだと無駄が多すぎますね

急作りですがSelectActorsに1個追加しときましたので
if TableInID(gFriends, EnemyID) == false then
こんな感じでいけます
テーブルに指定IDが含まれていたらtrueを含まれて居なければfalseを返します

637(○口○*)さん :06/07/20 00:06
>>636
追加お疲れ様です、早速報告です
そのまま入れて使うだけでエラーが出ます、195行目付近かな

638(○口○*)さん :06/07/20 00:35
詠唱妨害やその他思い当たる設定を一切してないのに、
ファイアボルト1Lv(カプリス?)を撃つ事が多々あるのですが、なんか分かりますでしょうか?
バニル仕様で、敵はハイオークで発生。
AIは、今のところ工体ときのこで発生してます。

639(*○口○)さん :06/07/20 00:36
mobdata.lua
http://himenomikoto.web.infoseek.co.jp/kulus_project/index.html#mobdata.lua
var.2006/07/18にあった文字コードの問題を修正しました。

>>605,625,632
エスケープ問題が残っているので該当部分だけ""として修正しています。
>>632さん検証ありがとうございました。

640 ◆g37UcEp//g :06/07/20 00:44
ぎゃーすイコールが1個足りないorz
SelectActorsの329行目にも全く同じミスがありますですハイ

ともに修正後を上げなおしたのでコレで動くはずです
また何かありましたら報告お待ちしてます

641(○口○*)さん :06/07/20 00:47
>>638
それはLv1ではなくLV5の不発ではないですか?
火属性に対してLv5FBを撃ったら無効になりMissで火の矢1本だけのエフェクトになります

伊豆なんかに行くとCBが発動したときに同じ状態になりますね

642(○口○*)さん :06/07/20 00:51
>>641
知らなかった……。
ありがとうございます。
ハイオーク相手で、いつもFBなので間違いないと思います。

643(○口○*)さん :06/07/20 02:33
>>640
動くようになりましたー
ADSの方も大丈夫そうです
ありがとうございましたm(_ _)m

644(○口○*)さん :06/07/20 15:56
久々に覗いたら人力アンテナに詳細ページついとる

645(○口○*)さん :06/07/21 00:12
GvAI再up
setini.luaのvar1.5が出たので正規版に置き換えました

冬物語の人のブログにファイル読み込み時の高速化方法が乗ってますね
GvAIとしては再呼び出し時に1回だけロードするようにしてるのでよほど大きくなければ動作に影響は無いと判断
汎用性は高い方がいいのでそのまま使ってます
友達登録が100件200件超えてしまうような場合であれば結構有効かもしれませんのでお試しを

ADS等に反応の主人援護機能は今しばらくお待ちを
結局主人の行動を見るには座標とモーションとターゲットしか状態がないため誤爆の問題が付きまといますね
せめて逐一ターゲットのリセットさえ入れば・・・(それはそれで問題が起きそうですがホム側で記憶できるので)
最悪ADS&SPPモーション中は主人のタゲ(友達以外)に撃つのみという形になるかと思います
要調査実験なのですが・・・

冬物語の人の追加要望で
・危険人物リストの優先設定
・クローク・ハイドの見破り
が上がっていますね
前者はアイデアがまとまり次第実装しますので気長にお待ちを
後者に関しては・・・うーんどうしましょうかねぇ(笑

それとAlt+Tによる画面全体の友達登録機能は廃止するかもしれません
Shift+Alt+右クリックで画面全体を指定すれば同じことなので
今後実装する他の機能を持たせるかも

646(○口○*)さん :06/07/21 00:34
>>628で書かれてるやつちょっと変更して
TableInID使って友達以外かの確認させて試してみました。
きちんと動くし特に問題は見られないと思う、今のところ誤爆は無いです。
強いて言えばADSのモーション硬直状態のままでは同じ相手にカプリスし続ける事だけど、
これも特に気にしなくて平気?どうせADSは同じ相手に2,3回撃ちますし・・・

647(○口○*)さん :06/07/21 06:39
>>645
ちゃちゃ。
>・クローク・ハイドの見破り
> (中略)
>後者に関しては・・・うーんどうしましょうかねぇ(笑

「どうしましょうかねぇ」と悩んでも、どうにもならないというのが実情です。
ホムからは「その相手がハイドしているかいなか」がまったく判断できないので、
手も足もでません。

ほんと、そのあたりの仕様を明確にしてほしいですねぇ。

648622 :06/07/21 06:40
ADS撃つ前後でどんなモーションがとれるかちょっと気になった…

八月に配布AIにおまけとして、GVAIのMyカスタム版と一緒に添付予定のデバック用コード置いていきます…

function IdSave1 (date) -- dateの中身を出力
fp = io.open("AI/USER_AI/File.txt", "a") -- USER_AIフォルダを指定すること!("a"は追加書き込み)
fp:write(string.format("%s", date))
fp:close()
end

これで
IdSave1 (GetV(V_MOTION, オーナーID))
って文をメイン処理のどっかに入れれば、オーナーのモーションの数字をtxtにダラダラと吐いてくれるはず
これで 23 の前後に決まったモーションが出れば、ADSの判断処理がもっと楽になるかも…?

土曜に知り合いのクリエ捕まえること出来たらちょっと頼んでモーション取らせてもらってみます
◆g37UcEp//g  さんがんばれ
・゚・(ノД`)・゚・

649(○口○*)さん :06/07/21 06:45
工体の中の人もう戻ってこないのかなぁ…

誰か引き継げる人とかいないのかな

650(○口○*)さん :06/07/21 06:54
>クローク・ハイドの見破り
これは普通に、ホムが人の居ないところをウロウロと追いかけたら周辺でサイト、ではダメなのかな…

「タゲを確認、でもホム(自分)が攻撃(スキル)モーションになれない」
というので判断できると思います。
判断したらその周囲でホムが目立つ動きをするとか…って、それだと処理が重いかな…


dat落ちしたAIスレでGVでのMoveについて、500_秒〜750_秒間隔ならGv中でもさほど重くないという話があったような記憶があります
あと、GV中のホムAIで問題なのは[ラグで止まっている間Move処理を送り続けることで回線がパンク]と、[ID取得の処理で回線パンク]、[GVのエフェクト処理+AIの処理でPCに負荷がかかること]の三つが上がっていたと思います

仮組みした試作AIでは移動間隔、AI自体の処理間隔を別個にタイマー制御して処理間隔を設定することで、各自の回線の太さとPCの性能に応じられるようにしています
(実戦テストがまだなので効果はわかりませんが…)
これを使えば多分、GV中にMove処理を使っても平気…なはず…


◆g37UcEp//g さんのAIの処理の流れが独特で時々工体さんとこのコードがダブって見えるとです

651647 :06/07/21 08:14
>>650
ホムは
「(ハイドしているかどうかわからない)敵を見つけたので、(普通に)攻撃行動をする」
ことはできますが、それがどうなっているかはわかりません。

ホムは「自分が攻撃モーションになっている」ということを知ることができなかったはず。
(GetV(V_MOTION,自分ID)としても、MOTION_ATTACKは決して帰ってこない)
というか、それがとれたら通常マップでの「重力座標で攻撃不能」はチェックできるのです(^^;;

652647 :06/07/21 08:16
追記。
攻撃系スキル持ちのバニル・フィーリルなら、
「スキル使用→SP減らない」チェックで判断できるかも。

653 ◆g37UcEp//g :06/07/21 10:53
やっぱりハイド状態に捕われずに「敵がいたら報告」する哨戒機能を付けて
後は主人が判断という形が良さそうですね
そのほうが灰色っぽさも薄くなりますし(笑

後は報告の仕方ですが
一番有力なのはファイル名出力ですが
Gv中には少し荷が重い気がします
平地なら隣りまで移動でもいいですが砦だと入り組んでいるので動けない可能性が…
何かいい方法はないですかね

あと○○した後に□□にならなかったらというチェックは
命令送ってからすぐ動くとは限らないGvではちょっと辛いです

654(○口○*)さん :06/07/21 11:21
>>653
>哨戒機能
バニルだとカオス、アミストルだとディフェンス、を一回使うとかで敵の侵入を報告できそうですね
その場合たくさんのキャラが防衛に突撃してきたら大変なことになりそうですが・・・

5秒間隔で、ターゲットが居たら報告行動、あたりが無難な気がします
個々の防衛スタイルや運用によって1秒間隔から10秒間隔までカスタマイズできると良いでしょうね

あとは主人の判断に任せる・・・っと
夢が広がります(*´∀`)

ALT+Tでのモード切替にフラグを使って3〜4タイプのモード切替を簡単に行えるようにして、
「チェイサー優先」とかするとチェイスウォーク優先の哨戒もできそうです
ホムが虚空を追いかけてウロウロするのに気付いたらそこ怪しい!みたいな

後はロキ中のバードダンサーのモーションで何がとれるかもついでに調査したいですねー・・・
突入後に自動でロキ雷鳥を殴りにいくと攻めで便利かもしれない
Gv用は、処理の軽さを追求するか機能増やすかのバランスが難しい…

655(○口○*)さん :06/07/21 22:06
Alt+Tでモード切り替えは、いま何モードかをどうにか表示しない混乱の元ですが、
そのどうにか表示で余分な処理を増やすのも問題になりそう。

軽くて単機能のAIをいくつも用意して切り替えたらよいんじゃないかと思う。

簡易的な切り替えツールと、
友達登録などの仕様を固めてその部分をライブラリ化して
GvAIシリーズみたいな形で複数のAIを作成して必要に応じて切り替えとかすると便利そう。

切り替えは工体のROAIPulsでもいいんだけど、余分な処理したくないので
別ファイルからAI.luaに上書きコピーして、コルホムしてもらう形のほうが良いか。

ちょっと試しに切り替えツール作ってくる。

656(○口○*)さん :06/07/22 13:00
>622,648

GetV (V_MOTION, 自分のID)検証結果

ADS(効果発動せず): 28
フルコート(効果発動せず): 0
フルコート:7
ハイドで隠れる:7
ハイド手動解除:7
ハイド時間切れ:0
クロークで隠れる:7
クローク中に座る:6
クローク中に立つ:0
クローク手動解除:7
クローク時間切れ:0

7以外はずっとその状態を維持
7のみ、瞬間でした。書き込み回数は大体4回。(00777700...)

ADS連打は28のまま変化せず。
ADS中に応急手当をはさんだ場合、28-8-28-8-28-8-28....

メテオアサルト: 0-8-2(立つ-詠唱-攻撃中)
石拾い:5
石投げ:7
ハイド中のグリムトゥースは、スキルIDが変化しませんでした(=認識できません)

657(○口○*)さん :06/07/22 13:22
>>656
おつかれさまです
ADSは他に同じモーションがSPPぐらいなので誤爆する可能性は低そうですね
ただ、他のスキルの場合はスキル使用の7と詠唱の8あとは投げる12ぐらい出なさそうなので援護射撃のトリガーにするのは難しいかも・・・
モーションからのクローク判別はやっぱり無理ですかぁ

GvAI再Up
ADSはとりあえず28だけ見てればいいようなので援護射撃実装しました
ADSとSPPのモーション(=28)を取ったときにターゲットしていた相手に対して
LEVEL_***_ATTACKで指定したスキルレベルで攻撃します

あと、ちょっと質問ですが
使用するスキルレベルですけどカプリスとムーンライトで分けてる必要性はありますかね?
ディレイは分けておくとしても特に反対意見がなければ一纏めにして
援護射撃用と詠唱妨害用の2種類だけにしようかと思います

658(○口○*)さん :06/07/22 13:49
>>656
お疲れ様です
クリエ捕まえるまえに検証結果が出ちまったい
Σ(゜Д゜=;゜д゜)

ハイド中のグリムはスキルモーション認識できずですか・・・
GvAIでグリム発生源を認識させるのはきつそうですね(汗

>>655
>軽くて単機能のAIをいくつも用意して切り替えたらよいんじゃないかと
>ちょっと試しに切り替えツール作ってくる
期待してます

となると、GvAiは切り替えツール用に変数の名前を統一したりする必要が出てきそうですね
「切り替えツール対応」と「独自」の二種類のGvAIが出てきそうだ

659(○口○*)さん :06/07/22 13:58
Gv等高等な話で盛り上がっているところ、すいません。

ギルメンが露天商人をケミに転職させてホム始めたんで、自作AIを押しつけたんですが、
寝落ちでホムが消滅してしまったらしいのです。

押しつけた際に寝落ち対策(os.exit)を入れてある事を説明してあったので、自分もショックで、
こちらに相談に来ました。

機能自体は、再度働く事を確認したので、働かなかった原因ですが、以下の3点でしょうか?
1.ケミの移動を見ているので、誰かがスタブなどで移動させてカウントがリセットされた。
2.自動反撃か何かでホムが釣られて画面外に引っ張られて、画面外に出てAIが止まった。
3.主人が死亡したが、ホムに安息がかからず、AIが停止した。(ケミ生きてたのでこれは無いですが)

また、こういった場合の対策は何かありますでしょうか?

660(○口○*)さん :06/07/22 14:35
あれはあくまで保険だなぁ。
画面外に行ったら制御出来ないから枝mobでノックバック系スキル使われたら終わり。

一定時間マウスとキーボードを監視してOSごと落とすのが一番かと。

661(○口○*)さん :06/07/22 14:49
OSの電源管理をつかってスタンバイにするのがいいかと
スタンバイになれば通信は途切れるのであとは鯖が落としてくれる

662(○口○*)さん :06/07/22 15:01
そうはいうがな、大佐
タイムアウトでログアウトするのはあまりオススメできない。
鯖側に情報が残ったままになる可能性もあるし。

>>659
AI見てみないと分からん。
自作部分がどんな影響を与えているかも判断できんしな。
ともあれ、既に言われてるように寝落ち対策をAIに頼らないことだ。
むしろ本当はそういう機能は削った方がいいんだ。

663(○口○*)さん :06/07/22 15:12
一番いいのは
「PCからの操作のみをリセットキーにする」
座標移動、やモーションは外的要因で勝手に変わる

唯一外から変わらないのが
GetMsgとGetResMsgで取れる値だけ

えさをあげたら必ず手動でホムを移動させるとか
そういう決まりを作ってやら無いといけない

正確度は高いけどその代わりちょっと忘れるだけでよく落ちることになるけどね

664(○口○*)さん :06/07/22 15:21
ありがとうございます。
とりあえず、1−3の条件のどれかが発生して消えたと考えるのが正しいわけですね。

AIが止められる瞬間を検知して終了させる方法があればと思ったのですが、
やはりそんなの無理ですよね。
確実に操作を取れるのはGetMsg系だけですか。検討します。
いちおう、操作忘れで急に落ちる対策に、落ちる3分前から主人の周りを
くるくる回り続ける様にしてあるので、忘れる事は無いと思います。

665(○口○*)さん :06/07/22 15:59
正直、AIスレで言うことじゃないけど、
「犬を飼いはじめたのにエサをヤルのわすれて
旅行にいっちゃって、犬死んじゃった」
っていうのと大差ないことだからなぁ

寝落ちしそうとか眠くないとか関係なしに、露店中には
ホムを安息させる、くらいの勢いでないとそういうひとは
だめなんじゃないかな

そして、タナトス(正式パッチ名わすれた)実装後、寝落ち機能が
聞かなくなったとかいう書き込みがあった気がしたんだが、あれは
結局どうだったんだろうな

666(○口○*)さん :06/07/22 16:33
寝落ちするような状態になってまでゲームするなよとは思う

667(○口○*)さん :06/07/22 18:22
タナトスパッチで一部のOS操作の機能が実行されなくなってる可能性もあるな

668(○口○*)さん :06/07/22 19:22
ちょっと試してみた
ケミWIKIに乗ってるExitは普通に動いた

やっぱり外的要因によるカウンタのリセットか
もしくは何らかの原因でAIの停止
どちらかだろうね

669ぷりー :06/07/22 23:19
AIでホムをアクティブ化するにはどうすればいいのでしょうか・・・・
先輩方よろしくお願いします!

670(○口○*)さん :06/07/22 23:34
>>669
過去ログは確認しました?>>1は読みました?
その上で次の質問します。

・どのAIを使ってますか?
・ホムは種類は何ですか?
・アクティブというのはホム自ら攻撃をしにいくという意味でよろしいですか?

せめてこのくらいは状況説明として書いてください…
色んなパターンがあるのでなんとも言えませんが、
もし公式AIでホムがリーフかアミストルだったなら
AI.luaファイルの598行目をGetMyEnemyAをGetMyEnemyBに書き換えれば
アクティブ(ホムが自ら攻撃)になります。

671(○口○*)さん :06/07/23 02:12
>>669

まず>>1のアルケミトテンプレの、ホムンクルスのコーナーを全て
熟読しておいたほうがよろしいかと。

672 ◆g37UcEp//g :06/07/23 13:26
友達登録関係で少しバグがあったのでGvAi再Up

自分で治す人はSelectActors.luaの161行目
×if y1 > 2 then
○if y1 > y2 then
ファイル置き換える人は
SelectActors.luaのみ(再設定不要)
http://f31.aaa.livedoor.jp/~alchemi/pukiwiki.php?plugin=attach&openfile=GvAI.zip&refer=%A5%DB%A5%E0%A5%F3%A5%AF%A5%EB%A5%B9%2FLua%2FAI
GvAI丸ごと
http://f31.aaa.livedoor.jp/~alchemi/pukiwiki.php?plugin=attach&openfile=SelectActors.lua&refer=%A5%DB%A5%E0%A5%F3%A5%AF%A5%EB%A5%B9%2FLua%2FAI
両方乗ってるページ
http://f31.aaa.livedoor.jp/~alchemi/pukiwiki.php?Lua%2FSample

機能のON/OFFですがコメント「--本機能」の下3つの関数呼び出しの頭に
--をつけてコメントアウトするだけで他に影響は出ずその機能を停止できます
詠唱妨害よりも援護射撃を優先させたい場合などは順番を入れ替えれば上から順に実行していきますので


>>669
アクティブになっているAIはいっぱいあるからそれと取り替えるといいよ。

673(○口○*)さん :06/07/23 20:52
最新版でADSを使用したときにエラーがでるようです
一応チェックお願いしますー

674(○口○*)さん :06/07/23 21:24
./AI/USER_AI/AI.lua:251: global variable "EnemyID" is nil value
というエラー文です

675 ◆g37UcEp//g :06/07/23 21:42
243,259行目のEnemyIDをtargetIDに
自分で使えないとどうにもチェック不足になってしまいます・・・もうしわけない

676 ◆g37UcEp//g :06/07/23 21:42
249と253の間違い
重ね重ね

677(○口○*)さん :06/07/23 21:53
いえいえ
知識があれば自分で修正すればいいんですが・・・
知識無いので開発者様頼りですorz

678(○口○*)さん :06/07/23 22:30
今回初めてGvAI使わせていただきました。
↑のエラーの他に、
フィーリルに手動でムーンライトLv5を使用させると、攻撃指定したキャラのところまでクリエが歩いていってしまうという現象が起きました。

AIはDLしたままの設定で何もいじってません。


って書いてて気が付いたけど、
エフェクトOFFにしてたので、スキル発動に気付かなくて連打→クリックミスで歩く
みたいなことになってたのかも…

679 ◆g37UcEp//g :06/07/24 01:43
GvAI再UP
バグ修正とパフォーマンス対策を少し施しました
http://f31.aaa.livedoor.jp/~alchemi/pukiwiki.php?plugin=attach&openfile=GvAI.zip&refer=%A5%DB%A5%E0%A5%F3%A5%AF%A5%EB%A5%B9%2FLua%2FAI

CoveringFire周りはちょっとバグ多すぎましたね・・・
本番運用中に出てしまったようで申し訳ないです
今後は当日直前のUPは控えた方がよさそうですね
先に試していただいて事前に報告していただければ本番までには修正間に合いますし

時に「重さ」の方ってどんななんでしょう?
同盟の方に初めて使っていただいたのですが他よりマシだがやっぱり重くなるという話が上がり案して
自身がケミで出陣できないため体感できないんですよねぇ・・・
「重すぎて使えなかった」でもいいので体感を教えてもらえるとありがたいです

>>678
こちらではちょっと再現できませんねぇ・・・
手動スキルでは単純にスキル発動しかやってないので
もし起こるとするとクラ側のバグということになってこちらで対処できることは少ないと思います

680(○口○*)さん :06/07/24 02:17
参考になるか分かりませんが
今までGvAIを使っていて、ホムを連れてない時と比べて重いと感じた事は無いです。
自分のPCのスペックは大して高くないので、軽快だと思いますが・・・環境によるのかな
ここ最近のGvは比較的軽めだったってのもあるかもしれません。

681(○口○*)さん :06/07/24 15:21
昨日のgvgで初めてgvAI使わせていただきました
Irisですがそこまで重いなぁと思うとこはなかったです
後質問なんですが防衛時にムーンライトを使わせようとSCにいれてて攻めてきたプレイヤーに使っても発動しなかったのですが、人には主人からの攻撃命令(攻撃スキルやしAlt+右クリ2回の手動攻撃)はできないのでしょうか?
放置狩りみたいな感じで友達登録してないプレイヤーが見えたら無差別に殴りにいくとかできたらいいなぁと思いました

682(○口○*)さん :06/07/24 16:35
攻撃スキルはちゃんと使える設定のはず、不具合かな?
無差別に狙うのは、ラグで動かない時どんどん攻撃のパケがたまって
最終的に同期落ちするので実装しないんだと思います。

683(○口○*)さん :06/07/24 18:33
ムーンライトは対人だと
ターゲットと主人の距離が2セル以内じゃないと発動しない(ホムの位置は不問)
ということをサーバ側でやってるらしいから
その辺の兼ね合いじゃないだろうかと思いますよ

684 ◆g37UcEp//g :06/07/24 19:45
無差別に関してはそうですね
「殴りに行く」に関しては移動を伴うため更に危険が増します
何と言ってもPCすらまともに動けないので

そのあたりの事情から基本的に移動を伴わず1つの命令を1回流すだけで完了する機能を実装していってます

通常攻撃などを諦める代わりに
100人重なっていても可能なピンポイント詠唱妨害など
ホムならではの機能を優先しています

時々しか動かないことでチャンスを逃さないように待ちながら
重さで溜まってしまった命令を解消する時間を取るようなイメージですね

移動を伴わずに行う「近付いた敵に無差別攻撃」の機能については
デフォルトOFFの機能として近日中に実装出来そうです

ただ、前述のように落ちる可能性が高いので
こちらとしては非推奨機能扱いになります

>>683
当方バニル使いのためムーンライトもカプリスと同じという仮定で作って居ました(汗

鳥使いの協力者が得られそうなので少し実験してみます

685(○口○*)さん :06/07/24 22:06
最古鯖 100人規模同士でぶつかりあいしたときは凄く重かった。
他のキャラが進撃していくなか、自分だけまったく動けない状態。
でGv中に3期鯖に移動して別ギルドでGv再開、こちらは50人規模同士だったので
軽快に動いてました。

686(○口○*)さん :06/07/24 22:57
>>683
鳥使いだけどその仕様ははじめて知った。
情報thx
っつーことは鳥はFM使わせての通常攻撃を手動で指定すればいいかな。
状況によってやっぱり手動でMLと。

もし余裕がありましたら、
ML使用不可だったとき、ML指定キャラに接近、通常攻撃に移行
みたいな感じの機能をつけていただけないかしら…。

687(○口○*)さん :06/07/25 15:53
特定のMOBにスキルを使わなかったり、
敵Lv、属性に応じてスキルを使わなくさせることができるAIって
工体以外にありますか?

688(○口○*)さん :06/07/25 16:20
>>687
ttp://pc3merchant.net/ai_antenna/
特定Mobを指定するタイプなら結構ある。
比較表の敵選択の部分を参照するといい。
ただし、特定Mobを殴らない設定可能だけでも○になってるので注意が必要

自動判別は知ってる限りでは工体だけだった

689(○口○*)さん :06/07/25 16:42
流れをぶった切ってすまない

過去ログ見ても見当たらなかったんだが
進化後のホムの攻撃速度の最適化はどうやればいいのだろうか?

任意のディレイをつけて攻撃させれば早くなる〜とか言うのを
どこかで見たような気がするんだが見当たらない…orz

ASPDから適切なディレイを計算する式があったりするだろうか?

690(○口○*)さん :06/07/25 16:42
工体さんの所からROAIPlusをダウンロードしようとした所404になってしまいます
入手は不可能なのでしょうか?

691(○口○*)さん :06/07/25 16:49
今確認したらAI自体も404(ノ∀`)

692(○口○*)さん :06/07/25 17:37
>>689
理屈の上では、下手なことしないで毎回Attack()呼ぶのが最適。

ディレイ入れてるのは見た目のためであって、ディレイを
設けた時点で決して最適にはならない。

693(○口○*)さん :06/07/25 17:41
>>692
ところが微妙にそうでもない。AIの周期とASPDの周期のズレ方が大きいと
本来の攻撃速度に満たないケースもある。
本当に微妙な差なのであんまり気づかなかったりする。

ただ、「実際のAPSD以上の攻撃速度」を出すのは不可能だけどね。

694(○口○*)さん :06/07/25 18:00
多分進化後のAspdは計算式が違うんだろうな

AI周期が最も早い、軽いAIで調べるしかないんだろうね

695(○口○*)さん :06/07/25 18:03
>>693
理論的には「AI()呼び出される周期」と「ASPDでの攻撃可能間隔」との比率の問題だから、
常に呼び出すのが最速になるはず。もちろん常に呼んでも、本来のASPDは出ないけど。
具体的にはどういうケースで「ディレイを入れたほうが早く」なるのか、例示いただけます?

696(○口○*)さん :06/07/25 18:10
まず前提として、AIとASPDの周期が公倍数の関係にあるときに本来のASPDが出されることになるよね?

AIのFPSが6、ASPDが秒間2.5だとすると
例えばこんな感じで

├────── 1 秒 ───────┤

+-----+-----+-----+-----+-----+-----+-  AI(周期
+-------------+---*-------------+---*-  ホム(攻撃
├ 攻撃ディレイ ┤ ↑            ↑
            [実際に攻撃するタイミング]

ズレの分だけ本来のASPDから離れてるとする。
で、ここで入れるディレイってのはAIの周期そのものを若干引き伸ばすことで、
FPSを5に下げてやると

├────── 1 秒 ───────┤
    ↓引き伸ばされた時間
+-----=+-----=+-----=+-----=+-----=+-----=+-  AI(周期
+-------------+-------------+-------------+-  ホム(攻撃
├ 攻撃ディレイ ┤ 


図だとわかりにくいけど、攻撃ディレイよりやや後にAIの2回目が来るくらいに調整。
AIの周期とASPDが公倍数に近くなるので、図1よりは早くなると思うんだけど、どうかな。

割と適当に考えてるんでもしかしたら違うかもしんないけど。

697(○口○*)さん :06/07/25 18:28
ちょっと教えて下さい。
工体AIを使っていて、ホムはバニルです。
ヒルウィンド(槍)とヒルウィンド(魔)に対して強敵設定を行い
魔法を因り多く落とそうと思ったところ、名前かIDで設定しても
魔法を使ってくれません。
何方か原因が分かる方いらっしゃいませんでしょうか?

ちなみに、以下のような二種類の設定を試してみました。
mobdata.lua はvar.2006/07/20( 完全移行8月末予定)を使っています。
コルホムはし直しました。

設定1)SELF_SKILL_RIVAL_TABLE = {[[スケールワーカー]],1680,1629,
設定2)SELF_SKILL_RIVAL_TABLE = {[[スケールワーカー]],[[ヒルウィンド(槍)]],[[ヒルウィンド(魔)]]

あと、mobdata2に移行した後、工体AIに手を加えずに普通に使えるのでしょうか?

698(○口○*)さん :06/07/25 18:42
LUAってスリープとかウェイトって出来たけ?
工体のはディレイ中だと一回ATTACK送るのを休むって感じだと思うわ
俺はfunction AI()の最後尾でもう一回Attack_STを判定してAttack()送ってる
これだけで体感出来るくらい速くなる
進化で一気にASPD上がるから目立つんだろねえ

699(○口○*)さん :06/07/25 18:57
>>698
マニュアルを検索したけどSleepもWaitも無い。やるなら自作でそういう関数作るしかなさげ。

工体のもそうだけど、大抵モーション表示っていう機能がやってることって
Atacck()を送る段階まで回ってきた時に、指定時間を経過してなかったらスキップするだけだからね。
これをやると>>696みたいな現象が余計に酷くなるから凄く遅くなったりするんだと思う。

勿論、目的が「攻撃モーションを表示」させることならそのやり方でいいと思うけどね。

700(○口○*)さん :06/07/25 19:46
>>696
その図を使わせてもらうと、既存のディレイロジックはこうなる。
A:Attack S:Skip
A-----S-----S-----A-----S-----S-----A-  AI(指示
+-------------+---*-------------+---*-  ホム(攻撃
├ ディレイ指定 ┤ ↑            ↑
├ 攻撃ディレイ ┤ ↑            ↑
            [実際に攻撃するタイミング]

意図的なAI()周期引き延ばしっていうのは、ブロック処理だから無意識に禁じ手だと思ってた。
Wait関数はtickと空ループで作れなくはないだろうけど、ホムのASPDにあわせてクラが止まっちゃう。
環境依存にくわえてムラもあるAI()呼び出し周期を実計測して、
次回呼び出しよりも攻撃ディレイ終了が近いと踏んだらWaitする。
なんてことをしないと、ケミ側が「最適」に動けないだろうね。

でもこれ、妙にインテリジェントになるから開発も処理もコスト高そうな印象が。
実際に作ってみると上手くいくのかなぁ。

701(○口○*)さん :06/07/25 19:57
>>700
主張はしてみたものの、自分じゃ作ってないし勿論あんまり上手くいくとも思ってない。
AIのループはTraceAIで見ただけでもかなり規則のズレが起きてるし、
何よりホムのASPDを正確に取得しなければ意味がないこと、
AIで制御したところでサーバーとの遅延もあったりすることなど問題は山積みだと思う。
とりあえず今のところは、実用面で言ったらとにかくAttack()連打しとけばそれでいいんじゃないかな。

何か最近他でも

>任意のディレイをつけて攻撃させれば早くなる〜とか言うのを
>どこかで見たような気がするんだが見当たらない…orz

こういうコメントを見たので、何か変な風説が出回ってるんじゃないかと思っただけで。

702697 :06/07/25 20:02
自己解決しました。
スレ汚し大変失礼致しました。

703(○口○*)さん :06/07/25 20:23
PCのCtrlロック(パケットがあって鯖処理らしい)がホムにもあればなぁ…。

>>697,702
スルーしちゃっておいてなんだけど、できればどうやって解決したのかも書き残してくれると。
文字列指定するときはmobdata.luaからコピペしとけ、って話?

704695 :06/07/25 20:50
ああ、了解。
AI()が呼ばれる周期自体を、AI()自体を重くすることで引き伸ばす、ってことね。
なるほど、うまくできれば確かにより適切なASPDを出せそう。
だけど・・・通信系では難しそうだ(^^;;

705697 :06/07/25 21:27
そうですね。
解決法の提示は次に繋がりますから書き記しておいた方がイイですね。

今回私がハマッタのは
オートスキル関連の設定
┗強敵モンスターに対し高確率でスキルを使用する
 ┗強敵モンスターのIDまたは名前のリスト カンマで区切る

で、設定しても反映されなかった訳ですが、この設定より以下の設定が優先されて
いたためにヒルウィンド二種に対して、スキルの使用がありませんでした。

新しく追加された設定
┗敵のMDEFがこの値より上ならスキルを使わない
 NO_USE_MAGIC_MDEF = 60,(↓下の設定よりMDEFの除算減算の合計)

┗MDEFの計算式を指定
 MDEF_DIV 乗算MDEF
 MDEF_SUB 減算MDEF
 MDEF_TOTAL 合計MDEF
 NO_USE_MAGIC_MDEF_TYPE = MDEF_TOTAL,

※1.コレによりmobのMDEF合計が60以上の場合スキルを使わなかったという事です。
※2.ヒル(槍)のMDEF:15+50=65
※3.ヒル(魔)のMDEF:15+50=65

どの設定が何処に絡むか分からない部分が多いですが、思わぬところに答えがあった
という事でした。

706(○口○*)さん :06/07/25 23:31
ホム進化させてみましたが、確かに何かもっさりしてる感じがありますね

707(○口○*)さん :06/07/25 23:41
ここでさらに流れをぶった切って質問

そのIDが「人」かどうかを見分けるのは「ID > 100000」でいいのかな?
無条件に友達登録したらプラントやらホムやらMobやら毎回変わるIDやWPや看板までお友達になっていたものでorz

708(○口○*)さん :06/07/25 23:50
>>707
正確なところは開発元しか知らない話だけど、経験上ではたぶんそれで十分だと思われる。

709708 :06/07/25 23:51
先人からの補足。
GetActor() で集めたIDには、そのホム自身や、ホムのオーナー自身のIDも紛れ込んでる。
友達登録するときは気をつけるべし。

710(○口○*)さん :06/07/26 07:10
>>697,705
そういう情報は人様のAI使う上で必要なものだから、
なにかあったらまた書き込んでくれ


しかしまあ、スルーして結果書かせてスルーとは、なかなか…
せめて礼だけでも言おうぜ

711(○口○*)さん :06/07/26 10:51
工体の人は置き場も無くなっちゃったみたいでもうおしまいかな
乗り換えるしかないかのう

712(○口○*)さん :06/07/26 12:05
Webスペースを借りられるように〜ってブログに書いてあったけど
その部分がダメになっちゃったんだろうな。

工体の代わりになるようなのでお勧めのAIある?

713(○口○*)さん :06/07/26 12:09
>>712
工体AI使えなくなったケミに朗報
くまーAI使って生体1マジオススメ、テレポしながら適当に索敵で1M出るかも
レアもあるし瓶も溜まるしでマジオススメ

714(○口○*)さん :06/07/26 12:18
6さんこんにちはー

715(○口○*)さん :06/07/26 12:26
>>713
それはくま〜AIである必要があるのか?と、ふと思った

それ単にくま〜を布教したいだけちゃうんかと

716(○口○*)さん :06/07/26 12:29
最近の6は節操無いな。ここはいいけど未実装スレやアサスレに出張とかはやめてくれw

717(○口○*)さん :06/07/26 12:34
あくまで個人的な感想だけど、工体の次の候補としては

総合力ならくま〜AI or こっこAI
Mobごとに違う行動させたいならGlenelg
横殴り判定重視なら安っぽいAI
そもそも非先行でいいならどきどきAI
索敵の細かい優先順位つけたいならきのこAI

今あるAIは個性あるのが多いから一通り使えば合うのがあるはず

718(○口○*)さん :06/07/26 12:53
まぁ、6さんのマネしたのは冗談だw

色々なAI試したけど、ベースにするAIとしてはくま〜が一番よかった。
ただ遠距離攻撃に対するスタックはちょっと多かった気がするけどね。

今はくまーをベースに自作の外部ツールを組み込んでリアルタイムに挙動を制御出来るようにしてる
Alt+T以外にもRO割り当てられてないSCを外部ツールからAIに入れてあげてる。

面倒で拡張機能をほぼOFFにして普通に狩りするようになったけどな。
ホムがオーラに近くなって細かい制御しなくても余裕で避けて倒しちゃうからねw

719(○口○*)さん :06/07/26 13:29
このまま工体を使い続けるのは厳しい?
ずっと使ってたから愛着があるんだけど・・・
使用する上の問題点とかあります?

720(○口○*)さん :06/07/26 13:52
>>719
アップデートへの対応
それだけだと思う

721(○口○*)さん :06/07/26 14:01
MobデータとMapデータの更新が出来れば、
基本的には問題ないと思う。ライブラリ側で変化があると修正がきつくなるかもしれないけど。
Mobdata.luaも形式がちょっと変わったみたいだし。

722(○口○*)さん :06/07/26 14:02
>>717
評判落とすつもりはないが、安っぽいAIはたまにバグ取ってる最中の「少し古いファイル」が混ざってるから要注意だ
報告すれば早いうちに新しいのアップし直してくれるけど

723(○口○*)さん :06/07/26 16:28
>>719,720
ありがとうございます
両方を更新してがんばってみます

724(○口○*)さん :06/07/26 16:35
>>705
thx。それは盲点だ。

でもMDef合計値で見るのってどうなんだろう。
低MATK時や多段Hit魔法ならともかく、MATKが育ってしまえば
多少の減算MDefはどうでもよくなりそうなものだけどね。

>>710
あれから時間なかったんだ。一日ぐらい待ってくれよ。

725(○口○*)さん :06/07/26 17:04
>>717
青箱ドリーマーのrhapsoAIを使ってる自分は小数派?個人的に
ターゲットを発見後、攻撃する前に遠距離から初弾自動スキルを使用する
っていう動作がツボ。AI設定変更ソフトも分かりやすいし
ただスタックで微動だにしなくなる事があるのと、初弾にちゃんとスキル使ってくれない事があって
乗り換えようと思うんだ。
攻撃する前に遠距離からスキル〜っていう機能のあるAIって他にあるかな?

726(○口○*)さん :06/07/26 17:38
>>725
初弾スキル発動率を100倍とかにすると幸せになれるかも知らない。

727(○口○*)さん :06/07/26 17:38
進化ホムのAspdを早くできるAIって何があるかな
>>698の方法で少し早くなったんだけど、まだ遅いと感じる

728(*○口○)さん :06/07/26 17:50
つ「function AI()の先頭で一回Attack_STを判定してAttack()送る」

729(○口○*)さん :06/07/26 17:55
>>727
その前に攻撃モーション表示機能はOFFだろうな?

>>725
直前に何かスキルを使ってたりして月光のディレイが残ってると
初撃はどうしても発動出来ない場合もあるから、それだったら他のAIでもどうしようもない。

730(○口○*)さん :06/07/26 18:07
>>725
確かくま〜に初撃スキルの設定っぽいのあるよ
落として確認してみたら?

731(○口○*)さん :06/07/26 18:33
>>728
thx 進化バニル表示aspd162で、キノコの殲滅時間が
9秒→8秒(最後尾)→7〜8秒(最初と最後) くらいまで上がった。
ただ、攻撃間隔が短かったり、長かったりあんま安定しないっぽい

>>729
OFFだよ

732(○口○*)さん :06/07/26 18:39
>>696の図あたりから察して欲しいが、1回のサイクルの中で微妙にタイミングをずらして
攻撃パケを複数送ってる、言わば「数撃ちゃ当たる」的な仕様なので、外れることもあるわけさ。
だから当たれば短い=実ASPD近くなり、外れたら長くなる。
AI1ループにつき1回の攻撃パケじゃ外れる確率が圧倒的に高いっていうだけの話だ。

733(*○口○)さん :06/07/26 19:27
>>724
工体AIで設定したホムのMATKから試算した敵の防御率で判定させる改造(ついでにDEFも)
例)MATKが300、敵MDEFが乗算20、減算40なら敵防御率は20 + 100 * 40 / 300 = 33.3333....(%)

ailib.lua
-- 定数宣言
DEF_COMBO = 7
MDEF_COMBO = 8

-- function IsHomunclus( id ) の少し上

local SIM = function( mid, a, d, s )
if mid and a and d and s then
return GetMobInfo( d, mid ) + 100 * GetMobInfo( s, mid ) / a
end
return nil
end

local function GetRules() -- 初期化されるまで M_V_ 系は定義されていないため
return {
[ DEF_DIV ] = { NONE, { M_V_DEFDIV } },
[ DEF_SUB ] = { NONE, { M_V_DEFSUB } },
[ DEF_TOTAL ] = { SUM, { M_V_DEFDIV, M_V_DEFSUB } },
[ MDEF_DIV ] = { NONE, { M_V_MDEFDIV } },
[ MDEF_SUB ] = { NONE, { M_V_MDEFSUB } },
[ MDEF_TOTAL ] = { SUM, { M_V_MDEFDIV, M_V_MDEFSUB } },
[ DEF_COMBO ] = { SIM, { Settings.HOMUN_ATK, M_V_DEFDIV, M_V_DEFSUB } },
[ MDEF_COMBO ] = { SIM, { Settings.HOMUN_MATK, M_V_MDEFDIV, M_V_MDEFSUB } },
}
end

734(*○口○)さん :06/07/26 19:27
〜続き〜
config.lua
-----------------------------
-- 新しく追加された設定
-----------------------------

-- 敵のMDEFがこの値より上ならスキルを使わない nil で無効 (要mobdata.lua)
-- 計算式は NO_USE_MAGIC_MDEF_TYPE を参照
-- MDEF_COMBOの場合はHOMUN_MATKに対する防御率
NO_USE_MAGIC_MDEF = 60,

-- MDEFの計算式を指定
-- MDEF_DIV 乗算MDEF
-- MDEF_SUB 減算MDEF
-- MDEF_TOTAL 合計MDEF
-- MDEF_COMBO 総合防御率試算(要HOMUN_MATK)
NO_USE_MAGIC_MDEF_TYPE = MDEF_TOTAL,

-- ホムのMATKを指定
HOMUN_MATK = 200,


-----------------------------
-- オートスキル関連の設定
-----------------------------

-- これより高いDEFのMobに対して高確率で魔法を使う(要mobdata.lua)
-- DEFの計算式は SELF_SKILL_HIGH_DEF_TYPE を参照
-- DEF_COMBOの場合はHOMUN_ATKに対する防御率
SELF_SKILL_HIGH_DEF = 60,

-- DEFの計算式を指定
-- DEF_DIV 乗算DEF
-- DEF_SUB 減算DEF
-- DEF_TOTAL 合計DEF
-- DEF_COMBO 総合防御率試算(要HOMUN_ATK)
SELF_SKILL_HIGH_DEF_TYPE = DEF_TOTAL,

-- ホムのATKを指定
HOMUN_ATK = 200,

735(○口○*)さん :06/07/26 22:45
>>728のは具体的にはどういう記述になるのでしょうか?
頭悪いからすいません><

736(○口○*)さん :06/07/26 23:00
報告兼覚書

拳聖の
ジャンプする奴
 上昇中=19
 下降中=20
 着地=25
落法=25
融合中(ふわふわ浮く奴)
 立ち=0(通常の立ちと同じID)
 座り=6(通常の座りと同じID)(見た目も同じ)

737 ◆g37UcEp//g :06/07/27 00:22
GvAI更新
変更箇所は
・つづりミス等によるエラーの修正
・冬物語の人に指摘されたSelectActorsとConstの関数名称修正
・人以外のIDは無視(援護射撃、手動スキルは有効)

AlchemistTemplate様が避難所へ移転されているようですが
避難所には古いファイルがパスがかかったまま置いてあるので更新してません
なので古いページのみの更新です
http://f31.aaa.livedoor.jp/~alchemi/pukiwiki.php?plugin=attach&pcmd=open&file=GvAI.zip&refer=%A5%DB%A5%E0%A5%F3%A5%AF%A5%EB%A5%B9%2FLua%2FAI

これからも更新していくとなると配布更新履歴ようにBlogでも持ったほうがいいですかね?
本当は一名無しが素体だけ作って放置しようと思っていたのですが
予想外に反応が出たのでもうちょっと更新続けようとおもいます。

738725 :06/07/27 00:58
返信どうもです
>>726
初弾だけスキルを使って、後は一切使わないというのが理想なので、
発動率1%、初弾なら100倍の設定にしても初弾でちゃんと撃ってくれません

>>729
どうも射程外から射程内に入った敵には発動しても、
ずっと射程内に居た敵(モンハウでの一匹目を処理したあとの二匹目など)には発動しない感じがします
ただディレイがのこってただけなのかな?

>>730
くまーAIをしばらく使ってみることにします
ありがとうございます

>>◆g37UcEp//g
自分はクリエですが、GvAIの事をここで知って
取る予定だったコートを切ってホムに変更しました
今ではGvケミクリエはGvAI搭載ホム必須とまで思ってます
期待してますので更新がんばってくださいなー

739(○口○*)さん :06/07/27 01:55
らーげでオートSBR44っての出てるな。
400-600くらいのスキル攻撃が通常攻撃と同じくらいに出せるみたいだ。
使い勝手が悪いと言われている鳥奥義への光明になるかな。
以下抜粋

-- スキル ID
IN_SKILL_MOONLIGHT = 8009
IN_SKILL_FLEETMOVE = 8010
IN_SKILL_OVERDSPEED = 8011
IN_SKILL_SBR44 =8012 <--このIDを使用
IN_SKILL_CASTLING = 8005
IN_SKILL_DEFENCE = 8006
IN_SKILL_HEAL = 8001
IN_SKILL_EMERGENCYAVOID = 8002
IN_SKILL_CAPRICE = 8013
IN_SKILL_VENEDICTION = 8014

-- 戦闘中自動攻撃スキル
function Cast_SkillWhenFight(myid)

local type = GetV (V_HOMUNTYPE,myid)

if(type == FILIR or type == FILIR_H or type == FILIR2 or type == FILIR_H2) then
if(OPT["IN_AutoMonlight"] == 1 and GetSPPercent(myid) >= OPT["IN_AutoMonlight_SP"]) then
SkillObject(myid, 5, IN_SKILL_SBR44, GetV(V_TARGET,myid))
return 1     ↑    ↑この部分
end

740(○口○*)さん :06/07/27 07:05
工体、くま〜、こっこ、どきどきの四つはブランド的な認知度だと思ったマイナーAI使い
この四つは使ってる人多いみたいだからブランド扱いしていいのかな

741(*○口○)さん :06/07/27 07:26
>>739
抜粋忘れ
最後の三番目行の SkillObject(myid, 5, IN_SKILL_MOONLIGHT, GetV(V_TARGET,myid))を
SkillObject(myid, 3, IN_SKILL_sbr44, GetV(V_TARGET,myid))に変える

ディレイなし、親密度が1になるが消費SPは1(防御無視は韓国仕様)
親密度1で使うと400-600程度のダメージ、大嫌いのままでいいなら
ムーンライトよりSP効率が良くディレイなしの連打スキル・・・
大嫌いがボトルネックになって使う人は多くは無いだろうね

>>740
4つとも古参で当時から高機能&よくスレに顔出してた(or ROM)
加えて対応も早くて親切だったのが(現機能以外でも)好かれてる理由だと思う
機能で見ればどきどきはこっこでカバー出来るから
工体、くま〜、こっこの3本柱ってのが個人的な感想(使ってる人数ならその4つ

742(○口○*)さん :06/07/27 08:11
オートSBRいいなぁと思ったけど、
考えてみたらうちの鳥はFM使えば通常攻撃が500超えるんだっけ・・・(´・ω・)イミナイネ

743(○口○*)さん :06/07/27 08:13
すいません、
攻撃が全てlv5カプリスだけ(通常攻撃なし)
って記述はどうすればいいのでしょうか?

744(○口○*)さん :06/07/27 08:39
>>743
オートスキルのあるAIにこれを追記。
Attack = function () end


ごめん冗談。

745(○口○*)さん :06/07/27 08:46
>>743
簡単だからプログラム文とにらめっこすることをお勧めしたい
それでエラーが出てどうしようもなくなったら10時間後に教えてあげよう

746(○口○*)さん :06/07/27 12:30
>>742
防御無視なので固い敵がいる狩場に行けるじゃないか。
あと、育つ前の鳥ならかなり有効そうだ。
進化が前提ってのがアレだけど。

747(○口○*)さん :06/07/27 13:14
>>743
AIマニュアル探してから一通り目を通してから来い


MyID : ホムのID
MyEnemy :敵のID 

お前さんが使ってるAIの

Attack (MyID,MyEnemy)



SkillObject (MyID, 5, 8013, MyEnemy)

のように全部置き換えればおk
修正は自己責任で。

748747 :06/07/27 13:15
すまない・・・sage忘れたorz

749(○口○*)さん :06/07/27 13:17
>>747
優しいな

750(○口○*)さん :06/07/27 13:23
>>746
DEF無視でどれだけの速度で打ち込めるんだろうか。

遠距離+SP1でディレイ無しで高速で撃ち込めるなら
青PPしまくりで亀退治とか楽しそうだな。
足遅い窓手あたりなら被弾無しで行けそうだ。

問題はちょっとでも油断したら進化したホムに逃亡される事か・・・

751(○口○*)さん :06/07/27 14:32
mobdata.luaって、どうやって作成〜更新すれば
良いのでしょうか。

素人でも可能なら、mobdata.luaがmobdata2.luaに移行しても、
工体使えるなと思いまして。

752(○口○*)さん :06/07/27 14:39
moblua自体はファイルを更新すればそれでいいから
配布されてるやつDLすればいいと思う。
問題なのはmobluaを利用したデータ呼び出しとかをやってる場合。

自分は工体は使ってないからわからんけど、愛用者は多いから
移行に関して何かある場合は多分このスレとかでも誰かが詳しく書いてくれるんじゃない?

753(○口○*)さん :06/07/27 15:27
くまの人のHPで雑記見た後本屋にいってみた
くまAIマジで雑誌に載ってる

これでますます他AIとの知名度の差が出たなぁ
さすがくまブランドだ

754(○口○*)さん :06/07/27 15:38
くまAIは横殴り防止機能が貧弱なのが気になりました
敵から○セル以内にプレイヤーが居る場合、攻撃しない
って機能はないのかな?

755(○口○*)さん :06/07/27 16:01
きのこにあるな、他は知らない。他にもあったろうか。
釣る訳じゃないが横殴ってるホムは時々見るので普及してくれると嬉しいのだが

756(○口○*)さん :06/07/27 16:17
しかしROの特集ページ自体が随分寂しくなったものだなと
久々にログイン見て思った。見開き2ページだけか…。

757(○口○*)さん :06/07/27 17:09
ログインは昔から2ページじゃなかったかな。
他のネトゲ連載が消えていく中、よく頑張ってると思う。
月刊誌なんで情報がちょっと遅いのはご愛嬌。

758(○口○*)さん :06/07/27 19:06
あとは安っぽいやつが○セル以内にプレイヤーがいると攻撃しない
○セル以内にっていう判定してるAIって結構少ないな

759(○口○*)さん :06/07/27 19:51
横殴りって特定条件下でアクティブ化するAIで起きる問題?
それとも非アクティブにしてあるだけのAIでも起きるのかな

760(○口○*)さん :06/07/27 19:55
何度もGetActors呼ぶの重いし面倒だしね
自分は索敵時にケミと敵の距離≧他PCと敵の距離になったら除外
CHASEとATTACKの時に敵のタゲを調べて、他PCをタゲってたらIDELにするようにしてる

761(○口○*)さん :06/07/27 19:59
こっこAIに10セル以内にプレイヤーがいると非アクティブを追加
function GetEnemy (myid)の
if ActiveFlag then

if ActiveFlag and GetPlayersNearID(10)==0 then
に変える

762125 :06/07/27 20:02
>>759
ホムAIのタゲ判定が大雑把だからデフォで横殴りする

今あるAIは横殴りをしないようにタゲとかIDとか情報拾って判断出きるように改造されてる

763(○口○*)さん :06/07/27 20:03
うわ、名前残ってた
|||orz

764(○口○*)さん :06/07/27 20:15
神様仏様アルケミ様。
愚弟な私からAIについて質問させてください。

そろそろ配布されてるAIを使って、くるくるさせたりしてみたくなったのですが、
いざ配布されてるAIをいろいろ入れてもなかなか動作しません。
ちょと長くなりますが経緯を。

1.とりあえずテンプレなどを見てAIフォルダ内に「USER_AI」のフォルダを作る必要があると知り、作る。
2.>>1の配布サイトで物色。
3.工体AIが色んなAIを切り替えれると知りダウンロード→1で作った「USER_AI」は消して、工体AIの「USER_AI」をAIフォルダ内に設置。
4.くるくるさせたいので0マテAIをダウンロード。→AIフォルダ内に設置。→ちゃんと説明通り、ConstとUltiをコピーしてくる。
5.いざ工体AIのroaiplus起動。→フォルダ選択の所を0マテAIにする。
6.最小化してあったROの画面に戻る。
7./hoaiを入力。→カスタム設定で活動します、とログが出る。
8.出してあったホムを安息→コールホム。
9.エラーになって画面が黒くなり↓のような表示が出る。

cannot read ./AI/0-MATE_AI/AI.lua: No such file or directory

attempt to call a nil value

この英文から察するに0マテフォルダ内のAI.luaに何か問題ありそうなので、
いろいろ調べてみるも良くわからず・・・。
このスレ・前スレもざっと目を通すものの、やっぱりわからず・・・。
もう一度、各AI配布サイトの説明を見つつチャレンジするもやっぱり↑の表示が出る。

無知な私を助けてください orz

765(○口○*)さん :06/07/27 20:19
ん?ConstとUltiはいいけど、本体のAI.lunaは?
もしくは0マテはどこに設置してる?

あと工体AIとroaiplusがどっちがどっちかその書き方か分かりにくい。
全部roaiplusかな?文脈からすると。

766(○口○*)さん :06/07/27 20:24
>>765
自分の頭の中を整理しつつ…

0マテの設置場所はRagnarokフォルダのAIフォルダの中。
USER_AIの横にぽつんと置いてある。
0マテフォルダ内はAI.luaとコピーしてきたConstとUlti。

工体は解凍して出てきたUSER_AIのフォルダをそののままAIフォルダ内においた。
んで、その中にあるroaiplusを起動して0マテフォルダを選択、って感じです。

767⊂(*'ω')⊃ :06/07/27 20:26
>>761
丁度その機能を追加していたところに…ッ!

指定セル以内できっかりアクティブ索敵しなくなるっていうのもいいけど
距離依存で索敵範囲を狭めるっていうのもやってみました。

自分はあまりアクティブで動かさない方なので
この辺の機能には盲点が多いと思います。
こういう要望とか上がってるとやる気が出ていいですね。

768(○口○*)さん :06/07/27 20:31
うーむOマテはroaiplus利いたよね確か。
もう分からんので、

AI\USER_AIの中に「roaiplus.js」があって、
AI\0-MATE_AIの中にちゃんとAI.luaがある?

769(○口○*)さん :06/07/27 20:42
>>768
うおおお 神様ァァァ!
AI.lua.txtのままだった・・・。 il||li(っω-`。)il||li

AI.luaに名前変更してやってみたらクルクルし始めました!
果てしなく感謝!!
ありがとう!ありがとう!!

770(○口○*)さん :06/07/27 21:09
工体からくまへ乗り換えって言ってるけど
くまは詠唱中断してくんないからなぁ・・・

771(○口○*)さん :06/07/27 21:10
おめでとん。
時に工体が更新絶望的になった以上、
ROAIPlusも同じで、どのうちダウンロードもできなくなる(てかもうできない?)と思うんだけど、
同じような効果のAIって言っていいのかな?ありますでしょうか?

772(○口○*)さん :06/07/27 22:29
進化ホムがもっさりしてるような感じなんだけど
工体での進化ホムがテキパキ動くのはどうすればいいですか

白黒はっきりするまで工体使ってみたいです
更新停止宣言あったら諦めよう

773(○口○*)さん :06/07/27 23:09
今もってる工体を大事に育てればいいじゃないか
今時点のバックアップは必ずとっとけよ

774(○口○*)さん :06/07/28 00:42
>>750
SS見る限りだと、通常攻撃と同じっぽいな。
ttp://ragnagate.gamehankook.com/zboard/data/screen4/204/screen557.jpg

遠距離攻撃もできる気がするが、もしできるとしたらとんでもないことになるぞ。
ヒント:ttp://ragnagate.gamehankook.com/zboard/data/screen4/204/screen560.jpg

775(*○□○)さん :06/07/28 09:53
>>746,750
防御無視は韓国仕様
普通にDEFの影響受けます(テンプレ)
エフェクトは何もなし、ディレイが約1秒らしい(テンプレ)

>>751,752
>>606


A.ケミからの距離
B.ホムからの距離
C.敵に一番近い他PC、他ホムからの距離
D.敵毎のアクティブ強敵設定or優先度設定
から総合優先度 ((A+B)/2)*C*D(例)
を判定してより優先度の高い敵が現れたらターゲット変更とか
こっこなら平均戦闘時間の何割経過したら現在の敵を優先するとか
別にそこまでやる必要はないけど、やれるならやってみたい機能

776(○口○*)さん :06/07/28 10:06
>>759
自分のAIは、非アクティブでも横殴りしそうな時がある。
崑崙の桃木に別方向から2匹にタゲられて、
片方に攻撃しにいって、もう片方はタゲ外した後に。
自分が攻撃してるのを倒して、タゲ外した桃木がすでに他人と交戦中でも殴りそうになる。
あとゼノーク相手に、自分が初撃ミスだした直後にゼノがルートしに走り去って、
そのまま範囲に巻き込まれてるのに、追いかけていったりとか。

他人のホムに横殴りされた事があるのは、
本人の近くで沸いて、こっちへ向かってくるmobとか。
mobの移動が速くて、攻撃してもタゲ変わらずに結果横殴り?みたいな事も。
進化までしてるホムで、放置狩で横殴りされると同職でもショックうけるね・・

777(○口○*)さん :06/07/28 10:17
俺の場合は画面の状況に合わせて行動を制御してるな。

画面内に誰もいない→アクティブ
画面内で人が居る状態
 →ケミ及びホムの3セル以内に人が居る →ノンアクティブ非戦闘モード
 →         〃         居ない→ノンアクティブ反撃モード

ただし交戦中の場合に人が近くに来た場合は戦闘中のmobに関しては倒すまで叩き続ける。
Alt+Tだとコマンド少ないしセルクリックは面倒だからムーンライトの1〜3で制御補助してる。

778(○口○*)さん :06/07/28 11:22
横殴り防止について、私は Attack() する前に必ず GetV(V_TARGET) を用いて
1. ケミがタゲっている、もしくはケミやホムをタゲっていれば攻撃可
2. 誰かをタゲっていたり誰かがタゲっていれば攻撃不可
3. それ以外の場合は攻撃可
の順番で判定しております。
しかしこの方法だと、トレインされている敵や
タゲられている人が位置調整のために少し動いた場合 (?) に
横殴りにいくことがあるようです。
GetV での判定に失敗しているのだと思いますが、
GetV の挙動を詳しく調べた方、いらっしゃいます?

779(○口○*)さん :06/07/28 11:34
GetV()だけを使った判定だと、トレインに横断されたりするときには結構無力です。

・GetV()では、1キャラ(PC/敵問わず)は、1つの値しかないので、多数をトレインしているケースでは、
 「その人は多数のうちの1体しか狙っていない」ように見える。
・GetV()で取れる値は、敵の場合、その敵が実際に攻撃モーションを取るまではなし。
 だから例えば「プロボックで遠距離からタゲ取りされた」とか「そもそもアクティブで近づいている」敵は、
 人間の目ではあきらかに誰かをタゲっていても、GetV()ではフリーに見える。

例えば・・・騎士がプロボックを使って3体の敵をタゲってトレインしているシーン。
人間の目では「敵3体が騎士に向かって歩いている→たぶんトレインだな」とわかりますが、
ホムからみると
・敵は3体とも、PCを攻撃していない。
・騎士は、そのうちの1体だけを狙っている。
・・・となるので、残りの2体の(トレインされている)敵は狙ってしまいそう。

780(○口○*)さん :06/07/28 11:37
↑の方でもあったけど、それならそもそも●セル以内に人が居たらアクティブにならないとか
索敵範囲を狭めるとかそういうのにしたらいいと思う。

781778 :06/07/28 12:04
>>779
ありがとう。よく分かった。
「敵が実際に攻撃モーションを取るまではなし」というのが要注意ですね。
ただ昨日、アサ氏と普通に交戦していた(ように見えた)ナイトメアに
横殴りしてしまったのは何だったのだろう。
私が認識できなかっただけで、横湧きだったのかな・・・?

>>780
それは横殴り防止には有力だろうけど、
消極的すぎる感じがするんだよなぁ・・・

782778 :06/07/28 12:10
ごめん。書いてから気がついたが、語弊があった。
アサ氏と交戦中というのは、アサ氏が複数の敵に囲まれていて
その中の一匹であるナイトメアにカプリスを発動した、ということです。

783(○口○*)さん :06/07/28 12:23
それは一個前に交戦したMobのIDが残ってて、
アサをタゲってるナイトメアのIDと残ってたIDが偶然同じだったからそのまま殴ったんじゃないだろうか
GetVでとれるタゲはいい加減な上に 上書き以外で古いデータを破棄出来ない から横殴りの判断のさせかたによってはそうなる

あとナイトメアは次の攻撃モーションまでの間が長いから、ホムから見たら攻撃と攻撃の間はタゲってないように見える
モーションで判断させてるとAspd遅いのに攻撃モーションが短いという敵は判断できない

784(○口○*)さん :06/07/28 12:23
V_TARGETというか、タゲ認識って厄介なもので、
例えば主人のターゲットは相手が死のうが画面外行こうが、
それ以後一切他の敵を触ってなければ対象IDが変わらないんだ。

「ケミがタゲっている敵」の時点で攻撃可判定にしてるなら、
その以前タゲったIDと同IDの馬が湧いてそのアサにはりついてたのではないかな。
条件分岐の優先度がどうなってるかわからないけど、
同IDのPOPで微妙に不具合出るのが「ケミのターゲット」条件の弱点だね。

つーか該当ソースとか貼ってくれないとアドバイスしづらい。

785(○口○*)さん :06/07/28 12:42
進化後ホムのAspdの問題について、AI遅延させなくても大丈夫かもしれない

今出かけ先だからすぐ試せないけど、
自分が配布してたAIのバグ修正してる最中に気づいたんだけども

IDLE→AI()→終了→AI()→CACHE→AI()→終了→AI()→Attck→AI()→終了→AI()→IDLE→AI()→

って処理になってるっぽい
なのでAI()を経由する回数を減らせば攻撃間隔を大幅に減らせられるんじゃないかって思う

直接関数呼べば早くなるはずだけどその場合、
「手動操作で割り込めるタイミングが減る」
「どのタイミングでAI()に戻して一度処理を集結させるか(そもそもLuaは最後まで処理させる必要があるのか)」
って問題が出てきそう

進化ホム持ってないので帰ってもテスト出来ないのが虚しい
|||orz

とにかく、これで進化後ホムのモッサリを直せないだろうか?

786779==Glenelgの人 :06/07/28 12:42
まず、1点突っ込み。
>>783
攻撃と攻撃の間では、GetV(V_TARGET)の値は変わらないです。


うちのGlenelgも、以前はGetV(TARGET)だけで横殴り判定をしていたのですが、
いろいろご指摘をいただいたので、近くに敵がいたらパッシブor策敵範囲を減らす仕組みを組み込みました。
ですが、778氏のご意見ももっともで、ただ「範囲を減らす」ってのは確かに消極的だと思っています。

で・・・今ふと思ったのですが、折衷案的なアイディアとして
「近くにPCがいたら、フリーに見える敵でも、それがなんらかのモーション(移動・攻撃など)をしていたら策敵対象外」
・・・ってのは悪くないかも。
偶然移動してるノンアクティブとか、タバコ吸ってるオークを狙えない、っていう弱点はありますけど。

787安っぽい人 :06/07/28 12:48
プチ宣伝

ケミのターゲットを疑似的にリセットする処理ならうちのAIで実装しちょるぞー
(゚∀゚)ノ

記憶曖昧だけど、確か他の配布AIでも一部実装されてたような
参考AI一覧に参考AIちゃんと追加したか不安になってきた
|||orz

788(○口○*)さん :06/07/28 12:53
今 改良中のAIでは、選択Mobに対して
1 Mobがタゲっていたら選択解除
2 周囲のPC(non友達)のタゲがそのMobなら選択解除
3 Mobの周囲3セル以内に座っていないPC(non友達)がいたら選択解除(攻撃直前)
4 Mobの移動方向を8つに区切り、移動方向±30°(合計60°)の方向にPC(non友達)が居たら選択解除
という具合のを作ってる。
現行では1〜3を実装していて、4が開発中なのだが、
これだとトレインにある程度対応できるんじゃないかなぁと思っている。

789(○口○*)さん :06/07/28 12:56
>>786
モーションの判断が優先される、またはモーションのみで判断してるとき
のみですね

確かにGetVは変わらないや

トレイン判断について、
攻撃対象の位置を1秒か0.5秒ごとに監視して、プレイヤーへ向かっているMobはキャンセル…というのも企画中ですが

プレイヤー監視処理が最終的にどれくらい重くなるか分からない
トレイン判断の距離をどうするか

といった問題でずっと開発延期になっとります

790(○口○*)さん :06/07/28 12:59
>>788
その処理なら軽そうですね

791778 :06/07/28 13:02
どうもありがとうございます。
ケミがタゲっていると誤認した可能性が高そうですね。ということは
・ケミがタゲっている対象が視界から消えたら戦闘終了フラグを立てる
・ケミのタゲが変更されたらフラグを取り消す
・フラグが立っている時は>>778の 2. と 3. のみで判定し、1. は使わない
という方法で対処できそうですね。

792(○口○*)さん :06/07/28 13:08
AI開発者で座談会やったらログが技術的な意味で面白そうだと思った自作AI使用者(1/20)

793(○口○*)さん :06/07/28 13:17
仮にこのスレ住人でオフ会したら、
きっとオフ会というより会議に近い
雰囲気になりそうだ。

794779==Glenelgの人 :06/07/28 13:32
>>787
うちのコでも似たようなことは実施しています。
GetV(V_TARGET、MyOwner)で取れる「ケミが狙っている敵」が、ケミから遠く離れた位置にいたら捨てる、って感じ。
「ケミがスキル類で遠距離タゲ取り」の可能性があるのはわかっているんだけど、そこはあえて目をつぶってます。

>>788,789
やっぱり考えることは同じですねぇ・・・
うちも「敵の移動方向」を追加条件にしようかと多少は準備もしているのですが、
敵の移動が「常に対象に向かって接近」ではないので、手間と効果の割りがあわなそうなんで
躊躇しています。

795(○口○*)さん :06/07/28 13:59
トレインの判断は主人のほうで待機処理したり手動操作したりして調節するしかないでしょうね…
>>785の補足
攻撃中は、敵が死ぬか範囲外に行くまでは
ATTCK→AI()→終了→AI()→ATTCK→AI()→終了→AI()→ATTCK→AI()→終了→AI()→
となるので、攻撃処理の関数だけループにしちゃえばAI()を経由せず高速でアタック命令出せるかもしれない

敵が死ぬか姿を消す、手動操作が入る、または10秒以上の交戦で一度ループ出て一旦終了
などで対処できそうです
問題はATTCK命令出しすぎて回線弱い人がラグで落ちそうってあたりだけど
ASPDの時間制御で各自調整って感じでいけるのでしょうか

そろそろ名無しに戻ります

796788 :06/07/28 14:02
>>794
敵の移動が常に対象に向かっていないのはやっぱりネックなんだけど、
PCにトレイン加重度をつけて
一体トレインならGetV(V_TARGET)でなんとかなる
複数トレインならトレイン加重度が増大し、攻撃する可能性が減る
100*(1-1/トレイン加重)%の可能性で攻撃を中断、対象PCのタゲが居ない場合は中断はしない
ってすればいけるのでは?と思案中

797(○口○*)さん :06/07/28 14:28
逆に考えるんだ!
MOBからトレインを判断するのではなく
「このPCがいる場合はトレイン」と考えるんだ

そのPCが居るときは索敵範囲をせまくしたり、
ケミとそのPCの間の敵を先制攻撃しないようにしてた…


トレイン→   д<ちょwwwおまww    ←トレイン

ダメだった。

798(○口○*)さん :06/07/28 14:38
トレインしてるヤツラにそこまで気を使ったAI組む必要が無い デフォAIで横殴りしても文句を言われるのは筋違い

799(○口○*)さん :06/07/28 14:46
これはホムケミとしての倫理面でのプライドと誇りの問題

気を使う必要があるかないかではなく
相手を不快にさせる可能性を極力減らすのが重要

相手が迷惑だからこっちもやるとか、本体が弱いから仕方ないとか、
そういうのはあまりに醜い

800(○口○*)さん :06/07/28 14:59
でもノンアクとかルートを自分から叩きにいくAIじゃない限り
そうそう横殴りなんか起きないんだけどねぇ
同IDが横湧きした時に突撃しちゃうけど手動で制止できるし

801(○口○*)さん :06/07/28 15:08
じっくり確認しようかと思ったら、メンテか…_| ̄|○

さっきちょっとAIの周期を計ってみたんだけど、以前より遅くなってない?
以前のTraceAI.txtを残しておかなかったんで曖昧なんだけど、
前は120ms周期ぐらいだったのに、140msぐらいになってるんだ…。

環境によってかなり変わってくるものなのかもしれないけど、
以前周期を計ったことがある人、もう一度試してみませんか?
進化のもっさりの原因は、実は進化とか関係なくて、AI周期が遅くなっただけとか…。

802(○口○*)さん :06/07/28 15:09
ノンアク状態なら、婆園で快速電車限定でちょくちょく横殴りする程度だな
他の狩場で横殴りすることはほとんどない

803779==Glenelgの人 :06/07/28 15:14
友瀬も799氏と同意見。同時に798氏にも賛成。
うちが気にしているのは更なる+α:「トレインしている人」じゃなくて、「うちのAIを使ってる人」のため。
トレイン相手にうちのAI使用のホムが突っ込んで、その相手と揉め事になったら、悪いからね。

まあ、そこまで気を使うのならノンアクティブでもいいじゃん、とか、いうのも理解できる。
結局、倫理と利便性とのバランス、かな。

804(○口○*)さん :06/07/28 15:17
>>785,795がさっぱり理解できなかった。だれか解説頼む。

805779==Glenelgの人 :06/07/28 15:32
デフォルトAIでは、

ROクライアントがAI()を呼び出す
 →AI()中で状態により分岐:IDLE状態から、敵を発見しCHASE状態に。→ここで一度動作終了。
約100ms以上後、次にROクライアントがAI()を呼び出す
 →AI()中で状態により分岐:CHASE状態継続中→ここで一度動作終了。
 :しばらく移動継続
約100ms以上後、次にROクライアントがAI()を呼び出す
 →AI()中で状態により分岐:敵に接触、CHASEからATTACK状態に。→ここで一度動作終了。
約100ms以上後、次にROクライアントがAI()を呼び出す
 →AI()中で状態により分岐:ATTACK命令実施。ただしASPD周期との兼ね合いで、実際に攻撃するかどうかは不明。
 →ここで一度動作終了。
 :以下繰り返し

・・・という動きをしている。
ここでAI()の中身を書き換えて、以下のようにすれば多少は高速になるんじゃないか、という話。

CHASE状態から・・・
 :しばらく移動継続
約100ms以上後、次にROクライアントがAI()を呼び出す
 →AI()中で状態により分岐:敵に接触、CHASEからATTACK状態に。
 →ここで一度動作終了・・・させないで、即ATTACK実施、その後に終了。←*1
約100ms以上後、次にROクライアントがAI()を呼び出す
 →AI()中で状態により分岐:ATTACK命令実施。ただしASPD周期との兼ね合いで、実際に攻撃するかどうかは不明。
 →ここで一度動作終了・・・させないで、もう1回くらいATTACK命令を出す。←*2
 :

これによって。
*1部分でCHASE終了後、100msの待ちをせずに即攻撃命令をだせるのでは?
*2部分で、数ms〜数10msのオーダー分多く攻撃命令を出せるのでは?
・・・という話かと。

長文失礼。

806(○口○*)さん :06/07/28 15:44
>>805
合ってます
解説ありがとうございます

ただ二回目のほうは、終了させずに「攻撃終了のフラグが立つまで永遠に攻撃命令を出し続ける」という案です
この時の終了フラグは「手動操作、Mobが死ぬ、Mobが離れる、戦闘が10s以上続いている(スタックの可能性)」といったものをフラグにしたらいいのではと…

あくまで空論です
とりあえず22時から自由になるため22時から自分で組んでみます

807788 :06/07/28 16:31
798,799が言ってることもわかるし803の言うとおり、倫理と利便のバランスでもあるとは思うけど

一開発者としては、トレインに対して横殴りしないAI、敵に対して優先度などをつけ良い敵を倒していくAI
壁に引っかかりにくいAI、自動スキル使うAI、etc..etc....
といろんな機能を実用に耐えうるように実装していく、ってのが楽しいだけなんだよ
パズル感覚みたいにね

まぁ だからなんだ?といわれそうだけどね

808(○口○*)さん :06/07/28 16:36
トレードオフな部分も結構あるから組み合わせや比重の置き方もいろいろあるな
そこら辺が各開発者で色々違うから面白いんだろうけど

809(○口○*)さん :06/07/28 17:23
>>805
丁寧にありがとう。
あの図でキャッシュをチェイスのtypoと察したあたりは神。

けどどこかで見たと思ったら>>698

>>806
ホムAIはスレッドじゃなくてイベント駆動で、ループ回してる最中は
少なくとも「手動操作」ができないんじゃなかったっけ。

810(○口○*)さん :06/07/28 19:03
>>792
前々からちょっとやってみたいと思ってた。
ケミ祭りとかでも一部の人は会えそうだけどね。

811 ◆g37UcEp//g :06/07/28 19:36
>>805

実は既存AIは大体それを組み込んであるはず
このスレでその点を指摘されてくまーAIに搭載されたらしい

んで、具体的方法がコレ
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 ()
elseif (MyState == MOVE_CMD_ST) then
 OnMOVE_CMD_ST ()
elseif (MyState == STOP_CMD_ST) then
 OnSTOP_CMD_ST ()
もともとはelseifでつながってた上3つをif endに変えるだけ
コレでIDEL>CASE>ATTACKまで1回で通れる

812(○口○*)さん :06/07/28 20:00
*1の部分のほうね

そしてトリップ消し忘れたorz
2のほうに関しては効果がないとは言わないけど微妙といえば微妙
まずAI事態の周期は150msなんだけど実際AIの最初から最後まではほとんど時間かからない
どのくらいかっていうと
start649011171
end 649011171
start649011328
end 649011328
start649011468
end 649011468
start649011609
end 649011609
うちのデフォルト+横殴り防止の狩用AIの結果
見て分かるとおりAIが止まっている間の時間は150ms程度でも
AIが動いてる間の時間は1ms以下でGetTickの取得限界よりさらに早いほぼ一瞬
パケットがサーバーに届くまでに光やADSLで10ms〜30msの世界であることを考えると・・・
AIの最初に送ってからAIの最後に贈ってもほぼ同時としか見なせない

やっぱり誰かが言った様に無駄なループをまわしてAIの時間を引き延ばすしかなさそう
同期実行だから無駄なループが回っている間はクライアントが止まるけど

813(○口○*)さん :06/07/28 20:14
>>811のを試してみたら若干ASPDが上がった気がする

814(○口○*)さん :06/07/28 20:27
>>812
AIが早いのは確かだけど、GetTick()の中身がわからないのでそうとはいえない。
もしかするとGetTick()はAIが実行した時の時間を固定で持ってるだけなのかもしれない。
それをやるならos.time()とかでやるべきじゃないかな?

>>813
理論的にはASPDが上がるんじゃなくて追跡→攻撃あたりの機転が良くなるはずなんだけど

815Glenelgの人 :06/07/28 20:29
ID変わってますが。

>>811
つーか、旧AIを語るスレで「else節全部はずせば」って話題になったとき、
else節はずすのを「IDLE→CHASE→ATTACK」の部分だけにしたら?って提案したのは私・友瀬です(笑)

これだけだとアレなので。
>>806
AI()を終わらせないでループさせると、その間クライアントが固まりますよ。
やっぱり本質的には、分けてやらないとならないです。

816(○口○*)さん :06/07/28 20:32
>>815
それ以外のelseを外さない理由は何?
elseで繋げてた方が条件判定少なくなるから?

817(○口○*)さん :06/07/28 20:48
>>814
そこは確認してるよ
ちゃんと時間をかければ値が変わる
for i =1,1000000,1 do
 i=i+i-i+i-i
end
コレを組み込んで
start652672406
end 652672515
start652672562
end 652672671
start652672703
end 652672812
start652672843
end 652672953
あと、os.time()は1秒単位じゃない?

>>815
なんと・・・ご本人でしたかw

>>816
それ以降の処理は同時に存在し得ないからじゃないかな
その前の処理でどんなことが起こってもそれより後ろの処理はどれか一つしか起こらない
だから判定が少なくなるようにelseで結ぶ感じ

818(○口○*)さん :06/07/28 20:49
>>814
私のAIは追跡と攻撃のところに移動関連の動きが入ってたのでそのせいで進化後もっさりしてたのかもしれない

819(○口○*)さん :06/07/28 20:51
ループすると固まるのですか
|||orz

実験する前に不可能がわかって良かった・゚・(ノД`)・゚・

となると今出ている案の中で最も有効そうなのは故意にAIを固める方法ですね
うーむ、Aspd設定の処理応用して簡単にできそうだから、どうせなら他の方法考えていろいろエラー量産してみよう

820(○口○*)さん :06/07/28 20:53
ぶ、今スペルミスに気付いた
>CACHE
ってなんだ
頭の悪さを公表してしまってハズい
|||orz

他にもいろいろスペルミスしてそうだ

821Glenelgの人 :06/07/28 21:06
>>816
当時そう提案した理由は、本質的には、美しくないから。
そしてそういう「美しくない」ところは往々にしてバグの温床になるから・・・ってところですね。

大元となっている標準AIは、もともと「1回のAI()のサイクルで、1つの状態をこなす」という設計になっていました。
そのため、友瀬がAIをいじり始めた当時、標準AI内に暗にそれが前提になっている書き方が埋もれている可能性があるのでは?
・・・という心配事もありました。

まあ今となっては、別に全部else節をはずしても問題ないことはわかっているので、逆の意味の「美しさ」として
全部バラすっていうのもアリかもしれない。
でも817氏のご指摘通り、それの効果はあんまりなさそうですね。

というわけで、そろそろ名無しに戻ります(^^;

822(○口○*)さん :06/07/28 21:10
AI()が1msとかで回るならAI()の中身を100回くらい書けばいいじゃなーい
と思った俺はきっとだめなんだろう

823(○口○*)さん :06/07/28 21:16
>>814
デフォルトAIや現行のROクラから渡される変数ってなんだかテキトーなのが多いからありえるかもしれないですね
os.time()で正しい時刻とれるのなら、どきどきAIで使われてた古いほうの治癒の手助け処理でもちゃんとヒール制御できそう
高性能なAI増えてきてますけど、コードが複雑化してデータの流れ追いにくくなっているのが気になっていたので

自分だけで使うならともかく、他人がカスタマイズするかもしれないものだから出来るだけ単純でデータを追いやすい処理を使って見易くしたい

824(○口○*)さん :06/07/28 21:19
>>822
私もそういうタイプの人だw
そして実行してバグの嵐で悩んでのエンドレス、結構思いつきで追加したり書き換えたりしてる

ソースを出来るだけ単純化しようと書き換えるあたりで一番エラー出る ・゚・(ノД`)・゚・

825(○口○*)さん :06/07/28 21:43
削りすぎて閉じてないとかいうなーーーーーーーー

826(○口○*)さん :06/07/28 21:45
AI()を70msごとに呼び出せればいいのかな
Cでタイマー動かしてAI()を呼び出すってのは出来るんだろうか?
ちなみにCの知識がないので試すことも出来ません

827(○口○*)さん :06/07/28 21:47
AI()の呼び出しはROのクライアントが制御してるだろうから
こればっかりは弄れないんじゃない?

828(○口○*)さん :06/07/28 22:41
クライアント制御まで弄ったら黒ですからね…
そこは自重しないと

829(○口○*)さん :06/07/28 22:45
>>799さんへ
蒸し返すわけではないけど、それを小中学生にまで求めなくてはいけませんか?
運営側がだしているAIで文句を言われるようなことではないってことで
>>798さんは書いたと俺は思ってます
トレインは「なんらかの理由による溜め込み」に当たると思いますし
なによりデフォAIをユーザーが否定するのはおかしいですよ
全員が全員luaもしくはそこまでパソコンに詳しいと考えるのは間違い

誰でも(納金しているユーザー)ができる仕様でないのなら
運営側の問題
それに対して個人キャラに文句言うトレインな人がいたら
それはそれで問題は運営にあると思います

830(○口○*)さん :06/07/28 22:56
おもいっきり蒸し返してるな。だったらそんな枕詞を免罪符がわりにするのは卑怯だよ

831(○口○*)さん :06/07/28 22:57
マナー云々に対してはフランクなつもりだが、
「難しい判定をいかにスマートに、思い通りの機能をいかに実用的に実装するか」
というのがAI書きの醍醐味だと思っていて、
ノーマナー云々はその上でのただの課題の一つでしかないと思ってる俺です。


ぶっちゃけあんま気にすんな!
つーかここは>>829みたいなことを議論するスレじゃないしな。

832(○口○*)さん :06/07/28 22:59
猫線にゃー

833(○口○*)さん :06/07/28 23:39
ホム以前から散々トレイン職と言われていたケミにマナーを期待する人は少ない
開き直ってるのが多すぎる

834(○口○*)さん :06/07/29 00:06
とりあえずな・・・

マナー云々の話はどっか別の場所でやってくれないか?
ここはAIの雑談・要望のスレなわけで、マナーの話題するとこじゃねぇんだよ
むかついたやつも居るだろうけどスルーしておこうな。まぁ俺もだけどな・・・

これ以上はやめてAIスレに戻ろう(´・ω・`)

835(○口○*)さん :06/07/29 00:25
>>822
以前AIの中身を全部まわしたことがありますが、
5回くらいが限度でしたね。ステップ数にもよります。
限度というのは、ギリギリ操作できるくらいです。
自分でラグを作りつつ操作してるので、イライラします。
2回程度なら大丈夫だと思います。

あと、昔も書きましたが、ホムの移動が北から南へ行く場合早くなる(逆は遅い)
とかくらいですけどね・・・

やったらわかりますが、見る人によって違いはしますが、あんまり違わないんじゃない?ってくらいの差だと思いますよ

836(○口○*)さん :06/07/29 00:35
なんかスレが進んでいる!

・・・(゚д゚)

そんなスレに新鮮なネタ投下

くまーの人が、設定ファイルの切替ツールって言うのを公開してる。
どうやら、AIを変更するのにも使えそうだ。

837(○口○*)さん :06/07/29 02:14
くまーの設定の切り替えツールは恐ろしく昔から出来てた気がするけども。
もっと簡素化されたんかな

838(○口○*)さん :06/07/29 02:48
>>837
設定エディタのことじゃないと思うよ。

839(○口○*)さん :06/07/29 07:17
別AI使いなので実物を使ったわけじゃないけど、解説を見る限り「iniファイルを複数もって、切り替えられる」ような感じ。

例えば「GDではこう動きたい」「婆園ではこう動きたい」っていうのを別々のiniに記録して、
場所によって切り替える、とか・・・

例えば「STR-AGIケミのバニル」と「INT-DEXケミのバニル」で動きを変えたいから、
それぞれ用にiniを作るとか・・・

そういう感じに使うものじゃないかと。

840(○口○*)さん :06/07/29 10:33
520のを聞いてみたくもごもごしててひさびさにきたらスレ伸びてる(゚д゚)
わかんないなりに追加してみたけどエラー・・・そして放置orz
あのソースだけで追加できる人はすごい・・・それとも利用者が少ないだけ!?

そしてくま○〜の人の切り替えツールに ] λ...
ホム3種いるといろいろ切り替えて使ってみたいじゃない(ノ∀T

AIを複数使ってる人のAIフォルダってどうなってるんだろう・・・?
工体切り替えツール+MAPツール+各種AIとか
でもくま○〜の人の切り替えツールだとMAPツールすら必要なくなる・・・かも。
汎用+稼ぐ狩場用+息抜き狩場用とか設定したりすればいいわけだし。

・・・複数使ってる人なんて都市伝説とか言わないで。
ケミはみるけどまわりにケミ使いがいない○○の夏。

841(○口○*)さん :06/07/29 11:57
USER_AIdef、USER_AIkari、USER_AIgv、USER_AIhouti
AIフォルダのリンクから入ってF2でリネーム呼び直し

842 ◆g37UcEp//g :06/07/29 13:09
以前ご指摘に上がっていた「ムーンライト使うと近づいてしまう」について調査結果の報告

対人のとき「SKILL_OBJECT_CMDが飛んでこない」
対人戦時のSCからのスキルはそもそもAIに情報が送られてきません。
全部鯖もしくはクライアントで操作されているようなのでどうにもなりませんね

あと、対人で殴られると無条件に1回反撃します
バニルミのカプリスも同様でこちらは通常魔法射程の9セル以上外から撃つと9セルまで移動します

ということで、動いてもいいとき以外は手動スキルに関しては基本使用しない方向でお願いします
AIで検知できない上に勝手に動かれるのでどうにも判定すら出来ません・・・

詠唱妨害のほうはちゃんと遠距離(射程1画面分)で動作しますのでご心配なく

843(○口○*)さん :06/07/29 13:56
ということは、普段使用しないカプリス2Lvとかで
特殊な(カプリスと関係のない)動作を行うことはできなくなったってこと?

844 ◆g37UcEp//g :06/07/29 14:21
>>843
そうですね
プラントやMob相手に撃てばいいのですが人やホムに撃った場合は取れなさそうです

845(○口○*)さん :06/07/29 15:29
明日から使ってみようと思ったのですが、
AIで検知できない関連で、ADSに反応して相手にカプリスは平気なのでしょうか?

846(○口○*)さん :06/07/29 15:55
>>845
>>842をもう一度じっくり読めばわからないか。

ケミが歩いていったりしてしまう問題のことならば、
手動でスキル攻撃させようとするとそうなるというだけで
自動でやらせる場合は問題ないと言っている。

847(○口○*)さん :06/07/29 17:17
AIの周期を変更する簡単なコード組んでみたのですが、みな自分で実装してそうだけど需要ありますか?

変数の初期数値の変更で約4ms単位で調整可能です。
一応動作確認はバニルでしてみて特に問題なし、周期の調整で微妙にAspd早くなりました。

848(○口○*)さん :06/07/29 17:31
>〜だけど需要あるかな
最近こういうの多いな。自分の判断ですればいいことをいちいち尋ねる輩。
公開したいならすればいいのに。

849847 :06/07/29 17:50
じゃURL貼り付けていきます
ttp://www.mmobbs.com/uploader/files/691.zip

効果が本当に微妙な上に、進化後ホムもってる知り合いがPC壊れてて居ないため進化後への効果は不明
求む人柱

850(○口○*)さん :06/07/29 17:53
気持ちはわかる。
良かれと思って公開しても、なんの反応もなかったりすることは結構多い。
昔からある「フリーソフト作者のモチベーション」の話で、
人間やっぱり応援がある・使われるかどうかでやる気は変わるからね。

で、申し訳ないが、この件については当方にはあまり需要なし。
通信系で理由無く自分の側の処理を重くするのはあまり気が進まないので。
うまくシンクロして理想速度に自動調整できればいいんだけど(^^;;

851847 :06/07/29 17:56
ぬあ、アップしてから確認して気付いた
中身の説明文、
「0〜10(0ms〜約430ms)の間で調整してください。」

「0〜100(0ms〜約430ms)の間で調整してください。」

「100以上の数値が設定されると強制的に50として処理します。」

「100以上の数値が設定されると強制的に100として処理します。」

「-- AI_IDLEが100より大きい、またはnilなら15に強制設定」

「-- AI_IDLEが100より大きい、またはnilなら100に強制設定」
です

コード変えながらコメント書いてたから昨日や今朝の古いのとごっちゃになってる
|||orz

コード自体は正常です

852(○口○*)さん :06/07/29 18:00
需要は、どうしてももっさりが気になる人が気休めでって感じですね
需要が低いのが分かってるために躊躇して聞いてしまっていました

853(○口○*)さん :06/07/29 18:20
結局、進化ホムのもっさり原因は、
ASPDが変わったからなのか、AI周期が遅くなったからなのか
どっちなんだろう?

ASPDとAI周期の話は結構前にも出てて、
くまーAIには攻撃ディレイを調整できるようになっている。
その時の作者のコメント。

> 攻撃のディレイについては、
> 速くお感じになったのであれば、おそらく速くなったのでしょう(笑)
>
> 最適な値は設定したディレイと攻撃速度のタイミングによるため、
> ディレイの設定は難しいと思います。
> たとえば、ディレイを166msとして、攻撃間隔が167msだった場合、
> 設定したディレイが攻撃間隔よりも短いため、
> AIで攻撃コマンドを送った時にまだ攻撃できない状態になり、
> 結果、次の攻撃コマンド(332ms後)まで攻撃が行われなくなってしまいます。
> ディレイを0にしてもASPDとAIのループタイミングによっては、可能な攻撃速度の半分になってしまう可能性があります。
> 実際の攻撃間隔よりやや長めにディレイを設定するのがコツです。

試したいけど、新密度まだ普通なんだよなぁ・・・

854(○口○*)さん :06/07/29 18:23
くまーさんのとこの設定切り替えの奴を、
設定だけじゃなくて、AIごと切り替える場合って、
AI.lua自体で設定するのと、config.luaで設定する奴を混在して切り替えるのはちょっと無理?というかめんどい?

855(○口○*)さん :06/07/29 18:44
config.luaを設定ごとにフォルダにわけといて、コピペで切り替えてる
簡単でおすすめだぞ

856(○口○*)さん :06/07/29 20:09
> 854
1ファイルしか指定できないから無理。
こっこAI切り替えるのには、つかえるぞ。

857(○口○*)さん :06/07/29 20:24
>>847

GetTick()でもっと任意のミリ秒を調整できると思います。

グローバル変数
WAIT = 10 -- ミリ秒待つ
mswait = GetTick() + WAIT

とかして、GetTick()がmswaitを超えるまで無限ループとかどうですか?

858847 :06/07/29 21:24
>>857
>>812,814 からGetTick()は効果が無い可能性があります
最初はos.time()を使用しようとも思いましたがAIが一回まわるよりはるかに短い空ループで何回も時刻を取ることになるので
PCへの負荷が非常に高くなるのではないかと考えてその方法を候補から外しました

一回のループ回数を500回と設定した時に私の環境でPC自体がフリーズしてしまったので、500が極端だったというのもありますが
負荷が高そうな処理は今は考えていません

859(○口○*)さん :06/07/29 21:55
ASPDついて考えてみたが、ホムの最高ASPDって186なんじゃないか?
AIが140msごとにまわってるけど、毎回ATACKは送れない。
最大で二回に一回送ることになる。
そうすると秒間3,57回。これはASPD186だな。
トリとかだとレベル90あたりでASPD186に達するからこっからは速くならないんじゃないかと思った。

860(○口○*)さん :06/07/29 22:04
>>858
>>817の記事も忘れないであげて
GetTick()はミリ秒単位で返し、AI実行中にも変化がある(おそらくWinAPIのTimeGetTimeが毎回呼ばれる)
os.timeは秒単位で現在時刻をあらわすシリアル値を返す

861(○口○*)さん :06/07/29 22:06
自分のところの環境でGetTick()だけをTraceAI.txtに書き出すAIを回してみたところ、
140msまたは141ms周期が6回続いた後に156msが1回、というのがセットになって、
延々と続いてました(たまに6回が5回だったり、156msが230msだったりしましたが)

別の環境でやってみても、この結果はほぼ同じだったので、
周期を140msと決め込んで組んでしまうと、微妙にズレる場合がありそう。

毎回GetTick()取って周期を計りつつ、847の遅延を使って上手く調整できないかなぁ…。
これからやってみるつもりです。

ところで、ホムのASPDから秒間何回攻撃できるか(何ms周期か)を求めるには、
どうすればいいのでしょうか;;

862847 :06/07/29 22:21
>>861
Aspdなら分単位の計算式が情報サイトにあります
式は 60/{(200-ASPD)*0.02} ですね
エクセル使えば楽に数値出ると思います

ホムのAspd計算値が特殊だったら・・・これは使えないですが

>(たまに6回が5回だったり、156msが230msだったりしましたが)
AIの周期や処理速度にバラツキあって、単純計算で最適値を設定するのはきついですよね
文系の私では計算力の限界が低いので細かい調整はきついです
・゚・(ノД`)・゚・

817の記事は気付かなかった
|||orz
シリアル値だと計算処理用にデータを分けるのが面倒そうだ

863(○口○*)さん :06/07/29 22:29
>>862の式の結果を60で割れば秒間攻撃回数が出ると思います
1000ms=1秒 なので ms周期での攻撃回数を計るならさらに1000で割る必要もあるかもしれない

864(○口○*)さん :06/07/29 22:50
>>862,863
ありがとうー!
どちらかというと何ms周期で攻撃するかが知りたかったので、
(200-ASPD)*0.02
でいいのかな? これからいろいろ試してみます。

865(○口○*)さん :06/07/29 22:50
>>861
http://72.14.235.104/search?q=cache:IpMd984b2OMJ:nara.cool.ne.jp/nightmare_np/aspdj.htm+aspd+%E7%A7%92%E9%96%93&hl=ja&ct=clnk&cd=2&lr=lang_ja

866(○口○*)さん :06/07/29 23:32
それは PC の場合であって、ホムの攻撃速度はそれよりも明らかに速い。
Aspd 150 のホムと 170 の PC の攻撃速度がほぼ同じぐらい。
確か、そのあたりの少し詳しい話をアルケミスレかどこかで見たような気がする。

867(○口○*)さん :06/07/29 23:37
表示がおかしいだけであって内部的にはPCのものと同様なASPDを持ってるんじゃないかな?

868(○口○*)さん :06/07/30 00:13
>>836-839

iniを「西兄貴用」とか「婆園用」とか複数用意して切り替える機能は昔からあったよ
まぁini読み込みで読み込むという方法ではあったが

869(*○□○)さん :06/07/30 00:27
>>864
>>862は分単位だから(200-ASPD)*20 [ms]

自分もどこかのホムorケミ系スレでホムステータス入力で実際のAspdを
計算してくれる海外サイトのURLを見た気がするんだが見つからなかったorz
Lv20程度の幼女のステで170辺りが出たのだけは覚えているんだが・・・・・

870(○口○*)さん :06/07/30 00:30
http://ww4.enjoy.ne.jp/~to4/hom/hom.html

ここでも出てると思うけど。
ASPDの数値が 表示(実値) で表されてる。

871(○口○*)さん :06/07/30 01:07
>>870
その計算機では、全てのホムの実 Aspd について、
基本 Aspd 165 として PC と同じ算出方法を使っているようだけど、
これは検証された値なの?

872(○口○*)さん :06/07/30 06:14
工体AIを使ってるのですがPTメンバをタゲってる敵を攻撃させるには
どうすればいいのでしょうか?
PTメンバ機能をtrueにしても攻撃してくれないのですが・・
新しく機能を追加しないとだめですかね?

873(○口○*)さん :06/07/30 06:56
>>872
友達登録していますか?
友達登録してないと、その相手が「味方か」「第三者か」がわからないので、
横殴り防止が動作して共闘できないです。

操作方法は・・・工体AIでは「その味方をALT+右クリック」だと思います。

874(○口○*)さん :06/07/30 18:58
GvAIですが、最新版だとどうもエラーが出るみたいです
AI.luaの62行目、SELECT_RAMNGE_IDをSELECT_RANGE_IDに変更すれば大丈夫と思います

875(○口○*)さん :06/07/30 19:22
急ぎ修正したものをUPしました
http://alchemist.s214.xrea.com/index.php?plugin=attach&pcmd=open&file=GvAI.zip&refer=%A5%DB%A5%E0%A5%F3%A5%AF%A5%EB%A5%B9%2FLua%2FAI
該当箇所の処理をメインではなく友達登録の部分に移してあります

876861 :06/07/30 21:17
ASPDの件、いろいろありがとうございました。
最終的にホムのレベル、HIT、FLEEからAGIとDEXを求めて、

  -- ASPD取得
  local dex = HOMU_HIT - HOMU_LV
  local agi = HOMU_FLEE - HOMU_LV
  local aspd = 200 - ((250 - (agi + math.floor(dex / 4))) / 250 * (200 - BASE_ASPD))
  aspd = math.floor(aspd * 10 + 0.5) / 10  -- 四捨五入
  AtkCycle = (200 - aspd) * 0.02 * 1000    -- 攻撃周期(ms)

でホムの攻撃周期を出すことにしました、BASE_ASPDはとりあえず165にしています。
自分のバニルはLv32、HIT76、FLEE77なので、この計算式だと攻撃周期は543msになります。

そこで、最初にAttackを出した直後のGetTick()を保存しておき、
次のAttackを出すタイミングの時に、

if (AtkCycle - (GetTick() - AtkGetTick) < 141) then
  while (GetTick() < AtkGetTick + AtkCycle) do end
  Attack(MyID,MyEnemy)
  AtkGetTick = GetTick()
end

こんな感じで前回Attackを出してからどの経過してるかチェックして、
もし、残り時間が141msだったら、強引にループで待たせて出すようにしてみました。

結果は………ダメでしたorz
それまで安定していたAIの周期が、
Attack出すといきなり460msになったりするんです。
もうちょっと頑張ってみます(`・ω・´)

877861 :06/07/30 22:29
念のためXPとSEの環境でチェックしてみました。

まず自分のAIのOnATTACK_ST()等に問題があるかもしれないので、
Attack()命令のみをコメントにして攻撃させてみたところ、
XPもSEも140ms/141ms/156msのいずれかの周期で動いていました。
Attack()命令を出していないので、当然攻撃もしませんし、攻撃モーションもありません。

次にいろんなAIに組まれている攻撃ディレイ(単にスキップさせる)を1秒にして、
完全に攻撃モーションが終わるまで、次の攻撃を出さないような感じにしてみたところ、
XPもSEもAttack()命令を出した次の次の周期が350ms〜550msになってしまうようです。
(たまに命令を出した次の周期が延びることもありました)

次にAIが回ってくる度にAttack()命令を出す(攻撃ディレイ0)でやってみたところ、
XPもSEも140ms/141ms/156msの他に165ms/188ms/200msといった周期がぽつぽつ入る感じでしたが、
ディレイ1秒の時のような長い周期になることはありませんでした。
ホムの見た目は、攻撃モーションが最後まで表示されずにプルプルしてる感じです。

攻撃モーションの表示がある程度のところまで進むと周期がどーんと延びる…のかな、いやそんなことってあるのかな;;
どーんと延びるまえにAttack()命令を出すと、見た目のモーションがキャンセルされるから延びないとか…。

とりあえずどーんと延びた時の周期が550msとかあるので、ホムのASPDより遅いことになります。
自分で納得がいくまでやってみます。

878(○口○*)さん :06/07/30 23:01
>>877
>攻撃モーションの表示がある程度のところまで進むと周期がどーんと延びる…のかな、いやそんなことってあるのかな;;

これ、あながちありえるかもしれない。
つまり普段は知らずのうちに以前あったPCスキルのモーションキャンセルみたいなことをやってて
ASPDが早かったのかもしれないよ。PC側のは塞がれたけど、ホムはMob扱いだから
塞がれてなくてこうなってるのかも。

879(○口○*)さん :06/07/31 01:07
今回GvAIでGvGに参加したところ、
攻めも防衛も人数が多く、多少重さを感じました
止められないくらい早い詠唱にも反応しているのも無駄かな?
やはり特定の職だけ詠唱妨害とか、特定のキャラだけ(ギルマスなど)
を妨害するような機能が欲しいと思いました。
以前一回こんな感じの話題が出てたと思いますが、風化しちゃったのかな・・・

880861 :06/07/31 02:10
ホムASPDについての個人的まとめ。
ちなみに自分のバニルの実ASPD(>>870のサイトの値)は172.8(543ms周期)

攻撃ディレイ1秒でモーションを完全に表示させた場合、間延びする周期が短い時と長い時があり、
いろいろ試していたら、体当たりモーションの時は長く、触手?モーションの時が短いことが分かりました。
ただ、触手モーション終了直後はまだ543ms経過していないので、Attack()命令が無視されてしまいます。
モーション重視かつ出来るだけ速く攻撃するには、自分の場合は攻撃ディレイを560msにすることで上手くいきました。
見た目は非常にいいんですが、やはり遅いような気がします…。

次にモーションキャンセル出来る可能性があるということで、
Attack()命令を出した直後に強制的にループさせて時間を稼ぎ、その後もう一度Attack()命令を出してから抜けるようにしてみました。
ループの時間を調整しつつ、Attack()命令の回数などもいじってみたところ、
自分の環境では、47msループさせてからAttack()命令を2回出すと、上手くキャンセル出来るようでした。
ただ、毎回このループが入ると動きがカクカクになってしまいましたので、
これに560msの攻撃ディレイも同時に入れて、どうせ無視されると分かっているタイミングではAttack()を出さないようにしてみたところ、
なんだかキタ━(゚∀゚)━!!   …ような気がしました。

ここでAttack()命令を出している周期をもう一度確認してみたところ、
たまーに間延びすることはあるものの、ほぼ564ms〜565msで安定していました。
これがホムの実攻撃周期だとして逆算で基本ASPDを求めると約163.7です、微妙だけれども…。
ホムの種類やステで、数値は変更しないといけないかもしれません。

881861 :06/07/31 02:10
ちなみにソースです。

-- グローバル変数追加分
Delay = 0

-- Attack(MyID,MyEnemy)と置き換える部分
  if (Delay < GetTick()) then          -- 攻撃ディレイを過ぎていたら
    Delay = GetTick() + 562            -- 攻撃ディレイ562msセット
    Attack(MyID,MyEnemy)               -- 攻撃の為のAttack命令
    local tick = GetTick() + 47        -- 47ms強制ループ
    while (GetTick() < tick) do end
    Attack(MyID,MyEnemy)               -- モーションキャンセルの為のAttack命令
    Attack(MyID,MyEnemy)               -- 〃
  end

攻撃ディレイの562msは、基本ASPDを163.8として>>876の式で算出した攻撃周期を使います。
ループの47msは…今のところ最適地は謎です。
また明日、いろいろ試してみようと思います、おやしみなさい。

882(○口○*)さん :06/07/31 09:31
乙です
やっぱモーションキャンセルなのかな?

883(○口○*)さん :06/07/31 10:07
モーションキャンセルといえば進化前もだけど
敵とピッタリ隣接してる時と敵と1マス空けた状態とじゃ体感ASPDが違った気がするんだよねぇ
もしかしたら1マス空いてると途中で敵が攻撃範囲外になることがあって攻撃に支障でてるのかも
実際に測ってない体感の話だから全然関係ないかもしれないけどね

884747 :06/07/31 11:49
今の基本的なAIって、
AI関数呼び出し1回に対し、Attack関数のコール1〜n回呼び出して抜けてる。
で、AI関数が呼び出される間隔が約150msだから鳥などの高ASPDには辛いところ。

それならいっその事、敵を攻撃したらその敵を倒すまでえんえんとAttack関数を
呼び続けるというのはどうだろうか?
敵を倒すまでコマンドも何も受け付けなくなる
バーサーカー状態になってしまう問題もあるが…(;´д`)

※今までの処理
AI()呼出 → Attack()呼出 → AI()抜ける → 150ms → AI()呼出 → Attack()呼出…

※バーサーカーモード
AI()呼出 → 『敵が消失するまで』Attack()呼出 → AI()抜ける → 150ms → AI()呼出…

こうすれば150ms周期を気にしないですむ…はず。
まだ確認してないんで上手く動作するかも保証できない。
あと確認する為には高いASPDのバニルかフィリルが必要というネックもorz

885(○口○*)さん :06/07/31 11:57
>>884
少し前にもかかれたけど、AI()を抜けないとROクライアントが固まります。
敵を倒すまでケミの操作が一切できなくていいならできるかもしれませんが、現実的ではないかと。

886884 :06/07/31 12:01
名前消し忘れてるよ… orz
書いておいてなんだが、上のバーサーカーモードの

『敵が消失するまで』Attack()呼出

のループ内にGetMsg()関数を仕込んでからメッセージ取れば一応動けるかな?
…で、書いててまた疑問が。

 『AI()関数って抜ける必要があるのだろうか?』

AI()関数が呼ばれてからすぐに無限ループに入って、そこでGetMsg()関数
で取っていけば問題なく動きそうな気が…
必要なホムのIDはAI()関数呼ばれた時に格納しておけばいい話だし。

とりあえず帰ったら実験してみる。

887(○口○*)さん :06/07/31 12:05
そして>>885で回答が orz
自分のドジっぷりが見事に露呈(*ノノ)
もっぺん過去ログ見直してきます。

888(○口○*)さん :06/07/31 12:06
くりかえすが、AI()を抜けないとROクライアントそのものが固まる。
激ラグのときに何も動かなくなる状態あるよね?あれと同じ。

889(*○口○)さん :06/07/31 12:57
クライアント処理(描画等)→AI処理→クラ→AI→
の繰り返しでホムは動いてる
AI処理に時間をかけた分だけ、画面上ではラグが発生している時と同じ状態になる
鯖は各クライアントからのパケットにレスポンスを返し
クライアントは鯖からの返信パケット&PC操作に応じた処理を行う
AI処理中でもパケットの送受信は鯖と同期させる為に適宜行っているみたいで
長ループ回している間に鳴らされたスキル音もAI処理後のクラ処理で纏めて鳴る

AI周期30回(*150ms=4.5s)間隔1セットでMapReader.luaから各MAPの読み込み時間
local time = GetTick ()
local q
for i = MAP.y, 1, -1 do
  for j = 1, MAP.x, 1 do
    q = MAP.Read (j-1, i-1)
  end
end
return GetTick() - time

の計算でそれぞれ500〜2000[ms]程度掛かってたけど鯖キャンはなかった

890(○口○*)さん :06/07/31 13:37
>>886
以前似た案を提案していた物ですが、その時自分のホムで実際にやった時の結果


クラそのものが固まってAI上で受け付ける、受け付けない以前の問題でした
下手するとPCそのものがROクラの応答待ちで固まります
|||orz


数回攻撃命令を出したらループを抜けるようにしても見た目は変わらなかったので、
もしかすると過去ログにあった様に通信速度の問題で短時間に複数命令を送っても一回としか認識せずに、
ただの無駄な重い処理になる可能性もあります

「敵が倒れるまで」攻撃命令だけを繰り出すのは、現状の仕様では無理っぽいです

891(○口○*)さん :06/07/31 15:09
ASPDだけじゃなく、進化してから追従も遅れるのは気のせいかな?
バニルでくまAIなんだけど
速度増加状態(再コール済)だと顕著。進化前はこんなことなかったと思う。

892(○口○*)さん :06/07/31 15:39
これはAI云々より、進化ホムのアニメーション枚数が増えて影響を与えてるって線が濃厚かも

893(○口○*)さん :06/07/31 15:50
それもあるけど、実際にAIを変えたら早くなったっていう意見もあるから
AIが関与してる部分も無いわけじゃないと思う。

894(○口○*)さん :06/07/31 17:04
モーションディレイとAI周期の問題っぽいな

進化ホム持ってる開発者が一番解決に近い存在なんだけど・・・
開発者はほとんどがAIに構っててホムにあまり構えてないという

895(○口○*)さん :06/07/31 17:10
進化で遅くなったって言ってる人のAIが大抵工体かくまなのも何か怪しいと思う。
でもざっと見る限り何かおかしいところも見当たらないんだよなあ。何だろう。

896(○口○*)さん :06/07/31 17:20
進化前と進化後のクライアント上での差がよくわからないから想像で語るしかないのがもどかしい

一ヶ月くらい前の話なんだけど、工体とくま〜はGet系の呼び出しやif判定の回数が多めな印象受けたんだけど、これは関係あるのだろうか

あとは進化して見た目が大きくなったことで自セルの処理や判断部分に変化があるとか
Aspd以外でぱっと思いつく原因はこれくらいだなぁ

897(○口○*)さん :06/07/31 17:22
早くなったって人と遅くなったって人の使ってるAIの詳細が分かれば、
差から何か分かりそうなものだけど

898(○口○*)さん :06/07/31 18:41
>>896
どんなサイズでも所有セルは1セルで変わり無いはずだから
その辺の判定で問題が出ることはないと思う。

すごく可能性がありそうなのが>>877の最後から4行のとこじゃないかなと思う…。

899(○口○*)さん :06/07/31 19:58
進化が不可逆変化なので、開発側でも進化前後の比較チェックが難しいのが難点かな。
個人的には、モーションキャンセルの可否点が、進化前と進化後でちがうってのが可能性なのかも、と思ってる。

というのは・・・もしASPDが進化前後で同じ・もしくは短くなっていたとしたら、
今までの「AI()の呼ばれる周期」と「実際のASPDでの攻撃1サイクル時間」との差だけでは
どうやっても説明がつかないので。

900(○口○*)さん :06/07/31 20:05
自作AI使用者で、後少しで進化しそうな原種バニル持ちなんだが
何かやっておいたほうがいいってことあるかな?
あんまり難しいことは出来ないが・・・

901(○口○*)さん :06/07/31 20:21
個人的に考えた理屈(アニメ数適当ね)

進化前アニメ
[1][2][3][4]
進化後アニメ
[1][2][3][4][5][6]

[4]以降がキャンセル不可アニメだとして
ピクピク動いて攻撃してる状態が[1]-[3]で攻撃処理が行われている状態で
進化した場合受付不可アニメが多くなった為進化前で[1]-[3]のタイミングに入ってた攻撃が
[4]-[6]に引っかかってしまっているんじゃないかという理屈
まぁ上で書かれてる理論と全然変わらないけどAIとは違う方向から考えてみた

902(○口○*)さん :06/07/31 20:53
>>900
実Aspdどれくらいか計っておけばいいんじゃね
草の殲滅時間とか、ダメージの表示間隔のSSとかでいいのかな?
ホムaspdを正確に計る方法とかあったろうか

903(○口○*)さん :06/07/31 21:07
>>902
ホムの実ASPDを草の殲滅時間やダメ表示間隔で計るには、
ホムに実ASPDで攻撃させる必要があるのですが…、
今はそれが出来なかったりするわけです(つд`)

904(○口○*)さん :06/07/31 21:11
902の言いたいことは、今までの報告が「遅くなった気がする」ばっかしだから
進化前の実際のASPDと進化後のASPDを記録しとけば?って事だと思う

905(○口○*)さん :06/07/31 21:15
>>903
実ASPDである必要は無いんじゃね?
おなじAIで未進化と進化後の差が計測出来ればそれが進化によるものだと証明出来る
体感じゃ意味無いからね

906(○口○*)さん :06/07/31 21:27
実aspdというのはよくわかんないので
とりあえずステ表示させながら普段通り攻撃している所のSSをいくらか撮っておきます

今見てみたら、ケミ本体のaspdがホムの計算上のaspdとほとんど同じみたいなので
それも入れるとわかりやすいかも?

907(○口○*)さん :06/08/01 08:13
SS よりも、誰か協力者が得られれれば
PvP あたりで分間攻撃回数でも測定した方が分かりやすいような気がする。

908(○口○*)さん :06/08/01 10:24
進化前と進化後の攻撃をムービーで撮っとけばいいんでない?

909(○口○*)さん :06/08/01 10:45
ムービーを撮るのはちょっと出来ないので
ケミでヒールしながら1分間キノコを殴らせて攻撃回数を測定してみますね
攻撃開始から1分たったらやめるようにAIに入れれば回数を測りやすいかな
メンテが終わったら10セットぐらいやってみます

910(○口○*)さん :06/08/01 20:58
今回最適化しようとしてる攻撃速度はミリ秒〜数十ミリ秒単位の制御なわけだけど
そうなるとネットワーク遅延が怖いよね

その時々によって大きいときは50ミリ秒程度は誤差が出るし
次のを100ミリ秒後に送ったからといって受信側が次のを100ミリ秒後に受け取るとは限らない・・・

911(○口○*)さん :06/08/01 21:01
CTRLクリックみたいな挙動できんだろうしな
結局AIの軽量化くらいしか、有効な策はないんではなかろうか?

912(○口○*)さん :06/08/01 21:12
キーボードマクロでエサってやれないのかな?

913(○口○*)さん :06/08/01 21:15
それはBOTへの第一歩。

914(○口○*)さん :06/08/01 21:55
いっその事メイドロボを買うのはどうだ
キーボードが動いても可愛くもなんともないぞ

915(○口○*)さん :06/08/01 21:59
>>909
期待してるよ

916(○口○*)さん :06/08/01 22:03
>>912
キーボードマクロ系ツールはことごとくBOTツールと見なされるらしいので…
WSHすら弾かれるのには戦慄した。

917(○口○*)さん :06/08/01 22:05
ふーむ・・・KMacroっていうマクロなんだけど、
キーボードの入力は完璧だけどマウスのクリックがROの特殊な画面に対応しきれてないみたいだ。

あきらめてえさやるか・・・

918861 :06/08/02 10:11
ASPD最適化、途中経過。

攻撃モーションを表示させてしまうとAI周期がどーんと長くなってしまう為、
Attack命令の直後にもう一度Attackを出すことでモーションがキャンセルされ、
AI周期がどーんと延びることがなくなるっぽいことは分かりましたが、
そのタイミングが…難しいです。
検証したホムは進化前梅ゼリーなんですが、攻撃モーションが2種類あり、
それぞれキャンセルできるタイミングが違うようなのです。
つまり攻撃の為のAttackの後に、短いモーションのキャンセル用Attackと、
長いモーションのキャンセル用Attackの2つを出す必要がありそうです。
また、環境によってキャンセルできるタイミングが違うっぽいです。
さらに、進化前ナメクジもいるので試してみましたが、
環境は同じなのに、梅ゼリーのタイミングでは上手くキャンセル出来ませんでした。
というか、ナメクジの攻撃間隔がすごく…バラバラです…なにこれ(´Д`;)
ホムによっても違いがありそうです…orz

開き直って、自分の梅ゼリーさえ速くなればいいや、という気持ちで、
梅ゼリーで検証を進めました。

モーションキャンセルに成功すると、その後のAI周期は140ms付近で安定するっぽいですが、
これだと140msの倍数付近のASPDしか最適化出来ません。
攻撃周期が280msぐらいのホムなら高速に攻撃出来ますが、
340msぐらいのホムだと次のAIまで待たされることになり、420msになってしまいます。

そこで>>847の周期変更を利用して、AIの中で200ms経過するまでループさせてみたところ、
ループが終わってAIの処理を抜けると、すぐに次のAIの処理が入りました。
意図的にAIの周期を200msに出来るので、340msのホムも200ms+140msで対応することが出来るのではないかとー。

問題は…100msループさせただけでも結構カクカクになることと、
ループ後のAIが入るタイミングが遅れることがあること(モーションキャンセルが成功していないとダメっぽい)。

進化後のホムが遅くなるというのは、
>>899,901のように、モーションキャンセル出来るタイミングが進化前と全然違っていて、
140ms周期だとなかなか出づらいタイミングなのかもしれません。

梅ゼリーの為にまだまだ頑張ります。

919(○口○*)さん :06/08/02 13:00
>>918
すみません、初心者っぽい質問かもしれませんが...

基本ASPD165計算での実ASPD186.0(280ms周期?)進化後バニル持ちです
この場合はループ処理を行ってAI周期調節をしなくても
モーションキャンセルさえ出来ていれば高速に攻撃できるのでしょうか?
面白そうなのでやってみたいなぁ、っと前々から見ていたのですが、AIに詳しくなくてorz

AIの周期を自分の目で見えるようにはどのようにすればいいのでしょう?
もしキャンセル成功して140msで安定すれば、私のバニルは最適な速度になるのかな...

920919 :06/08/02 13:10
ループ処理とAI周期の逆でしたね...
AI周期を調節せずにループ処理を調節してキャンセル成功すれば、かな?

921861 :06/08/02 13:29
>>919
環境によってキャンセル出来るタイミングが違うようなので、
上手くいくかどうかわかりませんが…。
今使っているAIに攻撃スピードの設定などがありましたら「0ms」にした上で、
OnATTACK_ST内にある「Attack(MyID,MyEnemy)」を、

  if (Delay <= GetTick()) then
    Attack(MyID,MyEnemy)
    Delay = GetTick() + 280
    local tick1 = GetTick() + 20
    local tick2 = GetTick() + 52
    while (GetTick() < tick1) do end
    Attack(MyID,MyEnemy)
    while (GetTick() < tick2) do end
    Attack(MyID,MyEnemy)
  end

に置き換えて、あとは「function OnATTACK_ST ()」の上あたりに、

Delay = 0

を追加してください。

キャンセルのタイミングを変更するには「+ 20」「+ 52」の値を変更してください。
どう見ても秒間3発ぐらいしか出ていないようでしたら、
「+ 280」の値を少しずつ増やしてみてください。

922(○口○*)さん :06/08/02 14:22
元々攻撃スピードの設定みたいな物は無かったのでそのまま追加しました

いろいろタイミング変えてみて少し早くなったような気がしたのですが、
いくら変えても電撃?のモーションの時に遅れるような感じがします...

引き続きキノコ殴らせてきます

923(○口○*)さん :06/08/02 15:06
ごめん、惑わすようなことだけど…
なんかホムの向いてる方向によってASPD全然違うような気がするんだ
くまAI使用ディレイ設定なし、進化バニルで、ホムが斜め方向なときやたら速く感じる…
気のせいかな? 誰か検証してもらえると助かる。

924(○口○*)さん :06/08/03 12:51
違う話題ですいません

現在こっこAIで
アクティブとノンアクティブ時に違う旋回ダンスをさせようと弄ってるのですが

function Rondo(pattern)
if (ActiveFlag == false) then
       (中略)
       end
if (ActiveFlag == true) then
       (中略)
       end
end

のように記述してところ通常のダンスもしなくなってしまいました
助言お願いします

925(○口○*)さん :06/08/03 13:59
>>924
(中略)の部分にどう書いてるかがすごく気になるけど、
それって

function Rondo(pattern)
 if (ActiveFlag == false) then
  if (pattern == 1) then
   (中略)
  end
 end
 if (ActiveFlag == false) then
  if (pattern == 2) then
   (中略)
  end
 end
end

こんな記述にしてたりする?
これだと最初の[ActiveFlag]の条件式を通過しても
次の[pattern]の条件式で外れてるかもしれない。

自分はこっこAI使ってないからこれ以上のからみは分からない・・・

926(○口○*)さん :06/08/03 14:01
ぐは・・・7行目の『if (ActiveFlag == false) then』のfalseはtrueで。
コピペしたのがモロバレ orz

927924 :06/08/03 16:27
925さん、すいません
弄っているうちに原因が良くわからないまま自己解決しました
時々勝手にデフォルトのノンアクティブに戻り
気が付かないことがあるので判別しやすくしたかったのです
参考までに
function Rondo(pattern)
if (ActiveFlag == true) then
-- パターン1 主人の回りを正方形旋回(時計回り)
OwnerX,OwnerY = GetV(V_POSITION,MyOwner)
PatrolVector = PatrolVector +1
if (PatrolVector == 2) then
Move (MyID,OwnerX-2,OwnerY-2)
elseif (PatrolVector == 4) then
Move (MyID,OwnerX-2,OwnerY+2)
elseif (PatrolVector == 6) then
Move (MyID,OwnerX+2,OwnerY+2)
elseif (PatrolVector == 8) then
Move (MyID,OwnerX+2,OwnerY-2)
PatrolVector = 0
TimeCounter = 1
end
WaitClock = GetTick()
end
if (ActiveFlag == false) then
-- パターン1 主人の回りを正方形旋回(反時計回り)
OwnerX,OwnerY = GetV(V_POSITION,MyOwner)
(中略)
end

end

928(○口○*)さん :06/08/03 18:29
>>921
いろいろ試しているうちにASPD186.0なので280目標だったのですが、
AI周期280~312くらいで安定するようになりました。
見た目もずいぶんと攻撃速度が上がったように感じます。

しかし、狩りへ行くと激ラグがすごいですorz
PCの性能や回線が悪いのかもしれませんが、
ホムが殴っている間に移動すると位置ズレなどが多発...
これは仕方ないんでしょうかね...ループさせてる時間長すぎるのかな?

929(○口○*)さん :06/08/03 19:14
PCスペックや回線の問題じゃなく、仕様としてAIを止めるとROが止まるっていう仕組みだから
>>921を実装するとそうなるのは仕方ないこと。

930(*○口○)さん :06/08/03 20:02
今の流れとしてはAIで実現可能な最高ASPDの追求でやってる訳だから
その分ケミの動きが犠牲になるのは仕方のない事
ASPDだけ究極にするのも、見た目重視にするのも使い手の考え次第

ケミも戦闘に参加するのならAIの初終にAttackが無難なとこ
放置狩りや戦闘中にケミ操作をしないのなら>>921

931(○口○*)さん :06/08/03 21:17
>>929-930
ですよねぇ...
自分の場合本体は魔法で共闘つけるくらいしか出来ないので、
しばらくこのまま使って行こうと思っています。
回答ありがとうございましたー

932(○口○*)さん :06/08/03 22:13
>>921さんのコードは一回のAI()呼び出しで
ATTACKを3回おこなってますが
これは3回中2回はタイミングの都合で破棄される
ということでしょうか

それともクラは固まっても攻撃モーションは
表示されるのかな


試したいけど今日は繋げられない●| ̄|_

933(○口○*)さん :06/08/04 02:09
>>932
1回目のAttackが本命で、
2個目と3個目はモーションキャンセル用に送るだけでしょ?
2個目と3個目でも攻撃出来たら攻撃ディレイ無視してね?そりゃ無理だろう
モーションを表示する為の2,3個目じゃなくて、
1個目のモーションをキャンセルする為の2,3個目って事ね

934(○口○*)さん :06/08/04 02:30
>>928
止めてる時間も長いと思う
体感だと、AI止める処理は200msくらいまでならあまりラグ感じない

目指している周期の最小公約数を目指すのはだめなのかな
要はAIの周期と攻撃ディレイの周期が合えばいいわけだから、
Aspdの速度にAI処理速度を合わせる必要はないし

935(○口○*)さん :06/08/04 02:37
>>934にすこし語弊があった、
最小公約数はどの数字も1だわな

>>921の処理を見たら1ループごとにGetTick()してるのも気になりました
1ループの度にGetTick()って結構重い処理じゃないかな

936(○口○*)さん :06/08/04 09:34
バニルが人食いスライムと化すようなウルド用AIってないでしょうか?

937(○口○*)さん :06/08/04 13:27
>>936
既存のやつのタゲ判断のところのチェックをいくつか外せばいいのでは

938(○口○*)さん :06/08/04 15:00
結局有名配布サイトAIの中で ここで話してる進化後のASPDについて 改良したりしてる作者がいないぽいから 難しいのかなぁ

939(○口○*)さん :06/08/04 15:11
各人の環境に大きく依存しているから、大手であれば大手であるほどaspd改良は向いていないと思う
誰でも簡単に使用・設定できることと無難な性能と独自機能が求められるわけだし

それにしても、進化ゼリーの電撃モーションの後にAIが呼ばれるまで600ms経過とか洒落にならんわ・・・

940(○口○*)さん :06/08/04 15:16
>>938
難しいというより、原理的に>>921みたいなことをやるのがベストなんだろうけど

・それをやるとROクラそのものが重くなる
・ホム種どころか個体によっても微調整が困難なので、使用者に設定させなくてはならない
・しかもその設定に時間がかかる+LvUPでASPDが上がるとまた調整が必要

などの問題があるので、自分で出来る人が自分用に実装してやるのは勝手だけど
配布用としてはとても実装できないな、と思う。

また、AIを攻撃ディレイに合わせて止める以外にいい手段が見つからない。
次点でATTACK_STまわりの構文があまり冗長にならないようにするか
Attack()を複数回送っておくとかそういうことしか出来ないが、これらはそれほど効果がない。

何故進化でこの辺の問題が浮き彫りになってきたかというと

・進化でステータスUPしてASPDが上昇
・進化後のモーションが変化することでディレイ判定に変化

この2点だと思う。
モーションは基本的にASPDの時間に合わせてアニメーションが1ループする仕組みで、
以前あった「モーションが一定枚数までくるモーションとディレイ適用」ってのが正しいとすると
モーション変化とASPD変化で判定位置が今までとズレたことで妙なディレイが出来てしまった、
というのがこの件の問題なんだと思う。ただ多分AI()そのものの周期よりは判定位置が来る時間は遅いだろうから
軽めのAIなら進化後もあまりASPDに影響が出なかったと考えられる。
この件でよく挙がる工体やくまAIは、詳しく見ていないので解らないが若干処理が遅いくて
モーションディレイ適用の判定位置までATTACKの処理がかかってしまっているのではないだろうか。

(ここで言うモーションディレイはASPDのディレイではなく、例えばソニックブローのようにASPD以上の時間が
 モーションとしてかかってしまうディレイのこと

941(○口○*)さん :06/08/04 16:06
>>938
きのこAIは対処してる、ATTACK_ST を複数回呼ぶやり方と言っていた
ここも見てるぽい、既存のよりは早いよ

自分は素人でわかんないし、いい方法が開発されたら更新頻度の高いAIは
採用してくれるだろうし、期待しつつまったり待たせてもらう予定

942(○口○*)さん :06/08/04 20:02
既出も禿出もいいとこだけど
単純にAI(myid)の最後に
if MyState = ATTACK_ST then
OnATTACK_ST()
end
入れるだけでやっぱAIの周期が結構早くなるね、というか遅くなりにくくなる
ループ処理だと僅かな間とはいえ、画面自体完全に止まるのがストレスになるんで
自分はとりあえずこれで満足

943861 :06/08/04 22:21
遅レスですみませんでしあ;;
>>921でAttackを複数送ってるのは、>>933のいう通り、2,3個目はモーションキャンセルの為だけのAttackです。
激ラグになってしまうのは、おそらく「+20」「+52」の値を大きくしすぎか、
実ASPDが280msなので、2回に1回はこの処理が入ってしまうためだと思います。

自分が目指していたのは、見た目もカクカクしない(ケミも快適に操作可能)で、
なおかつ実ASPD付近の攻撃速度が出るもの、だったんですが雲行きは非常に怪しいですorz

いろいろ数値を変えてやってみましたがどうにも上手く行かず、
最終的にはループ処理を入れないか、入れたとしても非常に短い時間で、
それよりもとにかくAttackをいっぱい出す、という方向になりそうです。

AIの最後にもう一度OnATTACK_ST()を呼ぶ、というのは、
Attackの後にちょっとループさせてもう一度Attackを呼ぶのとほぼ同じ意味になりますが、
OnATTACK_ST()を丸ごと呼ぶと、余計な処理までもう一度やることになるので、
単にAttack命令だけ出すようにしたほうがいいかもしれません。
ちなみにきのこAIの、BBSにアップされている最新版では、
AIの最後と次に回ってきた時のAIの頭で、Attack命令だけを再送してます。

GetTick()が重いかもとのことなので、GetTick()以外の方法でも試してみて、
あとは…、結果どうなるか分かりませんが、
最終的に自分はこうしました、というご報告はしたいと思います。

861こと、きのこAIの中の人でした、へてv

944932 :06/08/05 02:51
>>861,933
丁寧な回答ありがとうございます
というわけでひょっとしたらATTACKじゃなくてもMOVEでもキャンセルできるかも
と思って試してみたんですが、攻撃モーションをキャンセルできても
MOVEをキャンセルできなくて微妙でしたw


あと、うちの環境だとキャンセルいれなくてもだいたい140ms周期で安定して
たりします。なんでだろー
進化してないからかな

945(○口○*)さん :06/08/05 20:57
>>944
それもあると思うけど、個体のASPDにもよる部分があると思うから
場合によって安定する人は安定するんじゃないかな。

946(○口○*)さん :06/08/07 04:54
固体Aspd + AIによって設定できるモーション表示のためのAspd + AIそのものの処理速度 + 回線遅延の有無

色々な要素が合わさってモッサリの原因になってるっぽいからこれ修正するのはかなり厳しい気がする
ともかく技術屋に期待

947(○口○*)さん :06/08/07 12:15
今どのくらいの速度で攻撃してるかもわからないから
対策しても効果が出ているか確認できないんだよな

画面で確認するにはサーバーに届いてからもどってきて画面表示するまでに更に時間がかかってるし
AIの処理が終わるまで画面はとまったままだし
信頼性に乏しい

948(○口○*)さん :06/08/07 16:56
モーション表示のための制限設定は論外として、
とりあえずこの件は前にも出てるAttack()をAI1ループの間に2〜3回送っておくってのが
負荷も無くそこそこ効果のある妥当な手段てことで結論づけていいんじゃないかな。

949(○口○*)さん :06/08/07 19:21
それについてはきのこAIが一番いいってことか

950(○口○*)さん :06/08/07 19:25
2回Attack()ならこっこにもいつの間にか入ってた。
きのこは3回みたいだけど。2回と3回で差が出るのかはわからない。

951(○口○*)さん :06/08/07 22:03
0.001秒以下のほぼ同時2回送った場合にサーバーで同時に受け取っても2個分処理してくれるのか?
って部分があるからそれすらも「そこそこ効果がある」って言い切れないような・・・?

AIの最後に70msのループを入れてもう一回送るようにすればAttackが大体2倍速で送られるから
長いときの140msの待ちが70msに純粋に短縮されるけど・・・
本体がなぁ微妙な重さが付きまとうのはいただけない・・・

952(○口○*)さん :06/08/07 22:14
たぶん自分のホムがAIとASPDの穴にはまったときしか解りにくいと思うけど、
ループも待たずに2回送るだけでも効果はある、というか明らかにモーションが違う。

わかりやすいのが攻撃モーションの2番目。
特に進化してると、2番目の攻撃モーションは結構遅くて、通常のモーションなら早いASPDになっているのに、
こっちのモーションだと遅れることがある。これがモーションディレイに引っかかっていることになるんじゃないだろうか。
で、少なくとも自分の環境でAttack()の2重実行をやると、この2番目のモーションをキャンセルできるのは確か。

また仮設になるけど、モーションのせいでASPDが遅れているとすると
モーションによるディレイ発生はクライアントでやっている可能性がある。
だからサーバーに送信するためではなくて、ローカルな範囲でクライアントに
Attack()が実行された→モーション開始っていう認識をさせることで
遅延が発生する場合のモーションをカットできるんじゃないかな。

953(○口○*)さん :06/08/07 23:23
ケミスレから誘導されてきました。
コピペで申し訳ないのですが、工体AI使ってる人に質問です。

-- SELF_SKILLが発動するSPのパーセント
SELF_SKILL_PERCENTAGE = 100,
-- スキルをより多く使う際のSPの最低パーセント
-- この値から SELF_SKILL_PERCENTAGE を引いたものがバースト時のために温存されるSPになるため、
-- バースト時により多くのスキルを使うには、この値を下げると同時に
-- SELF_SKILL_PERCENTAGE の値を高くすると効果があります
SELF_SKILL_BURST_PERCENTAGE = 40,

と設定してる場合、
ブースト用のための確保SPは
60%になるんですか?
それとも40-100になって-60で確保SPはなしになるんでしょうか?
この辺りを詳しくご教授願います。

954(○口○*)さん :06/08/08 01:15
くまーからこっこに乗り換えた初心者ケミです。
ageて質問したい所ですが、ぐっと堪えて、、

くまーを使っていた時は、初期状態を休戦状態にして、
主人がmobから攻撃されたとしても、こちらがALT+Tで指示を出さない限り待機状態を維持するようにしてましたが、
こっこに変更すると、初期状態で主人が攻撃を受けると敵に攻撃を開始するようになっております。

現在自分は葉猫狩りしてるため、こちらから指示しない限り攻撃しないように初期設定を変更したいのですが、やり方がよくわかりません。
ALT+Tで切り替えできるのはわかっているんですが、葉猫ドンジョンに籠もっている故、テレポ狩りが主になり、
ワープアウトする度にいちいちALT+Tを押すのが面倒で..どなたかご教授くださいm(_ _)m

955(○口○*)さん :06/08/08 01:22
くまのままでいいじゃん。


というのは置いといて。
一番最初にあるグローバル変数のうち、デフォAIにもある部分だけど

MyState = IDLE_ST

って部分を

MyState = FOLLOW_CMD_ST

に変えれば初期状態がAlt+Tを押した時の状態で始まるはず。

956(○口○*)さん :06/08/08 01:36
ほわあー!そんなんでよかとでしたか!即レスさんくすです。
どこかでMyEnemyにOwnerEnemyのIDを入れて、そんでもってIDLEからCHASE_STにするって命令があるもんだと思って
ATTACK_OBJECT_CMD_STがある辺りとかいろいろ見てみたんだけどサパゥルリだったのですよ、、

そうかそうか、デフォ状態をアイドルからコマンド入力待ちにするということなわけですね。

957(○口○*)さん :06/08/08 02:37
オートSBR使ってる人は、連射速度どんぐらいでしょうか?
自分は、こっこAIのムーンライトの部分をSBRにして
スキル発動100%にしてるけど
手動で連射するほど連射できないです。

SBRのモーションでてしまうと次のSBRは撃てないのが原因っぽいけど・・

958(○口○*)さん :06/08/08 02:45
>>957
ムーンライト用のディレイとしてSkillDelayが2秒くらいに設定してあって、
それ以上の速度ではそもそもオートスキルの判定をしないようになってるので
その辺りを弄らないとダメ。SBRのディレイは1秒くらいかな?
連打したことないからわからないけど、そのままだとムーンライトの連打速度と
あんまり変わらないよ。

959(○口○*)さん :06/08/08 02:45
ムーンライトの使用後のディレイ待ちの処理つぶしてないんじゃまいか?
最新バージョンでは確認してないけど、AutoSkill_OBJECT() にそういう処理が入ってる。

960(○口○*)さん :06/08/08 16:11
AI導入後ケミでINできなくて困っています。
フォルダ内を全て元に戻してもダメで、クライアントの再インストールもしたのですが、
ケミでINしようとすると、プログラムが終了してしまいます。

何か方法はありませんか?
他に何か必要な情報があれば書きます;

961(○口○*)さん :06/08/08 16:18
>>960
再インスコした時にカスタムAI入れ忘れとかはしてない?
まぁ、してなかったとして…自分はそうなった事はないけども、
再インスコした後に別キャラで入って/hoaiして、
基本AIで動くように戻してから入ってみたらどうよ?

962(○口○*)さん :06/08/08 16:20
自己解決しました。
スレ汚し失礼いたしました!

963(○口○*)さん :06/08/08 17:45
自己解決ですますなよ
どんなにアホらしい見逃しでも質問したのなら
原因と解決法を書いてくべし。

それをしないなら本当にスレ汚しでしかない

964(○口○*)さん :06/08/08 17:48
まぁUSRE_AIフォルダを作ってないのに/hoaiしちゃったってとこだろうな。
念のために言うけど>>961を見て解決したってんならそれ
"自己"解決じゃないからな?

965 ◆g37UcEp//g :06/08/08 18:45
最近忙しかったのもあって間が開いてしまったので再度アンケート

GvAIに欲しい機能は?

現在考えてもいるのは
・特定ID(マスター等)のみ妨害機能(それ以外は無視)
・特定職のみ妨害機能(それ以外は無視)
・クローク見破り機能(敵がいたら隠れてるか否かに関係せず報告)
・攻撃範囲まで近づいた敵に通常攻撃し続ける

クローク見破りについてはすでに実装しているものの
報告を外部に出力してるので一般公開していいものか悩み所です
ちなみに常時監視ではなくトリガー起動で敵を探し位置と職を報告します

966(○口○*)さん :06/08/09 00:08
そういえばAIによって障害物避ける処理入れてるのと入れてないのがあるみたいだけど
あれってどれくらい効果あるんだろ
工体とGlenelgと玉蟲が回避処理いれてたっけか

967(○口○*)さん :06/08/09 00:17
細かい障害物があるMAPだと、射線が通ってるか見てくれるので
引っかかって置いてけぼりになりにくいんじゃないかね。
逆に言えばそれ以外の効果はあんまり無いんじゃ。

968Glenelgの人。 :06/08/09 00:28
呼ばれたみたいなので(笑)

はっきりいって、地図関連は自己満足に近いと思います。
普通にホムを連れ歩く分では、わざわざ採用していなくてもあまりひっかからないですし。
ただ、例えば壁ぎりぎりを歩いていて90度直角カーブ・・・とかやると、
(地図対応していない昔は)苦戦することはありました。
#だから、Glenelgでは検討対応したのです。

あとは本当に自己満足の世界です。
Glenelgでは例えば、GD3Fの墓地にある(見づらい)金網状のフェンス近辺で
フェンス向こうの敵を狙っても、きちんと通れるところへ迂回して接近・攻撃
・・・とかしてくれますが、やっぱり自己満足レベルかと。

969Glenelgの人。 :06/08/09 01:08
一応地図関連を採用した際のメリットもあるにはあるので、書いておきます。
大きいのは、行動を始める前に「移動できるかどうか」の判定ができるので、移動反応がよくなる点があげられます。

地図情報を直接採用していなかったとしても、
「移動指定したけど移動モーションを取らないから」
という基準で「壁があって指示した移動が処理できない」という判断はできます。
ただ、これをやろうとすると通常AI()を最低1,2回余計にまわす必要があるはずです。
そしてこの時間(おそらく最低で300msecくらいの間)ホムは行動停止することになります。

地図情報を使うとこの待ち処理が不要になるので、そういう停止時間がほとんどないのがメリットです。
アクティブ索敵で壁向こうの敵をタゲってしまったりしたときに、こういうところが効いてくるかと。

970(○口○*)さん :06/08/09 08:15
>>965
攻め時にロキの演奏ストップをするのにカプリスが使えるとたまに聞くんですが、
どうも手動スキルでやろうとすると防衛ラインのキャラを読み込んでる間に
無敵時間のないホムが死んでしまいそうです。
そこで、WPをまたいだとき(ホム読み込みがあったとき)、近くに居る雷鳥にカプリスを撃つというのはどうでしょう
前に見た気がするアイディアですが・・・

971(○口○*)さん :06/08/09 11:08
>>970
それあったら便利そうではあるけど、
普通出てすぐのトコにいるロキ雷鳥の足元ってSWなくね?
カプリスやっても大半の砦で射程3以内でミスになるような気がするんだが…

972(○口○*)さん :06/08/09 14:17
>>971
日本語でおk

973(○口○*)さん :06/08/09 14:18
SW潰すのには使えそうだな
GVだとホムはメイン運用厳しいからどのみち捨て駒になるだろうし

974(○口○*)さん :06/08/09 15:55
SW削りにしか使えないというのが正解か。
Lv90ぐらいになってIntがHiWiz並になれば、詠唱中断させれる可能性もあるけど。

それはともかくそろそろテンプレ修正案を。

>AIプログラムを作成している方が具体的な質問やアイデア提案などをする場合は
>「AIを語るスレ」にお願いします。
語るスレが落ちたから、これをまるっと削除。
スレタイ変更もちょっと考えたけどそのままがよさそう。

あとはリンクを更新するのと、他になにかある?

975(○口○*)さん :06/08/09 16:09
高レベルのバニルだと
ダメさえ通ったら確実に中断できそう
相手が転生前なら80くらいのバニルでも止められるかな?
SWを前衛が削ったり、不発してるときにカプリスしてロキを消し、ADSで一気に落とすのが良さそう

976(○口○*)さん :06/08/09 17:03
>>975
そこまでGv詳しくないけどおおざっぱに計算。

未転生Lv90Vit90マタ靴でMHP7k。
対魔法装備が一切ないなら、MAtk約600(Int115〜)で中断。
ロキ役はMDef装備つけないような気もするけど、Mdef10+四つ葉2とすると
MAtk約750(Int125〜)で中断。

wikiのホムステ報告を見ると、80後半でやっと中断の可能性が出てくる感じ。
現実的にはInt135〜140ぐらいの火力にならないと、期待できる確率にはならなさそう。

…ホムの最低MAtkや平均MAtkってどうなってるんだっけ?

977(○口○*)さん :06/08/09 17:28
そもそもクライアント側の読み込み完了しないと、AIが動作しないんじゃなかろうか?

978(○口○*)さん :06/08/09 17:29
ちょっと詳しく計算してる時間がないので軽く計算してみた
MDEF10+四葉でもINT115くらいで演奏中断できる?
とりあえずヒントだけ
ホムの攻撃はシーズ補正無効 ホムの魔法は常に最大MATK

979(*○□○)さん :06/08/09 17:43
>>966
ケミ追従に関しては>>968の通り効果が薄い割りに無駄が多い
角で止まるのはケミの隣接マスを計算>Moveさせているのが原因だから
単にケミの座標にMoveすればほとんど止まる事はない
(通常時隣接マス、離れ過ぎたらケミ足元のコードが過去に出てる)

MAPデータがその威力を発揮するのは戦闘関連
壁向こうを無視、初撃魔法型で崖打ちのみ可能を無視する以外にも
主人からのPPが届かない(射線)位置で戦闘をしないとかもある
強敵から逃げる時に壁を利用したり、mobに索敵されやすいのを利用して
予め計算した最短経路でMAP周回させてアクティブの掻き集めも出来るだろうね
Gvだとホムの射線から重要人物が外れない様に移動させる事も出来るね

>>974
「要望スレ」の名前は語るスレがあって意味があった物だと思うし、
やってる事はどうせ変わらないけど、語るスレから分離した関連スレなんだから
元のAIスレの名前に戻すのがいいんじゃない?
あと、初回さんトコのAI人力アンテナと過去ログ公開してるトコのリンクがあると便利かな
直リンがいいならうちの過去ログ直リンして構わないから
http://himenomikoto.web.infoseek.co.jp/kulus_project/index.html#html
ちなみにこのスレはmmoAI2_.htmlになる予定


最小:(int/7)^2+int、最大:(int/5)^2+int (カッコ内切捨て)
平均:(最小+最大)÷2
が戦闘計算機の式

980(○口○*)さん :06/08/09 19:22
>>978
>ホムの攻撃はシーズ補正無効 ホムの魔法は常に最大MATK
thx。ホムってずいぶん規格外なんだね・・・。

>>979
通常のMAtk式は元Wiz使いのたしなみとして知っていたけど、wikiに
http://alchemist.s214.xrea.com/index.php?%A5%DB%A5%E0%A5%F3%A5%AF%A5%EB%A5%B9%2FSystem%2FGrowUp
>ランダムボルトのダメージから判断して、INT7倍数のボーナスは存在しない模様。
とあったから疑問だった。
Int上限が高いことといいMAtk最大固定といい、強すぎ。

スレの名前は、「語るスレ」にしたいってこと?
それだとスレ番号とテンプレがそのままじゃ使えなくなるから、
スレタイとテンプレのたたき台plz。

「雑談スレはこのスレで終わり、次スレは語るスレ復活」
っていうのではなく、雑談スレの流れを汲むものでお願い。

981(○口○*)さん :06/08/09 19:25
ホムンクルスAI総合スレ・雑談アリ

982(○口○*)さん :06/08/09 21:50
統合雑談スレでいいんじゃないかな

ホムが企画外なんじゃなくて人間が企画外なだけ
ホムは通常mobと同じ通常扱い

983(○口○*)さん :06/08/09 22:00
工体AIつかってるものです。
テコン系が友達登録できないっていうので、ちょっとソースをトレースしてみた。
結果、PCのIDとJOB種別でテコン系が登録対象に入ってないところまでは解析できたんですが、
テコンガール・キッド:4046
ケイセイ(女性/男性):4047
リンカー(女性/男性):4049
・・・と4048番のJOBが抜けてる(養子はとりあえず回りにいないので謎)

当方、女垢のケミをつかってますが、ギルド情報とかで男垢でテコンガール(テコン女性)をみたら、
テコン「キッド」とJOBが表示されると聞きました。
だとしたら、4048はテコンキッド/ガール(ホム主人が男垢)じゃないか?
と推測してるのですが、このあたり調べた人いるでしょうか・・・
工体AI利用者でかつ、トモロク利用者で男ケミのひと検証キボンorz
人柱さんがおられたら、TraceAIで表示できるように仕込んだファイルをどこかに上げようかと。
今のところ、4048は"UnKnown-JOB"ってことでコード書き換え中。。。

984(○口○*)さん :06/08/09 22:01
>>983
ヒント:拳聖の舞空術

空に浮いてる拳聖みたことない?
あれが4048っぽいよ。

985983 :06/08/09 22:33
>>984
>拳聖の舞空術

融合ですかっ!情報THX。
JOB名何にしようかなぁ・・・JOBカテゴリは互換性を考えて未転生2次に設定。
ケンセイ=Star Gradiator(STAND)
舞空術=Star Gradiator(Floater)
にでもしておこうかなw

ファイル自体はplayerdata.luaの書き換えだけでいけそうですね。
とりあえず、リンカーはトモロクできるようになったことを確認。
希望者がいればどこかにファイルうpします。

#でもあれだねぇ、狩り行く前にリンカーとケンセイ登録して、
 狩場で融合使うとトモロクしなおしかぁ・・・
 まぁ、融合時も登録しておけば問題ないわけだけど。

986(*○□○)さん :06/08/09 22:42
場所が要るならケミテンプレからは消えたけど・・・つ【過去の遺物】ttp://jbbs.livedoor.jp/game/29222/

思ったより雑談も減って内容も語るスレと変わらないと感じたのもだけど
要望を消して【ホムンクルスAIについての雑談スレ その3】でも
【ホムンクルスAIについて語るスレ その3】でも(旧スレはAIを語るスレ)
適当でいいと思ってる。番号とかより語れる(雑談出来る)場があるって事が大事だと思ったから

結局名前なんて飾りで中身は変わらないだろうからテンプレはここの修正でいいかと
旧語るスレのテンプレ分はケミテンプレへのリンクが役目してるからね
(ケミテンプレ移転分のリンク修正は忘れずに・・・

>>985
>playerdata.lua
>>465

987983 :06/08/09 22:51
>>986
ぉぉぅ;既に対応版があったんですね。THX
ブラウザでみてたから見つけられなかったorz
一応、将来用(ガンスリ・忍者のIDチェック用)にTraceAI仕込んだままの自前で使ってみます。。。

ありがとでした、名無しにもどります。

988(○口○*)さん :06/08/10 02:44
過去の遺物なんとか使いたいな
AI開発者各自に声かけて開発者同士が意見交換する場として機能させられないだろうか?

989(○口○*)さん :06/08/10 08:00
>>980
規格外っていうかホム自体見切り発車な感が…
範囲魔法当たらないのがあったり、オートにすると画面内どこでも攻撃スキル撃てたり
スキルバランスも滅茶苦茶だし、防御が得意なはずの羊の防御力が4種中最下位になったり

990(○口○*)さん :06/08/10 14:24
ホスト規制で立てれなかった。orz
スレタイはこだわりないようなので「要望」だけ消去。
「過去の遺産」は現状で管理されていないし軌道に乗ってないから、今回はスルーします。

スレタイ:ホムンクルスAIについての雑談スレ その3
--- >>1 ---
このスレは、質問や要望、思いついたアイデアなどに関して雑談するスレです。
質問をする場合、最低限、『過去ログの確認』や『状況を伝える努力』をして下さい。

守らない悪ケミ子は、ばにるみーが触手で御仕置きだ!
  ヘヘ
 | ̄ ̄ ̄|
∠|_( ゚Д゚)ゝ <おしおきだべ〜

リンクは>>2-5あたり。

991(○口○*)さん :06/08/10 14:25

--- >>2 ---
■AIに関して、良くある質問は「Alchemist_Template の FAQ」に。
http://alchemist.s214.xrea.com/index.php?%A5%DB%A5%E0%A5%F3%A5%AF%A5%EB%A5%B9%2FLua%2FAI#r025e50a">http://alchemist.s214.xrea.com/index.php?%A5%DB%A5%E0%A5%F3%A5%AF%A5%EB%A5%B9%2FLua%2FAI#r025e50a

■ホムに関して、良くある質問は「AlchemyNote の ホムンクルス基礎」に。
ttp://www15t.sakura.ne.jp/~privatemoon/alc/hom_100.html

■前スレ
ホムンクルスAIについての雑談・要望スレ その2
http://enif.mmobbs.c#

■過去ログ保管庫
ホムンクルス用ライブラリを配布するサイトLv.1
http://himenomikoto.web.infoseek.co.jp/kulus_project/index.html#html

■関連スレ
アルケミスト・クリエイター情報交換スレッド第88巻
http://gemma.mmobbs.com/test/read.cgi/ragnarok/1155032957/

■テンプレサイト
Alchemist_Template
http://alchemist.s214.xrea.com/

■AI配布サイト
Alchemist_Template - ホムンクルス/Lua/AI - AI配布サイト
http://alchemist.s214.xrea.com/index.php?%A5%DB%A5%E0%A5%F3%A5%AF%A5%EB%A5%B9%2FLua%2FAI#f7c155f4

AI機能比較表+人力アンテナ
http://pc3merchant.net/ai_antenna/

■Lua 5.0 リファレンスマニュアル
http://www.uri.sakura.ne.jp/~cosmic/yuno/lab/lua5_manual_ja.html

992(○口○*)さん :06/08/10 16:15
新スレ立ててきた。
http://enif.mmobbs.com/test/read.cgi/livero/1155193995/l50

993(○口○*)さん :06/08/10 16:16
乙。

994(○口○*)さん :06/08/10 18:40
ホムに一発だけ殴らせて壁をさせたいのですが、
適当なAIを教えていただけませんでしょうか

ちなみにホムはバニルミルトです

995(○口○*)さん :06/08/10 18:45
申し訳ありません、自己解決いたしました
どうぞ踏み台に・・・

996(○口○*)さん :06/08/10 20:01
うめ

997(○口○*)さん :06/08/10 20:16
新スレタテ乙梅ばにる

998(○口○*)さん :06/08/10 20:36
>>992
thx。

999(○口○*)さん :06/08/10 20:51
次もノンビリと有意義な智の交換がしたいな

1000(○口○*)さん :06/08/10 20:58
http://enif.mmobbs.com/test/read.cgi/livero/1155193995/

 ヘヘ
 | ̄ ̄ ̄|
∠|_( ゚Д゚)ゝ<移動〜

10011001 :Over 1000 Thre
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。