Welcome, Guest. Please login or register.
Did you miss your activation email?
May 23, 2022, 08:57:09 pm *

Login with username, password and session length
Pages: [1]
Print
Author Topic: Another Combine Heroic Resists macro  (Read 673 times)
Ogru
Newbie
*
Posts: 23


View Profile
« on: January 20, 2022, 11:55:33 am »

I decided to make another combine Heroic Resists macro. It is based on Dimurs macro, but is heavily modified.

Key features:
  • Combines all resist augs in inventory (not bank) up to the max rank set, going rank by rank.
  • Only combines ranks X and XV in sets of 8 not 2
  • Works with stacked Augments
  • If you run out of inventory slots, skips to next rank

Make a file called ResistAugs.mac (or whatever you want) and paste this code into it.

To run, just type /mac ResistAugs [max combine up to rank]

Example 1: If you only have 26x Rank I augs in your inventory and ran "/mac ResistAugs IV". This would end with you having 1x Rank I, 1x Rank II, and 3x Rank IV.

Example 2: If you only have 300x Rank X augs in your inventory and ran "/mac ResistAugs XVI". This would end with you having 1x Rank XIII, 1x Rank XV, and 1x Rank XVI.


ResistAugs.mac
Code:
|==== Version 1.0
|==== Coded by Ogru for use on EZServer
|==== Based on Dimurs Heroic Resists macro
|-------------------------------------------------------
|--------- A Magic Box in slot 10 is required ----------
|-------------------------------------------------------

#turbo

|==== Sub Main
Sub Main(MaxRank)
|Adjust min/max delays if not combining properly
/if (!${Defined[minDelay]}) /declare minDelay int outer 5
/if (!${Defined[maxDelay]}) /declare maxDelay int outer 15

/if (!${Defined[HRAugsInBags]}) /declare HRAugsInBags int outer
/if (!${Defined[HROpenBagSlots]}) /declare HROpenBagSlots string outer
/if (!${Defined[MagicBoxItemCount]}) /declare MagicBoxItemCount string outer
/if (!${Defined[MaxRankNum]}) /declare MaxRankNum int outer 0
/if (!${Defined[HRRank]}) /declare HRRank string outer
/if (!${Defined[HRRankID]}) /declare HRRankID int outer

/declare i int local
/declare a string local I|II|III|IV|V|VI|VII|VIII|IX|X|XI|XII|XIII|XIV|XV|XVI|XVII|XVIII|XIX|XX|

|Find Max Rank Number
/for i 1 to 20
/if (${MaxRank.Equal[${a.Arg[${i},|]}]}) {
/varcalc MaxRankNum ${i}-1
}
/next i

/call OpenBags

/If (${InvSlot[pack10].Item.Name.NotEqual[A Magic Box]}) {
/bc [+r+]SLOT 10 Must be A Magic Box[+x+]
/goto :TheEnd
}
/If (${InvSlot[pack10].Item.Items} > 0) {
/bc [+r+]A Magic Box in slot 10 MUST be empty to start[+x+]
/goto :TheEnd
}

|Loop through each rank of SoHR
/for i 1 to ${MaxRankNum}
/varset HRRank ${a.Arg[${i},|]}
/varset HRRankID ${FindItem[=stone of heroic resistance ${HRRank}].ID}

/call HRTallyBagSlots
/delay 1
/call HRCombineAugs
/next i

:TheEnd
/autoinventory
/cleanup

/Return
|==== End Sub Main

|==== Sub HRTallyBagSlots
Sub HRTallyBagSlots
/declare i int local 1
/declare j int local
/varset HRAugsInBags 0

/if (${FindItemCount[=stone of heroic resistance ${HRRank}]} > 0 ) {
/for i 1 to 9
/for j 1 to ${InvSlot[pack${i}].Item.Container}
/if (${InvSlot[pack${i}].Item.Item[${j}].ID}==${HRRankID}) {
/varcalc HRAugsInBags ${HRAugsInBags} + ${InvSlot[pack${i}].Item.Item[${j}].Stack}
}
/next j
/next i
/bc [+y+]Rank: ${HRRank}[+x+] > In bags: [+t+]${HRAugsInBags}[+x+] - Equipped: [+t+]${Int[${Math.Calc[${FindItemCount[=stone of heroic resistance ${HRRank}]}-${HRAugsInBags}]}]}[+x+]
}

