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