perl2exe forRO vol.3

このエントリーをはてなブックマークに追加
ム板ってあんまり2ちゃん語見ないから
462とか464とか見てると変に感じる
なんか本日の17時現在で144時間BOT連続起動に成功しました(メンテナンス時間含む)。
OpenChat,PrivateChatのログを見ても(アイテムをとらないということ意外)
指摘は無かったし、相変わらず同じマップにいる。
キャラは剣士(クワガタからの被ダメージ1)
何時間指摘されないかを調べるため、アイテム拾いはしない設定にした。
サーバーはフェンリル
マップは通称クワガタ湖(プロンテラから←←↑)
主な改造としては
・gome系統の言葉に対して、謝罪の言葉を言う。(ごめん、ごめんなさい等10通りをランダムに)
・ヒールや援助魔法を掛けて貰ったのに対して、感謝の言葉を言い(ランダムに)Alt+3をだす。
・ターゲットに自分よりも近いキャラが居る場合には攻撃しない。
・ターゲットが魔法のターゲットになっているときは攻撃しない。
・簡単な会話に対応するため、人工無能マスオを改造して移植。
・attackAuto_teleport_idleをワープする変わりに
 適当な方向に直線移動する。
以上です。
もうすぐ課金でパケットの修正を行わないといけないけど
人工無能はともかくとして、他は簡単に改造できると思うので
参考までに。
>466
>・gome系統の言葉に対して、謝罪の言葉を言う。

画面内で無関係のプレイヤ同士の会話にも反応しちまねぇか?
「おまえじゃねぇよ」とか言われてそう。

>簡単な会話に対応するため、人工無能マスオを改造して移植。

これは面白そうだな。
うちのBotは完全歩行型で、あらかじめ座標とフィールド名を登録しておいたファイルを読み込んでやってます。
・敵がいない場合歩行してくれる。
・重量が50%以上になると蝶を使い、道具屋に設定したアイテムを売り、蝶を1つ買う。それ以外のアイテムはカプラに預ける。
・町から自動歩行してattackAuto_mapの所まで向かう。
>>466さんのと同じで横殴り関係はしないし、援護魔法かけてもらったらある程度の感覚を空けてお礼の返事をしてます。
これでずっと放置してましたが、Botと言われた事は一度もありません。
ただ座標登録がかなーり面倒なので、すぐに違うマップにBotを放つ事はできません。
将来的には、attackAuto_mapの数を増やして毎回町に帰るごとに違う狩り場に行くようにしたいです。

人口無能を組み込むとは面白そうですね。
相手の距離が近かったら応答するとかにすれば良いと思うけど、もっといい判定条件ないかな?
>>468
すごすぎる!!ほとんど人間じゃねーか。
うちのBOTは蝿飛びビュンビュンで晒されまくってまつ...
470ところで:02/11/05 01:43
ApezBot v2.0 jRO って行けてないんですか?
今使ってるjkoreで満足してるんですけど
どうなんだろうな? と思ってメンテで暇だから質問カキコ。

スレ違いスンマソン。
>>468
自分で歩いて狩場に行くなんてすごいッスね。
改造を途中でやめて、経験値と金稼ぎに走った初心者の自分が恥ずかしいです。

