What's new
  • Visit Rebornbuddy
  • Visit Panda Profiles
  • Visit LLamamMagic
  • Visit Resources
  • Visit Downloads
  • Visit Portal

[Plugin] GearSwap

i means if i load a profile which will restart game for a bounty, the plugin will make game crash.
 
Oh an extra suggestion for whenever you get around implementing the "low HP detection" part for Nagelring, if it's possible:
- Swap a helm with a MF gem (not sure how to detect that easily on your side)
- Swap Cain Set pieces in inventory

This would allow to get up to 141% MF from just 4 items, so 14% more legendary drops, which starts being quite decent and even better on boss farming where there is just 1 kill per run to fully benefit from it.

Edit: could even skip the MF gem part, and just assume the user is smart and using a Cain Helm with the MF gem for one less item to swap (and one less thing to detect)

The MF thing may be difficult to accomplish. I would need to be able to detect when a mob is low and they are the last one around in that group. Some elite packs have 5 mobs in them, then if you get multiple packs we are sure to run into some issues! Maybe the best way to start it would be to implement just swapping on the very last elite alive with low health and make it better from there.


Hi borderjs,
Can you help me to code "Gloves of Worship" for Shrine ? Cause this gloves can increase the time for Shrine up to 10 minutes. Then the bot can swap back to original items when the 10 mins CD of Shrine is gone.
Gloves of Worship - ActorSNO: 332344

And I think "Low Health" option is not working atm.

Thank you.

So the tricky part of Gloves of Worship is the buff. I really need a pair to do some real testing to determine the best way to approach this. What happens when you click a 2nd shrine within the 10 minutes. I would need to reset the glove timer somehow but there isn't an easy way to determine when you click a shrine. I may need to investigate detecting the buffs and dequiping the gloves when no shrine buffs are present.

i means if i load a profile which will restart game for a bounty, the plugin will make game crash.
My suggestion is to disable the plugin, load the profile, and re-enable the plugin. See if that helps. I haven't experienced this issue.
 
buff 10 min shrine immediatly deleted if you wear them off

i tested it

so this gloves useless for swap
 
[GearSwap] Item: Blackthorne's Jousting Mail - ActorSNO: 222477 ---- pants
[GearSwap] Item: Blackthorne's Spurs - ActorSNO: 222463 ---- boots

Can you implement blackthornes 2 set bonus +elite bonus? and have check boxes in config window for which item you have for the blackthorne(belt chest pants boots amulet).

and..

[GearSwap] Item: Spaulders of Zakara - ActorSNO: 298163 ---- your item become indestructible and sway just before dieing to save money from repair. The only thing might hinder this is DB performance block. But imagine if it does work you can do T6 rift boss and your DB won't reset new game from death handling (red damage armor).
 
Last edited:
[GearSwap] Item: Blackthorne's Jousting Mail - ActorSNO: 222477 ---- pants
[GearSwap] Item: Blackthorne's Spurs - ActorSNO: 222463 ---- boots

Can you implement blackthornes 2 set bonus +elite bonus? and have check boxes in config window for which item you have for the blackthorne(belt chest pants boots amulet).

and..

[GearSwap] Item: Spaulders of Zakara - ActorSNO: 298163 ---- your item become indestructible and sway just before dieing to save money from repair. The only thing might hinder this is DB performance block. But imagine if it does work you can do T6 rift boss and your DB won't reset new game from death handling (red damage armor).

Pretty easy to just add the 2 Blackthorns to the gear list. I could just add all pieces and if you just put the ones in your inventory that you want to swap it would equip them on elites. I can add checkboxes possibly as well in config when i get some time. Was thinking about the Spaulders as well, wouldn't be 100%, but may help. I could try like <10% health equip them, or 5%. But spike damage would cause it not to work.
 
The MF thing may be difficult to accomplish. I would need to be able to detect when a mob is low and they are the last one around in that group. Some elite packs have 5 mobs in them, then if you get multiple packs we are sure to run into some issues! Maybe the best way to start it would be to implement just swapping on the very last elite alive with low health and make it better from there.

You could just start by only swapping for yellow/purple elites (and goblins?) that are about to die, since these 2 types always drop the loot right after the mob dies, even if they have minions. And implement the blue elite packs later on when you find a good way to keep track of the entire pack.
 
