I just use this action and now works.

PHP Code:
init start
 
    local Monsters 
= {"Medusa""Serpent Spawn""Hydra"}
 
    
local Players = {
        
Consider false,
        
Distance 10,
        
FloorDifference 1,
        
SafeList = {"Bubble""Eternal Oblivion"},
    }
 
    
local Spells = {
        {
Name "exori gran"Amount 4},
        {
Name "exori"Amount 2},
        {
Name "exori min"Amount 2},
        {
Name "exori ico"Hppc 10},
        {
Name "exori hur"Hppc 10},
        {
Name "utito tempo"Amount 4},
    }
 
    
local SpecialAreas = {
--        {
min xmax xmin ymax yz}
    }
 
    
local UseTargetState false
    
    
-- DO NOT CHANGE ANYTHING BELOW THIS LINE
 
    local i
LastFloorExhaust 1$posz$timems
 
    
while Spells[i] ~= nil do
        
Spells[i].Info spellinfo(Spells[i].Name)
 
        if 
Spells[i].Info.words == 0 then
            table
.remove(Spellsi)
        else
            
Spells[i].Monsters Spells[i].Monsters or Monsters
            Spells
[i].NeedDirection table.find({"WaveSmall""WaveMedium""WaveVerySmall""WaveBig""BeamSmall""BeamBig""Front""Strike"}, Spells[i].Info.castarea) ~= nil
            Spells
[i].AttackSupport Spells[i].Info.group:match("Support") ~= nil
 
            table
.lower(Spells[i].Monsters)
            
1
        end
    end
 
init end
 
auto
(200400)
 
if 
$posz ~= LastFloor then
    LastFloor
Exhaust $posz$timems 2000
    
return
end
 
if $timems >= Exhaust and ($targeting or not UseTargetStatethen
    
for _Spell in ipairs(Spells) do
        if 
cancast(Spell.Info) and not isinsidearea(SpecialAreasthen
            
if Spell.Amount and (not Players.Consider or paroundfloorignore(Players.DistancePlayers.FloorDifferenceunpack(Players.SafeList)) == 0then
                local BestAmount
BestDir 0$self.dir
 
                
if Spell.NeedDirection then
                    
for DirAmount in pairs({0000}) do
                        
Amount maroundspell(Spell.NameDirunpack(Spell.Monsters))
                        
                        if 
Amount BestAmount or (Amount >= BestAmount and Dir == $self.dirthen
                            BestAmount
BestDir AmountDir
                        end
                    end
                
else
                    
BestAmount not Spell.AttackSupport and maroundspell(Spell.NameBestDirunpack(Spell.Monsters)) or maround(1falseunpack(Spell.Monsters))
                
end
                
                
if BestAmount >= math.max(Spell.Amount1then
                    
while $self.dir ~= BestDir do
                        
turn(BestDirwaitping()
                    
end
                    cast
(Spell.Namewaitping()
                
end
            
elseif Spell.Hppc and $attacked.hppc >= math.max(Spell.Hppc1) and table.find(Spell.Monsters$attacked.name:lower()) and cancast(Spell.Info$attackedthen
                cast
(Spell.Namewaitping()
            
end
        end
    end
end 
please, someone close the thread