[ProbablyEngine] [Tutorial] Making your first ProbablyEngine rotation! menu

Shout-Out

User Tag List

Page 1 of 2 12 LastLast
Results 1 to 15 of 26
  1. #1
    Eryx's Avatar
    Eryx
    Guest

    [ProbablyEngine] [Tutorial] Making your first ProbablyEngine rotation!

    Are you tired of searching for hours and hours after a good ProbablyEngine (PE) profile for your class, and wishing you could make your own? Don't worry, it's not as hard as you believe. After reading this post, you will be hopefully be able to start making your own rotation/profile!

    First of all, this is a BASIC tutorial, and I can not teach you to make profiles that will bring you at the top of the damage meter in every single BG/Raid/LFR.

    Let's jump straight into action and take a look at an example profile:

    Code:
    ProbablyEngine.rotation.register_custom(SPEC ID, "TEST PROFILE", {
    --COOLDOWNS   
    { "Avenging Wrath", "modifier.cooldowns" },
    { "Guardian of Ancient Kings", "modifier.cooldowns" },
    
    --INQUISITION
    { "Inquisition", {
                "!player.buff(Inquisition)",
                "player.holypower <= 3" }},
    { "Inquisition", {
                "player.buff(Inquisition).duration <= 3",
                "player.holypower <= 3" }},
    
    --DEFENSIVE
    { "Flash of Light", {
                "player.health < 60" ,
                "player.buff(Selfless Healer).count = 3" }},  
    { "Sacred Shield", {
                "!player.buff(Sacred Shield).duration <=3",
                "player.health < 60" }},
    
    --DPS
    { "Templar's Verdict", {
                "player.holypower = 5",
                "!modifier.multitarget" }},
    { "Divine Storm", {
                "player.holypower >= 3",
                "modifier.multitarget" }},
    { "Crusader Strike", "!modifier.multitarget" },
    { "Hammer of the Righteous", "modifier.multitarget" },
    { "Judgment" },
    )
    Don't panic yet! Let's go through one and one of those sections and take a closer look.
    Code:
    --COOLDOWNS   
    { "Avenging Wrath", "modifier.cooldowns" },
    { "Guardian of Ancient Kings", "modifier.cooldowns" },
    This is the cooldowns section, which is usually placed on top, because PE starts scanning from the top and if the ability in line 1 is available, that spell will be cast. After a spell is cast, it will bump back to top and try again. The first line that says «—COOLDOWN» is a comment. All lines that start with - - will be ignored by PE

    All «lines» start and end with { and } everything between those is the conditions. In here we set the «rules» for when the spell will be cast or not. The general syntax is like this { «spell», «condition», «target» }, to tell PE that the condition is finished we use a comma. If you specify no target in the «target» condition, the spell will be cast on yourself.

    In this short example, the first thing PE will check is if the cooldowns modifier in PE ingame interface is checked (condition: "modifier:cooldowns") If yes; it will cast Avenging Wrath (AW). After AW is cast, it will go back to search for the next spell. Also this time, PE will first check if cooldowns is toggled in the interface, and check if AW is available. Since AV was cast in the previous sequence, it will now be on cooldown, so PE will ignore it go to the next line in the script. Same checks go for Guardian of Ancient Kings (GoAK).

    I hope you start to understand the very basics now, so lets move on to the next section in the script: The defensive abilities. If you are dead, you do 0 dps, so this is usually prioritized over DPS spells as well.

    Code:
    —DEFENSIVE
    { "Flash of Light", {
                "player.health < 60" ,
                "player.buff(Selfless Healer).count = 3" }},  
    { "Sacred Shield", {
                "!player.buff(Sacred Shield)",
                "player.health < 60" }},
    The first check we do for this demo is if flash of light (FoL) should be cast. Note that here, we got 2x conditions that must be fulfilled before FoL will be cast. First we start with the { and then we specify the spell: «Flash of Light» and since we have 2 conditions this will be called a multiple rule so we must tell PE that both of those must be true before FoL is ready to be launched. First PE will check player health (player.health) and if this is less than 60%, it will try the next condition. Do we have 3 stacks (.count = 3) of Selfless Healer? If yes here as well, both conditions return true, and FoL will be cast. Since no target is specified, you will cast FoL on yourself.

    Next check is if Sacred Shield (SS, talented skill) should be cast. Note that in this case, we will start by checking if we already have SS up, and the way we tell PE that we only want to cast this if we don’t already have SS up is by putting a ! before the condition ("!player.buff(Sacred Shield),

    . This means the spell will only be cast if the check return «false» If we translate that to «normal language» it will be something like «! = if not player buff sacred shield is up», go to next nested condition. Is player health less than 60% yes/no? If the first condition return «false» and the second condition return «true), SS will be cast.

    Now lets start on the fun part. Adding the DEEPS!

    Code:
    { "Templar's Verdict", {
                "player.holypower = 5",
                "!modifier.multitarget" }},
    { "Divine Storm", {
                "player.holypower >= 3",
                "modifier.multitarget" }},
    { "Crusader Strike", "!modifier.multitarget" },
    { "Hammer of the Righteous", "modifier.multitarget" },
    { "Judgment" },
    )
    Translated this means:
    1: Cast Templar’s Verdict if multitarget modifier is NOT toggled «!modifier.multitarget", AND we got 5 holy power available «player.holypower = 5»
    2: Cast Divine Storm if multitarget modifier is toggled AND we got 3 or more holy power available
    3: Cast Crusader Strike if multitarget modifier is NOT toggled
    4: Cast Hammer of the Righteous if multitarget modifier is toggled
    5: If none of the above is available, cast Judgement.

    Sample codes:
    Code:
    --Target boss for this script.
    --Cast Penance on tank if he does not have Grace buff (increased healing), else cast penance on target.
    --Cast greater heal on tank (Who the boss is targeting) if HP is less than 50%
    --Nuke boss for attonement heals if 1-3 is not available.
    { "Penance", "!targettarget.buff(Grace)", "targettarget" },
    { "Penance" },
    { "Greater Heal", "targettarget.health < 50", "targettarget" },
    { "Holy Fire" },
    { "Smite" },
    More attunement stuff:
    Code:
    --PW: Shield and renew on yourself if HP goes lower than 70%
    --Prayer of Mending cast on boss target whenever it goes off cooldown.
    --Pain Suppression on boss target if lower than 30% HP
    --Inner focus cast on cooldown and prayer of healing on boss target if multitarget modifier is toggled. Greater heal on boss target if not multitarget toggle.
    --Flash Heal on self if HP drop lower than 25%
    --Divine Star cast on cooldown if multitarget toggle is enabled.
    { "Power Word: Shield", {
    	"player.health < 70 "
    	,"!player.debuff(Weakened Soul)"}},
    { "Renew", {
    	"!player.buff(Renew)"
    	,"player.health < 70" }},
    { "Prayer of Mending", "targettarget.debuff(Weakened Soul)", "targettarget"},
    { "Pain Suppression", "targettarget.health < 30", "targettarget" },
    { "Inner Focus" },
    { "Greater Heal", "player.health < 60" },
    { "Greater Heal", { "player.buff(Inner Focus)", "!modifier.multitarget" }, "targettarget"},
    { "Prayer of Healing", { "player.buff(Inner Focus)", "modifier.multitarget" }, "targettarget"},
    { "Flash Heal", "player.health < 20"},
    { "Divine Star", "modifier.multitarget" },
    Retribution Paladin T16 bonus
    Code:
    { "Divine Storm", "player.buff(Divine Crusader)"},
    Light's Hammer (paladin talent, ground effect) cast on cursor position when left control is pressed
    Code:
    { "Light's Hammer", "modifier.lcontrol", "ground" },

    Further reading:
    Official PE Tutorial

    Thanks to PhelpsBen, creator of PE and the rest of guys at PE forum for helping me when I’m stuck on my profiles.

    If you're wondering about something, or would like an example code for a rule, don't hesitate to ask in this thread!
    Last edited by Eryx; 12-08-2013 at 02:43 PM.

    [ProbablyEngine] [Tutorial] Making your first ProbablyEngine rotation!
  2. #2
    Kalkonewing's Avatar Member
    Reputation
    1
    Join Date
    Aug 2012
    Posts
    21
    Thanks G/R
    0/0
    Trade Feedback
    6 (100%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Nice guide!

  3. #3
    Eryx's Avatar
    Eryx
    Guest
    Thank you It's meant to be a very very basic guide, just to show people that it's not impossible to get started on making fully functional and OK profiles for PE. After a very short time, you will start searching for more complex conditions and advanced stuff, and then there will be better places than this thread to find that info.

  4. #4
    kickmydog's Avatar Contributor
    Reputation
    257
    Join Date
    Jul 2011
    Posts
    635
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Thanks for this guide, I have a question for you however. You explain how to code an ability for use if it there is an "AND" condition to it. What about if you have an "OR" how is that coded?
    https://www.ownedcore.com/forums/world-of-warcraft/world-of-warcraft-bots-programs/wow-bot-maps-profiles/422388-kickmydog-bm-mm-sv-hunter-profiles.html#post2793017

  5. #5
    Eryx's Avatar
    Eryx
    Guest
    Originally Posted by kickmydog View Post
    Thanks for this guide, I have a question for you however. You explain how to code an ability for use if it there is an "AND" condition to it. What about if you have an "OR" how is that coded?
    Hi Kickmydog!

    There is no AND command available, but doing like this does the same:
    Code:
    { "Flash of Light",  {
               "player.health < 60" ,
                "player.buff(Selfless Healer).count = 3" }},
    what is between the 2nd set of brackets (red text) must be returned as true for the spell to be cast.

    It checks like this:
    1. Is player health lower than 60%? YES
    2. Does player have 3 stacks of selfless healer buff? YES
    3. *cast Flash of Light*


    This works like the AND command.

    For the OR command, you must split it up in 2 conditions in your profile, like this, if you want to cast Flash of Light if health is lower than 60% OR 3xSelfless healer buff is present

    Code:
    { "Flash of Light", "player.health < 60" },
    { "Flash of Light", "player.buff(Selfless Healer).count = 3" },
    In this case, it will cast FoL if health is less than 60% OR you have 3 stacks of Selfless Healer!
    Last edited by Eryx; 12-08-2013 at 09:37 AM.

  6. #6
    Eryx's Avatar
    Eryx
    Guest
    Updated OP with some sample codes!

  7. #7
    Scalice's Avatar Private
    Reputation
    1
    Join Date
    Jun 2012
    Posts
    2
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    first thank you very much for this, i have struggled for quite some time trying to find what i was looking for. though there are wonderful profiles out there.
    as i am learning to try and code one i have come up with
    ProbablyEngine.rotation.register_custom{SPEC ID, "SPEC ID, "TEST PROFILE", {
    --COOLDOWNS
    { "Synapese Prings", "modifier.cooldowns" },
    { "Vendetta", "modifier.cooldowns" },
    { "Shadow Blades", "modifier.cooldowns" },
    { "Deadly Poison", "modifier.cooldowns" },
    { "Leeching Poison", "modifier.cooldowns"},

    --Defensive
    { "Evasion", {
    "player.health <60" ,
    { "Feint", {
    "player.health <70" ,
    { "Growl", {
    "player.health <50" ,
    { "Smoke Bomb", {
    "player.health <40" ,
    { "Cloak of Shadows", {
    "player.health <30", {
    { "Shiv", {
    "player.health <65", {

    --DPS
    { "Mutilate
    { "Rupture
    { "Dispatch
    { "Envenom

    as a sample.
    i had a question as to how i could use the dps part for procs on certain things. such as Slice and Dice is about to expire so Envenom instead of Rupture would be used. as Blindside is a proc how would i use it for Dispatch? there is a recent profile for assasination rogues that has abillities that are able to be set to on or automatic i cannot seem to find anyting on that.
    any ideas?

  8. #8
    Eryx's Avatar
    Eryx
    Guest
    Hi! I don't know the rogue class, as I don't play one but I will try to give some hints:

    1: Swap your synapse springs condition to (Note that this can cause PE to freeze if you aren't an engineer so remove this if you dont have the profession)
    Code:
    { "#gloves", "modifier.cooldowns" },
    2: For Deadly & Leeching poision you should try
    Code:
    { "Deadly Poison", "!player.enchant.mainhand" },
    { "Leeching Poison", "!player.enchant.offhand" },
    3: If you want to avoid a condition to refresh S&D with Envenom, you could try
    Code:
    { "Envenom", "player.buff(Slice and Dice).duration < 3" },
    This will trigger Envenom if there is less than 3 seconds remaining on Slice and Dice. Put it close to the top of your DPS conditions and before Rupture.
    To make a condition to cast Slice and Dice only if you don't have it up, you can try
    Code:
    { "Slice and Dice", "!player.buff(Slice and Dice)" },
    to avoid wasting combo point on it due to envenom refresh.

    You should also make some conditions that include "player.combopoints", for example
    Code:
    { "Envenom", "player.combopoints = 5 " },
    to avoid casting Envenom every time you get 1 combo point.

    To cast Recuperate, you can use
    Code:
    { "Recuperate", {
    
    "!player.buff(Recuperate)", "player.health < 80", "player.combopoints => 3" }},
    This will cast Recuperate on yourself if recuperate is not already present, your health is lower than 80% and you have than 3 or more combo points. This condition should be put higher than all DPS spells to work properly.

    Also as a general tip, you should work on making your code "clean and tidy" so it's easy to read
    Last edited by Eryx; 12-09-2013 at 08:52 AM.

  9. #9
    kickmydog's Avatar Contributor
    Reputation
    257
    Join Date
    Jul 2011
    Posts
    635
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Thanks very much, your answer to my question was extremely helpful.

    Is it possible to suppress abilities? In the case where you have a number of "OR" conditions, you put in place conditions which if present will completely suppress that ability being cast.

    For example in my PQR profile I have a number of conditions set for Arcane Shot.

    PHP Code:
    -- Stop Arcane Shot if Murder of Crows is coming off cooldown.
    if 
    IsPlayerSpell(131894)
    and 
    AMoCCD 2
    and UnitHealth("target") < (UnitHealthMax("player")*4)
    then return false end

    -- Stop Arcane Shot if Chimera Shot is off cooldown
    if UnitPower("player") < 45 
    and CSCD 1
    then 
    return false end

    -- Arcane Shot with Thrill of the Hunt
    if UnitPower("player") > 55
    and UnitBuffID("player""109306")
    then return true end

    -- Arcane Shot usage code.
    if 
    UnitPower("player") > fvr
    then 
    return true end 
    Is it possible to do the same thing with PE?
    Last edited by kickmydog; 12-08-2013 at 11:39 PM.
    https://www.ownedcore.com/forums/world-of-warcraft/world-of-warcraft-bots-programs/wow-bot-maps-profiles/422388-kickmydog-bm-mm-sv-hunter-profiles.html#post2793017

  10. #10
    Eryx's Avatar
    Eryx
    Guest
    I don't have a hunter to try this out right now, but I have tried to translate to PE code the best I can. Try this out!

    PHP Code:
    -- Stop Arcane Shot if Murder of Crows is coming off cooldown.
    if 
    IsPlayerSpell(131894)
    and 
    AMoCCD 2
    and UnitHealth("target") < (UnitHealthMax("player")*4)
    then return false end 
    Code:
    {  "Arcane Shot", "player.spell(A Murder of Crows).cooldown > 2 " },
    PHP Code:
    -- Stop Arcane Shot if Chimera Shot is off cooldown
    if UnitPower("player") < 45 
    and CSCD 1
    then 
    return false end 
    Code:
    { "Arcane Shot", {
    	"player.spell(Chimera Shot).cooldown",
    	"player.focus < 45" }},
    PHP Code:
    -- Arcane Shot with Thrill of the Hunt
    if UnitPower("player") > 55
    and UnitBuffID("player""109306")
    then return true end 
    Code:
    { "Arcane Shot", {
    	"player.buff(Thrill of the Hunt)",
    	"player.focus > 55" }},
    PHP Code:
    -- Arcane Shot usage code.
    if 
    UnitPower("player") > fvr
    then 
    return true end 
    This one I don't understand.
    Last edited by Eryx; 12-09-2013 at 01:10 PM.

  11. #11
    kickmydog's Avatar Contributor
    Reputation
    257
    Join Date
    Jul 2011
    Posts
    635
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Thanks for your quick reply, I really appreciate it.

    But on the example code for the first two which was what I was asking the question about.

    PHP Code:
    {  "Arcane Shot""player.spell(A Murder of Crows).cooldown > 2 " }, 
    Will that code actually prevent "Arcane Shot" from being cast if "A Murder of Crows" is coming off cooldown? I idea being is that one does not want to use focus up on arcane shot if another ability that uses a large amount of focus is about to be ready.

    It looks to me like that code makes it cast "Arcane Shot" or have I got the wrong idea? Basically in my originally PQR code I used "return false" for conditions where I do not want the ability to be used. I have been looking through the DSL documentation but I cannot find anything like it.
    https://www.ownedcore.com/forums/world-of-warcraft/world-of-warcraft-bots-programs/wow-bot-maps-profiles/422388-kickmydog-bm-mm-sv-hunter-profiles.html#post2793017

  12. #12
    Eryx's Avatar
    Eryx
    Guest
    Yeah, the idea behind that rule is "Cast Arcane Shot if there is more than 2 seconds cooldown left on AMoC"
    If less than 2 seconds left of cooldown, it will not cast since it will return false due to CD < 2 sec.

    It's late though so maybe I can't read right but I'll be back rested and strong tomorrow!

  13. #13
    Nevodark's Avatar Contributor
    Reputation
    233
    Join Date
    Sep 2012
    Posts
    378
    Thanks G/R
    22/22
    Trade Feedback
    1 (100%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Eryxon View Post
    Yeah, the idea behind that rule is "Cast Arcane Shot if there is more than 2 seconds cooldown left on AMoC"
    If less than 2 seconds left of cooldown, it will not cast since it will return false due to CD < 2 sec.

    It's late though so maybe I can't read right but I'll be back rested and strong tomorrow!
    This is correct

    And great guide btw solid information.

  14. #14
    kickmydog's Avatar Contributor
    Reputation
    257
    Join Date
    Jul 2011
    Posts
    635
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Eryxon View Post
    Yeah, the idea behind that rule is "Cast Arcane Shot if there is more than 2 seconds cooldown left on AMoC"
    If less than 2 seconds left of cooldown, it will not cast since it will return false due to CD < 2 sec.

    It's late though so maybe I can't read right but I'll be back rested and strong tomorrow!
    Ok, so if i lay out my Arcane Shot rules as follows

    PHP Code:
    {  "Arcane Shot""player.spell(A Murder of Crows).cooldown > 2 " },
    "Arcane Shot", {
        
    "player.spell(Chimera Shot).cooldown",
        
    "player.focus < 45" }},
    "Arcane Shot", {
        
    "player.buff(Thrill of the Hunt)",
        
    "player.focus > 55" }}, 
    Will that stop arcane shot from firing, if the first condition is met, or will it simply read the first rule, not execute, and then go onto the next Arcane Shot rule, check that and then execute Arcane Shot, if those conditions are met?
    https://www.ownedcore.com/forums/world-of-warcraft/world-of-warcraft-bots-programs/wow-bot-maps-profiles/422388-kickmydog-bm-mm-sv-hunter-profiles.html#post2793017

  15. #15
    Eryx's Avatar
    Eryx
    Guest
    Originally Posted by kickmydog View Post
    Will that stop arcane shot from firing, if the first condition is met, or will it simply read the first rule, not execute, and then go onto the next Arcane Shot rule, check that and then execute Arcane Shot, if those conditions are met?
    That's correct. You can make a rule that includes all, though

    Code:
    { "Arcane Shot", {
    
    "player.spell(A Murder of Crows).cooldown > 2 ", "player.buff(Thrill of the Hunt)" "player.spell(Chimera Shot).cooldown", "player.focus > 55" }},
    This will stop Arcane Shot from being cast unless all conditions are met.
    Last edited by Eryx; 12-10-2013 at 03:29 AM.

Page 1 of 2 12 LastLast

Similar Threads

  1. [Guide/Tutorial] Making a Youtube Video Advertising Your Server!
    By Vardak in forum WoW EMU Guides & Tutorials
    Replies: 4
    Last Post: 06-23-2011, 02:15 PM
  2. [Tutorial] Make your own signature with photoshop
    By Kevve in forum Art & Graphic Design
    Replies: 10
    Last Post: 10-20-2008, 04:46 PM
  3. [Tutorial] Making your own control panel
    By Clain in forum WoW EMU Guides & Tutorials
    Replies: 4
    Last Post: 03-06-2008, 12:00 AM
  4. When you marry, make your first dance epic, like this one !
    By latruwski in forum Screenshot & Video Showoff
    Replies: 3
    Last Post: 12-17-2007, 03:34 AM
  5. [Tutorial] Make your own renders!
    By Massimiliano in forum Art & Graphic Design
    Replies: 5
    Last Post: 11-23-2007, 02:12 PM
All times are GMT -5. The time now is 03:00 AM. Powered by vBulletin® Version 4.2.3
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. User Alert System provided by Advanced User Tagging (Pro) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.
Google Authenticator verification provided by Two-Factor Authentication (Free) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.
Digital Point modules: Sphinx-based search