• Visit Rebornbuddy
  • Visit Panda Profiles
  • Visit LLamamMagic
  • Dungeonbuddy and the 10 Man Bot Raid - The full Story!

    Discussion in 'Success Stories' started by buzzerbeater, Jul 13, 2012.

    1. buzzerbeater

      buzzerbeater Well-Known Member

      Joined:
      Mar 21, 2011
      Messages:
      5,419
      Likes Received:
      28
      Trophy Points:
      48
      Good evening ladies and gentleman,

      I'm gonna present to you my newest "project", since I no longer bot for Gold or play WoW for fun, I create random stuff, my last project was a full warsong bot Match, which was really awesome, but we lost. :D


      The Preparation!
      You need to register and have one post to see spoilers!
      The Raidsetup!

      You need to register and have one post to see spoilers!

      The "First Raid"!

      You need to register and have one post to see spoilers!

      Beta Raid? It's wipe time!!

      You need to register and have one post to see spoilers!
      The Call up at the end!

      If there are any devs who can provide me with an working profile aka. dungeon script for the first boss only, i would be the happiest person on earth!! I'm ready to donate for sure. I made a plan how to do it and even mathematically calculate the coords behind the pillars etc. but, yeah, no idea how to put this in beautiful code.
      tbh. i don't even know if it's possible to code Raid Scripts atm, since nobody answered my post in the Dungeonbuddy Release Thread. :(



      Thanks a lot, if you read at least one line of this Stuff!

      I will put up videos and screenshots of the bosskills, just to let you know what's possible with this amazing bot! Maybe one day, it will be an 25man Raid, we have 16 Accounts atm for use, but this would most certainly kill our computers. :D

      Greets :)




      And thanks to all the people, who support Honorbuddy, you make it possible! :)
       
      Last edited: Jul 15, 2012
      bobby53 likes this.
    2. soussi

      soussi Member

      Joined:
      May 4, 2011
      Messages:
      432
      Likes Received:
      1
      Trophy Points:
      16
      Wauw This will be so EPIC! GoodLuck And looking forward to it :D
       
    3. wownerds

      wownerds New Member

      Joined:
      Feb 15, 2011
      Messages:
      1,385
      Likes Received:
      30
      Trophy Points:
      0
    4. wownerds

      wownerds New Member

      Joined:
      Feb 15, 2011
      Messages:
      1,385
      Likes Received:
      30
      Trophy Points:
      0
      Just saw you are going to use Dunatank's Warrior CC for this. We hereby offer you early access to our new v4.0 Alpha version.
       
    5. CodenameG

      CodenameG New Member

      Joined:
      Jan 15, 2010
      Messages:
      38,369
      Likes Received:
      231
      Trophy Points:
      0
      one of the dreams since i started botting is to run a full bot 40 man raid in perfect precision. this is defiantly getting close and i cant wait to see what happens.
       
    6. Battler624

      Battler624 Member

      Joined:
      Feb 9, 2012
      Messages:
      472
      Likes Received:
      0
      Trophy Points:
      16
      your problems.. NO DK? ....
       
    7. wilbo007

      wilbo007 Member

      Joined:
      Dec 20, 2011
      Messages:
      656
      Likes Received:
      15
      Trophy Points:
      18
      i dont get it
       
    8. Croga

      Croga Well-Known Member

      Joined:
      Jun 7, 2010
      Messages:
      1,636
      Likes Received:
      27
      Trophy Points:
      48
      Now I'm really sad that I can't help :(
      This is, indeed, something I'd *so* much like to see.

      Being an average project manager I'd say "Mwah, can't be that hard" ;)

      So if there's anything I can do to help, please let me know. I'm especially good at testing stuff until it breaks.
       
    9. panYama

      panYama Community Developer

      Joined:
      Jan 15, 2010
      Messages:
      2,629
      Likes Received:
      49
      Trophy Points:
      0
      very interesting.
       
    10. Stormchasing

      Stormchasing Community Developer

      Joined:
      Jan 15, 2011
      Messages:
      4,029
      Likes Received:
      48
      Trophy Points:
      48
      i've absolutely NO idea bout the Helpers from dungeonbuddy atm, but if they are working the way i think they work, then this script should work (couldn't test, still at work)
      PHP:
      using System;
      using System.Collections.Generic;
      using System.Diagnostics;
      using System.Linq;
      using Bots.DungeonBuddy.Attributes;
      using Bots.DungeonBuddy.Helpers;
      using CommonBehaviors.Actions;
      using Styx;
      using Styx.Helpers;
      using Styx.Logic;
      using Styx.Logic.Pathing;
      using Styx.WoWInternals;
      using Styx.WoWInternals.WoWObjects;
      using TreeSharp;
      using Tripper.Tools.Math;
      using Action TreeSharp.Action;

      namespace 
      Bots.DungeonBuddy.Dungeon_Scripts.Cataclysm
      {
          public class 
      DragonSoul Dungeon
          
      {
              
      #region Overrides of Dungeon
              
      public override uint DungeonId
              
      {
                  
      get { return 416; }
              }
              
      //tbd
              
      public override WoWPoint Entrance get { return new WoWPoint(-7570.482f, -1330.446f246.5363f); } }

              
      /// <summary>
              ///   IncludeTargetsFilter is used to add units to the targeting list. If you want to include a mob thats usually removed by the default filters, you shall use that.
              /// </summary>
              /// <param name="incomingunits"> Units passed into the method </param>
              /// <param name="outgoingunits"> Units passed to the targeting class </param>
              
      public override void IncludeTargetsFilter(List<WoWObjectincomingunitsHashSet<WoWObjectoutgoingunits)
              {
                  foreach (var 
      obj in incomingunits)
                  {
                      var 
      unit obj as WoWUnit;
                      if (
      unit != null)
                      {

                      }
                  }
              }

              
      /// <summary>RemoveTargetsFilter is used to remove units thats not wanted in target list. Like immune mobs etc.</summary>
              /// <param name="units">The incomingunits.</param>
              
      public override void RemoveTargetsFilter(List<WoWObjectunits)
              {
                  foreach (var 
      obj in units)
                  {
                      var 
      unit obj as WoWUnit;
                      if (
      unit != null)
                      {

                      }
                  }
              }
              public 
      override void WeighTargetsFilter(List<Targeting.TargetPriorityunits)
              {
                  foreach (var 
      priority in units)
                  {
                      var 
      unit priority.Object as WoWUnit;
                      if (
      unit != null)
                      {
                          
      //Madness, Ship, Hagara
                          //Blistering Tentacles, Twilight Sapper, Frozen Binding Crystal,Bound Lightning Elemental
                          
      if (unit.Entry.Equals(new uint[] { 56188569235613656700 })) 
                          {
                              
      priority.Score += 400;
                          }
                          
      //Yor'Sahj
                          //add the bubbles in the needed priority

                          //Zonozz Hardmode

                          //Spine of Deathwing
                          //Hideous Amalgamation, Corrupted Blood, Corruption with Fiery Grip, Burning Tendron
                      
      }
                  }
              }
              
      #endregion

              #region Encounter Handlers
              
      private uint crystalEntry 55346;
              
      //[EncounterHandler(0)]
              /*
               * public Composite RootLogic()
               * {
               * }
               */
              
      [EncounterHandler(55265"Morchock"Mode CallBehaviorMode.ProximityBossRange 200)]
              public 
      Composite MorchockEncounter()
              {
                  var 
      tankBossLoc = new WoWPoint(-1981.033, -2409.29969.05319);

                  var 
      bossFarPathEndLoc = new WoWPoint(-1981.033, -2409.29969.05319); //to be refined
                  
      var trashTankLoc = new WoWPoint(201.7278998.2936195.0932); //to be refined
                  
      var partyWaitLoc = new WoWPoint(201.39721008.957197.0022); //to be refined

                  
      WoWUnit boss nulltrash nullcrystals null;
                  return new 
      PrioritySelector(
                      
      ctx => boss ctx as WoWUnit,
                      
      // Clear the area and then pull boss.
                      
      new Decorator(
                          
      ctx => !boss.Combat,
                          new 
      PrioritySelector(
                              
      ctx => trash ScriptHelpers.GetUnfriendlyNpsAtLocation(() => tankBossLoc50=> != boss).FirstOrDefault(),
                      
      // pull the trash when boss is far away
                              
      ScriptHelpers.CreatePullNpcToLocation(
                                  
      ctx => trash != null && !StyxWoW.Me.Combat,
                                  
      ctx => boss.Location.DistanceSqr(bossFarPathEndLoc) <= 25 25 || trash.Location.DistanceSqr(trashTankLoc) <= 50 50,
                                  () => 
      trash, () => trashTankLoc, () => StyxWoW.Me.IsTank() ? trashTankLoc partyWaitLoc5),
                      
      // pull boss when he's near and trash is cleared.
                              
      ScriptHelpers.CreatePullNpcToLocation(
                                  
      ctx => trash == null && StyxWoW.Me.Location.DistanceSqr(tankBossLoc) <= 50 50,
                                  
      ctx => boss.Location.DistanceSqr(tankBossLoc) <= 25 25,
                                  () => 
      boss, () => tankBossLoc, () => StyxWoW.Me.IsTank() ? tankBossLoc StyxWoW.Me.Location5)                            
                              )),
                      
      // Handle boss encounter
                      
      new Decorator(
                          
      ctx => boss.Combat,
                          new 
      PrioritySelector(
                              
      ctx => crystals ObjectManager.GetObjectsOfType<WoWUnit>().Where(=> q.Entry == crystalEntry).FirstOrDefault(),
                              
      ScriptHelpers.CreateRunAwayFromBad(ctx => true30103851103785),
                              new 
      Decorator(
                                  
      ret => StyxWoW.Me.HasAura(103534) && !StyxWoW.Me.IsTank(), 
                                  
      ScriptHelpers.CreateWaitAtLocationWhile(ret => (StyxWoW.Me.HasAura(103534) || StyxWoW.Me.HasAura(103541) || StyxWoW.Me.HasAura(103536)) && !StyxWoW.Me.IsTank(), ()=>crystals.Location,10)
                                  )
                              )
                          )
                          ); 
              }
              
      #endregion
          
      }
      }
      The base script is taken from Blackrock Caverns, so maybe (no... it is sure, u have to) u have to refine some locations.
      I commented these points with "//to be refined", these locations have to be reentered by real values from Dragon Soul.
      Maybe we could remove some of them (maybe all except the tankLoc), but this has to be tested.
      The script should handle both -> runaway from black blood (maybe this has to be recoded, since i dunno if the behavior from scripthelper is supporting this... maybe it rains straigt to a stone and run with his head against it), run to the crystal and wait till debuff fades
       
    11. TheMaff

      TheMaff New Member

      Joined:
      May 15, 2012
      Messages:
      467
      Likes Received:
      4
      Trophy Points:
      0
      Lol you should record it!
       
    12. highvoltz

      highvoltz Well-Known Member

      Joined:
      Mar 22, 2010
      Messages:
      1,729
      Likes Received:
      141
      Trophy Points:
      63
      Interesting project.
      Current version of DungeonBuddy doesn't support queuing for Raids atm but it should still load the correct profile and script if you manually queue and join one.

      For calculating locations behind pillars or other objects you can use ScriptHelpers.CreateLosLocation, for example usage see scripts for last boss in Seth Halls or Slabhide in Stonecore (this isn't testing yet since ability that needs to be LOSed is only used in heroic mode)

      edit: if the pillars are at fixed locations then you can use the blackspot generator button in Developer tools window to get location and radius.


      Code:
              /// <summary>
              ///   This behavior will run out of Line-Of-Sight of a location.
              /// </summary>
              /// <param name="canRun"> The condition to run this behavior </param>
              /// <param name="locationToLos"> The location you want to get out of LOS with. </param>
              /// <param name="objectLocationToLosAt"> The center location of the object you want to use to LOS </param>
              /// <param name="objectRadius"> The radius of the object you want to use to LOS </param>
              /// <returns> </returns>
              public static Composite CreateLosLocation(CanRunDecoratorDelegate canRun,
                                                        Func<WoWPoint> locationToLos,
                                                        Func<WoWPoint> objectLocationToLosAt,
                                                        Func<float> objectRadius)
       
      Last edited: Jul 13, 2012
    13. Stormchasing

      Stormchasing Community Developer

      Joined:
      Jan 15, 2011
      Messages:
      4,029
      Likes Received:
      48
      Trophy Points:
      48
      No fixed locations for the pillars far as I know but if they are objects which are shown in objectmanager then I know some ways to get proper locations :) but thanks for the hint
       
    14. Kickazz006

      Kickazz006 Well-Known Member Moderator

      Joined:
      Jan 15, 2010
      Messages:
      20,567
      Likes Received:
      302
      Trophy Points:
      83
      something that kind of bugged me is you stated that there are no profiles

      There are profiles
      I believe you meant to say that there are no 'scripts'

      I profiled both LFR versions (same concept as regular / heroic for profile purposes)
      But the 'scripts' are missing of course (but lots of information in the profile for when the dungeonbuddy devs get around to making scripts)
       
    15. BrunoMC

      BrunoMC New Member

      Joined:
      May 31, 2012
      Messages:
      79
      Likes Received:
      0
      Trophy Points:
      0
      Damn, this is like.. a 400? investment :p
       
    16. shlord

      shlord Member

      Joined:
      Jan 4, 2012
      Messages:
      457
      Likes Received:
      1
      Trophy Points:
      18
      i almost cried the first time i saw a multiboxer raid 10man video.. if i see this i definitely will
       
    17. Stormchasing

      Stormchasing Community Developer

      Joined:
      Jan 15, 2011
      Messages:
      4,029
      Likes Received:
      48
      Trophy Points:
      48
      i've edited my first version of the Morchock Encounter
      but the forum won't let me upload -.-
      okay then i post it with php-tags hope that works
      this script should do the following:

      - Pull boss (if tank)
      - Taunt boss (if tank and boss currenttarget has Crush Armor StackCount > 3)
      - Run to the Resonating Crystals and wait there till Debuff is gone (i hope the CC executes rangeSpells and Healing with this Behavior)
      - Run to the Pillars (with LOS Behavior)
      - Run away if Blood Aura (Black Blood of Earth),
      PHP:
      using System;
      using System.Collections.Generic;
      using System.Diagnostics;
      using System.Linq;

      using Bots.DungeonBuddy.Attributes;
      using Bots.DungeonBuddy.Helpers;

      using Styx;
      using Styx.Logic;
      using Styx.Logic.Combat;
      using Styx.Combat.CombatRoutine;
      using Styx.Logic.Pathing;
      using Styx.WoWInternals;
      using Styx.WoWInternals.WoWObjects;
      using TreeSharp;
      using Action TreeSharp.Action;


      namespace 
      Bots.DungeonBuddy.Dungeon_Scripts.Cataclysm
      {
          public class 
      TheSiegeOfWyrmrestTempleHeroic Dungeon
          
      {
              
      #region Overrides of Dungeon
              
      public override uint DungeonId
              
      {
                  
      get { return 416; }
              }
              public 
      override WoWPoint Entrance get { return new WoWPoint(-8263.148f, -4510.692f, -219.3243f); } }

              
      /// <summary>
              ///   IncludeTargetsFilter is used to add units to the targeting list. If you want to include a mob thats usually removed by the default filters, you shall use that.
              /// </summary>
              /// <param name="incomingunits"> Units passed into the method </param>
              /// <param name="outgoingunits"> Units passed to the targeting class </param>
              
      public override void IncludeTargetsFilter(List<WoWObjectincomingunitsHashSet<WoWObjectoutgoingunits)
              {
                  foreach (var 
      obj in incomingunits)
                  {
                      var 
      unit obj as WoWUnit;
                      if (
      unit != null)
                      {

                      }
                  }
              }

              
      /// <summary>RemoveTargetsFilter is used to remove units thats not wanted in target list. Like immune mobs etc.</summary>
              /// <param name="units">The incomingunits.</param>
              
      public override void RemoveTargetsFilter(List<WoWObjectunits)
              {
                  foreach (var 
      obj in units)
                  {
                      var 
      unit obj as WoWUnit;
                      if (
      unit != null)
                      {

                      }
                  }
              }
              public 
      override void WeighTargetsFilter(List<Targeting.TargetPriorityunits)
              {
                  foreach (var 
      priority in units)
                  {
                      var 
      unit priority.Object as WoWUnit;
                      if (
      unit != null)
                      {
                          
      //Madness, Ship, Hagara
                          //Blistering Tentacles, Twilight Sapper, Frozen Binding Crystal,Bound Lightning Elemental
                          /*if (unit.Entry.Equals(new uint[] { 56188, 56923, 56136, 56700 }))
                          {
                              priority.Score += 400;
                          }*/
                          //Yor'Sahj
                          //add the bubbles in the needed priority

                          //Zonozz Hardmode

                          //Spine of Deathwing
                          //Hideous Amalgamation, Corrupted Blood, Corruption with Fiery Grip, Burning Tendron
                      
      }
                  }
              }
              
      #endregion

              #region Encounter Handlers
              
      private uint crystalEntry 55346;
              
      //[EncounterHandler(0)]
              /*
               * public Composite RootLogic()
               * {
               * }
               */
              
      private static uint resonatingCrystals 55346;
              private static 
      uint InnerWall 209596;
              private static List<
      WoWGameObjectMorchockPillars {get{return ObjectManager.GetObjectsOfType<WoWGameObject>().Where(=> w.Entry == InnerWall).OrderBy(w=>w.Distance).ToList();}}
              private static 
      WoWGameObject MorchockCrystals get { return ObjectManager.GetObjectsOfType<WoWGameObject>().Where(=> q.Entry == resonatingCrystals).FirstOrDefault(); } }
              [
      EncounterHandler(55265"Morchock"Mode CallBehaviorMode.ProximityBossRange 200)]
              public 
      Composite MorchockEncounter()
              {
                  var 
      tankBossLoc = new WoWPoint(-1970.588, -2408.60268.5843);

                  var 
      bossFarPathEndLoc = new WoWPoint(-2005.624, -2409.55470.20834);
                  
      //<Hotspot X="-2005.624" Y="-2409.554" Z="70.20834" />
                  
      var trashTankLoc = new WoWPoint(-2054.229, -2406.15173.31179);
                  
      /* Trash packs for Hardmode to be cleared
                   * <Hotspot X="-2033.066" Y="-2356.053" Z="70.50761" />
                   * <Hotspot X="-1977.595" Y="-2305.988" Z="65.32207" />
                   * <Hotspot X="-1977.17" Y="-2494.873" Z="64.29511" />
                   * <Hotspot X="-2043.77" Y="-2517.459" Z="71.97334" />
                   */
                  
      var partyWaitLoc = new WoWPoint(-2054.229, -2406.15173.31179);

                  
      WoWUnit boss nulltrash null;
                  return new 
      PrioritySelector(
                      
      ctx => boss ctx as WoWUnit,
                      
      // Clear the area and then pull boss.
                      
      new Decorator(
                          
      ctx => !boss.Combat,
                          new 
      PrioritySelector(
                              
      ctx => trash ScriptHelpers.GetUnfriendlyNpsAtLocation(() => tankBossLoc50=> != boss).FirstOrDefault(),
                      
      // pull the trash when boss is far away
                              
      ScriptHelpers.CreatePullNpcToLocation(
                                  
      ctx => trash != null && !StyxWoW.Me.Combat,
                                  
      ctx => boss.Location.DistanceSqr(bossFarPathEndLoc) <= 25 25 || trash.Location.DistanceSqr(trashTankLoc) <= 50 50,
                                  () => 
      trash, () => trashTankLoc, () => StyxWoW.Me.IsTank() ? trashTankLoc partyWaitLoc5),
                      
      // pull boss when he's near and trash is cleared.
                              
      ScriptHelpers.CreatePullNpcToLocation(
                                  
      ctx => trash == null && StyxWoW.Me.Location.DistanceSqr(tankBossLoc) <= 50 50,
                                  
      ctx => boss.Location.DistanceSqr(tankBossLoc) <= 25 25,
                                  () => 
      boss, () => tankBossLoc, () => StyxWoW.Me.IsTank() ? tankBossLoc StyxWoW.Me.Location5)
                              )),
                      
      // Handle boss encounter
                      
      new Decorator(
                          
      ctx => boss.Combat,
                          new 
      PrioritySelector(                       
                              
                              new 
      Decorator(
                                  
      ret => (StyxWoW.Me.HasAura(103534) || StyxWoW.Me.HasAura(103541) || StyxWoW.Me.HasAura(103536)) && !StyxWoW.Me.IsTank(),
                                  
      ScriptHelpers.CreateWaitAtLocationWhile(ret => (StyxWoW.Me.HasAura(103534) || StyxWoW.Me.HasAura(103541) || StyxWoW.Me.HasAura(103536)) && !StyxWoW.Me.IsTank(), () => MorchockCrystals.Location10)
                                  ),
                              
      ScriptHelpers.CreateLosLocation(ctx => MorchockPillars.Count>=1,()=>boss.Location,()=>MorchockPillars[0].Location, ()=>10), //Run to the Pillars
                              
      ScriptHelpers.CreateRunAwayFromBad(ctx => true30103851103785), //If behin Pillars, runaway from Blood
                              //103687 - Crush Armor
                              
      new Decorator(ret => StyxWoW.Me.IsTank() && boss.CurrentTarget.Guid != StyxWoW.Me.Guid && GetStacksOfDebuff(boss.CurrentTarget"Crush Armor") > 3CreateTankTaunt(boss))
                              )
                          )
                          );
              }
              private 
      uint GetStacksOfDebuff(WoWUnit unitstring Debuff)
              {
                  if (
      unit != null && unit.HasAura(Debuff))
                      return 
      unit.Auras[Debuff].StackCount;
                  return 
      0;
              }
              private 
      Composite CreateTankTaunt(WoWUnit tar)
              {
                  
      string tauntSpell1 null;
                  
      string tauntSpell2 null;
                  switch (
      StyxWoW.Me.Class)
                  {
                      case 
      WoWClass.DeathKnight:
                          
      tauntSpell1 "Dark Command";
                          
      tauntSpell2 "Death Grip";
                          break;
                      case 
      WoWClass.Druid:
                          
      tauntSpell1 "Growl";
                          
      tauntSpell2 "Challenging Roar";
                          break;
                      case 
      WoWClass.Paladin:
                          
      tauntSpell1 "Hand of Reckoning";
                          
      tauntSpell2 "Righteous Defense";
                          break;
                      case 
      WoWClass.Warrior:
                          
      tauntSpell1 "Taunt";
                          
      tauntSpell2 "Intervene";
                          break;
                  }
                  return new 
      Decorator(ret => StyxWoW.Me.IsTank() && tar.CurrentTarget.Guid != StyxWoW.Me.Guid,
                      new 
      PrioritySelector(
                          new 
      Decorator(
                              
      ret => SpellManager.CanCast(tauntSpell1),
                              new 
      Action(ret => SpellManager.Cast(tauntSpell1tar))),
                              new 
      Decorator(
                              
      ret => SpellManager.CanCast(tauntSpell2),
                              new 
      Action(ret => SpellManager.Cast(tauntSpell2tar)))));
              }
              
      #endregion
          
      }
      }
      U have to replace the content of the File The Siege of Wyrmrest Temple Heroic.cs with this script
       

      Attached Files:

      Last edited: Jul 13, 2012
    18. Jianyu

      Jianyu New Member

      Joined:
      Jun 14, 2010
      Messages:
      439
      Likes Received:
      0
      Trophy Points:
      0
      If this ends up working, I will clap my hands till they fall off lol!
       
    19. Terrorschlag

      Terrorschlag Member

      Joined:
      May 14, 2011
      Messages:
      48
      Likes Received:
      1
      Trophy Points:
      8
      Gonna keep my eyes on this one! :)
       
    20. Ama

      Ama New Member

      Joined:
      Jun 6, 2011
      Messages:
      1,171
      Likes Received:
      33
      Trophy Points:
      0
      This is pretty awesome. I'm also honored that you are using 2 of my CCs.
       

    Share This Page