• 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

Bug - Using Discs to Pull

ChatWithThisName

⚔️🛡️🗡️
Moderator
Joined
Dec 29, 2017
RedCents
23,976¢
Using Krondal's Roar to pull on a warrior, even though the disc is ready, and you are in range of the target, KISS won't fire the disc.

To my knowledge based on some poking into the code. I've determined that --
Sub CastDisc is the issue due to the following line.
/if (!${Spell[${WhatDisc}].Duration.TotalSeconds} || (${Spell[${WhatDisc}].Duration.TotalSeconds} && !${Me.ActiveDisc.ID})) {


Krondal's Roar has a duration of 30 being reported, So if I have a running disc (Resolute Defense in this case on my warrior) then he will run out to the mob and stand there till the pull timer expires, then return to camp to select a new target. Repeating this action until there is no active disc.

I think using ${Spell[${WhatDisc}].TargetType.Equal[Single]} in the case of "${Me.ActiveDisc.ID}" might provide a little bit more precision. To allow us to use our discs to pull.
 
Looking at the code you are referring to. I see other issues as well, like if I have an active disc up and I need to cast Champion's Aura and/or Field Protector. Both of those can be cast while you have an active disc up.
 
Rich (BB code):
[2018/07/09 03:02:50] [MQ2] There is 2 command line parameter(s)
[2018/07/09 03:02:50] [MQ2] P0: tank
[2018/07/09 03:02:50] [MQ2] Loading INI Info
[2018/07/09 03:02:52] [MQ2] SetupAdvLootVars: Reading from Loot.ini
[2018/07/09 03:02:52] [MQ2] NINJADVLOOT: AutoHater set to Xtarget1
[2018/07/09 03:02:52] [MQ2] NINJADVLOOT: Variables are set. Using Loot.ini file.
[2018/07/09 03:02:53] [MQ2] ================================
[2018/07/09 03:02:53] [MQ2] Redguides presents
[2018/07/09 03:02:53] [MQ2] KissAssist v.10.2.6 by Maskoi
[2018/07/09 03:02:53] [MQ2] ================================
[2018/07/09 03:02:53] [MQ2] I am Tanking & Main Assist
[2018/07/09 03:02:53] [MQ2] The MQ2Nav mesh for Shard's Landing is loaded
[2018/07/09 03:02:53] [MQ2] Using MQ2Nav to Move.
[2018/07/09 03:02:56] Window 'Blocked Spells' is now open.
[2018/07/09 03:02:57] Window 'Blocked Spells' is now closed.
[2018/07/09 03:03:03] [MQ2] CastDisc Enter Line#: 2623 Field Champion 15637 0
[2018/07/09 03:03:03] [MQ2] SpellDuration: (!36 || SpellDuration: (36 && ActiveDisc: !NULL)) Here I have no active disc (Resolute Defense was down)


[2018/07/09 03:03:04] [MQ2] Buffing >> Field Champion <<
[2018/07/09 03:03:20] [MQ2] CastDisc Enter Line#: 2623 Field Champion 15637 0
[2018/07/09 03:03:20] [MQ2] SpellDuration: (!36 || SpellDuration: (36 && ActiveDisc: !55057))
[2018/07/09 03:03:27] [MQ2] CastDisc Enter Line#: 2623 Field Champion 15637 0
[2018/07/09 03:03:27] [MQ2] SpellDuration: (!36 || SpellDuration: (36 && ActiveDisc: !55057)) Here it's trying to cast Field Champion while Resolute Defense is up, but failing. 
[2018/07/09 03:03:34] [MQ2] CastDisc Enter Line#: 2623 Field Champion 15637 0
[2018/07/09 03:03:34] [MQ2] SpellDuration: (!36 || SpellDuration: (36 && ActiveDisc: !55057))

[2018/07/09 03:03:42] [MQ2] CastDisc Enter Line#: 2623 Harmonious Expanse Rk. II 15637 0
[2018/07/09 03:03:42] [MQ2] SpellDuration: (!0 || SpellDuration: (0 && ActiveDisc: !55057)) Here there is no Duration.TotalSeconds so it's passing the check. 
[2018/07/09 03:03:43] [MQ2] Casting Harmonious Expanse Rk. II on me.

[2018/07/09 03:03:45] [MQ2] CastDisc Enter Line#: 2623 Field Champion 15637 0
[2018/07/09 03:03:45] [MQ2] SpellDuration: (!36 || SpellDuration: (36 && ActiveDisc: !55057)) However, here again, Field Champion won't cast because I have an active disc. 
[2018/07/09 03:03:52] [MQ2] CastDisc Enter Line#: 2623 Field Champion 15637 0
[2018/07/09 03:03:52] [MQ2] SpellDuration: (!36 || SpellDuration: (36 && ActiveDisc: !55057))
[2018/07/09 03:03:54] The current macro has ended.
[2018/07/09 03:03:56] MQ2EQWire: Now in Back

While it's not clear to me exactly how to go about fixing this bit right off the top of my head, I know that this is not an intended side effect of the if statement. Hopefully this debugging log and my finger pointing at the code will alleviate me of using holyshits/downshits for these issues (as well as issues when using a berserker where DPS gets lost due to the same if statement) Surely there is a better way to handle this scenario.
 
Last edited:
Yea the problem is being able to know when a Disc uses the Disc ability timer bar. Using the .Duration only returns the time the buff lasts on your target. Not sure why Spell[Some Disc].Duration.TotalSeconds is being checked, since it has nothing to do with how long the disc stays active. I am doing some research to see if there is a way to identify those Discs that can be cast when a Disc is active.
 
why not check for targettype and spelltype, like
Rich (BB code):
/if (!${Spell[${WhatDisc}].Duration.TotalSeconds} || (${Spell[${WhatDisc}].Duration.TotalSeconds} && ${Me.ActiveDisc.ID}) && ${Spell[${WhatDisc}].TargetType.Equal[Single]} && ${Spell[${WhatDisc}].SpellType.Equal[Detrimental]}) || (${Spell[${WhatDisc}].Duration.TotalSeconds} && ${Me.ActiveDisc.ID}) && ${Spell[${WhatDisc}].TargetType.Equal[Self]} && ${Spell[${WhatDisc}].SpellType.Equal[Beneficial]})) {
 
My consideration for the issue with checking for single detrimental was that some discs put a debuff on a mob and you don't want to spam a debuff persay. I honestly haven't given much thought to the actual repair of the issue. I'm thinking about slapping together a macro that writes spell information to an INI via /mac spellinfo spellname
Where spellname can be a disc, item, spell, or AA and if it's available to you, then output all the member informations to a file.

This will let me look at a large picture of the disc information for my berserker and warrior and see what I might use to solve the issue. But for now I digress.
 
the whole issue is to cast another disc while one is running, kiss still checks for if a disc is ready, if it procs a debuff on the mob you can check for that after its been cast using a conditional. If you expand this too much it doesnt stay KISS, people should know what "some" abilities do before using them, further expanding the code will change the current KISS to an automac. The discs that put a debuff on have reuse timers so you cant spam them
 
I have spent a little time looking into this issue and some way to figure if you can use a specific disc while you have an active disc running, and/or if a disc in and of itself uses the disc timer bar. I have not found anything in MQ2 that lets you determine either of those 2 conditions.
 
I have spent a little time looking into this issue and some way to figure if you can use a specific disc while you have an active disc running, and/or if a disc in and of itself uses the disc timer bar. I have not found anything in MQ2 that lets you determine either of those 2 conditions.
There is actually something to determine it, but it was never exposed. There is a TLO ${Spell.StacksWithDiscs} that seemed to have been forgotten. I'm guessing its supposed to give you the bStacksWithDiscs member of PSPELL, which is exactly the member that tells you if you can cast the disc with an active disc running. We need eqmule to finish out the TLO data member and push it to core mq2 so we can use it.
 
i have literally created the check that will fix this issue 100%

/if (!${Spell[${WhatDisc}].Duration} || (${Spell[${WhatDisc}].Duration} && ${Spell[${WhatDisc}].TargetType.Equal[Self]} && !${Me.ActiveDisc.ID}) || ${Spell[${WhatDisc}].TargetType.NotEqual[Self]} || ${Spell[${WhatDisc}].DurationWindow}) {

created this test tool, that test all discs, used it on warrior, and zerker, as that was the high level disc using classes i had access, but both logs confirmed my test was good

Bash:
Sub Main
    /declare i int local 0
    /declare c int local 0
    /declare line string local
   |change DIsc to the running activedisc you want to test against.
    /declare Disc string local Disconcerting Discipline
    /declare ActiveDisc bool local True
   
    /mqlogclean Our ActivDisc is:
    /mqlogclean ${Disc}
    /for c 1 to ${Disc.Length}
        /varset line ${line}-
    /next c
    /mqlogclean ${line}
    /mqlogclean TargetType     : ${Spell[${Disc}].TargetType}
    /mqlogclean Duration       : ${Spell[${Disc}].Duration.Time}
    /mqlogclean DurationWindow : ${Spell[${Disc}].DurationWindow}
    /mqlogclean Disc stacking check:
    /mqlogclean !Duration OR (Duration AND TargetType.Equal[Self] AND !ActiveDisc) OR TargetType.NotEqual[Self] OR DurationWindow
    /mqlogclean
    /varset line
    /echo \agGenerating Disc List, plus checking for stacking:
    /for i 1 to 1000
        /if (${Me.CombatAbility[${i}].ID}) {
            /varset Disc ${Me.CombatAbility[${i}]}
            /echo \a-m${i} - \am${Disc}
            /mqlogclean ${Disc}
            /for c 1 to ${Disc.Length}
                /varset line ${line}-
            /next c
            /mqlogclean ${line}
            /mqlogclean TargetType     : ${Spell[${Disc}].TargetType}
            /mqlogclean Duration       : ${Spell[${Disc}].Duration.Time}
            /mqlogclean DurationWindow : ${Spell[${Disc}].DurationWindow}
            /mqlogclean Will cast with ActiveDisc: ${If[!${Spell[${Disc}].Duration} || (${Spell[${Disc}].Duration} && ${Spell[${Disc}].TargetType.Equal[Self]} && !${ActiveDisc}) || ${Spell[${Disc}].TargetType.NotEqual[Self]} || ${Spell[${Disc}].DurationWindow},True,False]}
            /mqlogclean
            /varset line
        }
       
    /next i
    /echo \ayDone!
/return
 
The StacksWithDisc was brought up while me and Maskoi were looking at this yesterday morning, but without it being exposed it does little good to us. With that being said the current change appeared to work great. According to checks the only Disc that had a duration that wasn't active was the Reprieve line best I could tell, which is handled differently according to Maskoi.

For Kaen, the change needs to also be placed into Aggro section, as I understand it has a similar line in the sub which prevents it from making it to CastDisc sub due to a same/similar lie of code if you're wanting to make the change there as well till Kiss11.
 
Attached is a silly test mac I threw together to find all CombatAbilities that have a duration and are Self, for my warrior the only non-actives I found were as I mentioned above the Reprieve line. If you want to verify on other classes then here is the file. It was intended for internal use and I wanted the INI to be on the top of my Alpha sorted file list, so I made the name ABC.ini don't hold it against me :-)
 

Attachments

Bug - Using Discs to Pull

Users who are viewing this thread

Back
Top
Cart