I've found several "Advanced Paladin Shooters", but they all seem to be about being PvP-Safe with Paladin spells.
I'm looking for a script that is basically the same, but which also takes into account whether the ammo has been fired or not (as with the "Sync with spells"-option in WB).
Paladins looses way too much damage if this is not taken into account.
Im sure there must be some script like this somewhere?
Regards
Bollo
01-03-2017, 07:47 PM
Cisco
Quote:
Originally Posted by Bollo
Hello,
I've found several "Advanced Paladin Shooters", but they all seem to be about being PvP-Safe with Paladin spells.
I'm looking for a script that is basically the same, but which also takes into account whether the ammo has been fired or not (as with the "Sync with spells"-option in WB).
Paladins looses way too much damage if this is not taken into account.
Im sure there must be some script like this somewhere?
Regards
Bollo
I finished doing this persistent today. It might work for you. I use it daily.
Order of preference of the use of spells ==> MaSan(exevo mas san) ---> GranCon(exori gran con) ---> Con(exori con), if radius >= 5 ---> San(exori san), if radius <= 4
I intend in the future to add the option to launch rune.
The pvp option has never tested, since I never played in pvp, so I do not know if it will work.
--Attack Pally
auto(100)
local monsters = {'name 1', 'name 2'} --if wind 10 ==> {'Name'} or {'name'}.....if wind 11, only {'name'}
local HuntSections = {"Hunt"} --for example...{'Hunt'}....{'Floor 1', 'Floor 2'}
local pvp = false --check pvp
local MasSan = true --exevo mas san
local numberMonsters = 3 --monsters for mas san
local GranCon = true --exori gran con
local Con = true --exori con
local San = true --exori san
--Option
local LancerBeetle = false
----------------------------------------
if $connected then
if table.find(HuntSections, $wptsection) then
if MasSan and cancastspell('exevo mas san') and $level >= 50 and maroundspell('exevo mas san', '3x3', unpack(monsters)) >= numberMonsters and $mp >= 1300 and (paround(7) == 0 or not pvp) and $attacked.isshootable then
pausewalking(300)
cast('exevo mas san')
wait(300)
elseif table.find(monsters, $attacked.name) and $attacked.isshootable then
if GranCon and cancastspell('exori gran con') and $level >= 90 or ($attacked.dist >= 1 and (paround(3) > 0 and pvp)) then
cast('exori gran con')
wait(300)
elseif Con and cancastspell('exori con') and $level >= 23 and $attacked.dist >= 5 or ($attacked.dist >= 1 and (paround(3) > 0 and pvp)) then
cast('exori con')
wait(300)
elseif San and cancastspell('exori san') and $level >= 40 then
cast('exori san')
wait(300)
end
end
end
if LancerBeetle then
if maround(5, 'Lancer Beetle') >= 4 and cancastspell('exevo mas san') and maroundspell('exevo mas san', 'any', 'Lancer Beetle') >= 4 and (paround(7) == 0 or not pvp) then
pausewalking(300)
cast('exevo mas san')
wait(300)
end
end
end
Order of preference of the use of spells ==> MaSan(exevo mas san) ---> Rune ---> GranCon(exori gran con) ---> Con(exori con), if radius >= 5 ---> San(exori san), if radius <= 4
--Attack Pally
auto(100)
local monsters = {'name 1', 'name 2'} --if wind 10 ==> {'Name'} or {'name'}.....if wind 11, only {'name'}
local HuntSections = {"Hunt"} --for example...{'Hunt'}....{'Floor 1', 'Floor 2'}
local pvp = false --check pvp
local MasSan = true --exevo mas san
local Rune = false --check use rune
local RuneType = 'avalanche rune'
local numberMonsters = 3 --monsters for mas san or rune
local GranCon = true --exori gran con
local Con = true --exori con
local San = true --exori san
--Option
local LancerBeetle = false
local RuneLancerBeetle = false
----------------------------------------
local AttackRune = getarearunetile(not pvp, unpack(monsters))
if $connected then
if table.find(HuntSections, $wptsection) then
if MasSan and cancastspell('exevo mas san') and $level >= 50 and maroundspell('exevo mas san', '3x3', unpack(monsters)) >= numberMonsters and $mp >= 1300 and (paround(7) == 0 or not pvp) and $attacked.isshootable then
pausewalking(300)
cast('exevo mas san')
wait(300)
elseif Rune and itemcount(RuneType) > 0 and cancastspell(RuneType) and AttackRune.amount >= numberMonsters and $mp > 1300 and (paround(10) == 0 or not pvp) and $attacked.isshootable then
pausewalking(300)
useitemon(RuneType, 0, AttackRune.tile)
wait(300)
elseif table.find(monsters, $attacked.name) and $attacked.isshootable then
if GranCon and cancastspell('exori gran con') and $level >= 90 or ($attacked.dist >= 1 and (paround(3) > 0 and pvp)) then
cast('exori gran con')
wait(300)
elseif Con and cancastspell('exori con') and $level >= 23 and $attacked.dist >= 5 or ($attacked.dist >= 1 and (paround(3) > 0 and pvp)) then
cast('exori con')
wait(300)
elseif San and cancastspell('exori san') and $level >= 40 then
cast('exori san')
wait(300)
end
end
end
if LancerBeetle then
if maround(5, 'Lancer Beetle') >= 4 then
if MasSan and cancastspell('exevo mas san') and maroundspell('exevo mas san', 'any', 'Lancer Beetle') >= 4 and (paround(7) == 0 or not pvp) and $attacked.isshootable then
pausewalking(300)
cast('exevo mas san')
wait(300)
elseif RuneLancerBeetle and itemcount(RuneType) > 0 and cancastspell(RuneType) and AttackRune.amount >= numberMonsters and (paround(10) == 0 or not pvp) and $attacked.isshootable then
pausewalking(300)
useitemon(RuneType, 0, AttackRune.tile)
wait(300)
end
end
end
end
01-04-2017, 08:43 AM
Josh
Quote:
Originally Posted by Bollo
Hello,
I've found several "Advanced Paladin Shooters", but they all seem to be about being PvP-Safe with Paladin spells.
I'm looking for a script that is basically the same, but which also takes into account whether the ammo has been fired or not (as with the "Sync with spells"-option in WB).
Paladins looses way too much damage if this is not taken into account.
Im sure there must be some script like this somewhere?
Regards
Bollo
I'm not sure that there is but I feel like @Cisco is about to implement one! ;)
Basically what you need to do is to check for new projectiles using this iterator, if you loop at say 100ms then when you find a new projectile of the right type shoot a spell and wait 200 or so ms, it should do the trick.
01-04-2017, 11:15 AM
Imba
Just set spells in targeting instead of casting them by action
01-04-2017, 02:14 PM
Cisco
Quote:
Originally Posted by XtrmJosh
I'm not sure that there is but I feel like @Cisco is about to implement one! ;)
Basically what you need to do is to check for new projectiles using this iterator, if you loop at say 100ms then when you find a new projectile of the right type shoot a spell and wait 200 or so ms, it should do the trick.
I thought of doing it this way...
--Attack Pally
auto(200)
...blablabla
foreach newprojectile p do
if p.type == 32 and (p.tox == $posx) and (p.toy == $posy) and (p.fromx == $posx) and (p.fromy == $posy) then
...blablabla
The documentation says 32 is sudden death rune, where will I get the other numbers? :confused:
The Imba option seems tempting too. :rolleyes:
01-04-2017, 03:01 PM
Bollo
Quote:
Originally Posted by Imba
Just set spells in targeting instead of casting them by action
Well yes thats the obvious choice and what Im doing atm, but I want to optimize paladins to the max as with any other vocation, hence the request.
01-04-2017, 03:13 PM
Josh
Quote:
Originally Posted by Cisco
I thought of doing it this way...
--Attack Pally
auto(200)
...blablabla
foreach newprojectile p do
if p.type == 32 and (p.tox == $posx) and (p.toy == $posy) and (p.fromx == $posx) and (p.fromy == $posy) then
...blablabla
The documentation says 32 is sudden death rune, where will I get the other numbers? :confused:
The Imba option seems tempting too. :rolleyes:
Best way would be to see if you can work them out, just have a persistent running to print them to console and shoot an arrow, see what occurs... It should be pretty clear as long as it's only you and 1 target which isn't shooting projectiles :)
01-04-2017, 03:25 PM
Imba
Quote:
Originally Posted by Bollo
Well yes thats the obvious choice and what Im doing atm, but I want to optimize paladins to the max as with any other vocation, hence the request.
And why do you think using buil-in targeting isnt optimized?
01-04-2017, 05:51 PM
Cisco
Quote:
Originally Posted by XtrmJosh
Best way would be to see if you can work them out, just have a persistent running to print them to console and shoot an arrow, see what occurs... It should be pretty clear as long as it's only you and 1 target which isn't shooting projectiles :)
I found in the folder tibiadata > projectiles.xml
Could you look and see if it's all right? I just tested and it worked fine but I do not know if there is anything else to add to improve or not.
--Attack Pally
auto(100)
--Settings
local monstersArea = {'name 1', 'name 2'} --consider mas san, rune
local monsters = {'name 1', 'name 2'} --consider exori gran con, exori con, exori san
local HuntSections = {'Hunt'} --for example...{'Hunt'}....{'Floor 1', 'Floor 2'}
--Spells Areas (exevo mas san and runes)
local MasSan = true --exevo mas san
local Rune = false --check use rune
local RuneType = 'avalanche rune'
local numberMonsters = 3 --monsters for mas san, rune
local MP = 70 --percentage mp cast mas san, rune
--Single Atk (exori gran con, exori con and exori san)
local SmartAttack = true --automatically check if the monster is weaker to physical and holy, ==ONLY NO-PVP==
local GranCon = true --exori gran con
local Con = true --exori con
local San = true --exori san
--Option
local LancerBeetle = false
local RuneLancerBeetle = false
--PVP
local pvp = false --check pvp
local pvpDistance = 10 --check players around, if checked pvp
local SafeListPvp = {'char 1', 'char 2'}
----------------------------------------
local AttackRune = getarearunetile(unpack(monstersArea))
local SmartAtk = creatureinfo(unpack(monsters))
if $connected then
if table.find(HuntSections, $wptsection) then
foreach newprojectile p do
if table.find({1, 2, 3, 7, 8, 9, 14, 16, 19, 21, 22, 23, 24, 33, 34, 35, 40, 45, 48, 49, 50, 51}, p.type) and (p.fromx == $posx) and (p.fromy == $posy) and cooldown(SPELL_GROUP_ATTACK) == 0 then
if MasSan and cancastspell('exevo mas san') and ($level >= 50) and maroundspell('exevo mas san', '3x3', unpack(monstersArea)) >= numberMonsters and ($mppc >= MP) and not pvp or (pvp and paroundfloorignore(pvpDistance, 1, unpack(SafeListPvp)) == 0) and $attacked.isshootable then
pausewalking(300)
cast('exevo mas san')
wait(300,500)
elseif Rune and (itemcount(RuneType) > 0) and cancastspell(RuneType) and (AttackRune.amount >= numberMonsters) and ($mppc > MP) and not pvp or (pvp and paroundfloorignore(pvpDistance, 1, unpack(SafeListPvp)) == 0) and $attacked.isshootable then
pausewalking(300)
useitemon(RuneType, 0, AttackRune.tile)
wait(300,500)
elseif table.find(monsters, $attacked.name) and $attacked.isshootable then
if GranCon and cancastspell('exori gran con') and ($level >= 90) and (not SmartAttack or (SmartAttack and (SmartAtk.physicalmod > SmartAtk.holymod))) then
cast('exori gran con')
wait(300,500)
elseif Con and cancastspell('exori con') and ($level >= 23) and ($attacked.dist >= 5) and (not SmartAttack or (SmartAttack and (SmartAtk.physicalmod > SmartAtk.holymod))) then
cast('exori con')
wait(300,500)
elseif San and cancastspell('exori san') and ($level >= 40) and ($attacked.dist <= 4) and not pvp or (pvp and paroundfloorignore(pvpDistance, 1, unpack(SafeListPvp)) == 0) and (not SmartAttack or (SmartAttack and (SmartAtk.holymod > SmartAtk.physicalmod))) then
cast('exori san')
wait(300,500)
end
end
end
end
end
if LancerBeetle then
if maround(5, 'Lancer Beetle') >= 4 then
if MasSan and cancastspell('exevo mas san') and ($level >= 50) and maroundspell('exevo mas san', 'any', 'Lancer Beetle') >= 4 and not pvp or (pvp and paroundfloorignore(pvpDistance, 1, unpack(SafeListPvp)) == 0) and $attacked.isshootable then
pausewalking(300)
cast('exevo mas san')
wait(300,500)
elseif RuneLancerBeetle and itemcount(RuneType) > 0 and cancastspell(RuneType) and AttackRune.amount >= numberMonsters and not pvp or (pvp and paroundfloorignore(pvpDistance, 1, unpack(SafeListPvp)) == 0) and $attacked.isshootable then
pausewalking(300)
useitemon(RuneType, 0, AttackRune.tile)
wait(300,500)
end
end
end
end
01-04-2017, 06:12 PM
Josh
Quote:
Originally Posted by Cisco
I found in the folder tibiadata > projectiles.xml
Could you look and see if it's all right? I just tested and it worked fine but I do not know if there is anything else to add to improve or not.
--Attack Pally
auto(100)
local monsters = {'name 1', 'name 2'} --if wind 10 ==> {'Name'} or {'name'}.....if wind 11, only {'name'}
local HuntSections = {"Hunt"} --for example...{'Hunt'}....{'Floor 1', 'Floor 2'}
local pvp = false --check pvp
local MasSan = true --exevo mas san
local Rune = false --check use rune
local RuneType = 'avalanche rune'
local numberMonsters = 3 --monsters for mas san or rune
local GranCon = true --exori gran con
local Con = true --exori con
local San = true --exori san
--Option
local LancerBeetle = false
local RuneLancerBeetle = false
----------------------------------------
local AttackRune = getarearunetile(not pvp, unpack(monsters))
if $connected then
if table.find(HuntSections, $wptsection) then
foreach newprojectile p do
if table.find({1, 2, 3, 7, 8, 9, 14, 16, 19, 21, 22, 23, 24, 33, 34, 35, 40, 45, 48, 49, 50, 51}, p.type) and (p.fromx - $posx) and (p.fromy - $posy) then
if MasSan and cancastspell('exevo mas san') and $level >= 50 and maroundspell('exevo mas san', '3x3', unpack(monsters)) >= numberMonsters and $mp >= 1300 and (paround(7) == 0 or not pvp) and $attacked.isshootable then
pausewalking(300)
cast('exevo mas san')
wait(300)
elseif Rune and itemcount(RuneType) > 0 and cancastspell(RuneType) and AttackRune.amount >= numberMonsters and $mp > 1300 and (paround(10) == 0 or not pvp) and $attacked.isshootable then
pausewalking(300)
useitemon(RuneType, 0, AttackRune.tile)
wait(300)
elseif table.find(monsters, $attacked.name) and $attacked.isshootable then
if GranCon and cancastspell('exori gran con') and $level >= 90 or ($attacked.dist >= 1 and (paround(3) > 0 and pvp)) then
cast('exori gran con')
wait(300)
elseif Con and cancastspell('exori con') and $level >= 23 and $attacked.dist >= 5 or ($attacked.dist >= 1 and (paround(3) > 0 and pvp)) then
cast('exori con')
wait(300)
elseif San and cancastspell('exori san') and $level >= 40 then
cast('exori san')
wait(300)
end
end
end
end
end
if LancerBeetle then
if maround(5, 'Lancer Beetle') >= 4 then
if MasSan and cancastspell('exevo mas san') and maroundspell('exevo mas san', 'any', 'Lancer Beetle') >= 4 and (paround(7) == 0 or not pvp) and $attacked.isshootable then
pausewalking(300)
cast('exevo mas san')
wait(300)
elseif RuneLancerBeetle and itemcount(RuneType) > 0 and cancastspell(RuneType) and AttackRune.amount >= numberMonsters and (paround(10) == 0 or not pvp) and $attacked.isshootable then
pausewalking(300)
useitemon(RuneType, 0, AttackRune.tile)
wait(300)
end
end
end
end
You continue to amaze me. Are you able to do a stability test? Check how accurate it is over like 100 shots for instance? Would be very interested to see that. The reason the built in targeting isn't good is that it misses a lot of attacks, so I think this will also (unless it's actually Lucas' targeting logic that's broken).
There is one other way which ozzix had the brilliant idea to count items in ammo slot. Probably a bit late to mention now but if the result of the accuracy test is that it just isn't good enough, I think the ammo check would be an ideal replacement (at least where assassin stars / spears are not being used). Worth a thought, maybe there is some super hybrid of the two which gives us an ultra-reliable and super neat system...
Thanks. Tomorrow I will put to test on the 3 pally. One of them stayed 10h40min in the game and spent 1900 smp and 8700 arrows and made a profit of 290k, using targeting as Imba mentioned. Tomorrow if at that time he spend less supplements and hunting alone, as the character had hunted, he hears an improvement.
@Bollo
--Attack Pally
auto(100)
local monsters = {'name 1', 'name 2'} --if wind 10 ==> {'Name'} or {'name'}.....if wind 11, only {'name'}
local HuntSections = {"Hunt"} --for example...{'Hunt'}....{'Floor 1', 'Floor 2'}
local pvp = false --check pvp
local MasSan = true --exevo mas san
local Rune = false --check use rune
local RuneType = 'avalanche rune'
local numberMonsters = 3 --monsters for mas san or rune
local GranCon = true --exori gran con
local Con = true --exori con
local San = true --exori san
--Option
local LancerBeetle = false
local RuneLancerBeetle = false
----------------------------------------
local AttackRune = getarearunetile(not pvp, unpack(monsters))
if $connected then
if table.find(HuntSections, $wptsection) then
foreach newprojectile p do
if table.find({1, 2, 3, 7, 8, 9, 14, 16, 19, 21, 22, 23, 24, 33, 34, 35, 40, 45, 48, 49, 50, 51}, p.type) and (p.fromx == $posx) and (p.fromy == $posy) then
if MasSan and cancastspell('exevo mas san') and $level >= 50 and maroundspell('exevo mas san', '3x3', unpack(monsters)) >= numberMonsters and $mp >= 1300 and (paround(7) == 0 or not pvp) and $attacked.isshootable then
pausewalking(300)
cast('exevo mas san')
wait(300)
elseif Rune and itemcount(RuneType) > 0 and cancastspell(RuneType) and AttackRune.amount >= numberMonsters and $mp > 1300 and (paround(10) == 0 or not pvp) and $attacked.isshootable then
pausewalking(300)
useitemon(RuneType, 0, AttackRune.tile)
wait(300)
elseif table.find(monsters, $attacked.name) and $attacked.isshootable then
if GranCon and cancastspell('exori gran con') and $level >= 90 or ($attacked.dist >= 1 and (paround(3) > 0 and pvp)) then
cast('exori gran con')
wait(300)
elseif Con and cancastspell('exori con') and $level >= 23 and $attacked.dist >= 5 or ($attacked.dist >= 1 and (paround(3) > 0 and pvp)) then
cast('exori con')
wait(300)
elseif San and cancastspell('exori san') and $level >= 40 then
cast('exori san')
wait(300)
end
end
end
end
end
if LancerBeetle then
if maround(5, 'Lancer Beetle') >= 4 then
if MasSan and cancastspell('exevo mas san') and maroundspell('exevo mas san', 'any', 'Lancer Beetle') >= 4 and (paround(7) == 0 or not pvp) and $attacked.isshootable then
pausewalking(300)
cast('exevo mas san')
wait(300)
elseif RuneLancerBeetle and itemcount(RuneType) > 0 and cancastspell(RuneType) and AttackRune.amount >= numberMonsters and (paround(10) == 0 or not pvp) and $attacked.isshootable then
pausewalking(300)
useitemon(RuneType, 0, AttackRune.tile)
wait(300)
end
end
end
end
Thanks. Tomorrow I will put to test on the 3 pally. One of them stayed 10h40min in the game and spent 1900 smp and 8700 arrows and made a profit of 290k, using targeting as Imba mentioned. Tomorrow if at that time he spend less supplements and hunting alone, as the character had hunted, he hears an improvement.
@Bollo
--Attack Pally
auto(100)
local monsters = {'name 1', 'name 2'} --if wind 10 ==> {'Name'} or {'name'}.....if wind 11, only {'name'}
local HuntSections = {"Hunt"} --for example...{'Hunt'}....{'Floor 1', 'Floor 2'}
local pvp = false --check pvp
local MasSan = true --exevo mas san
local Rune = false --check use rune
local RuneType = 'avalanche rune'
local numberMonsters = 3 --monsters for mas san or rune
local GranCon = true --exori gran con
local Con = true --exori con
local San = true --exori san
--Option
local LancerBeetle = false
local RuneLancerBeetle = false
----------------------------------------
local AttackRune = getarearunetile(not pvp, unpack(monsters))
if $connected then
if table.find(HuntSections, $wptsection) then
foreach newprojectile p do
if table.find({1, 2, 3, 7, 8, 9, 14, 16, 19, 21, 22, 23, 24, 33, 34, 35, 40, 45, 48, 49, 50, 51}, p.type) and (p.fromx == $posx) and (p.fromy == $posy) then
if MasSan and cancastspell('exevo mas san') and $level >= 50 and maroundspell('exevo mas san', '3x3', unpack(monsters)) >= numberMonsters and $mp >= 1300 and (paround(7) == 0 or not pvp) and $attacked.isshootable then
pausewalking(300)
cast('exevo mas san')
wait(300)
elseif Rune and itemcount(RuneType) > 0 and cancastspell(RuneType) and AttackRune.amount >= numberMonsters and $mp > 1300 and (paround(10) == 0 or not pvp) and $attacked.isshootable then
pausewalking(300)
useitemon(RuneType, 0, AttackRune.tile)
wait(300)
elseif table.find(monsters, $attacked.name) and $attacked.isshootable then
if GranCon and cancastspell('exori gran con') and $level >= 90 or ($attacked.dist >= 1 and (paround(3) > 0 and pvp)) then
cast('exori gran con')
wait(300)
elseif Con and cancastspell('exori con') and $level >= 23 and $attacked.dist >= 5 or ($attacked.dist >= 1 and (paround(3) > 0 and pvp)) then
cast('exori con')
wait(300)
elseif San and cancastspell('exori san') and $level >= 40 then
cast('exori san')
wait(300)
end
end
end
end
end
if LancerBeetle then
if maround(5, 'Lancer Beetle') >= 4 then
if MasSan and cancastspell('exevo mas san') and maroundspell('exevo mas san', 'any', 'Lancer Beetle') >= 4 and (paround(7) == 0 or not pvp) and $attacked.isshootable then
pausewalking(300)
cast('exevo mas san')
wait(300)
elseif RuneLancerBeetle and itemcount(RuneType) > 0 and cancastspell(RuneType) and AttackRune.amount >= numberMonsters and (paround(10) == 0 or not pvp) and $attacked.isshootable then
pausewalking(300)
useitemon(RuneType, 0, AttackRune.tile)
wait(300)
end
end
end
end
Looks awesome mate! Im gonna test it myself and post results :)
local monsters = {'name 1', 'name 2'}
local HuntSections = {'Hunt'} --for example...{'Hunt'}....{'Floor 1', 'Floor 2'}
local MasSan = true --exevo mas san
local Rune = false --check use rune
local RuneType = 'avalanche rune'
local numberMonsters = 3 --monsters for mas san or rune
local MP = 50 --percentage mp cast mas san and/or rune
local GranCon = true --exori gran con
local Con = true --exori con
local San = true --exori san
--Option
local LancerBeetle = false
local RuneLancerBeetle = false
--PVP
local pvp = false --check pvp
local pvpDistance = 10 --check players around, if checked pvp
local SafeListPvp = {'char 1', 'char 2'}
----------------------------------------
local AttackRune = getarearunetile(not pvp, unpack(monsters))
if $connected then
if table.find(HuntSections, $wptsection) then
foreach newprojectile p do
if table.find({1, 2, 3, 7, 8, 9, 14, 16, 19, 21, 22, 23, 24, 33, 34, 35, 40, 45, 48, 49, 50, 51}, p.type) and (p.fromx == $posx) and (p.fromy == $posy) then
if MasSan and cancastspell('exevo mas san') and $level >= 50 and maroundspell('exevo mas san', '3x3', unpack(monsters)) >= numberMonsters and $mppc >= MP and not pvp or (pvp and paroundfloorignore(pvpDistance, 1, unpack(SafeListPvp)) == 0) and $attacked.isshootable then
pausewalking(300)
cast('exevo mas san')
wait(300)
elseif Rune and itemcount(RuneType) > 0 and cancastspell(RuneType) and AttackRune.amount >= numberMonsters and $mppc > MP and not pvp or (pvp and paroundfloorignore(pvpDistance, 1, unpack(SafeListPvp)) == 0) and $attacked.isshootable then
pausewalking(300)
useitemon(RuneType, 0, AttackRune.tile)
wait(300)
elseif table.find(monsters, $attacked.name) and $attacked.isshootable then
if GranCon and cancastspell('exori gran con') and $level >= 90 then
cast('exori gran con')
wait(300)
elseif Con and cancastspell('exori con') and $level >= 23 and $attacked.dist >= 5 then
cast('exori con')
wait(300)
elseif San and cancastspell('exori san') and $level >= 40 and $attacked.dist <= 4 and not pvp or (pvp and paroundfloorignore(pvpDistance, 1, unpack(SafeListPvp)) == 0) then
cast('exori san')
wait(300)
end
end
end
end
end
if LancerBeetle then
if maround(5, 'Lancer Beetle') >= 4 then
if MasSan and cancastspell('exevo mas san') and maroundspell('exevo mas san', 'any', 'Lancer Beetle') >= 4 and not pvp or (pvp and paroundfloorignore(pvpDistance, 1, unpack(SafeListPvp)) == 0) and $attacked.isshootable then
pausewalking(300)
cast('exevo mas san')
wait(300)
elseif RuneLancerBeetle and itemcount(RuneType) > 0 and cancastspell(RuneType) and AttackRune.amount >= numberMonsters and not pvp or (pvp and paroundfloorignore(pvpDistance, 1, unpack(SafeListPvp)) == 0) and $attacked.isshootable then
pausewalking(300)
useitemon(RuneType, 0, AttackRune.tile)
wait(300)
end
end
end
end
After an exhaustively test (30 hours approx) I can say it's perfect, never missed a spell. However I only tried strikes.
*clap*
Cisco ftw. :)
I for one give up this persistent because I can not improve it. I still do not like using it I think very slowly, the targeting is much faster. I had even thought of adding "utori san," but I do not know what else to do.
This is the last version I made yesterday.
--Attack Pally
auto(100)
--Settings
local monstersArea = {'name 1', 'name 2'} --consider mas san, rune
local monsters = {'name 1', 'name 2'} --consider exori gran con, exori con, exori san
local HuntSections = {'Hunt'} --for example...{'Hunt'}....{'Floor 1', 'Floor 2'}
--Spells Areas (exevo mas san and runes)
local MasSan = true --exevo mas san
local Rune = false --check use rune
local RuneType = 'avalanche rune'
local numberMonsters = 3 --monsters for mas san, rune
local MP = 70 --percentage mp cast mas san, rune
--Single Atk (exori gran con, exori con and exori san)
local SmartAttack = true --automatically check if the monster is weaker to physical and holy, ==ONLY NO-PVP==
local GranCon = true --exori gran con
local Con = true --exori con
local San = true --exori san
--Option
local LancerBeetle = false
local RuneLancerBeetle = false
--PVP
local pvp = false --check pvp
local pvpDistance = 10 --check players around, if checked pvp
local SafeListPvp = {'char 1', 'char 2'}
----------------------------------------
local AttackRune = getarearunetile(unpack(monstersArea))
local SmartAtk = creatureinfo(unpack(monsters))
if $connected then
if table.find(HuntSections, $wptsection) then
foreach newprojectile p do
if table.find({1, 2, 3, 7, 8, 9, 14, 16, 19, 21, 22, 23, 24, 33, 34, 35, 40, 45, 48, 49, 50, 51}, p.type) and (p.fromx == $posx) and (p.fromy == $posy) then
if MasSan and cancastspell('exevo mas san') and ($level >= 50) and maroundspell('exevo mas san', '3x3', unpack(monstersArea)) >= numberMonsters and ($mppc >= MP) and not pvp or (pvp and paroundfloorignore(pvpDistance, 1, unpack(SafeListPvp)) == 0) and $attacked.isshootable then
pausewalking(300)
cast('exevo mas san')
wait(300,500)
elseif Rune and (itemcount(RuneType) > 0) and cancastspell(RuneType) and (AttackRune.amount >= numberMonsters) and ($mppc >= MP) and not pvp or (pvp and paroundfloorignore(pvpDistance, 1, unpack(SafeListPvp)) == 0) and $attacked.isshootable then
pausewalking(300)
useitemon(RuneType, 0, AttackRune.tile)
wait(300,500)
elseif table.find(monsters, $attacked.name) and $attacked.isshootable then
if GranCon and cancastspell('exori gran con') and ($level >= 90) and (not SmartAttack or (SmartAttack and (SmartAtk.physicalmod > SmartAtk.holymod))) then
cast('exori gran con')
wait(300,500)
elseif San and cancastspell('exori san') and ($level >= 40) and ($attacked.dist <= 4) and not pvp or (pvp and paroundfloorignore(pvpDistance, 1, unpack(SafeListPvp)) == 0) and (not SmartAttack or (SmartAttack and not pvp and (SmartAtk.holymod > SmartAtk.physicalmod))) then
cast('exori san')
wait(300,500)
elseif Con and cancastspell('exori con') and ($level >= 23) and (not SmartAttack or (SmartAttack and (SmartAtk.physicalmod > SmartAtk.holymod))) then
cast('exori con')
wait(300,500)
end
end
end
end
end
if LancerBeetle then
if maround(5, 'Lancer Beetle') >= 4 then
if MasSan and cancastspell('exevo mas san') and ($level >= 50) and maroundspell('exevo mas san', 'any', 'Lancer Beetle') >= 4 and not pvp or (pvp and paroundfloorignore(pvpDistance, 1, unpack(SafeListPvp)) == 0) and $attacked.isshootable then
pausewalking(300)
cast('exevo mas san')
wait(300,500)
elseif RuneLancerBeetle and itemcount(RuneType) > 0 and cancastspell(RuneType) and AttackRune.amount >= numberMonsters and not pvp or (pvp and paroundfloorignore(pvpDistance, 1, unpack(SafeListPvp)) == 0) and $attacked.isshootable then
pausewalking(300)
useitemon(RuneType, 0, AttackRune.tile)
wait(300,500)
end
end
end
end