• You've discovered RedGuides, an EverQuest multi-boxing and scripting community 🧙‍♀️⚙️. We want you to play several EQ characters at once, come join us and say hello! 👋

  • A TLP without truebox has thawed (Very Vanilla ready)
    Frostreaver
Resource icon

Release Skills2 0.4.3

Download
Thanks for reporting. Even that if you are doing something wrong I could code it better with some controls.
I will look straight into it :)

Update
So by looking at it I think
Attachment 37786: is due to you not having a target
Attachment 37787: Spells not defined in your config file, typo etc.

I will add some controls to it.
Pardon my noobishness - i don't know how to get an export of the errors....

Creating ini file....

...ata\Local\VeryVanilla\MacroQuest\Release\Lua\skills2.Lua:289: attempt to concatenate a nil value
stack traceback:
...ata\Local\VeryVanilla\MacroQuest\Release\Lua\skills2.Lua in function 'Cast Spells'
...ata\Local\VeryVanilla\MacroQuest\Release\Lua\skills2.Lua:396: in main chunk

then it shuts down

As I said, it works fine for every other class I've tried it on and that has been several
 
I can see that you are not using the latest version of skills2.Lua
Please ensure to update.
 
I made a new version that fix both issues. Let me know if you wan't to test it before I release it.
I also added the function to "Focus Specialize skill" so you can select a skill to level up first.
 
Blasty updated Skills2 with a new update entry:

Focus Specialize skill

This update holds a few things
  • Implemeted Focus Specialize skill (Will increase this skill before all others - defined in the INI file)
  • Shadow Knight bug fix
  • Check if the spell are in the spellbook
  • Bugfix with distance check
  • Added missing target notification
Note that there is a MQ2 bug with skillcap for specialized skills.

And thanks for all the feedback!

Read the rest of this update entry...
 
Hi. Was using this with a paladin. It doesn't seem to be destroying Summoned: Hammer of Wrath. Filled up inventory and then bugged out.
 
Hi. Was using this with a paladin. It doesn't seem to be destroying Summoned: Hammer of Wrath. Filled up inventory and then bugged out.
Try to replace
Line around 54
Code:
local destroy_forage = {
        ["Roots"] = true,
        ["Your Forage Item"] = true
    }
    while mq.TLO.Cursor.ID() do
        if destroy_forage[mq.TLO.Cursor.Name()] then
        mq.cmd('/destroy')
        end
        mq.cmd('/autoinv')
        mq.delay(100)
    end

Line around 148
Code:
local CursorCheck = function()
    local destroy_summon = {
        ["Hammer of Wrath"] = true,
        ["Your Summon Item"] = true
    }
    while mq.TLO.Cursor.ID() do
        if destroy_summon[mq.TLO.Cursor.Name()] then
        mq.cmd('/destroy')
        end
        mq.cmd('/autoinv')
        mq.delay(100)
    end
end
 
Well Blasty I tried out your Spells2.lua and heres what I have found....

1. Overview is okay but you could go into a little more detail about how it works.

2. Their is no information on its use... Dose it work on all classes? Do you have to set up the spells first in the spell gems if you are trying to raise up your spell skills.

3. Above you mentioned and INI, where is it located and does this create the ini or do you have to create one for it to use?

4. Where do you put the Spells2.lua file? Do you have to create a folder for it?

5. Does this work in the Lua Task Manager to control start and stop of the lua file?

I am not saying that this is bad. I ran into the same thing as nubcake and started looking for answers.... I am sure that this is good but when you can't get it running then its kind of a let down.

Zeb
The Questions you ask here are exactly what I'm looking for. Where can I find these answers? I'd like to try Skills2 but have never tried to use a Lua script before. Where do I put the scripts once I've downloaded it. I put it in the Lua folder but when I type /Lua run skills2 I get the message that it can't find Skills2 in the filesystem. What do I do to make it work?
Thank you for asking these important basic questions. Is there a resource here for beginners that guides us through downloading, installing and running luas?
 
Last edited:
I'm sorry @Zebadiah I feel this feedback you give is more to show you how the basic wortk with MQNext and Lua.
I fully agree that a Lua script should be very easy to use and I really like all feedback I get. I strive to implement as much as I can. :)

