• You've discovered RedGuides 📕 an EverQuest multi-boxing community 🛡️🧙🗡️. We want you to play several EQ characters at once, come join us and say hello! 👋
  • IS THIS SITE UGLY? Change the look. To dismiss this notice, click the X --->

Strategy - Anashti Sul, Damsel of Decay TBM Group mission LEM (1 Viewer)

Joined
Jan 17, 2007
RedCents
925¢
Could use some help getting this LEM working.
I was able to defeat the event but this LEM was definitely not working properly.

*** Event Strat***
My crew SHD, SHM, ENC, MAG, BST, NEC all running CWTN plugins
Put SHD in mode 4 on center platform with Anashti
Put BST on opposite side of platform in mode 1
Put SHM on mode 2 to follow tank when he gets ported down at mob health 56% - this may not have been necessary as the SHM may have been able to heal from where she was up top and could have stayed mode 1 also
Put the rest on the casters on mode 1 at distance of about 30 making sure they had good LoS.
When mob ports down at 56% health leave all casters up top and just tank until he ports back up. For me he was almost dead when he ported back up.

CWTN settings
Make sure UseCure is off
Make sure UseMelee is off
Turn on BYOS temporarily and remove any disease or corruption spells. Load Eradicate Disease on your Cure toon.

Ideally with this setup and the LEM the toons that can self cure will selectively cure themselves depending on the debuff they get and ask for Eradicate Disease from your cure toon using MQ2BuffMe


Anashti Sul, Damsel of Decay LEM:
local mq = require('mq')
local required_zone = 'exaltedb'
local cureSpell = 'Eradicate Disease'
local cures = {
     BST={name="Nature's Salve",type='aa'},
     CLR={name='Purified Spirits',type='aa'},
     DRU={name='Purified Spirits',type='aa'},
     NEC={name='Embrace the Decay',type='aa'},
     SHM={name='Purified Spirits',type='aa'},
     SHD={name='Purity of Death',type='aa'}
    }

local function on_load()
    if mq.TLO.Zone.ShortName() ~= required_zone then return end
    local cure = cures[mq.TLO.Me.Class.ShortName()]
    local Spellname = cureSpell
    if mq.TLO.Me.Gem(Spellname)() > 0 then
        local cureCaster = mq.TLO.Me.Name ()
    end
end

local function condition()
if mq.TLO.Me.Buff('Withering Physicality XIII').ID() ~= nil or mq.TLO.Me.Buff('Withering Faith XIII').ID() ~= nil then
    return true
    end
end

local function cast(spell)
    mq.cmdf('/cast %s', spell.RankName())
    mq.delay(50+spell.MyCastTime())
end

local function use_aa(aa)
    mq.cmdf('/alt activate %s', aa.ID())
    mq.delay(50+aa.Spell.CastTime())
end

local function cure_ready(cure)
    if mq.TLO.Me.Gem(Spellname)() > 0 then
        return mq.TLO.Me.SpellReady(Spellname) and not mq.TLO.Me.Casting()
    elseif cure.type == 'aa' then
        return mq.TLO.Me.AltAbilityReady(cure.name) and not mq.TLO.Me.Casting()
    end
end

local function action()
    local my_class = mq.TLO.Me.Class.ShortName()
    local cure = cures[my_class]
    -- if not a cure class, return
    if cure == nil then
        mq.cmd('/tell %s buffme "Eradicate Disease"',cureCaster)
    end   
    -- if cure ability isn't ready, return
    if my_class ~= cureCaster and not cure_ready(cure) then
        mq.cmdf('/tell %s buffme "Eradicate Disease"',cureCaster ) else
            mq.cmdf('/target %s', mq.TLO.Me.Name())
            mq.cmdf('/cast %s', Spellname())
    end

    if cure ~= nil and cure_ready(cure) then
        use_aa(mq.TLO.Me.AltAbility(cure.name))
    end
end   
  
return {onload=on_load, condfunc=condition, actionfunc=action}
 
on_load is only called at the time LEM starts or you enable the event. you probably don't want to use it the way you're using it. if you start LEM before you're at the zone, you might never initialize that stuff you have in there.

mq.TLO.Me.Gem(Spellname)() > 0 is this always going to be a number? might break comparing nil to number if not.

local cureCaster = mq.TLO.Me.Name ()
idk if Lua cares about that extra space you have there

mq.cmdf('/cast %s', spell.RankName())
you might want " " around this %s

you might need to do something to make sure you don't spam /tell some curer
 
You are missing the () on some stuff:

mq.TLO.Me.SpellReady(Spellname) should be mq.TLO.Me.SpellReady(Spellname)(), same goes for mq.TLO.Me.AltAbilityReady(cure.name)

I would change the local Spellname = cureSpell bit so you dont get confused (just use either or in your whole code)

The CureCaster handling probably also does not work, or does it? You are checking on each toon if you have the spell loaded, then set the curecaster variable, but for the other toons this does not propagate since its a local variable.
 
You are missing the () on some stuff:

mq.TLO.Me.SpellReady(Spellname) should be mq.TLO.Me.SpellReady(Spellname)(), same goes for mq.TLO.Me.AltAbilityReady(cure.name)

I would change the local Spellname = cureSpell bit so you dont get confused (just use either or in your whole code)

The CureCaster handling probably also does not work, or does it? You are checking on each toon if you have the spell loaded, then set the curecaster variable, but for the other toons this does not propagate since its a local variable.
Thank you
I made this adjustment
 
on_load is only called at the time LEM starts or you enable the event. you probably don't want to use it the way you're using it. if you start LEM before you're at the zone, you might never initialize that stuff you have in there.

mq.TLO.Me.Gem(Spellname)() > 0 is this always going to be a number? might break comparing nil to number if not.

local cureCaster = mq.TLO.Me.Name ()
idk if Lua cares about that extra space you have there

mq.cmdf('/cast %s', spell.RankName())
you might want " " around this %s

you might need to do something to make sure you don't spam /tell some curer
Thank you aquietone
I adjusted the On_Load by removing the zone check all together.
mq.TLO.Me.Gem(Spellname)() > 0

This should only show other then 0 if the correct spell is loaded no?
 
updated Anashti:
local mq = require('mq')

local cureSpell = 'Eradicate Disease'
local cures = {
     BST={name="Nature's Salve",type='aa'},
     CLR={name='Purified Spirits',type='aa'},
     DRU={name='Purified Spirits',type='aa'},
     NEC={name='Embrace the Decay',type='aa'},
     SHM={name='Purified Spirits',type='aa'},
     SHD={name='Purity of Death',type='aa'}
    }

local function on_load()
    local cure = cures[mq.TLO.Me.Class.ShortName()]
    if mq.TLO.Me.Gem(cureSpell)() > 0 then
        local cureCaster = mq.TLO.Me.Name()
    end
end

local function condition()
if mq.TLO.Me.Buff('Withering Physicality XIII').ID() ~= nil or mq.TLO.Me.Buff('Withering Faith XIII').ID() ~= nil then
    return true
    end
end

local function cast(spell)
    mq.cmdf('/cast %s', spell.RankName())
    mq.delay(50+spell.MyCastTime())
end

local function use_aa(aa)
    mq.cmdf('/alt activate %s', aa.ID())
    mq.delay(50+aa.Spell.CastTime())
end

local function cure_ready(cure)
    if mq.TLO.Me.Gem(cureSpell)() > 0 then
        return mq.TLO.Me.SpellReady(cureSpell)() and not mq.TLO.Me.Casting()
    elseif cure.type == 'aa' then
        return mq.TLO.Me.AltAbilityReady(cure.name)() and not mq.TLO.Me.Casting()
    end
end

local function action()
    local my_class = mq.TLO.Me.Class.ShortName()
    local cure = cures[my_class]
    -- if not a cure class, return
    if cure == nil then
        mq.cmd('/tell %s buffme "Eradicate Disease"',cureCaster)
        mq.delay(5000)
    end   
    -- if cure ability isn't ready, return
    if my_class ~= cureCaster and not cure_ready(cure) then
        mq.cmdf('/tell %s buffme "Eradicate Disease"',cureCaster ) else
            mq.cmdf('/target %s', mq.TLO.Me.Name())
            mq.cmdf('/cast "%s"', cureSpell())
    end

    if cure ~= nil and cure_ready(cure) then
        use_aa(mq.TLO.Me.AltAbility(cure.name))
    end
end   
  
return {onload=on_load, condfunc=condition, actionfunc=action}
 
if my_class ~= cureCaster I know it's part of the cureCaster thing, but also look into this (in one place you set the name, then compare with the Class.Shortname - that's not going to work)

What I would suggest...if you don't want to fiddle around with dannet fetching of status (add all toons to set which have the spell memorized, and then pick one to cure you), and you are not changing your group composition often, just put your curer's name in the variable up top :)

Actually, maybe time to read up on Lua actor implementation :-)
 
