General Question...Out of Group Healer Using Netbots...
Reply
Question...Out of Group Healer Using Netbots...
I Currently 12box i was wondering how Effective NetBots and NetHeal are? I Have 6 dps toons, 3 Healers, 2 Tanks 1 Ench I want to Build grps Wiz Wiz Necro Necro Mage Bard, then Warrior Pally Cleric Shaman Druid Ench to use all the utility of my 1 bard. But im wondering if anyone else has tried this? Dose it work Well, Im in Middle of Writting a Test macro for it atm any input would be wonderful!

Thanks

Lindeen
Fri Mar 08, 2013 10:53 pm
Netbots works for out of group heals (and buffs). It works very well. Modbot and Killian's e3 and other boxing focused macros rely on Netbots.

I've never used NetHeal. Some of the features look nice but I've heard from multiple sources (including authors of the above macros) that NetHeal just doesn't cut it.
Sat Mar 09, 2013 2:33 am
Senior Project Member
To give you an idea of how reliable and quickly it works. We have a plugin mq2emuinventory. The way it works is a bit convoluted but it is that way to make it more customizable. Basically I added item icon numbers for your inventory to netbots. Then a user, using macro variables, can describe what An inventory looks like in an ini. So the path from one char to another's screen is:

Char 1 netbots builds the transmission sequence containing item icons numbers. Delivers it to eqbc. Char2 receives it on eqbc, hands it off to netbots. Char 2 netbots parses the transmission sequence and loads all the data into a class. Then when it is accessed using TLO variables another class searches that data class and delivers the data to the screen. The inventory plugin adds another layer because those macro variables are saved in an ini file and contain other custom values that need to be parsed. That actually makes it slightly slower than netbots usually is. Also there is the whole graphics class that slows it down too. Even with the slower performance you can see in the video below that netbots is still quite quick and reliable. Between every item move all of this stuff has to happen, including a remote command being sent to the other toon to move the item... If netbots wasn't reliable or it was slow this would all fall apart.

TL;DR netbots is a bit complicated but still fast; mq2emuinventory even adds more layers and it's still fast.

Sat Mar 09, 2013 11:31 am
Project Lead
Thats pretty cool, Thanks alot for the Explanation that went miles with me understanding how its setup. After some Testing, This is def fast, and works Great, Starting to set it up with Buffs and other stuff now


I threw together this Macro to use netbots for healing, dont seem to hard to figure out, Now i just need to get more into the plugin and see what i can do with it
(Shaman Macro for THF Feel Free to Share, Im still learning)


Macro
More +

| Events and Chat and Includes
#turbo 10
#include spell_routines.inc
#chat tell
#Event  ImDead          "You have been slain by#*#"
#Event  ImDead          "You died."
#event Zoned            "You have entered#*#"
#event Zoned            "LOADING, PLEASE WAIT..."
#event ImHit            "#*#hits YOU for#*#"
#Event MaxBurn "[MQ2] MAX BURN NOW!"
#Event PetGear             "#*#tells you, 'pet'"
#Event BossModeON "[MQ2] Boss Mode ON"
#Event BossModeOff "[MQ2] Boss Mode OFF"


Sub Main