Pretty easy to just add the 2 Blackthorns to the gear list. I could just add all pieces and if you just put the ones in your inventory that you want to swap it would equip them on elites. I can add checkboxes possibly as well in config when i get some time. Was thinking about the Spaulders as well, wouldn't be 100%, but may help. I could try like <10% health equip them, or 5%. But spike damage would cause it not to work.

[GearSwap] Item: Blackthorne's Duncraig Cross - ActorSNO: 224189
[GearSwap] Item: Blackthorne's Notched Belt - ActorSNO: 224191

Only missing now is chest which I dont have.
 
[GearSwap] Item: Blackthorne's Duncraig Cross - ActorSNO: 224189
[GearSwap] Item: Blackthorne's Notched Belt - ActorSNO: 224191

Only missing now is chest which I dont have.
Added all Blackthorn's to revision 7. Just put the pieces you would like to use in your inventory and you are good to go!
 
You could just start by only swapping for yellow/purple elites (and goblins?) that are about to die, since these 2 types always drop the loot right after the mob dies, even if they have minions. And implement the blue elite packs later on when you find a good way to keep track of the entire pack.

Good idea to implement for uniques first, haven't had goblin detection yet either so will see if I can get those going and worry about elites later.
 
SVN Revision 8
  • Added Status Magic Find
  • Added slider for Magic Find in Config, adjust what percent the mob must be at before MF gear is equiped.
  • Fixed Low Health status.
  • Added support for Nagelring (could add Cain's set if people provide me SNO)

Magic Find in it's current form works as so:
If it sees a Rare/Unique/Boss with less than x% health - Equip MF
If it sees a SINGLE Elite mob (blue mob) - Check for Health - If less than x% health - Equip MF.
Still working on a way to detect goblins.

Too difficult to make it work for multiple Elite (Blue packs) to invest the time at the moment.
 
works nice with nemesis bracers, beside fountain-like shrines but its rather DB problem?

getting this spammed in console however [exceptions during ReadProcessMemory or WriteProcessMemory addresses 20, 320]:
Moving item args: <itemId:2019819677, ownerId:2017722493, InventorySlot:Bracers, column:0, row:0>
Exception while pulsing plugin GearSwap: System.Exception: Ukończono tylko część żądania ReadProcessMemory lub WriteProcessMemory, at addr: 00000020, Size: 4
w GreyMagic.ExternalProcessMemory.ReadByteBuffer(IntPtr addr, Void* buffer, Int32 count)
w GreyMagic.MemoryBase.Read[T](IntPtr addr)
w Zeta.Game.Internals.FastAttribGroupsEntry.GetAttribute[T](Int32 attribute)
w Zeta.Game.Internals.Actors.ACD.GetAttribute[T](Int32 attribute)
w Zeta.Game.Internals.Actors.ACD.GetAttribute[T](ActorAttributeType attributeType)
w Zeta.Game.Internals.Actors.DiaUnit.get_IsAttackable()
w GearSwap.gearSwap.<checkArea>b__0(DiaUnit a)
w System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
w System.Linq.Enumerable.Count[TSource](IEnumerable`1 source)
w GearSwap.gearSwap.checkArea()
w GearSwap.gearSwap.OnPulse()
w Zeta.Common.Plugins.PluginManager.PulsePlugin(IPlugin plugin)
Exception while pulsing plugin GearSwap: System.Exception: Ukończono tylko część żądania ReadProcessMemory lub WriteProcessMemory, at addr: 00000020, Size: 4
w GreyMagic.ExternalProcessMemory.ReadByteBuffer(IntPtr addr, Void* buffer, Int32 count)
w GreyMagic.MemoryBase.Read[T](IntPtr addr)
w Zeta.Game.Internals.FastAttribGroupsEntry.GetAttribute[T](Int32 attribute)
w Zeta.Game.Internals.Actors.ACD.GetAttribute[T](Int32 attribute)
w Zeta.Game.Internals.Actors.ACD.GetAttribute[T](ActorAttributeType attributeType)
w Zeta.Game.Internals.Actors.DiaUnit.get_IsAttackable()
w GearSwap.gearSwap.<checkArea>b__0(DiaUnit a)
w System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
w System.Linq.Enumerable.Count[TSource](IEnumerable`1 source)
w GearSwap.gearSwap.checkArea()
w GearSwap.gearSwap.OnPulse()
w Zeta.Common.Plugins.PluginManager.PulsePlugin(IPlugin plugin)
Exception while pulsing plugin GearSwap: System.Exception: Ukończono tylko część żądania ReadProcessMemory lub WriteProcessMemory, at addr: 00000020, Size: 4
w GreyMagic.ExternalProcessMemory.ReadByteBuffer(IntPtr addr, Void* buffer, Int32 count)
w GreyMagic.MemoryBase.Read[T](IntPtr addr)
w Zeta.Game.Internals.FastAttribGroupsEntry.GetAttribute[T](Int32 attribute)
w Zeta.Game.Internals.Actors.ACD.GetAttribute[T](Int32 attribute)
w Zeta.Game.Internals.Actors.ACD.GetAttribute[T](ActorAttributeType attributeType)
w Zeta.Game.Internals.Actors.DiaUnit.get_IsAttackable()
w GearSwap.gearSwap.<checkArea>b__0(DiaUnit a)
w System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
w System.Linq.Enumerable.Count[TSource](IEnumerable`1 source)
w GearSwap.gearSwap.checkArea()
w GearSwap.gearSwap.OnPulse()
w Zeta.Common.Plugins.PluginManager.PulsePlugin(IPlugin plugin)
Exception while pulsing plugin GearSwap: System.Exception: Ukończono tylko część żądania ReadProcessMemory lub WriteProcessMemory, at addr: 00000320, Size: 4
w GreyMagic.ExternalProcessMemory.ReadByteBuffer(IntPtr addr, Void* buffer, Int32 count)
w GreyMagic.MemoryBase.Read[T](IntPtr addr)
w Zeta.Game.Internals.FastAttribGroupsEntry.GetAttribute[T](Int32 attribute)
w Zeta.Game.Internals.Actors.ACD.GetAttribute[T](Int32 attribute)
w Zeta.Game.Internals.Actors.ACD.GetAttribute[T](ActorAttributeType attributeType)
w Zeta.Game.Internals.Actors.DiaUnit.get_IsAttackable()
w GearSwap.gearSwap.<checkArea>b__0(DiaUnit a)
w System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
w System.Linq.Enumerable.Count[TSource](IEnumerable`1 source)
w GearSwap.gearSwap.checkArea()
w GearSwap.gearSwap.OnPulse()
w Zeta.Common.Plugins.PluginManager.PulsePlugin(IPlugin plugin)
latest everything
 
SVN Revision 8
  • Added Status Magic Find
  • Added slider for Magic Find in Config, adjust what percent the mob must be at before MF gear is equiped.
  • Fixed Low Health status.
  • Added support for Nagelring (could add Cain's set if people provide me SNO)

Thanks for the update. And for Cain, here is what I have:

[GearSwap] Item: Cain's Scrivener - ActorSNO: 197210 (gloves)
[GearSwap] Item: Cain's Habit - ActorSNO: 197218 (pants)
[GearSwap] Item: Cain's Travelers - ActorSNO: 197225 (boots)
[GearSwap] Item: Cain's Insight - ActorSNO: 222559 (helm)

I don't have a Cain helm atm, but will craft one when possible and will post ID if someone doesn't do it first

Edit: added ActorSNO for the helm after crafting one
 
Last edited:
works nice with nemesis bracers, beside fountain-like shrines but its rather DB problem?

getting this spammed in console however [exceptions during ReadProcessMemory or WriteProcessMemory addresses 20, 320]:
Moving item args: <itemId:2019819677, ownerId:2017722493, InventorySlot:Bracers, column:0, row:0>
Exception while pulsing plugin GearSwap: System.Exception: Ukończono tylko część żądania ReadProcessMemory lub WriteProcessMemory, at addr: 00000020, Size: 4
w GreyMagic.ExternalProcessMemory.ReadByteBuffer(IntPtr addr, Void* buffer, Int32 count)
w GreyMagic.MemoryBase.Read[T](IntPtr addr)
w Zeta.Game.Internals.FastAttribGroupsEntry.GetAttribute[T](Int32 attribute)
w Zeta.Game.Internals.Actors.ACD.GetAttribute[T](Int32 attribute)
w Zeta.Game.Internals.Actors.ACD.GetAttribute[T](ActorAttributeType attributeType)
w Zeta.Game.Internals.Actors.DiaUnit.get_IsAttackable()
w GearSwap.gearSwap.<checkArea>b__0(DiaUnit a)
w System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
w System.Linq.Enumerable.Count[TSource](IEnumerable`1 source)
w GearSwap.gearSwap.checkArea()
w GearSwap.gearSwap.OnPulse()
w Zeta.Common.Plugins.PluginManager.PulsePlugin(IPlugin plugin)
Exception while pulsing plugin GearSwap: System.Exception: Ukończono tylko część żądania ReadProcessMemory lub WriteProcessMemory, at addr: 00000020, Size: 4
w GreyMagic.ExternalProcessMemory.ReadByteBuffer(IntPtr addr, Void* buffer, Int32 count)
w GreyMagic.MemoryBase.Read[T](IntPtr addr)
w Zeta.Game.Internals.FastAttribGroupsEntry.GetAttribute[T](Int32 attribute)
w Zeta.Game.Internals.Actors.ACD.GetAttribute[T](Int32 attribute)
w Zeta.Game.Internals.Actors.ACD.GetAttribute[T](ActorAttributeType attributeType)
w Zeta.Game.Internals.Actors.DiaUnit.get_IsAttackable()
w GearSwap.gearSwap.<checkArea>b__0(DiaUnit a)
w System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
w System.Linq.Enumerable.Count[TSource](IEnumerable`1 source)
w GearSwap.gearSwap.checkArea()
w GearSwap.gearSwap.OnPulse()
w Zeta.Common.Plugins.PluginManager.PulsePlugin(IPlugin plugin)
Exception while pulsing plugin GearSwap: System.Exception: Ukończono tylko część żądania ReadProcessMemory lub WriteProcessMemory, at addr: 00000020, Size: 4
w GreyMagic.ExternalProcessMemory.ReadByteBuffer(IntPtr addr, Void* buffer, Int32 count)
w GreyMagic.MemoryBase.Read[T](IntPtr addr)
w Zeta.Game.Internals.FastAttribGroupsEntry.GetAttribute[T](Int32 attribute)
w Zeta.Game.Internals.Actors.ACD.GetAttribute[T](Int32 attribute)
w Zeta.Game.Internals.Actors.ACD.GetAttribute[T](ActorAttributeType attributeType)
w Zeta.Game.Internals.Actors.DiaUnit.get_IsAttackable()
w GearSwap.gearSwap.<checkArea>b__0(DiaUnit a)
w System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
w System.Linq.Enumerable.Count[TSource](IEnumerable`1 source)
w GearSwap.gearSwap.checkArea()
w GearSwap.gearSwap.OnPulse()
w Zeta.Common.Plugins.PluginManager.PulsePlugin(IPlugin plugin)
Exception while pulsing plugin GearSwap: System.Exception: Ukończono tylko część żądania ReadProcessMemory lub WriteProcessMemory, at addr: 00000320, Size: 4
w GreyMagic.ExternalProcessMemory.ReadByteBuffer(IntPtr addr, Void* buffer, Int32 count)
w GreyMagic.MemoryBase.Read[T](IntPtr addr)
w Zeta.Game.Internals.FastAttribGroupsEntry.GetAttribute[T](Int32 attribute)
w Zeta.Game.Internals.Actors.ACD.GetAttribute[T](Int32 attribute)
w Zeta.Game.Internals.Actors.ACD.GetAttribute[T](ActorAttributeType attributeType)
w Zeta.Game.Internals.Actors.DiaUnit.get_IsAttackable()
w GearSwap.gearSwap.<checkArea>b__0(DiaUnit a)
w System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
w System.Linq.Enumerable.Count[TSource](IEnumerable`1 source)
w GearSwap.gearSwap.checkArea()
w GearSwap.gearSwap.OnPulse()
w Zeta.Common.Plugins.PluginManager.PulsePlugin(IPlugin plugin)
latest everything


Not sure why it isn't working with Fountain shrines for you, maybe its a distance thing. As for the error spamming:
DiaUnit.get_IsAttackabl e() seems to be the culprit for you. Are you sure you are using the latest DB? I wasn't getting this error. Once servers are back up I will verify.
 
Not sure why it isn't working with Fountain shrines for you, maybe its a distance thing. As for the error spamming:
DiaUnit.get_IsAttackabl e() seems to be the culprit for you. Are you sure you are using the latest DB? I wasn't getting this error. Once servers are back up I will verify.
I think it's not GearSwap issue, rather DB / trinity -> fountain shrines located in a4, where you have to go downstairs (reference image) are almost never clicked. Maybe point me to proper place to report it? ;)
Image->View attachment 127150

Edit: spam in console -> latest DB/all
 
Last edited:
Back
Top