kLabMouse писал(а):NyaNya
По моему.. для АттакАуто есть несколько режимов.
В том числе, и выбор ближайшего моба.
По моему чтото такое когда то мелькало, но сейчас похоже все сходиться с мануалом а именно 3 режима...
файл corelogic.pm
функция sub processAutoAttack {
Код: Выделить всё
if (!AI::is(qw/sitAuto take items_gather items_take/)
&& $config{'attackAuto'} >= 2 && !$ai_v{sitAuto_forcedBySitCommand}
&& $attackOnRoute >= 2 && !$monster->{dmgFromYou} && $safe
&& !positionNearPlayer($pos, $playerDist) && !positionNearPortal($pos, $portalDist)
&& timeOut($monster->{attack_failed}, $timeout{ai_attack_unfail}{timeout})) {
push @cleanMonsters, $_;
}
1 - атака только в ответ, 2 агрессивно атаковать мобов.
От тудаже
Код: Выделить всё
if (!$attackTarget) {
# No party monsters either; look for the closest, non-aggressive monster that:
# 1) nobody's attacking
# 2) has the highest priority
undef $smallestDist;
foreach (@cleanMonsters) {
my $monster = $monsters{$_};
next unless $monster;
my $pos = calcPosition($monster);
my $dist = distance($myPos, $pos);
my $name = lc $monster->{name};
if (!defined($smallestDist) || $priority{$name} > $highestPri
|| ( $priority{$name} == $highestPri && $dist < $smallestDist )) {
$smallestDist = $dist;
$attackTarget = $_;
$highestPri = $priority{$monster};
}
}
}
На первый взгляд все правильно но почему тогда кор пытается идти через пол карты к дальнему гео?
При том что рандом валк отклчен.
Добавлено спустя 1 час 50 минут 33 секунды:
wxBotowod писал(а):мне кажется нужно мучать attack.pm или corelogic.pm
Помучал и вот что вышло
файл corelogic.pm
функция sub processAutoAttack
Код: Выделить всё
### Step 1: Generate a list of all monsters that we are allowed to attack. ###
my @aggressives;
my @partyMonsters;
my @cleanMonsters;
# List aggressive monsters
@aggressives = ai_getAggressives(1) if ($config{'attackAuto'} && $attackOnRoute);
# There are two types of non-aggressive monsters. We generate two lists:
foreach (@monstersID) {
next if (!$_ || !checkMonsterCleanness($_));
my $monster = $monsters{$_};
# Ignore ignored monsters in mon_control.txt
if (my $control = mon_control($monster->{name},$monster->{nameID})) {
next if ( ($control->{attack_auto} ne "" && $control->{attack_auto} <= 0)
|| ($control->{attack_lvl} ne "" && $control->{attack_lvl} > $char->{lv})
|| ($control->{attack_jlvl} ne "" && $control->{attack_jlvl} > $char->{lv_job})
|| ($control->{attack_hp} ne "" && $control->{attack_hp} > $char->{hp})
|| ($control->{attack_sp} ne "" && $control->{attack_sp} > $char->{sp})
|| ($control->{attack_auto} == 3 && ($monster->{dmgToYou} || $monster->{missedYou} || $monster->{dmgFromYou}))
);
}
my $pos = calcPosition($monster);
############################################################################################
# Ignore monsters with a distance greater than attack_MaxDistanceToBeginAttack.##########
############################################################################################
if (distance(calcPosition($char), $pos) >= ($config{attack_MaxDistanceToBeginAttack} || 35)) {
next;
}
Добавленные строки
Код: Выделить всё
############################################################################################
# Ignore monsters with a distance greater than attack_MaxDistanceToBeginAttack.##########
############################################################################################
if (distance(calcPosition($char), $pos) >= ($config{attack_MaxDistanceToBeginAttack} || 35)) {
next;
}
Ну и в конфиге необходимо прописать
Кора
не будет атаковать мобов находящихся на расстоянии больше чем указанно в attack_MaxDistanceToBeginAttack либо если значение не установлено 35.
Так бот работает гораздо лучше... и практически не ошибается.
Добавлено спустя 2 минуты:
Однако так и осталось загадкой почему не выберается ближайший моб