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