Страница 2 из 3

Добавлено: Вс июн 24, 2007 9:31 pm
piroJOKE
Так хочеццо ж малой кровью. :crazy:

Добавлено: Вс июн 24, 2007 10:18 pm
Click
гы делаем такую процедуру и команда pl дополняется новыми возможностями
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");
}

Добавлено: Вс июн 24, 2007 10:26 pm
piroJOKE
Два соображения.
Во-первых, это стоит загнать в плагин.
Во-вторых, прежде это стоит объединить с... короче кажется в "идеях" лежит плагин, показывающий статусы на игроках - вот его начинку к этому стоит добавить.

Добавлено: Вс июн 24, 2007 10:42 pm
Click
дык, ща будет

Добавлено: Вс июн 24, 2007 11:01 pm
Click
готово, протестил.

Добавлено: Вс июн 24, 2007 11:16 pm
piroJOKE
Бугога, а это еще не всё. :P
Как насчет в этот же плагин встроить нечто, что можно будет вызвать из макроса, ы? ;)

Добавлено: Вс июн 24, 2007 11:27 pm
Click
не сделаешь. ты же не будешь добавлять глобальных переменных?
макросом выдерай из консоли

Добавлено: Вс июн 24, 2007 11:41 pm
piroJOKE
Я не уверен, что это работает.... :(
_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" (только тех, кто в гильде такой-то)(я б не стал)

Добавлено: Вс июн 24, 2007 11:54 pm
Click
pl g "MyFukedGuild" на счет этого думал, но не хочу - лень) если комуто уж приспичит пипец то можно
62 строка if ($char->{guild}{name} eq ($player->{guild}{name})) {

у меня ошибок не даёт никаких этот плагин

нуно узнать у других

зы мож у тя гильда из русских букв?)
ззы но результат всёравно получен правильный)

Добавлено: Пн июн 25, 2007 12:06 am
4epT
Описание:
Прист варпает в 1 точку (пока). Схема такая:
1. Рядом с пристом (в радиусе 10 клеток) в общий чат пишут слово варп (можно не переключать раскладку и написать dfhg, кстати можно написать и ВаРп - тоже поймёт).
2. бот анализирует кто это, дальше
а) если этот засранец (автор слов) не из наших гильдий, то молчим
б) если же - свой чувак, то смотрим сколько игроков вокруг приста собралось
- если игроков меньше 10, то мы даём 1 варп
- если собралось дофига игроков, то открываем 2 варпа (мало?)

Для работы макроса вам необходимо установить плагин cmd_pl.

Навтройка макроса:
$guild = непобедимые,xaos
сюда прописываем имена "своих в доску" гильдий. Имена не чувствительны к РеГиСтРу. После запятой пробела быть не должно!
$warp = 0
вместо 0 ставим тот портал который нужен (их всего четыре: 0, 1, 2, 3)

Достоинства макроса:
1. Прист не привязан к координатам, может стоять в любом городе, почти в любом месте.Почему почти? Читай далее.
2. Прист варпает в рандомные координаты. Причём всегда выше себя. Варпы могут быть левее и правее приста.
3. Если гемов нету, то макрос срабатывать не будет

Недостатки макроса:
А кто же о них пишет? :D
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
}
}
Внимание, т.к макрос содержит русские слова (варп и имена гильдий), но файл macros.txt необходимо сохранить в кодировке UTF-8 и закомментировать 1-ю строчку (значком #)

Добавлено: Пн июн 25, 2007 11:29 am
miniBot
4epT
а разьве переменные передаются из макроса в макрос?
Я имею в виду переменную $warp, которой в макросе warp присваивается значение 0. И она-же используется в макросе pl.
Если я правильно понял ход твоей мысли, то если автомакро pl прерывает макро warp, то значение переменной сохраняется?
Click писал(а):не сделаешь. ты же не будешь добавлять глобальных переменных?
а почему-бы и нет. Плагин может добавить глобальную переменную?

Добавлено: Пн июн 25, 2007 2:14 pm
Click
miniBot писал(а):а почему-бы и нет. Плагин может добавить глобальную переменную?
помоему нет

Добавлено: Пн июн 25, 2007 4:31 pm
4epT
блин Click сбил меня со своим плагином :)
макрос временно не работает :)

добавил позже:
Всё исправил, так даже прикольнее получилось.

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

Добавлено: Ср янв 30, 2008 7:21 pm
Блэйз
будет ли пахать макрос если в название Ги - пробелы??

Добавлено: Вс мар 02, 2008 12:58 pm
Click
добавлено отображение приписке в гильде по мотивам asasa
viewtopic.php?t=5001