Anyway if you need help in understanding skills2 feel free to PM me on Discord and I'll gladly help you.
The Questions that Zebadiah ask here are exactly what I'm looking for. Where can I find these answers? I'd like to try Skills2 but have never tried to use a Lua script before. Where do I put the scripts once I've downloaded it? I put it in the Lua folder but when I type /Lua run skills2 I get the message that it can't find Skills2 in the filesystem. What do I do to make it work?
Is there a resource here for beginners that guides us through downloading, installing and running luas?
 
The Questions you ask here are exactly what I'm looking for. Where can I find these answers? I'd like to try Skills2 but have never tried to use a lua script before. Where do I put the scripts once I've downloaded it. I put it in the lua folder but when I type /lua run skills2 I get the message that it can't find Skills2 in the filesystem. What do I do to make it work?
Thank you for asking these important basic questions. Is there a resource here for beginners that guides us through downloading, installing and running luas?

your best bet for keeping all the "extra" things that are on Redguides, but not part of the very vanilla compile, is to "watch" the first page on a resource's page.. so on the overview section of this resource, there is the watch button on right side.. select that.. then once you refresh your Redguides launcher, the resource will show up in the list .. so under luas, skills2 will show up, and you just let it install it for you

Easier than you trying to figure where to put stuff.. in some cases, there are some files in the root Lua, then some additional files in subfolders.. so if you miss one, or wrong folder, it wont work.. this method eliminates all that..

Hope that helps?
 
your best bet for keeping all the "extra" things that are on Redguides, but not part of the very vanilla compile, is to "watch" the first page on a resource's page.. so on the overview section of this resource, there is the watch button on right side.. select that.. then once you refresh your Redguides launcher, the resource will show up in the list .. so under luas, skills2 will show up, and you just let it install it for you

Easier than you trying to figure where to put stuff.. in some cases, there are some files in the root lua, then some additional files in subfolders.. so if you miss one, or wrong folder, it wont work.. this method eliminates all that..

Hope that helps?
Thank you so much! That worked perfectly. Is there a resource file or instruction manual that I can access to learn things like this? There is so much that I don't know I don't know! Where can I go to learn other things like this that have been staring me in the face and I never knew it.
I'm very grateful.
 
hey blasty I added in Intimidation for myself just figured I'd letcha know it was missing
not entirely sure of all the npcs it works on but I know blacksmith Gerta in PoK and the GH training dummies for sure
 
Last edited:
Is there a GUI for this Lua? I tried to stop the Lua with the command /stops and all it does is say "Stopping after this round..." stays like that for ever.

Super great Lua thanks
 
Thanks for getting back to me. I will try it next time I run it.
 
I had a couple of issues trying to get this to work for me, mostly sorted out when I worked out that the skills2.ini file that's created is put in the mq2/config folder, not the Lua folder with the skills2.Lua! I would love if this were in the instructions somewhere!
The second issue I had is that it doesn't seem to allow for a set of primary and secondary specializations for each class. I'd love to see it with something like

[Enchanter] Abjuration=Minor Shielding Alteration=Strengthen Conjuration=Mesmerize Divination=True North Evocation=Chaotic Feedback PrimarySpecialization=Alteration SecondarySpecialization=Conjuration

This way you could use it for multiple classes at the same time, and have a sensible set of defaults - maybe even with selection boxes in the Lua script window. It would iterate through PrimarySpecialization first, then SecondarySpecialization, then the remaining skills, (possibly with a check on character level and class first to see if it was relevant yet)

Some further information on 2022 changes to specializations is at https://www.redguides.com/community/threads/specialization-guide-strat-2022.82181/

A reasonably sensible default would be
Cleric: Alt/Abj
Druid: Alt/Conj
Enchanter: Alt/Conj
Magician: Conj/Evoc
Necro: Alt/Conj
Shaman: Alt/Conj
Wizard: Evoc/Abj
with a note on these defaults in the description, and a pointer to where/how to change them, and a note that there's a quest in Temple of Solusek Ro to change specializations if you get it wrong or change your mind.
 
I've had a go at implementing the primary/secondary specialisation, and here's what I've come up with. I'm not sure how foolproof it is, but it worked on the limited testing I was able to do.

I've left in all my debug comments (which I used print() for, not debug() )

[CODE lang="Lua" title="primary and secondary specialisations"]--[[
Skills2 0.4.2 - Original Author: Blasty
Maintained for RedGuides by Blasty 2022-07-08
Purpose: The Lua script will help you level up almost all your skills (Active, Passive and spell)
Feature: Will auto increase most of your skills, meditate when needed and stop when finished
]]
local mq = require('mq')

