
WoE варпер / и расширенная команда pl
Модератор: 4epT
- Click
- Разработчик
- Сообщения: 1563
- Зарегистрирован: Сб ноя 04, 2006 11:30 pm
- Сервер RO:: clickro.sytes.net
- Откуда: Великий Новгород
- Контактная информация:
гы делаем такую процедуру и команда pl дополняется новыми возможностями
pl выводит список игроков рядом + их кол-во
pl g выводит список игроков твоей гильдии рядом + их кол-во + общее кол-во игроков рядом
pl p выводит список игроков твоей пати рядом + их кол-во + общее кол-во игроков рядом
pl имя или bindID выводит инфо о плеере
pl выводит список игроков рядом + их кол-во
pl g выводит список игроков твоей гильдии рядом + их кол-во + общее кол-во игроков рядом
pl p выводит список игроков твоей пати рядом + их кол-во + общее кол-во игроков рядом
pl имя или bindID выводит инфо о плеере
Код: Выделить всё
sub cmdPlayerList {
my (undef, $args) = @_;
my $msg;
if ($args eq "g") {
my $maxpl;
my $maxplg=0;
$msg = T("-----------Player List-----------\n" .
"# Name Sex Lv Job Dist Coord\n");
foreach my $player (@{$playersList->getItems()}) {
my ($name, $dist, $pos);
$name = $player->name;
if ($char->{guild}{name} eq ($player->{guild}{name})) {
if ($player->{guild} && %{$player->{guild}}) {
$name .= " [$player->{guild}{name}]";
}
$dist = distance($char->{pos_to}, $player->{pos_to});
$dist = sprintf("%.1f", $dist) if (index ($dist, '.') > -1);
$pos = '(' . $player->{pos_to}{x} . ', ' . $player->{pos_to}{y} . ')';
$maxpl = @{$playersList->getItems()};
$maxplg = $maxplg+1;
$msg .= swrite(
"@<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @<<<< @<< @<<<<<<<<<< @<<<< @<<<<<<<<<<",
[$player->{binID}, $name, $sex_lut{$player->{sex}}, $player->{lv}, $player->job, $dist, $pos]);
}
}
$msg .= "Total guild players $maxplg \n";
$msg .= "Total players $maxpl \n";
$msg .= "---------------------------------\n";
message($msg, "list");
return;
}
if ($args eq "p") {
my $maxpl;
my $maxplp=0;
$msg = T("-----------Player List-----------\n" .
"# Name Sex Lv Job Dist Coord\n");
foreach my $player (@{$playersList->getItems()}) {
my ($name, $dist, $pos);
$name = $player->name;
if ($char->{party}{name} eq ($player->{party}{name})) {
if ($player->{guild} && %{$player->{guild}}) {
$name .= " [$player->{guild}{name}]";
}
$dist = distance($char->{pos_to}, $player->{pos_to});
$dist = sprintf("%.1f", $dist) if (index ($dist, '.') > -1);
$pos = '(' . $player->{pos_to}{x} . ', ' . $player->{pos_to}{y} . ')';
$maxpl = @{$playersList->getItems()};
$maxplp = $maxplp+1;
$msg .= swrite(
"@<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @<<<< @<< @<<<<<<<<<< @<<<< @<<<<<<<<<<",
[$player->{binID}, $name, $sex_lut{$player->{sex}}, $player->{lv}, $player->job, $dist, $pos]);
}
}
$msg .= "Total party players $maxplp \n";
$msg .= "Total players $maxpl \n";
$msg .= "---------------------------------\n";
message($msg, "list");
return;
}
if ($args ne "") {
my $player = Match::player($args);
if (!$player) {
error TF("Player \"%s\" does not exist.\n", $args);
return;
}
my $ID = $player->{ID};
my $body = $player->{look}{body} % 8;
my $head = $player->{look}{head};
if ($head == 0) {
$head = $body;
} elsif ($head == 1) {
$head = $body - 1;
} else {
$head = $body + 1;
}
my $pos = calcPosition($player);
my $mypos = calcPosition($char);
my $dist = sprintf("%.1f", distance($pos, $mypos));
$dist =~ s/\.0$//;
my %vecPlayerToYou;
my %vecYouToPlayer;
getVector(\%vecPlayerToYou, $mypos, $pos);
getVector(\%vecYouToPlayer, $pos, $mypos);
my $degPlayerToYou = vectorToDegree(\%vecPlayerToYou);
my $degYouToPlayer = vectorToDegree(\%vecYouToPlayer);
my $hex = getHex($ID);
my $playerToYou = int(sprintf("%.0f", (360 - $degPlayerToYou) / 45)) % 8;
my $youToPlayer = int(sprintf("%.0f", (360 - $degYouToPlayer) / 45)) % 8;
my $headTop = headgearName($player->{headgear}{top});
my $headMid = headgearName($player->{headgear}{mid});
my $headLow = headgearName($player->{headgear}{low});
$msg = TF("------------------ Player Info ------------------\n" .
"%s (%d)\n" .
"Account ID: %s (Hex: %s)\n" .
"Party: %s\n" .
"Guild: %s\n" .
"Position: %s, %s (%s of you: %s degrees)\n" .
"Level: %-7d Distance: %-17s\n" .
"Sex: %-6s Class: %s\n" .
"-------------------------------------------------\n" .
"Body direction: %-19s Head direction: %-19s\n" .
"Weapon: %s\n" .
"Shield: %s\n" .
"Shoes : %s\n" .
"Upper headgear: %-19s Middle headgear: %-19s\n" .
"Lower headgear: %-19s Hair color: %-19s\n" .
"Walk speed: %s secs per block\n",
$player->name, $player->{binID}, $player->{nameID}, $hex,
($player->{party} && $player->{party}{name} ne '') ? $player->{party}{name} : '',
($player->{guild}) ? $player->{guild}{name} : '',
$pos->{x}, $pos->{y}, $directions_lut{$youToPlayer}, int($degYouToPlayer),
$player->{lv}, $dist, $sex_lut{$player->{sex}}, $jobs_lut{$player->{jobID}},
"$directions_lut{$body} ($body)", "$directions_lut{$head} ($head)",
itemName({nameID => $player->{weapon}}),
itemName({nameID => $player->{shield}}),
itemName({nameID => $player->{shoes}}), $headTop, $headMid,
$headLow, "$haircolors{$player->{hair_color}} ($player->{hair_color})",
$player->{walk_speed});
if ($player->{dead}) {
$msg .= T("Player is dead.\n");
} elsif ($player->{sitting}) {
$msg .= T("Player is sitting.\n");
}
if ($degPlayerToYou >= $head * 45 - 29 && $degPlayerToYou <= $head * 45 + 29) {
$msg .= T("Player is facing towards you.\n");
}
$msg .= "-------------------------------------------------\n";
message $msg, "info";
return;
}
my $maxpl;
$msg = T("-----------Player List-----------\n" .
"# Name Sex Lv Job Dist Coord\n");
foreach my $player (@{$playersList->getItems()}) {
my ($name, $dist, $pos);
$name = $player->name;
if ($player->{guild} && %{$player->{guild}}) {
$name .= " [$player->{guild}{name}]";
}
$dist = distance($char->{pos_to}, $player->{pos_to});
$dist = sprintf("%.1f", $dist) if (index ($dist, '.') > -1);
$pos = '(' . $player->{pos_to}{x} . ', ' . $player->{pos_to}{y} . ')';
$maxpl = @{$playersList->getItems()};
$msg .= swrite(
"@<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @<<<< @<< @<<<<<<<<<< @<<<< @<<<<<<<<<<",
[$player->{binID}, $name, $sex_lut{$player->{sex}}, $player->{lv}, $player->job, $dist, $pos]);
}
$msg .= "Total players $maxpl \n";
$msg .= "---------------------------------\n";
message($msg, "list");
}
- Click
- Разработчик
- Сообщения: 1563
- Зарегистрирован: Сб ноя 04, 2006 11:30 pm
- Сервер RO:: clickro.sytes.net
- Откуда: Великий Новгород
- Контактная информация:
готово, протестил.
- Вложения
-
- cmd_pl.zip
- pl - players list + total
pl g - Guild players list + total
pl p - Party players list + total
pl NAME or bindID - player info & statuses - (2.02 КБ) 382 скачивания
- piroJOKE
- Модератор
- Сообщения: 8204
- Зарегистрирован: Сб ноя 04, 2006 2:20 am
- Сервер RO:: localhost
- Откуда: Molvania
Я не уверен, что это работает....
pl g "MyFukedGuild" (только тех, кто в гильде такой-то)(я б не стал)

