1 :(○口○*)さん :05/07/01 04:42 ID:WyRSYZyQ
ここはアルケミストのホムンクルスAIについて語るスレです。

■現在アップされているソース
AI.lua
http://www5e.biglobe.ne.jp/~akemino/upload/mmobbs/files/1319.txt
Util.lua
http://www5e.biglobe.ne.jp/~akemino/upload/mmobbs/files/1320.txt
ケミスレ#45の745氏によるコメント付きAI.lua
http://www5e.biglobe.ne.jp/~akemino/upload/mmobbs/files/1349.txt

■参考サイト
アルケミスレテンプレサイト
http://cgi.f31.aaacafe.ne.jp/~alchemi/pukiwiki.php?
RO未実装システム情報スレWiki
http://rofuture.s86.xrea.com/
LUA日本語リファレンス
ttp://www.uri.sakura.ne.jp/~cosmic/yuno/lab/lua5_manual_ja.html
LUAの参考書のオンライン版(英語)
ttp://www.lua.org/pil/
偉い人が翻訳してくれたホムAIマニュアル
http://www5e.biglobe.ne.jp/~akemino/upload/mmobbs/files/1357.txt

2 :(○口○*)さん :05/07/01 04:48 ID:WyRSYZyQ
スレタイおもいっきり間違えたorz

・注意点
現行ソースには誤字が多いです。ご注意ください。
※AMISTR→AMSTR等

3 :(○口○*)さん :05/07/01 04:52 ID:tPvjW815
>>1
実装は遠いと思うが草葉の影から見守っているよ
スレタイは寧ろこのまま定着しそうなやかん

4 :(○口○*)さん :05/07/01 04:53 ID:LpppP2Pj
4様

ロボチガウロボチガウ

5 :(○口○*)さん :05/07/01 04:58 ID:WyRSYZyQ
現行スレ張り忘れ。
アルケミスト・クリエイター情報交換スレ46巻
http://gemma.mmobbs.com/test/read.cgi/ragnarok/1119353443/l50
未実装システム情報スレ 135
http://gemma.mmobbs.com/test/read.cgi/ragnarok/1119954165/l50

未実装スレのWikiとケミスレのWikiはどっちにコミットしていこうかな…

6 :(○口○*)さん :05/07/01 05:06 ID:WyRSYZyQ
ToDo
・未実装スレ131以降、及びケミスレ45以降にでてた情報のまとめ
・ホムAIマニュアルをもうちょっと意訳
・Util.luaの日本語コメント化
・luaの開発環境構築の手順/注意点リストアップ
 (gccでどうこうって話はどこかで出てた気も…)
・Const.luaの捜索
過不足あれば指摘お願いします。

7 :(○口○*)さん :05/07/01 05:31 ID:WyRSYZyQ
未実装スレ131ざっと見て気になったところ。
・最初に呼ばれる関数はAI.luaのfunction AI(myid)
 そこで振り分けしてそれぞれの処理を行っている。
・Cライブラリも読み込める。ので、roaddrと連携したりして
 外部から敵残HPなどの情報の取得もできそう。
 ただどこまでやってもいいものやら…
・FILIR、VANILMIRTHのパトロール処理はアクティブっぽい。
 横殴りとかちょっと心配。

8 :(○口○*)さん :05/07/01 06:07 ID:WyRSYZyQ
再び関連スレ。五月雨スマソ。
luaのFAQ
ttp://garage.sakura.ne.jp/yuno/html/lua5_faq_ja.html
luaユーザー会Wiki(英語)
ttp://lua-users.org/wiki/
lua日本語パッチ
ttp://www.water.sannet.ne.jp/sowwa/
2chプログラム技術板 プログラミング言語 Lua  その2
ttp://pc5.2ch.net/test/read.cgi/tech/1063711237/
LuaEclipse(英語)
ttp://www.ideais.com.br/luaeclipse/
wxLua(英語)
ttp://www.luascript.thersgb.net/
2chのLuaスレではeclipseよりこっちのほうがはやってるっぽい?

9 :(○口○*)さん :05/07/01 10:35 ID:SIQVdtyF
>>8
2chのスレは鯖移動で↓のアドレスに

プログラミング言語 Lua  その2
http://pc8.2ch.net/test/read.cgi/tech/1063711237/

10 :(○口○*)さん :05/07/01 11:35 ID:/Tg0x3i6
ソース見た限りじゃ他の言語からの移行は楽そうだし
本国の実際動いてるソースも欲しいとこだね。
ケミWikiにLuaセクション追加できんもんだろうか。

11 :(○口○*)さん :05/07/01 12:09 ID:ZAUREPs5
偉い人が翻訳してくれたホムAIマニュアルを HTML 化しました。
さらにこれらのファイルをうちのサイトにまとめて置きました。

