• Visit Rebornbuddy
  • [work in progress] Singular + SimcraftImpl all-in-one CR

    Discussion in 'All in One' started by aash, Aug 31, 2015.

    1. aash

      aash Member

      Joined:
      Oct 14, 2014
      Messages:
      179
      Likes Received:
      9
      Trophy Points:
      18
      [div=font-family:segoe ui;color:#333333;font-size:10pt;font-style:normal; -webkit-font-smoothing:antialiased; text-rendering: optimizelegibility;]
      @shineey
      Honestly I would love to do it, really. I really like the idea of implementing class logic (regardless of spec dps|heal|tank) in a domain specific language like *.simc. It is simple to understand and behaviors are simple to modify/extend. The major limiting factor is amount of free time I have right now. Sorry.
      [/div]
       
      Last edited: Sep 20, 2015
    2. shineey

      shineey Member

      Joined:
      Nov 14, 2014
      Messages:
      133
      Likes Received:
      0
      Trophy Points:
      16
      No rush! I was just thinking that it would be a great addition. I realize that it would probably be a pretty time-intensive thing to add that functionality. I currently don't have any of those classes/specs, but it would be something good to look forward to sometime in the future for everyone i think. I'd love to try to help if possible. I've done my fair shair of edits to SimcraftImpl, but still can't really tell where the code is that determines what to do with each action or condition. Kane's code seems a bit messy/convoluted for me, or maybe just not commented enough.
       
    3. Lauw

      Lauw New Member

      Joined:
      Aug 7, 2011
      Messages:
      17
      Likes Received:
      0
      Trophy Points:
      0
      Not working for me :-(

      Ach help me out please? :)

      Cannot get it to work, my toon just stands till.
      If i change back to singular in class, it starts doing stuff.

      I have downloaded the right zip from github and replaced the files and folders under Honorbuddy\Routines\Singular with the ones from the zip.
      Configured class config -> Generals group -> Override tags changed from singular to simcraftimpl
      I do not have the Simcraft Impl bot installed, just clean HB with built in bots.
      Deleted everything in CompiledAssemblies, just in case.
      I downloaded profiles from archive link, but it does not contain any priest profile.
      So i installed simcraft and imported my character.
      Created a file with same name as my priest - Eldárwén.simc
      Copied the data when importing into the Eldárwén.simc file.

      Attached log where i start combatbot and started attacking a mob, but nothing happens.
      I open class config, change from simcraftimpl to singular.
      Save and close, wupti... now it starts killing.

      What am i doing wrong?

      Kind regards,
      LauW
       

      Attached Files:

    4. shineey

      shineey Member

      Joined:
      Nov 14, 2014
      Messages:
      133
      Likes Received:
      0
      Trophy Points:
      16
      Some possible issues that may be causing the problem you are facing:

      1. The strange characters in the file name
      2. I know that when I was trying to get SimcraftImpl to work with my shadow priest back in March-ish, I had to make significant changes to the .simc file, since some of the conditionals were not implemented. The cycle_targets action is not implemented correctly either, well, it seems to cycle the targets correctly, but the target=1,2,3,etc was definitely not implemented.
      3. In the log, i noticed the lines that say "I dont recognize the option target_if=max:spell_targets.mind_sear_tick" - SimcraftImpl has not implemented the "spell_targets.*" conditional. I work around this by using "active_targets" instead of the "max:spell_targets.*"
      4. There is also "Invalid expression term '&&' - line c:\Users\LauWRené\AppData\Local\Temp\xlabox44.0.cs(116,79) : error CS1525: Invalid expression term '&&'" in your log. go through your simc file and make sure the conditionals only use ONE ampersand instead of two.
       
    5. Fubsnoobs

      Fubsnoobs New Member

      Joined:
      Jan 25, 2015
      Messages:
      10
      Likes Received:
      0
      Trophy Points:
      1
      @Lauw- I've ran into the same issue with my priest. Did you try the fix shineey talked about ? "3. In the log, i noticed the lines that say "I dont recognize the option target_if=max:spell_targets.mind_sear_tick" - SimcraftImpl has not implemented the "spell_targets.*" conditional. I work around this by using "active_targets" instead of the "max:spell_targets.*"

      I'm trying to edit my simc file but still get tons of errors on the priest.

      Found on my Pally I get the following:

      63578717027.7454>:Compiling Action Lists
      <63578717028.1692>:New Apl: Paladin_Retribution_T17H
      <63578717028.3135>:Loading configuration
      <63578717028.3485>:Configuration successfully loaded.
      <63578717031.5786>:Behaviors created !

      If I figure it out I'll post.

      @Shineey can you post your priest file to kind of point me in the right direction? Github maybe?
       
    6. shineey

      shineey Member

      Joined:
      Nov 14, 2014
      Messages:
      133
      Likes Received:
      0
      Trophy Points:
      16
      Well I currently don't have a priest anymore, but I do have profiles that I know work for a frost DK, WW monk, and BM hunter if you'd like to take a look at those. My Ret pally may still work as well. I still have my priest profile from march, but I don't have a priest to test it on since I don't really enjoy casters. Another point that I should mention, is that any conditions that are appended with ".react" will not function properly. As far as I can tell, the Simcraft API just uses it as a proc conditional and it functions the same if you remove it. So as soon as I start a new simc file from an imported SimulationCraft simc, i do a Find and Replace for ".react" and delete them all. Note: I am saying that I only delete the part that says ".react", not the part that precedes it.
       
    7. Fubsnoobs

      Fubsnoobs New Member

      Joined:
      Jan 25, 2015
      Messages:
      10
      Likes Received:
      0
      Trophy Points:
      1
      Shineey I’d love to take a look at your old priest and other working scripts to try and learn how to edit the imported SIMC files. Thanks for the tip on the .react stuff and thanks for trying to explain to this noob how this program works. I really appreciate your help and time.

      Fubs
       
    8. Fearce

      Fearce Member

      Joined:
      Jan 15, 2010
      Messages:
      39
      Likes Received:
      0
      Trophy Points:
      6
      hey, my frost mage doesnt use ice nova or comet storm? :)
       
    9. pookthetook

      pookthetook Member Buddy Store Developer

      Joined:
      Jan 28, 2012
      Messages:
      214
      Likes Received:
      21
      Trophy Points:
      18
      Normal code reuse in multiple projects is by creating a common core library and including that in the new projects.
      If you want to share code that's only in a plugin to be able to use it in other things then use reflection.

      Say I have this plugin (irrelevant plugin overrides omitted):
      PHP:
      namespace Pookthetook.Examples
      {
          public class 
      LoggingPlugin Styx.Plugins.HBPlugin
          
      {
              public 
      override string Name => "Logging Plugin";

              public static 
      void WriteToLog(string message)
              {
                  
      Styx.Common.Logging.Write("[LoggingPlugin]: " message);
              }
          }
      }
      Then to use that WriteToLog method from a different plugin, botbase, profile etc:
      PHP:
      // Hold the method from the plugin.
      private Action<stringWriteToLogAction;

      // Initialize WriteToLogAction
      private void Initialize()
      {
          var 
      assembly AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(=> a.GetName().Name.Contains("Logging Plugin"));
          var 
      type assembly.GetType("Pookthetook.Examples.LoggingPlugin");
          var 
      methodInfo apiType.GetMethod("WriteToLog"BindingFlags.Public | BindingFlags.Static);
          
      WriteToLogAction = (Action<string>)Delegate.CreateDelegate(typeof(Action<string>), methodInfo);
      }

      // Once initialized, call this to easily use the method from the plugin
      public void WriteToPluginLog(string message)
      {
          
      WriteToLogAction(message);
      }
      When you call WriteToPluginLog after initializing, it would show up with "[LoggingPlugin]: " as a prefix because it's getting called from that separate plugin.
      This example is more work than just writing the same method twice, but is just a simple demo. Defensive coding practices were omitted for brevity as well - in production code it should handle things like the assembly not existing.

      Reflection can be used for all kinds of things like creating instances of classes and more complex code than this.
      It can even be called from a profile by using RunCode.

      That said, reflection is slow and I don't personally suggest requiring dependencies of separate projects. Just wrap everything in a common core project and include it in all others that will use it.
      You said you were curious so I showed you even though I don't recommend it. Maybe you'll find some great use (I personally use it in profiles). Either way, you can check that off your to do list. :)
       
      Last edited: Sep 26, 2015
    10. aash

      aash Member

      Joined:
      Oct 14, 2014
      Messages:
      179
      Likes Received:
      9
      Trophy Points:
      18
      [div=font-family:segoe ui;color:#333333;font-size:10pt;font-style:normal; -webkit-font-smoothing:antialiased;text-rendering: optimizelegibility]@pookthetook
      Using reflection in a such manner involves too much boilerplate code. Reusing classes or the groups of classes is a pain: you should import `em all. I have invented the other way to reuse whole assembly. I will share it later.
      [/div]
       
    11. Fubsnoobs

      Fubsnoobs New Member

      Joined:
      Jan 25, 2015
      Messages:
      10
      Likes Received:
      0
      Trophy Points:
      1
      Sounds awesome even if I don't totally understand everything you guys are talking about.

      Keep up the good work and thanks again aash for taking this project on.
       
    12. shineey

      shineey Member

      Joined:
      Nov 14, 2014
      Messages:
      133
      Likes Received:
      0
      Trophy Points:
      16
      Here's a BM hunter rotation
      I got some of it from someone else that was trying to get it to auto tranq-shot for bosses like Beastmaster if he had the enrage buff, but I'm not sure if it worked. I just tried to do a "target.buff.savage_howl.up" and SimcraftImpl threw an error and wouldn't compile like that, so idk how to get that to work exactly
      PHP:
      hunter="Shineey_Hunter_T18_BM"
      level=100
      race
      =
      role=attack
      position
      =ranged_back
      talents
      =0001333
      spec
      =beast_mastery
      summon_pet
      =spirit_beast

      #https://www.thebuddyforum.com/honorbuddy-forum/botbases/204041-simcraft-implemented-raidbot-derivate-integrated-combat-post1913703.html#post1913703

      hotkeys+=/hotkey_barrage,none,Z

      actions
      +=/mend_pet,if=(pet.health.pct<=50)&!pet.buff.mend_pet.up
      actions
      +=/spirit_mend,if=(health.pct<=50)

      actions+=/tranquilizing_shot,if=debuff.savage_howl.up
      actions
      +=/tranquilizing_shot,if=debuff.reactive_earth_shield.up
      actions
      +=/tranquilizing_shot,if=debuff.cauterizing_bolt.up
      actions
      +=/tranquilizing_shot,if=debuff.earthen_barrier.up

      #actions+=/use_item,name=trinket_slot_1
      actions+=/dire_beast
      actions
      +=/stampede,if=(buff.bloodlust.up|buff.focus_fire.up)&cooldowns_enabled
      #From CaptainSubtext
      #actions+=/focus_fire,if=buff.focus_fire.down&pet.buff.frenzy.up&(((cooldown.bestial_wrath.remains<gcd))|(buff.stampede.up)|(buff.bestial_wrath.up))
      #From summonstone
      actions+=/focus_fire,if=buff.focus_fire.down&pet.buff.frenzy.up&(buff.bestial_wrath.remains>3|(pet.buff.frenzy.remains<1)|(talent.stampede.enabled&cooldown.stampede.remains>265)|(cooldown.bestial_wrath.remains<gcd&buff.bestial_wrath.down))
      #Original
      #actions+=/focus_fire,if=buff.focus_fire.down&pet.buff.frenzy.up&((cooldown.bestial_wrath.remains<gcd&buff.bestial_wrath.down)|(talent.stampede.enabled&buff.stampede.remains)|pet.buff.frenzy.remains<1)
      actions+=/bestial_wrath,if=focus>30&!buff.bestial_wrath.up

      # Choose single target or AoE
      actions+=/call_action_list,name=single,if=(active_enemies=1)|!aoe_enabled
      actions
      +=/call_action_list,name=aoe,if=active_enemies>1&aoe_enabled

      # Single Target
      actions.single+=/focus_fire,five_stacks=1
      actions
      .single+=/kill_command
      actions
      .single+=/a_murder_of_crows
      actions
      .single+=/kill_shot
      actions
      .single+=/focusing_shot,if=focus<50

      # Cast a second shot for steady focus if that won't cap us.
      actions.single+=/cobra_shot,if=buff.steady_focus.remains<7&(14+cast_regen)<focus.deficit

      # Prepare for steady focus refresh if it is running out.
      actions.single+=/cobra_shot,if=talent.steady_focus.enabled&buff.steady_focus.remains<4&focus<50
      actions
      .single+=/glaive_toss
      actions
      .single+=/barrage,if=hotkey_barrage
      actions
      .single+=/powershot,if=focus.time_to_max>cast_time
      actions
      .single+=/arcane_shot,if=(buff.thrill_of_the_hunt.react&focus>35)|buff.bestial_wrath.up
      actions
      .single+=/arcane_shot,if=focus>=75
      actions
      .single+=/cobra_shot

      # AoE
      actions.aoe+=/multishot,if=pet.buff.beast_cleave.remains<0.5
      actions
      .aoe+=/focus_fire,five_stacks=1
      actions
      .aoe+=/barrage,if=hotkey_barrage
      actions
      .aoe+=/explosive_trap,if=active_enemies>5
      actions
      .aoe+=/multishot,if=active_enemies>5
      actions
      .aoe+=/kill_command
      actions
      .aoe+=/a_murder_of_crows
      actions
      .aoe+=/kill_shot
      actions
      .aoe+=/focusing_shot,if=focus<50

      # Cast a second shot for steady focus if that won't cap us.
      actions.aoe+=/cobra_shot,if=buff.steady_focus.remains<7&(14+cast_regen)<focus.deficit
      actions
      .aoe+=/explosive_trap

      # Prepare for steady focus refresh if it is running out.
      actions.aoe+=/cobra_shot,if=talent.steady_focus.enabled&buff.steady_focus.remains<4&focus<50
      actions
      .aoe+=/glaive_toss
      actions
      .aoe+=/barrage,if=hotkey_barrage
      actions
      .aoe+=/powershot,if=focus.time_to_max>cast_time
      actions
      .aoe+=/cobra_shot,if=active_enemies>5
      actions
      .aoe+=/arcane_shot,if=(buff.thrill_of_the_hunt.react&focus>35)|buff.bestial_wrath.up
      actions
      .aoe+=/arcane_shot,if=focus>=75
      actions
      .aoe+=/cobra_shot

      Here's a Dual Wield Frost DK
      PHP:
      deathknight="Death_Knight_Frost_1h_T18H"
      level=100
      race
      =draenei
      role
      =attack
      position
      =back
      talents
      =http://us.battle.net/wow/en/tool/talent-calculator#dZ!1200000
      glyphs=blood_boil/raise_ally/regenerative_magic/tranquil_grip/army_of_the_dead
      spec
      =frost

      # This default action priority list is automatically created based on your character.
      # It is a attempt to provide you with a action list that is both simple and practicable,
      # while resulting in a meaningful and good simulation. It may not result in the absolutely highest possible dps.
      # Feel free to edit, adapt and improve it to your own needs.
      # SimulationCraft is always looking for updates and improvements to the default action lists.

      hotkeys+=/hk_pillar_of_frost,none,Z

      # Executed every time the actor is available.

      actions+=/deaths_advance,if=movement.remains>2
      actions
      +=/army_of_the_dead,if=cooldowns_enabled
      actions
      +=/pillar_of_frost,if=hk_pillar_of_frost
      actions
      +=/blood_fury,if=cooldowns_enabled
      actions
      +=/berserking,if=cooldowns_enabled
      actions
      +=/arcane_torrent,if=cooldowns_enabled
      actions
      +=/use_item,slot=trinket1,if=buff.pillar_of_frost.up
      actions
      +=/plague_leech,if=disease.min_remains<1
      actions
      +=/soul_reaper,if=target.health.pct<=35
      actions
      +=/blood_tap,if=target.health.pct<=35&cooldown.soul_reaper.remains=0
      actions
      +=/death_strike,if=buff.dark_succor.up&health.percent<90
      actions
      +=/run_action_list,name=aoe,if=active_enemies>=3&aoe_enabled
      actions
      +=/run_action_list,name=single_target

      actions
      .single_target=breath_of_sindragosa,if=runic_power>75
      actions
      .single_target+=/run_action_list,name=single_target_bos,if=dot.breath_of_sindragosa.ticking
      actions
      .single_target+=/frost_strike,if=buff.killing_machine.up.up
      actions
      .single_target+=/obliterate,if=unholy>1|buff.killing_machine.up
      actions
      .single_target+=/defile
      actions
      .single_target+=/blood_tap,if=talent.defile.enabled&cooldown.defile.remains=0
      actions
      .single_target+=/frost_strike,if=runic_power>88
      actions
      .single_target+=/howling_blast,if=buff.rime.up|death>1|frost>1
      actions
      .single_target+=/blood_tap,if=buff.blood_charge.stack>10
      actions
      .single_target+=/frost_strike,if=runic_power>76
      actions
      .single_target+=/unholy_blight,if=!disease.ticking
      actions
      .single_target+=/outbreak,if=!dot.blood_plague.ticking
      actions
      .single_target+=/plague_strike,if=!talent.necrotic_plague.enabled&!dot.blood_plague.ticking
      actions
      .single_target+=/howling_blast,if=!(target.health.pct<=35&cooldown.soul_reaper.remains<3)|death+frost>=2
      actions
      .single_target+=/outbreak,if=talent.necrotic_plague.enabled&debuff.necrotic_plague.stack<=14
      actions
      .single_target+=/blood_tap
      actions
      .single_target+=/plague_leech
      actions
      +=/run_action_list,name=emp_rune_wpn

      actions
      .aoe=unholy_blight
      actions
      .aoe+=/frost_strike,if=buff.killing_machine.up
      actions
      .aoe+=/obliterate,if=unholy>1
      actions
      .aoe+=/blood_boil,if=dot.blood_plague.ticking&(!talent.unholy_blight.enabled|cooldown.unholy_blight.remains<49),line_cd=28
      actions
      .aoe+=/defile
      actions
      .aoe+=/breath_of_sindragosa,if=runic_power>75
      actions
      .aoe+=/run_action_list,name=aoe_bos,if=dot.breath_of_sindragosa.ticking
      actions
      .aoe+=/howling_blast
      actions
      .aoe+=/blood_tap,if=buff.blood_charge.stack>10
      actions
      .aoe+=/frost_strike,if=runic_power>88
      actions
      .aoe+=/death_and_decay,if=unholy=1
      actions
      .aoe+=/plague_strike,if=unholy=2&!dot.blood_plague.ticking&!talent.necrotic_plague.enabled
      actions
      .aoe+=/blood_tap
      actions
      .aoe+=/frost_strike,if=!talent.breath_of_sindragosa.enabled|cooldown.breath_of_sindragosa.remains>=10
      actions
      .aoe+=/plague_leech
      actions
      .aoe+=/plague_strike,if=unholy=1
      actions
      +=/run_action_list,name=emp_rune_wpn

      actions
      .single_target_bos=obliterate,if=buff.killing_machine.up
      actions
      .single_target_bos+=/blood_tap,if=buff.killing_machine.up&buff.blood_charge.stack>=5
      actions
      .single_target_bos+=/plague_leech,if=buff.killing_machine.up
      actions
      .single_target_bos+=/blood_tap,if=buff.blood_charge.stack>=5
      actions
      .single_target_bos+=/plague_leech
      actions
      .single_target_bos+=/obliterate,if=runic_power<76
      actions
      .single_target_bos+=/howling_blast,if=((death=1&frost=0&unholy=0)|death=0&frost=1&unholy=0)&runic_power<88
      actions
      +=/run_action_list,name=emp_rune_wpn

      actions
      .aoe_bos=howling_blast
      actions
      .aoe_bos+=/blood_tap,if=buff.blood_charge.stack>10
      actions
      .aoe_bos+=/death_and_decay,if=unholy=1
      actions
      .aoe_bos+=/plague_strike,if=unholy=2
      actions
      .aoe_bos+=/blood_tap
      actions
      .aoe_bos+=/plague_leech
      actions
      .aoe_bos+=/plague_strike,if=unholy=1
      actions
      +=/run_action_list,name=emp_rune_wpn

      #empower rune weapon
      actions.emp_rune_wpn+=/empower_rune_weapon,if=cooldowns_enabled

      Here's my Priest from a while back. Idk if it is in working condition though
      PHP:
      priest="Shineey_Active"
      level=100
      race
      =human
      role
      =spell
      position
      =back
      talents
      =http://us.battle.net/wow/en/tool/talent-calculator#Xb!2021002
      glyphs=mind_flay/reflective_shield/vampiric_embrace
      spec
      =shadow

      # This default action priority list is automatically created based on your character.
      # It is a attempt to provide you with a action list that is both simple and practicable,
      # while resulting in a meaningful and good simulation. It may not result in the absolutely highest possible dps.
      # Feel free to edit, adapt and improve it to your own needs.
      # SimulationCraft is always looking for updates and improvements to the default action lists.

      # Executed before combat begins. Accepts non-harmful actions only.

      actions.precombat=flask,type=greater_draenic_intellect_flask
      actions
      .precombat+=/food,type=blackrock_barbecue
      actions
      .precombat+=/power_word_fortitude,if=!aura.stamina.up
      actions
      .precombat+=/shadowform,if=!buff.shadowform.up
      # Snapshot raid buffed stats before combat begins and pre-potting is done.
      actions.precombat+=/snapshot_stats
      actions
      .precombat+=/potion,name=draenic_intellect
      actions
      .precombat+=/vampiric_touch

      # Executed every time the actor is available.

      #hotkeys+=/cooldowns_enabled,none,Insert

      actions=shadowform,if=!buff.shadowform.up
      actions
      +=/potion,name=draenic_intellect,if=buff.bloodlust.react|target.time_to_die<=40
      actions
      +=/power_infusion,if=talent.power_infusion.enabled
      actions
      +=/blood_fury
      actions
      +=/berserking
      actions
      +=/arcane_torrent
      actions
      +=/call_action_list,name=pvp_dispersion,if=set_bonus.pvp_2pc
      actions
      +=/call_action_list,name=decision

      actions
      .decision=call_action_list,name=cop_dotweave,if=talent.clarity_of_power.enabled&talent.insanity.enabled&target.health.pct>20&active_enemies<=5
      actions
      .decision+=/call_action_list,name=cop_mfi,if=talent.clarity_of_power.enabled&talent.insanity.enabled&target.health.pct<=20
      actions
      .decision+=/call_action_list,name=cop,if=talent.clarity_of_power.enabled
      actions
      .decision+=/call_action_list,name=vent,if=talent.void_entropy.enabled
      actions
      .decision+=/call_action_list,name=main

      actions
      .pvp_dispersion=call_action_list,name=decision,if=cooldown.dispersion.remains>0
      actions
      .pvp_dispersion+=/dispersion,interrupt=1
      actions
      .pvp_dispersion+=/call_action_list,name=decision

      actions
      .main=mindbender,if=cooldowns_enabled&talent.mindbender.enabled 
      actions
      .main+=/shadowfiend,if=cooldowns_enabled&!talent.mindbender.enabled 
      actions
      .main+=/shadow_word_death,cycle_targets=1,if=target.health.pct<20&shadow_orb<=
      actions
      .main+=/mind_blast,if=glyph.mind_harvest.enabled&shadow_orb<=2&active_enemies<=
      actions
      .main+=/devouring_plague,cycle_targets=1,if=shadow_orb=5&talent.surge_of_darkness.enabled 
      actions
      .main+=/devouring_plague,if=shadow_orb=
      actions
      .main+=/devouring_plague,if=shadow_orb>=3&(cooldown.mind_blast.remains<1.5|target.health.pct<20&cooldown.shadow_word_death.remains<1.5)&!target.dot.devouring_plague_tick.ticking&talent.surge_of_darkness.enabled,cycle_targets=
      actions
      .main+=/devouring_plague,if=shadow_orb>=3&(cooldown.mind_blast.remains<1.5|target.health.pct<20&cooldown.shadow_word_death.remains<1.5
      actions.main+=/mind_blast,if=glyph.mind_harvest.enabled&mind_harvest=0,cycle_targets=
      actions
      .main+=/mind_blast,if=active_enemies<=
      #actions.main+=/insanity,if=buff.shadow_word_insanity.remains<0.5*gcd&active_enemies<=2,chain=1,interrupt_if=(cooldown.mind_blast.remains<=0.1|cooldown.shadow_word_death.remains<=0.1|shadow_orb=5) 
      #actions.main+=/insanity,chain=1,if=buff.shadow_word_insanity.up&active_enemies<=2,interrupt_if=(cooldown.mind_blast.remains<=0.1|cooldown.shadow_word_death.remains<=0.1|shadow_orb=5)
      actions.main+=/halo,if=talent.halo.enabled&target.distance<=30&active_enemies>
      actions
      .main+=/cascade,if=talent.cascade.enabled&active_enemies>2&target.distance<=40 
      actions
      .main+=/divine_star,if=talent.divine_star.enabled&active_enemies>4&target.distance<=24 
      actions
      .main+=/shadow_word_pain,line_cd=2,if=talent.auspicious_spirits.enabled&remains<(18*0.3),cycle_targets=
      actions
      .main+=/shadow_word_pain,line_cd=2,if=!talent.auspicious_spirits.enabled&remains<(18*0.3)&active_enemies<=5,cycle_targets=1,max_cycle_targets=
      actions
      .main+=/vampiric_touch,if=remains<(15*0.3+cast_time)&active_enemies<=5,cycle_targets=1,max_cycle_targets=
      actions
      .main+=/devouring_plague,if=!talent.void_entropy.enabled&shadow_orb>=3&ticks_remain<=
      actions
      .main+=/mind_spike,if=active_enemies<=5&buff.surge_of_darkness.react=
      actions
      .main+=/halo,if=talent.halo.enabled&target.distance<=30&target.distance>=17 
      actions
      .main+=/cascade,if=talent.cascade.enabled&(active_enemies>1|target.distance>=28)&target.distance<=40&target.distance>=11 
      actions
      .main+=/divine_star,if=talent.divine_star.enabled&active_enemies>1&target.distance<=24 
      actions
      .main+=/wait,sec=cooldown.shadow_word_death.remains,if=target.health.pct<20&cooldown.shadow_word_death.remains&cooldown.shadow_word_death.remains<0.5&active_enemies<=
      actions
      .main+=/wait,sec=cooldown.mind_blast.remains,if=cooldown.mind_blast.remains<0.5&cooldown.mind_blast.remains&active_enemies<=
      actions
      .main+=/mind_spike,if=buff.surge_of_darkness.react&active_enemies<=
      actions
      .main+=/divine_star,if=talent.divine_star.enabled&target.distance<=28&active_enemies>
      actions
      .main+=/mind_sear,chain=1,if=active_enemies>=4,interrupt_if=(cooldown.mind_blast.remains<=0.1|cooldown.shadow_word_death.remains<=0.1|shadow_orb=5
      actions.main+=/shadow_word_pain,line_cd=2,if=shadow_orb>=2&ticks_remain<=2&talent.insanity.enabled 
      actions
      .main+=/vampiric_touch,line_cd=2,if=shadow_orb>=2&ticks_remain<=2.5&talent.insanity.enabled 
      actions
      .main+=/mind_flay,chain=1,interrupt_if=(cooldown.mind_blast.remains<=0.1|cooldown.shadow_word_death.remains<=0.1|shadow_orb=5
      actions.main+=/mind_blast,moving=1,if=buff.shadowy_insight.react 
      actions
      .main+=/divine_star,moving=1,if=talent.divine_star.enabled&target.distance<=28 
      actions
      .main+=/cascade,moving=1,if=talent.cascade.enabled&target.distance<=40 
      actions
      .main+=/shadow_word_death,moving=
      actions
      .main+=/shadow_word_pain,moving=1,cycle_targets=1

      actions
      .vent=mindbender,if=talent.mindbender.enabled&cooldown.mind_blast.remains>=gcd
      actions
      .vent+=/shadowfiend,if=!talent.mindbender.enabled&cooldown.mind_blast.remains>=gcd
      actions
      .vent+=/void_entropy,if=shadow_orb=3&!ticking&target.time_to_die>60&active_enemies=1
      actions
      .vent+=/void_entropy,if=!dot.void_entropy.ticking&shadow_orb=5&active_enemies>=1&target.time_to_die>60,cycle_targets=1,max_cycle_targets=(60%(cooldown.mind_blast.duration*3*spell_haste))
      actions.vent+=/devouring_plague,if=dot.void_entropy.ticking&dot.void_entropy.remains<=gcd*2&cooldown_react,cycle_targets=1
      actions
      .vent+=/devouring_plague,if=shadow_orb=5&dot.void_entropy.remains<10,cycle_targets=1
      actions
      .vent+=/devouring_plague,if=shadow_orb=5&dot.void_entropy.remains<20,cycle_targets=1
      actions
      .vent+=/devouring_plague,if=shadow_orb=5&dot.void_entropy.remains,cycle_targets=1
      actions
      .vent+=/halo,if=talent.halo.enabled&target.distance<=30&active_enemies>=4
      actions
      .vent+=/mind_blast,if=glyph.mind_harvest.enabled&mind_harvest=0&shadow_orb<=2,cycle_targets=1
      actions
      .vent+=/devouring_plague,if=glyph.mind_harvest.enabled&mind_harvest=0&shadow_orb>=3,cycle_targets=1
      actions
      .vent+=/mind_blast,if=active_enemies<=10&cooldown_react&shadow_orb<=4
      actions
      .vent+=/shadow_word_death,if=target.health.pct<20&cooldown_react&shadow_orb<=4,cycle_targets=1
      actions
      .vent+=/shadow_word_pain,if=shadow_orb=4&remains<(18*0.50)&set_bonus.tier17_2pc&cooldown.mind_blast.remains<1.2*gcd&cooldown.mind_blast.remains>0.2*gcd
      actions
      .vent+=/insanity,if=buff.shadow_word_insanity.remains<0.5*gcd&active_enemies<=3&cooldown.mind_blast.remains>0.5*gcd,chain=1,interrupt_if=(cooldown.mind_blast.remains<=0.1|cooldown.shadow_word_death.remains<=0.1)
      actions.vent+=/insanity,chain=1,if=active_enemies<=3&cooldown.mind_blast.remains>0.5*gcd,interrupt_if=(cooldown.mind_blast.remains<=0.1|cooldown.shadow_word_death.remains<=0.1)
      actions.vent+=/mind_spike,if=active_enemies<=5&buff.surge_of_darkness.react=3
      actions
      .vent+=/shadow_word_pain,if=remains<(18*0.35)&miss_react,cycle_targets=1,max_cycle_targets=5
      actions
      .vent+=/vampiric_touch,if=remains<(15*0.35)&miss_react,cycle_targets=1,max_cycle_targets=5
      actions
      .vent+=/halo,if=talent.halo.enabled&target.distance<=30&cooldown.mind_blast.remains>0.5*gcd
      actions
      .vent+=/cascade,if=talent.cascade.enabled&target.distance<=40&cooldown.mind_blast.remains>0.5*gcd
      actions
      .vent+=/divine_star,if=talent.divine_star.enabled&active_enemies>4&target.distance<=24&cooldown.mind_blast.remains>0.5*gcd
      actions
      .vent+=/mind_spike,if=active_enemies<=5&buff.surge_of_darkness.react&cooldown.mind_blast.remains>0.5*gcd
      actions
      .vent+=/mind_sear,chain=1,if=active_enemies>=3&cooldown.mind_blast.remains>0.5*gcd,interrupt_if=(cooldown.mind_blast.remains<=0.1|cooldown.shadow_word_death.remains<=0.1)
      actions.vent+=/mind_flay,if=cooldown.mind_blast.remains>0.5*gcd,interrupt=1,chain=1
      actions
      .vent+=/shadow_word_death,moving=1
      actions
      .vent+=/mind_blast,moving=1,if=buff.shadowy_insight.react&cooldown_react
      actions
      .vent+=/divine_star,moving=1,if=talent.divine_star.enabled&target.distance<=28
      actions
      .vent+=/cascade,moving=1,if=talent.cascade.enabled&target.distance<=40
      actions
      .vent+=/shadow_word_pain,moving=1,cycle_targets=1

      actions
      .cop_dotweave=devouring_plague,if=target.dot.vampiric_touch.ticking&target.dot.shadow_word_pain.ticking&shadow_orb=5&cooldown_react
      actions
      .cop_dotweave+=/devouring_plague,if=(buff.mental_instinct.remains<gcd&buff.mental_instinct.remains)
      actions.cop_dotweave+=/devouring_plague,if=(target.dot.vampiric_touch.ticking&target.dot.shadow_word_pain.ticking&!buff.shadow_word_insanity.remains&cooldown.mind_blast.remains>0.4*gcd)
      actions.cop_dotweave+=/mind_blast,if=glyph.mind_harvest.enabled&mind_harvest=0&shadow_orb<=2,cycle_targets=1
      actions
      .cop_dotweave+=/mind_blast,if=shadow_orb<=4&cooldown_react
      actions
      .cop_dotweave+=/shadowfiend,if=!talent.mindbender.enabled&!buff.shadow_word_insanity.remains
      actions
      .cop_dotweave+=/mindbender,if=talent.mindbender.enabled&!buff.shadow_word_insanity.remains
      actions
      .cop_dotweave+=/shadow_word_pain,if=shadow_orb=4&set_bonus.tier17_2pc&!target.dot.shadow_word_pain.ticking&!target.dot.devouring_plague.ticking&cooldown.mind_blast.remains<1.2*gcd&cooldown.mind_blast.remains>0.2*gcd
      actions
      .cop_dotweave+=/shadow_word_pain,if=shadow_orb=5&!target.dot.devouring_plague.ticking&!target.dot.shadow_word_pain.ticking
      actions
      .cop_dotweave+=/vampiric_touch,if=shadow_orb=5&!target.dot.devouring_plague.ticking&!target.dot.vampiric_touch.ticking
      actions
      .cop_dotweave+=/insanity,if=buff.shadow_word_insanity.remains,chain=1,interrupt_if=cooldown.mind_blast.remains<=0.1
      actions
      .cop_dotweave+=/shadow_word_pain,if=shadow_orb>=2&target.dot.shadow_word_pain.remains>=6&cooldown.mind_blast.remains>0.5*gcd&target.dot.vampiric_touch.remains&buff.bloodlust.up&!set_bonus.tier17_2pc
      actions
      .cop_dotweave+=/vampiric_touch,if=shadow_orb>=2&target.dot.vampiric_touch.remains>=5&cooldown.mind_blast.remains>0.5*gcd&buff.bloodlust.up&!set_bonus.tier17_2pc
      actions
      .cop_dotweave+=/halo,if=cooldown.mind_blast.remains>0.5*gcd&talent.halo.enabled&target.distance<=30&target.distance>=17
      actions
      .cop_dotweave+=/cascade,if=cooldown.mind_blast.remains>0.5*gcd&talent.cascade.enabled&(active_enemies>1|target.distance>=28)&target.distance<=40&target.distance>=11
      actions
      .cop_dotweave+=/divine_star,if=talent.divine_star.enabled&cooldown.mind_blast.remains>0.5*gcd&active_enemies>3&target.distance<=24
      actions
      .cop_dotweave+=/shadow_word_pain,if=primary_target=0&!ticking,cycle_targets=1,max_cycle_targets=5
      actions
      .cop_dotweave+=/vampiric_touch,if=primary_target=0&!ticking,cycle_targets=1,max_cycle_targets=5
      actions
      .cop_dotweave+=/divine_star,if=talent.divine_star.enabled&cooldown.mind_blast.remains>0.5*gcd&active_enemies=3&target.distance<=24
      actions
      .cop_dotweave+=/shadow_word_pain,if=primary_target=0&(!ticking|remains<=18*0.3),cycle_targets=1,max_cycle_targets=5
      actions
      .cop_dotweave+=/vampiric_touch,if=primary_target=0&(!ticking|remains<=15*0.3),cycle_targets=1,max_cycle_targets=5
      actions
      .cop_dotweave+=/mind_spike,if=buff.shadow_word_insanity.remains<=gcd&buff.bloodlust.up&!target.dot.shadow_word_pain.remains&!target.dot.vampiric_touch.remains
      actions
      .cop_dotweave+=/mind_spike,if=((target.dot.shadow_word_pain.remains&!target.dot.vampiric_touch.remains)|(!target.dot.shadow_word_pain.remains&target.dot.vampiric_touch.remains))&shadow_orb<=2&cooldown.mind_blast.remains>0.5*gcd
      actions
      .cop_dotweave+=/mind_flay,if=set_bonus.tier17_2pc&target.dot.shadow_word_pain.remains&target.dot.vampiric_touch.remains&cooldown.mind_blast.remains>0.9*gcd,interrupt_if=(cooldown.mind_blast.remains<=0.1|cooldown.shadow_word_death.remains<=0.1)
      actions.cop_dotweave+=/mind_spike
      actions
      .cop_dotweave+=/shadow_word_death,moving=1
      actions
      .cop_dotweave+=/halo,if=talent.halo.enabled&target.distance<=30,moving=1
      actions
      .cop_dotweave+=/divine_star,if=talent.divine_star.enabled&target.distance<=28,moving=1
      actions
      .cop_dotweave+=/cascade,if=talent.cascade.enabled&target.distance<=40,moving=1
      actions
      .cop_dotweave+=/shadow_word_pain,moving=1

      actions
      .cop_mfi=devouring_plague,if=shadow_orb=5
      actions
      .cop_mfi+=/mind_blast,if=glyph.mind_harvest.enabled&mind_harvest=0,cycle_targets=1
      actions
      .cop_mfi+=/mind_blast,if=active_enemies<=5&cooldown_react
      actions
      .cop_mfi+=/shadow_word_death,if=target.health.pct<20,cycle_targets=1
      actions
      .cop_mfi+=/devouring_plague,if=shadow_orb>=3&(cooldown.mind_blast.remains<gcd*1.0|target.health.pct<20&cooldown.shadow_word_death.remains<gcd*1.0)
      actions.cop_mfi+=/mindbender,if=talent.mindbender.enabled
      actions
      .cop_mfi+=/shadowfiend,if=!talent.mindbender.enabled
      actions
      .cop_mfi+=/shadow_word_pain,if=remains<(18*0.3)&miss_react&active_enemies<=5&primary_target=0,cycle_targets=1,max_cycle_targets=5
      actions
      .cop_mfi+=/vampiric_touch,if=remains<(15*0.3+cast_time)&miss_react&active_enemies<=5&primary_target=0,cycle_targets=1,max_cycle_targets=5
      actions
      .cop_mfi+=/insanity,if=buff.shadow_word_insanity.remains<0.5*gcd&active_enemies<=2,chain=1,interrupt_if=(cooldown.mind_blast.remains<=0.1|(cooldown.shadow_word_death.remains<=0.1&target.health.pct<20))
      actions.cop_mfi+=/insanity,if=active_enemies<=2,chain=1,interrupt_if=(cooldown.mind_blast.remains<=0.1|(cooldown.shadow_word_death.remains<=0.1&target.health.pct<20))
      actions.cop_mfi+=/halo,if=talent.halo.enabled&target.distance<=30&target.distance>=17
      actions
      .cop_mfi+=/cascade,if=talent.cascade.enabled&(active_enemies>1|target.distance>=28)&target.distance<=40&target.distance>=11
      actions
      .cop_mfi+=/divine_star,if=talent.divine_star.enabled&(active_enemies>2&target.distance<=24)
      actions.cop_mfi+=/mind_sear,if=active_enemies>=6,chain=1,interrupt_if=(cooldown.mind_blast.remains<=0.1|cooldown.shadow_word_death.remains<=0.1)
      actions.cop_mfi+=/mind_spike
      actions
      .cop_mfi+=/shadow_word_death,moving=1
      actions
      .cop_mfi+=/mind_blast,if=buff.shadowy_insight.react&cooldown_react,moving=1
      actions
      .cop_mfi+=/halo,if=talent.halo.enabled&target.distance<=30,moving=1
      actions
      .cop_mfi+=/divine_star,if=talent.divine_star.enabled&target.distance<=28,moving=1
      actions
      .cop_mfi+=/cascade,if=talent.cascade.enabled&target.distance<=40,moving=1
      actions
      .cop_mfi+=/shadow_word_pain,if=primary_target=0,moving=1,cycle_targets=1

      actions
      .cop=devouring_plague,if=shadow_orb>=3&(cooldown.mind_blast.remains<=gcd*1.0|(cooldown.shadow_word_death.remains<=gcd*1.0&target.health.pct<20))&primary_target=0,cycle_targets=1
      actions
      .cop+=/devouring_plague,if=shadow_orb>=3&(cooldown.mind_blast.remains<=gcd*1.0|(cooldown.shadow_word_death.remains<=gcd*1.0&target.health.pct<20))
      actions.cop+=/mind_blast,if=mind_harvest=0,cycle_targets=1
      actions
      .cop+=/mind_blast,if=active_enemies<=5&cooldown_react
      actions
      .cop+=/shadow_word_death,if=target.health.pct<20,cycle_targets=1
      actions
      .cop+=/mindbender,if=talent.mindbender.enabled
      actions
      .cop+=/shadowfiend,if=!talent.mindbender.enabled
      actions
      .cop+=/halo,if=talent.halo.enabled&target.distance<=30&target.distance>=17
      actions
      .cop+=/cascade,if=talent.cascade.enabled&(active_enemies>1|target.distance>=28)&target.distance<=40&target.distance>=11
      actions
      .cop+=/divine_star,if=talent.divine_star.enabled&active_enemies>3&target.distance<=24
      actions
      .cop+=/shadow_word_pain,if=miss_react&!ticking&active_enemies<=5&primary_target=0,cycle_targets=1,max_cycle_targets=5
      actions
      .cop+=/vampiric_touch,if=remains<cast_time&miss_react&active_enemies<=5&primary_target=0,cycle_targets=1,max_cycle_targets=5
      actions
      .cop+=/divine_star,if=talent.divine_star.enabled&active_enemies=3&target.distance<=24
      actions
      .cop+=/mind_sear,if=active_enemies>=5,chain=1,interrupt_if=(cooldown.mind_blast.remains<=0.1|cooldown.shadow_word_death.remains<=0.1)
      actions.cop+=/mind_spike,if=active_enemies<=4&buff.surge_of_darkness.react
      actions
      .cop+=/mind_sear,if=active_enemies>=3,chain=1,interrupt_if=(cooldown.mind_blast.remains<=0.1|cooldown.shadow_word_death.remains<=0.1)
      actions.cop+=/mind_flay,if=target.dot.devouring_plague_tick.ticks_remain>1&active_enemies=1,chain=1,interrupt_if=(cooldown.mind_blast.remains<=0.1|cooldown.shadow_word_death.remains<=0.1)
      actions.cop+=/mind_spike
      actions
      .cop+=/shadow_word_death,moving=1
      actions
      .cop+=/mind_blast,if=buff.shadowy_insight.react&cooldown_react,moving=1
      actions
      .cop+=/halo,moving=1,if=talent.halo.enabled&target.distance<=30
      actions
      .cop+=/divine_star,if=talent.divine_star.enabled&target.distance<=28,moving=1
      actions
      .cop+=/cascade,if=talent.cascade.enabled&target.distance<=40,moving=1
      actions
      .cop+=/shadow_word_pain,if=primary_target=0,moving=1,cycle_targets=1
       
      Last edited: Sep 28, 2015
    13. Fubsnoobs

      Fubsnoobs New Member

      Joined:
      Jan 25, 2015
      Messages:
      10
      Likes Received:
      0
      Trophy Points:
      1
      Thanks Shineey!

      For anyone that is using this and is a new to this stuff like me after the last honor buddy update you have to reload the files and replace the singular files again to get the .simc to work again.
       
    14. ryot00

      ryot00 Member

      Joined:
      Aug 25, 2014
      Messages:
      31
      Likes Received:
      0
      Trophy Points:
      6
      I've followed all the instructions in the OP and imported the .simc profiles into the "Simcraft Profiles" folder.
      After I changed the Override tags to "simcraftimpl" the bot does not cast any spells.
      Any ideas on what I'm doing wrong?
      Log:
      View attachment 13604 2015-10-06 09.44.txt
       
    15. Fubsnoobs

      Fubsnoobs New Member

      Joined:
      Jan 25, 2015
      Messages:
      10
      Likes Received:
      0
      Trophy Points:
      1
      Did you delete everything in the compiled assemblies folder inside your honor buddy folder?
       
    16. r0sc0

      r0sc0 New Member

      Joined:
      Jan 15, 2010
      Messages:
      410
      Likes Received:
      2
      Trophy Points:
      0
      Hey guys, I have loaded the routine, and it says no routine for warlock affliction for simc.
      still does all the casts but im guessing its normal rotation? if that is the case can you give a list of rotations that you have customized for the simc?

      Cheers
       
    17. andehhhhh

      andehhhhh New Member

      Joined:
      Oct 14, 2015
      Messages:
      8
      Likes Received:
      0
      Trophy Points:
      0
      Problem

      What happens if I don't have that setting file?
      And my bot also just stand still.
      I followed the instructions to the best of my abilties.
       

      Attached Files:

      Last edited: Oct 14, 2015
    18. aash

      aash Member

      Joined:
      Oct 14, 2014
      Messages:
      179
      Likes Received:
      9
      Trophy Points:
      18
      [div=font-family:segoe ui;color:#333333;font-size:10pt;font-style:normal; -webkit-font-smoothing:antialiased;text-rendering: optimizelegibility]Sorry guys right now I don't have much spare time to resolve your issues. Try yourself. Or see the original "simcraft impl" thread.
      [/div]
       
    19. MCHammer87

      MCHammer87 New Member

      Joined:
      Aug 30, 2015
      Messages:
      56
      Likes Received:
      0
      Trophy Points:
      0
      how is this for fury warrior?
       

    Share This Page