Question How to get enchanter auras working again?

wunaye

Premium Member
Joined
Apr 16, 2008
Messages
1,021
Reaction score
1
Points
38
Location
Australia
Hi guys I haven't played on live servers for awhile and I load up my enchanter and get spammed with red errors about my aura downshits. So I do a search on here and notice that some stuff changed but I still can't figure out exactly how to get them working again.

I would love it if someone could post the downshits to get Twincast Aura Rk. III and Mana Reciprocation Aura Rk. II up and going again for me please?
 
Hi guys I haven't played on live servers for awhile and I load up my enchanter and get spammed with red errors about my aura downshits. So I do a search on here and notice that some stuff changed but I still can't figure out exactly how to get them working again.

I would love it if someone could post the downshits to get Twincast Aura Rk. III and Mana Reciprocation Aura Rk. II up and going again for me please?

Give us the error and we can tell you what the problem is. Otherwise it becomes a guessing game. Those errors are there for a reason
 
Here is the talk about it in another thread Fix for the aura problem?

But I'm not looking to fix my current setup as I've butchered it trying to get it to work. So I'm really just looking for the downshits for the 2 auras.
 
For our compile, I changed .Aura to .AuraInfo member when .Aura got changed to the new type. So you can use .AuraInfo, i.e. it's a drop-in replacement (string or spell type). Or if you want .Aura, then I would say you could take a look at the TLO reference for it, but it's not updated, so you can't. :D

But for Aura[x] now, it's basically like:

1) if no index, it returns the first aura as an auratype
2) if index (e.g., [1]) it returns that index as an auratype

For auratype, those members are:
ID, Find, Name, SpawnID
You can also use method Remove

htw
 
Example:

DownShit15=/if (!${Me.Aura.Find[Twincast Aura]}) /casting "Twincast Aura Rk. III"

Er, I think that's the right /casting, ymmv (or better expert will post).

htw
 
Example:

DownShit15=/if (!${Me.Aura.Find[Twincast Aura]}) /casting "Twincast Aura Rk. III"

Er, I think that's the right /casting, ymmv (or better expert will post).

htw

Code:
/if (!${Me.Aura[1].Name.Equal[Twincast Aura]} && !${Me.Aura[2].Name.Equal[Twincast Aura]}) /cast  "Twincast Aura"
/if (!${Me.Aura[1].Name.Equal[Mana Reciprocation Aura]} && !${Me.Aura[2].Name.Equal[Mana Reciprocation Aura]}) /cast  "Mana Reciprocation Aura"

It appears that HTW's method works as well. I just used the code I had on hand (working with bot40.mac) that this should work as well.
Code:
/if (!${Me.Aura.Find[Twincast Aura]}) /cast "Twincast Aura"
/if (!${Me.Aura.Find[Mana Reciprocation Aura]}) /cast "Mana Reciprocation Aura"

In fact the find option is likely to work best because it finds that string and accepts anything following it, thus the Rk. III etc is not needed like in my original code. Which I failed to include.

to my knowledge Ranks are no longer needed to be included in the cast command, it should automatically cast the highest rank.
 
Last edited:
/if (!${Me.Aura.Find[Twincast Aura]}) /cast "Twincast Aura"
/if (!${Me.Aura.Find[Mana Reciprocation Aura]}) /cast "Mana Reciprocation Aura"


For my chars running 2 auras...the second one always returns NULL when using Me.Aura.Find and so they keep trying to cast an aura they've already got up.