local SPA = false
local SAA = false
local SBEG = false
local SS = false
local SSAFE = false

-- UseMerc: If you want to use a Merc set to "true" (recommended)
local UseMerc = false

local castingskills = {'Abjuration','Alteration','Conjuration','Divination','Evocation'}
local memspells = function (skills) end

mq.delay(1000)
mq.cmd('/mqclear')
mq.cmd.echo('Running Lua Skills2 0.4.2 by Blasty')
mq.cmd.echo('If you like the script make sure to give some RedCent to the author: Blasty')

local PrePACheck = function ()
if mq.TLO.Me.Skill('sneak')() and not mq.TLO.Me.AbilityReady('sneak')() then mq.cmd('/doability "sneak"') end
if mq.TLO.Me.Skill('hide')() and not mq.TLO.Me.AbilityReady('hide')() then mq.cmd('/doability "hide"') end
end

local PassiveAbility = function ()
if not mq.TLO.Me.Standing() then mq.cmd('/stand') end
if mq.TLO.Me.Skill('forage')() and mq.TLO.Me.AbilityReady('forage')() and mq.TLO.Me.Skill('forage')() < mq.TLO.Skill('forage').SkillCap() then mq.cmd('/doability "forage"') end
if mq.TLO.Me.Skill('mend')() and mq.TLO.Me.AbilityReady('mend')() and mq.TLO.Me.Skill('mend')() < mq.TLO.Skill('mend').SkillCap() then mq.cmd('/doability "mend"') end
if mq.TLO.Me.Skill('sneak')() and mq.TLO.Me.AbilityReady('sneak')() and mq.TLO.Me.Skill('sneak')() < mq.TLO.Skill('sneak').SkillCap() then
mq.cmd('/doability "sneak"')
mq.delay(1000)
mq.cmd('/doability "sneak"')
end
if mq.TLO.Me.Skill('hide')() and mq.TLO.Me.AbilityReady('hide')() and mq.TLO.Me.Skill('hide')() < mq.TLO.Skill('hide').SkillCap() then
mq.cmd('/doability "hide"')
mq.delay(1000)
mq.cmd('/doability "hide"')
end
if mq.TLO.Me.Skill('feign death')() and mq.TLO.Me.AbilityReady('feign death')() and mq.TLO.Me.Skill('feign death')() < mq.TLO.Skill('feign death').SkillCap() then
mq.cmd('/doability "feign death"')
mq.delay(500)
mq.cmd('/stand')
end
if mq.TLO.Me.Skill('tracking')() and mq.TLO.Me.AbilityReady('tracking')() and mq.TLO.Me.Skill('tracking')() < mq.TLO.Skill('tracking').SkillCap() then
mq.cmd('/doability "tracking"')
mq.delay(500)
if mq.TLO.Window('TrackingWnd').Child('TRW_DoneButton')() then mq.cmd('/notify TrackingWnd TRW_DoneButton leftmouseup') end
end
while mq.TLO.Cursor.ID() do
--mq.cmd('/destroy')
mq.cmd('/autoinv')
mq.delay(100)
end
if mq.TLO.Me.Skill('tracking')() >= mq.TLO.Skill('tracking').SkillCap() and mq.TLO.Me.Skill('feign death')() >= mq.TLO.Skill('feign death').SkillCap() and mq.TLO.Me.Skill('hide')() >= mq.TLO.Skill('hide').SkillCap() and mq.TLO.Me.Skill('sneak')() >= mq.TLO.Skill('sneak').SkillCap() and mq.TLO.Me.Skill('mend')() >= mq.TLO.Skill('mend').SkillCap() and mq.TLO.Me.Skill('forage')() >= mq.TLO.Skill('forage').SkillCap() then
mq.cmd.echo('All passive skills are maxed!')
SPA = false
end
end

local CheckMerc = function ()
if mq.TLO.Me.Mercenary() ~= 'ACTIVE' then
mq.cmd('/multiline ; /beep ; /beep ; /beep ;')
mq.cmd.echo('\ar You do not have a Merc up! \ax Unsuspend your Merc and try again ')
SAA = false
return false
end

