What's new
  • Visit Rebornbuddy
  • Visit Panda Profiles
  • Visit LLamamMagic
  • Visit Resources
  • Visit Downloads
  • Visit Portal

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

[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:
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.
 
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
 

Attachments

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

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.
 
@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?
 
@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?

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.
 
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.

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
 
Provide a way to share code across several bots/plugins/routines.
Honorbuddy platform does not provide a way to share the code across it's extension sites(bots/plugins/routines), so I should invent some trick here. It is not necessary for the project, I would just copy-paste all the dependencies, but I corius person and I like the idea of reusable code base.

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<string> WriteToLogAction;

// Initialize WriteToLogAction
private void Initialize()
{
    var assembly = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(a => 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:
[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]
 
[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]

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.
 
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

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<=4 
actions.main+=/mind_blast,if=glyph.mind_harvest.enabled&shadow_orb<=2&active_enemies<=5 
actions.main+=/devouring_plague,cycle_targets=1,if=shadow_orb=5&talent.surge_of_darkness.enabled 
actions.main+=/devouring_plague,if=shadow_orb=5 
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=1 
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=1 
actions.main+=/mind_blast,if=active_enemies<=5 
#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>2 
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=1 
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=5 
actions.main+=/vampiric_touch,if=remains<(15*0.3+cast_time)&active_enemies<=5,cycle_targets=1,max_cycle_targets=5 
actions.main+=/devouring_plague,if=!talent.void_entropy.enabled&shadow_orb>=3&ticks_remain<=1 
actions.main+=/mind_spike,if=active_enemies<=5&buff.surge_of_darkness.react=3 
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<=1 
actions.main+=/wait,sec=cooldown.mind_blast.remains,if=cooldown.mind_blast.remains<0.5&cooldown.mind_blast.remains&active_enemies<=1 
actions.main+=/mind_spike,if=buff.surge_of_darkness.react&active_enemies<=5 
actions.main+=/divine_star,if=talent.divine_star.enabled&target.distance<=28&active_enemies>1 
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=1 
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:
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.
 
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
 
Did you delete everything in the compiled assemblies folder inside your honor buddy folder?
 
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
 
Problem

The problem with trinket is because you use default profile. But if you want to maximize DPS output you should simulate your character with Simulation Craft utility to produce optimal *.simc script.
A is the default key bind for toggling AOE behavior in the Simcraft Impl. So you got that message. There's no configuration window right now so you should change it by hand. Go to the <honoruddy>\Settings\<realm>\<character>\ folder and find SimCSettings.xml there.
Change by hand the following lines to whatever you want, lets say if you want bind AOE, Cooldowns, Execution toggle to Ctrl + Shift + [...]:
Code:
  <Cooldowns>
    <key>C</key>
    <mod>Control Shift</mod>
  </Cooldowns>
  <Aoe>
    <key>A</key>
    <mod>Control Shift</mod>
  </Aoe>
  <Burst>
    <key>B</key>
    <mod>Control Shift</mod>
  </Burst>
  <Execution>
    <key>X</key>
    <mod>Control Shift</mod>
  </Execution>

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.
 

Attachments

Last edited:
[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]
 
Back
Top