INI:
local function on_load()
    local cure = cures[mq.TLO.Me.Class.ShortName()]
    if mq.TLO.Me.Gem(cureSpell)() > 0 then
        local cureCaster = mq.TLO.Me.Name()
    end
end

mq.TLO.Me.Gem(cureSpell)() will return nil if a character does not return a gem with one of the predefined cure spells. This isn't a bad thing, but line 3 above will throw an error when you try to compare nil > 0
Since an "if" statement is looking for truthy/falsey values, you could change this to be
if mq.TLO.Me.Gem(cureSpell)() then and avoid the "is nil greater than 0" error.
remember, in Lua, "false" and "nil" are falsey and EVERYTHING else is truthy.

INI:
local function on_load()
    local cure = cures[mq.TLO.Me.Class.ShortName()]
    if mq.TLO.Me.Gem(cureSpell)() then
        local cureCaster = mq.TLO.Me.Name()
    end
end
 
updated:
local mq = require('mq')
local cureCaster = 'SHMName'
local cureSpell ='Eradicate Disease'
local cures = {
     BST={name="Nature's Salve",type='aa'},
     CLR={name='Purified Spirits',type='aa'},
     DRU={name='Purified Spirits',type='aa'},
     NEC={name='Embrace the Decay',type='aa'},
     SHM={name='Purified Spirits',type='aa'},
     SHD={name='Purity of Death',type='aa'}
    }

local function on_load()
    local cure = cures[mq.TLO.Me.Class.ShortName()]
end

local function condition()
if mq.TLO.Me.Buff('Withering Physicality XIII').ID() ~= nil or mq.TLO.Me.Buff('Withering Faith XIII').ID() ~= nil then
    return true
    end
end

local function cast(spell)
    mq.cmdf('/cast %s', spell.RankName())
    mq.delay(50+spell.MyCastTime())
end

local function use_aa(aa)
    mq.cmdf('/alt activate %s', aa.ID())
    mq.delay(50+aa.Spell.CastTime())
end

local function cure_ready(cure)
    if mq.TLO.Me.Gem(cureSpell)() > 0 then
        return mq.TLO.Me.SpellReady(cureSpell)() and not mq.TLO.Me.Casting()
    elseif cure.type == 'aa' then
        return mq.TLO.Me.AltAbilityReady(cure.name)() and not mq.TLO.Me.Casting()
    end
end

local function action()
    local my_class = mq.TLO.Me.Class.ShortName()
    local cure = cures[my_class]
    -- if not a cure class, return
    if cure == nil then
        mq.cmd('/tell %s buffme "Eradicate Disease"',cureCaster)
        mq.delay(5000)
    end   
    -- if cure ability isn't ready, return
    if my_class ~= cureCaster and not cure_ready(cure) then
        mq.cmdf('/tell %s buffme "Eradicate Disease"',cureCaster) else
            mq.cmdf('/target %s', mq.TLO.Me.Name())
            mq.cmdf('/cast "%s"', cureSpell())
            mq.delay(2000)
    end

    if cure ~= nil and cure_ready(cure) then
        use_aa(mq.TLO.Me.AltAbility(cure.name))
    end
end   
  
return {onload=on_load, condfunc=condition, actionfunc=action}
 
Lua:
local function cure_ready(cure)
    if mq.TLO.Me.Gem(cureSpell)() > 0 then

this should also be

Lua:
local function cure_ready(cure)
    if mq.TLO.Me.Gem(cureSpell)() then

as per CB recommendation.

Also: if my_class ~= cureCaster and not cure_ready(cure) then should be if mq.TLO.Me.CleanName() ~= cureCaster and not cure_ready(cure) then (I think)
 
Lua:
local function cure_ready(cure)
    if mq.TLO.Me.Gem(cureSpell)() > 0 then

this should also be

Lua:
local function cure_ready(cure)
    if mq.TLO.Me.Gem(cureSpell)() then

as per CB recommendation.

Also: if my_class ~= cureCaster and not cure_ready(cure) then should be if mq.TLO.Me.CleanName() ~= cureCaster and not cure_ready(cure) then (I think)
added these recommendations
 
updated:
local mq = require('mq')
local cureCaster = 'SHMName'
local cureSpell ='Eradicate Disease'
local cures = {
     BST={name="Nature's Salve",type='aa'},
     CLR={name='Purified Spirits',type='aa'},
     DRU={name='Purified Spirits',type='aa'},
     NEC={name='Embrace the Decay',type='aa'},
     SHM={name='Purified Spirits',type='aa'},
     SHD={name='Purity of Death',type='aa'}
    }