>ただ座標登録がかなーり面倒なので、すぐに違うマップにBotを放つ事はできません。
data.grfを初めの方で読みこんでいるようなので、
自分としては、jkore上でそれを読みこんで利用することはできないかなと思ってまつ。
といっても、漏れはdata.grfの展開の仕方さえ知らないんですが(つД`)

>相手の距離が近かったら応答するとかにすれば良いと思うけど、もっといい判定条件ないかな?
$monsters{$ai_attack_target{'ID'}}{'dmgTo'} - $monsters{$ai_attack_target{'ID'}}{'dmgFromYou'} > 0
になった瞬間に攻撃を中断して謝るとかはどうッスか?
>>468さん
 歩いて狩り場に行くようにしている人がすでに存在していたとは、、
私はまだ研究中の段階です。
>相手の距離が近かったら応答するとかにすれば良いと思うけど、もっといい判定条件ないかな?
ですが、発言判定は 相手との距離 && 相手の向き で判定しています。
 相手の距離については、正規クライエントで会話をする距離を観察した結果、
凡そ10との結果を得たので、distanceで10以内を真としています。
 向きについては、顔の向きが例えば 1(北西)で合った場合はその視界180°に
自分がいるかどうかを判定します。具体的には
(自分のy座標)>=(自分のx座標)+(相手のy座標)−(相手のx座標)
という具合です。他の向きでも式は微妙に異なりますが同じような判定をしています。
参考になるかわかりませんが、、、
ついでに直線に歩く行動ですが、、、、
これは現在の位置とランダムに出す方向から
直線の方程式を決定し、xを増加(減少)させるという方法をとっています。
(x=a, y=bのような縦、あるいは横移動の処理は微妙に異なります)
具体的には現在位置から次の移動位置をランダムに算出し
(x,yが共にちがうなら)現在位置(X1,Y1)と次の移動位置(X2,Y2)を通るような
Y=AX+Bの式を算出します。(これはマップが平面で表されているので有効です)
 A=(Y2−Y1)/(X2−X1)
 B=Y−AX
あとは数秒ごとに方程式からXを5(適当)増加させた時のYを算出し
それを移動地点と定めていくという極めて単純な方法を採用しています。
 なぜこんなことを書いたのかというと、現在これを応用した巡回(あるいは>>468さんのような
狩り場自動歩行機能)を搭載することを予定しているからです。
 方法としては、移動できた直線の方程式とxの変閾、yの変閾、そしてマップNoを記憶させれば
それが一つの移動可能な道としてBOTに学習させることが出来ます。
この情報を巡回可能な一つのルートにすれば、巡回は可能でした。
ただし、>>468さんがやったのとは異なるかもしれませんが、同様に手動で設定したもので
かなーり面倒くさいです。また、私は完全学習型のBOTにしたいので、
これは開発の最終段階ではありません。この方法なら、data.grfを展開しなくても
移動可能なルート情報をBOTを放っておくだけで自動学習してくれるはずなのですが
なにかよいアイデアは無いでしょうか?>>468さんの方法も知りたい、、、、、
教えてクンだ(*´д`*)ハズカシイヨー
>あとは数秒ごとに方程式からXを5(適当)増加させた時のYを算出し
Xの増加量は当然+−のどちらかを先に決定しておきます。
当然−のときもあります。
>>473
恥ずかしがる喪前に萌え(*´д`)
jkoreのhelpによると、
>move (x) (y)
>座標(x, y)に移動する - このコマンドはあまりに遠い座標を指定すると実行されない.
>移動できる距離は20 blocks, かつ障害物が無いこと。
とあるのですが、jkoreが直接障害物も認識する方法はあるのでしょうか?
それとも、途中に障害物があるのに動こうとした場合、ゲームサーバー側が動かしてくれない?
もしjkoreが自分で障害物(進入禁止領域)を認識できるなら、巡回プログラムにおおいに応用できるのですが・・・

そういえば、大学で迷路の道筋を解くプログラムを習ったことがあります。
その時はまじめに聞いてなかったのですが、今から調べてみますか。
0087、0088辺りを根気よく見ていくくらいしか無いような…。
>>473
ベクトル使わず一次関数で頑張って説明する藻前様に萌え(*´д`)
>>475さんと>>478さんに萌えられてしまったー(*´д`)
所詮、文系学生似非プログラマーです。
480476:02/11/05 23:05
グーグルで調べてみたら、右手探索法のような、
壁だらけの迷路用の探索ルーチンしか見つけられませんでした。
この方法でROのマップを歩いたら不自然に見えるかも。
でも、漏れのレベルでは、これより近い道を発見するプログラムは今のところ思いつきません(;´Д`)
ム板にはこういうのには詳しい人が多いのでしょうか・・・・
経路探索だとA*が有名。
でも、data.grfに入ってるマップデータには移動ポイントの情報が無いから、
それの情報は予めマップごとに自分で用意しておかないと駄目だな。
移動ポイントって大体端の方だし、
中央寄りに歩くとかでどうにかならないかな?
徐々に人戻りつつあるのかな

