(Пожже выставлю изминения которые Я вносил в ОпенКора чтоб оно всё пахало безукоризненно)
И так Сами Скилы. Оьратите внимание. Порядок очень важен!
Код: Выделить всё
######## Support ###########
# Хелим Насколько Нужно, помагает не тратить много СП
useSelf_skill_smartHeal 1
# Хилл должен быть всегда первым, ибо он самый приоритетный
useSelf_skill Heal {
hp < 70%
maxCastTime 0.3
minCastTime 0.1
timeout 0.1
}
partySkill Heal {
target_hp < 80%
maxCastTime 0.3
minCastTime 0.1
timeout 0.1
}
# Блесс и Аги зделаны таким образом чтобы терятся в жёстком бою, ибо модет повлиять серёзно на кач
# Всегда кастим сначала блем на себя, потом аги, потом блес на пати, потом аги на пати
partySkill Blessing {
lvl 10
whenStatusInactive Blessing
target_aggressives 0
sp > 70
notInTown 1
isSelfSkill 1
maxCastTime 0.5
minCastTime 0.1
aggressives 0
}
partySkill Increase AGI {
lvl 10
whenStatusActive Blessing
whenStatusInactive Increase AGI
target_aggressives 0
sp > 100
notInTown 1
isSelfSkill 1
maxCastTime 1.5
minCastTime 1
aggressives 0
}
partySkill Blessing {
lvl 10
whenStatusActive Blessing, Increase AGI
target_whenStatusInactive Blessing
target_aggressives 0
target_timeout 230
sp > 60
notInTown 1
maxCastTime 0.5
minCastTime 0.1
aggressives 0
}
partySkill Increase AGI {
lvl 10
whenStatusActive Blessing, Increase AGI
target_whenStatusInactive Increase AGI
target_aggressives 0
target_timeout 170
sp > 80
notInTown 1
maxCastTime 1.5
minCastTime 1
aggressives 0
}
# Здесьу меня како-йто баг, поидее оно должно было бы кастится когда сопартиец рядом
partySkill Magnificat {
lvl 5
whenStatusInactive Magnificat
target_aggressives 0
sp > 80
notInTown 1
isSelfSkill 1
maxCastTime 6
minCastTime 4
aggressives 0
}
# Так-же как и магни
partySkill Angelus {
lvl 2
sp > 30
whenStatusInactive Angelus
target_aggressives 0
notInTown 1
isSelfSkill 1
maxCastTime 4
minCastTime 0.5
aggressives 0
}
# Желательно всю пневму ставить сразу-же за хилом
useSelf_skill Pneuma {
lvl 1
sp > 15
defendMonsters Antique Firelock,Apocalypse,Skel Archer,Assaulter,Baphomet,Blazzer,Bloody Butterfly,Bloody Knight,Clock,Clock Tower Manager,Creamy Fear,Cruiser,Dark Illusion,Dark Lord,Dracula,Dryad,Elder,Enchanted Peach Tree,Executioner,Fake Angel,Flora,Gargoyle,Garm,Geographer,Goblin Archer,Grand Peco,Greatest General,Archer Guardian,Heater,Hugeling,Hydra,Kapha,Kobold Archer,Lord of Death,Mandragora,Maya Purple,Megalith,Merman,Mime Monkey,Mutant Dragon,Mysteltainn,Orc Archer,Owl Baron,Parasite,Penomena,Permeter,Rafflesia,Raydric Archer,Seahores,Solider,Stem worm,Stone Shooter,Succubus,Tamruan,Evil Cloud Hermit,Tengu,Violy,Wanderer,Were Wolf,Wind Ghost,Wootan Shooter,Worm Tail,Wraith Dead,Zombie Dragon,Cruiser1
whenNotGround Pneuma
maxCastTime 1.2
minCastTime 1
}
partySkill Pneuma {
lvl 1
sp > 10
target_defendMonsters Antique Firelock,Apocalypse,Skel Archer,Assaulter,Baphomet,Blazzer,Bloody Butterfly,Bloody Knight,Clock,Clock Tower Manager,Creamy Fear,Cruiser,Dark Illusion,Dark Lord,Dracula,Dryad,Elder,Enchanted Peach Tree,Executioner,Fake Angel,Flora,Gargoyle,Garm,Geographer,Goblin Archer,Grand Peco,Greatest General,Archer Guardian,Heater,Hugeling,Hydra,Kapha,Kobold Archer,Lord of Death,Mandragora,Maya Purple,Megalith,Merman,Mime Monkey,Mutant Dragon,Mysteltainn,Orc Archer,Owl Baron,Parasite,Penomena,Permeter,Rafflesia,Raydric Archer,Seahores,Solider,Stem worm,Stone Shooter,Succubus,Tamruan,Evil Cloud Hermit,Tengu,Violy,Wanderer,Were Wolf,Wind Ghost,Wootan Shooter,Worm Tail,Wraith Dead,Zombie Dragon,Cruiser1
target_whenNotGround Pneuma
notInTown 1
maxCastTime 1.2
minCastTime 1
}
# Кайри на себя, хорошо себя показівает когда мы танчим
partySkill Kyrie Eleison {
lvl 5
whenStatusInactive Kyrie Eleison
# target_aggressives 0
sp > 80
notInTown 1
isSelfSkill 1
maxCastTime 4
minCastTime 2
# aggressives 0
}
# Кайри на других
partySkill Kyrie Eleison {
lvl 5
whenStatusActive Kyrie Eleison
target_timeout 25
sp > 60
aggressives 0
notInTown 1
maxCastTime 4
minCastTime 2
}
# Если сопартийца много бьют то кастим чаще
partySkill Kyrie Eleison {
lvl 5
target_aggressives >= 3
target_timeout 15
sp > 60
aggressives 0
notInTown 1
maxCastTime 4
minCastTime 2
}
# По идее Манус на себя, но нах не нужен
#useSelf_skill Impositio Manus {
# lvl 3
# whenStatusInactive Impositio Manus
# notInTown 1
# aggressives 0
# maxCastTime 3
# minCastTime 0.5
# timeout 2.8
#}
# Манус на сопартийца
partySkill Impositio Manus {
lvl 3
# whenStatusInactive Impositio Manus
target_timeout 45
target_aggressives 0
aggressives 0
notInTown 1
maxCastTime 3
minCastTime 0.5
}
# Ну и если убили, то оживим
partySkill Resurrection {
lvl 1
target_dead 1
notInTown 1
maxCastTime 6
minCastTime 5
aggressives 0
timeout 15
}
# Анти КС (панацея от хантов)
#monsterSkill Pneuma {
# lvl 1
# sp > 30%
# notInTown 1
# whenFollowing 0
# target Antique Firelock,Apocalypse,Skel Archer,Assaulter,Baphomet,Blazzer,Bloody Butterfly,Bloody Knight,Clock,Clock Tower Manager,Creamy Fear,Cruiser,Dark Illusion,Dark Lord,Dracula,Dryad,Elder,Enchanted Peach Tree,Executioner,Fake Angel,Flora,Gargoyle,Garm,Geographer,Goblin Archer,Grand Peco,Greatest General,Archer Guardian,Heater,Hugeling,Hydra,Kapha,Kobold Archer,Lord of Death,Mandragora,Maya Purple,Megalith,Merman,Mime Monkey,Mutant Dragon,Mysteltainn,Orc Archer,Owl Baron,Parasite,Penomena,Permeter,Rafflesia,Raydric Archer,Seahores,Solider,Stem worm,Stone Shooter,Succubus,Tamruan,Evil Cloud Hermit,Tengu,Violy,Wanderer,Were Wolf,Wind Ghost,Wootan Shooter,Worm Tail,Wraith Dead,Zombie Dragon,Cruiser1
# target_whenNotGround Pneuma
# maxCastTime 2
# minCastTime 1
# notInTown 1
# timeout 3
#}
# Панацея от быстрых мостров
#monsterSkill Decrease AGI {
# lvl 1
# sp > 30%
# notInTown 1
# target_whenStatusInactive Decrease AGI
# target_timeout 35
# notInTown 1
# maxCastTime 3
# minCastTime 2
# timeout 15
#}
# Очень хороший блок если качаемяся с Магом, Визом, Сагом, Хантом
#monsterSkill Lex Aeterna {
# lvl 1
# sp > 30%
# notInTown 1
# target_whenStatusInactive Lex Aeterna
# target_timeout 15
# maxCastTime 6
# minCastTime 5
# notInTown 1
# timeout 15
#}
Файл CoreLogic.pm
Ищем
Код: Выделить всё
next if ($ID eq "");
next if ((!$char->{party} || !$char->{party}{users}{$ID}) && (!$char->{homunculus} || $char->{homunculus}{ID} ne $ID) && !$config{"partySkill_$i"."_notPartyOnly"});
my $player = Actor::get($ID);
next unless UNIVERSAL::isa($player, 'Actor::Player');
Код: Выделить всё
next if ($ID eq "");
next if ((!$char->{party} || !$char->{party}{users}{$ID}) && (!$char->{homunculus} || $char->{homunculus}{ID} ne $ID) && !$config{"partySkill_$i"."_notPartyOnly"});
# By LabMouse
my $player;
if ((!$char->{party}{users}{$ID})||(($char->{party}{users}{$ID})&&($players{$ID}))) {
$player = $players{$ID};
} else {
$player = $char->{party}{users}{$ID};
}
#my $player = Actor::get($ID);
#next unless UNIVERSAL::isa($player, 'Actor::Player');
Код: Выделить всё
my $pos = $player->position;
$party_skill{x} = $pos->{x};
$party_skill{y} = $pos->{y};
Код: Выделить всё
# By LabMouse
my $pl_pos;
$pl_pos = calcPosition($players{$ID});
$party_skill{x} = $pl_pos->{x};
$party_skill{y} = $pl_pos->{y};
#my $pos = $player->position;
#$party_skill{x} = $pos->{x};
#$party_skill{y} = $pos->{y};
Ищем
Код: Выделить всё
if ($config{$prefix."_whenGround"}) {
return 0 unless whenGroundStatus(calcPosition($char), $config{$prefix."_whenGround"});
}
if ($config{$prefix."_whenNotGround"}) {
return 0 if whenGroundStatus(calcPosition($char), $config{$prefix."_whenNotGround"});
}
Код: Выделить всё
# By LabMouse
if ($config{$prefix."_whenGround"}) {
return 0 if !whenGroundStatus(calcPosition($char), $config{$prefix."_whenGround"});
}
if ($config{$prefix."_whenNotGround"}) {
return 0 if whenGroundStatus(calcPosition($char), $config{$prefix."_whenNotGround"});
}
#if ($config{$prefix."_whenGround"}) {
# return 0 unless whenGroundStatus(calcPosition($char), $config{$prefix."_whenGround"});
#}
#
#if ($config{$prefix."_whenNotGround"}) {
# return 0 if whenGroundStatus(calcPosition($char), $config{$prefix."_whenNotGround"});
#}
Код: Выделить всё
sub checkPlayerCondition {
my ($prefix, $id) = @_;
my $player = $playersList->getByID($id);
Код: Выделить всё
sub checkPlayerCondition {
my ($prefix, $id) = @_;
# By LabMouse
my $player = $players{$id};
#my $player = $playersList->getByID($id);
Код: Выделить всё
if ($config{$prefix."_whenGround"}) {
return 0 unless whenGroundStatus(calcPosition($player), $config{$prefix."_whenGround"});
}
if ($config{$prefix."_whenNotGround"}) {
return 0 if whenGroundStatus(calcPosition($player), $config{$prefix."_whenNotGround"});
}
Код: Выделить всё
# By LabMouse
if ($config{$prefix."_whenGround"}) {
return 0 if !whenGroundStatus(calcPosition($players{$id}), $config{$prefix."_whenGround"});
}
if ($config{$prefix."_whenNotGround"}) {
return 0 if whenGroundStatus(calcPosition($players{$id}), $config{$prefix."_whenNotGround"});
}
#if ($config{$prefix."_whenGround"}) {
# return 0 unless whenGroundStatus(calcPosition($player), $config{$prefix."_whenGround"});
#}
#if ($config{$prefix."_whenNotGround"}) {
# return 0 if whenGroundStatus(calcPosition($player), $config{$prefix."_whenNotGround"});
#}
Код: Выделить всё
if ($config{$prefix."_whenGround"}) {
return 0 unless whenGroundStatus(calcPosition($monster), $config{$prefix."_whenGround"});
}
if ($config{$prefix."_whenNotGround"}) {
return 0 if whenGroundStatus(calcPosition($monster), $config{$prefix."_whenNotGround"});
}
Код: Выделить всё
# By LabMouse
if ($config{$prefix."_whenGround"}) {
return 0 if !whenGroundStatus(calcPosition($monster), $config{$prefix."_whenGround"});
}
if ($config{$prefix."_whenNotGround"}) {
return 0 if whenGroundStatus(calcPosition($monster), $config{$prefix."_whenNotGround"});
}
#if ($config{$prefix."_whenGround"}) {
# return 0 unless whenGroundStatus(calcPosition($monster), $config{$prefix."_whenGround"});
#}
#if ($config{$prefix."_whenNotGround"}) {
# return 0 if whenGroundStatus(calcPosition($monster), $config{$prefix."_whenNotGround"});
#}
Файл Misc.pm
Ищем
Код: Выделить всё
$net->sendGetPlayerInfo($ID);
$actor = shift @{$queue};
push @{$queue}, $actor if ($actor);
last;
Код: Выделить всё
# By LabMouse
sendGetPlayerInfo($net, $ID);
#$net->sendGetPlayerInfo($ID);
$actor = shift @{$queue};
push @{$queue}, $actor if ($actor);
last;
Файл Receive.pm
Ищем
Код: Выделить всё
if ($actor->isa('Actor::Player')) {
debug "Player Moved: " . $actor->name . " ($actor->{binID}) Level $actor->{lv} $sex_lut{$actor->{sex}} $jobs_lut{$actor->{jobID}} - ($coordsFrom{x}, $coordsFrom{y}) -> ($coordsTo{x}, $coordsTo{y})\n", "parseMsg";
Код: Выделить всё
if (UNIVERSAL::isa($actor, "Actor::Player"))) {
# Check Whatever it is a party member
my $ID = $actor->{ID};
if ($char->{party}{users}{$ID}) {
$chars[$config{char}]{party}{users}{$ID}{pos}{x} = $coordsTo{x};
$chars[$config{char}]{party}{users}{$ID}{pos}{y} = $coordsTo{y};
$chars[$config{char}]{party}{users}{$ID}{online} = 1;
}
debug "Player Moved: " . $actor->name . " ($actor->{binID}) Level $actor->{lv} $sex_lut{$actor->{sex}} $jobs_lut{$actor->{jobID}} - ($coordsFrom{x}, $coordsFrom{y}) -> ($coordsTo{x}, $coordsTo{y})\n", "parseMsg";
Файл responses.txt
Добавляем Строчку
Код: Выделить всё
statusS1 HP: %$char_hp/%$char_hp_max SP: %$char_sp/%$char_sp_max
Ищем
Код: Выделить всё
} elsif ($switch eq "status") {
$vars->{char_sp} = $char->{sp};
$vars->{char_hp} = $char->{hp};
$vars->{char_sp_max} = $char->{sp_max};
$vars->{char_hp_max} = $char->{hp_max};
$vars->{char_lv} = $char->{lv};
$vars->{char_lv_job} = $char->{lv_job};
$vars->{char_exp} = formatNumber($char->{exp});
$vars->{char_exp_max} = formatNumber($char->{exp_max});
$vars->{char_exp_job} = formatNumber($char->{exp_job});
$vars->{char_exp_job_max} = formatNumber($char->{exp_job_max});
$vars->{char_weight} = $char->{weight};
$vars->{char_weight_max} = $char->{weight_max};
$vars->{zenny} = formatNumber($char->{zenny});
sendMessage($net, $type, getResponse("statusS"), $user) if $config{verbose};
Код: Выделить всё
} elsif ($switch eq "status") {
$vars->{char_sp} = $char->{sp};
$vars->{char_hp} = $char->{hp};
$vars->{char_sp_max} = $char->{sp_max};
$vars->{char_hp_max} = $char->{hp_max};
$vars->{char_lv} = $char->{lv};
$vars->{char_lv_job} = $char->{lv_job};
$vars->{char_exp} = formatNumber($char->{exp});
$vars->{char_exp_max} = formatNumber($char->{exp_max});
$vars->{char_exp_job} = formatNumber($char->{exp_job});
$vars->{char_exp_job_max} = formatNumber($char->{exp_job_max});
$vars->{char_weight} = $char->{weight};
$vars->{char_weight_max} = $char->{weight_max};
$vars->{zenny} = formatNumber($char->{zenny});
sendMessage($net, $type, getResponse("statusS"), $user) if $config{verbose};
# By LabMouse
# a litle version of status
} elsif ($switch eq "stat") {
$vars->{char_sp} = $char->{sp};
$vars->{char_hp} = $char->{hp};
$vars->{char_sp_max} = $char->{sp_max};
$vars->{char_hp_max} = $char->{hp_max};
sendMessage($net, $type, getResponse("statusS1"), $user) if $config{verbose};
Файл ChatQueue.pm
Ищем
Код: Выделить всё
$timeout{ai_thanks_set}{time} = time;
} else {
return 0;
}
return 1;
Код: Выделить всё
$timeout{ai_thanks_set}{time} = time;
} else {
return Commands::run($msg);
}
return 1;
Файл ChatQueue.pm
Ищем
Код: Выделить всё
# Not a chat command; attempt to reply with a message
processChatResponse($cmd) if ($config{autoResponse});
Код: Выделить всё
# Not a chat command; attempt to reply with a message
processChatResponse($cmd) if ($config{autoResponse});
sendMessage($net, "p", $cmd->{user} . ": ". $cmd->{msg});
Файл ChatQueue.pm
Ищем
Код: Выделить всё
if ($msg eq $config{adminPassword}) {
auth($user, 1);
sendMessage($net, "pm", getResponse("authS"), $user);
}
Код: Выделить всё
if ($msg eq $config{adminPassword}) {
# auth($user, 1);
# sendMessage($net, "pm", getResponse("authS"), $user);
}
Взято с http://forums.openkore.com/viewtopic.php?t=26501
Файл Misc.pm
Ищем
Код: Выделить всё
# we will have player HP info (only) if we are in the same party
if ($chars[$config{char}]{party} && $chars[$config{char}]{party}{users}{$id}) {
if ($config{$prefix . "_hp"}) {
if ($config{$prefix."_hp"} =~ /^(.*)\%$/) {
return 0 if (!inRange(percent_hp($chars[$config{char}]{party}{users}{$id}), $1));
} else {
return 0 if (!inRange($chars[$config{char}]{party}{users}{$id}{hp}, $config{$prefix . "_hp"}));
}
Код: Выделить всё
# we will have player HP info (only) if we are in the same party
if ($chars[$config{char}]{party} && $chars[$config{char}]{party}{users}{$id}) {
if ($config{$prefix . "_hp"}) {
if ($config{$prefix."_hp"} =~ /^(.*)\%$/) {
return 0 if ($chars[$config{char}]{party}{users}{$id}{hp} == 0);
return 0 if (!inRange(percent_hp($chars[$config{char}]{party}{users}{$id}), $1));
} else {
return 0 if ($chars[$config{char}]{party}{users}{$id}{hp} == 0);
return 0 if (!inRange($chars[$config{char}]{party}{users}{$id}{hp}, $config{$prefix . "_hp"}));
}
Взято с http://forums.openkore.com/viewtopic.php?t=26501
Файл CoreLogic.pm
Ищем
Код: Выделить всё
# if we are not doing anything else now...
if (AI::action eq "follow") {
if (AI::args->{'suspended'}) {
if (AI::args->{'ai_follow_lost'}) {
AI::args->{'ai_follow_lost_end'}{'time'} += time - AI::args->{'suspended'};
}
delete AI::args->{'suspended'};
}
# if we are not doing anything else now...
if (!$args->{ai_follow_lost}) {
my $ID = $args->{ID};
my $player = $players{$ID};
if ($args->{following} && $player->{pos_to}) {
my $dist = distance($char->{pos_to}, $player->{pos_to});
if ($dist > $config{followDistanceMax} && timeOut($args->{move_timeout}, 0.25)) {
$args->{move_timeout} = time;
if ( $dist > 15 || ($config{followCheckLOS} && !checkLineWalkable($char->{pos_to}, $player->{pos_to})) ) {
ai_route($field{name}, $player->{pos_to}{x}, $player->{pos_to}{y},
attackOnRoute => 1,
distFromGoal => $config{followDistanceMin});
} else {
my (%vec, %pos);
stand() if ($char->{sitting});
getVector(\%vec, $player->{pos_to}, $char->{pos_to});
moveAlongVector(\%pos, $char->{pos_to}, \%vec, $dist - $config{followDistanceMin});
$timeout{ai_sit_idle}{time} = time;
sendMove($pos{x}, $pos{y});
}
}
}
if ($args->{following} && $player && %{$player}) {
if ($config{'followSitAuto'} && $players{$args->{'ID'}}{'sitting'} == 1 && $chars[$config{'char'}]{'sitting'} == 0) {
sit();
}
my $dx = $args->{'last_pos_to'}{'x'} - $players{$args->{'ID'}}{'pos_to'}{'x'};
my $dy = $args->{'last_pos_to'}{'y'} - $players{$args->{'ID'}}{'pos_to'}{'y'};
$args->{'last_pos_to'}{'x'} = $players{$args->{'ID'}}{'pos_to'}{'x'};
$args->{'last_pos_to'}{'y'} = $players{$args->{'ID'}}{'pos_to'}{'y'};
if ($dx != 0 || $dy != 0) {
lookAtPosition($players{$args->{'ID'}}{'pos_to'}) if ($config{'followFaceDirection'});
}
}
}
}
Код: Выделить всё
# if we are not doing anything else now...
if (AI::action eq "follow") {
if (AI::args->{'suspended'}) {
if (AI::args->{'ai_follow_lost'}) {
AI::args->{'ai_follow_lost_end'}{'time'} += time - AI::args->{'suspended'};
}
delete AI::args->{'suspended'};
}
# if we are not doing anything else now...
if (!$args->{ai_follow_lost}) {
my $ID = $args->{ID};
my $player = $players{$ID};
if ($args->{following} && $player->{pos_to}) {
my $dist = distance($char->{pos_to}, $player->{pos_to});
if ($dist > $config{followDistanceMax} && timeOut($args->{move_timeout}, 0.25)) {
$args->{move_timeout} = time;
if ( $dist > 15 || ($config{followCheckLOS} && !checkLineWalkable($char->{pos_to}, $player->{pos_to})) ) {
ai_route($field{name}, $player->{pos_to}{x}, $player->{pos_to}{y},
attackOnRoute => 1,
distFromGoal => $config{followDistanceMin});
} else {
my ($targetpos, $actor, %pos);
foreach (@playersID) {
next unless $_;
$actor = $players{$_};
$pos{$actor->{pos_to}{x}}{$actor->{pos_to}{y}} = 1;
}
foreach (@npcsID) {
next unless $_;
$actor = $npcs{$_};
$pos{$actor->{pos_to}{x}}{$actor->{pos_to}{y}} = 1;
}
foreach (@monstersID) {
next unless $_;
$actor = $monsters{$_};
$pos{$actor->{pos_to}{x}}{$actor->{pos_to}{y}} = 1;
}
my @rectBlock = calcRectArea2($player->{pos_to}{x}, $player->{pos_to}{y},
$config{followDistanceMax}, $config{followDistanceMin});
my $blockCount = scalar(@rectBlock);
my $loopCount = 0;
do {
$targetpos = $rectBlock[int(rand($blockCount))];
$loopCount++;
} while ((!checkFieldWalkable(\%field, $targetpos->{x}, $targetpos->{y})
|| $pos{$targetpos->{x}}{$targetpos->{y}}) && ($blockCount > $loopCount));
if ($blockCount > $loopCount) {
stand() if ($char->{sitting});
$timeout{ai_sit_idle}{time} = time;
sendMove($targetpos->{x}, $targetpos->{y});
} else {
# Can not found a solution. Maybe stay! or move onto my master!!
# $targetpos = $player->{pos_to};
# stand() if ($char->{sitting});
# $timeout{ai_sit_idle}{time} = time;
# sendMove($targetpos->{x}, $targetpos->{y});
}
}
}
}
if ($args->{following} && $player && %{$player}) {
if ($config{'followSitAuto'} && $players{$args->{'ID'}}{'sitting'} == 1 && $chars[$config{'char'}]{'sitting'} == 0) {
sit();
}
my $dx = $args->{'last_pos_to'}{'x'} - $players{$args->{'ID'}}{'pos_to'}{'x'};
my $dy = $args->{'last_pos_to'}{'y'} - $players{$args->{'ID'}}{'pos_to'}{'y'};
$args->{'last_pos_to'}{'x'} = $players{$args->{'ID'}}{'pos_to'}{'x'};
$args->{'last_pos_to'}{'y'} = $players{$args->{'ID'}}{'pos_to'}{'y'};
if ($dx != 0 || $dy != 0) {
lookAtPosition($players{$args->{'ID'}}{'pos_to'}) if ($config{'followFaceDirection'});
}
}
}
}