・AI.lua(ケミスレ#45の745氏によるコメント付き)
・Util.lua

http://f58.aaa.livedoor.jp/~silic/
場所は、Script→ホムンクルス人工知能スクリプトマニュアルとなります。

みなさんのお役に立てば幸いです。

12 :(○口○*)さん :05/07/01 12:18 ID:3fuDz42/
スレタイにワラタ

13 :(○口○*)さん :05/07/01 13:10 ID:wO+RvI98
とりあえず来てくれないことにはどうにも・・・。
日本独自使用の可能性もなきにしろあらずだし・・・。

14 :(○口○*)さん :05/07/01 13:13 ID:KEQYpVPa
たしかにこのスレタイじゃあ、アルケミがAIで動いてるみたいだな

15 :(○口○*)さん :05/07/01 13:15 ID:/Tg0x3i6
>>11 お、すごいね。とても助かる。
ソース見つつこんな風に覚えつつまとめてたとこだけどそこで充分そうだ。
でもOnATTACT_OBJET_CMD と OnATTACT_OBJET_CMD_ST は
明らかにTとKの打ち間違いだよな。キー配置全然似てないけど。


AI(myid) -- ホムンクルスAIメイン処理
enemyid = GetMyEnemy(myid) -- ホムの敵を取得する
enemyid = GetMyEnemyA(myid) -- 敵取得タイプA(LIFかAMISTR)
enemyid = GetMyEnemyB(myid) -- 敵取得タイプB(FILIRかVANILMIRTH)
enemyid = GetOwnerEnemy(myid) -- ケミを攻撃している敵のうち、ホムから一番近い敵のキャラクターidを取得する
OnATTACK_AREA_CMD(x,y) -- 対象指定攻撃コマンドを受け付けた場合の処理
OnATTACK_AREA_CMD_ST() -- 範囲攻撃コマンド受付状態の処理
OnATTACK_ST() -- 攻撃状態の処理
OnATTACT_OBJET_CMD(id) -- 対象指定攻撃コマンドを受け付けた場合の処理
OnATTACT_OBJET_CMD_ST() -- 対象指定攻撃コマンド受付状態の処理
OnCHASE_ST() -- ターゲット追跡状態の処理
OnEAT_CMD() -- 餌コマンドを受け付けた場合の処理
OnEAT_CMD_ST() -- 餌コマンド受付状態の処理
OnFOLLOW_CMD() -- 追従コマンドを受け付けた場合の処理
OnFOLLOW_CMD_ST() -- 追従コマンド受付状態の処理
OnFOLLOW_ST() -- 追従状態の処理
OnHOLD_CMD() -- ホールドコマンドを受け付けた場合の処理
OnHOLD_CMD_ST() -- ホールドコマンド受付状態の処理。敵を順番に攻撃する
OnIDLE_ST() -- 待機状態の処理
OnMOVE_CMD(x,y) -- 移動コマンドを受け付けた場合の処理
OnMOVE_CMD_ST() -- 移動コマンド受付状態の処理
OnPATROL_CMD(x,y) -- パトロールコマンドを受け付けた場合の処理
OnPATROL_CMD_ST() -- パトロールコマンド受付状態の処理
OnSKILL_AREA_CMD(level,skill,x,y) -- 範囲スキルコマンドを受け付けた場合の処理
OnSKILL_AREA_CMD_ST() -- 範囲スキルコマンド受付状態の処理
OnSKILL_OBJECT_CMD_ST() -- 対象指定スキルコマンド受付状態の処理
OnSKILL_OBJET_CMD(level,skill,id) -- 対象指定スキルコマンドを受け付けた場合の処理
OnSTOP_CMD() -- 停止コマンドを受け付けた場合の処理
OnSTOP_CMD_ST() -- 停止コマンド受付状態の処理
ProcessCommand(msg) -- コマンド入力の振り分け処理

16 :(○口○*)さん :05/07/01 13:26 ID:0Yhinh+E
ホムンクルスのAIを語る〜じゃないのかYO
ロボアルケミBOTチガウBOTチガウ

17 :(○口○*)さん :05/07/01 13:33 ID:/Tg0x3i6
>>11
重箱ですまんが気になったので直してもらえるとありがたい。
3-3) Attack (id1,id2)
皮工格子 → たぶん被攻撃者
3-4) 4) GetV (V_,id) end
end は不要、頻出してる速成は属性か?
V_POSITION 仕事場合ってのはわからんが。
3-5) GetActors ()
エンピシは不明。
3-11) SkillGround (id,level,skill,x,y) end
end不要


メッセージ解釈するような部分があるから
草間大作少年みたいなこともできるのかな。

18 :(○口○*)さん :05/07/01 16:15 ID:hCcZEEbO
>>17
エンピシはNPC
Util.luaの定義によると
PC_TYPE = 0 → PC(プレイヤーキャラクター)
NPC_TYPE = 1 → NPC(ノンプレイヤーキャラクター)
ITEM_TYPE = 2 → アイテム
SKILL_TYPE = 3 → スキル
UNKNOWN_TYPE = 4 → 不明
NPC_MOB_TYPE = 5 → 敵NPC
NPC_EVT_TYPE = 6 → イベントNPC
NPC_PET_TYPE = 7 → ペット
だと思う。

19 :(○口○*)さん :05/07/01 17:28 ID:hCcZEEbO
>>7
横殴りについてだけど、ノーマナー対策案

■横殴り
「(ケミが攻撃していないmobで)
 もし他人がそのmobをタゲにしているか、
 対象mobのタゲがホムかケミではないが攻撃モーション中ならば攻撃しない」
※GetV (V_MOTION, id)の返り値に「攻撃を食らっているモーション」がない?

■トレイン
「もしホムが○体以上にタゲられていれば、そのmobから距離○以上離れるような
 移動は行わない」
「ホムと敵との距離が、他のPCとの距離より遠くなるような移動は行わない」

■射程外撃ち
 「対象mobがホムの攻撃射程内で、かつホムが対象mobの攻撃射程内ならば攻撃」

■崖撃ち
「対象mobに攻撃されてないなら反撃しない」
※現在の仕様では、ホムは段差や壁といった地形を認識できない

20 :(○口○*)さん :05/07/01 17:44 ID:KEQYpVPa
上2つはいいとして、した2つはどうなんかね。
特に射程外撃ちのほうは、そんな簡単なことじゃねーだろ、といいたい。
それだと非移動Mob相手にしたとき意味が無い。

21 :(○口○*)さん :05/07/01 18:15 ID:ZAUREPs5
>>17
以下を直しました。
皮工格子 → 被攻撃者
速成→属性
エンピシ→NPC

仕事場合は、V_POSITIONの説明とV_HPの説明を照らし合わせて以下の説明に直しました。

V_POSITION 仕事場合は x, y 座標 V_HPの場合は HP である。

V_POSITION の場合は現在の x, y 座標、 V_HP の場合は HP である。