/Return
|==== End Sub HRTallyBagSlots

|==== Sub OpenBags
Sub OpenBags
/declare i int local
/for i 1 to 10
/if (${InvSlot[pack${i}].Item.Container}) {
/if (!${Window[pack${i}].Open}) /itemnotify pack${i} rightmouseup
}
/next i
/Return
|==== End Sub OpenBags

|==== End Sub CheckBagSpace
Sub CheckBagSpace
/declare i int local
/varset HROpenBagSlots 0
/for i 1 to 9
/if (${InvSlot[pack${i}].Item.Container}) /varcalc HROpenBagSlots ${HROpenBagSlots}+${Int[${Math.Calc[${InvSlot[pack${i}].Item.Container}-${InvSlot[pack${i}].Item.Items}]}]}
/next i
/varset MagicBoxItemCount ${InvSlot[pack10].Item.Items}
/Return
|==== Sub CheckBagSpace


|==== Sub HRCombineAugs
Sub HRCombineAugs
/declare Bag int local 1
/declare Slot int local
/declare FirstPass bool local true
/declare TotalAugsInBags int local ${HRAugsInBags}

:CombineLoop
/call CheckBagSpace

|--- Rank X and XV
/if ((${HRRank.Equal[X]}) || (${HRRank.Equal[XV]})) {
/if (${TotalAugsInBags}<8) /goto :TheEnd
/if (${Math.Calc[${MagicBoxItemCount}+${HRAugsInBags}]}<8) {
/goto :TheEnd
}
/if ((${HROpenBagSlots}<1) && (${Math.Calc[${MagicBoxItemCount}+${HRAugsInBags}]}>8)) {
/echo Not enough bag slots, moving to next Rank
/goto :TheEnd
}

|--- All other Ranks
} else {
/if (${HRAugsInBags}<2) /goto :TheEnd
/if ((${HROpenBagSlots} < 1) && (!${FirstPass})) {
/echo Not enough bag slots, moving to next Rank
/goto :TheEnd
}
}

/varset FirstPass False

/for Bag 1 to 9
/for Slot 1 to ${InvSlot[pack${Bag}].Item.Container}
/if (${InvSlot[pack${Bag}].Item.Item[${Slot}].ID}==${HRRankID}) {
/ctrlkey /itemnotify in pack${Bag} ${Slot} leftmouseup
/delay ${minDelay}
/delay ${maxDelay} (${Cursor.ID})
/itemnotify in pack10 ${Int[${Math.Calc[${InvSlot[pack10].Item.Items}+1]}]} leftmouseup
/delay ${minDelay}
/delay ${maxDelay} (!${Cursor.ID})
/varcalc HRAugsInBags ${HRAugsInBags}-1

/if (((${HRRank.Equal[X]}) || (${HRRank.Equal[XV]})) && (${InvSlot[pack10].Item.Items}<8)) {
/goto :CombineLoop
}

/if ((${InvSlot[pack10].Item.Items}==2) || (${InvSlot[pack10].Item.Items}==8)) {
/combine pack10
/delay ${minDelay}
/delay ${maxDelay} (${Cursor.ID})
/autoinventory
/delay ${minDelay}
/delay ${maxDelay} (!${Cursor.ID})
/call ClearBag10
/goto :CombineLoop
}
}
/next Slot
/next Bag

/goto :CombineLoop

:TheEnd
/Return
|==== End Sub HRCombineAugs

|==== Sub ClearBag10
Sub ClearBag10
/declare j int local

/If (${InvSlot[pack10].Item.Items} > 0) {
/for j 1 to ${InvSlot[pack10].Item.Container}
/if (${InvSlot[pack10].Item.Item[${j}].ID}) {
/shiftkey /itemnotify in pack10 ${j} leftmouseup
/delay ${minDelay}
/delay ${maxDelay} (${Cursor.ID})
/if (${Cursor.ID}) /autoinv
/delay ${maxDelay} (!${Cursor.ID})
}
/next j
}
/Return
|==== End Sub ClearBag10