local function on_load()
    local cure = cures[mq.TLO.Me.Class.ShortName()]
end

local function condition()
if mq.TLO.Me.Buff('Withering Physicality XIII').ID() ~= nil or mq.TLO.Me.Buff('Withering Faith XIII').ID() ~= nil then
    return true
    end
end

local function cast(spell)
    mq.cmdf('/cast %s', spell.RankName())
    mq.delay(50+spell.MyCastTime())
end

local function use_aa(aa)
    mq.cmdf('/alt activate %s', aa.ID())
    mq.delay(50+aa.Spell.CastTime())
end

local function cure_ready(cure)
    if mq.TLO.Me.Gem(cureSpell)() then
        return mq.TLO.Me.SpellReady(cureSpell)() and not mq.TLO.Me.Casting()
    elseif cure.type == 'aa' then
        return mq.TLO.Me.AltAbilityReady(cure.name)() and not mq.TLO.Me.Casting()
    end
end

local function action()
    local my_class = mq.TLO.Me.Class.ShortName()
    local cure = cures[my_class]
    -- if not a cure class, return
    if cure == nil then
        mq.cmd('/tell %s buffme "Eradicate Disease"',cureCaster)
        mq.delay(5000)
    end   
    -- if cure ability isn't ready, return
    if mq.TLO.Me.CleanName() ~= cureCaster and not cure_ready(cure) then
        mq.cmdf('/tell %s buffme "Eradicate Disease"',cureCaster) else
            mq.cmdf('/target %s', mq.TLO.Me.Name())
            mq.cmdf('/cast "%s"', cureSpell())
            mq.delay(2000)
    end

    if cure ~= nil and cure_ready(cure) then
        use_aa(mq.TLO.Me.AltAbility(cure.name))
    end
end   
  
return {onload=on_load, condfunc=condition, actionfunc=action}
 
For the withering debuffs, the Shaman made potions (1min cooldown) are a more effective method due to their controlled counters, which is important for this mission to ensure you aren't skipping too far fore/aft in the debuff cycle. The withering goes out less frequently than the shm potions reset, so there is no worry about 60sec cooldown woes, and the are instant cast. The group mission requires a different set of potions than the raid does. My *raid* custom sub for the event in macro of choice is below, if it helps. It wasn't very fancy but might help out?

For groups, the lower end Potion is the Immunization V to skip 1 stage of the debuff. the XIII will skip 2 stages of the debuff. For raids, the XIII will skip one step, and the XIV or HIGHER will skip two.



Damsel Wither Cure Snippet:
#Event DamselFaith "#*#Your faith falters#*#"
sub Event_DamselFaith()

| healers
  /if (${Select[${Me.Class.ShortName},SHM,DRU,CLR]} && ${Me.Buff[Withering Faith].ID}) {
          /stopcast
          /useitem "Distillate of Immunization XV"
        }
| Tanks/DPS
  /if (!${Select[${Me.Class.ShortName},SHM,DRU,CLR]} && ${Me.Buff[Withering Faith].ID}) {
          /echo Im a tank or DPS and want this buff - CYA!
          /return
        }
/return


#Event DamselPhysical "#*#Your bones are brittle#*#"
sub Event_DamselPhysical()
| healers
  /if (${Select[${Me.Class.ShortName},SHM,DRU,CLR]} && ${Me.Buff[Withering Physicality].ID}) {
        /stopcast 
        /useitem "Distillate of Immunization XIII"
        }
| DPS/Tanks
  /if (!${Select[${Me.Class.ShortName},SHM,DRU,CLR]} && ${Me.Buff[Withering Physicality].ID}) {
          /useitem "Distillate of Immunization XV"
        }
/return

#Event DamselLimbs "#*#Your muscles atrophy#*#"
sub Event_DamselLimbs()
| healers
  /if (${Select[${Me.Class.ShortName},SHM,DRU,CLR]} && ${Me.Buff[Withering Limbs].ID}) {
          /echo Im a pretend healer and want this buff - CYA!
        /return
        }
| DPS/Tanks
  /if (!${Select[${Me.Class.ShortName},SHM,DRU,CLR]} && ${Me.Buff[Withering Limbs].ID}) {
          /useitem "Distillate of Immunization XII"
        }
/return
 
Forgot to mention, that the shaman crafted Immunization potions, the V's are entirely vendor made. The XIII are, iirc made with Dream Dust (House of Thule), which when we did TBM, everybody had thousands of. the XIVs were made with Aderirse Bur, which seemed to be harder to acquire as few people had saved these. If you aren't worried about a raid scenario, and have dream dust on tap, the potions may be an easier method, less pausing/requesting things from the shaman who needs to be healing, etc.

