Ммм... ну по идее, есть у нас массив @playersID, добавленная строка тупо смотрит имя игрока для каждого ID и сравнивает с именем игрока в пати. То есть тут без разницы, что прописано в конфиге.
Я думаю, все 3 пункта относятся к условию:
Код: Выделить всё
(!$config{"partySkill_$i"."_target"} || existsInList($config{"partySkill_$i"."_target"}, $player->{name}))
то есть:
если не указан target, то проверку прошли; если указан, то смотрим, содержится ли player name в списке target`ов.
остаётся проверить только, чтобы мы получали реальный player name, а не из списка пати.
player name мы берём из $player = Actor::get($ID);
если копнуть глубже:
Код: Выделить всё
sub get {
.......
} elsif ($items{$ID}) {
return $items{$ID};
} else {
foreach my $list ($playersList, $monstersList, $npcsList, $petsList, $portalsList) {
my $actor = $list->getByID($ID);
if ($actor) {
return $actor;
}
.......
}
про items я не понял, а так получается, что player мы возьмём из $playersList. всё должно работать.
Единственное но: если юзать $player->{name}, то мы рискуем нарваться на пустую строку, я бы поменял на $player->name.
Код: Выделить всё
##
# String $Actor->{name}
#
# The name of the actor, e.g. "Joe", "Jane", "Poring", etc.
# This field is undefined if the name for this actor isn't known yet,
# so generally you use use $Actor->name() instead, which automatically
# takes care of actor objects that don't have a name yet.