22 :(○口○*)さん :05/07/01 18:36 ID:hCcZEEbO
>>20
「ホムかケミがタゲられていて、かつホムが敵の射程内にいる」
ではどうかな。これなら敵がこちらを攻撃できる状態にあるし。
ただ移動型のmobに対しても、敵の射程に入るまで待つことになるけど、
例えば桃木に攻撃されない位置から攻撃するなんてことはなくなると思う。

23 :(○口○*)さん :05/07/02 01:06 ID:Ie/lJCq7
>>17
メッセージって発言じゃなくて、
コマンドのことじゃないかな

ジャイアントロボよくしらんから見当違いなレスかもしれんけど

24 :(○口○*)さん :05/07/02 01:21 ID:Ie/lJCq7
>>19
マップコードがとれれば崖の認識も不可能じゃないと思う。
すごくめんどくさい上に処理がバカっぽいけど。

local x, y = GetV( V_POSITION, id )
で得られるxyってマップの南西端からの座標でいいんかな?

>>22
自分の射程まで敵に近づく

敵がホムの射程内にいる and ( ホムかケミが敵に攻撃されてる or 他のPCが敵を攻撃してない )
でどうか。
PCが攻撃しつづけてないとダメだけど。



PTメンバかどうか取得したいなぁ

25 :(○口○*)さん :05/07/02 02:28 ID:G0CMSF17
>>24
それだと
敵がホムの射程内にいる and 他のPCが敵を攻撃してない
の条件の時に、敵の射程外から攻撃してしまうことになってしまうかも。
この時敵の射程内に他のPCが入ってくると、敵がそのPCを攻撃し始めるのに
ホムは敵を攻撃し続けてしまう。
なのでホムかケミが敵に攻撃されているってのは常に条件に入れたほうがいいかな。

それと
・他のPCが敵を攻撃している
・敵が他のPCをタゲにしている
という判定は、他のPCがホムの視界外にいてIDが取得できない場合もあることに
注意しないといけないと思う。
例えば画面端にいる敵が、他のPCは見えないが何か攻撃動作をしていれば
画面外にいるPCと交戦中だと分かるので、GetV (V_MOTION, id)でモーションを
取得してやる必要があるね。

ただ「横殴りはしない」ということと、「敵の射程外からは攻撃しない」ということは
分けて考えて、最終的にそれを組み合わせたほうが分かりやすいと思う。
「敵の射程外からは攻撃しない」ということだけならば、他PCは関与しないしね。

また、「敵を攻撃するか」と「敵をタゲにするか」も分けて考えるべき。
「敵を攻撃するか」どうかは、サンプルコードにあるように単純にホムの攻撃範囲
に敵が入っていれば攻撃、入っていないなら敵に近づくってだけなので、
「敵をタゲにするか」ということだけで考えればいいと思う。

26 :(○口○*)さん :05/07/02 05:26 ID:Uq0YVcG6
今のところ遠距離攻撃はないみたいだから、
敵へ移動
・敵が主人か自分へ攻撃
・敵が罠や凍結といった状態変化を受けていない
・敵が他人と戦闘中ではない
・半画面以内(id取得と弓使いへの警戒)
罠とかは判断難しいから任意でコマンド送って攻撃とかならいいのかな

27 :(○口○*)さん :05/07/02 07:46 ID:Uq0YVcG6
特に命じない限りは敵へ移動するようにしとけば
トレインだかでタゲ外れて他PCにいくってこともないんじゃなかろうか。
しかしこれだとほとんどmobと同じような動きだな

(A)
 ↓
mobからホムか主人が被弾→[YES]→(B)
 ↓[NO]
mobが他PCと戦闘中→[YES]→除外
 ↓[NO]
mobが他PCを標的にしている→[YES]→除外
 ↓[NO]
他PCがmobを標的にしている→[YES]→除外
 ↓[NO]
mobの場所へ移動できない(崖)→[YES]→除外?
 ↓[NO]
mobとの距離(半画面程度?)が離れ過ぎている→[YES]→除外?
 ↓[NO]
mobが罠・氷化・石化などにかかっている→[YES]→除外?
 ↓[NO]
(B)
 ↓
mobへ攻撃可能→[YES]→mobへ攻撃→(B)
 ↓[NO]
mobへ移動
 ↓
(A)

28 :(○口○*)さん :05/07/02 11:24 ID:7sgEytFw
>>3,4,12,14,16
orzすみません

>>23
ノビ裂波動の件もあるし、システム上は
発言をトリガーにするのも可能だと思います。
ホムでできるかどうかはまだわかんないですが。

ところでどなたかUtil.luaにコメント付けの作業してる方いらっしゃいます?

29 :(○口○*)さん :05/07/03 03:15 ID:aB3IaLvV
>>28
Util.luaって2点間の距離を求めたりといった便利な関数があるだけで、
特に理解する必要もないだろうしコメントも要らないかなって思ったんですが、
やっぱ欲しいですかねえ?
マニュアル見て関数の概要さえ分かればいいかなと思い、手をつけてないです。
各関数の頭に概要を添えるだけで十分かな?

一緒に入ってた定数定義の部分はConst.luaとして分離されそうですね。

30 :28 :05/07/03 18:20 ID:qT524dtT
>各関数の頭に概要を添えるだけで十分かな?
自分もそのくらいのつもりでした。
なんとなくあったほうがいいかなー、くらいだったので
需要がなさそうならとりあえず置いときます。

31 :(○口○*)さん :05/07/03 19:59 ID:oaZwIty9
リファレンスとして関数ごとの一覧と概要や
贅沢言うと意味からの逆引きとかあると嬉しいかな。
自分でやろうとは思ってるけどいつになるかわからん。

32 :11 :05/07/04 15:53 ID:gCtkWNNJ
>>28,29

うちのところにある Util.lua にコメント付けました。

