diff --git a/src/Misc.pm b/src/Misc.pm index 46324ae807..dd6144cb44 100644 --- a/src/Misc.pm +++ b/src/Misc.pm @@ -4913,6 +4913,8 @@ sub checkSelfCondition { if ($config{$prefix . "_timeout"}) { return 0 unless timeOut($ai_v{$prefix . "_time"}, $config{$prefix . "_timeout"}) } if ($config{$prefix . "_inLockOnly"} > 0) { return 0 unless ($field->baseName eq $config{lockMap}); } if ($config{$prefix . "_notWhileSitting"} > 0) { return 0 if ($char->{sitting}); } + if ($config{$prefix . "_notWhileCasting"} > 0) { return 0 if (exists $char->{casting}); } + if ($config{$prefix . "_whileCasting"} > 0) { return 0 unless (exists $char->{casting}); } if ($config{$prefix . "_notInTown"} > 0) { return 0 if ($field->isCity); } if ($config{$prefix . "_inTown"} > 0) { return 0 unless ($field->isCity); } if (defined $config{$prefix . "_monstersCount"}) { diff --git a/src/Network/Receive.pm b/src/Network/Receive.pm index bf241c2914..8fa21d732a 100644 --- a/src/Network/Receive.pm +++ b/src/Network/Receive.pm @@ -11534,6 +11534,8 @@ sub skill_use_failed { } else { $errorMessage = T('Unknown error'); } + + delete $char->{casting}; warning TF("Skill %s failed: %s (error number %s)\n", Skill->new(idn => $skillID)->getName(), $errorMessage, $type), "skill"; Plugins::callHook('packet_skillfail', { diff --git a/src/Network/Receive/ServerType0.pm b/src/Network/Receive/ServerType0.pm index dd84d8318e..8d0c2972d0 100644 --- a/src/Network/Receive/ServerType0.pm +++ b/src/Network/Receive/ServerType0.pm @@ -1348,6 +1348,8 @@ sub skill_use_location { my $source = Actor::get($sourceID); my $skillName = Skill->new(idn => $skillID)->getName(); my $disp = skillUseLocation_string($source, $skillName, $args); + + delete $source->{casting}; # Print skill use message my $domain = ($sourceID eq $accountID) ? "selfSkill" : "skill"; diff --git a/src/Network/Receive/kRO/Sakexe_0.pm b/src/Network/Receive/kRO/Sakexe_0.pm index 729a37a0ed..48b11d3d29 100644 --- a/src/Network/Receive/kRO/Sakexe_0.pm +++ b/src/Network/Receive/kRO/Sakexe_0.pm @@ -1323,6 +1323,8 @@ sub skill_use_location { my $source = Actor::get($sourceID); my $skillName = Skill->new(idn => $skillID)->getName(); my $disp = skillUseLocation_string($source, $skillName, $args); + + delete $source->{casting}; # Print skill use message my $domain = ($sourceID eq $accountID) ? "selfSkill" : "skill";