if mq.TLO.Target.Type() ~= 'Mercenary' and mq.TLO.Group.Members() then
for i=1,mq.TLO.Group.Members() do
if (mq.TLO.Group.Member(i).Mercenary()) then
local MercID = mq.TLO.Group.Member(i).ID()
mq.cmd('/target id '..MercID)
mq.cmd('/nav target')
mq.delay(1000)
end
end
end
mq.cmd('/face')
return true
end

local ActiveAbility = function ()
if UseMerc then
if not CheckMerc() then do return end end
end
if mq.TLO.Target.ID() and mq.TLO.Target.Distance() >= 12 then mq.cmd('/nav target') end
if mq.TLO.Me.Skill('kick')() and mq.TLO.Me.AbilityReady('kick')() and mq.TLO.Me.Skill('kick')() < mq.TLO.Skill('kick').SkillCap() then mq.cmd('/doability "kick"') end
if mq.TLO.Me.Skill('flying kick')() and mq.TLO.Me.AbilityReady('flying kick')() and mq.TLO.Me.Skill('flying kick')() < mq.TLO.Skill('flying kick').SkillCap() then mq.cmd('/doability "flying kick"') end
if mq.TLO.Me.Skill('frenzy')() and mq.TLO.Me.AbilityReady('frenzy')() and mq.TLO.Me.Skill('frenzy')() < mq.TLO.Skill('frenzy').SkillCap() then mq.cmd('/doability "frenzy"') end
if mq.TLO.Me.Skill('slam')() and mq.TLO.Me.AbilityReady('slam')() and mq.TLO.Me.Skill('bash')() < mq.TLO.Skill('bash').SkillCap() then mq.cmd('/doability "slam"') end
if mq.TLO.Me.Skill('round kick')() and mq.TLO.Me.AbilityReady('round kick')() and mq.TLO.Me.Skill('round kick')() < mq.TLO.Skill('round kick').SkillCap() then mq.cmd('/doability "round kick"') end
if mq.TLO.Me.Skill('tiger claw')() and mq.TLO.Me.AbilityReady('tiger claw')() and mq.TLO.Me.Skill('tiger claw')() < mq.TLO.Skill('tiger claw').SkillCap() then mq.cmd('/doability "tiger claw"') end
if mq.TLO.Me.Skill('Taunt')() and mq.TLO.Me.AbilityReady('Taunt')() and mq.TLO.Me.Skill('Taunt')() < mq.TLO.Skill('Taunt').SkillCap() then mq.cmd('/doability "Taunt"') end
if mq.TLO.Me.Skill('Disarm')() and mq.TLO.Me.AbilityReady('Disarm')() and mq.TLO.Me.Skill('Disarm')() < mq.TLO.Skill('Disarm').SkillCap() then mq.cmd('/doability "Disarm"') end
if mq.TLO.Me.Skill('Backstab')() and mq.TLO.Me.AbilityReady('Backstab')() and mq.TLO.Me.Skill('Backstab')() < mq.TLO.Skill('Backstab').SkillCap() then mq.cmd('/doability "Backstab"') end
if mq.TLO.Me.Skill('bash')() and mq.TLO.Me.AbilityReady('bash')() and mq.TLO.Me.Skill('bash')() < mq.TLO.Skill('bash').SkillCap() and mq.TLO.InvSlot('offhand').Item.Type.Find('shield') then mq.cmd('/doability "bash"') end
if mq.TLO.Me.Skill('bash')() >= mq.TLO.Skill('bash').SkillCap() and mq.TLO.Me.Skill('Backstab')() >= mq.TLO.Skill('Backstab').SkillCap() and mq.TLO.Me.Skill('Disarm')() >= mq.TLO.Skill('Disarm').SkillCap() and mq.TLO.Me.Skill('Taunt')() >= mq.TLO.Skill('Taunt').SkillCap() and mq.TLO.Me.Skill('tiger claw')() >= mq.TLO.Skill('tiger claw').SkillCap() and mq.TLO.Me.Skill('round kick')() >= mq.TLO.Skill('round kick').SkillCap() and mq.TLO.Me.Skill('frenzy')() >= mq.TLO.Skill('frenzy').SkillCap() and mq.TLO.Me.Skill('flying kick')() >= mq.TLO.Skill('flying kick').SkillCap() and mq.TLO.Me.Skill('kick')() >= mq.TLO.Skill('kick').SkillCap() then
mq.cmd.echo('All active skills are maxed!')
SAA = false
end
end