33 :(○口○*)さん :05/07/04 16:41 ID:0QbUVRdV
ん〜、正直プログラミングはさっぱりだけど、見てるとかなり面白そう。
実装が待ち遠しいね。

34 :(○口○*)さん :05/07/04 18:21 ID:XBUthkka
せめて敵判定の GetMyEnemyA はホムの反撃オンリーだから主人をタゲるのも敵と認識、
横殴り全開の GetMyEnemyB は他人をタゲにしてれば排除って修正はいると思ってちょっといじった。
http://www5e.biglobe.ne.jp/~akemino/upload/mmobbs/files/1448.txt

35 :(○口○*)さん :05/07/04 19:25 ID:QqAhd2ZC
2005-07-04AI

http://www5e.biglobe.ne.jp/~akemino/upload/mmobbs/files/1449.lzh

36 :(○口○*)さん :05/07/04 21:48 ID:6UI88DRr
>>35
比べてみたよ。

【変更箇所】

定数名が変更。ATTACT_OBJET_CMD_ST → ATTACK_OBJECT_CMD_ST
関数名が変更。OnATTACT_OBJET_CMD → OnATTACK_OBJECT_CMD
関数名が変更。OnATTACT_OBJET_CMD_ST → OnATTACK_OBJECT_CMD_ST
関数名が変更。OnSKILL_OBJET_CMD → OnSKILL_OBJECT_CMD

定数定義 EAT_CMD_ST = 12 が削除された。
関数 OnEAT_CMD が削除された。
関数 OnEAT_CMD_ST が削除された。

定数定義が変更になった。 FOLLOW_CMD_ST = 13 → 12

変数 MyLastAttackTime = 0 が削除された。
関数 IsRechargeTime が削除された。(クライアント内部で処理するように変更か)

関数 OnATTACK_ST で、スキル使用時に変数 MySkill = 0 を追加。
関数 OnFOLLOW_CMD_ST で、追従しない条件を d <= 5 → 3 に変更。
関数 GetOwnerEnemy で、関数の使い方誤りを修正。IsMonster(i)→IsMonster(v)

定数名誤りの修正。MyState = IDLE → IDLE_ST
定数名誤りの修正。AMSTR → AMISTR / AMSTR_H → AMISTR_H

デバッグ出力 Trace文、TraceAI文がいくつか追加された。

37 :(○口○*)さん :05/07/04 22:02 ID:6UI88DRr
>>34
>-- タゲがホム自身か主人ならば※
>-- (攻撃開始条件を主人も含める)※
>if (target == myid or target == owner) then
GetMyEnemy関数は、その名の通り「MyEnemy」=「ホムの敵」を取得する関数として
使われているようです。
主人をタゲる敵はGetOwnerEnemy関数が別に用意されており、実際にホムが攻撃
する敵を選ぶときは、GetOwnerEnemy関数とGetMyEnemy関数の両方を使っています。
なので、「主人がタゲかどうか」は条件に加える必要はないと思いますよ。

>--タゲがフリーかホム自身か主人ならば※
>-- (横殴り全開なので他人がタゲなら除外)※
>if (target == myid or target == owner or target == 0) then
これについてはなるほどと思いました。
「横殴り=他のPCが攻撃している敵」と思い込んでしまっていました。
確かにそのmobがホムかケミ以外に誰かをタゲっているかどうかを見ればいいですね。
それに他のPCがそのmobをタゲにしているかどうかということは、そのPCのクライアントに
しか分からないような気がしますし。

38 :(○口○*)さん :05/07/04 22:04 ID:/03Jp0ue
あら…餌を与えた時をトリガーにする動作が削除ですか。
使い道が無いとの判断でしょうけれど、
拡張のために残しておいても良かった様な気もしますね…。

細かなスペルミスがあらかた治ってるのは、一安心。

MyLastAttackTimeも用途が無いから…として、
IsRechargeTimeは…攻撃ディレイが終了したかどうかの判定でしたっけ?
クライアント側でディレイの処理を行ってはいないでしょうし、
これも用途が少ないため削除でしょうか。

39 :(○口○*)さん :05/07/04 22:32 ID:7jDacj7Z
IsRechargeTimeあたりは、トラブルの元になりそうなのはクライアント埋め込みか
サーバ処理というようにしたんじゃないかねー。ユーザが簡単にいじれるLuaコード
でやらすと、スキル連発とか出来るし。

40 :(○口○*)さん :05/07/05 10:32 ID:V4NShb/k
GetV関数で取得できる種類に、V_HP、V_SPに続いてさらに
V_MAXHP、V_MAXSPが追加されたね。
なんかホムとケミのHP・SPしか取得できなさそうだけど、
PTメンバーのHP・SPも取得できるといいね。
そうなるとPTメンバかどうかの情報(もしくはPTメンバの配列)も
欲しいけれど。
今後も拡張されるといいなあ。

41 :(○口○*)さん :05/07/05 10:32 ID:V4NShb/k
GetV関数で取得できる種類に、V_HP、V_SPに続いてさらに
V_MAXHP、V_MAXSPが追加されたね。
なんかホムとケミのHP・SPしか取得できなさそうだけど、
PTメンバーのHP・SPも取得できるといいね。
そうなるとPTメンバかどうかの情報(もしくはPTメンバの配列)も
欲しいけれど。
今後も拡張されるといいなあ。

42 :(○口○*)さん :05/07/05 17:23 ID:ReLqIhkR
<<40
あ、MAX〜は無いと単調過ぎるなーと思ってたところだ。
LIFヒールやキャスリングあたりはレッドゲージ(25%以下)とかわからないとやり辛い。
PTやモンスのも取れると攻撃の幅が広がるな。

43 :(○口○*)さん :05/07/05 20:49 ID:LhwsZmDf
GetV(V_HP,id)
の使用例ってありますか?
(AI・Util・Const、いずれに検索掛けても発見出来ませんでした)