ЗЫ: Если хочешь сильно изголиццо, можешь еще вот так изобразить:_pl.pl line 62.
Use of uninitialized value in string eq a
_pl.pl line 62.
Use of uninitialized value in string eq a
_pl.pl line 62.
Use of uninitialized value in string eq a
_pl.pl line 62.
Use of uninitialized value in string eq a
_pl.pl line 62.
-----------Player List-----------
# Name
1 shibinowa []
3 Wazeyomo
7 Unknown #5099899
Total guild players 3
Total players 9
---------------------------------
pl g "MyFukedGuild" (только тех, кто в гильде такой-то)(я б не стал)
- Click
- Разработчик
- Сообщения: 1563
- Зарегистрирован: Сб ноя 04, 2006 11:30 pm
- Сервер RO:: clickro.sytes.net
- Откуда: Великий Новгород
- Контактная информация:
pl g "MyFukedGuild" на счет этого думал, но не хочу - лень) если комуто уж приспичит пипец то можно
62 строка if ($char->{guild}{name} eq ($player->{guild}{name})) {
у меня ошибок не даёт никаких этот плагин
нуно узнать у других
зы мож у тя гильда из русских букв?)
ззы но результат всёравно получен правильный)
62 строка if ($char->{guild}{name} eq ($player->{guild}{name})) {
у меня ошибок не даёт никаких этот плагин
нуно узнать у других
зы мож у тя гильда из русских букв?)
ззы но результат всёравно получен правильный)
- 4epT
- macro-маньячина
- Сообщения: 2795
- Зарегистрирован: Чт дек 21, 2006 1:23 pm
- Сервер RO:: 4game
- Discord: ya4ept#8494
- Контактная информация:
Описание:
Прист варпает в 1 точку (пока). Схема такая:
1. Рядом с пристом (в радиусе 10 клеток) в общий чат пишут слово варп (можно не переключать раскладку и написать dfhg, кстати можно написать и ВаРп - тоже поймёт).
2. бот анализирует кто это, дальше
а) если этот засранец (автор слов) не из наших гильдий, то молчим
б) если же - свой чувак, то смотрим сколько игроков вокруг приста собралось
- если игроков меньше 10, то мы даём 1 варп
- если собралось дофига игроков, то открываем 2 варпа (мало?)
Для работы макроса вам необходимо установить плагин cmd_pl.
Навтройка макроса:
$guild = непобедимые,xaos
сюда прописываем имена "своих в доску" гильдий. Имена не чувствительны к РеГиСтРу. После запятой пробела быть не должно!
$warp = 0
вместо 0 ставим тот портал который нужен (их всего четыре: 0, 1, 2, 3)
Достоинства макроса:
1. Прист не привязан к координатам, может стоять в любом городе, почти в любом месте.Почему почти? Читай далее.
2. Прист варпает в рандомные координаты. Причём всегда выше себя. Варпы могут быть левее и правее приста.
3. Если гемов нету, то макрос срабатывать не будет
Недостатки макроса:
А кто же о них пишет?
1. Нет оповещения о том, что кончились гемы (кому нада сами прикрутите, или настроете, чтоб бот сам брал гемы)
2. Прист не кидает санки (кому нада сам допишет)
3. Необходимость установки дополнительного плагина (а куда без него?)
Сам макрос:
Внимание, т.к макрос содержит русские слова (варп и имена гильдий), но файл macros.txt необходимо сохранить в кодировке UTF-8 и закомментировать 1-ю строчку (значком #)
Прист варпает в 1 точку (пока). Схема такая:
1. Рядом с пристом (в радиусе 10 клеток) в общий чат пишут слово варп (можно не переключать раскладку и написать dfhg, кстати можно написать и ВаРп - тоже поймёт).
2. бот анализирует кто это, дальше
а) если этот засранец (автор слов) не из наших гильдий, то молчим
б) если же - свой чувак, то смотрим сколько игроков вокруг приста собралось
- если игроков меньше 10, то мы даём 1 варп
- если собралось дофига игроков, то открываем 2 варпа (мало?)
Для работы макроса вам необходимо установить плагин cmd_pl.
Навтройка макроса:
$guild = непобедимые,xaos
сюда прописываем имена "своих в доску" гильдий. Имена не чувствительны к РеГиСтРу. После запятой пробела быть не должно!
$warp = 0
вместо 0 ставим тот портал который нужен (их всего четыре: 0, 1, 2, 3)
Достоинства макроса:
1. Прист не привязан к координатам, может стоять в любом городе, почти в любом месте.Почему почти? Читай далее.
2. Прист варпает в рандомные координаты. Причём всегда выше себя. Варпы могут быть левее и правее приста.
3. Если гемов нету, то макрос срабатывать не будет
Недостатки макроса:
А кто же о них пишет?

