2005年 09月 08日 ( 1 )

重要アイテムを取り返せ!

前回窓手BOTの稼ぎ利用について説明しました。
その中で弓BOTの1つの弱点として、ルートモンスターにアイテムをルートされやすいという点を挙げました。

窓手BOTの性質上おいしそうな狩場にはルートモンスターが配置されています。
ルートモンスターにアイテムをルートされるのを恐れてルートモンスターを叩く設定にしていると、
本命の敵の殲滅数が落ち込みます。
そこで、重要アイテムをルートされたらルートモンスターを倒してくれるコードはないのか?と思いkoreの中を探してみました。

if ($mDist < $config{'distImportantItem'} && binFind(\@root_monsters, $monsters{$_}{'name'}) ne "" && $monsters{$_}{'dmgFrom'} == 0 && $monsters{$_}{'dmgTo'} == 0) {
print "*** 重要アイテム ($items_old{$ID}{'name'}) をルートされますた ***\n";
push @{$ai_v{'ai_attack_cleanMonsters'}}, $_;
}

00A1パケ受信部にこのような箇所がありました。
このコードは、重要アイテムが消えた時、重要アイテム検知距離以内にroot_monsters.txtに記述したモンスターが放浪していた時、そのモンスターを攻撃対象にするという意味です。
しかし、これで動くのかなと思ってたのですが動きません。。
なぜ動かないのか?と思い調べてみると、、AUTO-ATTACKの部分でリセットされています。
ではどのようにすれば動くのか?そこでkoreをいじいじしてみました。

まず、誤作動を防ぐために00A1パケのif文に$flagImportantItemsModeを条件に加えます(赤い部分が追加箇所)。

if ($config{'itemsImportantAuto'} && $flagImportantItemsMode && $iDist < $config{'distImportantItem'} && binFind(\@itemsID_take, $ID) eq "") {

次にその下のpush @{$ai_v{'ai_attack_cleanMonsters'}}, $_;を↓に置換します。

$old_teleport_search = $mon_control{$monsters{$_}{'name'}}{'teleport_search'};
$mon_control{$monsters{$_}{'name'}}{'teleport_search'} = 1;
$mon_control{$monsters{$_}{'name'}}{'root_monsters'} = 1;

ルートしたMOBのsearchフラグを一応控えておき、強制的に1にします。
なぜかこうしないとすぐ飛んでしまったので・・・
無くても動くのですが念のため。。

そしてAUTO-ATTACKの

&& ($mon_control{lc($monsters{$_}{'name'})}{'attack_auto'} >= 1)) {
push @{$ai_v{'ai_attack_cleanMonsters'}}, $_;

を↓に置換します。

&& ($mon_control{lc($monsters{$_}{'name'})}{'attack_auto'} >= 1)
|| ($mon_control{lc($monsters{$_}{'name'})}{'root_monsters'})) {
push @{$ai_v{'ai_attack_cleanMonsters'}}, $_;
if ($mon_control{lc($monsters{$_}{'name'})}{'root_monsters'}){
$mon_control{$monsters{$_}{'name'}}{'teleport_search'} = $old_teleport_search;
undef $mon_control{lc($monsters{$_}{'name'})}{'root_monsters'};
}

アイテムをルートしたと思われるモンスターがいた場合、攻撃対象に加えます。
最後に、重要アイテムを無理やり拾うようにする為にお好みで↓のように変更します(赤い部分が追加箇所)。

print "攻撃されますた: $monsters{$ID1}{'name'} ($monsters{$ID1}{'binID'}) - ダメージ: $dmgdisplay\n";
if(!$flagImportantItemsMode && ($config{'teleportAuto_Attack'}) && ($damage>($config{'teleportAuto_Attack_Dmg'}))) {

強いアクティブMOBがいる場合は死ぬかもしれないので要注意^^;
スキル攻撃も変えたい人は同様に。

このようにコードを変更します。
他のkoreにはこの機能あるのかもしれませんがとりあえず、、ね。


e0056993_20584343.jpg
私は変更完了し、試しにエルダ森にて動作を確認してみました。
動作確認の為エルダの落とすアイテムすべてを重要アイテム指定にしています^^;
mon_control.txtでポポリンは0 0 0になっていますが、重要アイテムをルートされた疑いがある場合このように攻撃して古木の露を取り返します^^;


現在のROの仕様上koreでは重要アイテムをどのルートモンスターが食べたか知ることは出来ません。
その為確率的にルートしたと思われるモンスターを攻撃するようにしています。
つまり確実に重要アイテムを取り返せるという保障はありません。

また、窓手BOTの場合「攻撃がHITしたら飛ぶ」というのが基本なので重要アイテム発見の直前に攻撃を受けた場合、飛んでしまうという厄介な性質があります。
ここは修正無理そうなので仕様として諦めよう。。
[PR]
by chronoship | 2005-09-08 21:04 | kore