もし使用例が無い場合。
ホムと主人のHPを返すとなって居ますが、これは

[ "ホムのHP" , "主人のHP" ] == GetV(V_HP,"ホムのID")

でテーブルが返ってくるのか、それとも

"ホムのHP" == GetV(V_HP,"ホムのID")
"主人のHP" == GetV(V_HP,"主人のID")

でしょうか?

また、もし後者ならば
GetV(V_HP,"敵のID")
とした場合、どの様な動作が予想されると思いますか?

44 :(○口○*)さん :05/07/05 21:40 ID:BrOg9zsP
>>43
実装者が重力ってのを忘れて、ごく一般的な考え方だと
"ホムのHP" == GetV(V_HP,"ホムのID")
"主人のHP" == GetV(V_HP,"主人のID")
じゃない?

なので、
GetV(V_HP,"敵のID")
だと敵のHPがとれると思うけど、
GetV(V_HP,"敵のID") 自体が不可という可能性も

GetV(V_HOMUNTYPE,"主人のID")とかもダメだろうし

45 :(○口○*)さん :05/07/05 22:56 ID:97tgu9Wb
なんだかホムンクルスってBOTみたいだね

46 :(○口○*)さん :05/07/06 11:46 ID:JkZsCAt3
>>43
俺もGetV(V_HP,"敵のID")で敵のHPはとれないと思う。
同様に他のPCのHP・SPも取得できないと思う。
(将来的にPTメンバー限定で取得できるよう拡張されるかもだけど)
マニュアルにも、「ホムやその主人のHP・SP」とあるし、
通常のPCが分かりえないことはホムも分からないんじゃないかな。

PTメンバーじゃない他PCや敵のHP・SPの情報は、たしか今
送られてきていないし、もし取得できてしまったらホムが
「通常では取得できない情報を知るためのツール」になってしまう。

47 :(○口○*)さん :05/07/06 14:20 ID:Q1u4BPW3
>>45
ベースがBOTだからな

48 :(○口○*)さん :05/07/06 20:26 ID:qgdH6tvr
>>43
その辺りの事を推察するには、
サーバー内のデータ管理構造や
パケットを受け取る関数のコード、
更にはパケットのデータ構造等も考えた方が良いんじゃないか?

例えば、例になってる
GetV( V_HP , id )
をクライアントに通すと、サーバーに対して
Array[ Object_id , Get_HP , id ]
というテーブル構造のパケットを送ると仮定する。

( Object_idはパケットを受け取るオブジェクトと仮定、この場合はホムのID。
 Get_HPは#define定義されてる定数値と仮定。
 実際には、送ったPCのIPやら何やらも入るのかも知れないが
 可読性重視で今回は割愛する)

対するサーバー側の応答が、
if( Array[1] == Get_HP )
{
  LONG       Result_Data;
  PACKET       Result_Packet;

  Result_Data   = Return_HP( Array[2] );
  Set_Packet    ( Result_Packet , Array[1] , Array[2] , Result_Data );

  Return_Packet  ( Result_Packet , Array[0] );
}
こんな所かな?
( PACKETはパケット型の構造体、
 Return_HPはDBにアクセスしてHPを返す関数、
 Set_Packetはパケット型構造体へ要素を入力するための関数、
 Return_Packetは指定したキャラへログインしているクライアントに、パケットを送る関数とそれぞれ仮定)

ここでもし、Return_HPかその前辺りで
"Array[2]がArray[0]と等しいか、或いはArray[0]のOwnerと等しい場合のみ"
とでも入っていればホムと主人以外のHPは取ってこれない。
逆に言えば、その処理が入っていなければ取ってこれる(と思う)

49 :(○口○*)さん :05/07/06 20:29 ID:qgdH6tvr
と…念のため言っておくと、
私はスタンドアロンで完結するプログラムしか組んだ事無いんで
突っ込み所満載かも知れません。

言われる前に謝っておきます。見苦しいコードで済みません。

50 :(○口○*)さん :05/07/07 12:59 ID:Zk+A+gN4
わかんねーけど、PTメンバーじゃない他PCのHP・SPが取得できるようになると
ホムじゃなくてもパケ送れば取得可能ってことで、いろいろやばい気が。
PvGvで相手のHPまで見えるツール作られるのは勘弁…
現状でも分かり得るPTメンバーのHP・SPの取得までにしてほしいな。

51 :(○口○*)さん :05/07/07 13:15 ID:Zk+A+gN4
いくつか疑問。

@取得したIDを覚えておけば、ハイドやクローキングしてもV_POSITIONで
 位置が分かってしまうのか?(視界外だと-1が返ってくるようだが…)
AIDの仕様。IDのつけられ方で対象の種類を特定できてしまわないのか?
 スキルのオブジェクトIDなのか敵のIDなのかはV_TYPE使わないと判別不能?
B被ダメ状態だと、V_MOTIONで何が返ってくるのか?(定義にない)
CV_ATTACKRANGE、V_SKILLATTACKRANGEは他PCにも有効か?
 武器や使用スキルを変えれば動的に変化するのか?
DV_TARGETは他PCにも有効か?(他PCがどの敵をロック(白い三角)しているか
 なんて鯖側に送られていないだろうし、取得不能な予感)
EV_OWNERで、他人のホムの主人も分かるのか?ペットの主人も分かるのか?

52 :(○口○*)さん :05/07/07 21:33 ID:+DlnSoBb
推測だけど。

1
確実に判るだろうね。
…あまりこう云う話はしたくないけれど、
現時点でもハイド・クローク見破りツールが存在しているので
隠れても位置情報は取得出来るはず。
…まあ、「ホムは実は虫か悪魔なんです」とでも思っておくしか。