|Spell Declares, Adjust Spells Here (Melee Disc's)
/declare BuffSpell0         outer "Ancestral Focus Rk. II"
/declare BS0                outer gem3
/declare BuffSpell1         outer "Reflective Foresight Rk. II"
/declare BS1                outer gem4
/declare BuffSpell2         outer "Talisman of Might"
/declare BS2                outer gem3
/declare BuffSpell6         outer "Gladiator Rk. II"
/declare BS6                outer gem5
/declare smallhealspell         outer "Spiritual Touch Rk. II"
/declare RezRod outer "Staff of the Earthcrafter"


|/declare BuffSpell5         outer "Immaculate Prism of Life"
|/declare BS5                outer 3s


|Item Clicky Declares
/declare grouphealspell         outer "Immaculate Prism of Life"
/declare BuffSpell4         outer "Frozen Ritualchanter's Leggings"
/declare BS4                outer 2s
/declare BuffSpell3         outer "Spiritstaff of the Alchemist"
/declare BS3                outer 2s


/declare NetBotsArray1  outer
/declare NetBotsArray2  outer
/declare NetBotsArray3  outer
/declare NetBotsArray4  outer
/declare NetBotsArray5  outer
/declare NetBotsArray6  outer
/declare NetBotsArray7  outer
/declare NetBotsArray8  outer
/declare NetBotsArray9  outer
/declare NetBotsArray10  outer
/declare NetBotsArray11  outer
/declare NetBotsArray12  outer
/declare Bot bool outer  FALSE

| AA Declares, S= number for the aa, T= Reuse Timer

|Timer and General Declares
/declare MA outer Lindeen
/declare grouphealspellAERange  outer 70
/declare MaskclickTimer timer outer 0s
/declare EpicTimer timer outer 0m
/declare HotTimer timer outer 0s
/declare GrpHealTimer timer outer 0s
/declare boss outer FALSE
/declare TargetID int outer 0
|Main Loop, Add other loop and a connector /if command
:Main_Loop
/if (!${Bot}) /call Start1
/call GrpHeal
/call Healing
/doevents
/call Canni_Check
/call Epic




/if (${boss}) /goto :Healer_Loop
/if (${Target.Type.Equal[NPC]}) {
  /echo New Target: ${Target.Level} ${Target.Class} ${Target.CleanName} ${Target.ID}
  /varset TargetID ${Target.ID}
  /goto :Combat_Loop
  }
/goto :Main_Loop
|-------------------------------------------------------------------------------------------------------------------------
:Healer_Loop
/call GrpHeal
/call Healing
/doevents




/if (!${boss}) /goto :Main_Loop
/goto :Healer_Loop
|-------------------------------------------------------------------------------------------------------------------------------------------------
:Combat_Loop
/call GrpHeal
/call Healing
/doevents
/if (${HealTank}) /call HealTank



/if (${boss}) /goto :Healer_Loop
/if (!${Target.Type.Equal[NPC]}) /goto :Main_Loop
/goto :Combat_Loop


|Now add your Subs, These range from Events to anything really
Sub Healing
/if (${Me.Casting.ID}) /return
/if (${Me.Moving}) /return

/declare v int local
/for v 1 to 12
/if (${NetBots[${NetBotsArray${v}}].PctHPs}<70 && ${NetBots[${NetBotsArray${v}}].InZone} && ${NetHeal[${NetBotsArray${v}}].Distance}<80) {
   /target ${NetBotsArray${v}} PC
   /delay 1s
   /cast 9
   }
/next v
/return

Sub Start1
/varset Bot TRUE
/declare x int local
 /for x 1 to 12
         
         /varset NetBotsArray${x} ${NetBots.Client.Token[${x}, ]}

 /next x
/return


Sub GrpHeal
/if (${Me.Casting.ID}) /return
/if (${Me.Moving}) /return
/declare i int local
/declare x int local
/for x 0 to 5
/for i 0 to 5
/if (${x} == ${i}) /next i
/if (${Group.Member[${i}].Distance}<=100 && ${Group.Member[${i}].PctHPs}<85 && ${Group.Member[${i}].Type.Equal[PC]} && ${Group.Member[${x}].Distance}<=100 && ${Group.Member[${x}].PctHPs}<85 && ${Group.Member[${x}].Type.Equal[PC]} && ${GrpHealTimer} == 0) /call CastGrpHeal
/next i
/next x
/return





Sub CastGrpHeal
/call cast ${grouphealspell} item 2s
/echo Gheal Inc
/gsay Grp Heal Inc, Hang in there GIMPS!
/varset GrpHealTimer 15s
/return






Sub Canni_Check
  /if (${Me.Casting.ID}) /return
  /if (${Me.Moving}) /return

/declare pct_mana float local
/varcalc pct_mana ${Me.CurrentMana}/${Me.MaxMana}

/if (${Me.CurrentHPs} > 7000 && ${pct_mana} < 0.80 && ${Me.AltAbilityReady[Cannibalization]}) {
/call cast "Cannibalization" alt
  }  
/if (${Me.CurrentHPs} > 4000 && ${pct_mana} < 0.90 && ${Me.SpellReady[Spritual Sacrifice Rk. I]}) {
/call cast "Spritual Sacrifice Rk. I" gem1 4s
  }
/if (${Me.CurrentHPs} > 4000 && ${pct_mana} < 0.85 && ${Me.SpellReady[Ancient: Ancestral Calling]}) {
/call cast "Ancient: Ancestral Calling" gem2 4s
  }

/return

Sub Epic
/if (${Me.Casting.ID}) /return
/if (${Me.Moving}) /return
/if (${EpicTimer} == 0) {
/echo Clicking Shaman Epic 2.0
/g Clicking Shaman Epic 2.0
/target ${Hot}
/call cast "Ancient Talisman of Fates" item 1s
/varset EpicTimer 5m
}
/return




Sub CheckHP
/if (${Target.PctHPs}<40 && ${MaskclickTimer} == 0) {
  /call cast "Leather Bound Mask of Stone" item 2s
  /varset MaskclickTimer 30s
  }
/return

Sub HealTank
/if (${Me.Casting.ID}) /return
/if (${Me.Moving}) /return
/target ${Hot}
/if (${Target.PctHPs}<80 && ${Target.Type.Equal[PC]} && ${Target.Type.NotEqual[CORPSE]}) /call cast ${smallhealspell} gem9
/return

|AA Subs


|Events
Sub Event_ImHit
/tell Drizlaru Im Hit!
/return

Sub Event_Zoned
  /delay 60s
/return


Sub Event_ImDead
/end


|Aquire Correct Chatsender name, Used with /target ${NetTarget}, /assist ${NetTarget}
Sub AcquireTarget(string NewTarget, string TargetType, bool AssistYN)
  :LoopAcquireTarget
   /if (${NewTarget.Left[1].Compare[ ]}<0) /varset NewTarget ${NewTarget.Right[-2].Left[-1]}
   /tar ${NewTarget}  
   /echo String ChatSender is set as "${NewTarget}"

  /if (!${AssistYN} && ${Target.ID}!=${Spawn[${TargetType} ${NewTarget}].ID}) /goto :LoopAcquireTarget
/return
||||Chattt Trigger events check #chat {Setting
Sub Event_Chat(string ChatType,string ChatSender,string ChatText)
/if (${Select[${ChatText},SetMA]}) {
   /varset MA ${ChatSender.Right[-2].Left[-1]}
   /echo Main Assist Changed to ${MA}
   }
/if (${Select[${ChatText},HealTankOn]}) {
   /target ${ChatSender.Right[-2].Left[-1]}
   /varset HealTank TRUE
   /echo Healing Tank ${MA}
   }
/if (${Select[${ChatText},HealTankOff]}) {
   /varset HealTank FALSE
   /echo HealTank Set to [${HealTank}]
   }
/if (${Select[${ChatText},Buff]}) {
   /target ${ChatSender.Right[-2].Left[-1]}
   /delay 1s
   /say Buffing ${Target.Name}'s Group
   /memspell 3 ${BuffSpell0}
   /delay 1
   /memspell 4 ${BuffSpell1}
   /call cast ${BuffSpell0} ${BS0} 1s
   /delay 1s
   /call cast ${BuffSpell1} ${BS1} 1s
   /delay 1s
   /memspell 3 ${BuffSpell2}
   /call cast ${BuffSpell2} gem3 1s
   /delay 1s
   /call cast ${BuffSpell3} item 1s
   /delay 1s
   /memspell 5 ${BuffSpell6}
   /call cast ${BuffSpell6} gem5 1s
   /delay 2s
   /call cast "BuffSpell4" item 1s
   }
/if (${Select[${ChatText},WoA]}) {
   /target ${ChatSender.Right[-2].Left[-1]}
   /delay 1s
   /call cast ${BuffSpell3} item 1s
   }
/if (${Select[${ChatText},glad]}) {
   /target ${ChatSender.Right[-2].Left[-1]}
   /delay 1s
   /call cast ${BuffSpell6} ${BS6} 1s
   }
/if (${Select[${ChatText},rez]}) {
   /target ${ChatSender.Right[-2].Left[-1]}
   /delay 1s
   /corpse
   /delay 1s
   /call cast ${RezRod} item 1s
   /tell ${ChatSender.Right[-2].Left[-1]} WAKE UP!, NO SLEEPING......Rez is INC!
   }
/if (${Select[${ChatText},focus]}) {
   /target ${ChatSender.Right[-2].Left[-1]}
   /delay 1s
   /call cast ${BuffSpell0} ${BS0} 2s
   }
/if (${Select[${ChatText},reflect]}) {
   /target ${ChatSender.Right[-2].Left[-1]}
   /delay 1s
   /call cast ${BuffSpell1} ${BS1}
   }
/if (${Select[${ChatText},might]}) {
   /target ${ChatSender.Right[-2].Left[-1]}
   /delay 1s
   /call cast ${BuffSpell2} ${BS2} 2s
   }
/return


Sub Event_MaxBurn
/echo Max Burn Triggered!
/assist ${MA}
/delay 1
/call cast "Ring for the Spiritual" item 1s
/delay 1
/if (${Target.Distance}<70 && ${Target.Type.Equal[NPC]}) {
  /casting "Spirit Call" Alt -targetid|${Target.ID}
  }
/return



Sub Event_BossModeOff
/echo BOSS MODE DEACTIVATED!!!!!, BACK TO NORMAL MODE
/popup EXP MODE ACTIVATED
/varset boss FALSE
/return  

Sub Event_BossModeON
/echo BOSS MODE ACTIVATED!!!!!
/varset boss TRUE
/popup BOSS MODE ACTIVATED!    
/return  
Sun Mar 10, 2013 4:05 am
General Question...Out of Group Healer Using Netbots...
Reply