/edit: So we have to specify Me.Aura[#] otherwise it only seems to check the first Aura slot even when using Me.Aura.Find?

I feel like I've missed something...
 
Last edited:
/if (!${Me.Aura.Find[Twincast Aura]}) /cast "Twincast Aura"
/if (!${Me.Aura.Find[Mana Reciprocation Aura]}) /cast "Mana Reciprocation Aura"


For my chars running 2 auras...the second one always returns NULL when using Me.Aura.Find and so they keep trying to cast an aura they've already got up.

/edit: So we have to specify Me.Aura[#] otherwise it only seems to check the first Aura slot even when using Me.Aura.Find?

I feel like I've missed something...

Well it seems that ${Me.Aura.Find[somevalue]} may default to ${Me.Aura[1].Find[Somevalue]}

If that is the case then simply adding [1] and [2] into my original setup should be ok.

Code:
/if (!${Me.Aura[1].Find[Twincast Aura]} && !${Me.Aura[2].Find[Twincast Aura]}) /cast "Twincast Aura"
/if (!${Me.Aura[1].Find[Mana Reciprocation Aura]} && !${Me.Aura[2].Find[Mana Reciprocation Aura]}) /cast "Mana Reciprocation Aura"

Should work. I don't have a character that uses multiple aura's to test this however.
 
Thanks everyone so much! I couldn't edit/change my original setup as I never wrote it and had deleted and changed bits of it so it was buggered. I wouldn't have a clue how to write it up myself.

The last one you posted Chatwiththisname has worked perfectly! Hopefully this helps others having the same problem, I guess it's only a real problem with enchanters since they can use 2 auras.
 
Pulled up the source and can confirm, the default is the first aura slot returned:

Code:
	case Aura:
		if (PAURAMGR pAura = (PAURAMGR)pAuraMgr)
		{
			if (pAura->NumAuras)
			{
				PAURAS pAuras = (PAURAS)(*pAura->pAuraInfo);
				if (ISINDEX())
				{
					DWORD n = 0;
					if (ISNUMBER())
					{
						n = GETNUMBER();
						if (n > pAura->NumAuras)
							return false;
						n--;
						Dest.Ptr = &pAuras->Aura[n]; 
						Dest.HighPart = n; 
						Dest.Type = pAuraType;
						return true;
					}
					else
					{
						for (n = 0; n < pAura->NumAuras; n++)
						{
							if (!_strnicmp(GETFIRST(), pAuras->Aura[n].Name, strlen(GETFIRST())))
							{
								Dest.Ptr = &pAuras->Aura[n]; 
								Dest.HighPart = n; 
								Dest.Type = pAuraType; 
								return true; 
							}
						}
					}
				}
				else
				{
                                        //THIS PART IS THE DEFAULT
					Dest.Ptr = &pAuras->Aura[0]; 
					Dest.HighPart = 0; 
					Dest.Type = pAuraType; 
					return true; 
				}
			}
		}
		return false;
 
Pulled up the source and can confirm, the default is the first aura slot returned:

Code:
	case Aura:
		if (PAURAMGR pAura = (PAURAMGR)pAuraMgr)
		{
			if (pAura->NumAuras)
			{
				PAURAS pAuras = (PAURAS)(*pAura->pAuraInfo);
				if (ISINDEX())
				{
					DWORD n = 0;
					if (ISNUMBER())
					{
						n = GETNUMBER();
						if (n > pAura->NumAuras)
							return false;
						n--;
						Dest.Ptr = &pAuras->Aura[n]; 
						Dest.HighPart = n; 
						Dest.Type = pAuraType;
						return true;
					}
					else
					{
						for (n = 0; n < pAura->NumAuras; n++)
						{
							if (!_strnicmp(GETFIRST(), pAuras->Aura[n].Name, strlen(GETFIRST())))
							{
								Dest.Ptr = &pAuras->Aura[n]; 
								Dest.HighPart = n; 
								Dest.Type = pAuraType; 
								return true; 
							}
						}
					}
				}
				else
				{
                                        //THIS PART IS THE DEFAULT
					Dest.Ptr = &pAuras->Aura[0]; 
					Dest.HighPart = 0; 
					Dest.Type = pAuraType; 
					return true; 
				}
			}
		}
		return false;

I really wish I had the time to get into the source and learn the syntax and usage of this program as a whole. While I don't think it would take me horribly long to learn the syntax, I'm just now learning C++, and also trying to beat bot40.mac into submission.

Thanks for the information. I'm wondering if this could be recommended as a change to the dev team at macroquest2.com. I can't say I've ever recommended anything to them to know what kind of response to expect.

Just glancing at that gives me a headache :)
 
I really wish I had the time to get into the source and learn the syntax and usage of this program as a whole. While I don't think it would take me horribly long to learn the syntax, I'm just now learning C++, and also trying to beat bot40.mac into submission.

Thanks for the information. I'm wondering if this could be recommended as a change to the dev team at macroquest2.com. I can't say I've ever recommended anything to them to know what kind of response to expect.

Just glancing at that gives me a headache :)

The code can be VERY cumbersome but I spent days upon days going through it trying to do things that I can't really share here. However, I did learn to like it and admire the complexity that it contains. The random defines in random files to stop certain things from compiling, it was all beautiful!

I'm considering making the modification such that an attribute "Auras" will return all Auras in the source and submitting to Eqmule for approval. The major discouragement I have with doing so is the code isn't truly open source in the manner that I can submit a pull request. I know brianiac has a github for MQ out there but I don't think that is what gets used to generate MQ builds. In short, I need to understand the process to submit changes to Eqmule better and also get validation that my submissions would actually be included (so my time isn't wasted).

Not sure where I was going with this, sorry
 
Last edited:
I really wish I had the time to get into the source and learn the syntax and usage of this program as a whole. While I don't think it would take me horribly long to learn the syntax, I'm just now learning C++, and also trying to beat bot40.mac into submission.

Thanks for the information. I'm wondering if this could be recommended as a change to the dev team at macroquest2.com. I can't say I've ever recommended anything to them to know what kind of response to expect.

Just glancing at that gives me a headache :)

The code can be VERY cumbersome but I spent days upon days going through it trying to do things that I can't really share here. However, I did learn to like it and admire the complexity that it contains. The random defines in random files to stop certain things from compiling, it was all beautiful!

I'm considering making the modification such that an attribute "Auras" will return all Auras in the source and submitting to Eqmule for approval. The major discouragement I have with doing so is the code isn't truly open source in the manner that I can submit a pull request. I know brianiac has a github for MQ out there but I don't think that is what gets used to generate MQ builds. In short, I need to understand the process to submit changes to Eqmule better and also get validation that my submissions would actually be included (so my time isn't wasted).

Not sure where I was going with this, sorry

I agree with you on that. I've made improvements to other's programs before and submitted them, but due to lack of access to an appropriate Git I was unable to commit/pull request anything. Thus I had to send it manually. Then the changes didn't get included later and I found myself simply pissing in the wind for no reason but to get myself wet.