2
IDでは特定出来ないと思う。
GetActors()
で視界内の全オブジェクトのIDを「同一テーブルに」貰って来る仕様を考えると、
種類を問わず、全オブジェクトのレコードを一纏めにしたテーブルが存在しているはず。
(※前者のテーブルはLuaの機能としてのテーブルの事で、
  後者のテーブルはSQL等のDB管理で用いるテーブルの事ね。ああややこしい…)

そうなったら、IDはあくまでレコード検索のためのキー。
オブジェクトの種類は、IDより1つか2つくらい右のデータに入ってるだろうね。
だから、オブジェクトの種類を取得しようと思ったら

Search_ID = Array[2];      //前例に倣って、Array[2]には検索対象のIDが格納されている物とする
SQL
  SELECT TYPE        //TYPE列にはオブジェクトの種類情報が格納されている物とする
  FROM   OBJECT_TABLE //OBJECT_TABLEに、全オブジェクトの共通情報が格納されている物とする
  WHERE  ID = Search_ID;  //送られて来たIDと、テーブル内のIDを照合。一致する行からTYPE列の内容を返す

こんな感じ。

53 :(○口○*)さん :05/07/07 21:50 ID:+DlnSoBb
3
他プレイヤーの被DAMモーションは通常プレイ時に見える。
(=「被DAM状態」を示すデータが送られてきている)
つまり、クライアントのLuaファイルに記載されていないだけで
サーバー側のDB内には「被DAM状態」を示す定数値は存在するはず。

だから、GetV( V_MOTION , id )を被DAM状態の相手に使用すれば
何らかの数値は返ってくると思う。(仮にV_DAMAGEとでもしておこうか)

…重力社が気付いて、V_DAMAGE相当の定数をConst.luaに追加してくれれば良いんだけどね。

4
Const.lua内の説明には、その両方に「美句県」とある。
美句県 → 未具現 → 未実装
って事じゃないかな。

だから、現時点ではどちらも「必ず1が返ってくる」と思う。
正式実装時の動作は、重力社次第。

(正式実装された時の動作も、勿論予測は付くけれど
 今それを予測しても意味が薄いと思う)

54 :(○口○*)さん :05/07/07 22:06 ID:+DlnSoBb
5
「他PCがどの敵をロックしているか」は判らないだろうけれど、
(プレイヤーの移動目標地点やターゲッティングは、クライアント内でのみ処理されていると思う)
「他PCが現在攻撃中の相手」の情報は確実にサーバー側にある。

予測としては、
「他PCが攻撃(及び詠唱)中にのみターゲットのIDが、それ以外の時はnil値が返ってくる」

GetV( V_HP , id )と同じで、サーバー側の処理関数次第だけれど。

6
これもGetV( V_HP , id )と同じく、
「情報取得の対象となるIDとパケット送信者のIDが一致していれば」
という条件判定式さえ入っていなければ
例え他人の物でも取得出来ると思う。
重力社のプログラム次第。

55 :(○口○*)さん :05/07/07 22:09 ID:+DlnSoBb
ついでに質問。

>>48の時にも思ったけれど、
私の書くコードや文章、読み難かったりしませんか?

このスレ内だけでも、コーディング規約を定めておいた方が良いのかなと思ったり。

56 :(○口○*)さん :05/07/07 22:36 ID:+DlnSoBb
>>54に追記。

5番の質問に対する回答だけれど、
もしかすると
「他PCが最後に攻撃した相手のIDが返ってくる」
可能性もある。

57 :(○口○*)さん :05/07/07 23:11 ID:2CtK9/Al
ragnagate.dreamwiz.com/zboard/zboard.php?id=merchant&page=8&divpage=19&ss=on&no=96094

ホムンクルスの先行/非先行を切り替える方法

58 :(○口○*)さん :05/07/09 02:18 ID:Y5F1cwZf
>>55
いや読みづらくはないですよ。特に規約決めなくても、その都度
読みやすいと思う書き方でいいんでは。

59 :(○口○*)さん :05/07/09 10:49 ID:wh5FnScR
>>53に修正。
V_DAMADE → MOTION_DAMAGE
で宜しく御願いします。何書いてんだ私は…。

どうでも良い事かも知れませんが、
仮に重力社がそれに相当する定数を追加してくれなかった場合
ユーザー側で数値を取得して定数を作る必要があると思いますので。

60 :(○口○*)さん :05/07/09 22:49 ID:fARXSu3c
ホムンクルスAIをユーザーに実装させるっていう試みは野心的で大歓迎なのだけど、
重力にほんとに実装できるの?

以下ぱっと思いついた問題点
1.無限ループでひたすら値を取得して、サーバーに負荷をかける嫌がらせ。
2.無限ループで他PCに粘着する嫌がらせ(横殴りとか)。
3.「横殴りやめてください」というと「バグですw」と返されるwwwww。
4.みんなが一斉にデバッグ作業すればサーバーに負荷がかかる。
5.Luaのライブラリのバグを利用して本来取得できない値を使用するプログラムが作れる。
6.工夫次第で現在禁止されているBOTやツールが作れる。
7.悪意あるAIの作成が規約で禁止されても、バグですとかデバッグ中ですとか言えば言い抜け可能。
そもそも悪意あるAIと普通のAIの線引きが難しい。

最低限、AIのファイルサイズの上限とかステップ事に100msくらいのウェイトをかけるとかはしないと、
実装されてもホムンクルス叩きが始まる予感・・・

というかこれほんとにネタじゃないの?

61 :(○口○*)さん :05/07/10 07:33 ID:5Y8qwOA3
> 最低限、AIのファイルサイズの上限とかステップ事に100msくらいのウェイトをかけるとかはしないと、

普通に制限掛かってますよ
バカ?

62 :(○口○*)さん :05/07/10 11:05 ID:1prkzqqg
やあ、今日はいい天気だなあ。