スキルがないのでアイディアだけ
BOT使ってるとマップが変わってることがあるけど
マップが変わったら(マップチェンジを検出したら)
すぐに周りにある移動ポイントを調べて
そこに移動させるようにすれば大丈夫だと思うのだがどうだろう
マップチェンジした直後ならまだ移動ポイントの近くにいるはずだから
これで元のマップに戻れるかと

ただ、マップチェンジ検出と
移動ポイントを調べるってのができるのかわからないけど
コンソールにメッセージ出るからできるのかな、
と素人目で考えてみました
>>483
漏れの手元のJKore.plにはそういうルーチン入ってるんだが…。
attackAuto_map設定してないと動かない上に、結構動作しないとき多いがな。
課金後はやらないでくれよ、マジで。
>>485
ハァ?
どーせデフォルトのkore使って連アタとか、大量に放流してるような
香具師はいなくなるだろ。
横殴りとかさえしなきゃBOTなんて無害なんだし、
ほっといてやれないのかと。

…漏れも放置スキル上げなきゃな∧||∧
http://www.dengekionline.com/news/200211/06/n20021106ragnarok.html

>問題となっているチートツールとBOTについても、
>技術的な詳細は明らかにできないものの、
>課金後のエピソード1.5では使用できないようにする措置をとっていると説明

おそらく今まで使ってたBOTは「そのままじゃ」使えなくなるだろうから
かなり昔の連アタBOTとか横殴りBOTを更新もせずに使ってるアホは減るだろうね
とてもうれしいことで
ピュアすぎ。
そんな癌の口先を信じれるのか?いや勿論できれば信じたい。
490デフォルトの名無しさん:02/11/07 14:09
だから癌をなめるなって
「BOTを使用できない措置」がPK導入とかだったらイイナ
>491
だから癌をなめるなって
だから癌をなめるなって
だから癌をなめるなって
だから癌をなめるなって