local Begging = function ()
if mq.TLO.Me.Skill('Begging')() >= mq.TLO.Skill('Begging').SkillCap() then
if mq.TLO.Zone.ID() == 383 then
mq.cmd.echo('Begging is maxed out! returning to POK')
mq.cmd('/travelto "The Plane of Knowledge"')
else
mq.cmd.echo('Begging is maxed out!')
end
SBEG = false
do return end
end
if mq.TLO.Zone.ID() and mq.TLO.Zone.ID() ~= 383 then
mq.cmd('/travelto "Freeportwest"')
end
while mq.TLO.Navigation.Active() or mq.TLO.Me.Zoning() do
mq.delay(3000)
end

if mq.TLO.Zone.ID() == 383 then
mq.cmd('/target Diggs')
if mq.TLO.Target.Distance() >= 12 then
mq.cmd('/nav locxy 132 -120')
while mq.TLO.Navigation.Active() do
mq.delay(1000)
end
mq.cmd('/nav target')
while mq.TLO.Navigation.Active() do
mq.delay(1000)
end
end
if mq.TLO.Me.Skill('Begging')() and mq.TLO.Me.AbilityReady('Begging')() and mq.TLO.Me.Skill('Begging')() < mq.TLO.Skill('Begging').SkillCap() then mq.cmd('/doability "Begging"') end
end
end

local CursorCheck = function()
while mq.TLO.Cursor.ID() do
--mq.cmd('/destroy')
mq.cmd('/autoinv')
mq.delay(100)
end
end

local InitIniFile = function ()
if not mq.TLO.Ini('Skills2.ini',mq.TLO.Me.Class(),'Abjuration')() or not mq.TLO.Ini('Skills2.ini',mq.TLO.Me.Class(),'Alteration')() or not mq.TLO.Ini('Skills2.ini',mq.TLO.Me.Class(),'Conjuration')() or not mq.TLO.Ini('Skills2.ini',mq.TLO.Me.Class(),'Divination')() or not mq.TLO.Ini('Skills2.ini',mq.TLO.Me.Class(),'Evocation')() then
mq.cmd.echo('Creating Ini file...')
if mq.TLO.Me.Class() == 'Beastlord' then
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Abjuration" "Endure Cold"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Alteration" "Salve"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Conjuration" "Summon Drink"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Divination" "Sense Animals"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Evocation" "Blast of Frost"')
end
if mq.TLO.Me.Class() == 'Cleric' then
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Abjuration" "Endure Poison"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Alteration" "Minor Healing"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Conjuration" "Halo of Light"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Divination" "True North"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Evocation" "Strike"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "PrimarySpecialisation" "Alteration"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "SecondarySpecialisation" "Abjuration"')
end
if mq.TLO.Me.Class() == 'Druid' then
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Abjuration" "Skin like Wood"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Alteration" "Minor Healing"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Conjuration" "Summon Food"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Divination" "Camouflage"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Evocation" "Burst of Fire"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "PrimarySpecialisation" "Alteration"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "SecondarySpecialisation" "Conjuration"')
end
if mq.TLO.Me.Class() == 'Enchanter' then
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Abjuration" "Minor Shielding"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Alteration" "Strengthen"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Conjuration" "Mesmerize"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Divination" "True North"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Evocation" "Chaotic Feedback"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "PrimarySpecialisation" "Alteration"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "SecondarySpecialisation" "Conjuration"')
end
if mq.TLO.Me.Class() == 'Necromancer' then
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Abjuration" "Minor Shielding"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Alteration" "Lifetap"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Conjuration" "Coldlight"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Divination" "True North"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Evocation" "Word of Shadow"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "PrimarySpecialisation" "Alteration"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "SecondarySpecialisation" "Conjuration"')
end
if mq.TLO.Me.Class() == 'Magician' then
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Abjuration" "Minor Shielding"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Alteration" "Renew Elements"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Conjuration" "Summon Brass Choker"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Divination" "True North"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Evocation" "Burst of Flame"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "PrimarySpecialisation" "Evocation"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "SecondarySpecialisation" "Conjuration"')
end
if mq.TLO.Me.Class() == 'Paladin' then
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Abjuration" "Courage"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Alteration" "Salve"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Conjuration" "Hammer of Wrath"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Divination" "True North"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Evocation" "Cease"')
end
if mq.TLO.Me.Class() == 'Ranger' then
mq.cmd.echo('Starting')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Abjuration" "Endure Fire"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Alteration" "Salve"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Conjuration" "Dance of the Fireflies"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Divination" "Glimpse"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Evocation" "Ignite"')
end
if mq.TLO.Me.Class() == 'Shadow Knight' then
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Abjuration" "Endure Cold"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Alteration" "Siphon Strength"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Conjuration" "Disease Cloud"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Divination" "Sense the Dead"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Evocation" "Ward Undead"')
end
if mq.TLO.Me.Class() == 'Shaman' then
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Abjuration" "Endure Cold"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Alteration" "Minor Healing"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Conjuration" "Summon Drink"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Divination" "True North"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Evocation" "Burst of Flame"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "PrimarySpecialisation" "Alteration"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "SecondarySpecialisation" "Conjuration"')
end
if mq.TLO.Me.Class() == 'Wizard' then
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Abjuration" "Minor Shielding"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Alteration" "Root"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Conjuration" "Halo of Light"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Divination" "True North"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "Evocation" "Blast of Cold"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "PrimarySpecialisation" "Evocation"')
mq.cmd('/ini "Skills2.ini" "'.. mq.TLO.Me.Class() .. '" "SecondarySpecialisation" "Abjuration"')
end
mq.cmd('/ini "Skills2.ini" "Focus Specialize skill" "Specialize"')
mq.cmd('/ini "Skills2.ini" "Focus Specialize skill" "Note" "Define:Abjuration,Alteration,Conjuration,Divination, Evocation (only one skill) or leave it empty to skip focus"')
mq.cmd.echo('Ini file created')
end
end