63 :(○口○*)さん :05/07/10 15:27 ID:94rF0jWQ
>>60
2、3、7とかのノーマナーに関する問題はどうするんだろうな。
ホムが何か問題起こしたらその都度ケミが謝れば、うざがられるだけで
ノーマナー措置対象にはならないだろうけどね。
謝らないで開き直って横殴りさせまくっていたら、普通にBANだろうな。

64 :(○口○*)さん :05/07/10 15:48 ID:5tJ0nSoo
>>63
その辺りは、現行でプレイヤーがやっているイクナイ行為の数々と同じじゃないのかね。
ホムの有る無しに関係無く、やる奴はやる。

…というか、それやる奴はホムなんて無くとも横殴りしてる気がする。

65 :(○口○*)さん :05/07/10 16:49 ID:pNrtA8SR
そうだねボビー

66 :(○口○*)さん :05/07/11 00:52 ID:wJ9v+0Nj
主人と別行動をとって大量にmob釣って帰ってくるホム。

67 :(○口○*)さん :05/07/11 01:39 ID:hrbH68pw
それに轢かれる主人

68 :(○口○*)さん :05/07/11 13:28 ID:AYyvjZml
NPCを攻撃するホム
ttp://ragnagate.dreamwiz.com/zboard/zboard.php?id=screen4&page=16&divpage=41&ss=on&no=209387

何か戦闘以外で、ホムに面白い行動をさせるとしたら、
どんなことができるかねえ。

69 :(○口○*)さん :05/07/11 14:44 ID:f5ikath7
劇とか?

70 :(○口○*)さん :05/07/11 16:09 ID:AYyvjZml
劇かあ。上に○マス、左に○マス移動…ってのは出来そうだけど、
発言が出来ないからなあ。

そういえばLuaのマニュアル見るといくつかCの標準ライブラリあるみたいだけど
どこまで提供されるのかね。
I/Oライブラリが使えるなら、設定を外部から読み込んで動的に動作を変えることも
できるだろうし、劇のような一連の動作を読み込ませたりなんてことも出来るよね。

71 :(○口○*)さん :05/07/11 16:50 ID:f5ikath7
発言できないんだっけか。
せめてエモだけでも使えれば面白そうなんだが。
動くだけでも踊り子さんとして使うとか・・・。

あとは露天の売り子さん・・・は、餌が問題か・・・。

72 :(○口○*)さん :05/07/11 19:02 ID:AYyvjZml
ペットがどういう条件で発言しているのかよく分からないけれど、
もし今後の拡張でホムが発言できるようになったらとしても
連続で発言されたらうざいだけなので、自由に発言はさせれない予感。
例えば初期ホムのRechargeTimeの仕様みたいに、前回の発言から
○秒以上経っていないと発言できないとか。
そうなると劇で使うといった事は厳しい気がする。

罠入りホムが突然に奇声を発してもイヤだし。

73 :(○口○*)さん :05/07/11 23:35 ID:upiFey5j
ケミスレより。NPCどころかPCを攻撃できるそうで。
117 :(^ー^*)ノ〜さん :05/07/10 18:14 ID:fQfqVmPz
>>72
遅レスだけど、AIをいじるとプレイヤーを攻撃できるみたい。
どうやらテロが頻発してるみたいで。
ttp://ragnagate.dreamwiz.com/zboard/zboard.php?id=screen4&page=17&divpage=41&ss=on&no=209352

これだと分かりにくいかなぁ・・・ピルリルが人を叩いてるんだけど。

74 :(○口○*)さん :05/07/11 23:59 ID:DMv6ojd6
それ修正されるみたいだけど

7月 12日定期点検内容とサーバー点検時間に対する案内です.
■ 点検時間
- 前サーバー : 7月 12日(火) 09:00 ~ 11:00

■ サクライサーバーパッチ内容
- ホムンクルルスにポーションピッチャーがたまに使わない現象が修正されます.

- ホムンクルルスの AIを変更して村等地でプレーヤーを攻撃することができた部分が修正されます.

- 特定ホムンクルルスの親密島が以上現象によって実際数値より高く表示された現象が修正されます.
(これによって [非常に親密]に表示された親密島が [普通]に落ちることができるから留意してください.)

未実装スレよりホムに関係のある部分を抜粋。

75 :(○口○*)さん :05/07/12 13:07 ID:ZCJhZi3/
NPCとかMPKって最初に制限しとくべき問だ・・・ああ重力だっけか。

76 :(○口○*)さん :05/07/12 16:36 ID:yS4/R2ab
うわあ、そういや確かに今までのコードって、攻撃可能地域かどうかの
判定はなかったねえ。PCへの攻撃コードはあったけどてっきりPvGv時
のみ有効だと思ってた。

まあデスペナ受けるマップでこれやられたら洒落にならんけど、可能性
という意味ではちょっといいなーと思った。

77 :(○口○*)さん :05/07/12 19:05 ID:5KjzbbyG
あえてホムでPKが出来る仕様にしておいて、
なおかつホムKが出来る仕様にしたらどうなるかね?

(想像中)…やめた方が無難だろうな。

78 :(○口○*)さん :05/07/12 20:00 ID:rq4LnH3M
HPKとHPKKか・・・
いいじゃん。

79 :(○口○*)さん :05/07/14 10:08 ID:sGNX9P9q
範囲魔法に巻き込まれて即死に一票・・・。

80 :(○口○*)さん :05/07/14 13:48 ID:WPszdGeb
バイオプラントもだがせめてPvGv以外ではShiftクリックで攻撃にしてほしいわ。
つかBPは色変えてでもくれないと出したとたんに殴られてしょんぼりする。
ペットが平気なのだから近い構造のホムも範囲魔法は平気だとは思ってるのだけどね。

81 :11 :05/07/15 16:28 ID:3wRyQMoV
>>35
2005-07-04AI の AI.lua, Const.lua にコメントつけました。

