I use a plugin avoidSkill.pl cause error, please tell me what to do.
I attach a file plugin already.
Code: Select all
package avoidSkill;
use strict;
use Globals;
use Plugins;
use Utils;
use Misc;
use AI;
use Network::Send;
use Commands;
use Log qw(message warning error debug);
Plugins::register('avoidSkill', 'Avoid from skills', \&onUnload);
my $hooks = Plugins::addHooks(
['AI_pre', \&AI_hook],
['is_casting', \&hookAvoidSkill]
);
my $prefix = "avoidSkill_";
my $prefix2 = "_afterCast";
sub onUnload {
Plugins::delHooks($hooks);
}
sub hookAvoidSkill {
return if (!$config{autoAvoidSkill});
my $hookName = shift;
my $args = shift;
my $sourceID = $args->{sourceID};
my $targetID = $args->{targetID};
my $source = $args->{source};
my $skill = $args->{skill};
my $skillID = $args->{skillID};
my $x = $args->{x};
my $y = $args->{y};
my $i = 0;
while (exists $config{$prefix.$i}) {
my ($dist, %coords);
if ($x != 0 || $y != 0) {
# If $dist is positive we are in range of the attack?
$coords{x} = $x;
$coords{y} = $y;
$dist = judgeSkillArea($skillID) - distance($char->{pos_to}, \%coords);
}
if (existsInList($config{$prefix.$i}, $skill->name) && $sourceID ne $accountID) {
if ($dist > 0 || $targetID eq $accountID) {
AI::queue("avoidskill");
AI::args->{timeout} = ($source->{casting}->{castTime} - $config{$prefix.$i."_delay"})/1000;
AI::args->{timeout} = 0 if (AI::args->{timeout}*1000 == $source->{casting}->{castTime} || AI::args->{timeout} < 0);
AI::args->{time} = time;
my $lvl;
my $skillUse = new Skills(name => $config{$prefix.$i."_use"});
if ($config{$prefix.$i."_lvl"}>$char->{skills}{$skillUse->handle}->{lv} || !$config{$prefix.$i."_lvl"}) {
$lvl = $char->{skills}{$skillUse->handle}->{lv};
} else {
$lvl = $config{$prefix.$i."_lvl"};
}
AI::args->{lvl} = $lvl;
AI::args->{skillID} = $skillUse->id if ($lvl > 0);
if (ai_getSkillUseType($skillUse->handle)) {
AI::args->{char_state} = whenGroundStatus($char->{pos_to}, $skillUse->name);
} else {
AI::args->{char_state} = existsInList(join(",", keys %{$char->{statuses}}), $skillUse->name);
}
AI::args->{i} = $i;
Commands::run($config{$prefix.$i."_doCommand"}) if ($config{$prefix.$i."_doCommand"} ne "");
}
}
$i++;
}
}
sub AI_hook {
AI::dequeue if (AI::action eq "avoidskill" && AI::args->{skillID} eq "");
if (AI::action eq "avoidskill" && timeOut(AI::args)) {
my $i = AI::args->{i};
my $skillUse = new Skills(id => AI::args->{skillID});
if (ai_getSkillUseType($skillUse->handle)) {
if (whenGroundStatus($char->{pos_to}, $skillUse->name) == AI::args->{char_state}) {
$messageSender->sendSkillUseLoc(AI::args->{skillID}, AI::args->{lvl}, $char->{pos_to}{x}, $char->{pos_to}{y});
} elsif (!AI::args->{dequeue} && $config{$prefix.$i.$prefix2}) {
AI::args->{timeout} = $config{$prefix.$i.$prefix2."_wait"};
AI::args->{time} = time;
my $lvl;
my $skillUseAfter = new Skills($config{$prefix.$i.$prefix2."_use"});
if ($config{$prefix.$i.$prefix2."_lvl"}>$char->{skills}{$skillUseAfter->handle}->{lv} || !$config{$prefix.$i.$prefix2."_lvl"}) {
$lvl = $char->{skills}{$skillUseAfter->handle}->{lv};
} else {
$lvl = $config{$prefix.$i.$prefix2."_lvl"};
}
AI::args->{lvl} = $lvl;
AI::args->{skillID} = $skillUseAfter->id if ($lvl > 0);
AI::args->{char_state} = whenGroundStatus($char->{pos_to}, $skillUseAfter->name);
AI::args->{dequeue} = 1;
} else {
Commands::run($config{$prefix.$i.$prefix2."_doCommand"}) if ($config{$prefix.$i.$prefix2."_doCommand"} ne "");
AI::dequeue;
}
} else {
if (existsInList(join(",", keys %{$char->{statuses}}), $skillUse->name) == AI::args->{char_state}) {
$messageSender->sendSkillUse(AI::args->{skillID}, AI::args->{lvl}, $accountID);
} elsif (!AI::args->{dequeue} && $config{$prefix.$i.$prefix2}) {
AI::args->{timeout} = $config{$prefix.$i.$prefix2."_wait"};
AI::args->{time} = time;
my $lvl;
my $skillUseAfter = new Skills($config{$prefix.$i.$prefix2."_use"});
if ($config{$prefix.$i.$prefix2."_lvl"}>$char->{skills}{$skillUseAfter->handle}->{lv} || !$config{$prefix.$i.$prefix2."_lvl"}) {
$lvl = $char->{skills}{$skillUseAfter->handle}->{lv};
} else {
$lvl = $config{$prefix.$i.$prefix2."_lvl"};
}
AI::args->{lvl} = $lvl;
AI::args->{skillID} = $skillUseAfter->id if ($lvl > 0);
AI::args->{char_state} = existsInList(join(",", keys %{$char->{statuses}}), $skillUseAfter->name);
AI::args->{dequeue} = 1;
} else {
Commands::run($config{$prefix.$i.$prefix2."_doCommand"}) if ($config{$prefix.$i.$prefix2."_doCommand"} ne "");
AI::dequeue;
}
}
}
}
return 1;