то есть найти максимальное скопление мобов и вдарить по ним гластом так чтобы все здохли
написал небольшую подпрограмку
Код: Выделить всё
sub GENOCIDE {
my $MobN = scalar(ai_getAggressives(1, 1)); # кол-во мобов в зоне видимости
my $MobCount = $config{'MobCount'}; # кол-во мобов для срабатывания скила или спела
return 0 if ($MobN < $MobCount);
my $Rs = $config{'RadiusSkil'}; # радиус скила или спела
my $Rcl = $config{'RadiusSight'}; # радиус макс края действия скила, если не задан = 20
if (!$Rcl) {$Rcl = 20;}
my $GmyPos = $char->{pos};
my $Xleft; # левый край конечного площади действия скила
my $Xrght = ($GmyPos->{x} + $Rcl); # правый край ....
my $Yup = ($GmyPos->{y} + $Rcl); # верхний край .....
my $Ydown; # нижний край ......
my $search ;
my $searchX;
my $searchY;
my $Gpos = $char->{pos_for};
if (($GmyPos->{x} - $Rcl) >= 0) {
$Xleft = ($GmyPos->{x} - $Rcl);
} else {
$Xleft = 0;
}
if (($GmyPos->{y} - $Rcl) >= 0) {
$Ydown = ($GmyPos->{y} - $Rcl);
} else {
$Ydown = 0;
}
my @GmonsterIDs = ai_getAggressives(1, 1);
for (my $iy = $Yup; $iy > ($Ydown+2*$Rs); $iy--) { # $ix и $iy верхний-левый угол площади с радиусом $Rs
for (my $ix = $Xleft; $ix < ($Xrght-2*$Rs); $ix++) {
$Gpos->{x} = ($ix+$Rs); # $pos->{x} и $pos->{y} - центр площади
$Gpos->{y} = ($iy-$Rs);
next if (!checkLineSnipable($GmyPos, $Gpos)); # следующая позиция площади если мы не можем попасть в эту
my $MobIN = 0; # кол-во мобов в данной площади
for my $GmonsterID (@GmonsterIDs) {
my $Gmonster = $monsters{$GmonsterID};
next if (!checkMonsterCleanness($Gmonster));
if (($Gmonster->{pos_to}{x} >= $ix)
&& ($Gmonster->{pos_to}{x} <= (2*$Rs+$ix))
&& ($Gmonster->{pos_to}{y} <= $iy)
&& ($Gmonster->{pos_to}{y} >= ($iy-2*$Rs))) {
$MobIN++;
}
}
next if ($MobIN < $MobCount);
next if ($MobIN <= $search);
$search = $MobIN;
$searchX = $Gpos->{x};
$searchY = $Gpos->{y};
}
}
return 0 if (!$search);
return $searchX, $searchY;
}
MobCount N, где N - минимальное кол-во мобов по которому мы вдарим
RadiusSkil N, где N - радиус действия скила или спела
RadiusSight N, где N - радиус макс края действия скила, если не задан = 20 (clientsight)
то данная подпрограмма для скажем определенного скила будет искать скопления мобов в поле видимости с условием что по ним мы можем выстрелить и что их кол-во >= MobCount (хотя она вообче будет искать самое максимальное скопление).
ну соответственно и вернет либо 0 если нет таких скоплений, либо координаты для испольхования скила\спела.
ниче не тестил, просто набросал пока сырую версию, если оно нужно нам в коре то займусь оптимизацией, если нет, то так и скажите