ところで、jkoreをphpに移植しました。
DBが使いやすいかなーと思ってわざわざ移植したのですが
今更になって激しく意味がなかったかと悩んでます。
なんか使い道あるかな?
ひさーしぶりにkore使ったら
何でもない所でいきなり
deal finishedとかitem appeared Unknown31506とか
出るんですけどこれ何が原因でしょう?
漏れのkore古すぎ?(´Д`;)
>495
"F0 00"とか"9E 00 12 7B 00 00 01 ** ** ** ** ** ** 01"とかを
受信したんじゃないの?
ところで、二点間の移動って、直線移動にするとぎこちなくないか?
右に1マス上に2マス、とかみたいな移動を繰り返したりして。
んで提案なんだが、(x1,y1) → (x2,y2)の移動とすると、
vx = x2 - x1、vy = y2 - y1として、
(vx < vy)の時はyだけを変化させて、逆ならxだけ、
同じなら斜めに、とかするのはどうだろう。
縦か横にまっすぐ歩いて近づいて、次に斜めに歩く感じ。
…読みにくくてスマソ(´Д`;)
今日はじめてプロテクトbot(ポタに乗っても飛ばない)を見たよ。
正直perlなんてしらないのに必至こいてポタ・iw回避ルーチン
追加した漏れがアホに見えたよ。まぁ実際あほなんだが。
アレってどういう原理なの?
無理矢理チャット非表示にして開いて歩いてるのか?
ここで公開されてた露店パッチでの出店で
露店の名前が出なくなった…なぜ?
露店出店するときの名前、今度はちゃんとできました
昨日はできなかったのになんででしょ
ダメ文字とか記号でもあるのかな
501デフォルトの名無しさん:02/11/13 13:05
age
BOTで拾った木琴・ソルスケ×2・エギラ・青箱限定品の頭装備etc...
全部消えるのか…やってらんね。
質問です。
今日初めてKOREをDLしてきましたが。
JKOREってどんなんですか?
KOREは普通に動くんで今改造しまくりです。
KORE動けばJKOREって不要?
それともJKOREの方が便利orルーチンが最適化されてますか?
>>503
お好みで。
>>503
jkoreはそこそこ手が加わってるkore。
よって、欲しがるのはBOTでラストスパートしたいハリーボッター
>>499-500
露店名に空白(スペース)を入れるとダメになるっぽい
>>505
>ハリーボッター
的を得て手凄く(・∀・)イイ!
ここで聞くのも悪いと思うけどさ、升スレどこだかわかりませんか?
中身的には取引スレなのですが
>>508
激しく板違いだけど、状況が状況だけに気持ちはわかる。
でも、板違い。
今はどこも次スレたってないよ。どっかのスレを再利用してるかもね。
最近はBOTだとばれてもあんまり気にならなくなった
ばれたところで一般の人は通報したり晒す人は少ないからね
ただ、粘着君を作ったり一般の人を怒らせて晒されたりしないように
横殴りはしないようにこれを入れたいけどどこらへんが不完全なんでしょ?

 } elsif ($config{'attackAuto'} && !($monsters{$_}{'dmgFromYou'} == 0 && $monsters{$_}{'dmgTo'} > 0) && $monsters{$_}{'attack_failed'} == 0
    && ($mon_control{$monsters{$_}{'name'}}{'attack_auto'} >= 1)) {
+   undef $m_plDist_small;
+   $judgeFirst = 1;
+   $m_cDist = distance(\%{$chars[$config{'char'}]{'pos_to'}}, \%{$monsters{$_}{'pos_to'}});
+   for ($i = 0; $i < @playersID; $i++) {
+      next if ($playersID[$i] eq "");
+      $m_plDist = distance(\%{$players{$playersID[$i]}{'pos_to'}}, \%{$monsters{$_}{'pos_to'}});
+      if ($judgeFirst || $m_plDist < $m_plDist_small) {
+        $m_plDist_small = $m_plDist;
+        $judgeFirst = 0;
+      }
+   }
+   push @cleanMonsters, $_ if !$m_plDist_small || $m_plDist_small >= 8 || $m_cDist <= $m_plDist_small;
 }
下のやつでポタ食らったから>>429さんのに変えてみた
結果はまた後で報告…

$ID = substr($msg, 6, 4);
$type = unpack("C1", substr($msg, 14, 1));
$fail = unpack("C1", substr($msg, 15, 1));
if ($fail) {
if ($type == 0x81) {
print "Portal opened at $coords{'x'}, $coords{'y'}\n";
teleportWhenPortalOpenedNear(
$remote_socket,
$chars[$config{'char'}]{'pos'}, \%coords,
$config{'portal_distance_to_teleport'});

} elsif ($type == 0x8d) {
print "Ice Wall setup at $coords{'x'}, $coords{'y'}\n";
} else {
dumpData(substr($msg, 0, $msg_size)) if ($config{'debug'});
}
} else {
dumpData(substr($msg, 0, $msg_size)) if ($config{'debug'});
}
>510
どこぞで見たような・・・。
こんなん使うより、自分でアイデア出して考えて見た方がいいよ。
つーか、プレイヤーでもタゲ被ったりするのにBOTにさせないようにするのなんて無理。
こいつが動作するとしても、速度増加10アコプリやペコ騎士とか血斧商人だったら、後殴りになる可能性が出ると思うぞ。
過去ログ見たらわかるけど、横殴りしたあとの謝罪ができれば、反応がだいぶ違うんだけどね。
} elsif ($switch eq "011F") {
sendTeleport(\$remote_socket, "Random")
}
真・スレッドストッパー。。。( ̄ー ̄)ニヤリッ