Throwing this out as it absolutely trivialized the raid for our guild and several groups doing the mission by simply using the instacast shm potions.
 
I am unsure how to do this properly
print("Hello, I am showing you variable xx: "..xx) for example, you can also use printf and %s as with the other functions.

Here, take a look at this:

stuff:
local mq = require('mq')
local cureCaster = 'shammy'
local cureSpell ='Eradicate Disease'
local dot1 ='Withering Physicality XIII'
local dot2 ='Withering Faith XIII'
local cures = {
     BST={name="Nature's Salve",type='aa'},
     CLR={name='Purified Spirits',type='aa'},
     DRU={name='Purified Spirits',type='aa'},
     NEC={name='Embrace the Decay',type='aa'},
     SHM={name='Purified Spirits',type='aa'},
     SHD={name='Purity of Death',type='aa'}
    }

local function on_load()
    local cure = cures[mq.TLO.Me.Class.ShortName()]
end

local function condition()
if mq.TLO.Me.Buff(dot1).ID() ~= nil or mq.TLO.Me.Buff(dot2).ID() ~= nil then
    return true
    end
end

local function cast(spell)
    mq.cmdf('/cast %s', spell.RankName())
    mq.delay(50+spell.MyCastTime())
end

local function use_aa(aa)
    mq.cmdf('/alt activate %s', aa.ID())
    mq.delay(50+aa.Spell.CastTime())
end

local function cure_ready(cure)
    if mq.TLO.Me.Gem(cureSpell)() then
        return mq.TLO.Me.SpellReady(cureSpell)() and not mq.TLO.Me.Casting()
    elseif cure.type == 'aa' then
        return mq.TLO.Me.AltAbilityReady(cure.name)() and not mq.TLO.Me.Casting()
    end
end

local function action()
    local my_class = mq.TLO.Me.Class.ShortName()
    local cure = cures[my_class]
    -- if not a cure class, return
    if cure == nil then
        mq.cmdf('/tell %s buffme "%s"',cureCaster,cureSpell)
        mq.delay(5000)
    end  
    -- if cure ability isn't ready, return
    if mq.TLO.Me.CleanName() ~= cureCaster and not cure_ready(cure) then
      printf('AA not ready and not caster, going to ask %s for cure: %s',cureCaster,cureSpell)
        mq.cmdf('/tell %s buffme "%s"',cureCaster,cureSpell)
        mq.delay(5000)
    elseif mq.TLO.Me.CleanName() == cureCaster and not cure_ready(cure) then
        printf('AA not ready but I am cure caster, going to cast cure: %s',cureSpell)
            mq.cmdf('/target %s',mq.TLO.Me.Name())
            mq.delay(500)
            cast(mq.TLO.Spell(cureSpell))
    end

    if cure ~= nil and cure_ready(cure) then
        printf('AA cure up: %s',cure.name)
        use_aa(mq.TLO.Me.AltAbility(cure.name))
    end
    mq.delay(1000)
end  
 
return {onload=on_load, condfunc=condition, actionfunc=action}

You need to check if your curer is casting the cure with buffme (by issuing the tell by hand)
 
Tested and working!!!
With this LEM I was able to do most of the fight with just my tank and healer. I used the rest of the crew to finish off in the end but it worked as expected.
I am going to post this in the LEM library
 
Forgot to mention, that the shaman crafted Immunization potions, the V's are entirely vendor made. The XIII are, iirc made with Dream Dust (House of Thule), which when we did TBM, everybody had thousands of. the XIVs were made with Aderirse Bur, which seemed to be harder to acquire as few people had saved these. If you aren't worried about a raid scenario, and have dream dust on tap, the potions may be an easier method, less pausing/requesting things from the shaman who needs to be healing, etc.

Throwing this out as it absolutely trivialized the raid for our guild and several groups doing the mission by simply using the instacast shm potions.
Would shield of Imaculate work? Fast cast and fast CD
 
Would shield of Imaculate work? Fast cast and fast CD

It would. When doing this in era, the group mission has fewer counters than the raid, so using raid potions would cause the debuff to skip too far in group missions. The shield (should) be okay. I never got one, and many raiders in the guild did not have one. The potions were the easiest method for a mix of boxers and real humans in a raid format to simply click for an instant 'cure' to the correct stage without missing a beat.
 
Strategy - Anashti Sul, Damsel of Decay TBM Group mission LEM

Users who are viewing this thread

Back
Top