memspells = function (skills)
local ValidatesOk = true
local wait = function (i)
while not mq.TLO.Me.SpellReady(i)() do
mq.delay(100)
end
end
for i=1, #skills do
if mq.TLO.Me.Gem(i)() ~= mq.TLO.Ini('Skills2.ini',mq.TLO.Me.Class(),skills)() then
if mq.TLO.Me.Book(mq.TLO.Ini('Skills2.ini',mq.TLO.Me.Class(),skills)())() then
mq.cmd('/memspell '..i..' "'..mq.TLO.Ini('Skills2.ini',mq.TLO.Me.Class(),skills)())
wait(i)
else
print('\arMissing spell: '..mq.TLO.Ini('Skills2.ini',mq.TLO.Me.Class(),skills)())
mq.cmd('/beep')
ValidatesOk = false
end
end
end
if not ValidatesOk then mq.cmd('/lua stop Skills2') end
if not mq.TLO.Me.Standing() then mq.cmd('/stand') end
end

local CastSpells = function (skills)
local run = false
local CastSkill


if mq.TLO.Me.PctMana() < 10 then
mq.cmd.echo('Low on mana - medding to 100%')
mq.cmd('/sit')
while mq.TLO.Me.PctMana() < 99 do
mq.delay(10000)
end
end

if UseMerc then
if not CheckMerc() then
SS = false
return false
end
end

if mq.TLO.Target.ID()<=0 then
print('\arWarning! A target is needed for some spells')
mq.cmd('/beep')
end

for i=1, #skills do
if skills == 'Abjuration' then
specName = 'Abjure'
else specName = skills
end

-- print("School: ", skills, " ", mq.TLO.Me.Skill(skills)(), " / ", mq.TLO.Me.SkillCap(skills)(),
-- " Specialization ", mq.TLO.Me.Skill('Specialize '..specName)(), " / ", mq.TLO.Me.SkillCap('Specialize '..specName)())

if mq.TLO.Me.Skill(skills)() < mq.TLO.Skill(skills).SkillCap() or
-- mq.TLO.Me.SkillCap('Specialize '..specName)() <= 0) or
mq.TLO.Me.Skill('Specialize '..specName)() < mq.TLO.Me.SkillCap('Specialize '..specName)() then
mq.cmd('/cast "'.. mq.TLO.Ini('Skills2.ini',mq.TLO.Me.Class(),skills)() ..'"')
while mq.TLO.Me.Casting() do
mq.delay(100)
end
mq.delay(1500)
CursorCheck()
run = true
end
end

if not run then
SS = false
mq.cmd.echo('\ayAll spell abilities and specialize abilities are \a-gmaxed \ayout...')
end
end

local TrainSpells = function()
local SkillsToTrain

InitIniFile()