Util.lua, manual(HTML) も、上のコメント付けで分かった点を元に
変更してみました。

>>55

コーティング規約は Ruby のを参考に出来ませんか?
Lua のプログラムコードを見てると、コメントの「--」を
「#」に置き換えるとかなり Ruby に近く見えます。

http://www.rubyist.net/~matz/20041006.html#p02
http://shugo.net/ruby-codeconv/codeconv.html

82 :(○口○*)さん :05/07/18 10:40 ID:CcZxLhlp
ホムに一定の条件で発言させるようにしようよ。

おなかすいた、とか。
はらへった、とか。
もううごけない…、とか。

83 :(○口○*)さん :05/07/18 11:56 ID:7jobGBzz
ミンナ ハドラーサマ ヲ タノム

とか。

84 :(○口○*)さん :05/07/18 12:02 ID:HuhGkidx
こんごともよろしく

とか

85 :(○口○*)さん :05/07/18 12:06 ID:j80UeUBq
マスかきやめ!パンツあげ!

とか

86 :(○口○*)さん :05/07/18 19:12 ID:/rm1eLxx
わいはやる気ないから、つついても無駄やで。

とか

87 :(○口○*)さん :05/07/18 22:29 ID:g7NQHB9s
             _、_
がんばってます! ( ,_ノ` )

とか

88 :(○口○*)さん :05/07/19 00:53 ID:Qms8C2wH
>ミンナ ハドラーサマ ヲ タノム
初めてしゃべった言葉がそれかよぉ・・・!(つд`)

89 :(○口○*)さん :05/07/19 09:35 ID:mYo0t2rK
2005-07-19AI

http://www5e.biglobe.ne.jp/~akemino/upload/mmobbs/files/1561.lzh

90 :(○口○*)さん :05/07/19 19:39 ID:BoreyUje
-基本人工知能と使用者人工知能を選択できるようになります。
既存AIフォルダの下USER_AIフォルダが追加されて[ /ホム知能,/hoai ]命令コマンドを押す時ごとに
順にフォルダ経路が変わるようになります。使用者人工知能ファイルはUSER_AIフォルダに入れて下さい。
(使用者人工知能ファイルは基本人工知能ファイルのアップデートと関係なく維持されるようになります。)

-ホムンクルスの人工知能が少し修正されます。

(1)移動命令と攻撃を予約できます。
* ShiftキーとAltキーを押した状態で底にマウス右側クリックをすれば移動命令が予約されます。
* ShiftキーとAltキーを押した状態で攻撃対象にマウス右側クリックをすれば攻撃命令が予約されます。
(詳しい処理過程はAI/ホムンクルス人工知能スクリプト説明書.htmを参考にして下さい)

(2) Const.luaにあるNOME_CMD命令番号の誤字がNONE_CMDに修正されます。

(3)待機命令状態(FOLLOW_CMD_ST)でAlt+T (またはホムンクルスメニューウィンドウで待機)を押せば
休息状態(IDLE_ST)に切り替わるようにAI.luaのfunciton OnFOLLOW_CMDが修正されます。

91 :(○口○*)さん :05/07/19 19:46 ID:BoreyUje
GetResMsg()は、この移動と攻撃を予約できるって修正で、
予約した命令を取り出す関数なんだろうね。
でもかなり操作が煩雑になるし、使う人少なそうだなあ。

92 :(○口○*)さん :05/07/20 12:24 ID:14HPOjyX
落ちそうなのでいったんあげ

93 :(○口○*)さん :05/07/20 12:33 ID:/ZzsSZes
ご主人様!君に決めた!

とか

94 :(○口○*)さん :05/07/20 12:34 ID:GsYjZHd6
愛について語るスレじゃないのか

95 :11 :05/07/20 17:23 ID:IXecqbMz
>>89

ホムンクルス人工知能スクリプト説明書を7/19版に対応させておきました。

96 :(○口○*)さん :05/07/20 17:41 ID:deWHn4Pf
sedフィルタでも通すとよさげ
s/ラクナロク/ラグナロク/g
s/内臓/内蔵/g

97 :(○口○*)さん :05/07/20 19:10 ID:hOLHHZ7c
Gvでもホムが使えるみたいなので、Gv用のAIが需要が出そうだと思った。
「人ごみの中でも正確にタゲを殴れる」ということは、様々な局面において
有利じゃないかな。エンペアタッカーやヒットストップとして使える?

こうなってくると、相手PCの職業はせめて取得できるようにしてほしいね。
エンペはIsMonsterで判定できるのかな。でもBPやガーディアンと区別つくんかな。

98 :(○口○*)さん :05/07/21 16:35 ID:bTTEXWdf
今エンベアタックは処罰対象らしいからどう変わるか、かな。

99 :(○口○*)さん :05/07/21 16:44 ID:acCcxSl3
そりゃ今は処罰対象でも、重力の構想としてはホムもGv出れるように
したいんじゃないのかな。

1.ホムでエンペ割りのバグを修正
2.ホムがGvで使えなくなる

のどちらかだろうね。当面は2にして、修正したら1にするのがいいだろうけど。

100 :(○口○*)さん :05/07/26 12:12 ID:yt1H4gAq
そこは重力だからなぁ。
一度2をやったら、2で永久固定とかもありえるぞ?

101 :(○口○*)さん :05/07/26 15:17 ID:w91sRHUl
OWNに載ってる韓国告知より。

>-ホムンクルスがエンペリウムを攻撃する場合にエンペリウムが消えた現象を修正されます。

>-PK可能なマップでホムンクルスが攻撃可能になり、
>パーティーメンバー/ギルドメンバー/同盟ギルドは攻撃対象から除外されます。
>※PVPマップでは、パーティーだけ攻撃対象から除外されます。

このへん見ると、ホムもGvで使えるまま来そうだね。