• Visit Rebornbuddy
  • Visit Panda Profiles
  • Visit LLamamMagic
  • MAD (Miraculum Apocatstasis Druidae)

    Discussion in 'Archives' started by Mirabis, Oct 18, 2012.

    1. Mirabis

      Mirabis Community Developer

      Joined:
      Jun 14, 2010
      Messages:
      4,475
      Likes Received:
      86
      Trophy Points:
      48
      Temporary Fix, cuz I've not much time.

      This should work for all the people having problems.

      Below zip file contains:
      1. Latest Tyrael
      2. Latest STABLE HB
      3. MAD with 523 references, v1.1.8 Updated & Fixed bgbuddy & lag.

      Should work fine, if not report back ;)
       
    2. Millz

      Millz Well-Known Member Buddy Store Developer

      Joined:
      Jan 15, 2010
      Messages:
      6,495
      Likes Received:
      223
      Trophy Points:
      63
      So using that version above, with Tyrael @ 200TPS (no framelock), and MAD's framelock turned on, it's still the same.

      [AsyncKey] RotationSelector takes 25216 ms and 37 ms client lag
      32:369 - HP: 100% - Mana: 100% - Druid - 0y - 100% hp - Swiftmend
      [CGSpellBook::CastSpell] Override ID: 18562, KnownIndex: 66
      46:306 - HP: 100% - Mana: 100% - Paladin - 19y - 100% hp - Rejuvenation
      [CGSpellBook::CastSpell] Override ID: 774, KnownIndex: 61
      [AsyncKey] RotationSelector takes 31482 ms and 37 ms client lag

      ..

      When I stop the bot after it seems to hang, it gives this error;

      Exception in TraceLine:Thread was being aborted. - at System.Threading.WaitHandle.WaitOneNative(SafeHandle waitableSafeHandle, UInt32 millisecondsTimeout, Boolean hasThreadAffinity, Boolean exitContext)
      at System.Threading.WaitHandle.InternalWaitOne(SafeHandle waitableSafeHandle, Int64 millisecondsTimeout, Boolean hasThreadAffinity, Boolean exitContext)
      at System.Threading.WaitHandle.WaitOne(Int32 millisecondsTimeout, Boolean exitContext)
      at Styx.MemoryManagement.Executor.Execute(Int32 fromId)
      at Styx.WoWInternals.World.GameWorld.(WoWPoint , WoWPoint , Single , CGWorldFrameHitFlags , WoWPoint& ) - mscorlib

      ..

      With Tyrael framelock on;

      [AsyncKey] RotationSelector takes 1021 ms and 39 ms client lag.

      Out of combat;

      [AsyncKey] RotationSelector takes 599 ms and 38 ms client lag
      [AsyncKey] RotationSelector takes 605 ms and 38 ms client lag
      [AsyncKey] RotationSelector takes 643 ms and 38 ms client lag
       

      Attached Files:

      Last edited: Dec 26, 2012
    3. reffih

      reffih New Member

      Joined:
      Feb 9, 2010
      Messages:
      97
      Likes Received:
      1
      Trophy Points:
      0
      nothing seems to work for me as well, doing terrace LFR atm and... Well yeah, everything just seems broken no matter how I set it up :D going back to 1.0.5
       
    4. jacobfraer

      jacobfraer New Member

      Joined:
      Oct 13, 2012
      Messages:
      164
      Likes Received:
      2
      Trophy Points:
      0
      Can anyone link me the Christmas edition? That one seemed to work :)
       
    5. Millz

      Millz Well-Known Member Buddy Store Developer

      Joined:
      Jan 15, 2010
      Messages:
      6,495
      Likes Received:
      223
      Trophy Points:
      63
      If anyone has 1.0.5 and can upload it, it'd be much appreciated :)
       
    6. Mirabis

      Mirabis Community Developer

      Joined:
      Jun 14, 2010
      Messages:
      4,475
      Likes Received:
      86
      Trophy Points:
      48
      if u set aside the speed calculation does it heal normally ?
       
    7. Millz

      Millz Well-Known Member Buddy Store Developer

      Joined:
      Jan 15, 2010
      Messages:
      6,495
      Likes Received:
      223
      Trophy Points:
      63
      Nope, it's the same, casts the odd heal every so often, but like once per 10-30 seconds when Tyrael's framelock isn't enabled.
       
    8. Mirabis

      Mirabis Community Developer

      Joined:
      Jun 14, 2010
      Messages:
      4,475
      Likes Received:
      86
      Trophy Points:
      48
      So it seems that a lot of people have problems with the new release.
      Tomorrow i'll run a comparison between v1.1.8 and 1.05 and merge them.

      My sincere apologies,

      I suggest reverting back to a earlier working version for use untill then.

      Kind regards,

      Mirabis
       
    9. Wolfie76

      Wolfie76 New Member

      Joined:
      Apr 13, 2012
      Messages:
      16
      Likes Received:
      0
      Trophy Points:
      0
      i have the 1.0.5 and ill upload it as im having the same problems - tried diffrent versions but heals are somehow NOT as good as the 1.0.5! it works best, stable, in raids/dungeons! tho pvp isnt good at all in old 1.0.5 .. so im hoping for a mix of the old MAD and 1.0.5 with pvp support in future version/s :p

      Keep up the good work Mirabis!
       

      Attached Files:

      Last edited: Dec 26, 2012
    10. mocbar

      mocbar New Member

      Joined:
      Sep 14, 2012
      Messages:
      254
      Likes Received:
      1
      Trophy Points:
      0
      can you tell witch svn number version 1.05 could be ?
      if i update now it tells me 131

      EDIT, ah found it > 57 :)
       
      Last edited: Dec 26, 2012
    11. xxxstar123

      xxxstar123 Member

      Joined:
      Aug 3, 2012
      Messages:
      393
      Likes Received:
      0
      Trophy Points:
      16
      i'm having issue that gives me 299 error also it's not healing in raids cast 1 or 2 spells and stops
       
    12. Anadiz

      Anadiz New Member

      Joined:
      Dec 2, 2012
      Messages:
      78
      Likes Received:
      0
      Trophy Points:
      0
      Oh man, i thought I was doing something wrong.

      I love this :D
       
    13. papaours

      papaours New Member

      Joined:
      Mar 4, 2011
      Messages:
      14
      Likes Received:
      0
      Trophy Points:
      0
      I've been debbuging 1.1.8 all day. I ran a profiler (dotTrace) on HB and now understand what is happening.

      Lags in HealRotationComp come from using IEnumerable. Since it's lazily evaluated, the where clauses are calculated about a zillion times in iteration heavy functions like the "Clusters" ones (instead of being evaluated once before calling them).

      If I just add toList() before passing unit lists to any Clusters function and wrap the rotation part in a framelock, it runs at a steady 50ms (in 25 players raid, instead of 2 secs). I think it shouldn't be too hard to get under 20ms, and keep a high framerate for high playability.

      In AcquireTargets, MAD.Healable seems pretty slow, so I pre-calculate the unit list before passing it to GetHealTarget, GetCleanseAsapTarget, etc...
      NearbyUnFriendlyUnits is recalulated for each player => I calculate it once at the begining.
      I disabled TargetIsHealer, TargetIsTank because these where also slow.

      With these changes AcquireTargets takes 200ms, down from 600ms.
      Buidling initial player list => 60ms
      GetHealTarget => 80ms
      DispellASAP => 50ms
      I didn't investigate targeting performance further, but i guess it's also some IEnumerable unit lists that are evaluated many times per rotation.

      I can still perceive downtime between spells, but it's not as bad as before.

      That's all for tonight !
       
    14. Mirabis

      Mirabis Community Developer

      Joined:
      Jun 14, 2010
      Messages:
      4,475
      Likes Received:
      86
      Trophy Points:
      48
      Skype chat a few days ago
      I was already testing and doing so , the last 3 days. I've ran DoTtrace myself multiple times and found that my IsPartyOrRaidMember /IsTank / IsHealer/ IsEnemy/ Pet Healing were slow and i was double checking so much stuff. Have secretly been working on a populate lists-> divide -> pull from that method ;)

      If ur interested in pulling those changes into the release, add me on skype we'll get it rolling.

      I guess this is what u meant:
      PHP:
              #region GetUnits
              
      public static List<WoWPlayerNearbyPartyPlayers = new List<WoWPlayer>();
              public static List<
      WoWUnitNearbyPartyUnits = new List<WoWUnit>();
              public static List<
      WoWUnitNearbyUnFriendlyUnits = new List<WoWUnit>();
              public static List<
      WoWPlayerNearbyUnFriendlyPlayers = new List<WoWPlayer>();
              public static List<
      WoWUnitNearbyUnits = new List<WoWUnit>();
              public static List<
      WoWPlayerNearbyPlayers = new List<WoWPlayer>();
              
              public static 
      Composite FillInitialList
              
      {
                  
      get
                  
      {
                      return
                          new 
      Action(delegate
                          
      {
                             
      //Clear Lists
                  
      NearbyPartyPlayers.Clear();
                  
      NearbyPartyUnits.Clear();
                  
      NearbyUnFriendlyUnits.Clear();
                  
      NearbyUnFriendlyPlayers.Clear();
                  
      NearbyUnits.Clear();
                  
      NearbyPlayers.Clear();
                  
                  
      IEnumerable<WoWUnitunits =
                      
      ObjectManager.GetObjectsOfType<WoWUnit>(truetrue).Where(
                          
      => (ValidUnit(p) && !Blacklist.Contains(p.Guid,BlacklistFlags.All) && p.DistanceSqr <= 40 40));


                 if (!
      MADSettings2.Instance.EnableFramelock)
                 {
                     foreach (
      WoWUnit unit in units)
                      {
                           
      //Just fill
                           
      NearbyUnits.Add(unit);
                         
      //Only Enemies
                          
      if (IsEnemy(unit))
                          {
                              
      //Enemy Units
                              
      NearbyUnFriendlyUnits.Add(unit);
                              
      //Cast to WoWPlayer
                              
      var player unit.ToPlayer();
                              if (
      player == null) continue;
                              
      //Add to Players
                              
      NearbyUnFriendlyPlayers.Add(player);
                              
      NearbyPlayers.Add(player);
                          }
                              
      //If Not enemy, only take party members
                          
      else if (IsMyPartyRaidMember(unit))
                          {
                              
      //Pets & Players in party
                              
      NearbyPartyUnits.Add(unit);
                              var 
      player unit.ToPlayer();
                              if (
      player == null) continue;
                              
      //Players in party
                              
      NearbyPartyPlayers.Add(player);
                              
      NearbyPlayers.Add(player);
                          }
                      }
                 }
                 else 
                 
      using (StyxWoW.Memory.AcquireFrame())
                  {
                      foreach (
      WoWUnit unit in units)
                      {
                           
      //Just fill
                           
      NearbyUnits.Add(unit);
                         
      //Only Enemies
                          
      if (IsEnemy(unit))
                          {
                              
      //Enemy Units
                              
      NearbyUnFriendlyUnits.Add(unit);
                              
      //Cast to WoWPlayer
                              
      var player unit.ToPlayer();
                              if (
      player == null) continue;
                              
      //Add to Players
                              
      NearbyUnFriendlyPlayers.Add(player);
                          }
                              
      //If Not enemy, only take party members
                          
      else if (IsMyPartyRaidMember(unit))
                          {
                              
      //Pets & Players in party
                              
      NearbyPartyUnits.Add(unit);
                              var 
      player unit.ToPlayer();
                              if (
      player == null) continue;
                              
      //Players in party
                              
      NearbyPartyPlayers.Add(player);
                          }
                      }
                  }
                              return 
      RunStatus.Failure;
                          });
                  }
              }
      If so, it'll be released somewhere tomorrrow mid day after i'm done testing etc. Ty for ur input tho
      Dungeon:
      Code:
      [/B][TreePerformance] Elapsed Time to traverse RotationSelector: 118 ms (19 ms client lag)
      More info tomorrow on progress, t's 05:11 I'm going too bed...
       
      Last edited: Dec 26, 2012
    15. Anadiz

      Anadiz New Member

      Joined:
      Dec 2, 2012
      Messages:
      78
      Likes Received:
      0
      Trophy Points:
      0
      I didn't understand a thing of that, but i appreciate your hard work :)
       
    16. papaours

      papaours New Member

      Joined:
      Mar 4, 2011
      Messages:
      14
      Likes Received:
      0
      Trophy Points:
      0
      I'm leaving until new year's eve, so I won't be too much help.

      For me, adding toList() before passing unit list to clustering functions yields the biggest improvement. I also removed some calls that I believe are duplicate. See View attachment MADCombat.cs .

      Here is a timing recap from 25 player raiding:
      Execution time for each part of targeting, List is kinda like your FillInitialList function
      Execution time from the begining of PVE rotation
      Now, according to the dotTrace logs, the most time eating functions are the numerous calls to GetAllAuras, through GetDebuffs etc... Every time HB does a ReadProcessMemory. I don't know how hard it would to cache auras for all players at the begining of the rotation.

      Well, finally getting the CC to queue spells before the GCD expires would be nice :D

      ps: What is your kype ?
       
      Last edited: Dec 27, 2012
    17. Mirabis

      Mirabis Community Developer

      Joined:
      Jun 14, 2010
      Messages:
      4,475
      Likes Received:
      86
      Trophy Points:
      48
      Miraveux.

      I took a look into ur edited version, like ur way u printElapsed for speed checks ;p Never actually gave it a try to bench every spell itself to see hoggers ;/
       
      Last edited: Dec 27, 2012
    18. Swizzie

      Swizzie New Member

      Joined:
      Feb 19, 2011
      Messages:
      915
      Likes Received:
      7
      Trophy Points:
      0
      This going to be fixed? This is stil not working in raid :/
       
    19. HoneyBrew

      HoneyBrew New Member

      Joined:
      Oct 24, 2011
      Messages:
      112
      Likes Received:
      0
      Trophy Points:
      0
      Mirabis is working on it.
       
    20. Mirabis

      Mirabis Community Developer

      Joined:
      Jun 14, 2010
      Messages:
      4,475
      Likes Received:
      86
      Trophy Points:
      48
      Yes, it will.
      Outdated.
       
      Last edited: Dec 27, 2012

    Share This Page