local primarySpec = mq.TLO.Ini('Skills2.ini', mq.TLO.Me.Class(), 'PrimarySpecialisation')()
local secondSpec = mq.TLO.Ini("Skills2.ini", mq.TLO.Me.Class(), "SecondarySpecialisation")()

-- print("Character is a level ",mq.TLO.Me.Level(), " ", mq.TLO.Me.Class())

-- print("Primary spec in ini is ", mq.TLO.Ini('Skills2.ini', mq.TLO.Me.Class(), 'PrimarySpecialisation'))
-- print("Secondary spec in ini is ", mq.TLO.Ini("Skills2.ini", mq.TLO.Me.Class(), "SecondarySpecialisation"))

-- print("Char has points spent in Secondary Forte: ",mq.TLO.Me.AltAbility('Secondary Forte').PointsSpent())

local primarySpecName

-- for skillcaps on specializations, we use mq.TLO.Me.SkillCap() rather than mq.TLO.Skill().SkillCap
-- because the cap in general at a level is different to the cap for a particular character at a level
-- due to how EQ changes caps based on your specialization.

if primarySpec ~= nil then
primarySpecName = 'Specialize '..primarySpec
if primarySpec == 'Abjuration' then primarySpecName = 'Abjure' end
-- print("skillcap of primarySpec: ", primarySpecName, " : ", mq.TLO.Me.SkillCap(primarySpecName)())
if mq.TLO.Me.SkillCap(primarySpecName)() == 0 then
primarySpec = nil
primarySpecName = nil
-- print("char has no spec skill")
end
else
primarySpec = nil
primarySpecName = nil
end
-- print("Effective Primary spec name is ", primarySpecName)

local secondSpecName

if secondSpec then
secondSpecName= 'Specialize '..secondSpec
if secondSpec == 'Abjuration' then secondSpecName = 'Specialize Abjure' end
-- print('secondspecname = ', secondSpecName, '; ', mq.TLO.Me.Skill(secondSpecName)(), "/", mq.TLO.Me.SkillCap(secondSpecName)())
if mq.TLO.Me.SkillCap(secondSpecName)() <= 0 or
mq.TLO.Me.AltAbility('Secondary Forte').PointsSpent() <=0 then
secondSpec = nil
secondSpecName = nil
end
end

-- print("Effective Secondary spec name is ", secondSpecName)

if primarySpec ~= nil then
-- print('primaryspec not nil')
if mq.TLO.Me.Skill(primarySpecName)() < mq.TLO.Me.SkillCap(primarySpecName)() - 40 then
-- print('primary spec needs training - skillstotrain is primary: ',primarySpec)
SkillsToTrain = {primarySpec}
elseif secondSpecName ~= nil then
-- print('secondspec not nill')
if mq.TLO.Me.Skill(secondSpecName)() < mq.TLO.Me.SkillCap(secondSpecName)() - 40 then
-- print('Train primary and secondary skills - ', primarySpec, ' & ', secondarySpec)
SkillsToTrain= {primarySpec, secondSpec}
else
-- print("Let's train them all")
SkillsToTrain = castingskills
end
end
else
-- print("Let's train them all")
SkillsToTrain = castingskills
end