Please let me know in game or here if there are any issues or suggestions.
« Last Edit: January 21, 2022, 09:54:22 am by Ogru » Logged
wachna
Full Member
***
Posts: 145


View Profile
« Reply #1 on: January 20, 2022, 12:10:00 pm »

Do I have to make several stacks or doesnt matter? If I got lets say 1000 Xs can I just max rank XX and let it roll?
Logged
Loyal
Sr. Member
****
Posts: 389



View Profile
« Reply #2 on: January 20, 2022, 12:17:54 pm »

I am legit excited to use this macro when I next play. Thanks!
Logged

Ogru
Newbie
*
Posts: 23


View Profile
« Reply #3 on: January 20, 2022, 12:23:08 pm »

Do I have to make several stacks or doesnt matter? If I got lets say 1000 Xs can I just max rank XX and let it roll?

You will probably have to run it a couple times because you will run out of space since 1000 rank X will make 125 Rank XIII's but you wont have to do anything other than, run it, wait for it to finish, then run it again.
Logged
Loyal
Sr. Member
****
Posts: 389



View Profile
« Reply #4 on: January 20, 2022, 04:25:46 pm »

I am getting the following error, no augs are being combined so its getting tripped up before it gets going.

I took precautions by emptying my bags of anyhting but resist augs. Slot 10 is an empty Magic Box. I use all magic boxes but went ahead and swapped out all my other magic boxes for normal bags, just in case, but no dice.

Any thoughts?

« Last Edit: January 20, 2022, 04:28:16 pm by Loyal » Logged

Ogru
Newbie
*
Posts: 23


View Profile
« Reply #5 on: January 20, 2022, 04:55:04 pm »

I am getting the following error, no augs are being combined so its getting tripped up before it gets going.

I see what the issue was and have updated the code.
Logged
Loyal
Sr. Member
****
Posts: 389



View Profile
« Reply #6 on: January 20, 2022, 05:53:33 pm »

Thanks! It's working.
Logged

wachna
Full Member
***
Posts: 145


View Profile
« Reply #7 on: January 21, 2022, 05:39:00 am »

If I got a stack of 100 Xs it creates 1 XIII and puts it in the slot from where the 100 have been and puts the 92 into box 10…

What am I doing wrong?
Logged
Ogru
Newbie
*
Posts: 23


View Profile
« Reply #8 on: January 21, 2022, 08:26:02 am »

You probably just need to increase the min/max delays times. I also did not not test it with the older version of MQ2, so you may need to download the newest one if you havent in a while.
Logged
Tankus
Full Member
***
Posts: 200


View Profile
« Reply #9 on: January 21, 2022, 08:35:16 am »

You probably just need to increase the min/max delays times. I also did not not test it with the older version of MQ2, so you may need to download the newest one if you havent in a while.

I'm using the 2004 version as if I try to use the newer version it crashes after server select  Cheesy Cheesy I'll test it when on this version when I have a stack built up.

Tank
Logged
wachna
Full Member
***
Posts: 145


View Profile
« Reply #10 on: January 21, 2022, 09:22:26 am »

You probably just need to increase the min/max delays times. I also did not not test it with the older version of MQ2, so you may need to download the newest one if you havent in a while.

Will try the delay adjustment on monday. Thx
Logged
Loyal
Sr. Member
****
Posts: 389



View Profile
« Reply #11 on: January 21, 2022, 09:38:13 am »

I was seeing the same issues when i first ran it. I adjusted the min delay from 3 to 5 and it solved the issue.
Logged

Fecs
Jr. Member
**
Posts: 68


View Profile
« Reply #12 on: January 21, 2022, 01:31:27 pm »

works great with the min delay change - now I just need someone to make a Shield of the Ages macro, so that my bots can finally get it, that's waaaaaaaaaay to much clicking for those nerds.
Logged
Pages: [1]
Print
Jump to:  

Recent

Stats

Members
Stats
  • Total Posts: 63672
  • Total Topics: 4939
  • Online Today: 74
  • Online Ever: 2631
  • (February 09, 2022, 02:06:05 pm)
Users Online
Users: 1
Guests: 71
Total: 72
TinyPortal v1.0 beta 4 © Bloc