• Visit Honorbuddy
  • Visit Rebornbuddy
  • Visit Demonbuddy
  • Visit Exilebuddy
  • Visit Hearthbuddy
  • Visit Pokefarmer
  • Visit Buddystore

[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 New Member

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

    pookthetook Member Buddy Store Developer

    Joined:
    Jan 28, 2012
    Messages:
    215
    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 New Member

    Joined:
    Aug 25, 2014
    Messages:
    31
    Likes Received:
    0
    Trophy Points:
    0
    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:
    411
    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