-- print('castingskills is length ',#castingskills)
-- print('SkillsToTrain is length ', #SkillsToTrain)
-- print('{PrimarySpec} is ',{primarySpec},' , length ', #{primarySpec})
-- for i = 1 , #SkillsToTrain do print("Training ", SkillsToTrain) end
memspells(SkillsToTrain)
CastSpells(SkillsToTrain)
end

local safefall = function ()
if not mq.TLO.Me.Skill('Safe fall')() then
print('\ar You do not have Safefall as a skill- Ending safefall')
SSAFE = false
do return end
end
if mq.TLO.Me.Skill('Safe fall')() >= mq.TLO.Skill('Safe fall').SkillCap() then
print('Safefall is maxed out!')
SSAFE = false
do return end
end
if mq.TLO.Zone.ID() ~= 202 then
mq.cmd('/travel "POKnowledge"')
while mq.TLO.Navigation.Active() or mq.TLO.Me.Zoning() do
mq.delay(3000)
end
end
if mq.TLO.Zone.ID() == 202 then
mq.cmd('/nav locxyz 803 -376 -96')
while mq.TLO.Navigation.Active() do
mq.delay(100)
end
mq.cmd('/nomodkey /keypress forward hold')
mq.delay(1200)
mq.cmd('/nomodkey /keypress forward')
end
end

mq.bind('/SSAFE', function()
SSAFE = true
mq.cmd.echo('\ayDoing Safefall. Please note that this will take you to POK.')
end)

mq.bind('/SPA', function()
SPA = true
mq.cmd.echo('\ayDoing passive skills...')
end)

mq.bind('/SAA', function()
SAA = true
mq.cmd.echo('\ayDoing active skills...')
if not UseMerc then
mq.cmd.echo('Note: Make sure to have a target to skill up on (Damage etc)')
end
end)

mq.bind('/SBEG', function()
SBEG = true
mq.cmd.echo('\ayDoing begging. Please note that this will take you to West Freeport and return to POK once done!')
end)

mq.bind('/SS', function()
SS = true
mq.cmd.echo('\ayDoing skills for spells...')
if not UseMerc then
mq.cmd.echo('Note: Make sure to have a target to skill up on (Damage etc)')
end
end)

mq.bind('/SDA', function()
SPA = true
SAA = true
SS = true
mq.cmd.echo('\ayDoing all skills (Begging excluded')
end)

mq.bind('/StopS', function()
SPA = false
SAA = false
SS = false
SSAFE = false
mq.cmd.echo('\ayStopping after this round...')
end)

mq.cmd.echo('')
mq.cmd.echo('\a-gTo max out all passive skills like Forage, Mend...: \ay/SPA')
mq.cmd.echo('\a-gTo max out all active skills like Kick, Backstab...: \ay/SAA')
mq.cmd.echo('\a-gTo max out all spells abilities like Alteration, Conjuration...: \ay/SS')
mq.cmd.echo('\a-gTo max out begging: \ay/SBEG')
mq.cmd.echo('\a-gTo max out safefall: \ay/SSAFE')
mq.cmd.echo('\a-gTo max all skills: \ay/SDA \a-g (Begging and Safefall excluded)')
mq.cmd.echo('\a-gStopping everything.: \ay/StopS')
mq.cmd.echo('')

-- pre check for rouges
PrePACheck()

while true do
-- Waiting for inputs...
if SPA then PassiveAbility() end
if SAA then ActiveAbility() end
if SS then TrainSpells() end
if SBEG then Begging() end
if SSAFE then safefall() end
mq.delay(1000)
end[/CODE]
 
I have a bunch of level 40 clerics. I started using this to cap their skills. My evocation on one of the clerics, was the skill that got the higher specialization cap of 205, instead of 50. However, the evocation cap of 205 was reached, while the specialization was just 198. So, the Lua stopped practicing evocation. I am guessing that building specialization is not a priority of this Lua, and it is just a happy side benefit. I propose, as a possible future upgrade of this Lua, to also pay attention to building specializations.
 
I used the safefall for my monk. Had to download a mesh for POK, for it to work. Once I got it working, it worked fine, but I can't help but wonder if the perfectness of the turns would not be obvious, to other people, that a macro was in effect. As a human, I couldn't make the preciseness of those turns to save my life. Maybe find a new location, in an area that few people visit anymore? I mean, it takes place right by the little bank, where hundreds of people hang out. Someone has got to notice.
 
I used the safefall for my monk. Had to download a mesh for POK, for it to work. Once I got it working, it worked fine, but I can't help but wonder if the perfectness of the turns would not be obvious, to other people, that a macro was in effect. As a human, I couldn't make the preciseness of those turns to save my life. Maybe find a new location, in an area that few people visit anymore? I mean, it takes place right by the little bank, where hundreds of people hang out. Someone has got to notice.
I would hope that anyone that uses MQ have their Mesh in place.
POK has been static for a ton of years :)
 
I have a bunch of level 40 clerics. I started using this to cap their skills. My evocation on one of the clerics, was the skill that got the higher specialization cap of 205, instead of 50. However, the evocation cap of 205 was reached, while the specialization was just 198. So, the LUA stopped practicing evocation. I am guessing that building specialization is not a priority of this LUA, and it is just a happy side benefit. I propose, as a possible future upgrade of this LUA, to also pay attention to building specializations.
I will look into this
 
Not sure if you would bother changing the begging location--- Butcherblock Mountains "Agent of Change" at the docks gives a skill up every 5 begs. Would be much faster than Freeport.
 
Release Skills2

Users who are viewing this thread

Back
Top
Cart