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

ホムンクルスAIについての雑談スレ その4

1(○口○*)さん :06/10/19 08:22
このスレは、質問や要望、思いついたアイデアなどに関して雑談するスレです。
質問をする場合、最低限、『過去ログの確認』や『状況を伝える努力』をして下さい。
グレーゾーンの行為(自動PPなど)に関する話題は自粛やスルーをお願いします。

守らない悪ケミ子は、ばにるみーが触手で御仕置きだ!
  ヘヘ
 | ̄ ̄ ̄|
∠|_( ゚Д゚)ゝ <ところで触手ってどこ?

リンクは>>2-5あたり。

2(○口○*)さん :06/10/19 08:22
■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 の ホムンクルス基礎」に。
http://www15t.sakura.ne.jp/~privatemoon/alc/hom_100.html

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

■過去ログ保管庫
ホムンクルス用ライブラリ配布所
http://himenomikoto.at.infoseek.co.jp/kulus_project/index.html#html

りとる りとる うぃっち - アルケミ関連スレのログ
http://www.serio.ne.jp/~little-witch/log/index.html

■関連スレ
アルケミスト・クリエイター情報交換スレッド第96巻
http://gemma.mmobbs.com/test/read.cgi/ragnarok/1160922701/l50

■テンプレサイト
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

3(*○口○)さん :06/10/19 08:40
注意:hは抜かない(前スレ>>298-302)
    Luaリファレンスは5.0のまま変えない(RO組み込みは5.0.2)
保留:多重Attack問題(前スレ>>711-714)
     AI制作者への認知はあらかた済んでいるだろうから、
     「配布AIの説明書をよく読め」でよいかなと。

前スレ989よりコピペ

4(○口○*)さん :06/10/19 09:20
>>1
乙。
触手は、原種バニルミの主人専用攻撃モーション。
たぶん正確には触手じゃなくてアメーバのような偽足(体の一部が変化)だと思う。

>>3
( ゚Д゚)
それはスレ立て人の親切で改悪されるのを予防するためのメッセージだし
(最近そういうのが続いてorz)、コピペしたら保留した意味もない。

あえて載せる必要があると判断するのは構わないけど、コピペなんてせず
文面は書き換えてほしかったな。
これでは「このスレではh抜き一切禁止」と読めてしまうし。
テンプレにはh入れてほしかっただけで、レスでは各々の判断で構わないよ。

5(○口○*)さん :06/10/19 09:31
>>4
グリムちくちく攻撃が触手だったのかw

6(○口○*)さん :06/10/19 10:10
ホムに朗報
生体1マジオススメ、テレポしながら適当に索敵で1M出るかも
レアもあるし瓶も溜まるしでマジオススメ

7昼休みの>>3 :06/10/19 13:27
>>4
ソウダッタノカ-
それぞれ経緯や概要への誘導も付いてるしコピペでいいかと手を抜いてしまったorz

>>5
今すぐPvへ行ってちくt(鯖キャン

>>6さん乙

8(○口○*)さん :06/10/19 21:58
久しぶりにきちんと>>6さんが来た気がする
他スレばかりいかないでねっ

9(○口○*)さん :06/10/19 23:14
9ゲット。

>>6
ホムに朗報なのかw

10(○口○*)さん :06/10/20 05:39
スレ立て乙

Gv時によくあるラグで、鯖側の処理が遅れてて
@詠唱開始→Aラグ(プレイヤーとか立ちモーションのまま止まってるけど詠唱バーは進む)→B再び鯖は動き出す(SGとかも発動)
みたいな時のAの間に詠唱完了した後のキャラクターのモーションって
立ちモーションなのでしょうか?

もし立ちモーションだったら
「n秒間画面内のプレイヤーとMob全てが立ちモーションだったらパケット送るのを止める」
みたいな処理に使えるんじゃないかと思ったんだけどどうでしょう

自分で調べる&手動で止めればいい話なんだけどGvは別キャラで出てるものでorz
もしわかる方がおられれば教えてほしいです

11(*○口○)さん :06/10/20 07:52
詠唱バーが進んでいる最中は画面内で詠唱が始まったのなら詠唱モーションのはず
画面外で詠唱が始まり詠唱中に画面内に入った場合、発動時のスキルモーション前は立ち
画面内詠唱中にラグなら「詠唱M→(詠唱終)立ちM→ラグ復帰→スキルM」(マジWizの経験
ラグなしならそのまま「詠唱M→(詠唱終)スキルM」だったと思う

実際処理をする場合、n秒間ってのが鬼門で考慮するスキル種別やDEXで適切なnは変わり
鯖、回線、PCの影響も無視できない上に、画面内にキャラ(PC+mob)数が不定(増減する)状態で
(n秒÷AI周期)回数分のデータの保持or差分の計算もある(保持は1回分でいいかも

Gvだとループも無駄に増やせないから、既存のループに画面内全IDの各モーション数をカウントして
カウントが変わらなければ周囲のモーションは変わっていないとみなすのが無難
鯖側のラグと蔵側のエフェクト処理落ちの区別が付かないけど、AIラグとの区別が付けば然程問題は無いかな

12(*○口○)さん :06/10/20 07:56
修正
ラグなしの時でも詠唱MとスキルMの間に一瞬立ちMが入る
(AI周期と詠唱終タイミングによって拾えたり拾えなかったりまちまち

13(○口○*)さん :06/10/21 08:50
前スレ>>999
でもケミの生血を毎日与えないといけないし、もし忘れてしまうと死んで(消滅して)しまうんだよな。
ついでに言えばフラスコから出られない・・・ってそれだと観賞用にしかなれないか

14(○口○*)さん :06/10/21 15:24
>>13
観賞用ホムンクルス・・・いいじゃないか。

15(○口○*)さん :06/10/22 12:04
自動できのこ栽培、スティール、CRをしてくれるAIがほしいです
出来ればスティールの成功を判別してからCRするの希望です

16(○口○*)さん :06/10/22 12:05
地面を指定するコマンドないので不可能で〜す、13点。

17(○口○*)さん :06/10/22 14:15
初歩的な質問で申し訳ないです。

AIのファイルをダウンロードする際、
形式がtxtなのですが、luaでないといけませんよね?
一体、いつ変更すればいいのでしょうか。
フォルダに入れた後、名前を変更するで変えると、
いつもゲーム内でエラー落ちしてしまうのですが・・・
どうすればいいのでしょうか。

18(○口○*)さん :06/10/22 14:29
>>17
ゲーム起動してないときに変更すればいいんちゃう?

19(○口○*)さん :06/10/22 14:30
ファイル名がAI.lua.txtとなっていないか注意だ
拡張子を隠す設定になってるとたまにやってしまうorz

20(○口○*)さん :06/10/22 14:33
>>17
AIロード前ならいつでもいい
保存時にファイルの種類を「テキスト」から「全ての種類のファイル」にすればAI.luaで保存できる。

21(○口○*)さん :06/10/22 17:15
GvAIを使っているのですが、こっこAIのようにSBR44を連射するようなことはできるのでしょうか?

22(○口○*)さん :06/10/22 21:35
ゲーム内でエラー落ちってことはだ。二通りの可能性があるわけだな。

1./hoaiでカスタムAIに切り替えたにもかかわらずカスタムAIが見つからない
 →ファイル名間違ってる。フォルダオプションで拡張子を表示、にしてAI.luaになってるか確認。
  またそのAIに必要な構成ファイルがすべてそろってるか確認。
  格納するフォルダが間違ってないか確認。

2.AIそのものにエラーがある
 →エラーメッセージ見て原因を追究するか、ちゃんとエラーメッセージを正確にスレに書き込んで
  質問する

拡張子変更するタイミングはぶっちゃけホム呼び出してないときならいつでもいい

23(○口○*)さん :06/10/22 22:02
AI をカスタマイズしていて気になったことがあります
プレイヤーからの距離に応じて処理を変えたいのですが
斜めの位置では上手く動かないことがあります
例えばプレイヤーから 3マス以内の敵に攻撃すると
しても斜め位置だと攻撃してれません

GetDistance() で得る距離は円形になっているみたいで
これだと斜めは 4マス離れたことになってしまうからかなと思います

ホムの攻撃範囲って 5*5 の四角みたいなので距離の
測定も円形じゃなくて四角にする方が良いかなと思うのですが
これって GetDistance() を書き換えるのが良いでしょうか

2423 :06/10/22 22:12
なんだか分かりにくいですね
つまり次の位置関係にあるときに
攻撃を加えたいってことです

□■■■■敵
□■■■■■
□■■ホ■■
□■主■■■
□■■■■■
□□□□□□

敵はホムからは 2セル離れているから攻撃可 (■ の範囲)
プレイヤー (主) から 3セル以内なので攻撃するとします
しかし GetDistance() で距離を得ると敵は 4セル離れていることになってしまいます

25(○口○*)さん :06/10/22 22:17
もしかすると円形距離取得が必要になるケースもあるかもしれないから
中身書き換えちゃうのはあんまり賛成しないけど

function GetDistance (x1,y1,x2,y2)
return math.max(math.abs(x1-x2),math.abs(y1-y2))
end


四角形距離ならこれで大丈夫だと思う。多分。

26(○口○*)さん :06/10/22 22:23
算術関数使うと重くなるし俺はこういうの作ってたけど使えるだろうかね。
これで主人とホムの距離が3以下で敵とホムの距離が2以下なら攻撃みたいなことにすりゃいんだと思うが
-------------------------------------------
-- 正方形エリアでの距離を返す
-- 画面内かどうかの判定とかに使うかもしれない
-- 主人との距離が14以下なら画面内
-------------------------------------------
function GetSquareDistance(x1,y1,x2,y2)
    if (x1 < 0 or y1 < 0 or x2 < 0 or y2 < 0) then
        return -1
    end
    local width = math.abs(x2-x1)
    local height = math.abs(y2-y1)
    if (width > height) then
        return width
    else
        return height
    end
end

2723 :06/10/22 22:39
>>25 返信ありがとうございます
組み込んでみたところ私が思ったとおりに動作しました(*'-')


> 円形距離取得が必要になるケースもあるかもしれない

たしかにそうですね
既存 AI のカスタマイズをしてるので何かの処理が
円形の距離取得に依存してると困りそうです

ちょっとソースを読んでみると
Util.lua の IsOutOfSight() でも if d > 20 とか書いてますね

どのように組むのが良さそうかは考えてみます

28(○口○*)さん :06/10/22 22:41
>> 26
書き込んでいるうちに返信が。ありがとうございます

> 算術関数使うと重くなるし

GetDistance() は色々な個所で呼ばれているみたいなので
負荷が高くなりそうならこちらを使ってみますね

29(*○口○)さん :06/10/22 22:45
AIのGetDistance()は極近距離だけ方形になってる(きのこAI説明 / The Winter's Tale)

554444455
443333344
432222234
432111234
4321☆1234
432111234
432222234
443333344
554444455

後々円形距離を使う事もあるだろうし>>26みたいに別関数を作るか>>25を少し手直しして
opsの値を入れた時だけ方形距離を返す様にしておくと良いよ
function GetDistance (x1,y1,x2,y2,ops)
if ops then
local w, h = math.abs(x1-x2), math.abs(y1-y2)
return (w < h) and h or w
else
return math.floor(math.sqrt((x1-x2)^2+(y1-y2)^2))
end
end

30(○口○*)さん :06/10/22 23:04
算術関数ってそんなに重くなるかな?
結構組み込んでるけどあんまり変わる気がしないや。

31(○口○*)さん :06/10/22 23:16
重くなるか否か、といわれたら、確実に重くはなるが、
その算術関数1つくらいなら、普通は人間に意識できるレベルの差ではない。

ただAIの場合、そのわずかな重さでも大量にループすれば「ちりも積もれば」となる可能性はある。

32(○口○*)さん :06/10/22 23:29
GetActors()ってかなり重い処理になるのかな?
横殴り防止に、追跡中ずっと回してるんだが、問題ありだろうか?
GetEnemyのとこだけで他のプレーヤー探すと、追跡中に人が近づいた時に対処出来ないんだよな。

33(○口○*)さん :06/10/22 23:40
それ言ったら待機中だって毎回GetActors()回して索敵してるんじゃないか

気になるなら○回に1回とか○msに1回ていう処理にするとかどうだろう

3423 :06/10/22 23:50
>>29
なるほど。よく分かりました

調べてみるとプレイヤーの攻撃距離は円形 (菱形?) で
モンスターは正方形のようですね

プレイヤーからの距離測定はどうするのが妥当なのか検討してみます
攻撃可能距離 = プレイヤーとホムの距離 + ホムの攻撃可能距離 とか

索敵距離はどうなってるんだろ……
# 横殴りしてしまったりホムが画面から消えると嫌なので
# そんなに長距離の敵を攻撃するつもりはありませんが
ご存知の方いらっしゃったらお教えくださいませ

35(*○口○)さん :06/10/23 02:12
算術関数とかは>>26で代用は出来るけど実際どっちが軽いか?って言ったら
実際にループ回したり内部的な処理ステップ数を比較するしかないね
言語や実装方法によっては、算術関数の方が軽かったり代用の方が軽かったり差異があると思う
「 return (w < h) and h or w 」の書き方も、if文よりはステップ数が少なそうだから使ってるしね

GetActors()は蔵にある配列を参照してくるだけだから、forループに処理のウェイトがあるね
数万回とかしない限りはGetTick()で差がない(1ms未満)から、普段使っていて気にならない程度なら平気かな
Gvとか特に気にしたい時は>>33


プレイヤーの攻撃距離もそれぞれの射程距離別に見ると厳密には菱形じゃなかったりする
■の部分がGetDistanceの距離で★が追加で届く距離(魔法の+1マス射程のような物)
索敵距離はホムがケミから10セル以内で活動する制限を入れれば画面外には出ないね
MoveをOnMoveとかに変えてOnMove内部で目的座標が10セル以内のみ移動する様に組むと楽

□□★□□射程1
□■■■□ 通常攻撃
★■ケ■★
□■■■□
□□★□□

□□□★□□□射程2
□■■■■■□ インベナム
□■■■■■□
★■■ス■■★
□■■■■■□
□■■■■■□
□□□★□□□

□□□★★★□□□射程3
□□■■■■■□□ 槍、ロングメイス他
□■■■■■■■□
★■■■■■■■★
★■■■槍■■■★
★■■■■■■■★
□■■■■■■■□
□□■■■■■□□
□□□★★★□□□

36騎士子さん :06/10/23 10:01
需要があるか不明ですが、フィゲルパッチ版汎用地図情報を更新してみました
http://sakage.main.jp/ro/mapbb/lua/maplua.zip
約2MB。解凍後は80MBになります'`,、('∀`;) '`,、

MAP名との対応は
http://sakage.main.jp/ro/mapbb/romaps.html
このあたりを参考にしてみてください

またMAPライブラリで使用されているBitmap画像でーた版は
いちおう中の人に送信させていただきました
ので中の人におまかせいたします( ・ω・)

37(○口○*)さん :06/10/23 10:39
うほwwwwおつかれさまwwwwwやらないかwwwww

38(○口○*)さん :06/10/23 14:38
>>2に載っていなかったので質問します。
エサを自動であげるAIを作ろうと思うのですがどこかに載ってますでしょうか?

39(○口○*)さん :06/10/23 14:39
そんなエサに俺様がクマー

40(○口○*)さん :06/10/23 14:44
>>38
あなたが見たはずの>>2の『■AIに関して、良くある質問は「Alchemist_Template の FAQ」に。』に、
『AIによって、ホムンクルスにどんな事をさせることができるの?』というものがあります。
そこに「えさを自動的にあげる」ことができると書いてありますか?
それが答えです。

・・・そういや前スレで、これはFAQテンプレにしようとか話題があったような記憶が。

41(○口○*)さん :06/10/23 14:53
>>30
んー、横殴り対策でホムや主人との相対距離を表示してるプレイヤーと比較するようなのを試したことがあって
それで町中はいったらまともに動かなくなったんでそれなりに負荷はあると思う。
まあうちのちょっと古いPCだしそういう無駄なことしなきゃそんなにきつくはないだろうね。

42(○口○*)さん :06/10/23 14:55
>>2の上2つは必読、くらいに書いておいたほうがいいかもね。
大抵の質問の答えはそこに書いてあるんだし。

43(○口○*)さん :06/10/23 15:25
2のリンクのうち、AlchemyNotesのアドレスは変わってるよ
新アドレスは
ttp://privatemoon.sakura.ne.jp/alc/hom_100.html

44(*○口○)さん :06/10/23 23:19
放置狩りスレのテンプレだけどケミテンプレにも細かく入れた方がいいかね・・・
http://enif.mmobbs.com/test/read.cgi/livero/1161343748/5

45(○口○*)さん :06/10/23 23:27
http://209.85.135.104/search?q=cache:e6n0L_S8E2cJ:a-cafe.seesaa.net/article/19095235.html+%E8%87%AA%E5%8B%95PP+BOT&hl=ja&gl=jp&ct=clnk&cd=1&lr=lang_ja&inlang=ja
既に消して逃げてるが、このブログによると自動エサやりができるAIがどっかで配布されてるそうだ
俺はこことネタ以外でそんなAIの存在を聞いたこと無いけどな

46(○口○*)さん :06/10/23 23:42
>>45
とりあえず、ROクライアントにその機能がない以上、まっとうなものじゃないのは間違いない。
ほうっておこうや。

47(○口○*)さん :06/10/24 00:20
>>45
すごい香ばしいなw
この手の重篤な中二病患者にありがちな、
自分が正義だと決して自論をゆずらないで賛同だけを欲しがるタイプ

48(*○口○)さん :06/10/24 00:35
>>41
それちょっと気になった
町中ってプロの露店街とかじゃない?
十字路とかだと軽く100人、過密鯖なら200〜300人位が居る事になって
mobとの距離をその全ての他PCと比較するなら相当なループ数になると思うけど・・・・

後はペットやNPC、他人のホムの区別とかも重要になるけど
画面内にmobが居なければループは普通、最低限の1回しか回さないはずだから
町中でラグるってどんな・・・・SelectActors.lua使ってる?

49(○口○*)さん :06/10/24 02:18
少しでもAIを軽くしようと考えているのですが、複数条件をandでつないだ時の処理について教えてください。
if a==0 and GetDistance(id,1d2)>0 then
--なんらかの処理
end
とやった場合、aが0じゃなかった時、GetDistance(id,1d2)>0 は判定されるんでしょうか?
もし判定されるのなら
if a==0 then
if GetDistance(id,1d2)>0 then
---なんらかの処理
end
end
こうやったほうが軽くなるような気がするのですがどうなのでしょうか?処理の工程は変わらないのかな?
実際は、複数の関数を並べたりしています。

50(○口○*)さん :06/10/24 02:32
とりあえず他の言語では前方にある条件が満たされない時点でendifに抜けていく場合が
多い。(なので最初に配列添え字の範囲を判定、後で配列(添え字)に関して判定、などができる)


要素数5の配列つくって、 aに6を代入して

if (a < 6 and 配列(a) == 1)

とか聞いたらエラーになるかどうかでわかるんじゃないかね。

51(*○口○)さん :06/10/24 03:47
>>49,50
andの前が偽であれば判定はされていないみたい

a, b = 5, 5
function GetA ()
    a = 99
return 5
end
function GetB ()
    b = 99
    return 5
end

に対して
1.if GetA() or GetB() then end
2.if GetA() ~= 5 and GetB() ~= 5 then end
の2つはどちらもaが99、bが5だった

52(*○口○)さん :06/10/24 07:36
ホムンクルスAIに関するアンケート
無事・・・では無いですが集計結果を公開しました。
アンケートへのご協力ありがとう御座いました。
http://himenomikoto.at.infoseek.co.jp/kulus_project/stat.html

>>36
ありがとうございます。
対応したMAP指定htaが出来次第ライブラリにも適用させていただきます。
それにしても80MBとは・・・アルナベルツ+αで100MB行ってしまいそうですね^^;

53(○口○*)さん :06/10/24 08:13
自動餌やりはAIじゃなくてBOT使ってるだけだと何度言えば(略)

ところでSelectActors.luaって重いの?
GVAIに入ってるからちょっと気になる
外したら軽くなるのかな?

54(*○口○)さん :06/10/24 09:59
SelectActors.luaは引数で渡された配列の中から特定の条件に合うIDの配列を返す関数群で
元々GetActors()に使うforループのif文条件が多量に羅列されて見辛いのをすっきりさせるのが目的

SelectActorsが呼ばれる度に引数の配列の要素数回ループが回り
引数の配列が2つの場合は要素数×要素数回になる
模擬的な例をざっと書くと

actors = GetActors ()
for i,v in ipairs(actors) do
    target = GetV (V_TARGET,v)
    if (target == owner or target == myid) then -- 通常
        -- 処理 --

actors = GetActors ()
myteam = {owner, myid}
for i,v in ipairs(actors) do
    target = GetV (V_TARGET,v)
    for j,w in ipairs(myteam) do -- SelectActors
        if (target == w) then
            -- 処理 --

の2つのどちらが処理、行程数が少ないか?って事で
先にあったand orの処理飛ばしもあって通常の物よりは処理が遅くなる
実際は2つ目のforループ部分は関数呼び出しになっていて、他に友達IDや
画面内に居るプレイヤーとの距離なんかでループ回数はどんどん増える

SelectActors.luaが出来た当初も、処理が飛躍的に増える可能性も指摘された(と言うか自分がした)けど
条件の絞込みを大まか>細かくの様に、最初の方で要素数の大半が減らせる様に組めば大丈夫そうって事で収まってる
けど、大まか>細かくの話が出たのは制作当初だけで特に注意書きもされてないので
その事を知らずに多数IDが配列に残り続ける様な組み方を誤ってするとかなり処理ロスが出る

GvAIで使われているのは多分両方同じ作者だからだと思うけど、どうしても処理の面で
見辛くても目的に特化されたループには敵わないから使わないに越したことはない

55(*○口○)さん :06/10/24 10:27
何か使っちゃ不味い感じに書いちゃったけど
実際に運用されてきた実績もあるし、大まか>細かくの点さえ注意すれば大した問題じゃないんだ
減らせる処理は限りなく減らして、高速化出来る所は限りなく高速化ってのじゃなければ
SelectActors.luaを使った方がメインの行動定義とかに注力出来て良い

ただ、個人的にはどうせ簡素化させる関数を使うなら
IsOtherPlayer (id) idが主人以外のPCなら1
IsOtherHomun (id) idが自分以外のホムなら1
とかループを含まない関数でif文を減らす方がシンプルで好き

56(○口○*)さん :06/10/24 11:21
往々にして、ささいな性能低下よりはメンテ性を取ったほうがいいからね。
しばらく触っていなかった部分を修整しようとして、読みづらくて苦労するってのはよくある話。

まあ、Gvだとそうもいっていられないのかもしれないけど。

57(○口○*)さん :06/10/24 15:57
******* IsPlayer警報 *******
JOBで横殴り防止しているAI使用者の皆様
新職到来です。ご注意下さいまし。

未確認情報ですがググると
24 Gunslinger
25 Ninja
で23 SuperNoviceの後にくるらしいです。
実装されてみないと正しいのか解りませんが
とりあえず <= 23 を <= 25 にしておいてもいいかも。

58(○口○*)さん :06/10/24 16:27
4049〜じゃなかったのか!残念。

5949 :06/10/24 17:17
皆様ありがとうございます。大変参考になりました。
今度から安心してandでつなげて書くことにします。
軽くするポイントは、v~=MyID などの、単純な数値の比較から書くのがよさそうですね。

60(○口○*)さん :06/10/24 17:18
4049ってソウルリンカーだよな

61(○口○*)さん :06/10/24 17:21
その通りよ

>>2のホムンクルス用ライブラリ配布所のplayerjobdata.luaはだいぶ前から対応してるぽいね

62(○口○*)さん :06/10/24 17:54
パッチ追ってみたけど、今日のごたごたは全部ハロウィン関係っぽ

癌「おい、ハロウィン用アイテムねーぞ」
動「え?wwwww」
癌「おい、今年はハロウィンやるぞ」
動「ちょwwwwまじ?wwwwww」

動「うp」
癌「ネ申」

癌「おい、ルティエの地面おかしくね?」
動「え?wwwww」
癌「おい、今年はハロウィンやるって言ってんだろボケ」
動「おkwwwwwwww」

動「うp」
癌「ネ申」 ←いまここ
俺「2006-10-24data_gm.gpfいらなくね?」

>>416
ぷそスレ思い出した件

6362 :06/10/24 17:55
どうみても誤爆です

64(○口○*)さん :06/10/25 11:38
わろたw

65(○口○*)さん :06/10/25 21:00
ODでよく狩りをしているんだけれど
よくホムが固まってしまうことがある・・・。
多分主人がタゲられた時、それを攻撃しにいこうとして動かなくなるみたいなんだけど

この解決方法がなにかないか思案中
既出だたらスマソ

常に上手く動かしたいなぁ(´・ω・`)

66(○口○*)さん :06/10/25 21:09
>>65
固まるって、いわゆる重力座標問題かな?
だとしたら、適当にケミorホムを動かすしかない。

ケミがたげられているならば、ケミが2,3歩歩けばクリアされるので、それで十分では?
ODなら、モノを拾うためにそれくらい動くでしょう。

67(○口○*)さん :06/10/25 21:47
>66
素早いレスが。
AIとして上手く機能できないか、考えてたものなので。
実際狩る分には問題ないですが
最近AIいぢくるのが楽しくてついつい色々やりたいと思いまして。

でも重力座標だから仕方がないですね(。_。

68(○口○*)さん :06/10/25 22:10
>>66
ちなみに、ケミじゃなくてホムを狙っている相手のズレにまつわる問題なら、自動回避できる可能性はありますね。

一定時間ATTACKしつづけても倒せないならば、重力座標にはまっていると判断。
その場合はあえて「大きく退避移動」する。そうすると、敵はホムを追って移動するので座標ズレが直る可能性がある。

この場合の問題点は、「一定時間ATTACK」という基準をどうするか。
mobdataを使って1行動あたりの敵へのダメージ期待値を求めて、そこから敵HPを倒せる分の攻撃をしたら・・・
とすれば確実なんだけど、これだと敵が本当に強い場合に待ち時間が増えるので危険。
まあ、いろいろ考えてみるがよろし。

6966 ==68 :06/10/25 22:10
Σ('-'つ)つ
レス番号変・・・自分にあててどーする(^^;;

70(○口○*)さん :06/10/26 00:09
パッチ着てから生体ですっごい重い・・・・
3〜4分おきにラグが来る。

71(○口○*)さん :06/10/26 01:55
>>68
待ち時間の間に一度でもホムの攻撃モーションを取得できたら
攻撃できてるって判断すればちょっとだけ効率良くなるかも

72(○口○*)さん :06/10/26 11:41
>>71
ホムは自分の攻撃モーションは拾えないはず。

「敵がダメージモーションを受けている」というのもひとつの参考にはなるけど、
共闘者がいるとうまくないですね(ホムは攻撃できてないのに、共闘者はダメージを与えている)

73(○口○*)さん :06/10/26 13:28
新職のホムID確認、>>57ので合ってる
24がガンスリ、25が忍者だった

74(○口○*)さん :06/10/28 11:32
どきどきAIをAlt+tで固定砲台にしたくて過去ログ見たけど
やり方がわからなかたorz
遠距離mob相手だと自殺しにいっちゃってるので…
ホムはバニルです。

75(*○口○)さん :06/10/28 15:20
>>74
どきどきAIの451行目を
function OnSKILL_OBJECT_CMD (level,skill,id)
    if (MyState ~= FOLLOW_CMD_ST) then
        MySkillLevel = level
        MySkill = skill
        MyEnemy = id
        MyState = CHASE_ST
    else
        SkillObject (MyID,level,skill,id)
    end
end
に変えればAlt+Tした後にスキル指示を出しても自殺しに行かなくなる
指示を出した後、そのままスキル攻撃し続けてくれる様な都合の良い改造はちょっと面倒なのでパス

76(*○口○)さん :06/10/28 15:24
追記
移動コマンドとかでも自殺しに行くと思うので>>75を参考に
OnMOVE_CMD (x,y)などをMyStateがFOLLOW_CMD_STの時に
MyStateを変更させないようにすればおk

77(*○口○)さん :06/10/29 12:45
質問なのですが、
ホムAIによるオートPPや自動餌やりツールなどというものは存在しませんよね?
釣るつもりは全く無いので存在の有無だけでも教えてほしいです。
うちの鯖板に上記2つは存在すると語る人間がいるので気になったのです。

78(○口○*)さん :06/10/29 12:51
>>77
ない。

79(○口○*)さん :06/10/29 12:55
ツールがあるっていうならAIに連動させてようがなんだろうがツール。
AI関係なくないか?

そしてそんなツールが存在するかしないかなんてわからん。
在ることは証明できても,無いことをは証明できないですよ。
その語る人にある場所を聞けばいい(が,まぁ,教えないだろうな)

ちなみにAIのみでエサやりは不可能。

80(○口○*)さん :06/10/29 13:55
オートPPは可能。既に実装して公に配布してるものもある。
AIアンテナで調べるといい。

餌は無理。
ただし某真っ黒なツールのモジュールとしてそういうものはあるそうだ。
AIとは全く関係が無い。「AIで餌やり」とか言ってる奴は↑を誤魔化してるか勘違いしてるかのどっちか。

81(○口○*)さん :06/10/29 14:27
ちょっと質問

何もさせないAIって作れますか?
エサやり用に狩り中も出しておきたいんだけど
配布されてるAIだとどうしても攻撃してしまうので…

82(○口○*)さん :06/10/29 14:30
Alt+T押す。

テレポのたびに押すのが面倒なら
デフォAIで一番最初にMyState=IDLE_STとなってるとこを

MyState=FOLLOW_CMD_ST

に書き換える。

83(○口○*)さん :06/10/29 14:55
AI.luaの中身をこう書き換える
全行削除して「function AI() end」だけを書き込む

コレで何もしないAIの出来上がり
移動もしないから適当に安全そうな場所に放置しておくといいよ
餌やりだけならホムウインドウからできる

画面外でもホムウインドウからの操作と安息、コールホム、リザホムは可能
ホムが死んだらホムウインドウが消えるからリザホムしてまた放置すればいい

自動追尾がほしいなら
function AI(myid)
local x,y GetV(V_POSITION,GetV(V_OWNER,myid))
move(myid,x+1,y-1)
end
を書き込む
これで常に主人の右下に居続ける

84(○口○*)さん :06/10/29 15:13
>> 83
配布AIの多くで「デフォルトは攻撃しない」設定ができるようになっているはず。
内部的には>>82氏のと同じような感じ。

85(○口○*)さん :06/10/29 15:20
んまぁ街中とかで露店中に使うだけなら>>83を自分で組んだほうが軽くていいけども

86(○口○*)さん :06/10/29 16:18
>>83
両方ともエラー吐いて落ちるな

87(○口○*)さん :06/10/29 16:25
だって机上論だもん。

88(○口○*)さん :06/10/29 16:33
>全行削除して「function AI() end」だけを書き込む
全角スペース混入

>local x,y GetV(V_POSITION,GetV(V_OWNER,myid))
= が抜けてる

このぐらい察してあげなよ。

89(*○口○)さん :06/10/29 16:50
--------------------------------------------------------------------------------
function AI(m)o=GetV(0,0)c=GetMsg(m)T=c[1]==9and -T or T A=(c[1]==1)and(Move(m,
c[2],c[3])or 1)or T<0or D(m,o)>9and t<1and Move(m,GetV(1,o))end T=1t=0function
D(x,y)e,f=GetV(1,x)g,h=GetV(1,y)return(e<0or g<0)and 81or((e-g)^2+(f-h)^2)end
--------------------------------------------------------------------------------
Alt+右クリで移動、Alt+Tでその場で待機

>>83,88
moveもMoveにしないとね

90(○口○*)さん :06/10/29 16:54
とはいえ、質問内容を考えると質問者のレベルじゃ解決出来ないんじゃないか?

ある程度わかるやつなら方法だけ読み取れればもんだいないけど

91(○口○*)さん :06/10/29 17:06
問題は、解決法分かってるのに「それじゃエラーになるだけ」としかフォローしない場合だろう。
だから「察してなおしてやれよ」ということだと思う。

92(○口○*)さん :06/10/29 17:07
まぁ本当に何もわからなかったら素直にAlt+Tしとけでしかない。

93(○口○*)さん :06/10/30 03:17
くだらない小ネタだけどさ。
アミストルでキャスリングを使ってケミを任意の場所まで運んでいくことができるよな?
例えば適当な座標指定してそこまで羊移動→キャスリング→羊移動→・・・って。

MAPデータとかが無いときっと面倒だけど、
ほっとくだけでプロのセーブポイントから道具屋まで連れてってもらったりとか
そういう愉快なことが出来るかな、とちょっと思ったわけですよ。

94(○口○*)さん :06/10/30 10:46
>>93
ホムってケミの画面外に行ったらAI関係なく停止(AI読み込まなく)ならなかったっけ?

もし、それできたとしても自分が歩いたほうが…
いや、溜まり場とかに羊だけ現れてキャスリンでケミ登場もできたら面白いが。

95(○口○*)さん :06/10/30 11:01
>>94
ケミの画面外に出たらホム動かなくなるけど
この動作だとホムが画面外に出ることは少ないと思う

面白いけどもこのネタは
SPの問題はあるとしてもケミ自動化としてちょっと危ないと思う

96(*○口○)さん :06/10/30 11:12
速度P→コールでプロンテラを爆走する事を夢見たのは自分だけで良い(ぇ

97(○口○*)さん :06/10/30 11:29
善意で忠告してあげていい気分のところ悪いが
なんでもかんでもタブーにしたがるなっての。
そもそも自動化するのはホムの移動とスキルだけだ。

>>94
半画面ずつぐらいしか移動できないからSPすぐ尽きるだろうけど理論的には可能。
あと溜まり場へのキャスリング登場は、一番外側にいるメンバーの可視範囲の外から
羊だけ先行させる必要があるから手動でやるしかない。

98(○口○*)さん :06/10/30 19:09
>>93
発想としては面白いけど、移動後になにできるわけでもないので、実用性は低そう。

まあ、95氏の危惧もわかるので、積極的な賛同はしかねる。
これを応用すれば、人間が一切操作しなくても「近くに敵がいなかったらケミ自体を移動」という動作ができる。
すなわち、現状ですらよく問題にされる「定点放置狩り」どころか「無人での移動放置狩」ができるわけで。
放置狩の是非はともかくとして、BOTと変わらんといわれるのが目に見えてるわけで。

99(○口○*)さん :06/10/30 19:20
やっぱ問題はそこに行くなー。
でも羊で放置狩りするケミの割合を考えるとそんな心配しなくてもいい気がする。

移動後何も出来ないがとりあえずWP超えは出来るんで
パターン組めば数マップまたいで移動も可能っちゃ可能ではないかな。
SPが絶対的に足りないので休み休みの超鈍足だろうけども。

100(○口○*)さん :06/10/30 19:39
そこで青PPですよ。

そんな大金積んでまで放置したい人がいるかどうかはシラネ

101(○口○*)さん :06/10/30 21:00
これは狩りとかじゃなくてアレだ、
「ホムが勝手に連れてってくれるんだぜ」
「羊かっけー BS消してケミ作ろうかな」
「メンタルリーフ消して羊作るwwwwwww」
という会話をするのが最大の目標だと思うんだ

102(*○口○)さん :06/10/30 22:52
      ∠Y"´゛フ     
      ;'ゝ ゚,,ェ゚ )  
     ゛;(ノ   ';)     
     ヾ,;'   ';
      ''∪''∪

103(○口○*)さん :06/10/31 13:49
まぁいいんじゃね、羊だし

104(○口○*)さん :06/11/02 10:05
楽しいルードのIDわかる方います?
こういうモブIDとかってどうやって調べるんだろ…?

105(○口○*)さん :06/11/02 10:10
>>104
出先なのでチェック不能。調べ方だけ書いておきます。

TraceAIで、敵のIDを表示するようなものを入れ込んでおく。
普段はTrace Offしておいて、楽しいルードを見かけたらTraceOnすればいい。

106105 :06/11/02 10:12
あ、ごめん、ちょっと舌足らず。

GetActor() で取れる敵のIDを、
GetV(V_HOMNTYPE,敵ID)とすることで、敵種類のIDが取れる
これをTraceAIね。

107(*○口○)さん :06/11/02 10:22
>>104
楽しいルード
1812

108(○口○*)さん :06/11/02 10:28
あぁぁー!なるほどー!!
思わず納得しました;
TraceAIを使うわけですね…こんな使い方があるとは思わなかった。
1812っすね、即レスありがとうございました。

109(○口○*)さん :06/11/02 18:40
限定mobだからあんまり意味はなかろうが
楽しいルードのV_HOMUNTYPEは 1812 だな。

110(○口○*)さん :06/11/02 18:41
ってリロードしたらかぶりまくった。はずかし

111(○口○*)さん :06/11/02 21:00
>>108
むしろTRACEAIってのはそういう風に使うのがメインだと思うよ。

112(○口○*)さん :06/11/05 15:09
忍者とガンスリ横殴りしないようにはどこいじるんでしたっけ?

113(○口○*)さん :06/11/05 15:43
>>112
何のAI使っているかで変わるからそういう漠然とした質問はしないこと。
物によっては弄らなくてもいいものもあるし。

114(○口○*)さん :06/11/05 16:35
>>57
>>60
>>61
>>73

ここら辺に書いてある。これで分からなければどのAI使ってるか
提示するしかあるまいよ。

115112 :06/11/05 18:11
すいませんでした、きちんとログ見ればよかったです
AIは工体を改造してつかっております
リンカーとテコンの時どこいじったか忘れてしまってましてm(__)m

116(○口○*)さん :06/11/05 19:00
テコン系のIDを調べなおして、それでソースコードを検索すればいい。

117(○口○*)さん :06/11/05 22:07
>>115
自分で手を入れる場合、どこに手を入れたか分かるようにコメントを工夫しておくといいよ
できればいついじったか、どういう目的でいじったか、が一発で検索できるように。
もっと言えば、いじる前のバックアップも弄る度に取っておけばなおよろし。

118(○口○*)さん :06/11/05 22:14
今更だけどプレイヤーの判定ってIDじゃなくてHOMUNTYPEで判別してるAIって多いのか。
ID10万以上でプレイヤーってことで判定すればいいんじゃないのかなー
自作のはそれで特に不都合ないし間違いもないはずなんだけど。もしくは二重化とか

119(○口○*)さん :06/11/05 22:43
>>118
PvやGvを意識した場合、職業をある程度見なければならない、ってのがあるのではないかと。
狩りだけなら、プレイヤーの職業はほとんど無視してかまわないってのには同意。

120(○口○*)さん :06/11/06 00:26
対人用に行動を分岐させるってことか。なるほど。

121 :06/11/06 01:02
フィゲルモンスターのIDがわかるHPってありますでしょうか。
コンスタントっていう自爆するモンスターのIDを知りたいのですが。

122(○口○*)さん :06/11/06 01:05
狩場情報ひっそりのmob管理ID(mob詳細情報のURL等)がROのを
そのまま使ってるっぽい。

123(○口○*)さん :06/11/06 01:41
悪魔型のほうの早くて弱いコンスタントはないみたいだな。
キルハイルクエ中に調べられるが俺はまだベース足りなくてむりだ。

124(○口○*)さん :06/11/06 01:51
0MATEさんのAIを使い始めて早数ヶ月。
毎日少しずつ遊んで、週末頑張って、そんなおいらのホムも昨日とうとう進化することが出来ました。
シンプルだったけどホムがおいらの周りをくるくるまわったのがとてもうれしかったです。
ホムも少しずつ強くなってきて狩りのスタイルが変わり始めてきたので、もう少しだけ細かい設定が出来るAIにお嫁にいきます。
今日までありがとうございました。

125(○口○*)さん :06/11/06 03:58
当人のサイトに書いてあげたら?

126(○口○*)さん :06/11/06 05:34
これまでに自力で調べたID。間違ってても知らない。
X_ついてるのが経験値ないやつ(取り巻きとかイベント用)

1733 キエル(キルハイルイベントのほう)
1734 キエル-D-01(キルハイルD2FのMVP BOSS)
1735 エリセル
1736 エリオット
1737 エリザ
1738 コンスタント
1739 X_エリセル
1740 X_エリオット
1745 X_コンスタント
1746 X_エリザ
1751 ランドグリス
1752 スコグル
1753 プルス
1754 スケゴルト(茶)
1755 スケゴルト(青)
1761 X_スコグル
1762 X_プルス
1763 X_スケゴルト(茶)
1764 X_スケゴルト(青)
1765 ランドグリスゴースト(単体でいたやつ。取り巻きゴーストは別IDかも?)

127(○口○*)さん :06/11/07 08:26
デフォの自動戦闘しないAIで十分使えるんだが、そんな使い勝手悪いかなぁ?

128(○口○*)さん :06/11/07 09:19
デフォAIが昔のから変わらないのなら、回帰機能が少し遅かったような・・・
でも、デフォで十分って人はデフォでいいと思う
共闘殴りのみで、あとは殴らないで欲しいって人もいるし、
いろんな動きを見せて欲しいとか、少しでも攻撃速度を上げたい(ラグ出るけど)って人もいる
要望は使いたい人の分あって、それに答えようと、いろんな人が、頑張ってAI作ってる
その中で、自分にあったAIを使うってのが幸せじゃないかな?飼い主としてもホムとしても
その中でも127さんは、デフォAIがいいなぁ って思ったってことじゃないかな?

129(○口○*)さん :06/11/07 16:05
こっこAIに自動PP組み込んで多分断り無く再配布してるところを見つけた。
しかもよりによってえmy鯖のギルドページときた・・・。('A`)
こういうのってどこにどう通報すればいいんかね?

130(○口○*)さん :06/11/07 16:40
>>129
こっこの中の人にチクる。あとは中の人次第。

131(○口○*)さん :06/11/07 16:53
こっこの人が実装すれば解決


ってか、こっこの人もそんなキチガイ相手したくないだろう。

132(○口○*)さん :06/11/07 17:05
直接相手にしなくても、レンタル鯖管理人なりプロバイダなりに
著作権違反されてると訴えればいいんじゃね?
自分だったらそれするのも面倒くさくて放置しそうだけど。

133(○口○*)さん :06/11/08 01:16
まー作者に連絡入れておくのが妥当じゃないかな

134(○口○*)さん :06/11/09 00:57
公にチクったらキチンと対応とらないといかんくなるからね。
チクるならコソーリちくれよ

135(○口○*)さん :06/11/09 02:39
>>134
もう遅いような気もしたけど、>>129がチクる/チクったとは一言も
言ってないからOKか。

136(○口○*)さん :06/11/09 15:27
お前らそんな公にちちくるなんてエロいな

137(○口○*)さん :06/11/10 02:33
くまの人、生きてるんだろうか・・・・・

一通り実装し終わって開発側も飽きてきたのかな
他AIも更新停滞気味な気がする

138(○口○*)さん :06/11/10 02:40
更新って例えば何更新するん?

139(○口○*)さん :06/11/10 03:02
そろそろ煮詰まってきてもう更新しようにも
追加するものが無くなってんじゃないの。

140(○口○*)さん :06/11/10 07:21
くまの人は本当に不在っぽいけどね。
なにしろ、自分の質問BBSへの回答もできてないし。

まあ各AIとも、それぞれ更新が止まってるのは事実。
作者レベルで機能面でほぼ満足ってことなんじゃないかな。

141(○口○*)さん :06/11/10 10:10
作者の趣味と好意でやってるだけだし延々サポートしてやる必要もないとは思うな。
俺はそんな面倒なのはとてもできそうもない。

142(○口○*)さん :06/11/10 10:56
追加機能はほぼ出尽くしたんじゃないかな。
そうすると次はスリムアップ・シェイプアップか。

機能を残したままどこまで軽く出来るか。
使用者制作者両面からのメンテナンス性の向上とか。

143(○口○*)さん :06/11/10 18:01
やることやり終わったから更新する気力がわかないだけだと思います
狩り機能はだいぶ充実してきましたし、
残る追加機能はホムAIに魂を宿らせるくらいですからね

テーブルを昇順に並べたり二分探索したりする処理作ったんでライブラリ作ってみました
ttp://www.h2.dion.ne.jp/~uzu-kobo/ai/empty.lua

中身の簡単な説明は安っぽいAIのブログにて
色々無駄な機能も添付してるんでお遊びにどうぞ

144(○口○*)さん :06/11/11 00:50
AIがバージョンアップしたときの差分というか、自分が設定した項目を
チェックしたり比較する際にフリーソフト「Folsa」「Rekisa」を使用しているんですが、
使っている人いますか?

あぁ、この部分を改良したのかとかすぐわかって結構便利なんですけど、
「もっとイイのあるぞ」とか有ったら教えてください。

145(○口○*)さん :06/11/11 01:40
コメントいれる。これ最強

---< 2006/10/15 人避け機能追加  変更(S)>--------
---< 2006/10/15 人避け機能追加  変更(E)>--------

146(○口○*)さん :06/11/11 15:35
MOBに対してホムがFAを取るとアイテムをすぐ拾えなくて、
本体がFAを取るとすぐ拾えるのですが、
アクティブに対しても主人が攻撃するまでホムが攻撃させないようにする
修正は可能でしょうか?
現在使用中なのは工体AI修正版です

147(○口○*)さん :06/11/11 16:53
主人だのホムだのをターゲットにしている敵を対象とする部分を
ごっそり削って、主人がターゲットにしているものだけを対象にすればいいです。

まぁFAとられてもケミが与えるダメージ量によってはDROP権を奪えるけども。

148(○口○*)さん :06/11/11 17:09
補足すると具体的にはailib.lua内のSearchEnemy関数、903行目から924行目。

  if Settings.USE_MONSTER_PRIORITY then
    ParseActors( myid, GetActors() )
  end
---------中略---------
        return enemy
      end
    end
  end

この部分を削除なりコメントアウトなり。
return 0 は消したらだめね。

149(○口○*)さん :06/11/11 18:29
先制とっても与えたダメージがホムより少ないと拾えないと思ったけどどうだっけ?

150(○口○*)さん :06/11/11 18:41
>>149
その通り。
俺は本体かなり手抜きなので先に殴ってもしょっちゅう拾えない。

151(○口○*)さん :06/11/11 19:05
>>149-150
ちょっとまった、FAボーナスがあるから与ダメがホムより少なくても
ケミ≒ホムなら負けないはず。
はっきりケミ<ホムなら負けるけど。

152(○口○*)さん :06/11/11 19:34
メタリンとかだと往々にしてケミ<<ホムになる場合があるね。
メタリンに武器剥ぎやられてそのまま素手で殴ってたり、ホムの攻撃力高くてFAのみで
既にDROP権もっていかれてたりで。

まぁ今回の場合、ホムにFAとらせたい、っていうことだから
メタリン育成あたりは卒業してるだろうけど

153146 :06/11/11 20:14
ご返事ありがとうございました
148さんので完璧でした
ちなみに主人93のAGI=STR ホムは80のバニル
これくらいだと主人がFA取れば間違いなくドロップ取得できるようで

154(○口○*)さん :06/11/13 19:51
AI配布してる人達の中で一人だけ異色の方向目指してるのが居る気がする
ホムAIで人工知能でも作る気なんだろうか………

155(○口○*)さん :06/11/13 19:53
最近どのAIも更新が無くて寂しいな
とは言っても他につけて欲しい機能もないんだよね
俺は工体修正版で満足しちまってる

新しいAI出るのをwktkしながらまってた頃がもう懐かしくなり始めてるw

156(○口○*)さん :06/11/13 20:58
通常の狩りに欲しい機能はもうほぼ揃ったしなぁ
大幅なアップデートでも無い限りは、ほとんど更新はないだろうな

157(○口○*)さん :06/11/13 21:44
回線がやばい俺は、機能最低限で軽いのがいい。
前に作ったのシェイプアップするかな

158(○口○*)さん :06/11/13 22:05
>安っぽい人
ROのluaにはtableモジュールが組み込まれてません。

重力の中の人 : table外したらバグ消えた\(^o^)/
とかそういうレベルな気がしてしょうがない。

159(*○口○)さん :06/11/14 02:40
>>154
ゲームの一要素に傾倒しすぎってならわからんでもないが
AIの和訳が人工知能だから別段おかしくはないじゃない?
一般的な意味合いでの人工知能はROでは実現不可能でも
広義の意味では携帯の予測変換とかも人工知能の一種だしね

過去の戦闘で主人が優先して攻撃した敵を優先するとか
よくある戦闘計算機の計算式を使って通常、スキルの使い分け判断とかは
何百といるmobに一匹ずつ設定するよりはよっぽど便利だしね


>>158
それはブログに書いてやれ とも思ったがまぁ直ぐ気づくか・・・
table無しの初出は3月か・・・・当時の賑わいが懐かしいなぁ

160(○口○*)さん :06/11/14 05:04
>>159を見てAIが何の略か分からなかった俺ガイル

161(*○口○)さん :06/11/14 07:46
>>160
自分も調べるまで何の略かまでは知らんかったよ
ttp://ja.wikipedia.org/wiki/%E4%BA%BA%E5%B7%A5%E7%9F%A5%E8%83%BD

既存の人工知能の概念や技術の一部でもホムAIに適用できれば・・・・とは思うけど
時間や労力と実感出来る効果はトレードオフになるだろうから
”ホムを楽しむ”と言う点では程々にしておかないと、AIばっか弄ってて本末転倒になりかねない
まぁプログラム弄ってるだけで楽しいのなら何もいう事は無いけどね(自分も割りと楽しめる派

162(○口○*)さん :06/11/14 13:59
>>157
一定時間過ぎるまで何も処理をさせないようにすると大分軽くなりますよ

AI一回転の速度でそのままIDLEやActerを繰り返すのが重いので、
体感で遅れを感じない程度まで時間制御させると回線に送るパケも抑えられます(昔出たMove送りすぎない処理の応用です)

>>158
サンクスです
テーブル操作の処理が欲しくなったら自作しかなさそうですね
|||orz

163(○口○*)さん :06/11/14 14:34
GetActorsとかステ取得はタイミングごとにグローバル変数に取得して参照させようかと思ってるけど
基本のやつからいじったのだけで不都合ないから骨組みから作り直すのがたるくてやれないなー
軽くするなら色々手はあんだろうけど

164(○口○*)さん :06/11/15 11:40
皆はAI弄る時には何使ってる?

自分はElNote使って弄ってるんだけど、
Ver.Upされたの拾ってくると弄ってある前のファイルになるじゃない?
Ver.Up入れて、それから自分の弄ったので上書きすれば良さそうだけど
羅列が微妙に変わってたりして不都合がでるのか不安なんだ。

そんな訳で自分の指定した文字だけ色の変わるテキストエディタってないかな?


・・・・スレ違いだったらスマンorz

165(○口○*)さん :06/11/15 11:52
winmergeはどう?
ttp://www.geocities.co.jp/SiliconValley-SanJose/8165/winmerge.html

166(○口○*)さん :06/11/15 13:59
俺は基本サクラエディタだな
色設定は昔配布されてたやつを付け加えたり減らしたり
一時的に検索文字列をハイライトさせたりもできるし

バージョン変わったときの差分はDFってツールで見てる
まず古いやつと改造したのを見比べて自分で付け足したところに色つけて見えるようにしてから
古いのと新しいのを比べながら付足し直してる

167(○口○*)さん :06/11/15 14:24
秀丸。
もう10年近く使ってて馴染み深い。
今じゃ珍しくもない機能だがマクロとか強調とか正規表現での検索置き換えが楽だ。

168164 :06/11/15 14:29
>>165,166,167
情報ありがとうございます。

一応無事?Ver.upできました。

169Glenelgの人。 :06/11/15 18:35
エディタは『構造化エディタ基本』『追跡などでどうしても困ったら秀丸』って感じで併用しています。

構造化エディタはエディタとしてはちと弱いのですが、
「コンパイラ/インタプリタを妨害せず&ユーザーがマークアップを意識せずに、
 ソースコードを論理的に構造化編集・表示できる」
という点で、非常に味があります。
正直非常にマイナーなエディタですが、効果は劇的なので、興味があれば。

170(○口○*)さん :06/11/15 20:42
もうちょっとわかりやすい言葉で頼む。

171(○口○*)さん :06/11/15 21:27
私は基本メモ帳オンリー、バグ取りで行数見たり、余分なendや足りないendを見る時にSciTEですね
メモ帳でメモリが足りないとワードパット使ってます
あと、同じ文字をパターン変換したい時もワードパット
でもワードパットは使い辛いので可能な限りメモ帳オンリー

Verアップの時の差分比較は同じファイルをメモ帳で複数起動、たまーにDF使ってます
メモ帳が一番シンプルで使い易いです
いくつかのエディタも使ってみたけど、独特の追加された機能がかえって煩わしくて使い辛いので
シンプルイズベストです

172(○口○*)さん :06/11/15 21:33
>>170
このエディタのことだと思います
ttp://www008.upp.so-net.ne.jp/momotan/sted.html

見たところ、関数や処理のブロックごとに分けて表示出来るみたいですね

173Glenelgの人。 :06/11/15 21:39
>>170
言葉でいうと非常にわかりづらいので、実際に現物を見てもらったほうが早いです。
ttp://www008.upp.so-net.ne.jp/momotan/index.html から。

Glenelgのソースリストをこれで見ると、判りやすいです。
#最近、秀丸ver6でも似たようなことができるようになってますが。

174(○口○*)さん :06/11/15 22:13
>>144のやつ俺も使ってる。
なにげに便利、エディタはさくらを関連づけてます。

175(*○口○)さん :06/11/16 00:46
>>171
( ・∀・)人(・∀・ )

Meか2k辺りのメモ帳からメモリ不足も無くなってステータスバーに行数列数表示
置換、○行へ移動等、必要な機能もあるし見た目スッキリしてて気に入ってる

176(○口○*)さん :06/11/16 04:25
MEの メモ帳は メモリ不足に なる
MEは98と性能変わらん

177(*○口○)さん :06/11/16 11:11
ホムンクルス用モンスターデータライブラリmobdata.lua
http://himenomikoto.at.infoseek.co.jp/kulus_project/index.html#mobdata.lua

遅くなりましたがフィゲルパッチ分追加しました。


今回既存mobの取り巻きに当るペアorトリオ系ID等の同名異種IDが多数追加され
各所で情報に差異がある為、データはそれらしい物を適用して随時確定次第修正します。


12月の4thアニバーサリーに伴いクリスタルの出現が予測されます。
ver.2006/11/16においてクリスタルのIDを追加しました。
該当ver以前の物にはクリスタルが登録されていませんのでご利用の方は更新お願いします。

参考
クリスタル4種ID:1395, 1396, 1397, 1398

178(○口○*)さん :06/11/16 14:04
>>17
乙〜

179(○口○*)さん :06/11/16 14:05
ぐわ、ミスった
>>177
と労いたかった

180horo :06/11/16 14:59
私もAI作り始めたのでお試し頂ければと思います。(テスト版0.1)
ちょっと一味違った処理系なのでご興味があればお願いします。
ttp://plaza.rakuten.co.jp/horoRAG

181(○口○*)さん :06/11/16 15:29
> 基本的には女性にも簡単に使えるよう、可能な限り設定無し、
> 可能な限り効率良くを目的に作っています。

女性は馬鹿扱いか! 精神的苦痛の慰謝料を! ←なんてヒステリックな集団に絡まれてもしらんぞw

182(○口○*)さん :06/11/16 15:31
女性にも〜 のくだりは不適切だな

せめて 機会音痴の方でも〜 だ

183(○口○*)さん :06/11/16 15:46
フェミニズムは性差別と紙一重なんだぜ!

184(○口○*)さん :06/11/16 15:49
>>180
垢ハックアドレスかと思った。
内容がそれに酷似してるし…


あと、自動PPを組み込んでいる以上(デフォがOFFでも)、
周囲の風当たりが強くなる事を覚悟しておくように。

185(○口○*)さん :06/11/16 15:54
女性=機械オンチ
引き籠もりの童貞君の発想にはよくあること

186(○口○*)さん :06/11/16 16:02
そして音痴は身体能力を理由にした差別語だとPC原理主義の言葉狩りに叩かれ

187(○口○*)さん :06/11/16 16:23
>185
その発想自体が…(プ
なんだけどw

いやなんでもない

188(○口○*)さん :06/11/16 16:34
最近ずっと停滞ぎみなので新AI登場にwktk

189horo :06/11/16 17:23
>せめて 機会音痴の方でも〜 だ
なるほど、次回のリリース時には修正します。

190(○口○*)さん :06/11/16 17:29
>機会音痴の方でも〜

個人的にはこれもちょっとどうかと思うな。
相手の欠点を配慮してあげてますよ、みたいな雰囲気は
製作する上では問題ないが他人に説明する場合は不快に感じる人も居るだろう。

・初心者にも簡単に〜
・誰でも導入しやすいように〜

このあたりが妥当じゃないかな?

191(○口○*)さん :06/11/16 17:37
もう開き直って

・馬鹿でも○ョンでも使えるように〜

とかにしてしまえ

192(○口○*)さん :06/11/16 17:39
>horo
ageんなsageろボケ

193horo :06/11/16 17:43
こりゃ失礼。

まあ、文面に関しては考えます。

194(○口○*)さん :06/11/16 18:01
自動PPを正規機能と考えているならこそこそせずに堂々と実装して欲しいな

195(○口○*)さん :06/11/16 18:03
PPと風当たりの話題が出たから便乗して質問。

今自分専用で作ってるAIで
ムーンライトまたはカプリスLv2をショートカットから適当な相手に使用した場合
ホムに向けて紅ポを投げるという処理を入れてるんだけど
公開するなら、この機能まるごと削除しておく方がいいかなやっぱり

196(○口○*)さん :06/11/16 18:09
自動PPとは違う・・・けど、ケミ側のスキル操作してるから何とも言えないかもね

おなじくムーンライトまたはカプリスLv2を手動で使った場合、
ALT+右クリックと同じ動作をするような処理を突っ込んでる。
咄嗟に敵のタゲ取る必要があるときに重宝してたりしてなかったり。

197(○口○*)さん :06/11/16 18:10
>>195
自動PPは人によって白・黒・グレー、判断が違う。
ガンホーは今のところこの件については何の判断も示してないが、万一黒としてなんらかの手を打ってきた場合、
被害を受けるのはAI開発者自身。
AIをDLしただけの使用者も損害を受ける可能性はあるが、これもAI開発者に跳ね返ってきたっておかしくない。

自分で判断できないってことは、たぶんグレーor黒と思っているんだろうから、止めたほうがいいと思われ。
自己責任ってのはそういうものだ。

198(○口○*)さん :06/11/16 18:22
癌からの正式な発表が無い限りやったもん勝ち。
公式見解が発表されて禁止になったらやめればいいだけ。
んで、HPで公開するなら「使用の際は全て自己責任で」と一言書いておけばいい。

199(○口○*)さん :06/11/16 18:29
おまいらそのくらいにしとけ。

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

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

200(○口○*)さん :06/11/16 18:34
>>196-199
ありがとう。
とりあえず余計なトラブルの種は潰しておくことにするよ。

201(○口○*)さん :06/11/16 19:43
ドロップ系アイテム活かす為にトドメをさす1発前で攻撃止めるAIとかないでしょうか?

202(○口○*)さん :06/11/16 19:53
敵のHPが見えない
与えたダメージが見えない
攻撃が当たったか見えない
自分が攻撃したかどうかすら分からない
よって現状知られてる限りの方法では求めているものは無理

○○って言う敵には××秒間攻撃したら離れるって処理は可能だけど
それを目的に作られたAIは知ってる限りではないね

203(○口○*)さん :06/11/16 21:02
工体はプラグイン開発しまくる前に104を出してくれないかな

204(○口○*)さん :06/11/16 21:51
>>201
敵に何発まで攻撃する〜ってのは可能だけど
ホムがミスった時もカウントしちゃうし敵のHP見れないんで大雑把にしかできない

205(○口○*)さん :06/11/16 22:12
なおかつ主人と共闘するケースだと尚のこと
いつ止めたらいいのかサッパリだな。

時間経過でAS止めるAIを流用して攻撃を止めるようにすれば
まぁまぁ使えるかもしれない程度だね。

206(○口○*)さん :06/11/17 00:52
うーんやっぱ難しいんですね
自分で確殺数覚えておいて1ボタンで攻撃止めれるようにしとくぐらいかな。

207(○口○*)さん :06/11/17 12:46
こっこにそういう機能無かったっけ?

208(○口○*)さん :06/11/17 23:09
>>207
AS止めるのはある。
ちょっと改造すれば攻撃も止められると思う。

209(○口○*)さん :06/11/18 00:31
ホムは95%HITが限界なので確殺カウントをAI側でやるのはほぼ不可能だと思うよ

210(○口○*)さん :06/11/18 00:38
と否定はしたものの
攻撃スピードをAI側で極端におとして、敵のダメージモーション取得とかやれば実装は出来るかもねぇ
まぁ>>201が望む結果は、普通に攻撃して最後メマー叩き込むのが一番現実的だとは思うけど

211(○口○*)さん :06/11/18 17:13
安息ってAIから使用できますか?
出来るならGvやPv時に忍者がちかよった時に強制安息するような
AIを追加しようと思うんですが

212(○口○*)さん :06/11/18 17:20
>>211
やってみればいいじゃない。なぜ訊く必要があるね?

213(○口○*)さん :06/11/18 17:22
>>211
ケミスキル使用の話はやめれ。(>>1,119)
そもそもできなかったと思うけどね。

214(○口○*)さん :06/11/18 17:42
× >>119
>>199
アンカーミスってた。orz

215(○口○*)さん :06/11/18 18:46
スルーすりゃいいのに正義を盾に強気なことで

216(○口○*)さん :06/11/18 18:54
>>215
スルーすればいいのに。

217(○口○*)さん :06/11/18 21:48
>>211
出来るよ。
いいアイデアだけど思うけど、WPくぐった先に水あったらアウトだし
素直に出さない事をオススメしとく。

218(○口○*)さん :06/11/19 10:34
ホムAI以外はプログラムなんて触った事無い者ですがおききしたいことがあります。
こっこAIの寝落ち防止機能の部分で
local timestamp = os.time()
local ownerMotion = GetV(V_MOTION,MyOwner)
ExitEvent = function()
local ownerMotion2 = GetV(V_MOTION,MyOwner) -- 主人のモーションが同じ時間
if ownerMotion ~= ownerMotion2 then
ownerMotion = ownerMotion2
timestamp = os.time()
ExitCheckTime = GetTick()
return
end
というのがあり、これはケミの状態が指定時間同じだったら終了すると解釈したのですが
これを改造して、ホムが指定時間、攻撃中「以外」の状態ならCVを使うという風にしたいと思いました。

状態の判定は
ownerMotion ~= ownerMotion2 then
ownerMotion = ownerMotion2
の部分でしているのだろうなと思ったのですが、これでなぜ判定できるのかがわかりません。
「~=」は左辺と右辺が同じではない、そして「=」は左辺に右辺を代入する という意味なのだと思いこんでいるのですが、全然違うのでしょうか?

また、ホムが攻撃中「以外の状態」の時間をはかりたい場合、どのように書き換えればいいのでしょうか。

言いたい事が伝わりにくいと思うのですがどうかよろしくお願いします。

219(○口○*)さん :06/11/19 11:48
ヒント:>>1

220(○口○*)さん :06/11/19 12:40
>>218
>「~=」は左辺と右辺が同じではない、そして「=」は左辺に右辺を代入する という意味なのだと思いこんでいるのですが、全然違うのでしょうか?

この認識は正しい。その認識通りに読めば、この部分が
>これはケミの状態が指定時間同じだったら終了する
・・・という処理でないということは判るはず。


つーか、こっこAIってCV対応してるんじゃないの?
そっちの設定での動作で納得いかない?

221(○口○*)さん :06/11/19 14:01
すみません、やっときわ親達成してこっこAIでSBR連射してるんですけど
戦闘開始後数秒たったら奥義連射をやめてしまうんです。
倒すまで連射するようにするにはどこか設定しないといけないんでしょうか?

222(○口○*)さん :06/11/19 14:08
>>218
もうちょっと下まで続いてるでしょ?

if os.difftime( os.time(), timestamp ) >= ExitLimitTime*0.9 then  -- 制限時間の9割超えたら
  MyState = ALERT_ST -- 常にアラート状態になる
end
if os.difftime( os.time(), timestamp ) >= ExitLimitTime then
  os.exit()  -- 終了
end

この部分まで含めて考えてください。
--終了 というコメントの入ってる部分で判定・クライアント終了させてます。どういうことかというと
ownerMotionには直前の主人のモーションが入り、ownerMotion2には現在の主人のモーションが入ります。
「現在と直前を比べて続けて変化が無い」という時間が長く続けば「クライアントを落とす」という判定につながります。
その時間はtimestampで記録しています。つまり

if ownerMotion ~= ownerMotion2 then  -- 主人のモーションが変化していたら
ownerMotion = ownerMotion2      -- 主人のモーションを更新
timestamp = os.time()       -- 時間のカウントも更新

という意味です。つまりモーションに変化がなければtimestampは更新されないので、
変化しなくなった最初の時間を常に保持することになります。
ExitCheckTimeはこの関数全体を呼び出す周期を制御しているので
ここでは考えません。次に

>if os.difftime( os.time(), timestamp ) >= ExitLimitTime then

os.difftimeというのは()の中の二つの数の差をとる関数です。
os.timeが「現在の時刻」なので、timestampと現在時刻の差はExitLimitTimeより大きいかを考える部分です。
条件が成立すればos.exitでクライアントが終了するという仕組みです。
よって、同じ条件で別のことをさせたかったらos.exitのところを書き換えてやればOKです。
ただし、CVは未テストながら実装されてる?ということなのでそっちも試してはいかがでしょう。
マニュアルには書いてないみたいですが。

>>221
マニュアルよく読んだほうがいいですよ。
たぶん自動AS停止が働いてます。

223(○口○*)さん :06/11/19 14:29
>>222
ありがとうございます。StopAS = trueになってました。
昨日まで奥義狩りしてなかったので失念してました。

224218 :06/11/19 15:03
>>222
とても詳しくてわかりやすい説明ありがとうございます!
先入観で「~=」の比較部分を勝手に条件だと思い込んでました。
更新するためのものだったのですね。

そして自分で「=は代入」と書いておきながら
「=」はじゃなく「==」的な意識が強かったのでよけいに混乱してました。

CVについてはこっこが不満なのではなく、単にAIが理解できないもどかしさと
AI理解できたらそういう指定もできるかなと思っただけでした。

ありがとうございました。

225(○口○*)さん :06/11/20 18:23
こっこ使われすぎワロス

226(○口○*)さん :06/11/21 01:06
俺は工体だな
横殴り回避機能が他のより信頼できる

227(○口○*)さん :06/11/21 12:40
突然失礼します。
過去ログも一応見てきたんですが、どうしても見つからず;


最近になってGvにホムを使用するようになったのですが、
今まで通常狩りでは、くまーAI、を使用していました。
効果的には何も問題なく使わせて頂いているんですが、
やはりGv時には重くて動けなかったりしてしまいます。
色々とGv用AIというものも調べてみたのですが、やはり万人が使用している
といったAIは見つかりませんでした。


Gvでホムを使っておられる方にお尋ねしたい。

軽いAI使用されていますか?
もしよろしければ、どのAIなのか教えて頂きたいです。

228(○口○*)さん :06/11/21 13:30
軽いかどうかは使ってないのでわからないですが
Gv用AIとしてオープンに公開されているのは、
テンプレのAI研究室>サンプルライブラリにリンクされているGvAI配布所のAI
あとは安っぽいAIの中にも同梱されていますし、もうひとつくらいオープンなGvAIがあったと思いますが、
それ以外ですと、やはり非公開での開発ということになりますね。

229(○口○*)さん :06/11/21 17:49
こっこの人もGV用AI配布してたはず
AIダウンロードページの一番下だったような

軽量化については安AIの人が大分前から色々試してたみたいだからそれなりの蓄積はあるんじゃないかな
ただ安AIのGV用AIは本人が配布サイトのBBSで雑誌付録みたいなオマケ扱いだと言ってた気がする

色々試してみてしっくりくるのが良いんじゃないだろうか

230(○口○*)さん :06/11/21 19:34
メジャーなAI開発者に何故かGvやる人が居ないんだよな。
あとはGvって一口に言っても鯖によって環境がまちまちだし
所属ギルドやケミ本人によって役割が全然違ったりと、”配布AI”としてはかなり柔軟な対応が
必要になってくるのでなかなか簡単に作れるもんじゃないんじゃないの?

あと開発して配布しだしたらそれはそれでサポートが大変なので、
特にこんな”人それぞれ”による部分が大きいGv用AIなんてかなり扱いづらいと思う。

231(○口○*)さん :06/11/21 19:57
227です。
レスありがとうございます。


今度のGv中にそれぞれ使い比べさせて頂こうかと思ってます。
くまーAIさんを前回使用させて頂き、臨戦状態・先攻型にしてたんですが
近くまで相手キャラが近づいて来ず、ホムが攻撃してくれるか未確認状態です;
ガーディアンとエンペには登録によって攻撃しようとはしなくなりました。
・・・が、重すぎて敵が来てもホムも主人もスキル攻撃するどころではなく;
あとはもうどれだけ軽いかです。

やはり一言にGv用AIと言っても難しいようですね。
AI開発者様に頼ることになってしまいますが
いろいろと試して自分に最適なAIを探してみたいと思います。
ありがとうございました。

232(○口○*)さん :06/11/21 20:00
Gv用だと後はrhapsoGvAIかな
AIは軽い程良いけど、機能とトレードオフになってしまうし

function AI(m) end

とだけ書いた何もしない最軽量AIですら主人が身動きできなくなる鯖や状況もある
通常狩りのAIと違って、GvでAIを使う人にもサーバやネットワーク、AIに関する知識が無いと
いざGvへ出陣して動けなくなった時、困るのは自分だし場合によってはギルメンにも迷惑を掛ける

過去何度も言われているけど、Gvで有利になるAIを一般に配布する人はGvをやっていない人だけ
Gvをやっている人なら身内や同盟でしか共有しないし、対抗に有利になる技術や情報も出さない
加えてGvでは万能ではなく特化が求められる事が多いから万人が使うAIってのも無い

知り合いにプログラムかAIに詳しい知り合いを見つけて作ってもらうか自分で詳しくなって作るのが一番良い
Gv用AIを使うのは自分なのだから実際に作るのも自分(ないし知り合い)だけど作る上での助言位はココで得られるよ

233(○口○*)さん :06/11/22 12:00
ソースコードの大きさでのトレードオフは無いはずですよ。
重いAIは必要以上にコマンドを送り過ぎているんです。

234(○口○*)さん :06/11/23 10:46
トレードオフになる機能は、必ずしもソースコードの大きさだけに反映される物じゃない
詠唱妨害とか等速追尾とかエンペ殴り等、行動を伴う全ての機能が重さに直結する
Gv中は一部コマンドからのID取得が出来ないから、妨害対象や攻撃対象はAIが自分で見つけないといけない

エンペのIDは撃破ごとに変化するだろうからGetActors()で探さないといけないし、詠唱中のキャラも然り
只でさえ処理に負荷が掛かる状態でループを回せば重くなるのは当たり前
プロの十字路位のキャラが止まって居るんじゃなくて動いている
その分パケットが通り難いのも仕方の無い事

ついでに言えば厳密にはソースコードの大きさでのトレードオフもある
AIのデータをメモリ上に読み込む(起動後ファイル削除しても動く)のだから
友達リストや要人リスト他、読み込む物が多ければ多いほど負担は増える(他より目立たないだけ

235(○口○*)さん :06/11/23 20:34
>234
それは素人の発想だな!

236(○口○*)さん :06/11/23 21:36
>>235
よくわからないんだけど、>>234のどこらへんが素人?

237(○口○*)さん :06/11/23 21:40
>>235
なんか根拠示さないと理解してもらえないよ

238(○口○*)さん :06/11/23 21:44
GV用の話題みたいなんでGVでホムを使ったことある俺の感想を

安っぽいは狩り用の簡易版が一番軽く、GVの砦内でもほとんど重くならない…が、
狩り用だとガーディアンしか殴らない
安っぽいのGV用はずっと更新してないせいか狩り用よりやや重い
といってもほかのAIよりはずっと軽く感じた
あとALT+Tで優先して殴る相手を変えられるがめんどくさい上に位置ずれに弱い

ケミテンプレにあるGV用は俺が知ってる範囲では一番軽い
MOVEコマンド削ってる固定砲台型だから回線の負担も少ないし実績もあるから動きが洗練されてて安定してる

こっこはGV用があるの知らなかったから使ったことない

一番は配布されてるやつを基盤にして自分で必要な機能いれるのがベストだと思う
まぁGV用探してるなら参考までに

239(○口○*)さん :06/11/23 21:44
とりあえず言ってみたかっただけとみた!

240(○口○*)さん :06/11/24 03:15
GVな流れが終わったようなので質問させていただきます。

現在テンプレのLua/Sampleにある「寝落ち対策」をEXIT_TIME = 1200にして
使わせていただいてるのですが、寝落ちの判定に条件を付け足したくなりました。

よく草むしりや卵狩りをするのですが、エサをやりながら
のんびりWEB巡回したりしていると、ケミを移動させないと当然終了してしまいます。

なので
1200秒の間ケミが動かない場合 かつ、ホムが300秒の間、1度も攻撃状態にならない場合にRO終了。
という風にしたいです。

狩場では寝落ちすることはないのですが、街では寝落ちしそうになることがあるのでこうしたくなりました。
ホムの条件の時間を短くしているのは街でも枝などで戦う可能性があるので時間は短いほうがいいと思いました。


自分でAI書こうと試行錯誤してみましたが、さっぱりわからず、寝落ちの条件を考えるのが精一杯でした。
どなたか書いていただけないでしょうか。

長文失礼しました。

241(○口○*)さん :06/11/24 05:17
function ExitEvent()
 do
  EXIT_TIME = 1200
  EXIT_TIME2 = 300

  local x, y, timestamp, timestamp2 = -1, -1, os.time(), os.time()
  ExitEvent = function()
   MyOWNER = GetV(V_OWNER,MyID)
   local x2, y2 = GetV( V_POSITION, MyOWNER )
   if x ~= x2 or y ~= y2 then
    x, y = x2, y2
    timestamp = os.time()
    return
   end
   if MyState == ATTACK_ST or MyState == CHASE_ST then
    timestamp2 = os.time()
    retuen
   end
   if os.difftime( os.time(), timestamp ) >= EXIT_TIME then
    if os.difftime( os.time(), timestamp2 ) >= EXIT_TIME2 then
     os.exit()
    end
   end
  end
 end
end

適当にやっつけてみたがこれでいけると思う。

242(○口○*)さん :06/11/24 05:32
おおおーー!
こんなに早くありがとうございます!
早速試したいのですがまだ会社で残業中なので帰ったらすぐに使わせていただきます。

243(○口○*)さん :06/11/24 05:55
すげー残業時間だな。w

244(○口○*)さん :06/11/24 06:16
夜に仕事してる人なんだろう

245240 :06/11/24 07:10
帰宅したので早速使わせていただきました。

読み込むとエラー表示がでました。
AI.lua error
./AI/USER_AI/AIlua:3042: `=' expected near `end'

エラーの意味はわからないのですが
3042行目は

if MyState == ATTACK_ST or MyState == CHASE_ST then
timestamp2 = os.time()
retuen
end

の最後のendの部分でした。

246(○口○*)さん :06/11/24 08:05
よくよんでないからわからんけど
×:retuen
○:return
スペルミスでないの?

247241 :06/11/24 08:06
うん、ごめん。単純なスペルミス。

× retuen
○ return

248240 :06/11/24 08:31
( Д ) 予想GUYです。

素で気付かずに、せめてエラーの意味を少しでも理解して解決に近づけようと
「`=' expected near `end'」を翻訳かけたりググってみたりしてました。

returnにしたらしっかり動きました!
動作も自分の想像していた状態にバッチリです!
ありがとうございました。

余談ですが複数の条件つけるときはIFの中にANDで入れてやればいいのかとか
ホムの状態はGetV(V_MOTION,MyID)のほうでやるのかとか思ってて
ここで質問するまで
if ( MOTION_STAND == GetV(V_MOTION,MyID) and os.difftime( os.time(), timestamp ) >= TELP_TIME ) then
とか無茶苦茶なこと書いて試してました。

色々勉強にもなりました。本当に感謝感謝。

249(○口○*)さん :06/11/24 08:40
>>248
スペルミスによって本来
timestamp2 = os.time()としてからreturnすると言う処理が
timestamp2 = os.time() (改行) retuenとする処理になってしまって
timestamp2 の値がありえねぇぞコラ!!って言われたという事だと思う

250(○口○*)さん :06/11/24 14:03
>>248
エラー文はパーザ(構文解析器)の処理の過程で出すから、実装の仕方に
よってはああいうわかりにくいものになる。
エラー文は答えではなくヒントだと思って、その周辺を探すしかないよ。

以下、かなり突っ込んだ解説をするので読み飛ばし推奨。

Luaはコードを順番に読み進めていくときに、該当部分でこのように判断する。

1.retuenは予約語ではない
Luaの構文(>>2のリファレンスの末尾)を見ると、文(stat)はこう定義されている。
>stat ::= varlist1 `=´ explist1 | functioncall | do block end | (以下省略)
(この表記法については「BNF記法」でぐぐってほしい)
この中で最初に予約語以外が来るものは、一番最初の代入文と二番目の関数呼び出しのみ。

2.だからretuenは変数や関数の"名前"(Name)だ
ここで関数呼び出し(functioncall)の定義を見てみると、
>functioncall ::= prefixexp args | prefixexp `:´ Name args
>prefixexp ::= var | functioncall | `(´ exp `)´
>args ::= `(´ [explist1] `)´ | tableconstructor | Literal
・・・わかりにくい。要するに
var(args)
var{a,b,c} -- テーブルコンストラクタ
var"string" -- リテラル
これに加えてtable:var()形式の呼び出しも定義してある。

でも、
3.retuenの次には()も{}もリテラルもないから関数呼び出しでもない
4.じゃあ変数かな?

>varlist1 `=´ explist1
varlist1の中身を知るまでもなく、'='が続かないとこれに当てはまりようがない。
そしてもう、ほかに適当な文法が存在しない。
だからretuenの次には'='が来なければ文が成立しない。

というわけで
Lua:次は '=' だと思ってたのに 'end' が来たぞ(゚Д゚ )ゴルァ!!
というエラーになる。

251(○口○*)さん :06/11/24 14:08
>2.だからretuenは変数や関数の"名前"(Name)だ
この行を入れる位置がなんかおかしい。orz
1.の直後に脳内補完してください。

252(○口○*)さん :06/11/24 15:41
>Gv用AI

自作AIマジおすすm
うちのはGvフラグや狩場の場所でいくつかモードフラグ作って挙動を使い分けてますよ

無駄にパケを送らないので攻撃中に何度も長時間のラグが来ない限り
行動不能→鯖缶はありません

ただEMCの瞬間だけはどうにもならないですね・・

253(○口○*)さん :06/11/24 17:47
>>249-251
そんなにretuenretuen連呼されると俺がすごい恥ずかしいじゃないですか

254(○口○*)さん :06/11/25 01:04
自動PPはタブーで寝落ち対策はいいの?

255(○口○*)さん :06/11/25 01:58
結局荒らしたいだけなの?

256240 :06/11/25 02:53
ちと県外に遠出してて今帰宅しました。寒かったけど串カツうまかった。

>>249
returnはこっこAIの説明とかだと「-- 何もしない」となってたので
処理は何もしないんだなとスルーしてました。前にあるtimestamp = os.time()
returnとも何度も見比べた癖にスペルに気付かなかった自分も恥ずかしい限り。

>>250
エラー表示についての詳しい解説ありがとうございます!読み飛ばしなんてとんでもないです。
今後もAIのエラー表示とは長い付き合いになっていくと思うのですが
プログラミングを学んだ事のない自分には処理の流れという基礎的な知識がないので
そういう基礎的なことほど説明してるサイトが見当たらなくて気になってました。
例えば他にもifは条件なんだろうけどifを中に重ねていってる文だとどれから順に処理されていくものなのかなぁ?とか疑問に思ってます。

自分自身では何か解決のヒントが得られないかと「`=' expected near `end'」をテキスト翻訳にかけてみたりしてましたが
翻訳結果は「'終わり'頃に予想された'='」だったので、「endの前後に=が入るはずだぞ!」みたいなもんかと思って
「でも=ってAIじゃイコールじゃなく左辺に右辺を代入するだけの意味っぽいし何の関係があるんだろ?」と思ってそこで思考停止してました。

BNF記法をググってからLuaのリファレンスを見て、わからないなりに理解しようとしてみました。
NBF記法で定義された形式にあてはまらない、そして他に関数の可能性もない、
そして「retuenの次には'='が来なければ文が成立しない。」ってのは
retuenを「retuen=〇〇(左辺retuenに右辺〇〇を代入する)」って場合なら文として成り立つので
つまりendの直前であるretuenがretuen=〇〇だったら成り立つから
「`=' expected near `end'」というエラー表示になったってことですかね。
謎が解けてさらに勉強になって嬉しいです。

>>253
むしろretuenのおかげでエラー表示の意味の勉強になりました。

激しく長文失礼しました。

257(○口○*)さん :06/11/25 05:31
>>254
どちらかと言われれば同じグレーソーン

258(○口○*)さん :06/11/25 05:40
グレーソーンが何かは知らんがグレーゾーンだとは思う。

259(○口○*)さん :06/11/25 06:40
自作AI、軽さと機能の両立が難しいですね
私も防衛、攻め、レースと状況によって使い分けを考えてますけど
週1回なので試行の機会も少なく未熟者ゆえ完成まではまだ遠い・・・

260(○口○*)さん :06/11/25 07:31
自作AIのGvデビューでいきなりガーディアンに特攻自爆かまして同盟を爆笑の渦に巻き込んだ私が来ましたよっと。
後から何度見なおしてもそんな設定した形跡はなかったのになぁ?

それ以来AD連れていって貰えるようになったりソロしてると支援職でわざわざ飛んで来てくれたり皆が妙に優しい・・・

261(○口○*)さん :06/11/25 08:49
いい仲間を持ったな、次こそエンぺルームでドカンだ!

リロードあと何時間残ってるのかは知らないけれど。

262(○口○*)さん :06/11/25 08:53
>>260
はじめはカプリスあたりと差し替えておいて入念にテストするといいんだぜ

263(○口○*)さん :06/11/25 15:15
>GvAI
>>230にも通じることですが、GvAIは諸刃の剣

相手に勝つために相手がされたら嫌な行動パターンを考えているのに、
それを相手に使われたら身もフタもない訳でして
AI組める人がある程度のレベルになったら配布する訳ないんですよね

うちのもまともに動くようになるまで1ヶ月近くGv潰しましたorz

264(○口○*)さん :06/11/25 17:42
いま配布されてるAIの作者はみんなGv参加してないんだっけ?

265(○口○*)さん :06/11/25 18:27
ネタアナウンスの為にレース行ったり、AIのGvオプションの為にデバッグに行ったりする程度で
所謂Gvギルドの様な真面目なGvをやっている訳じゃないと思う

266(○口○*)さん :06/11/25 18:52
特に今は忍者スキルがホムに対しては凶悪すぎるからギルド内専用でGv用AI作ってるけどケミ系はコート役とPP役になってる。
ホムに餌やりながら露天してると時々スイトンだっけ?それ使ってくる忍者いるし(効果ないけど)あんまり出したくは無いかな。

と、思うガス吹きバニラともうすぐガス吹くラム肉持ち。

267(○口○*)さん :06/11/26 01:15
AIはアイデア勝負

本気でGvやっててAI作れる→配布しない
GvやってなくてAI作れる→Gvで役に立つAIが配布されない

今出てるGvAIの性能を見る限り、こういう状況としか思えなす

268(○口○*)さん :06/11/26 01:40
初歩的な質問で申し訳ないのですが、モンスターの種別IDを調べたところ、
たとえば、1016 アーチャースケルトン のほかに 1420 X_アーチャースケルトン
というのがありますよね。この両者の違いは一体何なんでしょうか。
また、AIに書き込む場合、どちらを使うべきなのでしょうか。

269(○口○*)さん :06/11/26 02:39
Xとか付いてる方は何かの取り巻きだったり闘技場のだったり
経験値やドロップが抜かれているデータ。念のために両方書いておくといいと思う。

270(○口○*)さん :06/11/26 03:22
>269
教えていただいてありがとうございます。
怨霊武者、ヤファなどもXつきがあるみたいですがイベント用のMOBとして
区別している、ということなんでしょうね。

271(○口○*)さん :06/11/26 06:26
>>144
私はsubversion(tortoiseSVN)使ってる。
とはいえ導入したのは最近なんで昔のソースはもう掘り出せないけど。

272(○口○*)さん :06/11/26 07:37
GvAI配布所のAI使ってますが
固定砲台としては何の問題もないですね。
若干の重さはどうしようもないけど。

これを弄らせてもらって普通に敵キャラきたら追いかけて攻撃したいんですが
AIの知識のない自分には何が何やら・・・
最近になって学び始めたけど、ほんと0からのスタートですよ。

そんな自分でもこのスレを楽しみにしている。

273(○口○*)さん :06/11/26 11:32
ホムンクルス用ライブラリ配布所のmobdata.luaについて教えてください
現在工体AI使用でいま配布されてるmobdata.luaにしようとおもいDLして
工体用変更点というのもきちんと設定したつもりなんですが
いままで先行攻撃してたモブに一向に攻撃してくれません
変更点ではailib.lua内の

-   return table[id] and table[id][mv]
+   return GetMobData2( mv, id )



-           if v[ M_V_NAME ] == name then
+           if v == name then


2点を変更すればよいとありましたが
-のところを削除して+の行と置き換えということでいいのでしょうか
これでやっているのですが・・・

274(○口○*)さん :06/11/26 14:57
>>272
慣れてきて知識がついてくると過去スレが宝の山に見える
実際自分も後から見直して色々得た物が多いから
過去スレをいつでも見れるようにブックマークしておくのをオススメ

275(○口○*)さん :06/11/26 20:27
すいません、質問させてください。
リーフの癒しの手を自動で動かそうとAIを組んでいるのですが、うまく動きません。
主人にヒールしようと以下のAIを組み込んだところ、発動しませんでした。
SkillObject (MyID,MySkillLevel,MySkill,OwnerID)

試しに、ホム自身をヒールしようと以下のAIに変えてみましたら、自分に回復が出て主人が回復しました
SkillObject (MyID,MySkillLevel,MySkill,MyID)

ホム自身やパーティメンバーを回復させるにはどうすれば良いのでしょうか?
何か、根本を勘違いしているのでしょうか
行き詰まってまして、解説をお願いします。

あと、PCのV_HOMUNTYPEなどの様々な情報をまとめているサイトがありましたら教えていただけませんでしょうか
ケミテンプレを見たのですが、乗っていないような気がしました

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

276(○口○*)さん :06/11/26 20:33
>>275
>自分に回復が出て主人が回復しました

これは仕様みたい。
で、このスキルは主人以外を回復させることは出来ない。
ホム自身やPTMなどはどうがんばっても無理。

それから
>PCのV_HOMUNTYPEなどの様々な情報をまとめているサイト

これはAI人力アンテナ

277(○口○*)さん :06/11/26 21:11
>>273
+ - は只の目印だから後に続く行を置き換えていればそれでいい
mobdata.luaはバージョンアップごとに中のデータが少しづつ修正されているから
DEF/MDEFで攻撃手段の変更、Lvで〜系の設定は変わっている可能性がある(名前も
後、名前で指定は出来るだけせずに配布所の名称一覧からIDを指定した方がいい

>>275
AI研究室>コマンドの仕様>Lua/GetV (関数 GetV()関連)
http://alchemist.s214.xrea.com/index.php?Lua%2FGetV

278(○口○*)さん :06/11/27 01:12
ありがとうございます。
癒しの手が聞かないのは悲しいですが、結論が出たので、それで組んでみます
ありがとうございました

279配布所の人 ◆g37UcEp//g :06/11/27 17:10
>>272
あれには移動やタゲ固定の仕組みは全く入ってないから
もし追加したいのであれば自分で仕組みを作って根本から追加しないとダメですね
この行をこの行に書き換えて〜のレベルではちょっとむずかしいです

時間かかりますけど移動ありのバージョンも試験的に作ってみましょうか
軽さが犠牲になる可能性がありますが
なんだかんだいって需要は高いみたいですし
期待せずにお待ちを

280(○口○*)さん :06/11/28 00:54
どうでもいいことだけどSkillGroundって未実装くさいね

281273 :06/11/28 01:46
遅くなりました>>277さんありがとうございます
名前よりID指定の方がいいのですか、そっちでやってみます

282272 :06/11/29 12:50
>>279 配布所の御方。

す、すみません偉そうな事を書いてしまって;
GvAI、本当に重宝させて頂いています。
今まで重くて同期落ちも激しかったホム使用Gvが
ほとんど気にならないレベルまで軽くなって、しかもちゃんと攻撃してくれる。
自分でAI作成できない私には涙モノです・・・。

移動ありバージョン、もし作成されるなら是非使ってみたいです。
重くなることは重々承知しておりますが、それでもやはり期待してしまう・・・。
心の片隅で楽しみにしております。

283(○口○*)さん :06/12/03 19:05
          ∠Y"´゛フ 
       ⊂ ;' ゝ’,,ェ)つ- 、 俺様がいないと保守も危ないな
.      ///   /_/:::::/   とりあえずジャルゴンちょーだい
      |:::| ⊂⌒ヽノ|:::| /」
.    / ̄ ̄旦 ̄ ̄ ̄/|
  /______/ | |
  | |-----------| |

284(○口○*)さん :06/12/03 19:47
>>283
ttp://privatemoon.sakura.ne.jp/alc/ai/manual_other.html#mohu

これで遊んでろ

285(○口○*)さん :06/12/04 19:15
くまーの人 半年近くBBS放置だなぁ
サポート受けられないこと考えると今はくまーよりこっこの方が初心者にはおすすめなのだろうか
こっこ
工体AI私的修正版
Glenelg
安っぽい
玉蟲
初回限定
この辺がまだ更新続けてるな
昔みたいな更新ラッシュはもう無いだろうが、これから各AIがどんな個性を持っていくかちょっと楽しみだ

286(○口○*)さん :06/12/04 19:19
工体AI私的修正版はMobデータとか細部の更新するのみだから
本質的な部分は更新してると言い難い気がする。

287(○口○*)さん :06/12/04 19:28
んじゃ元気なのは私的修正版を抜いた5AIか
初回の人もやる気なくなってるらしいし、Glenelgの人も日記見たらなんか今の時点で満足してきてるみたいだし
そうなるとこっこ、安っぽい、玉蟲の3AIが機能増えていくのかな

288(○口○*)さん :06/12/04 21:52
配布AIのダメなところばかり取り上げて叩きまくってるサイトないですか?

289(○口○*)さん :06/12/04 22:31
俺のAIはすごい!他のAIは××だけど俺のは○○だ!××を否定するわけではありませんが^^ってサイトならあるが

290(○口○*)さん :06/12/04 22:34
>>288
その発想は無かったわw
余程の言いがかりじゃない限り逆に製作者の手助けになると思うから
誰かやってみてもいいかもな。とりあえず>>288とかが。

>>289
誰だよw

291(○口○*)さん :06/12/05 01:31
対象の足元をクリックすると友達登録、というのは出来たんですけど
自分の足元をクリックすると画面内に居る人間全員を友達登録ってのは出来ないでしょうか?

292(○口○*)さん :06/12/05 02:04
>>291
質問の意図をもう少し明確にしてくれ。
出来る、出来ないで言えば当然出来る。ていうかそっちの方が簡単なくらいだ。

もし足元クリックで登録が自分で実装できたと言うのなら
画面内全員を友達登録の理屈がわからないわけがないと思うんだが。

293(○口○*)さん :06/12/05 02:05
バニルミルトでくまAIを使わせてもらっているんですが、なんだかバニルの通常攻撃があんまり早くないような気がして。。
ASPDが高いわけでもないので気のせいだとは思うんですが、よかったらくまAIで通常攻撃の設定について
おしえていただけないでしょうか。すみません、よろしくお願いします。

294(○口○*)さん :06/12/05 02:11
自動エサやりの方法をおしえてください

295(○口○*)さん :06/12/05 02:19
>>292
失礼しました
なにぶん他人のAIを多数複合して作っているものですから
足元クリックで友達登録はMOVE_CMDを受けたときそこの位置にGetV( V_HOMUNTYPE, id )をして
何かいるか、または人かどうかを判断しています

ただ、画面全体のキャラのIDを取得というのが・・・

>>294
存在しません
AIで出来ないことの一つです
詳しくは
http://enif.mmobbs.com/test/read.cgi/livero/1162107261/6

296(○口○*)さん :06/12/05 02:42
>>295
画面全体のキャラ(NPC,Mob含む)のIDを取得するにはGetActors()
ちなみにハイド等していて見えない人も登録してしまうだろうから注意

297(○口○*)さん :06/12/05 02:49
>>295
かなり大雑把にいうけど、GetActors()した後プレイヤーのIDだけテーブルに移して
それを全部上書きでリストに書き込めばいいんじゃね?

ぶっちゃけ特定の1キャラだけを友達登録する処理の方が複雑だぞ

298(○口○*)さん :06/12/05 02:58
>>295
継ぎはぎするのは悪くないが、本質的なところを理解しといたほうがいい。
どうやら足元クリック登録の仕組みも把握してないようだから根本的なとこから言う。

>MOVE_CMDを受けたときそこの位置にGetV( V_HOMUNTYPE, id )をして

言葉を間違えてるのかもしれないけどこの説明がまずおかしいので理解してなそうに見える。
基本的に座標を元に「何か居る」かどうかを見つけるためには、

1. 画面全体のキャラ(PC、Mob、NPCなど含む)のIDを取得
2. 全体のIDリストを順に調べて行き、条件に該当するIDを絞り込む

というプロセスがある。この場合具体的には2が、
『「MOVE_CMDを受けたときそこの位置」と同じ座標を持つID』という条件に当たる。
友達登録などの場合は、更にその該当IDがプレイヤーかどうかを判定したいので
GetV( V_HOMUNTYPE, id )などをするのだろう。

で、じゃあ画面全体のPCをリストに加えたかったらどうすればいいかといえば
話はこれよりかなり単純になる。

つまり2の条件がいきなり「プレイヤーかどうか」になればいいだけの話。
breakとかで抜けない限り、IDの走査は最後まで続くので
条件に該当するIDがある度にリストに追加していけばいい。
ただし、この時既にリストに登録されてるかどうかのチェックを怠ると多重登録しまくる可能性があるんで注意。


ここまで言って出来ないようならソース貼るか
同じこと出来るAI探してやっぱり継ぎ接ぎすればいい。

299(○口○*)さん :06/12/05 03:13
似た機能のAIから継ぎ接ぎが一番早い気がするけど、
これを機会にエラーと戦いながらジックリAIと付き合って徐々に理解していくのも悪くないんじゃないかな
しっかり理解した上で継ぎ足すのと、なんとなくの理解で継ぎ足すのとじゃ
機能の組み合わせの広さやエラー除去のスピードが段違いだから

もしAIにこだわりたくなったらどんどんここで質問するといい
よっぽど初歩的だったらきついこと言うが、そうでもなければ分かる範囲でアドバイスするから

300(○口○*)さん :06/12/05 04:16
>288
自分が使ってるAIの気に入らないところばかり書くというのはどうだろう
気に入って使ってるものでも長く使ってれば不満もあるはず

301(○口○*)さん :06/12/05 11:18
>>300
分かってねーな、自分で気づいてる不満だったらとっくに直してるっつーの

ただ自分の視点だけだと進化が行き詰まりやすいから、
他の視点からアラ探ししてもらって進化のヒントを見つけたいとか
そんな感じ

302(○口○*)さん :06/12/05 14:33
流れに乗ってこっこAIについて。

・set.luaの設定UIがwebベースで、ちょっと設定を変えたいときに不便
htaにでもすれば既存のset.luaを読ませられるだろうけど、パース部分作るのが
めんどくさそう。
現状だと手修正するにもタゲ優先順位設定などが非常に困難だから、
AI.luaのようにコメント豊富なset.luaを吐くことでも負担の軽減が可能。

・IgnoreMobなどのID指定がコメントを入れられないためにメンテしにくい
set.luaと同じくUIの問題でもあるけど、どのmobが指定されてるのか
まったく直観的にわからないのが難点。
簡単な変更としては、io:read("*n")使えばひとかたまりの半角数字ごとに
(数値型で)読んでゆくから、半角数字以外を全てコメントと見なせるようになるはず。
もっとも半角数字を含むmob名が存在していてそれがトラブル要因になりうるから、
それを回避したいなら(行指向の)コメント記号を定義してstring.findとstring.subで
切り出す必要がある。

・更新履歴が他の発言に埋没して、探すのに一手間
「更新履歴」でページ検索すればいいけど、一手間には変わりが無く。

あれ、思ったより不満が少なかった。
ありがたく使わせて頂いておりますホント。

>>301
それは「自分が使ってるAI」じゃなくて「自分が作ってるAI」じゃない?

303horo :06/12/05 14:42
まだテストバージョンですが良かったら。
http://plaza.rakuten.co.jp/horoRAG
一括登録とかは今週末のバージョンでサポート。
今はフィーリルだけですけど。(0.4でリーフ実装)

304(○口○*)さん :06/12/05 14:49
>>302
なるほど、人に叩かせないで自分で叩けって意味ね。

305(○口○*)さん :06/12/05 17:29
現行ケミスレ101巻より

516 :(^ー^*)ノ〜さん [sage]:06/12/05(火) 17:19 ID:pBT+txLo0 sage
鯖あいたんで鳥で奥義狩りしてたんだけど、
以前に比べてaspdがありえない速さになってたんですがそんな症状でたかた他にいらっしゃいます?
升かってくらい速く感じたのでアワアワしてしまいまして。
ちなみにこっこAI使ってます。
517 :(^ー^*)ノ〜さん [sage]:06/12/05(火) 17:23 ID:sEWLezeR0 sage
私もこっこAIで同じ現象が起きています。

ものすごいはやさだ・・・
518 :(^ー^*)ノ〜さん []:06/12/05(火) 17:23 ID:o35dhqsX0
自分も鳥で奥義狩りしてみたらおかしな速度になっていました。
自分もこっこAIつかっております
519 :(New) (^ー^*)ノ〜さん [sage]:06/12/05(火) 17:26 ID:OjSGeAM80 sage
AI変えて変わらないなら作者のところで聞いてきたら?
520 :(New) (^ー^*)ノ〜さん [sage]:06/12/05(火) 17:27 ID:i96zDqKg0 sage
鳥奥義やばいな…
今まであった、ASPDによるモーションディレイも無くなったみたいな感じ

らしい。何か鯖のほうでかわったんでしょうか?

306(○口○*)さん :06/12/05 20:49
>>302
Set.luaなんだけどあれって別にWebページで編集しなくても
ファイル開いて該当箇所の値を直接変更すればおkなんだよ。
デフォルトで全部定義したあとにSetで再定義するっていうすごい冗長なことやってるに過ぎないんで
極論を言えば例えばアクティブを初期状態にしたいだけだったら
Set.luaってファイル作ってActiveFlag = true だけ書いとけばいいのよ。
機能に対応する変数とかは全部マニュアルに書いてあるし検索すれば問題ない。
まぁコメントも同時出力したほうがいいねってのは同意。

あとMob登録系だけどあれってコメントの区別はできると思うんだけど
例えばゲーム中での登録操作でコメント入れるにはMob名とかのデータベースを付けないとだめだよね。
AI.lua一本でやるには厳しいと思う。編集ページの方ではコメント出力することは可能だと思うけども。

307(○口○*)さん :06/12/05 21:19
>>306
>ファイル開いて該当箇所の値を直接変更すればおk
それはわかってるからこその「せめてコメントを」っていう要望。

ただそれだとUI作った意味が半減で、set.luaの内容をwebにコピペでも
いいからロードできるようにしないと価値が低いってこと。

言い方を変えれば「もっと設定変更が容易なUIがほしい」。

>コメントの区別はできる
もしかしてtonumber()の時点で文字列消えるとかで、今でも文字書き込んで大丈夫?
コードぱっとみて、mob名をメモ書きしたら破綻しそうだなと思ったんだけど…。
でもコメント記号があれば、一時的に対象外にするとかをやりやすくていいかも。

ゲーム内操作で名前を吐けっていう要望ではないよ。
自由記入欄がほしいってこと。

308(○口○*)さん :06/12/05 21:20
>>293
攻撃ディレイの設定をいじればいいだけじゃ?
おれもくまーAI使ってたけど1に設定してたかな。よく覚えてないが。


流れぶった切ってすまんが。
上の方で話題に出てたんで先週のGvで初めてホム使ってみた。
GvAI配布所さんのAI使ってみたけども普通に使えた。
・・・が。
敵が来た瞬間にホムが起動しだしたのか、本体ケミが動かなくなってしまって
ホムは攻撃するもケミは一歩も動けず敵素通り。

これはどうしようもないのか・・・。
教えてください、詳しいお方。

309(○口○*)さん :06/12/05 22:07
それこそ攻撃中に起こるってことなら攻撃ディレイの値をいじってみるとかどうだろう?

Gv中だと鯖の状態によっては普通に入力してるだけなのに
タイミングが速いと先行入力になっちゃって後の入力が消えてたりするし

遠くをクリック->動かないので近くをクリック->動き出したのでさらに遠くをクリックとかすると
一旦始めにクリックした場所へ行ってから戻ってきてまた動き出すやつ

ホムの命令もケミの行動と同じ扱いだからホム命令が鯖応答より早いとどんどん予約が溜まって
後から入力したケミの行動が全部立ち消えになってるのかも

310⊂(*'ω')⊃ :06/12/07 00:38
編集系のUIが圧倒的に弱いことは自覚してるんですが
なにぶん色々素人なので設定ツールも作れなければWeb編集ページも満足にできません…。
どういうの勉強すればそれっぽいの作れますかね?(n'ω'`)

エディタツールとして配布すると更新のたびにそっちも更新してDLしなおしてもらわないとならないので
Webページで編集っていう手は悪くないとは思ってるんですが、現在の設定をロードするのがわからず
今の形になっちゃってます…。どっかに流用しやすい雛形があればそこから改良するんですが…。

>>307
>それはわかってるからこその「せめてコメントを」っていう要望。
入れてみました。タブ表示が出来ないのでごちゃごちゃしちゃいましたが…。

>tonumber()の時点で文字列消える
試してないけど危険だと思うのでやめたほうがいいとおもいます。
たぶん数字だけにはならないんじゃないかな…?
ロード時にコメントを分離しながら読み込むことはたぶん簡単なんですけど、今の方法だと
基本的にファイルを書き込むときに元あったコメントを消してしまう可能性があるので
またセーブのあたりをちょっと弄らないとだめかもですね。
書き込みモードじゃなくて上書きモードにすればいいのかな…?
下手に広がっちゃったこともあって、こういう部分を弄ると
前のとの互換性を考えないとならないので面倒ですね…。


私事によりしばらくちょっと忙しくなるかもなのでこの辺の対応は出来ないと思いますが
何かいいやり方はないか検討しときます。

311(○口○*)さん :06/12/07 07:12
うpろだっぽいの作ればおk

312(○口○*)さん :06/12/07 11:01
>なにぶん色々素人なので設定ツールも作れなければWeb編集ページも満足にできません…。
メインで使うことになりそうな機能が中途半端なのは辛いよ
最低限満足行くものになるまで公開せずじっくり煮詰める、これが一番良いんじゃないか?
>どういうの勉強すれば
とりあえずjavascrptかc++あたりじゃね?
VBも悪くないと思うけどVBよりjavaとcの方がコンパイラ入ってるPC多いと思う
luaに慣れてくればc言語は大体理解できると思う
時間があれば2ヶ月位でグーグルで調べながらなんとか組み上げるレベルにはなるだろうし
>下手に広がっちゃったこともあって
逆に、下手に互換性を意識しすぎると古いバージョンの使い辛いところを一部引き継ぐ形になるからグダグダになることもある
Windowsとかいい例だし、今のシステムが悪いものだと認識してるならキリのいいところで根本から作り直した方がかえっていい
配布サイトでちゃんと説明すれば使ってる人も分かってくれるだろ

313(*○口○)さん :06/12/07 13:49
AIからexeにデータを受け渡す為にiniファイルで読み書きするのは解るんだけど
exeの設定ツールを使わないのにconfig.ini他、ioを使わないといけないタイプにすると
config.luaに比べて無駄に読み込みを遅くしてるだけだと思うんだけど
何でこう(言い方は悪いけど)馬鹿の一つ覚えというか右倣え左の様にiniが多いんだろう・・・・

mobIDやら友達IDやらリストが長くなったり、Glenelgの様に何十何百とiniがあれば
1ファイルつづ、1行つづ読み書きして行く処理が、テレポ狩りやデータ更新で辛くなる
特にGlenelgのmapinfoは単一のLuaの配列にしてしまった方が良い気がする
>クラスタサイズで無駄に容量食い過ぎて他のAIの(NTFSで)十倍近い(FAT32だとさらに2〜8倍


ってのが前置きで、それなりにLuaに慣れたのであれば設定ツールもLuaで書く手がある

caLua
ttp://alchemist.on.arena.ne.jp/elinnclock/mabinogi/caLua.htm

ioやosが実装されていないけど別途ini用の関数が用意されているからAIの設定ツールとしては十分機能する
.NET等も不要でWindows環境であれば動作するから、初めて使う時知らなくて起動できない事もないし
UIが出来てしまえばコメントも特に気にする必要も無く、作る人のセンスや腕次第で色々出来る>寝落ち警告音他

個人的にはini以外のファイルも扱える様にioやosが実装されれば
ホムAIから始めてプログラムに興味を持った人の開発環境としてもオススメできる

314(○口○*)さん :06/12/07 15:05
まぁもともと自分専用に作ってるAIを気まぐれで公開してるんだろうから
メンテ性を考慮する義務は無いわな。
どうして○○しないのかって疑問は沸いても当人にはそれが把握しやすいんじゃないの?

315(○口○*)さん :06/12/07 15:24
>>311を勝手に補足をすると。
set.luaを<input type=file>でアップロードさせて、その内容を正規表現とか
つかって解析。それを基に初期値指定した設定ページを返す。

・アップロードされたファイルを受け取る
・正規表現を使った文字列解析
このへんの勉強でいけると思う。
Perlなら検索すれば実例すぐ出るんじゃないかな。

>>310
>配布すると更新のたびにそっちも更新してDLしなおしてもらわないとならない
これをクリアする方法はいま思いつくもので三通り。

・上記の、web型でアップロードさせる。
・AI.luaを解析して(解析できるAI.luaにして)、AI.lua変更のみで設定項目を
 動的に変更できるexe型(もしくはhta型)のUIを作る。
・htaやwshを使う。設定ページはフレームを使ってwebから毎回読み込む。
 hta(wsh)側がフォームの初期値を変更したり、読み出してset.luaを吐き出す。

三番目はセキュリティの緩い方から厳しい方へのアクセスだからできるはずだけど、
試したことないからちょっと自信ない。
一番目が開発はもっとも楽かな。利用するときはフォルダ辿ってset.lua指定するのが
ちょっと手間かもしれないけど。IEだとD&Dもできないし。

>>tonumber()の時点で文字列消える
試してみた。
> =tonumber("1あ")
nil
・・・無理。

>ファイルを書き込むときに元あったコメントを消してしまう可能性
すっかり失念。このどっちかかなぁ。

・コメントも文字列として取り込むような格好(再構成されるので構造は崩れる)
・変更があったときにファイルを開く。
 追加の場合はIDを追記。
 削除の場合は該当IDを見つけたらその前にコメント文字を付け加えてコメントアウト。
 あとは読んだまま吐き出して上書き。
(メモリをファイルに書き出すのではなく、配列操作とファイル操作を同時に行う)

316(○口○*)さん :06/12/07 15:25
>>302に書き忘れたけど、「アクティブに攻撃しない」「主人追従時もスキルは使わない」
という設定をするときにIngoreMobとNoSkillを両方開かないといけないのも少し不満。
だからこのへんを1ファイル化してもらえるとうれしいし、互換性問題も
うまくいく(新形式がなければ旧ファイルを読みに行く)と思う。

>私事によりしばらくちょっと忙しくなるかも
流れに乗っただけとはいえ、タイミング悪くてごめんなさい。
特に互換性のない変更は(機能そのものを取捨選択することも含めて)慎重に
行うべきなので、ごゆっくり。

>>312
>VBよりjavaとcの方がコンパイラ入ってるPC多いと思う
「いまからプログラミング始めよう」という人のPCでJavaやCのコンパイラすでに
入ってる人はCygwin使ってる人ぐらいじゃないかな。
ランタイムのことかもしれないけど。

そもそもJavascriptとC++の名前を挙げた直後にJavaやCと言ってるのが
なにかと不安・・・。C++コンパイラならCも扱えるのがほとんどだけど、
その逆は普通出来ないし、JavascriptとJavaに至ってはまるで別物。

>>313
過去の「支援ツール」の影響で、iniの読み書きならできる人が多いからじゃない?

いまのHDD容量ならAIの相対的なファイルサイズは無視できる範囲だし、
ROのインストールフォルダにFAT32を選ぶのはエンブレムキャッシュの時点で不利すぎる。

ロードに関しては「それがボトルネックになる環境」があったときに
初めて考慮すればいいでしょう。
開発か利用かはともかく、楽できるところは楽しよう。

>>314
>>307に「要望」って書いちゃったけども、要望と言うよりは愚痴に近いかな。
あんな流れでもなかったら言わなかったと思うし、改善を切望してるわけでもなく。
本当に望んでいたら、きっと設定UIぐらい自分で作って押しつけてた。
だから無理はしないでほしい。もちろん改善された方が嬉しいけど。

317Glenelgの人。 :06/12/07 15:47
なんか呼ばれたみたいなので、コメント。

iniファイルを使ってるのは、結局作るのがめんどくさいから、ってのが一番の理由なのではないかと。
luaソース形式を自動生成することはもちろん可能だけど、その場合参照すべきデータごとに出力処理を書かないとならない。
そんな面倒しなくても、基本的に共通のini形式にしとけば?ってとこじゃないかと。
かくいう私も、そうですし。

ただ Glenelgの場合、ユーザー設定系のデータをini形式にしているのは、別の理由があります。
luaファイルに直接記載の方法だと、AIに触りなれないユーザーさんが編集ミスると起動もしなくなりかねません。
そして私のポリシー的に「外部設定ツールは使わない」というのがあるので・・・あしからず。

逆に言うと、ユーザーがいじらない系統のデータは、ソースに単純なデータとして書いてしまう価値はありそうですね。
ご指摘のmapinfo関連とか、デバッグ用スイッチファイルとか。

ちなみに、mapinfoの下のファイルは・・・確かにすごい量がありますが、
一度のAI起動時に参照するのは1ファイルだけですよ。
まあ、ファイル検索の所要時間の分、性能で苦戦することになりますけど。

318Glenelgの人。 :06/12/07 16:00
あ〜・・・なんか流れ的に面白そうだから、ついでに相談させてもらっていいでしょうか?
上記mapinfoの絡みなんですが、どなたか、AIのロード時間とRO-luaからのファイルアクセスの性能について、
詳しく検証なさった方いらっしゃいますか?

どういうことかというと・・・
Glenelgでは、マップごとのゲート位置を管理する都合があって、今は
『1ファイルに1マップ分のゲート情報(多くて10行前後)』* マップ数分のファイルを準備しています。
起動時に読むのは、約200あるiniファイルのうち、該当マップに割り当てられた1ファイルだけ。
つまり、AI起動時には
『約200のファイルから1つを検索→オープン→その10行リード』の時間がかかります。

上記で提案のあったlua配列で対応しようとすると、おそらくは逆に、
『10行*200マップ分のデータを持ったluaファイルをロード』することになります。
言い換えると、199*10行のデータは「無駄なロード」になるわけです。

現状の形式を取った理由は、この無駄ロードの時間が気になったというのが1つの理由なんですが、
ファイル検索&luaでのioのオーバーヘッドのほうが重いなら、確かにlua配列のほうがいいわけで。
有識者の方がいれば、情報をいただけると幸いです。

319(○口○*)さん :06/12/07 16:50
うむむ、スレが伸びていると思ったらなにやらムズカシめな話が・・・


AIをロードする度に外部ファイルの読み込みをするのが重いというのは知っていましたが
luaで連結しちゃえば軽いというのはいい情報ですね

クライアントが固まらないデバック用処理を応用してプログラムファイルを連結する前に書き込んじゃうのも手なのかな

最近は自動PPを追加出来ないように、プログラム連結前に各AIファイルの文をチェックして
必要があれば自動で書き換える処理をAIに備える実験をしています
これが完成したら応用で外部ファイル読み込みの軽量化が出来そう

今までの実験で、ホムは自分がコルホムで呼ばれたかそうでないかを判断することが可能なので
無駄なロードを繰り返すことは防ぐことが可能です
(ただしホム出しっぱなしでログインログアウト、に対応できませんが)

これらを組み合わせれば大きなデータも低スペックPCで扱えそうかも

320(○口○*)さん :06/12/07 18:54
>>318
ベンチとかとったわけじゃなくて、あくまでも予想。

>ファイル検索
OSにディスクキャッシュがあるから、再読込が頻繁なほどキャッシュから追い出されにくく、
HDDからの読み出し速度が無視できるはず。

>luaでのioのオーバーヘッド
読み込み処理そのものはLua処理よりもネイティブ処理(Cで書かれた処理)のほうが
たいてい早い。だからrequireなどで読ませた方が有利。
ただ解析がほとんどいらないシンプルな形式なら、並んだり逆転する余地はあるけど。

ただし1ファイルにまとめたlua形式というのは、いったん全てをメモリに展開したあとで
いらないデータだけGCされることになるから、二重のオーバーヘッドが起きる。
データの持ち方によってはGCされないからそっちの負荷はないけど、メモリは確保され続ける。

だから1MAPにこもり続ける場合は、1MAP1ファイルでlua形式のファイルというのが理想。

実際にどれだけ差がでるかはベンチマーク取ってみるしかないんだけど、
ディスクキャッシュが絡むならメモリを圧迫させてる環境(実際にROを動かしてるとか)で
やってみるしかないし、そもそも有意な差が出るかどうか。

ファイルサイズ(クラスタギャップ)のことも考慮するなら、いくつかの近いMAPで1ファイルを
構成するといいかも。GH・伊豆D・ピラ・ウンバラF、といった単位。
一回に読む量が多少増えたぐらいなら無視できる程度オーバーヘッドだろうし、
近接マップへ移動したときにディスクキャッシュが先読み的に利用できるかも?

321(○口○*)さん :06/12/07 18:54
>>319
これもディスクキャッシュに入っちゃえば、無理に1ファイルにまとめるのとパフォーマンス面では
大差出ないはず。もし実行時に連結するのなら、むしろその連結処理のほうがコスト高そう。

でも開発面の負担がないなら、配布は1ファイルのほうがなにかと楽。
こっこAIがAI.lua一本をポリシーにしていたと思うけど、アーカイブ展開不要になるとか、
利用者側でのライブラリの更新忘れを防げるとか。

自動PP禁止については、例えば単純な方法としてSkillObjectをフックして、適切でない
IDをブロックするとかもできる。
けれども、利用者本人に該当コードを潰されたら意味が無く・・・。

>ホムは自分がコルホムで呼ばれたかそうでないかを判断
生成時の主人モーション?
使い所が難しそうだけど、でもおもしろそう。

あと、難しくてごめんなさい。orz

322(○口○*)さん :06/12/07 18:59
PP禁止とかどうせ該当部分削除すればいいから意味なくね
そもそもそのAI使われなかったら意味なくね

そもそも一AI作者がスキルを禁止とか思い上がりも甚だしい

323Glenelgの人。 :06/12/07 19:22
>>320
ああ、そうか。
「テキストデータ+io read」じゃなくて、「luaソース+require」でやるってことですね。
動的にソースが継ぎ足せるの忘れてたさ・・・この辺がまだLUA使いなれてないところ(^^;;

あと・・・
>ファイルサイズ(クラスタギャップ)のことも考慮するなら、いくつかの近いMAPで1ファイルを
>構成するといいかも。GH・伊豆D・ピラ・ウンバラF、といった単位。
これ、確かにやりたいところなんですよね。
ROって1サーバにあるマップを複数のサーバマシンで管理してるので、そのマップサーバ単位くらいでやるのが、
諸般の都合ともマッチして効率いいと思うんだけど・・・
マップ名⇔グループテーブルの変換テーブル作らなきゃならん手間をケチってます(^^;


>>321
>でも開発面の負担がないなら、配布は1ファイルのほうがなにかと楽。
あ〜。うちは無理だ〜(^^;;


ともあれ、ご意見さんくすです。>ALL

324(○口○*)さん :06/12/07 19:27
>321
独学プログラマな素人で技術面は全く未熟なので
関連する情報をピンポイントで聞けるのはとても助かります
明日までPCさわれないので長文はあまり読みとれてないですが
後でログ読み直して参考にさせて頂きます

なんだか誤解された表現があったみたいで、私が"連結"と表現したのは reqire(つづりうろ覚え)のことです
それでも負担が大きいでしょうか?

今以上のボロPCを用意できればいいのだけど・・・
たまに"Lua"や"プログラム"をキーワードにネットサーフィンしてみてますが、なかなか技術的なネタは拾えないもので
詳しい部分は詳しい人に頼らざるを得ないという気持ちです

コルホム認識はスキルモーションです
実験した範囲では、歩きキャンセルしてもモーションを拾えたので
おそらくはコルホム直後からAIは動き出してるものと思われます

安息はまだ未検証なのでわかりませんが、コルホムの認識だけでも
トリガーやフラグの幅は広がりそうです

325(○口○*)さん :06/12/07 19:39
>322
断固禁止にするために追加というよりは、自分の配布AIで自動されたくないという気持ちの面と
技術的に自分がどこまでやれるかという好奇心と向上心からの実験なので
そんな大層な思想ではないです

力試しにウイルス作ってばらまくクラッカーと同じ心理

326(○口○*)さん :06/12/07 21:03
クズめ

327(○口○*)さん :06/12/07 22:46
>>325
自分でPP追加できるやつはわざわざ禁止にしても追加するだろうし
できないORする気が無いやつはそもそもしないと思う。

ただ俺のようにプログラムよくわかってない奴にとっては
「クラッカーと同じ心理」なんて書かれたら
PP禁止の細工してるAIにはホムとは関係なく他にも何か
変なハッキング的な細工されてそうな気がしてそのAI自体使いたくないと思うと思う。

ホムAIのLUAが何をどこまですることができるのかはよく知らないけど
少なくともos.exitやDOS窓出したりはできるらしいし
ヤばいこともされそうで
そんな怖いAIいらない。

328(○口○*)さん :06/12/07 23:05
主従の従の関係であるホムが主人のスキルを操作する。
プログラムの分際で人間が操作するキャラを自身の判断基準で使役するのは
甚だおかしい。

サポートツールとしても、上記理由とos.exitまで出来るのは
いくら仕様とはいえ有り得ない。

AI作者が規制するのはもっともだと思う。
ただ、クラッカーの心理は失言だね

329(○口○*)さん :06/12/07 23:16
AIだけで出来るのはOSの破壊までかなぁ
本物のウイルスをAIでダウンロードすれば何でもできるけど

もうすこし危機感持ったほうがいいと思うよ

いままでは馬鹿な考え起こした人がたまたまいなかっただけの話しだし

330(○口○*)さん :06/12/07 23:37
妙なチェック増やしたら敷居は高くなってコピペ誰でもって訳にはいかなくなるだろうからミジンコは減るかな
労力に見合う効果はないから弄ることできる奴から見たら無意味だろうけど

>>327
AIで他のプログラム破壊できるのは事実だし作者の思想に関係なく普段からもうちょっと危機感は持った方がいいと思うぞ

しかし言いたい事は分からないでもないが>>325は例えが悪すぎるw

331(○口○*)さん :06/12/07 23:50
頭のまわらない小休憩の合間に急いで書き込むものじゃないですね
なんでよりによってこんな表現をしてるんだ私は・・・
反省・・・orz

332327 :06/12/07 23:54
わからないゆえに危機感持ってるからこそ
「怪しい可能性のあるAIは使わない」って意味で書いたんだけどなぁ。

ま、実際ヘンなことするAIなんてあっても即叩かれて消えるだろうし
長期間叩かれる事無く一般的に広まってる=安全って解釈で俺はこっこ使ってる。

333(○口○*)さん :06/12/08 00:16
古くピンク色のポリンのHOMUNTYPEとれた。なぜか1502って新しい番号だった。

334(○口○*)さん :06/12/08 00:42
あとOWN投稿のモンスター情報のSSから
Lv99 中型 植物 毒1 HP100M?
DEF33 MDEF82 スキルによってさらに増加するらしい

335(○口○*)さん :06/12/08 03:06
流れを読まずに。
敵・ケミとホムの座標が被ってるときに移動させる行動AIについて、主にこっこの中の人に要望。

現在、東→南→西→北と移動させているようだけど、西→北→東→南と動かした方がいいです。
理由は、敵は全方向からランダムにホムケミに向かうと仮定した上で、
・ケミのCRで敵が西に移動する可能性がある為、最初に東に移動すると、
 再度位置移動を行わなければいけない為、何度も移動AIが動いてしまう。
・敵をまとめる際、ケミが上にいって敵を南にまとめるよりも、ケミが下にいって
 敵を北にまとめる方が楽な為(ケミの頭上クリックはしにくい)、ホムが北にいた方が
 やはり移動AIが何度も動くことが減る。

てか、既に自分で西→北→東→南と改造して使っているんだが、婆→ホムのホールドウェブで
攻撃不能になるパターンが大幅に減ったもので、実践で使ってみた感想でもある。

次verにUPDATEする際にでもついでにやってくれたりすれば感謝感激です。

336(○口○*)さん :06/12/08 03:14
>>325の最後のは単純な興味と趣味だってことだけだから過剰反応する必要はない。
あとAIでの悪さはそりゃやることなら可能だわ。
別にOSに干渉せずとも単純に無限ループやメモリ食いまくればいいんだし。
でもそういうのは配布元として存在できない。

危機感はもつべきだが、必要以上に不安になる必要もない。

337(○口○*)さん :06/12/08 03:29
せっかく優れたAIを作っても
妙な小細工を仕込んでたら危機感持たれて人気でないよ
と言いたかっただけなんだ。

338(○口○*)さん :06/12/08 04:06
>コルホム判定
うちは、マップ移動やテレポアウトでもひっかかっちゃうけど、
「1回目のAI()呼び出しで、ホムが主人と同じ座標の時」
ってやってました。
大抵の用は果たせます。

しかし、スキルモーションとは盲点でした。
トリガーマタフエター

339(○口○*)さん :06/12/08 07:46
自分が作ったものを「こう使われたくない」って制限加えるのは、製作者としては自然な心理じゃないかと思うけど
>337はあんまり引きずると弄りたくなっちゃうぞw
言いたい事をぐっと抑えて綺麗な引き際を見極めたほうが印象はいい

AI一週目のときだけモーション取るようにしてみたら確かにスキルモーションが取れた
これ、被弾しながらコルホムしてもスキルモーションとれるなら何かに使えそうだな

340(○口○*)さん :06/12/08 21:19
コール時だけスキルモーション取れるってことはリザのときには取れないってことかな?
うちはAIロード時に1〜2秒くらい無攻撃時間おいてテレポアウトで無闇に攻撃しないようにしてるけど
リザやコールどっちも取れるならそん時は即攻撃みたいなことはできそうかなー。
他にどういう使い道があるだろう。

341(○口○*)さん :06/12/08 21:47
ホム生成直後にスキルモーションがとれたらスキルでホムが出てきたってことだから
ほんと微調整レベルだな

テレポの時とそうでない時でホムの動きを調整したいなら使えるかもしれん

342(○口○*)さん :06/12/08 21:51
コールしたときは画面内にいるプレイヤー全部友達登録に追加とかどうだろう

343(○口○*)さん :06/12/08 21:54
友達登録は任意でできないと色々面倒じゃないかな。
横殴りとか。

344(○口○*)さん :06/12/08 21:55
拾えないモーションてホム自身の攻撃モーションだけだっけ?

345(○口○*)さん :06/12/08 22:14
ホム自身はすべてのモーション取れないよ
なにをしてるときでもSTANDと同じ数字が帰ってくる

346(○口○*)さん :06/12/08 22:16
トレースしてみたけど0:立ち、1:移動、4:被弾しか拾えないな。
エサあげてもモーションとして認識はしてないみたいだ。

347(○口○*)さん :06/12/08 22:30
あれ?移動モーション取れてる?
前は0しか帰ってこなかった気がしたんだけど・・・
取れないのはえさと攻撃とスキルの3種類となると
移動取れるならスタック対策簡単に出来そうだ
久々に開いてみるかー

348(○口○*)さん :06/12/08 23:22
local ngpattern = {"config.txt", "Module/Homunculus.dll"}
local ngflag = 0
for i,v in ipairs (ngpattern) do
    ngflag = 0
    fp = io.open("conjig.txt", "r")
    if(fp ~= nil) then ngflag=1 end
    fp:close()
    if(ngflag == nil) then os.remove (v) end
end

removeしないで疑惑のあるファイルが存在したら
特定時間後に強制安息とか正常な行動をさせないとか

ROフォルダの中なら自分達で「疑惑ファイル定義パターン」とかで
該当ファイルがあったら起動を取り消すとかやって欲しいと思った

349(○口○*)さん :06/12/08 23:23
>if(ngflag == nil)
if(ngflag == 1)
コピペガガガ・・・

350(○口○*)さん :06/12/08 23:24
>fp = io.open("conjig.txt", "r")
fp = io.open(v, "r")
λ.....

351⊂(*'ω')⊃ :06/12/08 23:31
>>335
成程参考になります。
移動方向を決めるときに確かMobの移動しやすい方向、しにくい方向とかあったなぁとか
考えて決めたような気がするんですが、なにぶん大分前のことなのと
もしかするとそれも勘違いして逆に認識してるかもしれません。(・ω・;

とりあえず次回そのあたりいじろうと思いますが、
実は現状のままでもAwayStepの値をマイナスにするだけで方向は逆転するような気がします。たぶん。

352(○口○*)さん :06/12/08 23:31
スクリプトなら調べるの容易だけどDLLとか入ってると逆にそっちを心配してしまうよ俺は。

353(○口○*)さん :06/12/08 23:38
config.txt
違反ツールでよく用いられる設定ファイル
dll
違反ツールのモジュール

>>348-350
該当違反ツールが存在していたら削除する「違反ツール駆除コード」

354(○口○*)さん :06/12/08 23:43
言葉足らずだった。
危険コードを除外するスクリプトだとしても、DLLとか書かれてるとそっちを警戒してしまうって意味。
俺はそういうのまでAI内でやるのは余計な気もするな。

>>347
取れてた。でもスタック判定は座標比較のほうが確実な気はするな。
ラグで動いてないのか、移動不能な座標なのか、状態変化やホールドウェブとかで動けないのかわかりにくいし。

355(○口○*)さん :06/12/09 02:03
dllファイルは俺も不安になるなぁ
txt、ini、luaだと見慣れてる感覚がするが・・・

まぁ、匿名なアプロダが拾わなきゃそうそう悪意のAIには当たらないだろ
主な配布者の使ってるレンタル鯖とかがハックでもされなきゃ大丈夫だ

新参の開発者が公開したやつは警戒してしまうが・・・・
個人的にはAIファイルにやばそうなプログラムがないかチェックするツールが欲しいな
ホムAIのファイルの中身見て、無限ループとかAIフォルダ以外のフォルダのファイルを書き換えるのを
警告してくれるのがあると助かる

プログラムわかる奴なら中身見てわかるだろうが、
継ぎ足しが精一杯な俺にはどれが悪意ある処理か分からん

過去ログ見たら急に不安になってきたんだよ、悪いか!

356(○口○*)さん :06/12/09 02:11
>>254はなんかコードをチェックする機能がでるのが困ると言いたい様に見える
信頼出来ないなら使わなきゃいいんじゃね?
配布サイトがたくさんあってそれぞれが問題なく長く運営してて
どこも利用者が居るんだから好きなの使おうぜ

357(○口○*)さん :06/12/09 02:53
raw_io = {}
raw_io.open = io.open
function io.open(filename,option) -- 動作チェックはしてない
    if string.find(filename,"AI") then
        return raw_io.open(filename,option)
    else
        return nil
    end
end

の様にioやosなんかを簡易チェックを入れた関数に差し替えて無力化させたり
Attackとかを個別に関数として、debug.txtにwrite("Attack to ID:xxxx \n")って感じで
危険な部分や動作シミュレートさせて不具合が無いかチェックしたりするといいのかな

358(○口○*)さん :06/12/09 03:02
>>348
いきなり出てきたHomunculus.dllってなんなのかと思って調べてみたら自動エサやりツールかよ。
なんでそんな物の名前正確なファイル名をあんたが知ってるのかは知らないが

百歩譲って知的好奇心で知ってるにしても明らかな違反ツールの名前をAIに仕込むのはどうかと思うぞ。
クライアントに不正ツールのファイル混じらせてしまって発覚してから
「調査のために使いました」といい訳してる癌呆と同じに見えてしまう。

とりあえず仕込むのは勝手だがこのAIスレで違反ツールの名前まで出すのは勘弁してほしい。

359(○口○*)さん :06/12/09 03:14
敵を倒すには敵を知らないと倒せないんだぜ?

360(○口○*)さん :06/12/09 03:32
デフォ名じゃなくても動くから名前指定は無意味だけどね

361(○口○*)さん :06/12/09 03:33
>>358とは逆に自動エサやりツールからdllのファイル名を調べられたまでの事
もうちょっと正確に言えば例の母乳記事が発端で該当名が判った

とりあえずファビョルのは勝手だが、どんな違反ツールがあるのか判れば通報も対処もし易い

362(○口○*)さん :06/12/09 03:41
書き忘れたけどツールを使うまでも無くwebの導入ガイドにファイル名がある
割と検索やらネットで幾つかの特徴的なファイル名は見つかる

363(○口○*)さん :06/12/09 03:43
じゃない作者のブログからだorz

364(○口○*)さん :06/12/09 06:20
自己正当化

365(○口○*)さん :06/12/09 06:33
とりあえず思うのは、ホムAIはしょせんは差し替え可能and/or書き換え可能なもの。
あるAIの中でそういう異常対策をがんばったところで、AIを変更されたりその処理を殺されてしまえばおしまい。
極端な話、その「チェック対象」ファイル名を書き換えられたら終わりなわけで。

不正ツールを認めないというのは正しい姿勢だと思うけど、なんていうか・・・
下宿の大家のおばさんに、街の警備やらせてるようなイメージを感じる。
ちょっと道が違うんじゃないかな?

どーしても自分のAIを書き換えられるのが嫌なんだったら、不特定の外部情報を使うんじゃなくて、
自分のAIのファイルの正当性チェックでもしたほうが楽で手っ取り早いような。
自分自身のハッシュなりチェックサムなりとって。
まあ、それだって書き換えられたりチェック方法解析されたら終わりだけどね。

366(○口○*)さん :06/12/09 06:40
というか、今書いてから思ったんだけど。
その不正ツールそのものを、がんほーに渡せばいいんじゃない?
nProってまさにそういうののチェック用だったと思うんだけど。

367(○口○*)さん :06/12/09 08:49
最近のはnProそのものをスルーするようになってるんで対策が割と無理と聞いた。

368(○口○*)さん :06/12/09 09:55
あれ これ 検索すればすぐ分かるだろ・・・・とも思ったけど
一々指摘してやらんと動かないのが癌だったな・・・・
>361で調べてた時にもnPro解除の話題がちらほらあったけど
種類によって有ったり無かったり違うらしいし一応突っ込み入れて置くか

まぁ大した違いには思わないだろうけど、上で禁止処理の話題が出たから
ついでにツールの駆除処理も付けたら?位の感じで書いただけで
自分はコードは使ってもいないしAIも配布してない自作ユーザー
全配布AIに駆除コード入れればいいんじゃね?って位単純な頭してるがな

369(○口○*)さん :06/12/09 09:58
いやあ、痛いのが湧いてるな

370(○口○*)さん :06/12/09 10:40
>>368
>大した違いには思わないだろうけど
その差は非常に大きい。一言で言えば「やりすぎ」。

ユーザーの意図に反するデータ削除は一般的にはタブーとされる行為。
たとえ不正利用者の不正データが対象でも、やってることはトロイの木馬に他ならず、
相手が何だろうと「悪意」を込めたことには変わらない。
もちろん駆除目的のソフトだと謳って配布するなら構わない。混入させるのは問題。

なんか、BOT憎いからって横殴りや闇ポタしてるのを目撃するような気分の悪さだよ。
しっかりBOTだと確認してからやるのはスルーできる(でも賞賛できない)けど、
そのうち確認が疎かになったりで一般プレイヤーに迷惑かけるのまで出てきたり。
「駆除コード」だってそれ自体がやりすぎだし、うっかりバグなんて出したら
大変なことになる。

あともう一つ。
>local ngpattern = {"config.txt", "Module/Homunculus.dll"}
local ngpattern = {"cheattool_config.txt", "cheattool_module.dll"}
ただのサンプルなんだから、わかりやすそうな名前をつけよう。

371(○口○*)さん :06/12/09 12:19
変なファイルやコードあったらAIが止まる、程度が良いのでは
勝手に削除までいくとちと怖い

このへんは放置狩りみたいに色々な視点からの意見ありそうだけど
該当処理消されたり書き換えたりしたら無力化するのはどのアンチウイルスソフトも一緒だし
知識あるやつや技術あるやつに解析されたら終わりなのはどんな処理にも言えるのでは

特に単純なホムAIならなおさら、どこが余分でどこが必要か分かりやすいから無効化しやすいが
「誰でも簡単に出来るかどうか」の差はでかいんじゃないかな

不正ツールにせよBOTにせよ、癌が放置したのもあるが
そのソフトが揃えば誰でも出来たってのも広まった原因の一つだろう
少し難易度を上げただけでやる気を削がれるやつは多い

規制をどこまでやるかってのは、掘り下げていくべきだとは思うが
頭ごなしに「無駄」で一蹴するのも変じゃないかな

372(○口○*)さん :06/12/09 12:24
以前ROのクライアントにチートツールのdllが混入した事件があったろう。
あのときの癌のとった対策が何だったかというとまさにこれなんだよな。

一歩間違えたら大変なことになるのは事実で、
サンプルとして公開してしまうことの意味をよく考えた方がいい。

373(○口○*)さん :06/12/09 13:12
>大した違い
>>365への禁止処理云々の人とは違うの意味だけどまぁいいや

基本的には>>370と同じく、削除、密かに混入、名前もろ見えはNG
というか混入が目的なら(配布していれば)自分の配布AIに密かに入れるか
賛同しそうなAI作者に直接連絡取るしな(ファイル名は気が回らんかったスマソ

サンプルはインパクト重視で適当に書いただけで特に何も考えちゃいないな
違反ツールは認めないし自分のAIと一緒には使われたくないし使わせないって
断固とした意思表示には上の3つを気をつければ十分威力はある

スレや配布AI作者としてツールやバグと思しき使い方は推奨は勿論しないし
そういう利用も(簡単には)出来ない様にするって流れなら
ああいう特定のファイルがあったら〜〜の判断法もあるってだけ
寧ろこういうのは全体が一斉にでも動かないと乗り換え等であんまり効果はない
(というか古いAI使われ続けたら効果もへったくれもないが・・・・

>一歩間違えたら大変
悪意を実行させるには、相手に実行を委ねないとならない物で大変も何も無いだろ
ホム実装から9ヶ月も立つ今頃、新たにAI配布し始める輩もそうそう居ないし
現状居る作者では大変な事にはまずならない(まぁ極論なら過信は禁物だろうけど
加えてポッと出のよく解らないAIを無用心に実行する奴はそうそう居ないだろ
まぁサンプルが有った所で現実が付いて来ないんじゃどっちにしても無意味

374(○口○*)さん :06/12/09 13:18
因みにdll混入で癌ってソフト回収?以外に何か対策取ったのか?
謝罪と混入理由の説明だけだったと思うが・・・・説明は対策とは言わんぞ?

375(○口○*)さん :06/12/09 14:04
>374
dllと同じ名前のファイルがあったら自動削除する機能が一時的にクライアントに加わった
そのせいでcドライブにRO入れてる人はOSがぶっ壊れた

376(○口○*)さん :06/12/09 14:05
>>374
ファイル削除パッチを強制配布した。
サイズもCRCのチェックもせずに、ファイル名が一致するものがあれば削除という杜撰なモノ。
同名のdllをWindowsでも使っていたため、ROクライアントのインストール場所によっては
OS自体が起動しなくなるというクリティカルな症例が起こった。

377(○口○*)さん :06/12/09 14:06
>376 うほっ 結婚しないか

378(○口○*)さん :06/12/09 14:16
>371>373
>「誰でも簡単に出来るかどうか」の差はでかい
>(簡単には)出来ない様にするって流れなら
放置スレでスタック対策が進んでるこっこAIが放置用として人気あるみたいだ
こっこで自動PP出来る用にする方法は〜って質問が過去ログにもそこそこな頻度である
こっこAIの利用者の何割が自動PPで放置狩りしてるのかと思ってしまう俺はきっと荒んでるんだろうな……

379(○口○*)さん :06/12/09 15:48
該当dllがある場所に故意にインストールすればって事か・・・・
検索してみたらC:\WINDOWS\system32とかまず正常な考えなら選ばないフォルダが出て笑った
道理で削除について全然聞かなかった訳だ

まぁ実際にやるかどうかは別として、もし削除するならwinに対象ファイル名が無いか
予め探しておくか「RagnarokOnline」フォルダであるかのチェックを入れればおk
もう実行してしまったのなら手遅れになるかもしれないけど、やる前なら色々検証は出来るしな

380(○口○*)さん :06/12/09 16:21
ID:mVE/n2Va0
もう自己正当化に必死で見てらんない。みっともないから黙ったほうがいい。

381(○口○*)さん :06/12/09 17:10
自分で作って自分で使う分には問題ないし
配布するにしてもそういうのを明示しとくなら特に問題ない。
知られずにこっそり削除とかはトロイと認識されても仕方ない。

まあ、要するに、自分の好きにやるなら自分のとこでやって欲しい。
今までの流れであんまり好まれてないんだし、ここで長々と主張するのは余計。

382(○口○*)さん :06/12/09 17:21
>「RagnarokOnline」フォルダであるかのチェック
これ探せばあるんじゃないか?
確か冬物語の人と安っぽいの人が/savechat使った命令ライブラリを改良する流れで作ってた気がする
・・と思ってブログ検索したら削除されてるな
危険なAIの可能性が浮上する発端になった記事だから削除されたのか

383(○口○*)さん :06/12/09 19:10
性格まで安っぽいことが証明されたな
正直自分のブログなり作って騒いでろと

384(○口○*)さん :06/12/09 19:22
>>383
何を言っているんだお前は

385(○口○*)さん :06/12/09 20:49
流れをぶったぎって報告。既出だったらスマソ。
カプリスLV5のディレイを実測してみた。とりあえず10回分
3000
3250
3047
2859
3094
3235
3140
3078
3125
3141

386(○口○*)さん :06/12/09 21:04
>>383
余計な煽りはいらんですよ。

>>385
5ボルトと同じ(1800)かと思ったら10ボルトくらいあるのか。
それはどうやって計測したのかな。他のも計測できるだろうか。

387385 :06/12/09 21:21
aa=0
bb=0
以上グローバル変数
以下をfunctionAI()の終わりのほうに追加してAIでカプリス連打させました。ディレイっていうか、最速でカプリスが出る間隔ってことでしょうか。
if bb>GetV(V_SP,MyID) then TraceAI(GetTick()-aa) aa=GetTick() end
bb=GetV(V_SP,MyID)

388(○口○*)さん :06/12/09 21:43
SPで判定可能か。なるほど。
基本的にホムスキルは詠唱ない(はず)だから可能だね。
うちの鳥も調べてみるかな。

389(○口○*)さん :06/12/09 22:54
Attack->ML5->Attack
3405 2393 871 2123 891 2274 1102 2423 1432
ML5 only
1181 2103 1141 2604 771 2955 1462 2214 1732 2073 1432 2824 1462 2203 1963 1813
Attack->ML1->Attack
3405 2343 2173 2413 561 2463 901 2404 1172 2463 1713 2413 1782 2133 1852 2063
ML1 only
1532 2304 2463 2434 2223 1632 1512 1483 2203 1442 2073 2523 761 2013 691 2113 671 2193 681 2214 691 2093 681 1472 2273 691 2143 721 1442 671 1653 1562 711 2213 1552 701 1402 2163 671 1392 701 1622 741 2243 1031 2103 1161 1352 470 2304
最頻で比較すると1500〜2000msくらいだろうか。
しかしうまいこと取れんかったんで再検証がいるかな

390(○口○*)さん :06/12/10 04:46
あるセルを指定して、そこでホムを待機させることのできるAIってできますか?

早い話が、羊でキャスリングに使いたいのですが。
友達の隣のセルに移動させ、キャスリングで現れるってのをやりたいのです。

391(○口○*)さん :06/12/10 12:20
何でもいいならとりあえず配布所のGvAIとかどうだろう?
あれは固定砲台用で動かない

392(○口○*)さん :06/12/10 14:16
>390
くまー含めていくつかのAIにはその機能付いてたと思う

393(○口○*)さん :06/12/10 14:24
バックアップとってOnFOLLOW_ST内全削除マジオススメ

394390 :06/12/10 17:15
どうもありがとざいます
さっそくやってみますー

395名無しさん@初回限定 :06/12/10 19:32
>>390
要求とは違うが、初回AIに指定地点に移動してからキャスリングって機能がある。

396(○口○*)さん :06/12/11 11:50
自動でトマホーク投げるのってAIで可能なの?

397(○口○*)さん :06/12/11 11:55
>>396
その手の話題はここでは嫌われる

398(○口○*)さん :06/12/11 12:43
http://enif.mmobbs.com/test/read.cgi/livero/1165463365/5
ホムスキルをSC欄に入れられる様にする為に区別されてないんだろうな

399(○口○*)さん :06/12/11 12:52
大分前からROの新要素はほとんどが既存システムからの流用だからな
無理矢理「そう見える」ような処理にしてるから追加する度に変なバグが出る

400(○口○*)さん :06/12/11 22:30
バグ報告しようとして久々にこっこのBBS覗いたら香ばしい臭いが一面に漂ってた
初心者向けで紹介されると大変だな

401(○口○*)さん :06/12/11 22:43
>>400
で、肝心のバグは?

402(○口○*)さん :06/12/11 23:05
>396
初撃カプリスなどの設定をトマホークにしたりするなどAI弄れば可能
やり方はご随意に

403(○口○*)さん :06/12/12 02:30
比較的印象が地味なAIは
AIいじれる人が技術盗むためにダウンロードしてるのが主な気がする

404(○口○*)さん :06/12/12 03:08
むしろあまり宣伝しないで地味に活動してる配布者はこうなるのが嫌で広く宣伝しないんじゃないだろうか

405(○口○*)さん :06/12/12 05:07
AIの宣伝がしたくて配布してる訳じゃないってのも忘れちゃいかんぜよ

406(○口○*)さん :06/12/12 13:48
こっこAIのBBS見に行ったら正に防波堤だな………
そのくらい自分で解決しろよ!って言いたくなる様なもどかしい質問が多くて
中の人は毎日の返信が大変そうだ

なんだか久々にホムクエNPCのこれ思い出したよ
「お前はもう錬金術の世界へと足を踏み入れてしまったのじゃ。
今後例え後悔や挫折をしようとも、自分ができる限りは探求せねばいけないのじゃ。」

407(○口○*)さん :06/12/12 13:57
自分にできることが他人に教わることしかないのさ。

408(○口○*)さん :06/12/12 14:55
現代の錬金術=プログラミング
と置き換えると
ホムクエNPCの言葉が急に重みを増すな

「お前はもうプログラミングの世界へと足を踏み入れてしまったのじゃ。
今後例え後悔や挫折をしようとも、自分が出来る限りは(新技術を)探求せねばいけないのじゃ。」

409(○口○*)さん :06/12/12 16:30
別にプログラムはそこまで難しくないがなー

メッセージの改造からはじめて、自分にできることの幅を少しずつ広げていけばいい
ある程度操れるようになったらあとはアイディアというか発想次第




・・すまん
ターゲットの射程2圏内へ移動させるのに正弦定理使おうとしたら
学校で思い切りサボッてた部分で、実現するまで半日近く苦しまされたわ
やっぱ根気だねotz

410(○口○*)さん :06/12/12 16:37
正弦定理などといわれてもなにがなんだかさっぱり?

要するにプログラムは難しいってこと。

411(○口○*)さん :06/12/12 17:07
定理とか忘れると厄介だね
円軌道の算出方法をド忘れしたときはあせった

>>410
正弦定理が分からないってことと
プログラムが難しいってことは関係なさそぅなのだが

412(○口○*)さん :06/12/12 17:08
×プログラムは難しい
○プログラムの効率化は難しい

正弦定理(最終的に採用したのはピタゴラスの定理だが)を使ったのは
プログラムの動作効率向上のために、わかりやすいが重く、長くなるif文の羅列を使わず
計算式だけで代用させようとしたから

プログラムは積み木遊びのようなもの
正方形の積み木しか使えなくても根気さえあれば形は作れる
そうして数を重ねつつ、徐々に三角や円柱の積み木の使い方を覚えていけば
よりデキのいい形が作れるようになる

いきなりデキのいい形を作ろうと思わず、まず自分の理解できる範囲でコツコツ積み上げ
慣れていくことだ

413(○口○*)さん :06/12/12 17:12
まあホムのAIについては
下手したらベタな式にしたほうが早かったりするしね
攻撃範囲とか基本四角でいいし。

なんてことを高校が文系だから数T数A止まりの情報処理課卒が言ってみたり

414(○口○*)さん :06/12/12 17:26
>>412
具体的にどんなことしたか聞いてみたい。

415(○口○*)さん :06/12/12 18:02
>>414
人のプログラムの改造かな
それも構造が簡単な、分かりやすいもの程いい

自分の場合はBASICからなので具体例でないかも知れないが
表示メッセージをいじったり、変数や条件文の数値(例えば残機設定とか)を変えてみたり
まんが形式のプログラム解説本を読んで変数や文法、初歩命令を覚えたり
人のプログラムを見て部分的に何をやっているのか調べて技術を盗んだり(ry
という感じで続いてる

AIなら、改造は有名配布AIではなくてデフォルトAIのがいいね
有名配布AIは設定変更を容易にするために変数が多すぎて一部分を見ても分かりづらい

余談だけど、すがやみつるが自分の漫画の人気キャラで分かりやすくプログラムを解説させた
本があって、当時すり切れるほど読んだなあ

416(○口○*)さん :06/12/12 18:11
や、そうじゃなくて
正弦定理で何やったのかってとこ。

417(○口○*)さん :06/12/12 18:31
あ、そっちの方か、すまそ

正弦定理(余弦etc含む)の方はもう忘れた
ピタゴラスの定理の方だったら今も使ってるし言えるよ

1.ターゲットの位置を原点として、ホムの相対座標x,yを底辺・高さとする直角三角形に見立てる
2.ピタゴラスの定理で斜辺を(距離)を求める
3.ホムの相対座標x,yをそれぞれ距離で割る
  するとターゲット〜ホムの直線上で、ターゲットから距離1だけ離れた座標が割り出される
4.自分の場合は距離2で保ちたいのでその座標を2倍し、小数点第一位を四捨五入する
5.ターゲットのポジションに4で求めた座標を加え、その位置へMOVE命令

※luaに四捨五入はなかったと思ったので自力で作りますた

418(○口○*)さん :06/12/12 18:43
四捨五入てmath.roundなかったっけ?と思って調べたらなかったな
まあmath.floor( a + 0.4 )でいけるか

419(○口○*)さん :06/12/12 19:03
>>418
しむらー。
function math.round(x) return math.floor(x + 0.5) end

420(○口○*)さん :06/12/12 19:39
数学とかの式使えれば処理効率は上がるだろうけど結局はアイディアがものを言うんだろうな
仮に微分積分をホムAIで使うとしたらどういう時に役立つだろうか

421(○口○*)さん :06/12/12 20:07
SBRの仕様変更がひどい

422(○口○*)さん :06/12/12 20:16
奥義狩りできない?

423(○口○*)さん :06/12/12 20:24
サブレは親密度3以上じゃないとダメ。

424(○口○*)さん :06/12/12 20:29
癌マジ死ねよ

425(○口○*)さん :06/12/12 20:34
ディレイ付けるくらいの修正でよかったのにね・・・
さすが斜め上の癌

426(○口○*)さん :06/12/12 20:56
厳密には新密度2.1以上・・・かな
満腹度75のときに餌あげたら一発だけ打てた

ML5だとSPなくなるし1使うしかないか・・・

427(○口○*)さん :06/12/12 21:13
>>420
>結局はアイディアがものを言うんだろうな
>仮に微分積分をホムAIで使うとしたら
手段にアイデア出してどうするw
せっかくだから考えてみたけど。

微分の代表的なものではニュートン法による近似計算があるけど、
整数しか扱わないから二分法で十分な予感。
そもそも方程式で与えられるようなデータあったっけ?

あとはPID制御でも使って、SP消費ペースから今後のスキル使用ペースを
動的に調整するとか。イメージとしては、PCがSPを余らせないように、
使いすぎないようにスキル使用量を管理するのに近い。
…と書いてから気が付いたけど、パルス的な制御しかできないから
うまくいかなさそう。

やっぱ実数扱わないなら微積いらないかも。

428(○口○*)さん :06/12/12 21:20
実際ホムAIぐらいだと変に動的にされるよりある程度は静的な方が
主人が扱いやすくていいと思うんだ。性的な意味で。

429(○口○*)さん :06/12/12 21:52
SGでノックバックした敵の座標を予測するとか・・・
労力に見合わないか

430(○口○*)さん :06/12/12 21:55
まずSGを使ったかどうかがわからんしなぁ。
Wizがガスターならいいかもしれんが…。

431(○口○*)さん :06/12/12 22:21
タゴ指定じゃない詠唱→地面指定魔法
モンスターの座標が2セル以上飛ぶ→ノックバック

どのみち座標をリアルタイムで監視しないといけないから重くなるか

もしくは
Wizが詠唱モーションしてる+詠唱タゲの相手が居ない+[ALT+T]でSG詠唱と判断させるか

432(○口○*)さん :06/12/12 22:25
>>431
試したこと無いからわからんけど、地面指定にするとそのキャラのV_TARGETは0になる?
地面をターゲットしたかどうかなんてわからないと思うからターゲット情報でとるしかないけど
もし前回の対象指定が残ったままだったら上手くいかない気がするな。

まぁ俺も一番楽なのはケミ側でトリガー引いてやることだと思う。
Alt+Tとか。

433(○口○*)さん :06/12/12 22:31
あー、古いの残るんだっけか

詠唱中のWizにカーレボかヒールやって
ケミのタゲ=詠唱Wiz
になったらSGと認識とか

434(○口○*)さん :06/12/13 09:40
ちと前の話に戻るが、
三角関数は、ホムに円の動きをさせるときに便利。

東方向を基準(0°)、r:半径、a:現在の角度として

角度aの更新(30°刻みで移動させるならaに30°を加える)
x = r * cos(a) + 中心座標のx
y = r * sin(a) + 中心座標のy
ホムを(x、y)に移動させる

あたりで円の動きをさせることができるはず。
(sin、cosの引数がラジアン単位なら、ラジアン単位にする)
実際に作るなら、360°を越えた場合の修正をする必要もあるかな。

刻みを90°にすれば正方形、120°にすれば三角形にもできる。


>>417を三角関数で実装するんだったら、
x,yの取り方は>>417と同じとして、

arctan(y/x)で、東方向とホムの位置の間の角度を求める。
求められた角度をsin、cosに入れて、
>>417の3の「ターゲットから距離1だけ離れた座標が割り出される」

435(○口○*)さん :06/12/13 15:20
ゲームとか作業を楽にするスクリプトとか組んだりする人は必要にかられて覚えるけど必要ない人にとっては全く未知の領域。
ゆえにプログラムは難しいというより敷居が高い。
敷居またげばそうでもないが、またくまではとんでもなく広くて深い谷。

436(○口○*)さん :06/12/13 15:56
必要の無い人間はそもそもこのスレを見ない

437(○口○*)さん :06/12/13 17:24
必要は発明の母。例えそれが車輪の再発明だろうと。

438(○口○*)さん :06/12/13 18:12
必要は発明の母、失敗は発明の父
必要が発明を生み出し
その発明を失敗が育てる
こうして技術は発展していく

439(○口○*)さん :06/12/13 18:15
sage忘れごめん

440(○口○*)さん :06/12/13 18:17
肝心なことが抜けた気がする。
ホムAIをいじりたいという欲求だって、立派な「必要」じゃないかって思うんだ。

441(○口○*)さん :06/12/13 20:20
いじりたかったけどどういう仕組みで動いてるのかわからなくて放置

442(○口○*)さん :06/12/13 20:21
ところで最近何かAttack回数3回だとラグくない?2回にすると直るんだけど。
漏れだけ?

443(○口○*)さん :06/12/13 20:26
>>441
興味が強くなけりゃそんなもんだ
>>442
それはAttack多重のキャンセルを発見した当初から言われてた気がする

444(○口○*)さん :06/12/13 20:35
え、今まで大丈夫だったのに同じ環境で急にダメになるってのあったの?

445(○口○*)さん :06/12/13 20:37
仮に鯖パッチが当ったとすれば同じ環境ではないだろう?

446(○口○*)さん :06/12/13 20:54
人間の体感ラグを5↑として
すこし前
環境ラグ1+多重送信ラグ3=4ぎりぎり感じない

環境ラグ2+多重送信ラグ3=5体感領域に入っておもー
多重送信を減らして
環境ラグ2+多重送信ラグ2=4でぎりぎり感じない

多重送信が重さの元だっていうのは元から知られていたこと
今まではそれが人の感じないぎりぎりだったから何とかなっていただけ
基本が通信上の問題だから環境なんて時間単位で変わるよ

447(○口○*)さん :06/12/13 22:07
メンテ直後ってラグが多発するだろ。だからじゃないかな?
サバが落ち着いたら元通りになると思われる。

448(○口○*)さん :06/12/14 02:39
知ってる人に教えてもらいたいんだけど、LUAの場合
requireしたいファイルは絶対に""で指定したものしか読み込めないのかな?
char型でファイル名指定してrequireしようと思ったけどエラーしか出ない。

filename = (適当なファイルパス)
require filename


↑これアウトね。
なんとかして動的にrequireするファイル名を変更したいんだけどよくわからない。

449ホムer ◆HOMUDioeto :06/12/14 02:52
filename = "./AI/hoge.lua"
require(filename)

ttp://uri.sakura.ne.jp/~cosmic/yuno/lab/lua5_manual_ja.html
調べような少しは。

450(○口○*)さん :06/12/14 02:58
>>449
d。そこ読んでるけど見落としてたくさい。括弧つけるだけでいいのか。

451(○口○*)さん :06/12/14 04:28
多重Attackは鯖に当てられるパッチだけでなく蔵に当たるパッチでも変化する
ついでに言えば常駐ソフトや蔵起動前と後にPCで作業した行為全般にも影響される
ウィルス検索後の起動とか起動中にOSとかの自動アップデート来たときとか普通にラグる

452(○口○*)さん :06/12/14 04:49
>443
プログラム経験あるから大体の意味はわかるんだけど
どう流れているのかまったくわからんのよね。
ループがないのになぜループしてるのかわからない。

453(○口○*)さん :06/12/14 05:18
なんか今やったらちゃんとトレースされて解決。

AI( id )
Trace( "実行" )
end

これでやったら実行1行しか出なくてMove追加したら
ちゃんと移動するのにトレースは実行1行のみだったんだ。
これで少しはいじれるかな。

454(○口○*)さん :06/12/14 05:31
>>453
そりゃTraceの仕様からして前回と同じ内容の行は出力しないから。
同じTrace内容は基本的に連続して書き込まれないようになってる。

455(○口○*)さん :06/12/14 07:17
ユーザーのいじれるAIはROって大きなプログラムの中の一関数に過ぎない
クライアントのループからタイミングを見て呼ばれてくるだけ

456(○口○*)さん :06/12/14 07:41
>>452
そのループが何の意味かわからないけど、AI()のことなら
クライアントからその関数が呼ばれてそこから全てがスタートしてるって感じ
Luaは他のプログラムに処理を追加するのに特化した「組み込み型」だから
"ROクライアント"で既に一定間隔のループで"AI.lua"内部の"AI()"を呼ぶようになってる

その時に渡されるAI(id)のidがホム自身のIDで
後はGetVとかGetMsg (id)とか、クライアントで設定されてる関数を呼べば
設定された範囲でデータを持ってこられるって感じ

失敗を重ねながら少しずつ試していけばすぐ出来る用になるさ
ここで質問してくれれば、分かる範囲で力になるよ

457(○口○*)さん :06/12/14 10:10
>>448
http://uri.sakura.ne.jp/~cosmic/yuno/lab/lua5_manual_ja.html#2.5.7
>f'...' (および f"..." や f[[...]]) は f('...') の
>シンタックスシュガーであり、引数は文字列リテラルひとつである。

つまりこれは、その「引数がリテラル一個のみ」という例外。
require"Const.lua"

(Ruby等のように)いつでも()が省略できる言語仕様というわけではないんだ。

458(○口○*)さん :06/12/14 11:33
こういうマニュアルでシンタックスとかリテラルとか言われても
なんのことかさっぱりなんだよな。ぐぐってもよくわからんし。

そういう点じゃやっぱり根本的なとこの勉強が必要なんだろうな。
説明を理解するための勉強っつか。

459(○口○*)さん :06/12/14 11:35
>>458
これを機会に勉強してみたらどうだい?
勉強は無駄にはならないし

460(○口○*)さん :06/12/14 13:53
おおざっぱに言葉の使われ方から
なんとなくこういう意味かな?ってのが分かる時はある
シンスタックとか意味不明でもプログラム自体はなんとかなることもある
全部を全部理解しなくても大丈夫だよ
ましてや趣味でやってる日曜プログラムだ

461(○口○*)さん :06/12/14 13:55
PC用語みたいな辞書とかでぐぐるとそれっぽいのは見つかるからそういうの参考にするのもいい。
まあちゃんと調べた後にわかんなきゃ聞けばいい。それで邪険にするならする方が狭量なだけだし。

462(○口○*)さん :06/12/14 19:23
>>458
俺的にはシンタックスやら見ると
横文字使いたいだけちゃうんか!
って思う

そんな一応SE職な俺

463(○口○*)さん :06/12/14 19:43
別に他の言葉でもいえるのに横文字にするのってあるよね。
ビジネス用語とかテレビの業界用語とか。
2chのプログラム板みたいなとこならそれで通用すんだろうけど
これゲームの一部なだけだから駆け出しでもわかるような言葉使ったほうがちょっといじったりするくらいにはいいかもね。
AIメインスレは落ちちゃってこっちは雑談スレだし。

464(○口○*)さん :06/12/14 20:45
ちなみにROとは関係ないところでだが、
Luaの文法がわかりやすくのってるところで、
ttp://f42.aaa.livedoor.jp/~nemucat/pukiwiki14/pukiwiki.php?%A5%C1%A5%E5%A1%BC%A5%C8%A5%EA%A5%A2%A5%EB%2FLua%B9%D6%BA%C2
こんなサイトもある。

ちなみに、2chのLua系まとめサイト
ttp://wikiwiki.jp/lua/




何故かリンク先で
ttp://i-saint.skr.jp/pg/j2g.php
こんなのを見つけたが気にしない。

465(○口○*)さん :06/12/14 21:03
1245 クリスマスゴブリン ノンアクティブ 詠唱無反応
1244 クリスマスジャック ノンアクティブ 詠唱無反応
1588 クリスマスオーク ノンアクティブ 詠唱無反応
アクティブ設定だったけど今回はノンアクみたい。
あとゴブはリンクしないのは確認。他は少数なので確認できんかった。

466(○口○*)さん :06/12/14 22:50
http://www.ragnarokonline.jp/news/play/patch/item/8541

■ホムンクルス「フィーリル」の奥義スキル「S.B.R.44」の使用条件が異なる
→仕様となります。ホムンクルス「フィーリル」の親密度が極度に低い場合、
 奥義スキル「S.B.R.44」は使用できません。

467(○口○*)さん :06/12/14 23:18
何かとおもったら本スレの誤爆か。

468(○口○*)さん :06/12/14 23:30
こっこの人へ
なんかどんどん酷くなってますががんばってください

469(○口○*)さん :06/12/15 03:07
パイプタバコを報告されてたのは流石にふいたw

470(○口○*)さん :06/12/15 14:40
こっこの人はええ人や

471(○口○*)さん :06/12/16 05:53
しーかーしー

472(○口○*)さん :06/12/16 16:04
こっこの人掲示板の返信だけで自分の自由時間全て奪われてる気がする。
ゲームとかできてるんだろうか…

473(○口○*)さん :06/12/16 16:57
じゃあ、お前らがレスすればいいんじゃね?

474(○口○*)さん :06/12/16 18:03
よそのサイトの掲示板に乗り込んでレスしていいのかも悩む。
防波堤代わりに、入門用のBBSとか作ってみるのはどうだろう。

475(○口○*)さん :06/12/16 18:09
全配布サイトからリンク貼ってもらって、「まずはそのBBSで質問するように」って感じかね
開発者本人以外では無理っぽいものになって初めて本人のサイトで質問って流れか

476(○口○*)さん :06/12/16 19:45
日曜プログラマからホムの移動AIについて質問なんだが
ホムの移動に慣性をつけたいんだが可能だろうか?
イメージとしては急に立ち止まると、
そのまま前に行ってしまうとか、方向転換うまくいかない感じ。

脳内でロジックを考えると、
今までの移動経路が保存できないんで厳しいかな?と。

勿論、愛玩用で実用性は無いけどね。

477(○口○*)さん :06/12/16 20:00
本来のMOVE先座標と今の座標を元に、移動先を算出してあげるだけでいいと思うが、
立ち止まろうとするアクションが目で見えないから、普通に少し先の座標に移動してるように
見えるだけじゃないかね。

移動先のズレ具合をランダムにしてやれば少しは見栄えいいかもしれないが、
どうしたって「方向転換がうまくいかない感じ」は出しにくいな

ずれた移動先まで行った後で、本来の移動先まで戻ってから次のアクションに
移るようにするとかが関の山?

478(○口○*)さん :06/12/16 20:13
移動状態に段階的な重み付けをして、最初に移動状態に遷移した時はホム現在地点から1セル
次のAIループが回ってきた時は2セル・・・で4、5セル程度を上限にして
停止するには上限の重み付け分AIループで移動距離を0(or1)セルにしてから次の状態へ移る
移動状態における移動方法は主人の座標へ移動ではなく、ホムから見た主人の方向へ
上記重み付けによる移動距離分移動して、通り過ぎたら過ぎた分また戻れば良い感じかね

ついでに方向に対しても90度方向転換する時は30度ずつ区切って
若干オーバーラン気味に旋回しながら方向転換とかがいいかな

479(○口○*)さん :06/12/16 20:18
>移動距離を0(or1)セルにしてから
移動距離を0(or1)セルに減らしてから

前進加速(減速)と左右方向転換しかない乗り物操作系を真似るとそれっぽくなると思う

480(○口○*)さん :06/12/16 20:48
>>477
現在地(0,0) 移動目標(3,3) 実際の移動先(5,5)
みたいなイメージということですね。
実際には三角関数とかで距離は測るとして。
>>478
重みは加速度?のようなイメージですか?
だんだん早く移動して、ゆっくり止まるような。

問題はやはりどちらの方向にどれだけの重みを持っているかを
AIで保持できるかですね。

移動方法はラジコンをイメージできました。

お二人のレスにより考えがまとまってきたので、作成してみます。
Move(移動方向,加速度,目的地への距離)ってな感じかなぁ

やはり、ループを超えた変数の維持がイメージできないので
その辺がポイントになりそうです。

481(○口○*)さん :06/12/17 01:16
主人が後衛タイプだとそういうの欲しいんだけどね。
慣性というか先頭に立つような移動。
でもオートでやるとやっぱ動きが怪しいことなるから敵いそうなら手動でポイント指定して動かしてるなー。

482(○口○*)さん :06/12/17 02:30
ホムと主人二人旅なら、ホムが後方にいてもアクティブはホムに向かう気がする
たいていね

483(○口○*)さん :06/12/17 02:34
先行移動はこっこで実装されてるよ。
おまけ程度なので大して賢い動きはしないけど。

484(○口○*)さん :06/12/17 05:47
>先行移動
こんな感じかね

require "./AI/Const.lua"
step=8;
function AI(myID)
x,y=GetV(V_POSITION,GetV(V_OWNER,myID))
if lastX and((lastX~=x)or(lastY~=y))then
Move(myID,x+(x-lastX)*step,y+(y-lastY)*step)
end
lastX,lastY=x,y
end

短くすると110文字くらい。しないが。

485(○口○*)さん :06/12/17 16:07
バニル未進化@くまーAI

多重送信だと定期的に激ラグ&数〜十数秒間パケ詰まり処理で行動不能になり
狩りにならんのでディレイをうまく調節しようとしてるんだけど・・・

Attack(MyID,MyEnemy)をどの間隔で送るのが理想なのか良く分からん。
ASPD=186.0→理論上攻撃間隔0.280msとして

1.そのまま0.280ms(から一寸長め)で送る
2.0.280ms+モーションディレイで送る
3.その他

のどれだろう? ちなみに、くまーだとATTACK送信間隔は

AI周期(150ms前後)+攻撃ディレイの設定(AttackDelay)

でいいんだよね?

486(*○口○)さん :06/12/17 17:17
通常は1
攻撃モーション自体はキャンセル可能で攻撃ディレイ(=理論上攻撃間隔)は固定
AI周期は150ms前後と不安定で、ディレイ設定のあるAIの実送信間隔は
AI周期×((ディレイ設定÷AI周期):切り上げ)
つまり理論上攻撃間隔がAI周期以下にならなければ大体300ms周期になる

多重送信している場合は少し変わって、AI中に実行されたAttack回数分
パケット送信スタックに積まれて、クライアントの実行速度依存で随時送信されていく
多重が多過ぎると随時送信が追いつかず、送信スタックがAttackで一杯になり
ケミの行動(用のパケット送信)が後回しor無視されてラグっている様に見える

純粋にクライアントの処理依存で、パッチが当たったりして全体処理の内容や
通信パケットが変更されると進化対策の多重回数を下げないといけなくなる

過去にPen4とか高めのスペックなのに多重に弱いってのは
タスクマネージャ開いた時CPU使用率が50%でフラフラしてる様なPC環境
 CPUを仮想的に2つに分けて別々に処理させる(ハイパースレッディング)やデュアルコアに
 ROの古いプログラムが対応してない為、CPUの半分しか使ってないから実処理が遅い
じゃないかと最近気になりだした

実際(直接比較するのも変だけど)各AIの多重耐性を調べた時は
Celeron1.7GとPen4 2.8Gでメモリ・グラボ他がPen4有利な環境ですら多重に若干弱かった

487(*○口○)さん :06/12/17 17:27
で、通常じゃない場合ってのは
仮に理論上攻撃間隔が180msだった時、次のAI周期が回ってる来るのを待つのは長すぎるから
約30msの無駄なループを回して強制的にAI周期を理論上攻撃間隔の180msにずらすってのがある
AIが実行されている間(通常は一瞬)は、クライアントからAI関数が呼ばれている状態だから
画面表示から何から停止している状態になる

数十ms程度なら画面のチラツキ程度にしか感じないけど、100msもAIに処理時間を掛けると
カックンカックンしてキャラ操作のジャマになるし画面表示も飛び飛びになるから
ケミ自身は速くなってると体感出来るとも限らないが鯖処理上は理論値にかなり近くなる

488(○口○*)さん :06/12/17 17:46
説明thx。

むー、やはりパケ詰まりラグを覚悟するか、
描画カクカクのどちらかをとるしかないのか。

本体I>D型だから主人の動作が快適にならないのも厳しいし、
かといって火力がホム頼りだから攻撃速度が遅いのもなぁ・・・
うまいとこ折り合い見つけて調節するしかないか。

489(○口○*)さん :06/12/17 19:09
追記。

AI周期が約180〜200msだと判明・・・コリャ絶望的だorz

490(○口○*)さん :06/12/17 19:28
工体のAI切り換えツールのプラグインはパケ詰まりしにくいらしいけど
Aspdへの効果が薄かったので、
結局今はくまーAIの2343行目と最後のend前に
> if (MyState == ATTACK_ST) then
> OnATTACK_ST ()
> end
を追加する多重送信でAspd対策している。
PenV733でケーブルな環境では今のところパケ詰まりラグはおきてない。

当初、何も考えずに最後のend前に2個連続で追加したときはラグってたから
追加する数だけでなく位置にも依るっぽい?

491(○口○*)さん :06/12/17 21:10
続報。

TraceAIを用いてGetTick()で
AImainの頭、OnATTACK_STの頭、スキル処理の直前、AImainの終わり
の時間をトレースしてみたんだけど・・・
430972296 430972296 430972296 430972296
430972578 430972578 430972578 430972578
430972718 430972718 430972734 430972734
430972953 430972953 430972968 430972968
430973093 430973093 430973093 430973093

とまぁ、見事に同じ時間をゲッツしてる罠。GetTick()ってもしやあまりあてにならんのか・・?

492(○口○*)さん :06/12/17 21:13
>>491
それは過去にも検証されてる。
AIループは実際ミリ秒以下の速さで駆け抜けてるので値は変わらない。

ちなみにAIループ1回で固定の値を持ってるかどうかという検証も既にされてて
任意のループである一定時間AIのサイクルを止めてからGetTick()するとちゃんと値は更新される。

493(○口○*)さん :06/12/17 21:22
GetActorsも固定値じゃないって結果でてたっけ?

494(○口○*)さん :06/12/17 21:28
>>493
配列の順番?
それは試されてないんじゃないかな。IDはそりゃ短いスパンで見たら固定だろうけど。

495(○口○*)さん :06/12/17 22:05
いや、返されるテーブル値

496(○口○*)さん :06/12/17 22:14
Actorsは画面内のIDを全部返すから少なくとも画面が更新されない限り変わらなくないか。

497(○口○*)さん :06/12/17 23:05
AI実行中はROクライアント止まってるから何もかも更新されないと思ったが・・・
通信パケットだけバッファに溜まり続けるみたいだけど

498(○口○*)さん :06/12/18 10:38
497さんの言う通り、AIを抜けるまではTick以外は更新されない。
(Tickだけは割り込みでカウントアップされる。)

499(○口○*)さん :06/12/18 12:01
クライアント内時刻とオブジェクトの同期は取らないといけないから
パケットの受け取りは常に行うが、バッファに溜めるだけで特に処理はせず
AIを抜けてから受け取った順に処理していくんだろうね
AIで数秒止めている間に周囲で使われたスキル音とか
ループ終了直後に纏めてぐわんっと鳴ってたしね

500(○口○*)さん :06/12/18 16:15
受信パケットのバッファリングはWinSock(Windowsのネットワークライブラリ)がやってるだけ。
TickはWindowsのGetTickCountという関数への単純なラッパで、毎回GetTickCountを呼び出すので常に最新の値を返すが、
元々GetTickCountは50ms程度の精度しかないからほとんど同じ値が返ってくるだけ。
クライアント自体は、AI呼び出し中はパケットの処理も割り込みもなにもしてないっぽい。

>>495
GetActors内でクライアントが管理しているActorデータから
Luaに渡すためのテーブル形式に毎回変換しているとしたら
テーブルのアドレスは毎回変わるはず。
キャラが多いところでGetActorsを呼び出すと重いっていうのはそのせいかもしれない。

501(○口○*)さん :06/12/18 17:19
freezeの出来ない言語でのAPIなら無難な仕様だと思うよ。
特に参照とかポインタとかの概念がわかってない人相手に同一のテーブルを
返したりすると、知らずに破壊的に利用した状況で躓くことになる。
最適化はスクリプト側にまかせればいいさ。

502(○口○*)さん :06/12/18 18:28
>500さん
精度50msecって、50msec毎に更新と言う意味じゃないよね!
1msec毎に割り込みは入っているはずだが・・

503(○口○*)さん :06/12/18 19:12
>>502
その可能性はあるかも

ioでのデータ取り込み時間の計測をループで何度も回して、GetTick()の差を書き出してた時に
やたらと「15,16、31,32、47 [ms]」とか16の倍数付近の数字だけしか出なくて気になってたけど
Win自体が一定(割と遅い)クロックで数値の更新をしているとすれば↑の離散値しか出無いのも頷ける
64Hz≒15.6[ms]でWinの優先度とプロセスのクロックは〜とか細かく突っ込むとキリがないし
AIと離れすぎるから、とりあえず100msオーダーで使ってる限りはあんま気にする必要も無い

ただそうなると>>487で書いたAIでウェイトを掛けるASPD最適化は根底が崩れるな・・・・
(確か安っぽいAIの人も同じ方法で色々やってたが・・・・

504(○口○*)さん :06/12/18 19:19
>Win自体が一定(割と遅い)クロックで数値の更新をしているとすれば↑の離散値しか出無いのも頷ける
ちと修正

Winの数値更新が1msとか速かったとしても、ROのクライアントが実行されるクロックに依存してしまい
結局離散値しか検出出来ないから>503の様な計測結果になるって事だな

505(○口○*)さん :06/12/18 20:26
まぁ通信コストに20〜100ms掛かるから実際それ以下の精度での処理は信用出来ないよね
クライアントが正確に動いても誤差の方がでかい
多分それもあってパケット詰まり起こさないようにAIループは150ms単位なんじゃないかな
ユーザーAIではことごとく破られてるけど

ちなみに16msだと大体60fpsになる
この数値はわりと信憑性あるね

506(○口○*)さん :06/12/18 21:51
ちょっと実験
VBからWinAPIのGetTickCount呼び出してみたら
そもそもこいつが15〜17msで返してきた

クライアントがそのままkarnel32のGetTickCount呼び出してるってので正解ぽい
timeGetTime呼んでくれれば1ms単位で分かるんだけどね・・・

507(○口○*)さん :06/12/18 22:18
fps60だと16.67msになって15msだとfps66.7換算になる
時計類は2や10で倍周していくと大よそ1秒になるクロックを基準にしてるから
15〜16msなら64Hz(≒15.6ms)になる(大元の発振子はMHz)

とかまぁ色々予測は立つけど結局、ROと同じかより優先度の高いプログラムが動けば
その分AI周期が遅れたりGetTickの値もデタラメになる
多少GetTickがいい加減な値になっても平気な様に適度にマージン取っておくとかがいいのかな

508(○口○*)さん :06/12/19 02:54
もしかするとこっこの人のメンタルの時間管理の件てそれが原因なんじゃないだろうか
ROと同等かそれ以上の優先度の処理が行われていて
(メディアプレイヤーやファイアウォール、アンチウイルスソフトなど)
それによるずれの蓄積じゃないかな

なんか時間管理で新規の再取得をほとんどやってないように見える
条件文も遊びが少ないから想定外の値に弱そうだし

509(○口○*)さん :06/12/19 03:07
>>508
今のテストVerからはos.time使うようになってます。
GetTick()は確かによくずれるっぽいですね。
数秒単位の短い時間かつ多少のずれが許される時間管理には使えますけど
補助系スキルの長時間な時間管理はosで呼んだ方がいいはず…ですよね?

510(○口○*)さん :06/12/19 08:30
os.timeは1000ms単位でしか帰ってこないからAIループ5回分くらいズレっていうか同じ値が帰り続けるけど大丈夫なんだろうか…

もしGetTickがGetTickCountそのまま返してるとして
その値が実際の時間とズレる=Windows管理の内部時計(PC立ち上げてからの累計時間)がズレてるってことだから
どこからも信用出来る値が帰ってこないような気がする

511(*○口○)さん :06/12/19 09:14
Windows管理の内部時計自体は特に何の変哲もない只の時計で、時刻もまぁ正確(1週間で±1秒とか)
問題はGetTick()が参照しているGetTickCountの値の更新がまちまちな間隔で行われるってだけで
参照値その物は実際の時刻から最大でその周期分(↑の例なら約16ms)前後するだけ
時間管理で使う場合は長さに関係なく初めと終わりの2箇所がポイントになるから2倍の±32msって事になる
いくらPCの時計がオマケ(メインは演算だから)程度に付いてるとは言え、10分程度の時間管理で数秒もずれたりはしないよ
(ネットに繋いでいるなら普通は時計の同期は行うしね)

512horo :06/12/19 10:49
うちのAIは、スキルディレイの監視などを全て os.time に切り替えた。
100msec単位でやりたかったのだけど、GetTick()では時間のズレが大きい。
画面書き換えやHDDアクセスが多く入ると、GetTick()はその間カウントがまともにされない。
os.timeの場合は、ハードの時計から値を持ってきているので通常の時計並に正確な時間が取れる。
因みに30秒をGetTick()とos.timeで比較すると、38秒:30秒などように酷い時もある。

513(○口○*)さん :06/12/19 12:13
>>510
適材適所。
長いスパンで時間比較するなら誤差を含みやすくなるから、ミリ秒あきらめてos.time()を使う。
短い部分ではGetTick()使うしかないし、16ms程度の精度は念頭に入れて設計する。

Attack()最適化とかのよほどピーキーなことをしようとしなければ、
GetTick()の誤差はともかく精度は気にならないと思うけどね。

>>511
>Windows管理の内部時計
M/Bのハードウェアクロックのことを言いたいのだろうけど、
その表現だとソフトウェアクロック(つまりGetTickCount)とも読めるよ。

>初めと終わりの2箇所がポイントになるか
時刻同期に関してもまさにこれで、絶対値じゃなくて相対値だから関係ない。
むしろ同期処理の割り込み自体が誤差の原因になる。

ついでに補足。
一ヶ月に一分の狂いが出るとして、一分あたりの狂いを求めると
60 / (30 * 24 * 60) = 1 / 720 = 1.389 [msec/min]
12時間に1秒ずれる。
一週間に一秒なら
1 / (7 * 24 * 60) = 1 / 10080 = 0.0099 [msec/min]

514(○口○*)さん :06/12/19 12:39
>>512
それ具体的にどういう方法で検証してどういう結果が出たのか気になる。

というかそもそもGetTick()の中身ってどうなってるんでしょうか。

515(○口○*)さん :06/12/19 12:52
>>514
>そもそもGetTick()の中身って
>>500とか>>506とか。

GetTickCountが>>512の言うとおりの仕様なのかは知らない。

516horo :06/12/19 14:42
>514
AIで、チェック用のプログラム組んでテストした結果ROの画面書き換えが多いとずれる。
基本的にos.timeとGetTickCountのソースは別物です。
os.time = MBの内部時計の値を参照する。(カレンダー機能なども入っている)
GetTickCount = 割り込みのタイマカウンタ値を参照する。(ハードウエアタイミング制御などに使用する)
といった別物。
で、先にも書いたように、並列処理されるHDD書き込みなどの別プロセスで割り込みを禁止するタイプのソフト
例えばデバイスドライバなどが激しく動いていると、タイマカウンタが正しくカウントアップされない。
でも、msecオーダーの処理で多少の遅れは気にしない。
(遅れる分には精度を要求されない。逆に早いとタイミングを作る上で困る。)

517horo :06/12/19 14:53
>505
AIの呼び出しサイクルの最低値は140msec固定。
ROのパケット処理が多いと、クライアント処理が遅れるために140msecを大きく超える。
実測してみると140msecを最低に300msec前後までのバラ付が多い。(PC性能に依存するはず)
それとサーバーのレスポンスはGvなどでラグがひどい時は秒オーダーにもなる。
スキルをサーバーに発行してもそのレスポンスを得られるタイミングを調べたが、140msecサイクル
でAIが呼ばれている状態だとサーバーレスポンスを受けきっていないことが多い。
そのため、スキル発行のレスポンスをチェックするには少なくとも2回のAI呼び出しでチェック
しないと不安定だった。

518(○口○*)さん :06/12/19 21:26
とりあえず貼っておきますね

GetTick()の中で使われてるGetTickCount()の説明
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpsysinf/html/_win32_gettickcount.asp

os.time()の中で使われているtime()の説明
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/vclib/html/_crt_time.asp

519(○口○*)さん :06/12/19 22:20
os.timeってタスクトレイ右下の時計の値が帰ってくるんじゃなかったっけ?
traceAIの前半にある西暦時分秒とリンクしてた気がする

os.time=カレンダー付のただの時計
GetTick=CPUカウンタ
って思ってたんだけど
GetTickの方がずれやすいの?

520(*○口○)さん :06/12/19 23:02
それぞれの分解能一覧(元は別な物の説明)
http://support.microsoft.com/kb/172338/ja

>>512の8秒は極端な例だけど上記の分解能からすれば「スペック上は」
os.timeが1秒の誤差、GetTickが約10msの誤差って事になる
簡単に言うと物差しで長さを測る時に、測る物の端と目盛りのズレの理論最大値が↑の分解能って事
でGetTickのズレってのは物差し自体がPC環境で歪む事があるって事

ただ、普通ならGetTickが歪めばos.timeだって歪む筈だから
片方を基準にすればもう片方はズレて堂々巡りな話題でしかない
ズレはどちらも一定だから分解能が小さい方が影響を受けやすいだけで
よっぽど過酷な環境でROをプレイしなければ、現状半年以上も問題なく
GetTickでやってきてる実績があるんだからあんまり気にする事でも無い
分解精度を下げてでも気になって仕方ないならos.timeを使えばいいだけ

521(*○口○)さん :06/12/19 23:42
そういえば待機動作(くるくる)が実装当初からのGetTick利用の代表格
200-300ms(旋回パターンで異なる)間隔で移動先の分岐を行ってるんだから
秒単位でずれる事があるなら普通気づくし、利用者も多かったから不具合報告も沢山出てたはず

突然(定期なんだけど大概失念してる)ウィルス検索が始まったとかテロとかGv、多量のMH
もしくは最低動作スペックギリギリとか常駐ソフトが多いとか常にHDDアクセスしっぱなしとか
特定の状況下でならタイマーがズレて待機動作がおかしくなるけど、そういうのは特異な例外になる

加えて↑とかズレの原因になる様な状況ならそもそもROのクライアントも遅くなるから
AIのタイマーだけ正確にしても、ROが着いて来れなければ動作はしてくれないから意味が無くなる

522(○口○*)さん :06/12/19 23:53
そうなると>>512の検証っていったい何だったんだってことになるけど…。

523horo :06/12/20 00:01
>520
>ただ、普通ならGetTickが歪めばos.timeだって歪む筈だから
それは無いですよ。
クロックソースがまったく別物だから歪は同期しない筈。
os.timeはMBの時計から。(PCの処理に無関係にIC内部でカウントアップ)
GetTickはタイマー割り込みのカウントです。(PCの処理が重ければカウントがパスされる)

524horo :06/12/20 00:36
>521
ROクライアントが付いて来れなくても、スキルディレイなどサーバー側の時間も
計ってみたけど、どんなに重い時でもキチっと時間通りでした。
(まあ、リーフの緊急回避とか長めのスキルの切れる時間を計算しただけですけどね)
多分、サーバー内でも長めの時間カウントはos.timeでやっているんだと思う。
旋回パターン対する200-300msecのウエイトは実際のところ、AIの呼び出しサイクル
タイムが安定していないので、その通りのウエイトが入っているわけでは無いです。
例えば140msec-190msec-220msec-170msecって感じでAIが呼ばれますから
200msecのウエイトは、140msec+190msecだったり、場所によっては220msecだけ
だったりする。
まあ、もともとコマンドをサーバーに送ってどのくらい待てば良いのかと言う
部分なので、それほど精度にこだわる必要も無いので実害は無いです。
ただ、スキルを発行して持続が30秒となると、30秒後には再度かけなおすって形
では、時間が8秒遅れればそれはそれで困るので、特に気になったのはリーフの
緊急回避とかは、やはり移動していてストレスがたまります。
msecオーダーでの精度を求めるために調査したわけではなく、秒単位でかなりの
ズレがあるんです。
そこを何とかしたかっただけなんです。
まあ、実際にAIで検証プログラムを組んで試してみれば分かります。
移動している時の時間ズレは特に大きい事がわかります。

525(○口○*)さん :06/12/20 00:38
おまいら今日は一段と輝いてますね

526(*○口○)さん :06/12/20 00:49
この辺かな
http://e-words.jp/w/RTC.html
後は「パソコンの時計」とかで各自検索して納得しる

>>522
調べてたらNTPで調節された直前直後の影響じゃないかって気がしてきたけどもうどうでもいいですオヤスミナサイ

527(○口○*)さん :06/12/20 13:26
>>526のリンクは
>GetTickが歪めばos.timeだって歪む
って事でいいのかな?

蔵にあるディレイ未満ではパケ送信出来ないから、蔵の遅れにあわせた方がいいと思う
あとテンプレ見ると緊急回避Lv3の持続時間は30秒になってるけど
スキル使用後ディレイが35秒で固定されてるけど、ディレイ無視して30秒後にかけ直せるの?

528(○口○*)さん :06/12/20 14:23
>>527
無理。FMと違って緊急回避はディレイがきっちりしている。
Lv3だと連続でかける場合間に5秒はさむことになるね。

529(○口○*)さん :06/12/21 01:01
そういやTraceAIの文字化けはいつまでああなんだ。

>>523
ハード制御とソフト制御の違いだろうかね。
GetTickは負荷分ちょっとずつずれていくし、1mのものさしで1kmを頑張って計るようなもんでやっぱり少しずつずれていく。
os.timeは1km一気に計れるくらいの長さ(精度)はあるけど目盛りが1mより下がないのでごく短い間は測れないのが弱みかな。

530horo :06/12/21 01:10
自分の感覚だけど
5秒は我慢できるが、13秒我慢できなかっただけ・・

531horo :06/12/21 01:12
>529
キャラクターコードが違うだけ

532horo :06/12/21 01:22
traceai()
なんか使うだけでだんだん重くなるから別のを作ろうかと。
で、lua.exeがROディレクトリにあったから、これを直せば良いんだろうと
ソースいじってディレクトリに置いたけど、どうも関係ないみたい。
(無くても関係無い)
多分、ROにインクルードされているっぽい。
となると、AIの大元もインクルードされていて、多分AI.Luaはrequireされている
だけっぽい。
って、調べたところはこんな感じ。

533(○口○*)さん :06/12/21 04:06
> ROにインクルード
工エエェェ(´д`)ェェエエ工

534(○口○*)さん :06/12/21 04:17
exeなんかいじらなくても自作トレース関数で一定バイト以上になったら
新しい連番のファイル名を自動生成してそこに書き出させれば重くならないです

TraceAI()の()内にダミーの値をretrunするスイッチ切り替え用関数を入れて
TraceAI()が実行されていたらスイッチがOFFからONへ常に上書きし続け、されてなかったらOFFに上書きされたら以降そのままにすれば
/traceをキーにした処理の切り替えが可能になるので、その方法なら自作トレース関数も作れるし、
これを利用したホムのモード切り替えも可能です

535(○口○*)さん :06/12/21 04:24
RO蔵から提供されるライブラリが貧相すぎるからいじりたい気持ちは分かりますけど
プレイヤーでいじるのを許されてる範囲内で工夫した方が無難ではないかな・・・

特定フォルダ以外のファイルはあまりいじらない方がいいと思う

536(*○口○)さん :06/12/21 09:31
>>532
最近ROをやり始めたかホム進化実装辺りだか以降に公式から蔵落とすと
lua.exeが入ってるだけだからAIの動作には関係ないよ

因みにTraceAI()を必ず使わないといけない決まりは無いんだから
ioでlog*.txt(*は数字)とかに"文字化けしない"好きな書式で書き出せばいい
TraceAI()をラッパしても良いけど、ioで別途デバッグ用関数作って
デバッグ用と配布(通常利用時)用とかでフラグで出力の可否を設定しておくと
ROでコマンド打ち忘れてtraceaiが肥大化して遅くなる事もない

537(○口○*)さん :06/12/21 10:11
>>532,534
そういやTraceAI上書きできるっけか。
別にして書くの面倒だったが日付やバイト数でファイルわけできりゃ便利だ。
うん、自作のを作って使うことにする。
とりあえず別名で作っておいて必要に応じて関数名の一括置き換えかラッパーで使う感じになるのかな。

538(○口○*)さん :06/12/21 10:30
多分>>534の言ってる事は

function swich()
  traceswich = 1
  return "トレース開始"
end
みたいなスイッチ切り替えの関数作っておいて

traceswich = 0
TraceAI (swich())

ってやっておくと /traceai のコマンド入れたときにswich()が実行されて(traceswich == 1)になるから
これをスイッチにして自作のトレース処理が動くようにしろって意味じゃないかな
また /traceai やってswich()が実行されなければ直前のtraceswich = 0で0が入ったままになるし

・・・・合ってるよな?

539(○口○*)さん :06/12/21 10:41
ファイル管理系は安っぽいAIの DateInOut.lua の中にある関数とか使えるかもしれん
ごちゃごちゃしてややこしいけどファイル名が更新されてくのが便利だったから俺はそこから抜いて自作AIで使えるようにしてる

使い方はCMD.lua の下のほうで使われてるのが参考になるんじゃないだろうか
>if (loglongseek(TALKLOG, 2500)) then -- 全角で500文字を超えたら新しいtxtファイルを作る(ファイル名更新)
>  talkfilecount, TALKLOG = MakeTxtIni(2, talkfilecount, SAVETXTFILE, TALKLOG, SAVETALKNAME)
>end
>AddSaveIni2(filename, set_Date) -- 実際の書き込み
(少し見やすいように削ってみた)

540(○口○*)さん :06/12/21 10:44
×AddSaveIni2(filename, set_Date) -- 実際の書き込み
○AddSaveIni2(TALKLOG, set_Date) -- 実際の書き込み
こう書いた方が分かり易いか

541(○口○*)さん :06/12/21 11:17
TraceAI()って、/traceaiがONのときは受け取った文字列をファイルに
吐き出す、OFFなら受け取るだけ受け取ってなにもしないってだけ
じゃなかったっけ?

どちらにせよ>>538はTraceAI()が評価されるまえにswitch()が
評価されるから、TraceAI()の処理が何だろうとフラグが立つ。

>>540
filenameのほうがぜんぜんわかりやすいと思った。
もしくはこう添えておくとか。
TALKLOG = "./TraceAI.txt"

にしても>>532はツッコミどころが多すぎて手が付けられんw

542horo :06/12/21 11:22
>534
まあlua.exe触ったのは個人的な趣味。
自作トレースを組み込むのは言われないでもわかりますよ。

>536
ROディレクトリにlua.exeがあったんで、もしかしたら差し替えて使えるかも?
と思ったんですよ。
ROクラからローダブルって期待があったんです。
それならlua.exe作り変えて色々できますもんね。

543(○口○*)さん :06/12/21 11:30
>>542
もうそのへんで黙っとけwww

>lua.exe作り変えて色々できますもんね。
マジレスすると、手段とその発想がチートツールのもの。

544(○口○*)さん :06/12/21 12:13
horoは手段があれば自動餌もやりたいとか言ってる奴だから手に負えないwwwwwwwww

545(○口○*)さん :06/12/21 12:48
>>538
そんな感じ
>>541
こちらで試した限りでは()内の書き出すものを記入する部分にIFで使うような関数を書くと
/traceするまでその関数の実行は確認出来ませんでした
実験が足りなかっただけかもしれないので、また後で出来るかどうか確認してみます

>Lua.exeを作り変えて
それはだいぶ黒に近いから話すなら余所いってほしい

546(○口○*)さん :06/12/21 14:31
悪意はなさそうだしos.timeの使い道については興味深いが正規クラでできないことまでさせるのは逸脱してる。
ここではオートPPすらも避けられてるのを理解してくれ。

547horo :06/12/21 14:36
>545
そうなんですか!
541さんの言うような手順で評価されると思ってた。
一般的な構文解析は()の中が優先されるはずなんだけど実験してみよう。

>544
まあ、それって本音で思っている人は多いでしょ。
(Web検索キーの数も上がっているし、それを探している人多いんですね)
が、AIでできる範囲の事しかしません。
(lua.exeは趣味でソースを調べただけです。)
まあ、お邪魔でしょうから必要になるまではROMに入ります。

548(○口○*)さん :06/12/21 14:48
はーぁ

549(○口○*)さん :06/12/21 15:10
考えを改める気がないなら必要がないから二度と出て来ないでもらいたい
自分の考え云々じゃなく、スレ全体に迷惑がかかるコトを忘れないように

550(○口○*)さん :06/12/21 15:12
そうだな。下手な発言されるとスレ的にも自動餌容認してるのかとか
騒ぐバカも出てくるからやめてほしい。

551(○口○*)さん :06/12/21 15:17
798 :(○口○*)さん :06/05/08 19:50
実際に黒だとか白だとかが問題なのではない。

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


もうこれテンプレ入れようぜ。
あとhoro氏はAIスレの過去ログ読んでないだろ?
たまに「何を今更」的な発言が見え隠れする。エンペにSBRとか言ってるし。

552(○口○*)さん :06/12/21 15:39
幼いだけかと

553(○口○*)さん :06/12/21 17:34
>>547
>自動餌
うちにもそれでいっぱい来るけどあんまりやりたいと思いません。
というか、その検索ワードで探しているのは半分はAIじゃなくてあっちのほうじゃないかと…。

554(○口○*)さん :06/12/21 18:06
たまに高度な知能が必要なのはホムより御本人様じゃないかと思われる人がいるな

555(○口○*)さん :06/12/21 19:00
よしじゃあここで流れを切る為にネタを投下。

既に使えないけどSBR連打で
遠距離から超連打する方法。

通常は 通常攻撃+SBR+通常攻撃という命令を1回のAIで送信して
スキルモーションをAttackによる通常攻撃モーションでキャンセルしているわけだが
射程範囲外だとそもそもAttackが不発するので、この手は使えない。

そこでAttackの変わりに Move または MoveToOwner を使う。
つまりはプレイヤーが使う移動キャンセルと同様の手法。

SBRを使用したときにフラグを立てておき、次のループの頭で移動させる。
これによりSBRのモーションはキャンセルされ、超連打ができるようになる。
ただしこまめに移動することになるのでSPの自然回復はほぼ0になる。

という情報をね、温めてたんだけど
某所で紹介されて流入者増えて言い辛くなって
忘れ物パッチでひどくなって
結局使えなくなってムッキーヽ(`Д´)ノ

556(○口○*)さん :06/12/21 19:05
弓系移動Mobの位置ずれってどうしようもないのかな?
クライアント上で、真横に見えている弓Mobをホムが殴りに行くんだけど
実際の位置は大きくずれてて殴れないのでその場でスタックする。
主人が殴りに行くと実際の位置にワープするから正常に動くんだけど・・・
Attack()で殴れたか殴れないかの判断なんて出来ないよね?

557(○口○*)さん :06/12/21 20:01
Attackモーションは見えないからねぇ
ただ、相手の被ダメモーションは見えるから
何とか使えないかと試行錯誤してる人が居たような

558(○口○*)さん :06/12/21 20:09
>>556
Attack()が正常に相手に試行される前まではGetV(V_TARGET,MyID)の値が
現在ターゲットしている相手のIDに書き換わらない。

攻撃しに行っているという事は対象IDは保持しているんだろうから、
そのID値とGetVのターゲットID値が同一になるまでは攻撃できていないと判断してもよい。

遠距離系のずれはほぼこれが当てはまるので、例えばデフォAIでいうなら
MyEnemy = GetV(V_TARGET,MyID) になるまでは相手の位置をなんとか探索し続ければ
どこかで当たりが引っかかるかもしれない。でもこれでどうにかできないぐらい相手がずれることもままあるので
遠距離系はちょっと難しいかもしれないね。ちなみにスキル攻撃が遠距離で当たっちゃうとアウトなので
条件成立まではスキル発動もカットしておくといいかも?

559(○口○*)さん :06/12/21 22:17
>>556
廃屋でやってると高確率で起きるね。
テレポアウトなどで最初からいるのはそのまま殴れるけど画面外から来るやつは大抵ずれてる。
たまに正しい位置にワープするのがいるが主人が動くと更新されるのかな?

>>558
殴ってタゲ移るのと移らないのがいるみたいなんだよなー
しょうがないんでとりあえず近接mobから優先的に倒して、遠距離はオートスキル頼りに倒してる。
あっちが動くくらいの距離とれれば画面更新されるんだろうが戦闘中に弓の射程外まで動くの大変だしなー。

560(○口○*)さん :06/12/21 23:47
>556
深い検証はしてないけど、
OnCHASE_ST()の中で毎回ホムの位置を取得するようにしておいて、
一定時間ホムが同じセルにいる場合、Move()を再送信すると
遠距離MOBに対してスタックしなくなった。

自分は上記で問題無く使用してるけど、
OnCHASE_ST()状態では毎回Move()を送信するだけでもいいのかもしれない

561(○口○*)さん :06/12/22 00:11
クライアント上では接敵してることになっててATTACK_STに移行してたらそっちでもやらないと厳しいかも。
試したいけど土日まで試せない。

562(○口○*)さん :06/12/22 00:41
スタックしたときにTraceAIしてみると、ATTACK_STで延々とループしてる。
俺は、一定回数被ダメモーションが取れなかったら、MoveToOwnerを送って対処してるんだが
こっこは一歩づつ敵の方向に進ませて回避してるんだっけ。こっちのほうが良いのかな?

CHACE_STでのスタックは工体が良い感じに回避してた。
Moveを送った後、MOTION_MOVEじゃなかったらもう一回Moveを送ってるね。
遠距離MOBを追跡中にダメージを食らうと、目的地に着く前に移動が中断して位置がずれるみたいなんだが
このコードが入ってると、ダメージを食らってもヒットストップせずに突進していくよ。

563(○口○*)さん :06/12/22 01:17
>>562
主人のところへ戻ったとしても問題が解決しない場合もあるから、
念には念を押すってことで一歩ずつ進むのと主人のとこへ戻るのと2段階ぐらい作るといいかもね。

>CHASE_ST
デフォだと相手の位置情報が変わらない限り再度Moveを送らないんだよね。
毎ループでMove送ればまずヒットストップの問題は解決できるからそれでいいんじゃないかな。
それでなくても等速追従のためにFOLLOWで毎回に近いぐらいMoveを普段から送ってるんだし
多重Attackとかに比べたら全然問題ないと思うし。

564(○口○*)さん :06/12/22 17:10
>>545
ひさびさにホム育成する気になったのに金曜定期臨時メンテで
できなくなったから、うさばらし兼ねて理屈で考えてみた。
(素の)Luaレベルでその遅延評価を実現するには、

function TraceAI(v)
 if not traceai_mode then return end
  -- /traceai がoff(traceai_mode = false)だったらそのまま終了
 if type(v) == "function" then v = v() end -- 関数だったら結果を得る
 print( tostring(v) )
end

TraceAIがこういった気の利いたことをしてくれる前提で

TraceAI(switch) -- 関数そのものを渡すため、switch()ではない
TraceAI(function() return switch(true) end) -- 引数あるなら、なくなるようにラップ

クロージャで渡すしかないんじゃないかな。

TraceAI仕様がいまはチェックできないからなんともいえないけど、
少なくともTraceAI(switch())では無理だと思う。

>IFで使うような関数
ここがちょっと気になったのだけど、返値がtrue/falseってこと?
でもCやJavaと違って型や宣言がない言語では、返値はシュレティンガーの猫の
ようなもので、関数も評価してみるまではなにが帰ってくるかわからない。
だからそれを実行するかしないかの判断に用いることは出来ない、はず。


…メンテ延長キタコレ orz

565(*○口○)さん :06/12/22 19:47
GetDistance( x, y, GetV(V_POSITION, MyID) )
>まずGetVが実行され返り値がGetDistanceの引数として渡されて実行される

TraceAI(switch())
>まずswitchが実行され返り値がGetDistanceの引数として渡されて
>/traceaiがONならtxtに出力されOFFなら何もせずreturnされる

/traceaiのON/OFFによってプログラム内のTraceAI関数その物を無視する様な使用になってない限り
ON/OFF検知は出来ないと思うけど・・・・
>>545が実際に使った「IFで使うような関数」はちょっと見てみたい

今課金切れでちょっと確認取れないけど
TraceAI()がtxtに出力する時、一行ずつ毎回fileopen/closeを繰り返して居るのなら
出力してるtxtをioで取り込んで総ファイル容量をチェックすれば、ON/OFF検知と連番logに移し変えとかは可能
ホムの出し入れ単位でfileopen/closeしてるなら排他制御でioが弾かれて無理だけどね・・・・

566(○口○*)さん :06/12/23 02:27
AI読み込み直後は常にTraceAI.txtを消しておいて、
TraceAI一回送った後にファイル生成されてればってのはどう?

567(○口○*)さん :06/12/23 02:47
>>566
いけるねこれ。

os.remove("TraceAI.txt")

これでROインスコディレクトリのTraceAIがちゃんと消える。
/traceaiをしてない間はこのファイルは新しく作られないので消されたまま。
/traceaiするとファイルが生成されるのでio.openでチェックすれば分岐できる。

が、一度作られた後は再読み込み時じゃないと消せないね。
トレースとしては使いにくくなるけど一定時間で消す動作を繰り返せばいいのかな?

568(○口○*)さん :06/12/23 02:50
ちなみに/traceaiがONのままでもremoveできたので、TraceAI.txtは一応
関数のTraceAI()が実行されるごとに解放されてるっぽい。ちゃんと試してないけど定期的に消すこともできるとおもう。

569534 :06/12/23 08:46
今時間あるので実際にTraceAI()に関数入れて動作確認してきました!
結果、TraceAI()より先に()内が動くっていうのはこちらの勘違いだったと判明、
なにか記憶違いしてたみたいです
ごめんなさい

しっかりと()内の関数が先に動いてました
||||orz

また、
TraceAIの中身を書き換えられるのも確認
TraceAI = function() end
でTraceAI.txtへの書き込みは無くなりました

その後
local YOU = 1
TraceAI = function() YOU = 0 end
function OnFOLLOW_ST (mystate)

TraceAI(DateSave_(YOU)) -- File.txtに値を出力

end
これで出力した変数YOUの値を見たところ、書き換え後のTraceAI()は
/traceai のON/OFFに関係なく動いている模様

最初だけ"1"が出力されたところを見ると他の関数同様に先にDateSave_(YOU)が動いているみたいです

多分、/traceaiをキーにするにはTraceAI.txtの中身があるかどうかをスイッチにするしかないかも

570534 :06/12/23 08:56
って>>566-567で同じ視点の案がでてる
Σ(゜Д゜=;゜д゜)

function TraceFile_swich()
  local trace_file = 0
  for line in io.lines(filename) do
    trace_file = line
  end
  if (trace_file = 0) then return false end
  local fp = io.open(filename, "w")
  fp:close()
  retrun true
end

これならファイルを削除しなくてもTraceAI.txtの中身があるかどうかで分岐作れる・・・はず
os.removeで削除したらゴミ箱フォルダに移動したっけ?
HDD容量がギリギリで財布も寒いから書き換えで済むなら書き換えで済ませたい・・・

571(○口○*)さん :06/12/23 08:57
名前のこってら
|||orz

572(○口○*)さん :06/12/23 12:05
俺の案だと
1.TraceAI.txtを削除
2.TraceAI("test")とか送る
3.TraceAI.txtの存在をチェック、あれば is_traceai = trueなければfalseとかしとく
4.true なら require かなんかで本来の TraceAI() を上書き(他にも方法あったっけ)
5.以後、TraceAI への出力を4で作った方で処理する
みたいに考えてた。

573(○口○*)さん :06/12/23 12:11
そういえばなんか代入でもできた気がした

574(○口○*)さん :06/12/23 18:21
ファイルサイズの取得ってファイルオープンして fp:seek("end",0) でファイル終端のオフセット取得するしかないのかな?
ログ分割処理やろうとしたけどこれだときれいじゃないのでもっとすんなり取得できる方法ないだろうか。

575(○口○*)さん :06/12/25 22:32
質問させてください。
現在、「可能な限りのAI」というのを使っています。
亜種のバニルミでOD2で狩りをしているのですが、あそこのノンアクの敵はスチールチョンチョンとゼノークですよね。
それでスチールチョンチョンばかりをカプリスで狙って、ゼノークはまったくといっていいほどタゲらない状態なのですが…
どちらかというとチョンチョンよりゼノを攻撃してほしいんですが、それはこちらからAIを書き換えて設定できるのでしょうか?もしできるのでしたら書き換えるAIを教えてもらえば、とおもいます。

576(○口○*)さん :06/12/25 22:36
>>575
他のAIは試したことないの?

577(○口○*)さん :06/12/25 23:45
というか、同じ質問をその「可能な限り」のBBSで21時ごろにしていますよね。
たかだか2,3時間でしびれを切らした、ということでしょうか?

可能な限りの方に限らず、AI作者の人が何でも知っているわけではないですし、
AIのことばかりやっているというわけでもないですし。
せめて質問をしたら、少し・・・dayの単位で待ったほうがいいかと。
マルチポストはあんまり好かれませんよ。

で、一応質問のことについていうと・・・
「可能な限りAI」では、独自の索敵・学習アルゴを使っているようです。
スチールチョンチョンよりもゼノを優先しているのは、そのアルゴゆえなのでしょう。
もし「可能な限りAI」を使い続けるのであれば、そのAI作者の方の反応を待つしか対処方法はありません。

AIにこだわりがないのなら、他の多くのAIでは「距離を見て近い側を優先」するような動きをしていますし、
敵の優先度を指定できるAIもいくつかあります。
単に乗り換えればおおむね解決するはずです。

578577 :06/12/25 23:49
すまん。脳内置換よろしく。

×スチールチョンチョンよりもゼノを優先しているのは
○ゼノよりスチールチョンチョンを優先しているのは

579(*○口○)さん :06/12/26 02:05
「タゲらない状態」が攻撃しない事ではなく、単にスキルを使わないという事であれば
テンプレで前に、きのこに関して修正したのと同じ現象が関係していそうな機がします。

GetActorsの並び順はMAP上に出現した順番に左右されているので(他にも左右する要素あり
OD2で最も旨くない鉄蝿は、アイテムを拾わない、特定の狩り方で故意に残す等される事が多いので
GetActorsの最上位に並び易くなり、SPが減ってから相手をするゼノへのスキル発動率は必然的に下がります
鉄蝿程度であれば無視するMOBに登録して、処理はケミで適当に突いてもいいですが・・・

580(○口○*)さん :06/12/26 04:10
手動攻撃じゃあかんの?そんなに手動は嫌なの?
と思った俺は病んでるのかもしれん

とりあえず
>>575
「一般的な」AIは「距離が近い」モンスターを殴るから、特定のモンスターだけ殴らなくなるってことはまずない
そんなに気になるなら他のAIを試したほうが早い

581(○口○*)さん :06/12/26 06:46
画面内に入ったPCのIDと時間を勝手に保存するAIってない?

582(○口○*)さん :06/12/26 06:56
>>581
えらくピンポイントな機能がほしいんだねぇ
多分ピンポイント過ぎてないと思うよ

作ろうと思えばすぐだろうけど、目的が分からないなぁ

583(○口○*)さん :06/12/26 07:07
>>582
ボス時間調べたいんだけど鏡使いたくないんで

584(○口○*)さん :06/12/26 07:43
人の流れから推測するってやつか・・・
作るんだったら

PC = {}
function sample()
 local actor = GetActor()
 local list = {}
 for i,id in ipairs(actor) do
  local flag = true
  if id > 100000 then  -- 人って10万以上だったよね?
   list[id] = true
   for pc in pairs(PC) do
    if i == id then
     flag = false
    end
   end
   if flag then
    TraceAI(tostring(os.date()))
   end
  end
 end
 PC = list
end
こんな感じかな(全角スペースを半角に)
AI.luaの中に

いっぱい書いてある

ここにコピー

function AI(myid)
 sample()
 いろいろ書いてある
end

って書いてTraceAIしてあげればはいてくれると思うよ

585(○口○*)さん :06/12/26 08:12
>>584
thx

こっこに貼り付けてみたんですが
どうもエラーを吐かれてしまいますね
帰ってきてから色々やってみることにします

586(○口○*)さん :06/12/26 08:12
>>583でしたorz

587(○口○*)さん :06/12/26 08:14
>>584でよかった
ボケててすみませぬ

588(○口○*)さん :06/12/26 10:45
IDよりJOBで判定したほうがよくない?
プレイヤーのIDって100000以下のもあった気がするし

589(○口○*)さん :06/12/26 10:52
調べてみたら100000以下はないか・・・・ごめん
まぁとにかくJOBで判定すると、
特定の職(チャンプ、クリエ等)とか発見しやすくていいかなと思った。

590(○口○*)さん :06/12/26 12:00
>>584
毎回listを一から作り直してPCに代入するから、「初めて会ったPC」ではなく
「直前にいなかったPC」が出力対象になってると思う。

それにせっかくハッシュテーブル使ってるんだから、ループ回す必要はないよ。

do
 local list = {}
 function RecodePCID()
  for _, id in iparis(GetActors()) do
   if id > 100000 then -- PC判定は適当によろしく
    if not list[id] then
     list[id] = true
     TraceAI(os.date() .. " " .. id)
      -- JobID->文字列変換の関数も作って、いっしょに吐き出すといいかも?
    end
   end
  end
 end
end

ただしファイルに書き出すとかの「永続化」をしてないから、
リザホムやテレポのあとには(「見かけた」ことを忘れて)重複を起こす。

ところで>>584って置換処理のせいか、インデントだけじゃなくて
全てのスペースが全角なんだね。ちょっとコピペしにくいんじゃないかな。

591(○口○*)さん :06/12/26 12:07
>毎回listを一から作り直してPCに代入するから、「初めて会ったPC」ではなく
>「直前にいなかったPC」が出力対象になってると思う。

それでいいような気もしてきた。orz

592(○口○*)さん :06/12/26 12:11
どちらにしてもどの数字が誰なのかわからんし、リストから
探すのは容易じゃないんじゃにゃいか?

593(○口○*)さん :06/12/26 12:22
>>592
質問者が何処で使うのか分からんけど
ボス狩りは大抵そのマップでは浮いてるから
チャンプとかクリエとかボス狩りに特徴的な職を抜き出せば
湧き時間に大まかなアタリをつけるくらいは出来ると思う

594(○口○*)さん :06/12/26 13:14
>どうもエラーを吐かれてしまいますね
スペースを全角からtabに変換し忘れてないか
そのままのコピペだとだめだぞ

595(○口○*)さん :06/12/26 13:38
この板はTabや半角スペースが効かないからインデントは全角スペースでやるしかないんよ。

596(○口○*)さん :06/12/26 13:51
テンプレにインデントの全角空白とかについて書いといたほうがいいんかな。
わからん人はインデントも字下げって書いておかないとわからんだろうけど。

597(*○口○)さん :06/12/26 14:21
「&nbsp;」で半角スペースが出せる
普段はTABでソース打って、貼り付ける時はTABを↑数個に置換すると
そのまま使えてスレ上でもインデントされて見える

まぁログの語るスレにコード書く時の大まかな統一表記の話題は出てる
インデントは半角空白2文字(全角空白1文字)辺りを目安とか(個人的にはnbsp4つが見易くて使ってる
定数変数関数名は余り省略せずデフォAIに出来るだけ沿う形にするとかね
あと幾つかのエディタ用に全角インデントの相互置換マクロもあった

この辺は、テンプレのAI研究室/FAQかサンプルライブラリにでも書いておくといいのかな

598(○口○*)さん :06/12/26 19:23
ちょっとトンチンカンな質問なんですが、>>590のAIの使い方ってLUA的にメモリなどの負荷どうなんでしょうか?

if not list[id] then
 list[id] = true

こんな使い方した場合、idの値までのメモリを確保されて重くなると言う事は無いのでしょうか?
仕様を判っていない馬鹿な質問ですが、よろしくお願いいたします。

599(○口○*)さん :06/12/26 19:41
luaのメモリ管理だと必要な領域だけを確保・解放してるから大丈夫だと思うよ。

600(○口○*)さん :06/12/26 20:33
>>598
なにと比較するかにもよるけど、配列との比較ならば、添え字は
(指定がなくても)必ずメモリ確保されるから大差は出ない。
特にこの場合は

list1 = {123,456,789}
list2={}; list2[123]=true; list2[456]=true; list2[789]=true
具体的にこの二つで比較してみると、

list1={}; list1[1]=123; list1[2]=456; list1[3]=789;
まずlist1の代入はこのように書き換えることができる。
(Luaでは「keyが数値であり、1から順序正しく並べられた連想配列」が
 配列として扱われる)

list1の構成要素はテーブル1個、数値6個。
list2の構成要素はテーブル1個、数値3個、真偽値3個。

Luaでは真偽値も数値も使用するメモリ量が変わらないから、
結果としてメモリの使用量は同じになる。

>idの値までのメモリを確保されて
どんな形であれ、記憶したいモノにメモリを確保するのは当然のこと。

「trueまでメモリを確保されて」ならわからないでもないけど、
上記の理由から、メモリを無駄に使うということはない。
どちらかというと>>584のようにテーブルを使い捨てるほうが
(気にならない程度だと思うけど)メモリ周りの負荷が大きい。

いちおう簡単に解説。
記憶するという意味では list[last] = id でも十分。
だけどこれでは「listの中にidが存在しているか」の検索するには
ループを回して、1からlastまで一個一個しらみつぶしにする必要がある。

今回はあえて添え字にデータを入れる(同時に「順序」という情報を捨てる)ことで、
Lua本体が備えている構造を利用し最適化を図ったというもの。
どのぐらい速いかっていうと、グローバル変数の値を得るのと同じぐらい。(処理内容が同じ)

601(○口○*)さん :06/12/26 21:34
つっこむのも無粋だけど
簡単じゃないよ長いよ

602名無しさん@初回限定 :06/12/26 22:17
>>601
すごくタメになること教えてもらってるんだから、黙って聞きなさい。(?)
特に重要なのは最後の数行。
よく友達リストを普通の配列で実装してるAIを見かけるが、
索敵の際に友達の数だけループをまわすハメになり、友達100人できるかなな人などは結構な負荷になっていると思う。

>>598
IDが100000だったとしてlist[1]〜list[100000]まで100000個分メモリが確保されてしまわないか?
って事で心配しているならば、そんなヘボ仕様にはなってないので安心してください。

603(○口○*)さん :06/12/26 22:25
「そのIDが友達であるかどうか」の判別にはとても便利かもしれないけど
これ一本だと「現在友達になってるIDは何番があるか」の走査が難しくない?
I友達リストを保存する場合は大変じゃないかと思う。

IDリストとチェック用の配列を両方用意したらいいのかもしれないね

604(○口○*)さん :06/12/26 22:34
>>603
そのために、LUAでは「内容があるIDのものだけを順番に引っ張り出す」仕組みがあります。

 for k,v in pairs( friendList) do
  〜
 end

・・・というループを書けば、friendList[xxx]の内容がnilでないもの全てを
チェックできます。

要は、
friendList[ ID ]= 1 ・・・としたら、IDの人を友人に。
friendList[ ID ]= nil ・・・としたら、IDの人を未登録に。

としておいて、友人か否かをチェックするには
if friendLis[ID] then ・・・とすればよい。

で、ファイルに出力するときには上述のループを使って、nilでないものだけを引っ張り出す。

そんな感じ。

605(○口○*)さん :06/12/26 22:52
>>604
なるほどそういうことが出来るんだ
これってループ内ではIDを順次走査でチェックしてるわけじゃなくて
nil以外のものを一気に集めてるってことでいいのかな?

これだと実際のIDの値はkを見ればいいことになるっぽいけど。

606(○口○*)さん :06/12/26 22:59
>>605
その通りです。

極端な話、nilでない要素が1つしかなかったら、
その要素の識別子がなんであるかにかかわらず、ループは1回しか回らず、
その要素の識別子は k を見れば判る、っていう感じです。

607(○口○*)さん :06/12/26 23:25
>>602
うーんでもねー>>592が聞いてることに対して余計な部分が多いんじゃないかと。
聞いてることって例えば t[1000] に代入するとそれまでの t[1]〜[999} までも確保されたりして負荷になってるのか?
って意味だと思うんでそこは「使ってないよ」ってだけじゃないのかなーと。

608(○口○*)さん :06/12/26 23:25
ごめん>>598だ。

609(○口○*)さん :06/12/27 02:35
>>598
Lua での話じゃないが、データ格納構造の説明されてるから、ちょっと読んでみて理解を深めるといいかも。

ttp://www.teu.ac.jp/aqua/3D/text/PDF/Container.pdf

610598 :06/12/27 10:42
ありがとうございます
聞きたかった事は>>602,607氏の内容です
昔のBASICでDIM配列はメモリを全て確保してしまったので、同じかと心配しました
ありがとうございました

あと、よろしければこの使用方法で配列の全ての値を一括で破棄する方法を教えて下さい
list[] = nil
これで良いのでしょうか

611(○口○*)さん :06/12/27 11:00
>>610
list = {}
これでOK

612(○口○*)さん :06/12/27 11:26
>>611
わかりました
ありがとうございます

613(○口○*)さん :06/12/28 03:10
某所のBlog、説明間違ってないぞ


nilで抜けるのはipairsの方でpairsは>>604解説どおりの挙動になるよね。
というかそもそもpairsがnextを返すようになってるわけで。

614(○口○*)さん :06/12/28 03:30
ipairsは1から順番の走査だから途中のインデックスに対応する内容がnilだと続きがあってもそこで終了。
pairsは順不同で全てを走査するってことだな。
あー、でもnilと近い扱いされるfalseは iparis でも通るのかな?多分nilだけで終了だと思うけど。

615(○口○*)さん :06/12/28 10:18
現在、バニルに最も適したAIって何だろう

616(○口○*)さん :06/12/28 10:19
nil と false はぜんぜん別物なので、誤解しないようにね。
nil は「値なし」、falseは「偽という値」。

ipair は「値がないもの」を終点としている。
そうじゃないと、「偽」という値を含むリストを走査できないですから。

617(○口○*)さん :06/12/28 10:31
>>615
やっぱりバニル使いのAIが無難じゃないのかな。

人力アンテナでバニル使いのAIは、最近更新された順に
「安っぽいAI」「rapsoAI」「Glenelg」「きのこAI」か。

ただまあ使いやすいってのは結局主観なので、
実際に使ってみて自分のプレイスタイルにあうものを探すのが一番だと思うけど。

618(○口○*)さん :06/12/28 13:50
>>602のように言ってもらえるのはありがたいし、流れからして雑談スレの
レスとしては価値があったと思うけれども、「質問への回答」としては
>>607の言うとおり。

特に、引用しておいて
>idの値まで「の」メモリを確保
「の」を読み落としたせいで質問の意図を理解しきれず、長いだけでピントの
ぼけまくった回答に。正直すまんかった。


ところで実証コード書いてみたら変な現象に出くわした。
t={}; for i=1,1000,1 do t[i] = true end -- (1)
t={}; for i=1001,2000,1 do t[i] = true end -- (2)
t={}; for i=100001,101000,1 do t[i] = true end -- (3)
t={}; for i=1,2000,1 do t[i] = true end -- (4)
(実際のコードではGC周りであれこれやってます)
「メモリ使用量は (1) = (2) = (3) < (4)」だと思っていたのに、
実際には (1) < (4) < (2) = (3) だった。
どうにもテーブルのサイズ拡張の処理で、添え字を基に拡張サイズを
決定しているような?(使用量を予想して拡張回数を減らすような最適化?)

詳しいことはあとでソースを調べてみるつもり。
とりあえず(1)と(2)は200件目あたりまではほとんど差が出てなくて、
その差も処理速度とのトレードオフと十分言える範囲。
だからあの程度の使い方なら安心してよさそう。

619(○口○*)さん :06/12/28 21:31
メモリ上には割り振られたアドレス(番地)には01が入っているだけで
入っているデータが何なのかの目次リストの様な物は別に用意されるから
(1)〜(4)それぞれ直前直後で測ったGCの差がどの程度の値、比率になったかによるけど

始点になる1から連続入力した配列だと、終始点アドレス保持分と各要素の連結領域分を使い
要素の追加は連結データ末尾に追加と終点番地の更新のみ
始点の無い離散的な配列だと、添え字と要素(の値があるアドレス)の対比表分と要素分を使い
要素の追加は対比表とメモリ空間の空き部分に書き込み

とかで>618の結果の様になってたりするのかなぁ
t={}; for i=1000,1,-1 do t[i] = true end
が(1)と差が出れば要素の定義代入の仕方でメモリの確保方法を変えている事になるね


ただ少し気になるのは、重力がLuaを元ソース通り正しく実装している保障が無い事
ちゃんと調べた訳じゃないけど、組み込み言語のLuaが組み込み先の環境に依存するなら
機械言語レベルでの挙動やメモリの扱いが違ったり、プログラム的には同じになる様に
挙動や扱いを変えて(又は同じに出来ずに)実装しているかもしれない
出来なかったのか目的を持って変えたかは別としてそういう可能性もある
(まぁ普段ROをプレイする上では全くもって関係ない事ではあるがw

620(○口○*)さん :06/12/30 14:35
こっこの板に新しいタイプのアホが涌いとるな

621(○口○*)さん :06/12/30 15:04
>>620
自分の分の矛盾にも気が付かないような人や、
字を読めても文を理解できないような人には、
かかわらないほうがいいです(笑

622(○口○*)さん :06/12/30 15:04
見てきた
確かに新しい
最初の自分の書き込みと2回目の書き込みが矛盾してることに気がついてるのだろうか
中の人が某イベントで疲れて帰ってきてBBS見たら、あまりのアホさに胃に穴空くんじゃないかってくらいだ
文字で「実装させる気はない」と書いてもダメならどうすりゃいいんだ・・・

623(○口○*)さん :06/12/30 15:09
そういや安の人がバージョン8のテスト版って言ってブログで自動PP封じたAI公開してるけどどれくらい効果あるのかな
AI.luaをコンパイルして見えなくした上でそこでSkillObjectを潰してるっぽいが・・・
AI.luaを代用されたら終わりな気もする

624(○口○*)さん :06/12/30 15:19
封じるってどういう意味?自分の作ったAIでは使えるように出来ないように
するってこと?そのAIってそんな事をしているのを踏まえたうえで使うほど
の価値があるのか?

625(○口○*)さん :06/12/30 15:25
>>623
AI.luaを代用って簡単にいうけど、実際にそれをやるのは結構面倒。
AI.luaから何がどうアクセスされてるかを調べないと、エラーの山になるだけだし。
実際問題としてAPPのソースパーツをその辺から拾ってきてくっつけるくらいしか
できない人には、多分無理なレベル:
つまり「安AIに安易な改造をしてAPPサポートしたい」って人には厳しいハードルだと思う。

逆に言うと、きちんと解析できるような人には意味は薄いけど、ブログ見る限り
「解析されてまで書き換えられたら、それはそれで勝ち」という心情に読める。
そういう意味では、十分効果はあるんじゃないかな。

626(○口○*)さん :06/12/30 17:18
>>625
サンクス、AI.luaの代用が面倒になるようになってるのか
>>624
興味をそそる変な機能はあるけど、使用してるかどうかの話題には全く出てこないし実用の価値はあまりないと思う

なんかSkillObjectだけでなくてV_OWNERも追加するとエラー出るようになってるな
「仕掛けを破れるもんなら破ってみろ」みたいなことがブログに書かれてたから「公開されたらやってやろうじゃないか」といきこんでたけど、なんか思ってたより敷居高そうだな・・・
もしこの処理が他の公開AIにも広まって標準装備になったら自動PPをサポートしてるAI以外で自動出来なくなりそうだ

627(○口○*)さん :06/12/30 17:32
というかあのガンホーの回答って別に「AIでケミスキルつかってもいいよ」とは
まったく読めないんだが、何を公式にOKされたとか息巻いてる奴が居るんだ

628(○口○*)さん :06/12/30 17:33
つか、単純にAPPを利用した狩りをしたい人には、現状で出来る以上の
機能なんか必要がない気もするから、使えるのを使うか、もしくは使える
までバージョンを使うだけの話だとは思うけどね。

そもそも、AIの仕様を理解しているなら他人のAIを使う必要ないし。

629(○口○*)さん :06/12/30 17:40
安っぽいの見てきたけど、恐いなってのが正直な感想
罠入りコンパイルされたら確認のしようがない
使わないから関係ないけど

630(○口○*)さん :06/12/30 17:44
安易な改造ってなら元のSkillObjectは別な関数に移し変えられてるはずだから
Luaの関数名等を格納しているテーブルを書き出してそれらしい物を
APPのソースにあるSkillObjectの代わりに使う手が残ってる
尤もそれも全関数名をランダムな英数字(総当りには弱い)にするか
ホムIDみたいに動的に設定できれば、技術や知識のない予測だけではやり難く出来るね

>>626
確か前にグローバル変数やソースへの追記チェックもするとか書いてたがする
(動くか試してはいないけど)くるくるの追加とか
問題の無い機能拡張までトレードオフになっちゃうのも仕方ないのかねぇ

631(○口○*)さん :06/12/30 18:04
AI作者が自動にどこまで抵抗あるかってことになるのかなぁ
どうせなら全部コンパイルしてしまえばソースチェックも必要ないだろうに
なんかフォルダの中にもう1個コンパイルされてないAI.lua入ってたけど、これコンパイル前のやつなのかな
それとも間違えて混入させたんだろうか・・・
安AIの人、たまに作りかけのを間違えてうpするから故意なのか事故なのかわからんけど、中身複雑すぎて分からんしコンパイルする必要なさそうだけどな

AI公開してる人から見たら選択肢が増えたってことになるんだろうか

632(○口○*)さん :06/12/30 20:11
無いな

以前ここで息巻いてた前科もあるし怖くて使えん>安

633(○口○*)さん :06/12/30 21:25
あの発言で不安そそるのは分かるけど過剰反応じゃないか

634(○口○*)さん :06/12/30 22:15
間違いないことは、安AIが改造しにくくなったということ。
安AI+簡易改造で使っていた人にとっては、確実に選択肢は減ったといえるだろうね。

635(○口○*)さん :06/12/30 23:02
こっこのあれは釣りだと思うけどなー
仮に本気だとしても長文でマジレス返すのはよろしくない。
ほっときゃいーのに。

636(○口○*)さん :06/12/30 23:05
匿名板じゃあるまいし、素人多いからガチじゃないの。
ああいう風に考える奴結構居ると思う

637(○口○*)さん :06/12/30 23:14
サイト開いている側としては、書込されたら返答しないわけには行かないからね。

638(○口○*)さん :06/12/30 23:17
ほっといたら便乗の本気の荒らしが来るだろうし。

639(○口○*)さん :06/12/30 23:44
流石、RO厨って感じがするぜ

640(○口○*)さん :06/12/30 23:54
>>638
本物なら管理人が堂々と削除できるのだからそいつもほっときゃいいだけや。
相手に構うプラス面てレスした当人がすっきりするだけ。

641(○口○*)さん :06/12/31 11:32
自説を展開して目的は果たせたから帰るって書いてるけど
それもなんだか要領を得ない変な文章だな
旗色悪いから後付けの理由で逃げてるようにしか見えない

まぁなんにせよ「多くの方が利用しているから」
なんて非常にくだらない理由でターゲットにされて
忙しい年末の貴重な時間を削られた、こっこAIの中の人南無

642(○口○*)さん :06/12/31 11:33
こっこの板ケリがついたみたいだけどあのオチはひでえ・・・

643(○口○*)さん :06/12/31 13:20
試すとか何様のつもりだよ…
しかも自動に対して否定しておきながら自分は実装したとか言ってるしわけわかんね

644(○口○*)さん :06/12/31 15:09
これからますますああいうのが増えるんだろうな

645⊂(*'ω')⊃ :06/12/31 19:38
正直勘弁してほしいです。(´д`)
1月は忙しいのに…!!

646Glenelgの人。 :06/12/31 20:23
そうならないように祈ってるよ〜。

647(○口○*)さん :06/12/31 20:33
そういえばglenelgの人のとこ繋がらないんだけど何かしたの?

648Glenelgの人。 :06/12/31 21:46
Σ('-'つ)つ
大掃除でルーターがリブートして、DNSずれてた(^^;;
気づいてなかったさ・・・ご指摘感謝。

649(○口○*)さん :07/01/01 00:22
つはっにした方が良いと思うんだ。

650(○口○*)さん :07/01/03 16:30
行き詰まったので質問

TEST_ST = 13
を追加して

function OnTEST_ST ()
 TraceAI ("OnTEST_ST")
 文法いろいろ……
end

として、他のstateから
MyState = TEST_ST
として、returnしても
TEST_ST()の中を実行してくれないのですが
何か間違っているのでしょうか?

ちなみに
TraceAI(string.format("%d",MyState))
で見てみるとちゃんと13を返してくれます。

651(○口○*)さん :07/01/03 16:48
AI()に
  elseif (MyState == TEST_ST) then
   OnTEST_ST ()

って追加したかい?

652650 :07/01/03 17:00
素早いレスありがとうございます。
解決しました。

653(○口○*)さん :07/01/06 16:15
デフォルトAIみてると状態の振り分け処理に ProcessState() とかいうのがあるべきだと思うんだよな。
まあデフォのは本当に動くだけのだからしょうがないんだけどさ。

654(○口○*)さん :07/01/07 11:33
ユーザ設定の範囲内で可能そうなので、物凄いスレの方で質問したのですが
誘導頂きましたのでこちら聞かせてください。

こっこAIで(A,B、C,Dには特定のMob名が入るとお考え下さい)

1 敵Aに対しては共闘モードで戦闘し、これを行動の最優先順位とする
2 1の処理が済み次第、敵B,Cに対して全力で攻撃する
3 また、敵Dを無視するが、主人が攻撃した時のみ攻撃対象とする

この3つの動作を設定したいのですが、全て、あるいは1と2だけでも可能にならないでしょうか?
また、可能だとして、AIのどこをどういじくれば設定できるでしょうか。

655(○口○*)さん :07/01/07 16:19
>>654
3は出来るけど1-2は無理だろ。
Mobに関係なく共闘モードになるから。

新しく個別に共闘敵を設定するようにするには色々と作らなきゃならないものがあると思うんで
それなりに書ける人じゃないと無理だと思うが、もしその敵Aとやらがノンアクティブなら
「逃げる敵」に登録して手動で攻撃しかけてみると面白いことになるよ。

アクティブに攻撃させたかったら該当箇所の判定をちょっと書き換えるだけで済むと思う。
具体的には最新版の2416〜2426までを削って

if IsMob(M_ACT,actorID) > 0 or IsMob(M_ACT,actorID) == -2 then
resultActorsIndex = resultActorsIndex + 1
resultActors[resultActorsIndex] = actorID
end

こっちだけにする。これなら「攻撃する→タゲがとれると逃げ回る」という行動になる。
タゲが変わらないノンアクティブだからこそできる簡易個別共闘。移動しまくるのが難点といえば難点。
ただし逃げる敵は先制攻撃する敵と共存できないので注意。

もともとこういう動作を防ぐための条件だったと思うのでそこを取っ払うわけなんだけどね…。

656(○口○*)さん :07/01/07 16:21
ちなみに、最優先にしたいなら敵Aの個別的優先度を上げればいい(手動攻撃する)し、
敵Dは普通の「無視」設定にすればおk

逃げる敵登録にするには一旦無視を経由するので、その時優先度はリセットされるから
逃げる敵登録したあとに優先度上げることを忘れないことね。

657(○口○*)さん :07/01/08 01:26
>3は出来るけど1-2は無理だろ。
でーすーよーねー

具体的にはバースリに共闘入れて本体攻撃→ジョブGet、ウィスパジョーカーをホムの専属にして
魔剣は本体が手を出すまで戦わない、という地下用AIが欲しかったのです。
1-2の連動が無理なら普通に戦っておきますです。お答えありがとうございました。

658(○口○*)さん :07/01/08 22:35
普通にJobまずい婆で無理してJob稼ごうと思わないで
割り切って別の狩場でJob稼いだらいいんじゃないの?
Base考えなければ普通にホムに食わせながらでもJobがおいしくなる場所は他にあるし。

659& ◆xOS3wf.pJg :07/01/09 00:34
>>654
function OnIDLE_ST () の中の

 object = GetEnemy (MyID) -- 敵検索
 if (object ~= 0) then
の下に

if GetV(V_HOMUNTYPE, object)==1102 then BonusMode=true else BonusMode=false end

って追加すればバースリーだけ共闘モードになると思う。
バースリー専用であんまりスマートじゃないけど、
しっかりリストとかで指定できるようにするには大工事が必要だからカンベン。
ステップコマンドによる切替も無効になる。

直書きでテストしてないから、エラーでたらごめん。

660659 :07/01/09 00:38
名前が文字化けしてるし!誰だ俺! orz

661(○口○*)さん :07/01/09 01:11
PC、げーむともに初心者なんで
よくわからないんですが。
ホムンクルスのAIをかえるためにサイトをみながら
フォルダーとかっていうのをいじってたら
間違えて元のAIluaにDLしたものを上書きしてしまいました。
それから、エラーでおちてしまってゲームができません・・
元のAIluaに戻さないとだめなのでしょうか?
また、その場合どうしたら直せるのか教えていただきたいんです。
どなたか、お願いします。

662(○口○*)さん :07/01/09 01:19
ラグナロクオンライン公式サイトにデフォルトのAIファイルが置いてあるから、
DLして基のAI.luaに上書き

663(○口○*)さん :07/01/09 01:22
662さん

ありがとうございます!
公式行ってみてきます。
どうしようとずっと思ってたので、すごく助かりました!

664⊂(*'ω')⊃ :07/01/09 01:36
>>654
なんかそういうの割と簡単に出来そうです。
優先度のマイナス値を使ってやってみます。
絶対値比較するので優先度の正負は問わないようにすれば
高優先度かつ共闘とかいけるはず。でも高い優先度で共闘とかしてないで他の叩いて欲しいですね。(・ω・n

ゲーム内設定がかなり複雑になってきてアレなのでそろそろなんとか
設定用の何かを作りたいとこですがいろいろ厳しいです…。

665(○口○*)さん :07/01/10 09:09
初歩的な質問で申し訳ないのだけど、ホムの射程って
プレイヤーと同じく円形だっけ?それとも正方形?

666(*○口○)さん :07/01/10 11:50
ホムはmobと同じくホム中心に5*5の正方形範囲

但し実際の射程計算はmobもプレイヤーもホムも厳密には全部円形(GetDistanceに基く)
射程が2セルのmob(ホム)の場合、円を描くには短すぎる為に四角に見えるだけで
7,9セルの遠距離mobは切り上げ誤差はあるけど円形に見える様になる

プレイヤーの場合は1セルの射程に縦横の+1セル射程が加わって菱形(円形)になる
■■☆■■  ●プレイヤー
■□□□■  □GetDistanceに基く射程
☆□●□☆  ☆+1セルの射程
■□□□■
■■☆■■  射程1

■■■☆■■■  ●攻撃者
■□□□□□■  □GetDistanceに基く射程
■□□□□□■  ☆+1セルの射程(プレイヤーのみ有効)
☆□□●□□☆
■□□□□□■
■□□□□□■
■■■☆■■■  射程2(mobやホム、インベナムなど)

667(○口○*)さん :07/01/10 18:02
ありがとうdクスフォーエバー永遠に

668(○口○*)さん :07/01/10 19:05
AIについてお聞きしたいのですが、

対象のID(ex.45678)のHPが60以下になったら

という条件を作りたいのですが、なかなかうまくいきません。
何かアドバイスをいただけないでしょうか?

備考:似た条件で、本体のHP ホムのHP という条件はできました。

669(○口○*)さん :07/01/10 19:07
>>668
ケミとホム以外のHPは直接取得出来ないので正確な判断は無理。

与えたダメージがいくつかもわからないので
最大HPから差し引いて計算する方法も無理。

670(○口○*)さん :07/01/10 19:18
>>669
返答ありがとうございます。

初歩的なことを知らずに申し訳ないです。

671(○口○*)さん :07/01/11 16:19
難しいと思うのですが、リーフについて質問させてください。
メンタルチェンジや緊急回避など、スキルクリック時点で発動するスキルは
AIには指示が来ないと聞いています。
現時点ではSPの減りを監視するしか無いかなと考えています。
もう少し容易にこれらのスキルをプレイヤーが操作した事を読みとる手段はありませんでしょうか。
よろしくお願いいたします。

672(○口○*)さん :07/01/11 16:27
ホム実装から半年以上経って、AI開発者のうちだれも上手くいってないことだから
それはかなり厳しくないかい

かなりAIを書き換えてALT+Tとかの機能を削って、代わりにそれでスキルを使ったことを手動で教えてやるしかないと思う

673(○口○*)さん :07/01/11 17:06
SP減少で分かるって、滅茶苦茶容易な部類に入らない?
MCはMHPとかMSP監視すればすぐ分かるのでは

674(○口○*)さん :07/01/11 17:27
>>673
判定させるだけなら容易だよ。
誤作動を防ぐのが難しいってだけの話。

675(○口○*)さん :07/01/11 18:20
やはり、他の手段はありませんか。
グラビティが全てのホムスキルはAIを経由するようにしてくれないかな(妄想
ありがとうございました。

676(○口○*)さん :07/01/11 18:20
そういうこと。
SP自動回復と競合することもあるし、敵がSP減少させるスキルも使うし
SP見て主人のスキルに連動ってトリガー考えたことあるけどそういった理由で投げた。

677(○口○*)さん :07/01/11 18:22
>>673
674氏のいうように、SP減少でチェックすると誤判定する可能性があるのが大きな問題。
単に「減った」だけでは何のスキルを使われたかわからないし、
減ったSP量で区別しようとすると、以下のような問題が起きる。

・もともとSP消費量が同じスキル
 (治療の手LV5と緊急回避LV2など)
・スキル使用タイミングでちょうどSP回復
・SP吸収系の攻撃を受けた場合

678(○口○*)さん :07/01/11 20:04
俺もSP監視で自動スキル使ってた。大体うまく動いてたんだが
ラグとタイミングが重なると、SPが取得出来ず、カラになるまでフリットムーブ連発ってことになる。

679(○口○*)さん :07/01/11 21:33
SP吸収と同タイミングは防ぎようないか。
MCの検出はできるの?

んー・・治療を手動で使用したときって、AIを迂回するみたいなことをテンプレに書いてたけど、
それができるなら、例えば治療1を手動で使用したとき、AIでは治療1の使用指示が来たら
治療1ではなく緊急回避を使用して、ついでにフラグを立てる・・というのはだめ?

680(○口○*)さん :07/01/11 21:53
>>679
その「治療1の使用指示」が、AIには一切伝わらない。

ユーザーがホムスキルを手動使用した場合、それがAIに伝わるのは
「敵を対象にするスキル」、具体的にはカプリスとムーンライトのみ。
それ以外のスキルは、手動使用したらAIにはなにも伝わらない。

681(○口○*)さん :07/01/11 22:07
便乗質問。
カプリス・ムーンライトでPCをshiftクリックすることや、
AI側でそれをトリガにしたり対象IDを取得することってできる?

682(○口○*)さん :07/01/11 22:13
>>679
半分勘で説明するが

対象指定系のスキル使用がAIで検知できるのは、Alt+TとかAlt+右クリックの命令が
AIで読める(GetMsg)ので、それを利用しているというだけで
スキル使用の命令がAI上で「スキルを使う」という行為に割り当てられているに過ぎない。
極端なことを言うと実はMLを使用するという操作に通常攻撃を割り当てることだって可能なんだ。

つまるところ指定系だろうが即時系だろうが「スキルの使用」そのものは
AIとは関係ないところのクライアント処理になっていると思う。
ホムスキルはケミスキルの一部みたいな扱いになっているようだし。
ケミスキルが使用できてしまうのもそこらへんの関係かな。


少々面倒になるけど手動の移動操作や攻撃操作に無理やりMChを割り当てて
そこで使用フラグを立てちゃうっていう方法もあるにはある。

683(○口○*)さん :07/01/11 22:15
>>681
通常MAPではなぜかPCのIDはAlt+Shift+対象右クリックでは取れなかったはず。
スキルでも同じじゃないかな。だから多くのAIで「対象の居る地面クリック」なんて面倒なことしてるわけで。

684(○口○*)さん :07/01/11 22:22
>>681
通常マップでは、ホムスキルでPC指定しても、AIには何も伝わりません。
Pv・Gvマップでは不明。

685(○口○*)さん :07/01/11 22:29
このあたり、前スレで説明があったのでこぴぺ。

----
例えばカプリスなどは、
・ユーザーがクライアント操作(スキル選んで敵を指定)
→クライアントからAIにSKILL_OBJECT_CMDメッセージが通知される
→AIプログラムで、上記メッセージ分岐して、SkillObject()使用
→クライアントがその指示を受付、サーバに通知

・・・という流れ。対してカオティック(や、他のホムの対象指定無し系スキル)では
・ユーザーがクライアント操作(スキル選んで敵を指定)
→クライアントがその指示を受付、サーバに通知

・・・という流れ。
----

だから、ユーザーの「スキル使用操作」をトリガーになにかする、っていうのは、
カプリスのあるバニル、ムーンライトのあるフィーリル限定になる。

ただし682氏のいうように、全てのホムで「地面をALT+右」操作や「ALT+T」とかはできる。
だから例えば「ホムのすぐ右隣をALT+右したら、それは移動ではなくメンタルチェンジ使用」というように
AIで強制的に意味を捻じ曲げて使うことはできる。

686(○口○*)さん :07/01/11 22:31
>>683-684
サンクス。
緊急時に(状況に応じた)対象を一定時間護衛とかしたかったんだけど、
厳しそうだ。

687(○口○*)さん :07/01/12 00:09
無理なのか。板汚し失礼
それでMCは・・

688(○口○*)さん :07/01/12 00:45
誤認識の関係上、MCも無理(難しい)

689(○口○*)さん :07/01/12 00:50
ああ、MCだけならMAXHPですぐわかるのか。
VIT増えるんだからMAXHPもふえるよな?

690(○口○*)さん :07/01/12 01:09
>>689
ホムのHP/SPはVit/Intと無関係だった気がする。

全快判定は…SPのみの判定よりは誤作動は減ると思うが…。
というか何が目的でその判定をさせたいのかもわかると色んな案が出せるんだけど。

691(○口○*)さん :07/01/12 13:28
つ「レベルアップ」

692(○口○*)さん :07/01/12 14:26
トリガーとしてはこんくらいか
スキルレベルで攻撃方法変更とか友達登録とか
ホムや主人の周りの座標クリックで命令変更とかはいけるね。
ALT+T
ALT+敵ダブルクリック
ALT+SHIFT+敵ダブルクリック
ALT+地面座標クリック
ALT+SHIFT+地面座標クリック
カプリス1〜5
月光1〜5
SBR1〜3
主人・友人のターゲット
主人のモーション(座り・立ち・スキルetc)
HP・SP増減

693(○口○*)さん :07/01/12 16:48
対IDトリガー、対地トリガー毎に大まかに機能を分類して
使いたい機能だけを設定ツールでトリガーに割り振れる機能とか
多機能なAIほどあると便利だとは思う(けど実装は結構難しい

694(○口○*)さん :07/01/13 16:21
モブが、特定の他PCが攻撃されたときに、自分のホムを援護に出す
事は出来たと思いますが、他PCのケミのホムが攻撃されたときに
自分のホムを援護に出す事は出来るのでしょうか?

695(○口○*)さん :07/01/13 16:24
>>694
日本語でおk


要は友達登録と同じことをホム相手にもしてやればいいだけの話でしょ?
書き方にもよるけど友達のターゲット監視できるならそこにそのホムのIDも含めてやればいい。


というか要領を得ない文だな…。
自分がそういうAIを書きたいのか、あるAIを使ってるんだけどこういうことは設定の範囲で出来るかどうかを聞きたいのか
どっちかはっきりしてくれ。

696(○口○*)さん :07/01/13 17:06
>>694
できないことはない
695がいっているとおりのことをやれば一応できるけども、
通常の友達登録のままだとホムの再起動時(テレポ蝿蝶など)にホムのIDが再設定されるので、友達登録をやり直すなど行えばいけるが、
ID再設定されても登録しっぱなしというのは完全にはできないんじゃないかと思う

アイディアとしては、友達ホムの匹数を友達登録の一環として登録するとか
ホムに対する横殴りが甘いが、擬似的にできるんじゃないかと思う

697(○口○*)さん :07/01/14 14:35
>>694
できんことはないけどホムはID可変だから
画面外に出たり再コールやリザすると多分ID変わって味方かどうかわからなくなると思う。
ホムだけ動的に保存しておいて画面内から消えたら削除ってな感じにしておくのは可能だけどーあーやっぱめんどいなー
V_OWNERが自分の主人にしか適応されないのが悪いんだよなこれ。

698(○口○*)さん :07/01/14 14:37
V_OWNERを自分以外のホムにも適用(実際この値は固定値だから内部書き換える必要あり)と
パーティやギルメンのプレイヤーを判断できる関数も欲しいとこだ。
期待できないけど一応要求に出してみるかなー

699(○口○*)さん :07/01/14 14:55
>>697
いや画面外に出ただけじゃ変わらないだろ。
画面外に居る間にテレポとか再コールされたら変わってることになるが。

700(○口○*)さん :07/01/14 15:03
>>699
>>697
>画面内から消えたら
というのは視野範囲外限定じゃなくて、死亡安息なども含めて
「見失ったら」だと思うけど。

701(○口○*)さん :07/01/14 15:06
>>700
>画面外に出たり再コールやリザすると

画面外がそれらを含むならわざわざ分けて書かないないだろ

702(○口○*)さん :07/01/14 15:10
ああスマン、お互い突っ込んでる箇所が違うな。

画面外に出ただけじゃ変わらないことと
IDが変わることを懸念して画面内から消えたら削除する方法を取ることは別の話だね。

確かどっかのAIは「一定時間消えてたら削除」って方法取ってたと思う。
画面内から居なくなったら即登録を消すのは誤作動も考えられるので一定時間を設けておくと。
リストの管理の仕方を考えないとならないけどこういう方法はありだね。めんどいけど。

703(○口○*)さん :07/01/14 15:11
ホムのIDは、画面外に出ただけなら変化しません。
問題は、ホムを見失った場合それが「画面外に行ったのか」「安息/ログアウトで消えたのか」がわからない。
更に、画面外に消えたものが再度戻ってきたとき、それが「同じホムなのか」「別のホムなのか」がわからない。
(画面外に出たあと死亡、その後別の人のコールホムで同じIDが割り当てられる可能性がゼロではない)

そのあたりをうまいこと考えないとならないですね。

704(○口○*)さん :07/01/14 17:15
703の言うような意味だったよまぎらわしくてごめん。
外出てID変わってなくても画面外に出た時点でそのIDは信用できなくなるから
どっちにしろ変わってる可能性高いと考えておかないとずれるしね。
ホムタイプである程度の信憑性はもたせられるけどやっぱ一度「見えなくなった」時点で再判定しなきゃあかんと思う。

705(○口○*)さん :07/01/14 17:18
とりあえず座標の追跡ログとって最後に見えた場所から何セル以内なら信頼、みたいなことはできるかな。
しkしV_OWNERの改善欲しいなやっぱーホムとケミは一対一の関係だからこれわかりゃ間違えないのに。

706(○口○*)さん :07/01/16 22:34
今 こっこを使っているんだが こっこBBSの入り口?のできることの注意書きに
『他PCを対象とするケミのスキル(コート系、ヒールなど、スキル欄に出る補助スキル)』
ってあるんだが ヒールを無差別にかけまくるAIができるってことなのか?
だとしたらやってみたいのだが AIを編集できる知識がないんだ。誰か教えてくれないか?

707(○口○*)さん :07/01/16 22:40
まず編集できる知識が最低限ないと、教えられても無理だと思う。
うごかなくなってこっこ落としなおすのが関の山。

708(○口○*)さん :07/01/16 22:45
>>706
とりあえず1を読もう。
ここでは一応自粛することになっている話題だ。

すまん、俺もスルーできなかったさ

709(○口○*)さん :07/01/16 22:52
自動PPはだめって書いてあるけど ヒールはOKなのかと思った。
不快に思わせたのなら謝る。申し訳ない。

ちょっとは勉強してみることにするわ。
辻ヒールの道って険しいわ。

710(○口○*)さん :07/01/16 22:53
なんで自動PPがダメなのか考えたらヒールはどうなのかぐらいわかるだろ…

711(○口○*)さん :07/01/16 22:54
安心しろ
君みたいなアホは定期的に涌くからもう慣れてる

712(○口○*)さん :07/01/17 08:32
ちなみに公式回答では現状ケミのスキル制御は仕様ということになってるな

こっこに自動PPはついてないと思うが、それをどうやるか質問するということは
言わばゲームの開発者に改造のやり方を質問するのと同義

個人で改造するのは勝手だがそれを表に出すなよ

713(○口○*)さん :07/01/17 09:31
まあ、仕様というほかないよな。

ぶっちゃけ、やり方わかんねと言ってるレベルで
実装しても周りに迷惑かける可能性が高い。

おれプログラムとかまったく分からなかったけどAIで
勉強して自動PPとか共闘あたりなら自分でかけたぜ。
うちの鯖じゃ晒されるから自粛してるけどな。

中学生くらいの英語できれば書けるようになるよ。

714(○口○*)さん :07/01/17 12:50
戦闘終了後にホムがケミの足元に戻る(毎回)
という文を書きたいのですが、なにか参考になる文が
ございましたら、教えていただきたいので何卒よろしくおねがいします。

715(○口○*)さん :07/01/17 14:47
戦闘後の最初のIDLEだけFLLOWに分岐するようにすればいいんでね?
あとはFLLOWに移る距離を短くするとか

というかデフォ含めて大抵のAIは戻ると思うんだけど・・・?

716(○口○*)さん :07/01/17 15:51
MoveToOwnerの距離じゃなくて同じセル(実際は弾かれて隣接セル)ということだろうか
それだったら
MoveToOwner() を全部
Move(MyID, GetV(V_POSITION, GetV(V_OWNER, MyID)))
に置き換えればいけるんじゃないかな

追尾時の挙動が多少変わるのが嫌なら面倒になる。

717714 :07/01/17 20:35
レスありがとうございます。
全部の戦闘終了を判断してからではなくて
1匹倒す毎にということです。
言葉足らずで申し訳ございませんでした。

718(○口○*)さん :07/01/17 20:37
>>717
>>715でいいと思うんだけど試したか?

719(○口○*)さん :07/01/17 21:13
地味なバグ発見
ホムにヒール連打するAI用意してヒルクリ装備してホムにヒール連打
そのままの状態でヒルクリを装備解除してヒールスクロールをダブルクリック
するとダブルクリックした瞬間にホムに対してスクロールのレベルのヒールが発動(当然回復しない)
残った対象選択カーソルで対象を選択してもヒールは発動しない
同様の現象を蝶の羽でも確認
蝶を使うとテレポする

悪用する方法を色々考えたけど無理そうだった

720(○口○*)さん :07/01/17 22:24
ハエ連打でテレポ出るバグは前からあったな。
内部的にハエテレポ蝶は同じスキルのレベル違いだったはずだから混線してんだろう。

721(○口○*)さん :07/01/17 22:26
スキルパケ連打の密度が高いからだと思うけど100%成功するのよ

722714 :07/01/18 02:26
>>715を試したのですがなんだかうまく動きません。
こっこAIをいじらせていただいてるのですが
詳しく教えていただけないでしょうか?

備考
-- アイドル中に関する定義

の部分を弄ったのですが、見当違いでしたら申し訳ございません。

723(○口○*)さん :07/01/18 02:34
>>722
見当違いです。
こっこで>>715に相当するのは多分1876行目の

ResetEnemy()       -- 敵情報をリセット

この直後にMyState=FOLLOW_STって入れることだと思われる。

724(○口○*)さん :07/01/19 16:30
こっこの人のツンデレぶりにふいた

725(○口○*)さん :07/01/22 09:47
どのへんが?

726(○口○*)さん :07/01/22 15:11
724ではないが・・・

(つん)
BBSに入る前の注意書きは読まれてますか?
ここはそういうことを質問するBBSではありません。

(でれ)
ファイルの関連付けが間違ってるだけなのでファイルを右クリック→プログラムから開くで
メモ帳などに指定しなおすだけで問題ないはずです。
PCの基礎的なことでAIには直接関係無いことまで質問しないで頂きたいです。

だと言いたいのだと思う・・・

727(○口○*)さん :07/01/22 21:17
・・・「今回だけなんだからね。」ってことか?(笑)

728(○口○*)さん :07/01/25 21:24
なんという停滞・・・
丸々3日もレスがなかった
このスレは間違いなく落ちる
       
   / ̄\
  | ^o^ |  
   \_/

729(○口○*)さん :07/01/25 22:21
だが断る

730(○口○*)さん :07/01/25 23:33
上げなくても書き込みがあれば落ちないんだけどね

731(○口○*)さん :07/01/27 03:32
初めてホムを育て始めたのですが、質問があります
今ケミがタゲを取った後ホムが殴り始める手動狩りをしているのですが
ホムが殴り始めるとプレイヤー側の行動がほとんど取れなくなります
回復財を叩いてもなかなか反応せず、mobを倒した後も数秒ほど動けずにドロップがなかなか拾えません
低スペックからくる挙動の悪さだと思うのですが、マシンの負荷の少なめなAIを教えてもらえないでしょうか
マシンスペックは
XP homeEdition
celeron(R) CPU 2.53GHz
448MB RAM
回線はADSL
現在は0-MATERIALの配布AIをそのまま使用しています

732(○口○*)さん :07/01/27 03:57
>>731
本体 Ctrl+クリック使え。(/nc)

AIの軽いのはGv特化用だと思うが、どう考えてもスワップしてます。メモリーを増設しましょう。
9分9厘AIの問題じゃありません。

733(○口○*)さん :07/01/27 03:59
>>732
やはりマシンですか
メモリーは増設できないのでホム育成はしばらく様子見します

734(○口○*)さん :07/01/27 04:26
いやおそらくAIの問題です。
前スレで同じこと出てたけど対策としてファイルの末尾のほうにある

****ここから
function AI(myid)

    MyID = myid

    -- 最速攻撃対策(攻撃命令キューを再送信)
    if (ActionFlag == 1) then
        Attack (MyID,MyEnemy)
        ActionFlag = 0
    end
****ここまで

の多重攻撃になってる部分の先頭行に下のようにに -- を入れて無効化して対応できるはず。

****ここから
function AI(myid)

    MyID = myid

    -- 最速攻撃対策(攻撃命令キューを再送信)
--    if (ActionFlag == 1) then
--        Attack (MyID,MyEnemy)
--        ActionFlag = 0
--    end
****ここまで

というか多重Attackについてどっかまとまったサイトないんかな。
テンプレにでも書かないと毎回同じ質問ばっかになる。

735(○口○*)さん :07/01/27 04:31
ゼロマテは改造できる人ならベースにするのにちょうどいいけど
まったくわからない人にはオススメできない。
もう最終リリースからずいぶん経っててデフォのままだと未対応・不具合が多い。

736(○口○*)さん :07/01/27 05:24
Wikiに項目追加しといた。
ある程度は書いたけど気が向いた人は補完お願い。
以降はこっちに誘導すればなんとかなるかと。

http://alchemist.s214.xrea.com/index.php?%A5%DB%A5%E0%A5%F3%A5%AF%A5%EB%A5%B9%2FLua%2FAI#j5f0e5f7

737(○口○*)さん :07/01/27 10:29
>>734
アドバイス通りに弄ったら妙な重力もなくなって見事に解決しました
ありがとうございました

738(○口○*)さん :07/01/27 13:00
ATK2重送信が重いのは昔からじゃないんだよね。
うちのは偶然、昔っから1ループに2回ATK発行が入ってたんだけど、
進化実装からガクンと重くなった。それまでは重いと思ったことなかったんだけど。
しょうがないから外した。

739(○口○*)さん :07/01/27 23:46
あちらに書いてもおそらく管理人さんがみてないのでこちらに書いてもよろしいか

ラプソAI使用中でバーメットタートルがヒールを使うと殴ってくれなくなるんですよ
これはどうにかできないものでしょうか・・・・

740(○口○*)さん :07/01/28 00:50
単純にパーメットのタゲが他Mobになっていて、
恐らく横殴り防止とかでターゲットが0か自分主人友達以外は殴らないみたいな感じになってるだけだと思う。

他Mobにヒールしたジオでも同じことが起きるんじゃない?

741(○口○*)さん :07/01/28 04:10
自作のでそれ直したけどmobについては標的のIDが10万以下(NPC)のときは無視するような仕様にしたほうがいんじゃないかなー
他mobや自己ヒール・支援でもダメになるし、廃兄貴のスモーキングとかでも標的自分になるから殴らなくなった。

742(○口○*)さん :07/01/28 06:11
ホムも10万以下だから、他人のホムをタゲにしている時に誤判定しちゃうから
V_HOMUNTYPEのチェックも入れておいた方がいいよ

743(○口○*)さん :07/01/28 06:15
スキルタイマーについて質問です。

狩りをしていると時折、気づいたらラウドボイスが切れてた、なんてミスが結構あるので、
バニルのCVを使って合図させたいなぁと思ってます。
(直接ラウドボイスさせるのは個人的にNG)

なので、5分置きに自動CVLv1を使用させたいのですが、タイマー部分の処理で困っています。
テレポ狩りが多いのでAI再読み込みの頻度が高く、変数の値が消えてしまい上手く5分を計ることが出来ません。
どのようにしたらいいでしょうか?

744(○口○*)さん :07/01/28 06:36
AIを窓から投げ捨てて
・リアルキッチンタイマーを使う

745(○口○*)さん :07/01/28 06:52
>>743
テレポ(というかAIリロード)さえしなければ、うまく動いている、という前提。
以下のような2箇所を追加すればいいのでは。

改造箇所1:CVを使用した時点で、その時間記録している内容をファイルに書き出し。
改造箇所2:AIリロード直後1回だけ、その外部ファイルからデータ読み出し。

あと、これは時間測定とは直接関係ないけど、CV使用に失敗するケースも考えたほうがいい。
ホムのSPがないとき、ケミが座っているとき、カプリスのディレイ中など。
以上、後半は蛇足ながら。

746(○口○*)さん :07/01/28 08:00
ttp://pc3merchant.net/ai/
にて配布されている初回AIについて質問です

進化フィーリルを使用しているのですが、主人が殴ったら
自動でなぐる設定の場合に、手動でSBR44を撃つとエラーの窓?が
出てきてSBR44が発動していません。

エラーの窓にてokをおすとまた普通に攻撃し始めます
ROが落ちたりとかはありません。

何処か設定を見直す箇所とかありますでしょうか?

747(○口○*)さん :07/01/28 10:40
どうにもこうにも、「エラーの窓?」にエラーの内容がこと細かく書いてあるので読んでください。
自分で読み取れなければ、一言一句漏らさずに書きとめて、スレに書き込んでください。

748(○口○*)さん :07/01/28 10:54
SBR44を使わなければいけないほど危険な状態でしたので
エラー内容を見ている暇などありませんでした。
今度使うタイミングが合ったらPrintScreenでも押してみます。
同じ状況の人がいれば〜と思ったので、でわ。

749(○口○*)さん :07/01/28 11:00
>>744
愛しのバニルから「ラウドボイスの時間だよ!」って感じにしたいのです。(´Д`*)

>>745
何となくそうすればいいかなぁと思ったんですが、やはりファイルの読み書きしなきゃだめですか。
こんなタイマーだけのためにファイルの読み書きはしたくなかったんですが…。

と、ここまで打った時点で思いついたんですが、このようなのはどうでしょうか?

・GetTick()の値を300000 (5分) で割り、出てきた数字の少数第一位が0の時にCVLv1使用フラグon
・AIを呼び出した時点で0だった場合は既にラウドボイスを使用済みと考え、フラグはoffのまま。

少数第一位が0なのは30秒間なので、SPがないとか主人が座ってる等で失敗しても、
何度もリトライしてCVできるだろうという大雑把な感じですが、タイマーの役割は果たせるかなぁと。
自分でコードに起こしてやってみようと思いましたが、少数第一位を求める方法がわかりませんでした…。

どなたかこの方法について指摘とご教授下さい。

750(○口○*)さん :07/01/28 11:04
>>748
SBR使ったばかりと言う事で、親密度が下がってる今なら、
SBRを打ってももったいない事はないと思うので再現性を確かめてみたらどうですか?

エラーダイアログはSSじゃ撮れないので、PrintScreenを押した後はペイント等でクリップボードから貼り付けなきゃだめですが。

751初回の人 :07/01/28 11:08
>>746,748
調べて見たら明らかな記入ミスを見つけました。
↓をAI.lua にリネームして上書きして見てください。
http://pc3merchant.net/ai/files/AI_070128.lua

鳥がいなくてテストして無い部分でしたので発見出来なかったようです。
申し訳ありません。

752(○口○*)さん :07/01/28 11:42
>>749
300000で割ってその小数点第一位 == 30000で割ってその整数第一位
整数第一位を得るには、10で割ってそのあまりを求めればいい。

mod( (GetTick()/30000),10 )
こんな感じで。

最初の1回目だけは5分確保できないことになるけど、そこまで厳密な数値である必要はないので、十分なのでは。

753(○口○*)さん :07/01/28 11:49
>>749
キッチンタイマーをバニルミルトみたいにゼリーでくるむのではダメでしょうか
タイマー止めるときにばちーんと叩けばゼリーが飛び散って楽しい気がします

754(○口○*)さん :07/01/28 11:50
>>753
初期化と、次のループ開始の準備が大変です。

755752 :07/01/28 11:56
ああ。ただしその方法だと、やっぱりその「割った値が0」になる期間にリロードすると、直前にまた警告してしまうね。
そこは割り切るなりなんなりで。

756(○口○*)さん :07/01/28 12:18
>>752
おぉ、余りを求める方法が!
ありがとうございます。
さっそくスクリプト書いてみます。

>>753
あるあr・・・ねーよw

757(○口○*)さん :07/01/28 12:44
>>749
>主人が座ってる等で失敗しても、何度もリトライしてCVできるだろう
残SPはともかく、カプリスディレイや主人状態によってCVが失敗したかどうかの
判断できないはず。(モーションで拾えたっけ?)
できないと仮定すると、フラグ管理は捨てて「特定時間(30秒間)はずっとCVする」
なんてやらないといけない。

その30秒間はくるくるを強制onするとかはどうだろう。
こっちはこっちでホムの自然回復を捨てることにはなるけど。

>>752
「整数第一位を得る」という話なら、math.floorで不要な桁を落としておかないと
泣くことになるかもしれない。
math.mod(123.456,1) --> 0.456
math.mod(123.456,1) == 0 --> false
modの返値には小数点以下も出てくるから、そのままでは0とは一致しない。

今回は正の値のみで0との比較だから、切り落としたりしなくてもこれでいいんだけどね。
math.mod(123.456,1) < 1 --> true

758(○口○*)さん :07/01/28 13:42
>>756
既存のAIで自動フリットムーブとかの部分をCVにして
時間を5分固定にするだけで出来ると思うんだけど。そういうのはナシなの?

759(○口○*)さん :07/01/28 13:56
>>757
CV使用の前後で残存SP量を比較して減ってたらCV使ったって判定にしようかと思うんですけど、どうでしょうか?

>math.mod(123.456,1) --> 0.456
>math.mod(123.456,1) == 0 --> false
>modの返値には小数点以下も出てくるから、そのままでは0とは一致しない。

>今回は正の値のみで0との比較だから、切り落としたりしなくてもこれでいいんだけどね。
>math.mod(123.456,1) < 1 --> true
すみません…いまいち理解できませんでした…。

time = GetTick()
math.floor( math.mod( (time/30000),10 ),0.1 ) == 0 -->true

30000で割った時の少数第一位が0の時っていう判定はこれであってるでしょうか?

>>758
フリットムーブ等はテレポで切れちゃうので、テレポも考慮した5分タイマーにはならないんですよ

760(○口○*)さん :07/01/28 14:15
>>759
どうせ外部に保存ファイルを作って読み込まないとダメなんだから
時間管理のとこで外部ファイルに使用時間保存してそこから比較するようにすればいいと思うけど。

761(○口○*)さん :07/01/28 14:33
やっぱり例が悪かったね。

>math.floor( math.mod( (time/30000),10 ),0.1 ) == 0
math.floorに第二引数がない(無視される)という点を除いては、
これでだいじょうぶ。

if math.mod( (GetTick()/30000),10 ) < 1 then
でも今回の判定はこれでも十分。

もっと一般化して「小数第一位の値を取り出す」関数を作るとしたら、こう。
function f(x) -- 関数名は見ての通りてきとう
 return math.floor(math.mod(x*10,10))
end
f(123.456) --> 4

さらに調子に乗って「指定桁の〜」という関数。
function f(x,y)
 if y == 0 then return nil end
 y = y > 0 and y - 1 or y
 return math.floor(math.mod(x * math.pow(10,-y), 10))
end
f(123.456,-1) --> 4
f(123.456,3) --> 1

「SP減るまでCV」は、自動カプリスとのタイミングにさえ気を払えば
うまくいきそう。

762(○口○*)さん :07/01/28 15:08
CVの成功失敗を残SPでチェックすることについて、以前にやったことがあるので補足。
CVは一切詠唱ディレイがなく、しかし発動は微妙に遅いので、単純にSPが減ってないだけで見ようとすると

AI一周目:CV使用。本当は発生するはずだが、まだ成功していない。
AI二週目:SP減少チェック。SPが減ってないからもう一度CV使用。
・・・とやった結果、2回CVが発動、なんてことが起きます。

使用つもりフラグに段階付けするなりして、数AIサイクル監視したほうがいいです。

763(○口○*)さん :07/01/29 04:11
返事が遅くなり申し訳ないです。
ちゃんと思ったように5分タイマーが機能し、バニルが定期的にCVしてくれるようになりました。
色々アドバイスくれた方々、本当にありがとうございました。

764753 :07/01/29 21:29
お役に立てて何よりです。

765(○口○*)さん :07/01/29 21:47
それかよw

766(○口○*)さん :07/02/01 17:09
工体研究所AI私的修正版をconfigファイルのみ微修正して使ってます

>>240あたりでも話題になった寝落ち対策機能に関して、現在は下記のように
if x ~= x2 or y ~= y2 or motion ~= motion2 then
x, y, motion = x2, y2, motion2
timestamp = os.time()
return
ケミの座標かmotion(って何?)が変わったときに時間が更新される様に
なっているみたいですが、これだと露店中にいくらエサをやっても
時間が更新されず、結局は更新するために何度も露店を出し直すはめに
なっている現状です

かといって露店を出すときのみEXIT_TIMEを変えるのは戻し忘れとかを
考えるとリスクが高い…

というわけで、露店中に何らかの方法で手動でタイマーのカウンタを0に
戻したいのですが何か良い方法は無いでしょうか?
どの関数でゲーム内のどの値を取れるかは良く知らないのですが、例えば
「ホムの空腹度が上がったら時間を更新する」、「手持ちのセルーの数が減ったらry」
などが出来るので有ればそれの方法で良いかとは思うのですが

767(○口○*)さん :07/02/01 17:16
まず前提条件。
・空腹度はAI側からは見えない。
・アイテムの所持数や重量などは見えない。

motion その名前の通りケミのモーション。
露店中にリセットしたいなら屈伸すればいい。

768(○口○*)さん :07/02/01 18:16
※屈伸が早すぎるとAIが検知出来ないから餌やり前に立って(座って)後に座る(立つ)と良い

769(○口○*)さん :07/02/01 18:29
>>767-768
なるほど、スクワットで良いんですね、THX
Motionって辞書で引くと運動、移動、動きとかって
出てくるけど、この場合「姿勢」と解釈するのが良さそうですね

となると、露店中にテロで吹っ飛ばされて座標変わったときは勿論
リセットされるだろうけど、単にダメ食らった場合も同様にリセット
されちゃうそうですね

770(○口○*)さん :07/02/01 18:50
>>769
僕のAIでは通常時20分ケミ移動無しでクライアント終了
ケミが移動したらタイマーリセット
ホム移動パターン入力で、ケミが移動しても無視、スクワットのみでタイマーリセット
55分後に終了警告ダンス、65分後に終了って制御に切り替える様にしているよ
ちなみにスクワット条件は、立つ>座るの変化のトリガを見る
外部の影響で立つことはあっても、座ることは無い

771(○口○*)さん :07/02/01 20:08
露店中に動かないのが一番寝落ちの可能性高いからなー
俺はモーションで居る判定を「座る→立つ」「座る以外→座る」、
座標変化、GetMsg、ResMsgとか送ったときに居ると判定させてる。

枝とかで座る→立つになることもあるけど間にダメージモーションとか入るからその辺また別で

772(○口○*)さん :07/02/02 13:33
枝で滅多にない吹っ飛ばされを除けば、座ってる状態から立ってしまうのだけが問題
と言うので有れば、最初から立たせておけば良いだけとは想うんだけど
立ってる状態でも攻撃されると
・場合によっては向きが変わる
・素手静止から剣盾装備ゆらゆら状態にグラフィックが変わる
が有るよね、これはモーションの変化とはまた違うのかな?

773(○口○*)さん :07/02/02 14:37
>向きが変わる
>剣盾装備ゆらゆら状態
どちらも立ちモーション

774(○口○*)さん :07/02/05 20:22
ここで質問させてもらいます
AIを参照する頻度を変化させることは可能でしょうか
一部のMAPでAIによって送信が滞ることがあるので試しに変化させてみたいのですが
よろしくお願いします

775(○口○*)さん :07/02/05 20:32
--グローバルあたりで変数用意
FPS = 0
cycle = 3

function AI(myid)

 if (FPS - math.floor(FPS/cycle)*cycle) = 0 Then
   -- 以下 従来のAI(myid)の中身

   ・
   ・
   ・

 end

 FPS = FPS + 1
end


これでAIサイクル3回に1回で普段の動作をすることになる。
もっと遅くしたかったらcycleを増やす。

2回に1回 → cycle = 2
5回に1回 → cycle = 5

常に回数を減らすんであればこれでいけると思う。
周りを見て動的に変化させるのはちょと難しいかもしれん。

776(○口○*)さん :07/02/05 20:47
>>775
ありがとうございました。
しかし動きに改善がされてないようで原因がサッパリ

使用AIは工体ベースでいろいろくっつけているのですが
そろそろ潮時かもしれないですね。

777(○口○*)さん :07/02/05 20:51
迷ったら自作AIマジおすすm

778(○口○*)さん :07/02/05 22:57
>>774
それって、ときどき話題になってる「多重アタックによる高速化」のせいじゃね?
単純にAI処理数変化させるんじゃなくて、Attack()が何度も呼ばれてないか調べて削ったほうが効果的じゃないかと。

俺は工体AIは使ったことないから、どこを触るべきか具体的にはいえないけどな

779(○口○*)さん :07/02/05 23:53
local AI_Count = 0
local AI_PrevCount = 0
local AI_SubCount = 0

function AI(myid)
 StressCheck()
end

function StressCheck()
 AI_Time = os.time()
 AI_Count= GetTick()
 
  if not (AI_Time==AI_PrevTime) then --1秒進んだとき更新
   AI_PrevTime = AI_Time
   
   AI_SubCount = AI_Count-AI_PrevCount
   AI_PrevCount= AI_Count
  end

 TraceAI("AI_Count " .. AI_Count)
 TraceAI("AI_PrevC " .. AI_PrevCount)
 TraceAI("AI_Sub " .. AI_SubCount)
end

ひょっとしたら現行のAIですでに作られてたりするかもしんあいけど、
ちょっとこれを試してみてほしいのん。
内容的には負荷の度合いを見るためのものなんだけど、
AI_SubCountの値がちょっと興味わいてきてる今日この頃。

 通常            : 900〜1100
 高負荷時          : 数値減少 100とか400とか
 クライアントがとまったとき : GetTickの値そのまま Prevが0になってる?

っていうのが、プロの露店街を走り抜けた記録から思ったことなんよね

780(○口○*)さん :07/02/06 00:48
300レス程前にGetTick()が遅れる云々の話題が出てる(結局原因はTraceAIだったが
TraceAIは呼ばれる度にファイルopen/closeしてそれだけで高負荷になり
負荷に依存しにくいos.time()はズレ難く、負荷の影響を受けやすいGetTick()が遅れる
その為、高負荷時にはGetTick()の値の更新が間引かれ蔵停止時には更新もされない

過去ログから探すのが面倒だから適当に書くが>>779で検出可能なのは
鯖ラグ:検出不能=Gvなど鯖の混雑のみなのでPC側は特に問題は無い
蔵ラグ:検出可能=いわゆるエフェクト由縁のPC側の処理落ち
AIラグ:検出不能=パケットが多すぎる為の行動不能のラグで「PC側の処理落ち」では無い

Gv中はまずエフェクトOFFだからPC側にラグが出る前に鯖側にパケットが詰まる(AIで検出不能


■オマケ(実際にパケットの出入りは監視していないが概ねあってると思う)
多重Attackによる行動不能ラグは鯖側の負荷ではなく、PCの通信関係の負荷
多重AttackをAIで実行すると、送信予約リストに積まれて特定のタイミングで順次送信先に送られる
通常はAttack以外にも通信は行われるし、回線やPCの状態によってはタイミングも変動するから
環境と多重の数によっては、前の送信予約リストが終わる前に次の多重の数が追加されて溜まっていく
溜まった状態でケミに移動やスキルの指示を出してもリストの末尾に追加されるから遅れるし
送信数が多ければ鯖側で受信制限(パケット破棄)がされる

781779 :07/02/06 07:18
あ 言葉たらずだったね
クライアントの負荷をみてAIサイクルにディレイかけるのが目的で考えてたんだけど
あんまり意味なさそうかな
クライアントに負荷がかかっている
というのが
それだけのActorを処理している
に置き換えられないかなーとね

782779 :07/02/06 07:35
また抜けた
そのGetTickが1秒でどれだけ止まってるのかを見てる
連投ゴメン

783(○口○*)さん :07/02/06 12:23
呼び出しタイミングを減らすよりは
AttackやMoveを1サイクルで何度も呼ばないようにするほうが効果的だと思う。
多重って痙攣はしなくなってもそんな劇的に効果ないんじゃなかったっけ。
負荷増えるんならそんくらいは我慢してもらうほうがいいと思うな。

784(○口○*)さん :07/02/06 12:27
ちなみにGetTickは16ms、os.timeは1000ms単位でしか更新しないから注意な

785(○口○*)さん :07/02/07 04:49
アルケミスレ参考に(丸パクリで)やってみたwith くまAI


66行目に↓を追加

-------------------------------------------------
MyMotionCancel = 0 -- モーションキャンセル用
-------------------------------------------------


それから790行目付近の TraceAI ("OnATTACK_ST") の後に↓を追加

-- ▼モーションキャンセル用コード -----------
local zx, zy = GetV( V_POSITION, MyEnemy )
if( MyMotionCancel == 0 ) then
Move(MyID,zx+1,zy+1)
MyMotionCancel = 1
else
Move(MyID,zx-1,zy-1)
MyMotionCancel = 0
end
-- ▲モーションキャンセル用コード -----------

これでなんとか… キモい動きになるけど暫定処置ということで。

786(○口○*)さん :07/02/07 10:10
移動してモーション解除で攻撃ってことかな
発剄キャンセルみたいなもんだろか。

787(○口○*)さん :07/02/07 10:43
>>785だと隅っことか細い通路が駄目だったのでちょっと修正してみた

-- ▼モーションキャンセル用コード -----------
local zx, zy = GetV( V_POSITION, MyEnemy )
if( MyMotionCancel == 0 ) then
Move(MyID,zx+1,zy)
Move(MyID,zx,zy+1)
MyMotionCancel = 1
else
Move(MyID,zx-1,zy)
Move(MyID,zx,zy-1)
MyMotionCancel = 0
end
-- ▲モーションキャンセル用コード -----------

これでmobが壁にめり込んでいる(移動不可セルにいる)以外はOK。
ただATACK多重送信と併用するとラグ発生しやすいかも。

788(○口○*)さん :07/02/07 10:45
そういや現在座標にMoveしてもモーションキャンセルできないだろうか。

789(○口○*)さん :07/02/07 10:57
つーか、Attack多重送信はもう意味なくないか?
送ってキャンセルできるから意味があったんじゃないのか?

790(○口○*)さん :07/02/07 11:25
>>789
そのとおりですなw 元からモーションキャンセルの為に送ってたものだったし。
とりあえずうちの亜種MCリーフの戦力は元に戻りました。
というかむしろ、ちょっとだけmobの重力座標に強くなった模様。

791(○口○*)さん :07/02/07 11:33
つーか、多重Attack入れてた位置でMoveやればいいんじゃないの
ATTACK_STに追加するより多重と入れ替えた方が無駄パケ減ってよさげ

792(○口○*)さん :07/02/07 11:49
>>791
多重のかけかたはAIによって違うから、汎用的に組み込めるこっちにしてみた。
無駄パケといっても攻撃時に毎回Moveかけるのなら結局同じじゃないの? 違ったらごめん。

793(○口○*)さん :07/02/07 12:01
>>789
なんどもごめん。今確認してみたが、多重も残しとかないと実ASPDがちょっと落ちる模様。

794(○口○*)さん :07/02/07 17:04
普通にやるとメンテ後もリロードでやたら重いんだが
function AI(myid)
end
だけのファイルでやってみたら遅延がなかった。
どっかにネックになってる処理があるみたいだな。

795(○口○*)さん :07/02/07 17:24
ごめん、わずかだけど遅延あるわ
。かなり軽減はされるけど何も書かなきゃ軽い、じゃ意味ないしな。
ちょっとずつソース削って問題箇所探そうとしたけど最低限のファイルでもだめってことはやっぱクラか鯖の問題か。

796(○口○*)さん :07/02/07 18:47
AIによってだいぶ差はあるから何か問題点はあると思う。

797(○口○*)さん :07/02/07 21:41
さっきこっこAIの最新版でホム動かしたらMob倒した後で
ホムの動きが止まって移動もスキルも追従も出来なくなったんだが・・。
安息→コルホムでもリログでも変化なし。
AIフォルダにはErrorのファイルがあって中身は

2007/02/07 21:26:15 : ./AI/USER_AI/AI.lua:2139: attempt to index field `?' (a nil value)
2007/02/07 21:26:50 : ./AI/USER_AI/AI.lua:2139: attempt to index field `?' (a nil value)
2007/02/07 21:31:55 : ./AI/USER_AI/AI.lua:2139: attempt to index field `?' (a nil value)
2007/02/07 21:32:11 : ./AI/USER_AI/AI.lua:2139: attempt to index field `?' (a nil value)
2007/02/07 21:32:40 : ./AI/USER_AI/AI.lua:2139: attempt to index field `?' (a nil value)

798(○口○*)さん :07/02/07 21:53
>>797
凄い勢いで対応中だから追っかけてやれ

799(○口○*)さん :07/02/07 22:09
自作AIだとやっぱり2、3秒固まるが、AI 関数の中身コメントアウトしてもやっぱり同じくらい重いんだよな。
まさかとは思うがファイルサイズに比例とかじゃあるまいな。

800(○口○*)さん :07/02/07 22:49
「ファイルサイズに比例」はケミスレで何度か見かけた意見だし、実際そうなのかもしれん。
あと、HDDのアクセス速度にもよるのかな。
うちはシリアルATAでストライピングしてるせいか、テレポ後のラグが0.5秒くらいだ・・・。

801(○口○*)さん :07/02/07 22:58
読み込み時のループ数減らしたら早くなったってのもある。
色んな要因がありそうだな。

802(○口○*)さん :07/02/07 23:55
ちょっと試したが、工体AIの最適化で
@全ファイルを1つのファイルにコンパイルした場合
A各ファイルごとにコンパイルした場合
だと、@よりAの方がラグが少なかった。
ファイルサイズなのか、最終的な読み込みまでの速度なのか・・・?

803(○口○*)さん :07/02/08 00:42
こっこの人、まずblogで先行配布をして、配布ページは安定した
(数日間バグの出なかった)バージョンだけリンクしたらどうだろう。

>>797は二行目からライトユーザーだと思ったから
「開発版(人柱版)はやめとけ」と言おうとしたんだけど、
それしかなくて困った。

804(○口○*)さん :07/02/08 00:43
GvAIでホムがケミを追跡するようにしたいんだが
どうしたら良いか分かりやすく教えて下さい

805(○口○*)さん :07/02/08 00:45
もう一つ言いたかったことを推敲したときに消しちゃってた。orz

フットワークの軽さはすごいの一言。見習わないと。

806(○口○*)さん :07/02/08 01:02
>>803
今回は読み込みラグが深刻で緊急だったから
思い切っちゃったのかと。

しばらくテストしてから正式リリースってのは前からたまにやってたよ。

807(○口○*)さん :07/02/08 01:09
正直今回のこっこの人はまさに神だった。
あの誠意溢れるスーパー対応は、どっかの誰かさん達に見習わせたいよね。
まぁ比べるのも失礼な話だが。

808(○口○*)さん :07/02/08 02:10
口だけのお前が一番失礼だろw

809(○口○*)さん :07/02/08 13:11
いや、アカ辺り1500円の金を取って対策は口だけのどっかの誰かさんたちのほうが失礼だ。
俺がどっかの誰かさん、の中身を間違えていなければだが。

810807 :07/02/08 13:48
俺がうかつすぎた。
曖昧な書き方すると他のAI作者様と取られてしまう可能性があるよね。

「どっかの誰かさん達」改め、「とあるゲームの運営会社様」に訂正お願いします。

気分を悪くされた方がいらっしゃったら、申し訳ありませんでした。

811787 :07/02/08 17:21
すこしいじってみた結果、
ASPDを最優先にするなら多重のとこにMoveつっこんだほうがやっぱいいみたい

例えばくまAIでだけど末尾に↓を追加して多重送信してた場合は……
if (MyState == ATTACK_ST) then
OnATTACK_ST ()
end

こんな感じ↓でいいかと。打ったらササッとよけるイメージ?
local zx, zy = GetV( V_POSITION, MyEnemy )
if (MyState == ATTACK_ST) then
OnATTACK_ST ()
Move(MyID,zx+1,zy)
Move(MyID,zx-1,zy)
end
if (MyState == ATTACK_ST) then
OnATTACK_ST ()
Move(MyID,zx,zy+1)
Move(MyID,zx,zy-1)
end

これでほぼ完全にメンテ前の速度になるけど、>>787の見た目も捨てがたいw
要は多重送信ごとに左右と上下にスウェー(?)してるんだけど、
多重送信を2個追加してることになるんで例によってラグるかも。

812(○口○*)さん :07/02/08 19:12
乙乙

これって重いなと思ったら
OnATTACK_ST ()
の片方削ってもおk?

813(○口○*)さん :07/02/08 19:47
>>812
試しに真ん中の
end
if (MyState == ATTACK_ST) then
OnATTACK_ST ()
を削ってみたけど、かえって重くなるみたい。

814(○口○*)さん :07/02/08 19:57
使わせてもらってなんだが
敵に纏わり付く感じでキモいな(;´Д`)
早く直るといいなあ

815(○口○*)さん :07/02/08 22:32
ありがたく使わせて頂いてます

個人的にはやたら動き回るため主人にタゲが移りやすいのと
やっぱりSP問題が気になるところでしょうか

816(○口○*)さん :07/02/08 23:12
MH&SPによって動作が変更出来れば解決

817(○口○*)さん :07/02/09 00:14
>>787 のコードつっこんでみた。
確かに遜色ない速さになったな。
夢幻闘舞がかっこいいととるかキモいととるかは人それぞれだが。

すごい細かいことだけど真偽値なら true falseのがもにょもにょしなくて済むな。

818(○口○*)さん :07/02/09 00:33
そういやこの変更で自分の攻撃モーション見れるかとおもってトレースしてみたけど拾えないみたいだね
立ち、移動、被弾だけだわ

819(○口○*)さん :07/02/09 08:40
>>804
確か作者が自分で移動ロジック組んで組み込むしか無いとかいってなかったっけ?
多分もともと移動が組み込まれてないから追加するだけで他に影響がでることは無いはず

if GetDistans(MyID,OwnerID) > 5 then
MoveToOwner()
end

携帯からだから綴り間違えまくってるはずだけどこんな感じでAI関数のなかに埋めればついてくると思う

820(○口○*)さん :07/02/09 08:52
いまんとこそこそこ有名な配布AIでASPD対策ずみはこっこAIだけ?

821(○口○*)さん :07/02/09 08:54
わかんないけど、コードあがってるんだから自分で追加しちゃえばもーまんたい

822(○口○*)さん :07/02/09 08:54
>>787を入れているんだが、あまり変った気がしない・・・
ミスってるんだろうかorz

rhapsoAI使用で、>>811を入れてみたいんですが
どこを変えればいいのでしょうか?
多重設定がいくつかあるので、どれを変えたらいいのか分からなくて・・・。

823(○口○*)さん :07/02/09 09:10
>>820
とりあえず、AI機能比較表見てくれば?
判っているだけでも5つくらいは対応してる。

AI作者の人もROだけで生きてるわけじゃないだろうから、この三連休で対応って人も多いんじゃないかな。
気乗りしてない人もいるみたいだけど。

824(○口○*)さん :07/02/09 09:32
>>820
こっこの移動キャンセル試してみたけど体感ASPD的には>>787と同じぐらいかな。(Moving、ASPD対策 ”高”)
いまんとこ>>811が最速っぽ。

>>822
ちゃんと>>785の66行目〜のほうも入れてる?
あと>>811のほうはAIによって変わるから、rhapsoAIのプラグインにするのは難しいかと。

>>811をそのままくまAIの末尾の
end
----------
前につっこんでrhapsoAIで呼び出すなら簡単にできるはず。

825(○口○*)さん :07/02/09 09:59
グローバルの所に追加済みです。
ttp://www.mmobbs.com/uploader/files/2099.zip
>>787を追加済みのAIなのですが、よかったら見ていただけないでしょうか。

826(○口○*)さん :07/02/09 10:23
>>825
ちょ、なんで145行目あたりの移動命令のとこにつっこんでるのーw
それでいくと550行目あたりの TraceAI("OnATTACK_ST")の後につっこむといい。

テストしようと思ったらファイルが足りなくてエラー吐いたからそっちでやってみて

827(○口○*)さん :07/02/09 10:28
( ω)   ゜ ゜ ←動きを見てびっくりした人
>>826
ありがとうございました。
非常に挙動不審な攻撃ですね・・・w

828(○口○*)さん :07/02/09 12:00
挙動不審な攻撃のやつ、配布してほしいです。

829(○口○*)さん :07/02/09 13:38
>>828
ttp://pc3merchant.net/ai_antenna/
↑のASPD対策に○ついてるのつかえば挙動不審になるよ

830(○口○*)さん :07/02/09 14:49
PTSD対策に見えた(1/20)

831(○口○*)さん :07/02/09 16:10
>>829
ありがとう!やってみます

832804 :07/02/09 22:27
>>819
遅レスですがありがとうございます
後で試して見ます

833(○口○*)さん :07/02/09 23:42
今、こっこ使ってるんですけど、友達登録ができなくなりました。
今週初めてつないだのですが、今回のメンテで友達登録系にも
何か修正が来たんですか?

834(○口○*)さん :07/02/10 00:11
やられてるのかな?
調べてみたんだけどたぶん
人に対してShift+Alt+右クリックしてたら
今まで:予約移動コマンド
今は :予約攻撃コマンド
になってるみたい
だから その他のAIでも人に対してShift+Alt+右クリックしてるコマンドがあれば
できなくなっている可能性がある

違ってたらごめん・・・

835(○口○*)さん :07/02/10 01:24
>>834
確認してみました。
結論からいうと、ちょっと操作がシビアになったようですね。

現在でも、本当に人の足元をALT+SHIFT+右クリックすれば、従来同等の「予約移動コマンド」は得られます。
が、人を直接指定すると、834氏の通り「予約攻撃」になってしまうようです。
人の名前が出ないように、カーソルをぎりぎりに合わせないとできないので、
面倒にはなったかも。

836(○口○*)さん :07/02/10 02:00
プレイヤーをAlt+Shift+右クリックで、
IDが取得できるようになったということなのかな?
それはそれで便利になったかも。

837835 :07/02/10 02:22
>>836
そうですね、前向きに考えればその通りです。
逆にいうと、今まではALT+SHIFT+右クリックで取れていたIDは無条件に「敵」だったのに、
それ以外のIDもくる可能性が生まれたので、それなりに条件分岐を追加しないとならないですね。

838(○口○*)さん :07/02/10 02:30
+SHIFTだけ?
今ちょっと試せないけど普通にプレイヤーをALT+クリックはできないのかな。
できれば使い道ありそうだけど攻撃命令が密集時には面倒になるのだろうか。

839(○口○*)さん :07/02/10 02:41
>>838
試してきたけど +Shiftの時だけ
思えば+Shiftしないと人に剣カーソルでないんだよね

840(○口○*)さん :07/02/10 02:52
つまり、GetMsg のトリガーは以前どおりで
GetResMsg は敵オブジェクト指定からプレイヤーを含むオブジェクト指定になったわけか。

841(○口○*)さん :07/02/10 14:26
本スレで話題になってる治癒の手についていまいちわからなかったんだけど、
これで合ってる?

・スキル自体は対象指定スキル
・なのにSCは即時発動(AIでキャプチャできない)

842(○口○*)さん :07/02/10 14:39
本スレだとこんな感じみたいだな。
報告者それぞれの表現が違うから下3つが未だに不明だ。

あと、ひょっとしたらだけど治癒の手が SKILL_OBJECT_CMD 経由するようになってたりしない?
疑問は出せるけどリーフいないから確かめられん。


-2007/02/06パッチの影響でスキル発動時の表示が変化しているようです。 (確認中、多分バグ)

--治癒の手を手動で使った場合
---主人のケミが回復する
---ホムの上に回復量が表示される(以前は、主人の上に出た)

--AIからID指定で使った場合。(主人指定)
---主人のケミが回復する
---○○の上に回復量が表示される

--AIからID指定で使った場合。(ホム指定)
---○○が回復する
---○○の上に回復量が表示される

--AIからID指定で使った場合。(他者指定)
---○○が回復する(発動しない?)
---○○の上に回復量が表示される

843(○口○*)さん :07/02/10 16:53
ちなみに、AIでケミ自身にPPできるようになってる。

844(○口○*)さん :07/02/10 17:50
条件文についてお聞きしたいのですが
if (GetV (V_HP,MyID)/GetV (V_MAXHP,MyID)*100<=80)は,HPが80%以下なんですが
これに、50%〜80%の間という条件はどのようしたらいいのでしょうか?

845(○口○*)さん :07/02/10 17:53
>>844
50〜80%ってのは要するに
「50%以上 かつ 80%以下」だろ?

if (GetV (V_HP,MyID)/GetV (V_MAXHP,MyID)*100<=80) and (GetV (V_HP,MyID)/GetV (V_MAXHP,MyID)*100>=50) then

846(○口○*)さん :07/02/10 19:13
ありがとうございます

847(○口○*)さん :07/02/10 20:38
すみません教えてください。
なんだか急にホムの攻撃速度が遅くなったような気がするんですが、きのせいでしょうか。
くまーAIを使っています。

848(○口○*)さん :07/02/10 21:11
お約束通りスルーで

849(○口○*)さん :07/02/10 21:55
多少仕様変更はいったみたいなので鳥のスキル対象の検証をしてきた。

■フリットムーブ
自分・主人・mob・一般NPC:通常どおり、エフェクト=自分
0,-1:不発

■オーバードスピード
自分・主人・mob・一般NPC:通常どおり、エフェクト=自分
0, -1:不発

■ムーンライト
mob:通常どおり、エフェクト=敵
ホム自身・主人・一般NPC:不発、ただしSPは減る
0, -1:不発

SBRは親密度犠牲にできないので勘弁。

ムーンライトの不発はIsMonster==0のせいじゃないかと推測する。
FM、OVSは拾えるオブジェクトのIDならなんでもよいみたいだ。

一般NPCはようするに商人NPCとかのあれ、mobは攻撃可能な敵。
あと手動で対象にできるのは

850(○口○*)さん :07/02/10 22:05
最後の行削り忘れた。気にしないでおくれ

851(○口○*)さん :07/02/11 00:09
きのこAIもAspd対応版が出たね。
mobを中心にぐるぐる回りながら規則正しく叩く感じなので、
挙動不審系のモーションキャンセルみたいな面白味はなかったけど。。。

>>835
きのこAIはAlt+Shift+右クリックがいろんな登録操作に使われてて、
今まで足元クリックしなきゃいけなかったのが、直接クリックOKになったので、
単純に楽になりました、がこれは不具合なのか仕様なのか、それが分からないorz

ところで、プレイヤーをAlt+Shift+右クリックすると、
その人に追従?しに行く為か、その人の隣まで自分が移動しちゃうんだけど、
これを防ぐには、座るしかないんでしょうか。
座る以外に何かいい方法ないでしょうか。

852(○口○*)さん :07/02/11 00:57
>>848
なにがお約束どおりするーなんだよ。失礼なやつだな。

853(○口○*)さん :07/02/11 01:15
カリカリしなさんな。
攻撃速度についてはテンプレサイトなりログ読めばわかる。

854(○口○*)さん :07/02/11 01:16
>>852
848が、あんな風に言いたい気持ちもわかる

>>847
とりあえず ここを>>785から見ていけばわかるよ

855(○口○*)さん :07/02/11 01:27
>>852
847乙です^^

856(○口○*)さん :07/02/11 01:29
スレを頭から読めとか言わないけど、何かおかしいなと思ったら普通ちょっとくらい前のレス読んでから書き込むでしょ・・・。
数行上も読まずに質問とかスレをなめてるか喧嘩売ってるとしか思えないw

857(○口○*)さん :07/02/11 01:52
>>856
首から「私が856です」って書いたプラカードぶら下げて道歩け。ものすごい勢いでぶん殴りに行ってやるから。
よくわかんねーことだから遠慮して書いてりゃ図に乗りやがって、ボケが。

858(○口○*)さん :07/02/11 01:56
お約束どおりスルーで。

859(○口○*)さん :07/02/11 01:58
ん、もう春休み?

860(○口○*)さん :07/02/11 02:00
NG登録まじお勧め。
ところでAIのタゲ検証用のコード書いたけど使ったりするかな。

861(○口○*)さん :07/02/11 02:00
自分で書いておいてなんだけど、この子がほんとに847だったらどうしよう

862(1/2) :07/02/11 02:05
--------------------
-- 検証用スクリプト
--
-- 主人が立った状態でALT+Tするとホム自身にスキルを試みる
-- 主人が座った状態でALT+Tすると主人にスキルを試みる
-- ALT+クリックで敵を対象にすると敵にスキルを試みる
-- ALT+SHIFT+クリックで敵やプレイヤーを対象にするとそれにスキルを試みる
--------------------
-- 定義部
require "./AI/Const.lua"
require "./AI/Util.lua"

MOTION_SIT = 6 -- 座っている
SKILL_TOUCH_OF_HEAL         = 8001  -- 治癒の手助け
SKILL_EMERGENCY_AVOID       = 8002  -- 緊急回避
SKILL_MENTAL_CHANGE         = 8004  -- メンタルチェンジ
SKILL_CASTLING              = 8005  -- キャスリング
SKILL_DEFFENCE              = 8006  -- ディフェンス
SKILL_BLOOD_LUST            = 8008  -- ブラッドラスト
SKILL_MOONLIGHT             = 8009  -- ムーンライト
SKILL_FLEET_MOVE            = 8010  -- フリットムーブ
SKILL_OVERED_SPEED          = 8011  -- オーバードスピード
SKILL_SBR44                 = 8012  -- S.B.R.44
SKILL_CAPRICE               = 8013  -- カプリス
SKILL_CHAOTIC_VENEDICTION   = 8014  -- カオティックベネディクション
SKILL_BIO_EXPLOSION         = 8016  -- バイオエクスプロージョン
--------------------
-- 設定部
Skill = SKILL_TOUCH_OF_HEAL   -- 使わせるスキル
SkillLv = 1     -- 使わせるスキルレベル

863(2/2) :07/02/11 02:05
function AI(myid)
    MyID = myid
    MyOwner = GetV(V_OWNER,MyID)

    local msg = GetMsg(MyID)
    if msg[1] == NONE_CMD then
        msg = GetResMsg(MyID)
        if msg[1] ~= NONE_CMD then
            TraceAI("RES CMD : "..msg[1])
        end
        if msg[1] == ATTACK_OBJECT_CMD then -- ALT+SHIFT+Click
            SkillObject(MyID,SkillLv,Skill,msg[2])
        end
    else
        TraceAI("CMD : "..msg[1])
        if msg[1] == FOLLOW_CMD then    -- ALT+T
            if GetV(V_MOTION,GetV(V_OWNER,myid)) == MOTION_SIT then
                SkillObject(MyID,SkillLv,Skill,MyOwner)
            else
                SkillObject(MyID,SkillLv,Skill,MyID)
            end
        elseif msg[1] == ATTACK_OBJECT_CMD then -- ALT+Click
            SkillObject(MyID,SkillLv,Skill,msg[2])
        end
    end

    --以下はただの追従動作
    if GetDistanceFromOwner(MyID) > 3 then
        TraceAI("FOLLOW")
        if GetV(V_MOTION,MyID) == MOTION_MOVE then
            Move(MyID,GetV(V_POSITION,MyOwner))
        else
            MoveToOwner(MyID)
        end
    end
end

864(○口○*)さん :07/02/11 02:07
とりあえずこんな感じで。

865(○口○*)さん :07/02/11 13:36
ちょっとミス
if GetV(V_MOTION,GetV(V_OWNER,myid)) == MOTION_SIT then
のとこローカル変数だった
if GetV(V_MOTION,GetV(V_OWNER,MyID)) == MOTION_SIT then
が正しい。

866(○口○*)さん :07/02/12 15:53
こっこAIへのわりとどーでもいいツッコミ。

・edit_mob2.htaとedit_set.htaの同時起動不可能
SINGLEINSTANCE="yes" で APPLICATIONNAME="Set_editer" と同一に
なってるのが原因。

・HTAはウィルスに悪用される機能の塊
正確にはWScriptの部分が。
たとえばROの垢ハックウィルスも、トロイを送り込む部分で
WScript.ShellとScripting.FileSystemObjectを使ってる。
だからセキュリティ関係でブロックされるのもしょうがない。

・htaの画像アクセスとFW
ZoneAlarmで通信拒否しても動作はする。起動にかかる時間は増えるけど。
アイコンとバナーを消したらZAは黙った。

・SaveFriend()
fp = io.open(filename,"w")
if (fp ~= nil) then
end
fp:close()
わざわざnilチェックしているのに、もし実際にnil返ってきたらコケちゃう。

867(○口○*)さん :07/02/12 16:18
htaはIEの機能そのまま使えるのにIEのセキュリティ設定を全スルーするからねえ…
いわばソースの見えるexe。ウィルスチェックも記述方式で小細工されたら無効だし。
ソース覗いて自衛するにこしたことはないが、いっそexeにしてMD5を公表してくれたほうが改変防止になる。

868(○口○*)さん :07/02/12 16:37
利用者側の意識として「HTAはHTMLではなく、exeと同様に扱うべき」という
点には同意。

>exeにしてMD5を公表
再配布されたものを使わない(フィッシング詐欺のようにURLに注意する)
というのは常識として。

exeにしたところでなにが変わるとも思えない。改竄する人はするし。
むしろ「ソースを覗く」敷居が高くなるせいで危険度が増すんじゃない?

869(○口○*)さん :07/02/12 16:48
本物の素人はHTMLもEXEもわかんないだろうから
そういうの相手にするのは疲れるだろうな

870(○口○*)さん :07/02/12 17:18
ふつーに起動しようとするとwindowsの警告出るからなw

871(○口○*)さん :07/02/12 20:36
exeはやばい、て認識ある人ならいるけどhtaだと設定ファイルかなんかだろうと注意ゆるむと思う

872(○口○*)さん :07/02/12 21:15
.hta がなんだか知らない人の方が多いと思われ。

873(○口○*)さん :07/02/12 21:28
>>870
どんなのが出たっけ。

>>871
有名AI作者のHTA使ってる分には注意緩んでても問題ないんじゃ?
人目に多く晒されてるからなにかあればすぐ叩かれるし。
そもそもos.execute()がある以上、AIとHTAの危険度は大きくは変わらない。

874(○口○*)さん :07/02/13 02:05
Vistaの方だと判らないけど、普通に起動しただけなら「Windows」は警告出さんぞ?
出るのはこっこAIのBBSにもあるが、関連付けに関するエラーと他の「セキュリティソフト」の警告だ

875(○口○*)さん :07/02/13 04:41
WSもhtaもexecuteも使ってないけど
あえて前者使うってことはexecuteは使い勝手悪いってことかな。
実行完了するまで親側に処理が戻ってこないようなことを過去見た気はするけど。

876(○口○*)さん :07/02/13 08:25
あえて使うと言うよりはexecuteはRO蔵とAIが動いていないと使えないが
hta(こっこはVBベースで動作)はRO蔵が無くても動く
主にAIの設定はホムを動かす前に事前に完了しているべき事だから
RO蔵が無くても動く+中の人が使える言語(VB)?関連でhtaを使っているだけだと思う
.NETなんかでexe組めるならexeにするだろうし所詮は好みの問題

877(○口○*)さん :07/02/13 14:35
Web公開している作者でソースが読めるプログラムに
仕込みをするバカがいるとは思えないが・・・

878(○口○*)さん :07/02/13 14:36
問題はエラー出て動かない奴が多発してることだと思うんだ

879(○口○*)さん :07/02/13 15:10
ROクラ入れれば(入れ直せば)スタンドアロン版のlua.exeがついてくるから
それで動かせばRO動かす必要はないんだけど

UI貧弱すぎ。

>>876
VBじゃなくてVBS。似てるけど別物。
既にVBが使える人ならVBでexe作った方がなにかと早い。

HTAの利点はHTMLとその周辺技術がベースでその延長だから、
修得コストに優れるんだよね。

もっともその反動でサポートのコスト増えたらしょうがないわけで。

>>878
そりゃ確かに問題だよなぁ…とBBS見て思い出した。

ファイル選択ダイアログは環境依存が多くて、<input type="file">から
ファイル名を取り出すのが最善だったはず。
前に工体関係でMSComDlg.CommonDialogがどうのこうの話題になってた
記憶があるし、UserAccounts.CommonDialogもXP依存らしい。
ttp://winofsql.jp/VA003334/vbsguide051211222547.htm
(↑のコードはWSH用で、HTAではIEのオブジェクト作成不要)

880(○口○*)さん :07/02/13 15:18
ファイルパス決めうちでいいような気がしてきた。
「AI(set.luaやmob.lua)のあるフォルダにhtaを置いて実行して下さい」
とすれば.\set.luaでアクセスできるんじゃないかな。

ファイル使い分けたい人には「エクスプローラでなんとかしろ」でおk。

881(○口○*)さん :07/02/13 15:22
>>880
Setの方は既にそうなってるよ。
根本的にマズいのはそこじゃなさげ

882(○口○*)さん :07/02/13 21:33
ソース不明なコンパイルLUAだったりよくわからん警告出たりホムAIも自己防衛が必要な時代になったな

883(○口○*)さん :07/02/13 21:39
>>882
お前は何を言っているんだ

884(○口○*)さん :07/02/14 02:37
>>882 自己防衛の前にまず読解力からだなw

885(○口○*)さん :07/02/16 12:50
AIの切り替えをしてホムを呼びなおしなおすとエラーで動かせなくなるのですが
エラー文は
cannot read./AI/USER_AI/AIlua:No such file or directory
で2行目は
attempt to call a nil value
フォルダーは USER_AI で中身はデフォルトに直したのですができなくて困っています。
どなたか分かる方お願いします。

886(○口○*)さん :07/02/16 13:03
初期状態ってUSER_AIフォルダないんだっけ?

>cannot read./AI/USER_AI/AIlua:No such file or directory
「./AI/USER_AI/AI.luaというファイルが読めない:そんなファイルディレクトリねーよwww」

USER_AIフォルダ、AIフォルダと並んでない?
RagnarokOnline\
├AI\
│└AI.lua
└USER_AI\
 └AI.lua

正解はAIフォルダのなかにUSER_AIフォルダ。
RagnarokOnline\
└AI\
 ├AI.lua
 └USER_AI\
  └AI.lua

887(○口○*)さん :07/02/16 13:11
>>886
ありがとうございます並んでました
「AI/USER_AI」ってよく考えたらAI内のUSER_AIって書いてありますね・・・
家に帰ったら試してみます。

888(○口○*)さん :07/02/16 15:32
>>886
お前優しいな。せっかく俺が煽ろうと思ったのに

889(○口○*)さん :07/02/16 15:34
しかしコマンドで簡単に切り換わっちゃうのに
デフォルトでUSER_AIが無いってかなり危険だよな。
なんで作っておかないんだよ…。

890(○口○*)さん :07/02/17 23:29
その辺は作者のサイトにちょっと書いておきゃすむんじゃないかと思ったけど
結局マニュアル見もしない人ばかりだからそう言う質問ばっかになるよなー
せめてWikiみりゃいいのに。

891(○口○*)さん :07/02/18 09:14
>>890
お前も何を言っているんだ

RO蔵に最初からUSER_AI入れとけって話だろ

892(○口○*)さん :07/02/18 10:41
>>890
USER_AIはAIじゃなくてクライアントが指定してくるフォルダだからな。
クライアントが使うフォルダなのにデフォルトで存在しないのはどうなのよ?って話だな

893(○口○*)さん :07/02/18 15:11
先々週から続いてる読み込み遅延だけど、どのAIが重くてどのAIが軽いかって出てる?

894玉蟲の中より :07/02/18 15:19
一番は全部試すのがいいと思うよ
人が重いって言っても自分にとっては軽いと感じるかもしれないし逆もまた然り
アンテナでの紹介では20くらいあるけどそれを探すのもいいんじゃないかな

ちなみに
読み込み遅延対策してない上に下らんファイルが多いから
多分うちのは重い!!

895(○口○*)さん :07/02/18 16:10
つーか、読み込み重い系については情報が少なすぎて判らん、ってのが実情。
うちのPCだと正直重かったんだが、先日たまたまネカフェで動かしたらほとんどストレスなし。
PC環境による影響はあるのかな、という気はする。

896893 :07/02/18 16:38
そんなわけで比較的全部やってきた

実験内容:該当AIを読み込ませた状態のホムをケミと一緒に
プロンテラ付近の過疎Mapで20回テレポートするのに掛かった時間を記録
明らかに鯖のラグと見られる物が発生した場合はやり直し
AIはダウンロードしたものをそのまま貼り付けたもので内容は弄らない

掛かった時間/AI名/Update/Ver/zip状態での容量/総ファイル数
19min  ホムなし
19min  デフォルトAI               4.94kb 3
26min  Glenelg 02/14 0.48a           189kb 244
30min  こっこAI 02/13 4.53           151kb 1
19min  幻塵AI 02/12 070212         14.8kb 7
34min  可能な限りAI 02/12 1.4h       59.3kb 4
23min  きのこAI 02/10 0.13a         24.5kb 7
24min  玉蟲AI 02/10 2.269           12kb 27(include readme.htm)
20min  初回限定AI 02/07 0.70207      58.9kb 17
39min  工体AI私的修正版 02/06 103+15  91.5kb 27
32min  rhapsoAI 11/29 1.53          286kb 42(ほむTALK同梱)
19min  どきどきAI 08/23 060823u      31.5kb 1
21min  くまーAI 07/23 0.53a          22.2kb 4

897(○口○*)さん :07/02/18 16:41
・・・単位はsecだよね?(笑

898893 :07/02/18 16:43
ミス
×24min  玉蟲AI 02/10 2.269           12kb 27(include readme.htm)
○24min  玉蟲AI 02/10 2.269           912kb 27(include readme.htm)

とりあえず中のファイル数と重さはあまり関係ない様子?
比較的容量というかコマンド数に依存しているのだろうか

というか工体ユーザーの私は泣いたorz

そしてデフォルトAIのいきなり殴り始める仕様やどこか行ったきり帰ってこない仕様に感動(ノ∀`)

899893 :07/02/18 16:44
うわああああsecだスマソ

900(○口○*)さん :07/02/18 16:47
ともあれ、調査お疲れ(^^

901(○口○*)さん :07/02/18 17:24
海外ROのAIサイトとか知っている人いる?
そもそも日本ROと共通しない部分があるかもしれないけど

902(○口○*)さん :07/02/18 17:57
ホム実装以前に予習の意味で海外サイトはけっこうみんなあさってたみたいだけど、
ほとんどなかったんじゃなかったっけかな。

903(○口○*)さん :07/02/18 17:59
最新こっこにしてから読み込みなんて全く感じなくなったけどね
環境にもよるのかな

904(○口○*)さん :07/02/18 21:15
>>901
アンテナのAI詳細内、RampageAI と MirAI が海外製で割とメジャー。

掲示板ならRagnaInfo の
> Alberta Merchant's Pub > Share your Homunculus AI!
あたりかな。

905(○口○*)さん :07/02/18 22:43
ところで私は工体でバニルを使い手なわけだが残念なことに2週間ほど前から
ラグが発生したのでギルメンに「お前それでいいわけ?」と言われた。
私的修正版の人が工体の後継者な訳だが工体だと重すぎてバニルが気の毒になったので
ラグの実験をしたわけだが結果むかついたので「お前新AIでボコるわ……」

前振りを考えすぎて何を質問しようと思ったのか忘れた

このラグって今後のパッチの当て具合で直るかな?

906(○口○*)さん :07/02/18 23:35
悪いが前振りの日本語が下手すぎて何を言いたいのか分からん

907(○口○*)さん :07/02/18 23:37
>>905
パッチで直るなら暗号化解除された時じゃね?
もしくはnProの更新で直るかも
海外Roで暗号化もnProも無い所では今まで通り読み込みラグなしで動いているってさ

908(○口○*)さん :07/02/18 23:45
暗号化というよりは、不正ツールのファイルチェックかな、と思ってる。
まあどっちにしても、nPro絡みでしょうね。

909(○口○*)さん :07/02/18 23:51
nProがらみだとパッチでの修正は難しいか……
最悪このままって可能性もあるし

910(○口○*)さん :07/02/19 00:57
>>905
何いきなり話かけて来てるわけ?

911(○口○*)さん :07/02/19 02:25
工体AIに置いてあるAspdAccelですが、これは移動で
モーションカットしていて使うとSP回復が遅くなったりしますか?

912(○口○*)さん :07/02/19 02:44
ソース見て分からないなら使ってみるといいネー

913(○口○*)さん :07/02/19 08:25
>>905
>ラグの実験をしたわけだが結果むかついたので「お前新AIでボコるわ……」
この辺の文がよくわからない

914(○口○*)さん :07/02/19 09:17
>>913
905氏は工体AI使い
→2/6パッチで、AI重くてPvで苦戦、Pv仲間に「そのAIじゃ勝負にならん」的につっこまれ。
→AIの起動状況調査
→工体AIが重くてがっくり、それを仲間にからかわれる
→AIを乗り換えてPv相手に「お前、(乗り換えた軽い)新AIで、(お前を)ぼこる」発言

・・・ってとこじゃないかと。

915911 :07/02/19 10:52
>>912
もちろん使った上での質問です。
SPの減り具合が沸き具合で変わるので
(SPが余るときも余らないときも有り)
AspdAccelの影響かどうか判断できなかったです。

916(○口○*)さん :07/02/19 11:25
>>915
移動してるんだから、HPとSPの回復するわけないだろ。
回復のため、SP○%以上でないと旋回しないとかの設定が各AIにあるのもその為だっつーの。

917(○口○*)さん :07/02/19 11:57
>>905
おまえハイスラでぼこるは・・・

918915 :07/02/19 13:14
>>916
ありがとうございます。
SPをとるかASPDをとるかになるんですね。

919(○口○*)さん :07/02/19 14:22
鳥でこっこから>>811にしてみたら
ブーストスキルできなくても総合的な効率は上になった
いざとなったら青PPなくても何度かはブーストできるしいいやこれで

920(○口○*)さん :07/02/19 16:06
詠唱妨害に対応していないAIに簡易的な詠唱妨害を搭載したいのですが

・もしホムや自分(または友人)と交戦している敵が
・スキルを使ったら
・ムーンライト(カプリス)をぶち込む
end

って何行くらいでできるものでしょうか。

921(○口○*)さん :07/02/19 16:08
友人のIDの取得をどうやってしているか知らんのでそこだけは省くが
3行で出来る。

922(○口○*)さん :07/02/19 16:17
>>920
あなたの使っているAIで、横殴り防止機能が関数として提供されているかどうかで、だいぶ違う。
関数提供されているなら、それこそ以下のような感じで5行でできる。

while ( 視界内にいるすべての敵 ) do
 if (その敵が詠唱中 and その敵を攻撃しても横殴りにならない)then
  SkillObject(その敵)
 end

end

923922 :07/02/19 16:19
ちなみに厳密にいうと、ムーンライトは射程2のスキルなので、射程外だったらどうするかのチェックは考えたほうがいい。

924(○口○*)さん :07/02/19 16:25
>>922
それちょい危ない。
明らかに他人をタゲっているが未接触(AIから見てターゲット0)、
かつ”対象指定ではない詠唱スキル(HDとかFWとか)”を他人の地点に向けて撃っている
といったケースは横殴り詠唱妨害する可能性が高い。

925(○口○*)さん :07/02/19 16:27
あと亀地で無闇に陸亀のタゲを集めそうなのでマズいかも。
ターゲットが自分たちであるMobから選定していく方がよいと思われる。

926(○口○*)さん :07/02/19 16:29
AIから打つなら射程無制限で行けるから余り気にする場面は少ないけどな

927922 :07/02/19 16:35
>>924==925
ご指摘くださったいろんなケースがあるのは知っているが、それをひっくるめて
「その敵を攻撃しても横殴りにならない」という条件を書いた。

そのAIでそういうケースを考慮してないなら、詠唱妨害以外の通常攻撃だって横殴りするはず。
同じ条件で横殴り防止判定してるんだろうから。

ただ、確かに925での指摘はその通りなので、それもひっくるめて、
if (その敵が「味方に対して」詠唱中 and その敵を攻撃しても横殴りにならない) then
くらいにしたほうがいいかもしれない。

あと気が付いたけど、スキル使用できないケース(SP不足とかディレイ中とか)で悲しいかも。

928(○口○*)さん :07/02/19 16:43
そういえば詠唱中断を狙うべきmobってどんなのがあるだろう。
ケミで狩るかどうかっていうのはとりあえず置いておくとして
パッと思いつくのでエルダー・デビルチ・マリオネット・j・JKとか。

>>927
通常攻撃射程内ならAttackも混ぜてみるとか。

929(○口○*)さん :07/02/19 17:16
ご意見ありがとうございます。友人などの設定は大変そうなのでなしで、
横殴り防止はもう入ってるので大丈夫だと思います。

if MyEnemy = MOTION_CASTING -- もし敵が詠唱中だったら
SkillObject (MyID,5,8009,MyID) -- ムーンライトLV5を打ち込む
end

こんな感じでやってみます。

930922 :07/02/19 17:22
>>929
老婆心ながら指摘すると・・・それではあまり狙った効果は得られないかと。

詠唱妨害というのはもともと、
「今自分が攻撃している”以外”の敵が詠唱始めたので、それを臨時攻撃して詠唱中断させる」
・・・というもの。つまり、MyEnemy以外の敵を狙わないんだったら、意味がない。
なにしろ今自分自身が殴っている MyEnemy が詠唱を始めたところで、もともと自分が殴っているのだから
スキルを使うまでもなく妨害できる。

931(○口○*)さん :07/02/19 18:19
>930
確かにそうですよね……

>while ( 視界内にいるすべての敵 ) do
>if (その敵が詠唱中 and その敵を攻撃しても横殴りにならない)then
これって文章にするとどんな感じになりますか?

932(○口○*)さん :07/02/19 18:35
>>931
元のAIがどんな具合かわからんと横殴りにならない判定をどう書いていいかわからんがな。

933(○口○*)さん :07/02/19 22:51
if GetV(V_MOTION,MyEnemy) == MOTON_CASTING and IsParty(GetV(V_TARGET,MyEnemy) then
    SkillObject(MyID,1,SKILL_MOONLIGHT,MyEnemy)
end

自分がやるならこんなかんじかなーっと。
IsPartyは多分わかると思うけど自分、主人、友達の場合に真になる関数ね。

934(○口○*)さん :07/02/19 22:56
全検索するならこーだろーけど全部見ると手間かかりそーだなー
特定のV_HOMUNTYPEのときだけとか制限すんのもありだけど

local acotrs = GetActors(MyID)
local target
for i,v in iparis(actors) do
    if MOTION_CASTING == GetV(V_MOTION,v) then
        target = GetV(V_TARGET,v)
        if target == MyID or target == GetV(V_OWNER,MyID) then
            SkillObject(MyID,1,SKILL_MOONLIGHT,v)
            break
        end
    end
end

935(○口○*)さん :07/02/19 23:34
>929
どうでもいいけど自分にムーンライト撃ってないかそれ

936(○口○*)さん :07/02/20 03:05
>>934
プリ様がキリエかけたりヒールした後マグニしたりするとプリ様を一生懸命詠唱妨害しそう。
(しかもSP消費だけしつつ不発する攻撃スキルを連発する形で。)

if MOTION_CASTING == GetV(V_MOTION,v) then

if MOTION_CASTING == GetV(V_MOTION,v) and IsMonster(v)==1 then

937(○口○*)さん :07/02/20 05:10
確かに。敵以外と、友達からのはやめとくようにしたほうがいいなこりゃ。

938(○口○*)さん :07/02/20 12:06
細かい設定なしに初心者でも利用できるバニルAIって何使えばいいでしょうか?

939(○口○*)さん :07/02/20 12:15
ちと古いしAPPがあるからややお勧めしにくいけど
扱いやすさなららぷそが一番じゃないかと思う
すぐスタックするけどな

940(○口○*)さん :07/02/20 12:21
raphsoは仕様かってくらいすぐスタックするから気をつけろ

941(○口○*)さん :07/02/20 16:04
定点狩りの時、オークアチャやペノ等の遠距離攻撃してくる敵に攻撃食らうとスタックするのって何が原因なんですかね
AIはraphso使ってます。スタックしずらいAIなどお勧めあれば教えてください

942(○口○*)さん :07/02/20 16:06
知り合いが明らかに射程外の敵(接近せず)にムーンライト食らわしてるんですが、これってAIを利用するにあたって問題はないんですか?
もし問題なければ自分も使いたいところですが、オートポーションピクチャーみたいに使用外のものだったらやなので質問させていただきました。

943(○口○*)さん :07/02/20 16:14
>>942
自己判断・自己責任。


そろそろ次スレだから、テンプレのリンク追加案。

■公式(AIマニュアル・デフォAI)
http://www.ragnarokonline.jp/gamedata/episode/060314/homunculus.html

944(○口○*)さん :07/02/20 16:19
>>942
スキルの射程を取る関数( GetV( V_SKILLRANGE ... ) )をすると、ムーンライトの射程は2。
だが、3セル以上の敵にムーンライトを撃てるか、といえば、撃てる。
それが許されるかどうかは、ガンホー次第。

参考までに、マジシャンの各スキルの射程は9だが、一度詠唱に成功してしまえば敵が射程外に移動してもスキルは発動する。
だから「結果として射程外に攻撃できてしまう」こと自体は、仕様としてみてもいいと思う。
だが、詠唱開始時点であきらかに射程外の敵を狙うのは、お行儀がいいかというと疑問。

945(○口○*)さん :07/02/20 16:33
>>943>>944さん
早々なレスありがとうございます。
オートPPと違って完璧に否定されたものではないんですね。
AIもらいはしましたが、まだ使っていいものかわからないので、しばらく控えておきます。

946(○口○*)さん :07/02/20 17:17
APPだって黒ってわけじゃないじゃん。
妬みから文句いうやつがいるから使わないが吉だけど。

947(○口○*)さん :07/02/20 17:44
>>199もそろそろテンプレ入りでいいんじゃないか

948(○口○*)さん :07/02/20 17:54
まぁ何でもタブー視して控えるのはこのスレの悪いところでもある

949(○口○*)さん :07/02/20 18:01
>>948
お前は>>199の意味を理解してるのか?

950(○口○*)さん :07/02/20 18:12
APPの話ははだめでもAIによるクライアントの自動終了の話はよかったり
同じ灰色なのにスレの扱い方が半端なんだよ

951(○口○*)さん :07/02/20 18:15
プレイヤーの(判断を要する)操作を代行するかどうかってことが基盤にあるから、半端でもなんでもないぞと。

952(○口○*)さん :07/02/20 18:16
結局は

鬼の首を取ったように叩きに来る人のせいで話ができません
悪いのは私たちではなくてそういう人です

ってことだろ
自己責任が聞いて呆れる

953(○口○*)さん :07/02/20 18:17
>950
本スレとまちがえてないか?

954(○口○*)さん :07/02/20 18:19
まぁ人それぞれ思うところあるだろうがな。

「ケミのスキルを使わせない」というボーダーラインなら別にクライアント終了を行わせることは引っかからない。
「ホムとして不自然な行為」というラインなら引っかかるかもしれんがこのスレ的には前者ってことだろ?
線の引き方云々で語るならそういうことだ。


そういや>>950みたいなことをわざわざAI作者に抗議しにいったアホが居たがまさかお前か?


>>952
お前は何を言っているんだ

955(○口○*)さん :07/02/20 18:21
>954
そっくりそのまま返すぜ

956(○口○*)さん :07/02/20 18:23
>>955
いやいや。

957(○口○*)さん :07/02/20 18:24
ID:0qbnpXGN0ってw

958(○口○*)さん :07/02/20 18:25
ジオの射程外撃ちについてスレで同意求められても勝手にしろとしか言えないのと同じ。

個人的意見を言わせてもらえば、自動PPも遠距離MLも寝落ち対策も
いい意味でも悪い意味でも放置狩りと同じにしか見えない。
つまりやりたきゃやれ、嫌悪されても知らん、自分はやらん、
めんどくさいからAIスレでは黙れ。

959(○口○*)さん :07/02/20 18:31
放置狩りでもしなければどっちも使わない機能だしな

960(○口○*)さん :07/02/20 18:41
ジオってわざわざ射程内で撃たないといけないのかw

961(○口○*)さん :07/02/20 19:13
>>943
エピソードの内容と大して変わってないけど一応、ホムの項目は別に用意されてる

プレイガイド/楽しみ方/ホムンクルス
http://www.ragnarokonline.jp/playguide/enjoyable/homunculus.html

962(○口○*)さん :07/02/20 19:18
まー、使うのは自己責任。薦めもしないし止めもしない。
ただし、このスレや本スレではそういったグレーの話題は>>199の言うようなことになるんで他所でやってくれと思う。
放置スレはグレーは許容する方向だからそっちで聞くといんじゃない。
もしくはものすごい勢いで質問するスレで簡単に聞くとか。

963(○口○*)さん :07/02/20 19:26
ここはAIについての話題であって、使い方の正否を決めるとこじゃない。
白か黒かなんてそもそも単なるプレイヤーが決められる問題ではないからね。
それを決めようとすると主観の相違で必ず意見が食い違って荒れる。
だから自分で決めたほうがいい。

964(○口○*)さん :07/02/20 19:39
ところで流れをぶった切って質問なんだが
俺も重い重いといわれている工体AIを使ってるんだ
カスタマイズとかが便利で手放せないのだけれど
工体AIが重い理由ってなんだろう?

・単純に容量が多い
  ところどころ削れば軽くなるか?
・mobdata.luaからMob情報を取得
・マップファイル読み込み
  取得しないようにすれば軽くなるか?
・大量にTraceAIの記述がある
  全部削れば軽くなるか?

何か思い当たる節がある方が居たら意見をお願いしたく候

965Glenelgの人。 :07/02/20 19:56
「起動が重い」件については、RO上に(AIソースを含めた)あらゆるデータを取り込む部分が負荷になっていそう。
だから、プログラム自体を削ったり、各種データも必要分だけ取り込むような形にして、一度に読み込む量を加減すれば多少は速くなる。

TraceAI()の削除もそれなりに有効なはず。実際に使っていなくても読み込み負荷になるはず。

966(○口○*)さん :07/02/20 21:47
サンクス
mobdataとMapFileを読み込まないようにしたら多少軽量化
TraceAIと記述の軽量化はやりすぎてエラー吐いた

工体を使ってるのは
・敵の優先度の指定が細かい
・強敵にバースト設定
・詠唱妨害
この辺が気に入ってるからですね

967(○口○*)さん :07/02/20 23:41
>>966
使っているのが工体AI私的修正版なら、同梱のコンパイルを通すことでTraceAIは消せる。
linkとcompileのどっちを使うかはconfigをいじるかいじらないかで決めていいと思うが、
うちの環境だとcompileの方がリロード時のラグが軽くなった。

968(○口○*)さん :07/02/21 00:55
TraceAIだけで良いなら「--TraceAI」に置換してコメントアウトすれば必要な時に戻せてオススメ

969(○口○*)さん :07/02/21 01:03
コメントアウトしても負荷になってる可能性はある。
AI.luaの中身をことごとくコメントアウトしてAI関数内を空にしてもわりと重いし。

970(○口○*)さん :07/02/21 01:05
何を言ってるんだw

971(○口○*)さん :07/02/21 01:12
ファイルの容量が問題になってるんじゃないの?

コメントアウトは影響しなさそうだけど

972(○口○*)さん :07/02/21 01:49
>>969
コメントつけまくっても負荷変わらないよっていう実験結果もある。
そこらへんの証言の違いから、「PCや環境によっても差があるのでは」という説があるんだと思う。

973(○口○*)さん :07/02/21 01:56
そういう意味で同一環境での読み込み実験ってのはあまりなかったから
AI作者界隈でも話題になってる様子

夢幻闘舞積むとAIによっては結構重くなるね
ASPD早く元に戻らんかな

974(○口○*)さん :07/02/22 18:19
こっこbbsの入り口がわかりにくくされてたwww
エロサイトかよwwww

975(○口○*)さん :07/02/22 18:35
説明と空気の読めないミジンコが多いからだろ・・・

976& ◆6fpMAEwlHE :07/02/22 19:12
こっこAIは./AI/USER_AI/ じゃなくて ./AI/ で動く事を想定してるのが悪く働いている気がする。

977(○口○*)さん :07/02/22 19:34
まあたしかにそれには同意
AIフォルダに入れてるとうっかりウルドのアップデートすると上書きされたり

978(○口○*)さん :07/02/22 19:37
USER_AIに入れても、/Mob.lua読みに行くのでなにかと思ったぜ。書き換えるのめんどうなんでそのまま使ってるが。

979(○口○*)さん :07/02/22 19:47
AIがどっちのを使っているか自分で自分のパスがわからないからややこしいな。
それさえわかれば自動的にどっちか判別させられるんだけど。


他のAIが殆どUSER_AI前提だったりするんでそれらと切り替えたりしたい場合はAIに対応してるといいとかなんとか。

980(○口○*)さん :07/02/22 20:28
ROAIplusでいいんとちゃう?

981(○口○*)さん :07/02/22 20:52
自作の固有ファイル作って、それの存在みて読む方向買えるとか。

982(○口○*)さん :07/02/22 21:03
家ではAI.luaの1行目にヘッダを書いておいてAI.lua自体を読んでチェックしてた。
ただこの手のチェックは同じAIを両方に入れて切り替えるのには使えないんだよな。

983(○口○*)さん :07/02/22 22:05
こっこはBBSで煽りを楽しんでる屑だろ

984(○口○*)さん :07/02/22 22:22
サービス業じゃないんだからあんだけアホが湧けば煽りたくもなるなと思う。

985(○口○*)さん :07/02/22 22:24
で、ゼロ移動キャンセルってどーよ?

986(○口○*)さん :07/02/22 22:25
kwsk

987(○口○*)さん :07/02/22 22:29
95 名前:Glenelgの人。:sage 投稿日:07/02/22 21:13 ID:0p7MV/pB0
IDちがいますが。
>>87
コードは、既存の移動キャンセルとほぼ同じ。
移動キャンセルは大体どれも
Move( MyID , DestX + a , DestY + b)
みたいな記載があるはず;ここを単に
Move( MyID , DestX , DestY )
にするだけ。

で、その効果はホム種類やホムのASPD依存あたりに依存する様子。はっきりしたことはまだ不明。
ただ明らかな情報として以下のものは確かです。
・私の99Lv進化原種バニルでは、多少の効果アリ、移動キャンセルよりは遅い。
・私の33Lv未進化原種リーフでも、多少の効果あり。移動キャンセルより速い。
・初回限定の人の原種アミストルでは、効果が見られない様子。
・(詳細は不明ですが)可能な限りAIの人も「効果があったから」実装している。


----
だそうです

ちなみに普通の移動キャンセルは>>811

988(○口○*)さん :07/02/22 22:40
零移動モーションキャンセルはホムの種類や原種/亜種/進化/未進化で効果変わるそうですが
具体的にホム4種の原種/亜種、進化/未進化の16パターンでどの程度の効果が出るのかと
Agi値による影響度を教えてください。

989(○口○*)さん :07/02/22 22:42
>>988
残念だけど教えてくださいと言われて教えられるほど今はまだデータが無い。
ろくに集計も出来てないんで、この際だからひとつ興味を持った人は各自やってみて結果を報告する形でどうだろう。

990Glenelgの人。 :07/02/22 22:50
現状はまだ、なぜそうなるのかの論理的な裏づけは取れていません。
また、しょせんは常設1体しかホムを持っていない当方では、そんなあらゆるパターンの検証が
できているわけでもありません。
しかし、確実に「何もしないよりも速くなるケースはある」と断言できます。

少なくとも、私の使っている
「Lv99, Aspd表示174 進化済み原種バニル」では、何もしないよりは確実に速いです。

991(○口○*)さん :07/02/22 22:56
local zx, zy = GetV( V_POSITION, MyEnemy )
if (MyState == ATTACK_ST) then
OnATTACK_ST ()
Move(MyID,zx,zy)
end

とりあえずこンな感じのをはさんでおけばおk?

992Glenelgの人。 :07/02/22 23:09
こちらで実施しているのは、ATTACK_ST()内のまさにAttack()を呼んだ直後に Move() です。
HP/SPの状況で通常の移動キャンセルとゼロ移動を切り替えられるようにしているので、
極端に書くと

 Attack(普通の敵指定)
 if(HP/SP状況が十分) then
  Move( 1セル移動 )
 else
  Move(ゼロ移動)
 end

って感じ。
(こちらの実装では上記if節を別関数にしてしまっていますが・・・)

993(○口○*)さん :07/02/22 23:46
ところで新スレ立てていいかな。立てるよ?

994(○口○*)さん :07/02/22 23:49
スレ立て規制かかってた/(^o^)\

誰かお願い

995(○口○*)さん :07/02/22 23:53
こっこの作者ってずいぶん人間ができてるよなって思うけど?
あんなバカばっかにいちいち返事書いてマメだよねぇ。
俺ならシカトだね。

996(○口○*)さん :07/02/23 00:06
数かぞえてもわかりにくいんでスタラク倒すまでの秒数計ってきた。
ASPD174の進化原種鳥。自動スキルあり。

キャンセルなし:77秒
斜め移動:46秒
現在地移動:66秒

997(○口○*)さん :07/02/23 00:09
立ててみる。テンプレは前スレ変えるだけでええよね。

998(○口○*)さん :07/02/23 00:16
立ててきた
http://enif.mmobbs.com/test/read.cgi/livero/1172157017/l50

999(○口○*)さん :07/02/23 00:19
>>998 乙梅

>>996
最初にでた斜め移動だと狭いとこや壁際で移動キャンセル無効になることがあるから
>>787>>811の形にしたのだけど、ちょっとMoveが多いのは我ながら気になっているところ…

1000(○口○*)さん :07/02/23 00:23
1000なら今月中にASPD直る

10011001 :Over 1000 Thre
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。