1. Нет оповещения о том, что кончились гемы (кому нада сами прикрутите, или настроете, чтоб бот сам брал гемы)
2. Прист не кидает санки (кому нада сам допишет)
3. Необходимость установки дополнительного плагина (а куда без него?)
Сам макрос:
Код: Выделить всё
automacro warp {
inventory "Blue Gemstone" > 0
pubm /варп|dfhg/i,10
run-once 1
call {
$guild = непобедимые,xaos
$i = @player ($.lastpub)
$g = @eval (exists $::players{$::playersID[$i]}->{guild} ? $::players{$::playersID[$i]}->{guild}{name} : 'null')
if ($g ~ $guild) goto ok
goto end
:ok
do pl
:end
release pl
release warp
}
}
automacro pl {
console /Total players (\d+)/
run-once 1
exclusive 1
call {
$warp = 0
if ($.lastMatch1 > 9) goto da
goto net
:da
$x = @eval($::char->{pos}{x})
$y = @eval($::char->{pos}{y})
do sl 27 @eval($x + @rand(-5, 0)) @eval($y + @rand(2, 7))
pause 1
do warp $warp
pause 3
:net
do sl 27 @eval($x + @rand(0, 5)) @eval($y + @rand(2, 7))
pause 1
do warp $warp
pause 3
:end
release warp
}
}
Последний раз редактировалось 4epT Пн июн 25, 2007 4:45 pm, всего редактировалось 3 раза.
- miniBot
- Грамотный
- Сообщения: 429
- Зарегистрирован: Вс ноя 05, 2006 8:48 am
- Откуда: Москва
- Контактная информация:
4epT
а разьве переменные передаются из макроса в макрос?
Я имею в виду переменную $warp, которой в макросе warp присваивается значение 0. И она-же используется в макросе pl.
Если я правильно понял ход твоей мысли, то если автомакро pl прерывает макро warp, то значение переменной сохраняется?
а разьве переменные передаются из макроса в макрос?
Я имею в виду переменную $warp, которой в макросе warp присваивается значение 0. И она-же используется в макросе pl.
Если я правильно понял ход твоей мысли, то если автомакро pl прерывает макро warp, то значение переменной сохраняется?
а почему-бы и нет. Плагин может добавить глобальную переменную?Click писал(а):не сделаешь. ты же не будешь добавлять глобальных переменных?
помощь только тем у кого включен параметр - mozgEnable 1
БОТАТЬ, БОТАТЬ, И ЕЩЕ РАЗ БОТАТЬ, КАК ЗАВЕЩАЛ ВЕЛИКИЙ ЛЕНИН
БОТАТЬ, БОТАТЬ, И ЕЩЕ РАЗ БОТАТЬ, КАК ЗАВЕЩАЛ ВЕЛИКИЙ ЛЕНИН
- 4epT
- macro-маньячина
- Сообщения: 2795
- Зарегистрирован: Чт дек 21, 2006 1:23 pm
- Сервер RO:: 4game
- Discord: ya4ept#8494
- Контактная информация:
блин Click сбил меня со своим плагином 
макрос временно не работает
добавил позже:
Всё исправил, так даже прикольнее получилось.
На счёт замечания по поводу переменной $warp. По идеи значение переменной таким образом не передаётся от макроса к саросу, но если бот хоть раз бы использовал варп с первого автомакроса, то она бы передалась на второй, у меня при тестах так и было, поэтому решил не добавлять. Но щас исправил, теперь точно всё по грамотному

макрос временно не работает

добавил позже:
Всё исправил, так даже прикольнее получилось.
На счёт замечания по поводу переменной $warp. По идеи значение переменной таким образом не передаётся от макроса к саросу, но если бот хоть раз бы использовал варп с первого автомакроса, то она бы передалась на второй, у меня при тестах так и было, поэтому решил не добавлять. Но щас исправил, теперь точно всё по грамотному

- Click
- Разработчик
- Сообщения: 1563
- Зарегистрирован: Сб ноя 04, 2006 11:30 pm
- Сервер RO:: clickro.sytes.net
- Откуда: Великий Новгород
- Контактная информация:
добавлено отображение приписке в гильде по мотивам asasa
viewtopic.php?t=5001
viewtopic.php?t=5001
- Вложения
-
- cmd_pl.zip
- pl - players list + total
pl g - Guild players list + total
pl p - Party players list + total
pl NAME or bindID - player info & statuses & Guild title - (2.08 КБ) 312 скачиваний