--==[[English]]==--
I've done this persistent this week and I'm constantly testing and trying to improve it.
In the tests I performed I got better performance this way ...
1- Mage> Targeting> Reach or Away in Line if you use Waves, distance 3 or 4
2- As I do not play in pvp world I'm not sure it will be safe. I've put specs to work on the 'pvp' worlds safely, but nothing is perfect.
3- Order of the launch of the spells, if you want to change some order of magic in specific you will have to modify the code after line 106
==Mage: UE > Rune Area > Simple Rune (example: SD) > Wave 1 > Wave 2 > Wave 3 > Max Strike > Strong Strike > Normal Strike > Facc Strike
==EK: Utito > Exori Min > Exori Great > Exori > Exori Great Ico > Exori Hur > Exori Ico
==RP: Exevo Mas San> Rune Area> Exori San> Exori Gran Con> Exori Con
I personally tested on mages and paladins and knight only by the bot console.
At the moment I'm looking to lower the code to make it smaller.
In the next few days I will try to record a video of mage to have an example
Client 10 x Client 11 ==> (Mage:Targeting Keep Away or Away in Line) In client 10 when using potion the character has a "step back", because of this problem I noticed that some waves went wrong and in client 11 there is no such problem.
--==[[Portuguese]]==--
Eu fiz esse persistente nesta semana e estou constantemente testando e tentando melhora-lo.
Nos testes que realizei obtive melhor desempenho desse modo...
1- Mage > Targeting > Reach or Away in Line se for usar Waves, distance 3 or 4
2- Como eu não jogo em mundo pvp não tenho certeza estará seguro. Eu coloquei especificações para funcionar nos mundos pvp com segurança, mas nada é perfeito.
3- Ordem do lançamento das magias, caso queira alterar alguma ordem de magia em especifico terá que modicar o código depois da linha 106
-Mage: UE > Rune Area, Simple Rune (exemplo: SD) > Wave 1 > Wave 2 > Wave 3 > Max Strike > Strong Strike > Normal Strike > Facc Strike
-EK: Utito > Exori Min > Exori Gran > Exori > Exori Gran Ico > Exori Hur > Exori Ico
-RP: Exevo Mas San > Rune Area > Exori San > Exori Gran Con > Exori Con
Eu testei pessoalmente em 'mages e paladins' e 'knight' apenas pelo console do bot.
No momento estou procurando diminuir o código para deixar ele menor.
Nos próximos dias vou tentar gravar um video de mage para ter um exemplo
Client 10 x Client 11 ==> (Mage:Targeting Keep Away or Away in Line) No client 10 ao usar potion o personagem possui um "step back" por causa desse problema eu notei que algumas waves sairam errado e no client 11 não existe esse problema.
--==[[Persistent]]==--
--Spells and Runes Attacks (Runes and Waves, Strikes) Version 1.0.0
auto(100)
--Settings General
local UseSpells = true
local monstersArea = {'monster1', 'monster2'} --UE, RuneArea, Waves, Exori Min, Exori Gran, Exori, Exevo Mas San
local monsters = {'monster1', 'monster2'} --Rune Single, Strikes, Exori Gran Ico, Exori Hur, Exori Ico, Exori San, Exori Con
local Sections = {'Hunt'} --for example...{'Hunt'}....{'Floor 1', 'Floor 2'}
local MP = 15 --percentage MP cast UE, RuneArea, Waves
--PVP
local pvp = false --check pvp
local IgnorePlayers = true --waves/exori min (ignore players = true ... no ignore players = false)
local pvpDistance = 10 --check players around, if checked pvp
local SafeListPvp = {'char 1', 'char 2'}
--Rune
--Rune Area
local UseRune = false
local runename = 'avalanche rune'
local monstersRune = 3
--Sinple Rune
local UseSimpleRune = false
local runenamee = 'sudden death rune'
local monstersRunee = 1 --monsters around
local monstersHP = 20 --(less) percentage hp monsters
--==Mage
--UE
local UseUe = false
local UeType = 'exevo gran mas frigo'
local monstersUe = 6
--Waves
--Wave 1
local UseWave1 = true
local WaveType1 = 'exevo gran frigo hur'
local monstersWave1 = 1
--Wave 2
local UseWave2 = true
local WaveType2 = 'exevo tera hur'
local monstersWave2 = 1
--Wave 3
local UseWave3 = true
local WaveType3 = 'exevo frigo hur'
local monstersWave3 = 1
--Strikes
--Max Strike
local UseMax = true
local MaxType = 'exori max frigo'
local monstersMax = 1
--Strong Strike
local UseStrong = true
local StrongType = 'exori gran frigo'
local monstersStrong = 1
--Normal Strike
local UseNormal = true
local NormalType = 'exori frigo'
local monstersNormal = 1
--Facc Strike
local UseFacc = false
local FaccType = 'exori min flam'
local monstersFacc = 1
--==EK
--Utito
local UseUtito = true
local monstersUtito = 3
--Exori Min
local UseExoriMin = true
local monstersExoriMin = 3
--Exori Gran
local UseExoriGran = true
local monstersExoriGran = 3
--Exori
local UseExori = true
local monstersExori = 3
--Exori Gran Ico
local UseExoriGranIco = true
local monstersExoriGranIco = 1
--Exori Hur
local UseExoriHur = true
local monstersExoriHur = 1
--Exori Ico
local UseExoriIco = true
local monstersExoriIco = 1
--==RP
--Exevo Mas San
local UseMasSan = true
local monstersMasSan = 3
--Exori San
local UseSan = true
local monstersSan = 1
--Exori Gran Con
local UseGranCon = true
local monstersGranCon = 1
--Exori Con
local UseCon = true
local monstersCon = 1
--================================================== ============================
--================================================== ============================
local AttackRune = getarearunetile(unpack(monstersArea))
local WaveAround = {'beambig', 'beamsmall', 'waveverysmall', 'wavemedium', 'wavesmall', 'front', 'strike'}
local ExoriMinn = 'exori min'
if $connected then
if UseSpells then
if table.find(Sections, $wptsection) then
if ($lastprojectile.tox == $attacked.posx) and ($lastprojectile.toy == $attacked.posy) and (math.abs($lastprojectile.fromx - $posx) <= 1) and (math.abs($lastprojectile.fromy - $posy) <= 1) then
if $attacked.isshootable then
if table.find({'D', 'S'}, $vocshort) then
if $premium and UseUe and cancastspell(UeType) and maroundspell(UeType, '6x6', unpack(monstersArea)) >= monstersUe and ($mppc >= MP) and not pvp or (pvp and paroundfloorignore(pvpDistance, 1, unpack(SafeListPvp)) == 0) then
castspell(UeType)
wait(300,500)
elseif UseRune and (itemcount(runename) > 0) and cancastspell(runename) and ($level >= spellinfo(runename).level) and (AttackRune.amount >= monstersRune) and ($mppc >= MP) and not pvp or (pvp and paroundfloorignore(pvpDistance, 1, unpack(SafeListPvp)) == 0) then
useitemon(runename, 0, AttackRune.tile)
wait(300,500)
elseif UseSimpleRune and (itemcount(runenamee) > 0) and cancastspell(runenamee) and ($level >= spellinfo(runenamee).level) and (maroundreachable(10, unpack(monsters)) >= monstersRunee) and (table.find(monsters, $attacked.name) and ($attacked.hppc <= monstersHP)) then
useoncreature(runenamee, $attacked)
wait(300,500)
elseif UseWave1 and cancastspell(WaveType1) and ($mppc >= MP) and not pvp or (pvp and paroundfloorignore(pvpDistance, 1, unpack(SafeListPvp)) == 0) and (maroundspell(WaveType1, table.find(WaveAround, WaveType1.castarea:lower()) , unpack(monstersArea)) >= monstersWave1) then
pausewalking(1000)
castspellarea(WaveType1, monstersWave1, IgnorePlayers)
pausewalking(0)
wait(300,500)
elseif UseWave2 and cancastspell(WaveType2) and ($mppc >= MP) and not pvp or (pvp and paroundfloorignore(pvpDistance, 1, unpack(SafeListPvp)) == 0) and (maroundspell(WaveType2, table.find(WaveAround, WaveType2.castarea:lower()) , unpack(monstersArea)) >= monstersWave2) then
pausewalking(1000)
castspellarea(WaveType2, monstersWave2, IgnorePlayers)
pausewalking(0)
wait(300,500)
elseif UseWave3 and cancastspell(WaveType3) and ($mppc >= MP) and not pvp or (pvp and paroundfloorignore(pvpDistance, 1, unpack(SafeListPvp)) == 0) and (maroundspell(WaveType3, table.find(WaveAround, WaveType3.castarea:lower()) , unpack(monstersArea)) >= monstersWave3) then
pausewalking(1000)
castspellarea(WaveType3, monstersWave3, IgnorePlayers)
pausewalking(0)
wait(300,500)
elseif table.find(monsters, $attacked.name) then
if $premium and UseMax and cancastspell(MaxType) and ($level >= spellinfo(MaxType).level) and ($attacked.dist <= 3) and maroundreachable(10, unpack(monsters)) >= monstersMax then
castspell(MaxType)
wait(300,500)
elseif $premium and UseStrong and cancastspell(StrongType) and ($level >= spellinfo(StrongType).level) and ($attacked.dist <= 3) and maroundreachable(10, unpack(monsters)) >= monstersStrong then
castspell(StrongType)
wait(300,500)
elseif $premium and UseNormal and cancastspell(NormalType) and ($level >= spellinfo(NormalType).level) and ($attacked.dist <= 3) and maroundreachable(10, unpack(monsters)) >= monstersNormal then
castspell(NormalType)
wait(300,500)
elseif UseFacc and cancastspell(FaccType) and ($level >= spellinfo(FaccType).level) and ($attacked.dist <= 3) and maroundreachable(10, unpack(monsters)) >= monstersFacc then
castspell(FaccType)
wait(300,500)
end
end
elseif $vocshort == 'K' then
if $premium and UseUtito and cancastspell('utito tempo') and ($level >= spellinfo('utito tempo').level) and maroundreachable(10, unpack(monsters)) >= monstersUtito then
castspell('utito tempo')
wait(300,500)
elseif $premium and UseExoriMin and cancastspell('exori min') and ($level >= spellinfo('exori min').level) and (maroundspell('exori min', table.find(WaveAround, ExoriMinn.castarea:lower()) , unpack(monstersArea)) >= monstersExoriMin) and ($mppc >= MP) and not pvp or (pvp and paroundfloorignore(pvpDistance, 1, unpack(SafeListPvp)) == 0) then
pausewalking(1000)
castspellarea('exori min', monstersExoriMin, IgnorePlayers)
pausewalking(0)
wait(300,500)
elseif $premium and UseExoriGran and cancastspell('exori gran') and ($level >= spellinfo('exori gran').level) and maroundspell('exori gran', '1x1', unpack(monstersArea)) >= monstersExoriGran and ($mppc >= MP) and not pvp or (pvp and paroundfloorignore(pvpDistance, 1, unpack(SafeListPvp)) == 0) then
castspell('exori gran')
wait(300,500)
elseif $premium and UseExori and cancastspell('exori') and ($level >= spellinfo('exori').level) and maroundspell('exori', '1x1', unpack(monstersArea)) >= monstersExori and ($mppc >= MP) and not pvp or (pvp and paroundfloorignore(pvpDistance, 1, unpack(SafeListPvp)) == 0) then
castspell('exori')
wait(300,500)
elseif table.find(monsters, $attacked.name) then
if $premium and UseExoriGranIco and cancastspell('exori gran ico') and ($level >= spellinfo('exori gran ico').level) and ($attacked.dist <= 1) and maroundreachable(10, unpack(monsters)) >= monstersExoriGranIco then
castspell('exori gran ico')
wait(300,500)
elseif $premium and UseExoriHur and cancastspell('exori hur') and ($level >= spellinfo('exori hur').level) and ($attacked.dist <= 3) and maroundreachable(10, unpack(monsters)) >= monstersExoriHur then
castspell('exori hur')
wait(300,500)
elseif $premium and UseExoriIco and cancastspell('exori ico') and ($level >= spellinfo('exori ico').level) and ($attacked.dist <= 1) and maroundreachable(10, unpack(monsters)) >= monstersExoriIco then
castspell('exori ico')
wait(300,500)
end
end
elseif $vocshort == 'P' then
if $premium and UseMasSan and cancastspell('exevo mas san') and ($level >= spellinfo('exevo mas san').level) and maroundspell('exevo mas san', '3x3', unpack(monstersArea)) >= monstersMasSan and ($mppc >= MP) and not pvp or (pvp and paroundfloorignore(pvpDistance, 1, unpack(SafeListPvp)) == 0) then
castspell('exevo mas san')
wait(300,500)
elseif UseRune and (itemcount(runename) > 0) and cancastspell(runename) and ($level >= spellinfo(runename).level) and (AttackRune.amount >= monstersRune) and ($mppc >= MP) and not pvp or (pvp and paroundfloorignore(pvpDistance, 1, unpack(SafeListPvp)) == 0) then
useitemon(runename, 0, AttackRune.tile)
wait(300,500)
elseif table.find(monsters, $attacked.name) then
if $premium and UseSan and cancastspell('exori san') and ($level >= spellinfo('exori san').level) and ($attacked.dist <= 3) and (maroundreachable(10, unpack(monsters)) >= monstersSan) and not pvp or (pvp and paroundfloorignore(pvpDistance, 1, unpack(SafeListPvp)) == 0) then
castspell('exori san')
wait(300,500)
elseif $premium and UseGranCon and cancastspell('exori gran con') and ($level >= spellinfo('exori gran con').level) and ($attacked.dist >= 1) and maroundreachable(10, unpack(monsters)) >= monstersGranCon then
castspell('exori gran con')
wait(300,500)
elseif $premium and UseCon and cancastspell('exori con') and ($level >= spellinfo('exori con').level) and ($attacked.dist >= 1) and maroundreachable(10, unpack(monsters)) >= monstersCon then
castspell('exori con')
wait(300,500)
end
end
end
end
end
end
end
end
--==[[Example]]==--
I recorded this video when I was building the persistent and testing the changes, I'll try to make another video in the future.
================================================== =========================================
Eu gravei esse video quando estava construindo o persistente e testando as mudanças, tentarei fazer outro video futuramente.