Задача №18: Выводить статусы на других игроках [решено]
Модератор: 4epT
- piroJOKE
- Модератор
- Сообщения: 8204
- Зарегистрирован: Сб ноя 04, 2006 2:20 am
- Сервер RO:: localhost
- Откуда: Molvania
Задача №18: Выводить статусы на других игроках [решено]
Задача №18: Выводить список статусов на других игроках, по команде pl #.
Последний раз редактировалось piroJOKE Пт май 25, 2007 4:16 pm, всего редактировалось 4 раза.
Помоему не удобно переписывать исходный код. Его придеться править каждый раз, как ставишь новую сборку.
Новые команды легче добавлять плагинами.
Идею понял. Хорошая. Надо покопаться в различии статусов вешающих самой корой и видимых. Думаю реализуема. На днях посижу покопаюсь.
Офтоп:
piroJOKE ты с OpenKore Field Editor разобрался?
viewtopic.php?t=941
Новые команды легче добавлять плагинами.
Идею понял. Хорошая. Надо покопаться в различии статусов вешающих самой корой и видимых. Думаю реализуема. На днях посижу покопаюсь.
Офтоп:
piroJOKE ты с OpenKore Field Editor разобрался?
viewtopic.php?t=941
- piroJOKE
- Модератор
- Сообщения: 8204
- Зарегистрирован: Сб ноя 04, 2006 2:20 am
- Сервер RO:: localhost
- Откуда: Molvania
Это я рано начал радоваться... проехали:
А вот это вариант работает так, как надо! -
Будем бессовестно использовать!)
ЗЫ: Ерр.... правда оно матюкалось, когда рядом никого небыло, поэтому я заменил if ($args ne "") ---> if ($args), вроде стало окей....
* * *
Позже! А вот несколько усовершенствованный, измененный вариант этого плагина (он новее, чем тот, что тут лежит в атаче):
viewtopic.php?p=28193 (by Click)
* * *Хе-хе-хе, вот какая я хитрая задница:
-my $cmds = Commands::register(
- ['pl_st', "command plugin", \&cmds_1],
-);
+my $cmds = Commands::register(
+ ['pl', "command plugin", \&cmds_1],
+);
(Угодайте, што случилось?)
А вот это вариант работает так, как надо! -
(Смысл операции - плагин просто заменяет собой команду pl / pl #. Типо получается просто "расширенная" pl-команда. Вот теперь решено. Афтар плагина - респект.Код: Выделить всё
package cmds; use lib "c:/Perl/lib/"; use lib $Plugins::current_plugin_folder; use strict; use warnings; use Time::HiRes qw(time); use encoding 'utf8'; use Globals; use Plugins; use Utils; use Misc; use AI; use Commands; use AI; use Log qw(message warning error debug); use Utils; use Utils::Win32; use Match; use Translation; my %self = ( name => 'commands', ); Plugins::register("commands", "Commands plugin by Eddga", \&onUnload); my $cmds = Commands::register( ['pl', "command plugin", \&cmds_1], ); sub onUnload { message("[$self{name}] Unloaded!\n", "system"); Commands::unregister($cmds); } sub cmds_1 { my (undef, $args) = @_; my $msg; if ($args) { my Actor::Player $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"; ############################################################# #Statuses ############################################################# my $statuses = 'none'; if (defined $player->{statuses} && %{$player->{statuses}}) { $statuses = join(", ", keys %{$player->{statuses}}); } $msg .= TF("Statuses: %s \n", $statuses); $msg .= "-------------------------------------------------\n"; message $msg, "info"; return; } #--------------- { $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} . ')'; $msg .= swrite( "@<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @<<<< @<< @<<<<<<<<<< @<<<< @<<<<<<<<<<", [$player->{binID}, $name, $sex_lut{$player->{sex}}, $player->{lv}, $player->job, $dist, $pos]); } $msg .= "---------------------------------\n"; message($msg, "list"); } }

ЗЫ: Ерр.... правда оно матюкалось, когда рядом никого небыло, поэтому я заменил if ($args ne "") ---> if ($args), вроде стало окей....

* * *
Позже! А вот несколько усовершенствованный, измененный вариант этого плагина (он новее, чем тот, что тут лежит в атаче):
viewtopic.php?p=28193 (by Click)
- Вложения
-
- cmd_pl.zip
- отредактированный вариант плагина, который просто заменяет команду pl # на ее "расширенную" альтернативу
v 0.9.4 - (1.8 КБ) 229 скачиваний