# Forum > World of Warcraft > World of Warcraft Bots and Programs > WoW Bot Maps And Profiles >  [PQR]4.3.4 Rogue PvP profile

## Numba1stunna1

*decided not to release it. Extremely overpowered to have abilities perfectly executed. Makes the game dumb. And I see a lot of people using them. Sorry.*

----------


## Numba1stunna1

Pre v1.0.0 Update

- Hotkeys for RedirectKidney, Burst, and Blind are now toggle-able, and will execute based on variables you allow (for example, only redirectkidney on full kidney, only blind on full blind, blind target if no focus, blind either in range, blind only focus). *NOTE: Redirect Kidney and Blind automatically toggles off on cooldown, Burst will stay on*

- Fixed all minor diminishing returns functions (warrior charge stuns, random stuns, etc).
- Fixed to auto target Hunter Feign Death (if previously targetted)
- Added more DR adjustable values (Cheap shot in stealth, Cheap shot in ShadowDance, Stun lock Kidney Shot DR, Garrote DR in stealth, Garrote DR in ShadowDance, Sap DR, Dismantle DR, Burst DR)
- All auto-abilities are now adjustable to turn on-off (default all on)
- Added Auto-Flag return
- Added separate variables for shiv (auto-slow and auto-remove enrage effects)
- Auto Smoke Bomb will now only work when it is effective and efficient (target is at least slowed with no defensive CD's and focus not in range).
- Added distance variable from focus for auto smoke bomb (default 15)
- Hotkey Smoke Bomb still requires target to be in melee range with at least slow
- Recuperate/Slice and Dice logic improved to properly set up for opener (still may need to be adjusted)
- Recpuerate/Slice and Dice logic changed to adapt to adjustable and viable kidney shot finisher
- Made redirect-kidney more aggressive to cast
- Added Auto-Sprint for Blind and Redirect-Kidney if Shadowstep is on cooldown (Priority : Shadowstep > Sprint IF Blind or Kidney Shot is NOT in range)

----------


## Poper21

Hey man, do you mind clearing your inbox?  :Smile:  And aswell, i am not sure if i am retarded , but do you mind sharing your profile, coz i dont realy see any download link around  :Big Grin: 

Thanks  :Smile:

----------


## Numba1stunna1

I am cleaning a lot in the profile to make it more efficient, trying to release it as soon as possible. Been Busy with holidays and all.

----------


## Numba1stunna1

Pre v1.0.0
-Still a lot of cleaning to do
- Combine Focus Loader and Target Loader into one function (greater efficiency). Both are still adjustable for each other (Target spells, and Focus Spells)
- Added "AutoStealthSap", "AutoVanishSap", and "AutoShadowDanceSap" variables if the user so chooses to enable/disable those
- Changed printing delay to more abilities to avoid print spamming
- Hemorrhage for bleed now checks if target has Garrote or Rupture debuff (will still Hemorrhage for other reasons, like unable to get behind target)
- Added Adjustable times for Vanish and Smoke Bomb for the ability Preparation (default = 30 seconds, meaning, both abilities must have cd greater than 30 seconds before auto preparation)
- Removed Target Toggle Blind (Problem occurs if focus would stealth/vanish, therefore, toggle would blind target instead of focus). Toggle Blind now only blinds focus.
- Fixed Auto slow shiv and auto enrage shiv variables to affect focus also (not just target)
- Burst will now always prioritize using offensive PvP trinket before gloves, but will still also use engineering gloves
- Changed format for spell casting to utilize ID's instead of names to make profile more acceptable to other languages (and not only English).
- Fixed Auto Shadowdance
- Auto Shadowdance and Auto Burst now checks for bleed debuff

- NEED TO UPDATE PVP DOT FUNCTION (Some are missing).

Will add auto trinket function and variables for type of CC and duration (for instance, only trinket at % HP of players or teammates, duration of CC > 4 seconds, only trinket fears and stuns).

----------


## Numba1stunna1

Tested and works. Must put values in all variables.


*This rogue profiles does rogue openers automatically and chooses based on the DR values you put. Example: if you put CheapShotDR = 1, it will Cheap shot full of half (zero or one DR). Also, the openers adjusts based on class. Casters besides mages will be silenced and stunned (not overlapped), non-casters will be stunned and not silenced, and mages will both stun and silence (with overlap). Mages are the only exception to overlap of silence and stun, considering they can blink stuns. For example, warriors will be stunned. If stun DR is passed the value you put in, it will instead Ambush.

NOTE: The dummies should imitate a caster that is NOT a mage (for testing purposes).
If any CC is overlapping, consider adjusting your latency value. You must put at least a value greater than 0 (unless you really have 0 ms in game).*

----------


## hamdroids

This doesnt make you insta r1 gladiator, but if you know how to use it you arent far away from r1 glad. This shit is sick as **** if combined with knowledge

----------


## Numba1stunna1

Pre v1.0.0 Update
-Recuperate and Slice and Dice will automatically cast after kill if guaranteed to be greater than current value.
-Dismantle will now disarm ret paladin with wings, and not just zealotry.
-Released version now has default values put into the variables.
-"Loader" is now customizable (TargetLoader, FocusLoader, EventRecuperateSnD) for your preference.



Thanks for the feedback. These customization are for people who do or do not prefer these options.

----------


## Numba1stunna1

Pre v1.0.0 Update

- Recuperate, Slice and Dice, and Kidney Shot now custom combo points values for user preference.
- Fixed Minor Typos



Examples:
*KidneyShotPoints = 4* will Kidney Shot on 4 combo points or more when stun DR value is true (whatever you have set it to)
*RecuperatePoints = 3* will Recuperate on 3 points or more when Recuperate is DOWN, however, if player has 5 combo points with 3 seconds left on Recuperate and Kidney Shot on CD, then it will refresh Recuperate with the 5 points.

----------


## Numba1stunna1

Pre v1.0.0 Update

- Improved Finisher Logic : If after cheapshot, Recuperate is not active, then recuperate will take priority over chained CC or Kidney Shot (Cheap Shot into Kidney Shot). If Recuperate is active after Cheapshot, it will Kidney Shot chained with Cheap Shot.

*NOTE: This does NOT affect bursting.
Also note, the overlap on the CC is adjusted on the Latency value you put. If your latency is 50ms (0.05) then it is recommended to put 0.05 or slightly higher to ensure the least CC overlap while ensuring there is no CC gap. Also note: for mages there will be overlap of silence and stun (considering mages can blink stuns).

5 Point Kidney > Garrote (casters) > Cheap Shot (casters, non-casters) or
Garrote (casters, if behind) >KidneyShot (if 5 points) or CheapShot into Kidney Shot

The list based on cicumstance:
5 point KidneyShot into Garrote (casters)
Garrote into 5 Point KidneyShot (casters)
CheapShot into KidneyShot (non-casters)
Garrote + KidneyShot (if 5 points, mage)
Garrote + CheapShot into KidneyShot (if less than 5 points, mage)
CheapShot into Garrote into KidneyShot (casters)
Garrote into CheapShot into 5 point KidneyShot (casters, rare case)* 

If none of the above made sense, all it means is that the profile tries to chain CC.

----------


## Numba1stunna1

*IMPORTANT: 1/4/2015 @ 2:33 AM fixed major bug which would drop frame rate very low. Please download the latest update and replace the old!*

It should also run smoother and more efficient. Report all bugs.

Edit : I am actually surprised how much smoother it runs. Event handler now hits more spells.

----------


## OMENRA

Keep up the great work Numba! I want to change the key binds of burst and smoke bomb. Could you assist me with that

----------


## Numba1stunna1

Pre v1.0.0 Update

- Working on PQI to make variables easier to change
- Improved Loader scripts to ensure Target casts (not aura) are directed towards the player, and is successful. Meaning, the destination of the spell must go to the player, and it must be from the target or focus (depending on the values inputed). Does not apply to auras. Target spells and Focus spells are still different (credit goes to ExtremKiller for the idea).

@OMENRA: you have to change these values



The values can be:

Left-Alt: IsLeftAltKeyDown()
Left-Control: IsLeftControlKeyDown()
Left-Shift: IsLeftShiftKeyDown()
Right-Alt: IsRightAltKeyDown()
Right-Control: IsRightControlKeyDown()
Right-Shift: IsRightShiftKeyDown()

Mouse Button 1: IsMouseButtonDown(1)
Mouse Button 2: IsMouseButtonDown(2)
Mouse Button 3: IsMouseButtonDown(3)
Mouse Button 4: IsMouseButtonDown(4)
Mouse Button 5: IsMouseButtonDown(5)

Note: you can make macros for the profile! Simply add /Pause (capital "P") to a macro you made. It will pause for 0.2 seconds For instance:




> /Pause
> /cast [@focus] Blind


For anyone interested in changing the pause delay: 



If you wish to make macros with injections, visit Cokx profile.

----------


## Numba1stunna1

Pre v1.0.0 Update 

- Improved burst logic to incorporate silence before stun, better timing
- Improved Backstab/Hemorrhage for redirect-kidney
- Improved Auto-Shadowdance Logic to ensure target is CC'd or SD DR, and focus is CC'd
- Fixed deadly poison spell ID typo
- Improved finisher timer logic
- Stun lock changed back to priority over recuperate

----------


## Numba1stunna1

Pre v1.0.0
*NEW FUNCTIONS! Download Data, Rotation, and Abilties*
- Kick/Gouge/Cheapshot/KidneyShot/Garrote are now considered interrupt spells (not just kick)
- Fixed a bug which would disrupt casting spells and not channeling spells
- "KickInterrupt", "GougeInterrupt", "KidneyShotInterrupt" "CheapShotInterrupt", "GarroteInterrupt" are now customizable
- Diminishing Returns function now adapts to rogues abilties. If CC return specific value, it will adapt (for units out of range of event handler)
- Shadowstep Kick for heals will now only Shadowstep for enemies that are guarenteed heal specced healers (resto shaman, holy paladin, Holy/disc priest, resto druid)
- Fixed a bug which would Vanish again to Sap after using Preparation (double Vanish)

----------


## Numba1stunna1

Pre v1.0.0 Update

- For interrupting function put more delay on focus interruption
- Focus interrupt delay now customizable (randomize value,Min/Max)
- Gouge, Garrote, Cheapshot, and Kidney Shot can now interrupt focus spell casting and is customizable (true/false)
- Fixed a bug which would execute loader if not directed towards player (GUID("player"))
- Fixed a bug whih would not execute loader if not directed towards player (for specific spells that are not towards player)
- Will of Forsaken now requires undead race
- offensive instantaneous damage abilities (ambush, backstab, hemorrhage, eviscerate) will now have Kill HP threshold to prioiritize damage over CC (KillHP,in percent) default is 15%.

- Interrupt function still under testing

----------


## OMENRA

Doesn't look like shadow step interrupt's are working.

----------


## Numba1stunna1

@OMENA I will take a look and do some tests. I wrote it and released it without doing any extensive tests. The shadowstep kick work for focus and custom but not the target. If the focus or custom is casting a BIG healing spell, then the enemy must be a healer spec'd (holy, restoration, discipline, etc). The only way the function knows if the enemy is a healer is if the enemy casts an ability that is exclusive to a heal spec, this is the only way (such as earth shield on resto shaman). The ID list for those healer spell ID have been checked, and all are there. 

Healer function keeps Healer GUID in database for 2 minutes of casting a healer spec'd specific spell (for example: if a shaman casts earth shield, then it will recognize him as a healer for two minutes. Casting another healer ability refreshes this two minutes).

*Note: The shadowstep kick is customizable. It will only execute on big casts (such as fears, big heals, hex, cyclone, etc). It will NOT disrupt all spells. However, you can make it so that it will shadowstep kick all spells, but it may not be viable.*

----------


## Numba1stunna1

Pre v1.0.0 Update

- Fixed a bug which would crash/disconnect from WoW
- Added more filters to Interrupt Function (not tested)
- Fixed typo in Kick Function which would prevent shadowstep kicking focus or custom
- Kill Totem function now works
- Rotation now more aggressive tries to stop attack when stealthed or vanished
- Auto-Focus Healer function under testing

ToDo: 
- Priest Dispersion is now considered a "SpecialImmune" (combo-point generate-able, yet low damage). CC's will be restricted until it wears off (minor overlap)
- test kick function
- totem function
- test auto focus

*Note: Download Rotation and Abilities*

----------


## Numba1stunna1

Whoops, repost

----------


## OMENRA

Keep up the great work Numba!

----------


## Numba1stunna1

A good idea is to add "/Pause" to a Vanish or Stealth macro to prevent the profile from breaking your vanish/steath. Here are mine




> #showtooltip Stealth
> /cast !Stealth
> /Pause





> #showtooltip Vanish
> /cast Vanish
> /Pause

----------


## OMENRA

I would also add auto sap feature if a stealth person is detected. In addition, I have auto-rotation on and when it attempt to kick/sap etc or spam it lags. My goes up my 300

----------


## OMENRA

Same thing occurs in 3.3.5 PQR

----------


## Numba1stunna1

Lower your refresh rate to 75ms+. Or perhaps your processor needs to be updated. There is already a auto sap stealth function.

----------


## OMENRA

Max is 59 mhz refresh for my monitor. I also have i7-2600 with all the latest updates  :Frown:

----------


## Numba1stunna1

@OMENRA hahaha, I meant the refresh rate on PQR



*Note: Extensive testing in FPS drops, execution efficiency, and changes in the next release will be a major overhaul in the profile. A lot of changes will be done in the next update. Please report any bugs.*

----------


## Numba1stunna1

*Due to my stupidity, the latest updates have been lost. And it was much more efficient, cleaner, and fixed a lot of scripting errors and bugs.*

Pre v1.0.0 Update *NOT RELEASED*

- Removed "StartAttack()"
- Fixed Dismantle (cooldown filter)
- Fixed a bug which would not use offensive trinket on burst phase (cast function ---> default)
- Stop Attack is now event driven for more efficiency (AuttoAttackEvent)
- Fixed a typo with totems (EarthBlind ---> Earthbind)
- Made the profile more efficent and less FPS consuming (disable custom by default), enable/disable filter format
- Removed custom target from some function to make profile more efficient. However, they can be enabled (disabled by default)
- Items and equips now have more filters (cooldown, other buffs)
- Every Spell has been scripted to run more efficiently, and the profile as a whole will execute more efficiently (parameters)
- Macros take priority over event spells (rotation order)
- Scripting format first executes from lower to higher processor-consuming filters (enabled/disabled,exist, cooldown, range, position, energy, GCD, class, HP filters, KILLHP,buffs/debuffs,DR check,GUID functions))
- cleaned duplication in scripts
- Added cooldown filter on feint
- lowered the time between damage abilites and kidneyshot/reset Stun DR. This will allows the profile to do more damage in standard non-burst rotation. However, the profile now isn't always ready for 5 point kidney on CD/reset stun DR.
- The version before this release had a lot of problem with the disrupt function. It should work now. If it doesn't, please report bugs.
- Kick/garrote spell interrupt now has filter for inner focus and aura mastery
- fixed deadly throw distance filters


Note: Enabling Custom Targetting may cause FPS drop (mass multi targetting)

----------


## OMENRA

Numba keep up the amazing work. Let me when I can donate for you to help you out  :Smile:

----------


## Numba1stunna1

@OMENRA, donation will be available on official release. 

Making this profile is just a hobby, but I like challenges to make it better. Thanks to everyone helping out the profile. The update is 20% done and take extensive time to ensure it's working properly. The beta update will be released after extensive testing and critical analysis. Official release will require Custom variables to be inputted by the user, and detailed description will follow. PQI and other functions will be made in the future.

This next release is much more efficient with better functions than previous released version. GUID table timers will be customizable.

I am busy studying in college for BS in chemistry and mathematics, but I will finish this no later than 1/13/2015 PST.

----------


## Numba1stunna1

Sorry, not released yet. I ensure you I am putting a lot of effort in testing in bg, duels, arena. Takes more time than I thought.

----------


## Numba1stunna1

Still working hard to complete this. Here is an updated list of fixes/changes

*- Removed "StartAttack()"
- Fixed Dismantle spell (cooldown filter)
- Fixed a bug which would not use offensive trinket on burst phase (cast function ---> default)
- Offensive trinket will now be used on burst toggle after opener or during shadowdance (was only during shadowdance)
- Stop Attack is now event driven for more efficiency (AuttoAttackEventLog)
- Fixed a typo with totems (EarthBlind ---> Earthbind)
- Made the profile more efficent and less FPS consuming (disable custom by default), enable/disable filter format
- Removed custom target from some function to make profile more efficient. However, they can be enabled (disabled by default)
- Items and equips now have more filters (cooldown, other buffs)
- Every Spell has been scripted to run more efficiently, and the profile as a whole will execute more efficiently (parameters)
- Macros take priority over event spells (rotation order)
- Scripting format first executes from lower to higher processor-consuming filters (enabled/disabled,exist, cooldown, range, position, energy, GCD, class, HP filters, KILLHP,buffs/debuffs,DR check,GUID functions)
- cleaned duplication and uneccesary filters in scripts
- Sap executes most efficiently, winning 99% stealth openers vs. stealth (Latency dependent)
- PQR rotation and PQI rotation now refreshes at values between 1ms and 10ms (adjustable for personal CPU). This value is lower than the minimum options
- Added cooldown filter on feint
- added GCD check on deadly throw and throw
- lowered the time between damage abilites and kidneyshot/reset Stun DR. This will allows the profile to do more damage in standard non-burst rotation. However, the profile now isn't always ready for 5 point kidney on CD/reset stun DR.
- burst preparation now more efficiently prepares buffs for bursting, and executes burst instantaneously when parameters are met (customizable)
- The version before this release had a lot of problem with the disrupt function. It should work now. If it doesn't, please report bugs.
- Kick/garrote spell interrupt now has filter for inner focus and aura mastery (kick and Silence immunity filters)
- fixed deadly throw distance filters
- Auto Stop attack event logger now works for auras other than player (destGUID = UnitGUID("target"))
- fixed a bug which would stealth sap if the player lost combat during vanish/shadowdance, thus losing vanish or shadowdance (buff filter)
- fixed a problem which would not chain stun
- added more accurate filter for offensive abilities
- added more functions to make the profile cleaner
- improved damage logic
- add shiv for evasion (position filter). Molten server returns combo points on hemorrhage misses, AT does not.
- added feint cooldown filter
- removed filters which would prevent focus and custom abilities to be executed properly
- added "shadowstep garrote", "shadowstep cheashot", and "shadowstep kidneyshot" interrupting (customizable)
- added "Wild Mature Swine" to test totem targetting 
- notice in wow character can't auto attack focus targets, therefore, auto attacking totems require to target them for melee attacks, or cast an ability. Throw can still be casted on mouseover/focus
- if kidney shot is not castable due to enemy buffs, then it will skip KS priority (stun and/or CC immunity)
- Offensive trinket now is used if bursttoggle is on, regardless of ShadowDance (FW debuff)
- Fixed problem with Ambush
- Training dummies seem to be considered as warrior class. Rotation adjusted to convert as caster (testing purposes).
- Took out event tables we don't need as DPS (Cokx data)
- Tables inserted and removed are more efficiently timed, and will significantly lower CPU consumption (Time and distance filter)
- Finisher timing more optimized to buffs/debuffs
- Shiv is castable with disarm except rogue's dismantle
- added disarm filter to offensive abilities
- standard rotation now has two options: "more control" or "more damage"*

----------


## bynike

Good Job >3

----------


## Numba1stunna1

After much frustration of debugging, testing, debugging, rewriting, more debugging, troubleshooting functions to make them work properly and more efficiently, I decided to make my own. I had to make my own Data file, because Cokx's data had a lot of problems after debugging every single function. So I made my own data file with my own functions. So most of all of the code is my personal work (the ones not are just standard ones). There are just simply too many custom variables for PQI to handle them, so I will make a guide to make things simple. Here is an update:




> - Removed "StartAttack()"
> - Fixed Dismantle spell (cooldown filter)
> - Fixed a bug which would not use offensive trinket on burst phase (cast function ---> default)
> - Offensive trinket will now be used on burst toggle after opener or during shadowdance (was only during shadowdance)
> - Stop Attack is now event driven for more efficiency (AuttoAttackEventLog)
> - Fixed a typo with totems (EarthBlind ---> Earthbind)
> - Made the profile more efficent and less FPS consuming (disable custom by default), enable/disable filter format
> - Removed custom target from some function to make profile more efficient. However, they can be enabled (disabled by default)
> - Items and equips now have more filters (cooldown, other buffs)
> ...

----------


## Numba1stunna1

Beta is released again.

- added variables for all abilities for people who don't want auto garrote, auto ambush, etc.

----------


## Numba1stunna1

pre v1.0.0

- Fixed a problem where the user disables kidney shot (spell priority and variables)
- Added pause hotkey (for those that want it)
- Added Stealth recuperate and Stealth slice and dice option (for those who do not want to automatically recuperate in stealth)
- Kidney shot now has the option to Kidney shot on hotkey held down
- All abilities listed below now can be enabled/disabled

AutoHemorrhage = true -- Auto Hemorrhage (true/false)
AutoBackstab = true -- Auto Backstab (true/false)
Blind = true -- Blind hotkey (true/false)
Burst = true -- Burst hoteky (true/false)
Redirect = true -- Redirect hotkey (true/false)
AutoAmbush = true
AutoCheapShot = true
AutoGarrote = true
StealthRecuperate = true
StealthRecuperatePoints = 2
StealthSliceAndDice = true
StealthSliceAndDicePoints = 2

----------


## Numba1stunna1

- Added "Spirit Link Totem" to the totem list. Oops.
- Openers now have burst option and opener option
- Finishers now have burst option and non-burst option

----------


## Numba1stunna1

The next update will have macros for every spell, so that the profile is more manual and less automatic. Toggled abilities will execute when possible.

----------


## Armince

where do i get it?:P

----------


## Numba1stunna1

I took it off because the next release found a lot of bugs, and releasing the interface. Please be patient

----------


## Numba1stunna1

Keep in mind, this is a hobby. This is not my job. I don't get paid to put in a lot of time into this. I only released it to the public because I quit playing video games. The only people testing this are my beta testers. I just do the writing as a hobby.

----------


## caca1996

Very good man i can't wait to use the script, great job

----------


## Numba1stunna1

Update : Sorry, I got busy with life. I haven't worked on this for 2-3 weeks. A lot of small bugs that make a big difference in the combat rotation, and I few things I continue to learn about PQR. Trying to fix all the bugs. Thanks. Again, this is just a hobby of mine.

----------


## Shub

where can i download or how can i get this awesomeness?

----------


## Numba1stunna1

Things are constantly getting hotfixed. I am busy with school. It's incomplete. It's overpowered. I am even debating releasing it because it's so overpowered. I am just too lazy and unmotivated to put full effort into it.

----------


## sainzi

mind to clear ur inbox or add my skype: feimi2k9

----------


## joshys12345

I will give you 300 dollars for it.

----------


## Numba1stunna1

To profit $300 and ruin a game, in my opinion, is not worth it.

----------


## xian65

Yes yes your profile is so amazing that whole servers will be closed because of it. ROTFL

----------


## Numba1stunna1

https://www.dropbox.com/s/fkpbn0qp2p..._DATA.lua?dl=0

I decide to make my data file open source, you can use the functions I made to give you ideas for making your own profile.

-

----------


## pleya

> If anyone wants a Cokx Data file that has a better DR tracker and more functions, whisper me. Credit goes to Cokx, of course


can u share share it thanks

----------


## Numba1stunna1

Such an old post, I don't have it anymore.

----------


## Xtremkiller

I think i still have it, if Numba is ok, i'll share it

----------


## Numba1stunna1

Let me whip it up really quick. I will make a modified Cokx File.

----------


## Numba1stunna1

I have modified and improved a lot of functions last time I posted on this forum.
https://www.dropbox.com/s/qu59vzoapw..._DATA.lua?dl=0

----------


## Numba1stunna1

Changelog

--Hunter's Feign Death is now tracked and auto-retargetted.
--Fixed a major problem where Custom Lag Toleranc and abilities written with 0 cooldown will fail to execute due to GCD abilities with no cooldown would execute on GCDCheck function. All Abilities now execute properly.
--All abilities have GCDCheck, specific spell cooldown requirements, and/or non-GCD cooldown check (such as shadowstep and shadowdance) to more properly execute rotation.
--Added Shaman wolves stun into DR table
--Abilities run on slash command (such as /Backstab or /BlindTarget) will attempt to execute until cancelled or SPELL_CAST_SUCCESS
--Auto Focus will now more intelligently focus arena targets.
--Gouging Bubbles has been removed (private server changelog)
--Reworked kick interrupt timers to include: time since start, time before ending, and precent of total cast (for more user customization)
--Latency is now automatically adjusted based on Net Stats of WoW
--Fixed a problem which sap would be slightly too late, resulting in wasted vanish, shadowdance, etc.
--Added events for totems which instantly targets spirit-link totems (extremely overpowered)
--slash command macros now have less filters to make it more aggressive to cast than auto abilities.
--Premeditation during bursting now more intelligently is used to prevent wasted combo points
--fixed a typo in auto shadowdance (non-burst)
--added filter for shiv if the user so chooses to slow only target and not focus target (and vice versa)
--fixed auto-smoke bombb to not cast too early
--auto stealth now momentarily pauses rotation to prevent unwanted spell execution.
--fixed auto stealth, auto vanish, and auto shadowdance for focus sap to check LoS
--new function: Mage Blink and Target Interrupt function: check to see if the target has blinked or has been interrupted specific to a spell school to more efficiently use crowd control (such as stunning after mage blink, stunning during silence, using CC only after spell lock duration has ended [5 seconds] etc.
--Hemorrhage bleed (backstab spec) now more efficiently casts on target, and will keep bleeds > 4 seconds to prevent rogue from vanishing away and escaping.
--kidney shot now uses shadowstep on rogue with evasion in 1v1 situations of arena to guarentee stun.
--fixed blind to also check paladin sacrific buffs on other arena opponents and not just the buff on the blind target
--decreased buffs timer requirement on burst to allow bursting to execute sooner.
--NEW: Diminishing returns addons do not register CC refresh, so I made a function to work around it and give true value of diminishing returns (tested a works)
--Instantaneous bursting abilities now execute more intelligent by checking buffs durations, debuff durations and running comparasion based on DR and target class.
--Garrote now has higher priority than cheapshot, if and only if stun DR is greater than silence DR (to more efficiently use diminishing returns and CC).
--Fixed a problem of spell toggles executing together (Interrupt spells, blind, and redirect Kidney)
--profile now sees mage arcane lock as opportunist to stun
e 
A lot has changed since I released, don't use the old profiles I have released.

----------


## Numba1stunna1

Changelog

New cool function I made which tracks specific spell school locked on a specific GUID. For example, if FrostFire bolt is disrupted, then that specific target will return Frost spell school and Fire spell school as locked for 5 seconds (lock time). This is important for functions of peeling, preventing heals, and crowd control opportunities.




> if not InterruptedTable then InterruptedTable={} end
> 
> if not EventHandlerLog then
> 
> EventHandlerLog = CreateFrame('Frame')
> EventHandlerLog:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
> 
> function OnSuccessfulCast(self, event, ...)
> 
> ...

----------


## Xtremkiller

Can't wait for next release  :Frown:

----------


## Numba1stunna1

Changelog

-added peeling function for CC abilities
-fixed CCing mage to properly avoid silence stun overlap if mage has no blink or is disrupted in arcane (mage cannot blink if arcane locked). This still hold true if mage has blink ready and is not arcane locked (silence with stun)
-default burst energy pooling is now set to 110 (can be manually adjusted in the values table
-hard CC now does not overlap on dismantle for classes exclusively melee
-added camouflage filter for abilities not able to execute on hunter's camouflage (such as sap, blind, ranged abilities, etc)
-fixed a problem which gouge will attempt to cast while chasing behind a target (for peeling or offensive cooldown)
-legendary hotkeys have been combined with macro hotkeys (for users that wish to use either or)

working on putting all the values into a PQI interface. However, since the profile needs a lot of work and is constantly increasing/decreasing stuffs, it isn't very time efficient to add it now.

----------


## PinkiPan

how do we get it ? i thought PQR was abandoned. i cant find an exe for the latest wow

----------


## Numba1stunna1

This is for private servers 4.3.4. DO NOT use PQR for retail.

----------


## bynike

You are genius!

----------


## Numba1stunna1

The Beta session is almost complete, thanks some people willing to provide qualitative feedback. The profile has dramatically improved over the last few weeks. It will be soon released.

Changelog
- New vial of shadows function to track damage proc (This is important for gouge).
- Gouge now filtered Vial of Shadows proc (raid finder, normal, and heroic versions). Because Gouge breaks on damage, vial of shadows proc breaks instantly from trinket.
- Spell Schools are now all caps for consistency.
- Party members now see spell locked.
- Event logger strings are now universally the same (to avoid confusion).
- New functions for Sap Shadowstep and Disrupt Shadowstep for range check.
- Enhancement shamans are treated more primarily as melee and less as caster (melee class with casting capabilities. More caster than warrior, less caster than ret). Disarm and silence filters applied accordingly.
- All classes (not just melee, casters, physical, magical) now have their own specific filters for more effective use of DR and chain CC.
- Peeling function now tracks all party and raid member and the enemy targeting those allies.
- Hemorrhage bleed prioritization changed
- Disrupt spells (Kick, Gouge, Garrote, Kidney Shot, Cheapshot) now properly check range and disrupt immunity.
- Totem event logger now only tracks and targets enemy totems (enemy player filter). SLT should still be instantly targeted and killed
- Premeditation auto cast function now casts as a last resort when Shadow dance is about to end due to sometimes not casting before shadowdance ends.
- Breakable CC (Blind, Sap, Gouge) now properly checks arena sacrificed targets (source AND destination)
- Event logger now properly reset slash commands
- Shadowstep disrupt and Shadowstep Sap now more fluidly executes (spell cast combination).
- Fixed a problem with crowd control, shadowdance abilities and finisher abilities mage, caster, non-caster, and melee casters filters.
- Stunning mage is based on these premises: Mage is Arcane locked, Mage blink is on cooldown, Mage is Silenced, or Player has at least 3 combo points with Shadowstep and Kidney Shot (forced blink into half kidney).
- Mage filter for Garrote fixed.
- Burst now more dynamically check timer on DR, buffs, and cooldown. Bursting is now as efficient and effective as possible.
- removed "Auto Abilities", "Events" from UI (to reduce clutter). Blind, RedirectKidney are still queued, therefore, should remain on UI.

----------


## Xtremkiller

Congratz Numba. This should be the most complete PvP profile ever, thanks god it's on 4.3.4, not willing to see it on retail (which is already filled with kickbotters)

----------


## Numba1stunna1

Hotfix
- Forgot to filter vial proc for just player, added

----------


## Numba1stunna1

Changelog
- Fixed some syntax that prevented the use of shadowstep sap
- Added Waylay peeling. If waylay is specced, the profile will try to use backstab/ambush instead of shiv for snare/peeling first
- Added player disarm for saps and burst (problem occured when profile will use cooldowns to sap or burst cooldowns while disarmed
- Added "/RedirectTa rget" and "/RedirectFocus" for those who wish to use Redirect without incorporating Kidneyshot ("/RedirectKidney")
- Blind now has the option to peel Target, Focus, and Arena.
- Profile now dynamically checks Only Hemorrhage option and changes finisher timing
- Cleaned some function
- Fixed a critical error for HandOfSacrific function
- Slice and Dice and Rupture ability (if enabled) while now more efficiently clip (Warmane change)
- Removed Find Weakness Filter for Slice and Dice
- The weird PvE trinket DoTs need to be added to the DoT list

*List of Macros:*




> /Toggles
> /Pause
> /Test
> /Backstab
> /DismantleTarget
> /DismantleFocus
> /FeintTarget
> /FeintFocus
> /GougeTarget
> ...


Note: Not case sensitive when inputted into macro. Macros are executed with less filters than auto with these premises:

*For attack abilities, will only execute without immunities
For abilities with cooldown, will only execute cooldown < 1s and without immunities (High DR also return immunities)
For Kick/Disrupt abilities, will only execute if target is casting and the cast is disruptable
For Stealth ability, will prioritize stealth and attempt to stealth regardless of no combat
For combo point abilities, will execute if player has at least 1 combo point
For Blind and Redirect will filter other CC's and Check DR
for CC abilities, will check immunities and DR immunities
*

----------


## Xtremkiller

> Note: Not case sensitive when inputted into macro. Macros are executed with less filters than auto with these premises:
> 
> *For attack abilities, will only execute without immunities
> For abilities with cooldown, will only execute cooldown < 1s and without immunities (High DR also return immunities)
> For Kick/Disrupt abilities, will only execute if target is casting and the cast is disruptable
> For Stealth ability, will prioritize stealth and attempt to stealth regardless of no combat
> For combo point abilities, will execute if player has at least 1 combo point
> For Blind and Redirect will filter other CC's and Check DR
> for CC abilities, will check immunities and DR immunities
> *


This is so smart and overpowered

----------


## rageheffa1

someone know a PQRotation bot work for 5.0.5 privat server pandaria

----------


## Numba1stunna1

Changelog
- Cleaning
- Surprisingly, some abilities do not show up for successful spells (such as shiv). Not sure if it's a private server bug or not. Added another filter "spell damage" (This is to automatically disable slash commands that return successful).

----------


## n3rz

Hi Numba how can i get your profile? i tried to send you some message but i didn t receive answer.

ty

----------


## sprxxx

Also interested in this, how does one go about obtaining it?

----------


## siefejos1

He told me that he only wants people who know about writing Lua

----------


## Numba1stunna1

I can't respond to all your messages. It's currently in beta. Testing, changing, and debugging takes time.

----------


## siefejos1

Can you give all of us who are anxiously waiting for a release a guess as to when you think you'll release this to the public? It would be greatly appreciated, not only by me but i'm sure for a lot of other people.

----------


## Numba1stunna1

Changelog
- Added "/OpenerAmbush", "/OpenerGarrote", and "/OpenerAmbush" slash commands. Premeditation-Recuperate Target, then opens. This was added for people who prefer to open with garrote first, especially against healer classes (of course, if you do not wish to Premeditate and Recuperate, make the following macro




> /cast Premeditation
> /Garrote


Note: All instant casting abilities (abilities that do NOT have GCD) do not have a slash command (such as Vanish or Evasion). There are only a few exceptions.

----------


## Numba1stunna1

Changlog

- Added Stealth and Vanish filter for /Backstab. If player so happens to stealth or auto Stealth right before Backstab, it will swap to /Ambush
- Added Combopoint filter for /Premeditation if player has 5 combo points (therefore, be a waste)
- Added Stealth and Vanish filter for /Stealth
- added stealth/vanish/shadowdance filter for ALL abilities requiring. This is to prevent the auto rotation from "locking up".

----------


## Pqrdealer

> Changlog
> 
> - Added Stealth and Vanish filter for /Backstab. If player so happens to stealth or auto Stealth right before Backstab, it will swap to /Ambush
> - Added Combopoint filter for /Premeditation if player has 5 combo points (therefore, be a waste)
> - Added Stealth and Vanish filter for /Stealth
> - added stealth/vanish/shadowdance filter for ALL abilities requiring. This is to prevent the auto rotation from "locking up".


 write me in skype maybe i can help you with testing and bugfixing :Smile:

----------


## Numba1stunna1

I have enough bug testers and scripters, thanks.

Changelog

-Added event for stealth and vanish to auto disable slash commands that are non-stealth, stealth-breaking abilities . However, you may still cast abilities that do not require stealth in stealth or vanish.

----------


## Numba1stunna1

Changelog 

- Fixed a problem which the profile would constantly randomize for disrupt, even during casting. It now has a fixed number the moment the disrupt target starts casting (Max/Min).
- Fixed a problem which the profile wouldn't properly globalize combo points for recuperate and slice and dice (for non-target specific abilities)

----------


## Neyia

Hi,

for trinket or some other uses, you can copy my old data I think:




> function UseItem(slot)	local _, Cooldown, Ready = GetInventoryItemCooldown("player", slot)
> if Cooldown == 0 and Ready == 1
> and UnitChannelInfo("player") == nil
> and UnitAffectingCombat("player") ~= nil
> and not IsStealthed()
> then
> UseInventoryItem(slot)
> return true
> end
> end

----------


## Numba1stunna1

I use this one:




> function OffensiveTrinket() 
> for i=1,#TrinketID do 
> for j=13,14,1 do 
> if GetInventoryItemID("player",j)==TrinketID[i]then 
> if GetInventoryItemCooldown("player",j)==0 
> then UseInventoryItem(j)return true end end end end end


I use this function with find weakness debuff or bursting, and range and if the enemy is using a defensive cooldown (the profile won't waste offensive cooldowns if the enemy has a significant damage reducing ability up.

In Cataclysm, Backstab with FW does significant damage, which is why engineering/trinket has the option to be used during FW debuff.

----------


## Neyia

Great idea, i think i'll add FW in restrictions for my PvE Profile, not for Backstab but for Legendary Proc + Envenom spam (I'm on a private 4.3.4 where Venom deal more than Evisc with Subtlety..)  :Stick Out Tongue:

----------


## Numba1stunna1

@Neyia, for subtlety, although it may be true that Envenom will deal more damage than Eviscerate when the target has no FW debuff, the deadly poison consumption dramatically reduces DPS. For subtlety, Envenom is not worth it unless for bursting.

----------


## Numba1stunna1

Changelog
- Fixed a problem which "KidneyShotEnergy" for pooling has the same string for "KidneyShotEnergy" for the default energy consumption of Kidney Shot. String for pooling changed to "KidneyShotPooling"
- All abilities having an energy use/consumption and cooldown now have a dynamic efficient energy pooling prepration. For example, if bursting energy is set to 100, then the profile will dynamically prevent energy use at the moment bursting is toggled on, or according to shadowdance cooldown, or according to DR timer (so in other words, 10s cooldown ---> 0s cooldown on shadowdance will start preparing energy prior to shadowdance being available). Incorporates Recuperate energy regen.
- Combo point generation abilities now try to keep uptime on specific filters (If Auto Recuperate is on, it will try to generate combo points for the combo points set in the profile for recuperate).This applies also to slice and dice and rupture (if the user so wishes to have those up too. Slice and Dice, Rupture, and Recuperate perfectly clips to prevent wasted buff. (keep in mind, if all 3 are enabled, then the profile will practically keep trying to generate combo points for Recuperate, Kidney Shot, Rupture, and Slice and Dice).
- Fixed a problem which the profile would only start auto attacking if Hemorrhage or Backstab had enough energy.
*NEW:* Made an assassination profile.
- Burst now auto toggles off after shadowdance successfully executes.
- "Tentacle of the Old Ones" now added to mouseover auto attack.
- Successful Stealth and Vanish now resets all non-stealth abilities. This is to prevent queued spells from accidentally executing in stealth.
- Slash commands now requires a target/focus. If it does not exist, then it will auto toggle off. This is to prevent casting an unwanted ability on target swapping.

----------


## Numba1stunna1

Making a video tutorial at the moment.

----------


## Xtremkiller

Tutorial about what ?

----------


## Neyia

Hi,

Available for test if you need more tester or scripter.  :Smile: 
Got 402 iLvL Rogue (Subtlety)

----------


## Numba1stunna1

Sorry, busy with school. Finishing my degrees in Mathematics and Chemistry.

-Changlog

A lot of changes in calculating the finisher timers. Pretty much what it does is the prioritization rotation calculate if the rotation will have enough time before using an ability/finisher to properly have Kidney Shot ready when the energy value is used. Dynamically changes. Takes Relentless strikes, Finisher energy, Needed energy, Honor among thieves proc, Critical strike chance, spec used (Hemo or backstab), current energy, inputted combo point value needed (like 4 or 5 combo points for recuperate), etc. Probably write an integration to make it easier. Undergoing analysis atm:




> function EnergyRate()
> if RecTimer == nil then
> return 10
> elseif RecTimer ~= nil then
> return 14
> end
> end
> 
> function RogueSpec()
> ...

----------


## Xtremkiller

Omg we need this to be released  :Frown: 
Still playing with your january's version but the bugs are so annoying x)

----------


## siefejos1

Can you give us the link?

----------


## siefejos1

Ok, so this is never going to get released or what? Even if its not done u should put a download link to it or make a youtube video about it so we can see what its like

----------


## xian65

Hey I have super uber PVP profile it's working like a charm 90% WIN RATIO just great. But I will not show it or sell it or something because is too good. TROLOLOLO

----------


## Numba1stunna1

Got busy with life, I will try to post video
-- How to make a macro
- With Pause
- Without pause
- abilities with stealth/no stealth
- CP generates and Finishers (and target/focus)
- special macros (stealth, opener, kick)
- toggle macros (burst, events, auto)
-- Event Logger
- What is it?
- Target/Focus
- Event Recuperate/SnD
-- Variables 
- Playstyle
- Legendary Hotkeys
- Pause Delay
- Energy logistics
- DR Values
- Auto Focus
- Target, Focus, Arena, and Custom Targets
-- Tuning Profile
- Why no two profiles will be the same
- Blind Logistics
- Redirect Logistics
- Sap Logistics (with cooldown)
- Special Gouge
- Interrupt Logistics (targets, timers, percentage, abilities)
-- Auto Rotations
- Backstab / Hemorrage spec
- Targetting protocol (totems, special targets)
- Class specific abilities (silences, stuns, disorients, disarms)
- Damage vs. Control priority
- Combo Points Logistics
- Finisher Logistics
- Peeling Logistics
- Stealth logistics
- Analysis
- Auto Attack Logistics
- Assassination Spec

----------


## Tedzt

Hi Numba1stunna1, is there a download link for the profile? i'm really curious to see it in action and i know a bit programming in Lua.

----------


## Numba1stunna1

changelog
- Settings run as a function to load more efficiently
- Settings are now on a separate file
- Added ALL the available macros

*needs to be tested

----------


## Numba1stunna1

works perfectly, now to test and release

----------


## siefejos1

Nice, can't wait.  :Smile:

----------


## siefejos1

is it close to being released

----------


## defac44

All these leechers could at least be polite, looks great dude but i really suggest making this a paid product to avoid widespread usage.

----------


## Numba1stunna1

- Fixed a critical bug that prevented peeling on PHYSICAL DPS. Warriors, Rogues, and Hunters are now peeled.
- Fixed a minor problem that would stop auto attack on the target if player Gouged or Blinded Focus/Custom.
- Added a filter mechanic that properly keeps energy above a specific amount (Sap Energy = 35) to always have energy to sap when chain-CCing focus (blind, sap, redirect Kidney)
- Dismantle now properly instantly dismantles/Feint warrior bladestorm
- Fixed a problem which would cause an LUA error on UI message splash for Spell Icon.
- Trying to figure out how to allow the profile to recognize player's spec (I can do event recognition). This is for auto-poison application.

----------


## dayaran

I have a question, is this only meant for max level PvP or can it be used for low levels (such as level 10, 19, 60, 70, 80 etc twinks) Thanks for all the work you put into it  :Smile:

----------


## siefejos1

auto-poison application can be really buggy, there should be an option to apply our poisons our selves if you can  :Smile:

----------


## defac44

How are we even meant to go about acquiring this?

----------


## siefejos1

If you don't have pqr for 4.3.4 i can give you a link but probably what hell do is give us a link to download his data, his offsets and his profile and you just have to copy and paste it into your pqr folder

----------


## Numba1stunna1

- Fixed a problem which disallowed events abilities from properly using Rogue Aura abilities (none-directive abilities).
- Added Automatic queueing for Blind and Redirect Kidney on Focus Trinket (can be disabled).
- Fixed an enemy targetting function which would not target Feigned hunters.
- Fixed a problem with CD Sap Range Check (using Shadowstep with Stealth/Vanish/Shadowdance), causing the profile to momentarily return on false positives. The profile should now properly enable/disable this.
- Fixed a problem which would halt offensive abilities on sapped targets after opening.
- Fixed a problem with auto focus range check.
- Fixed a problem with shadowstep disrupt abilities (report if problems still persists).
- Because the server has fixed some bugs, some abilities have been adjusted to fit those bug fixes.
- Event Tracker for Totem targetting now applies range check.
- Fixed a problem with Vanish and Blind. After bug fixes, Vanish now instantly removes combat, and Blind does not cause combat (retail like). Profile has been adjust to fit this.
- DR track is still 15 seconds (still bugged on server). I should add an adjustable timer. This is important because the profile prepares for burst and/or prepares for stuns based on DR timer.

There are still a lot of little bugs to fix. A lot of these bugs cause the profile to not function properly. Working on the fix them now that my internship is over.

----------


## Numba1stunna1

changelog
I have tested Vitalic's and my profile for cata, which mine has more options and better logistics for CC chaining and peeling. Here is the changelog
- Energy calculation logistic have been rework the provide precise energy preparation by calculation the CC and Recuperate tick (for instance, a full 6s Kidney Shot will incorporate 2 ticks of recuperate > 6s duration, a Cheap Shot may or may not have 2 ticks it depends when the Cheap Shot was executed relative to when Recuperate will tick). This is important because the profile will try to chain CC by calculating energy needed to chain CC. This more precise calculation could be a difference of 1 more ambush or 1 more eviscerate.
- Added Kill HP filter for Stealth/Vanish/Shadowdance sap. This is to prevent the profile from Shadowstepping to Sap if the target is almost dead. The Diminishing returns for Cooldown Sap is still adjustable.
- Added some filter for event tracker so that the profile does not waste abilities (such as wasting smoke bomb for Deep Freeze if the player already has Cloak of Shadows on)

More work to be done.

----------


## aeo

How do you auto sap other rogues? Is the UPDATE_STEALTH event fired when you pass someone and quickly see them with stealth?

----------


## Numba1stunna1

@aeo What the profile does is checks custom target/arena for rogue and druid with stealth, vanish, prowl buff (same way addons find target). target/focus/arena1/2/3/4/5. When stealth, Vanish and or prowl is triggered, the profile tries to find them and sap them. The profile does a good enough job going through custom targets table (all targets) to find stealthed units. If you have lower latency, you can instantly sap vanish on event tracker (Vanish --> Sap)

changelog
added /Vanish command. This is to temporarily delay the profile before and after Vanish, based on players latency before using Vanish.

----------


## creif

Hello, is there anyway to still download this? or I am too late as always.. Just started to play warmane, and would love to test your profile :|

Thanks for any answer

----------


## siefejos1

> Hello, is there anyway to still download this? or I am too late as always.. Just started to play warmane, and would love to test your profile :|
> 
> Thanks for any answer


It's not released to public yet.

----------


## Numba1stunna1

-UnitIsFeignDeath() function doesn't work, so I replaced it with Feign Death buff. Hunters under feign death will now be properly targeted and attacked.

----------


## Numba1stunna1

-Fixed a problem which players with latency problems will run past focus Sap/Disrupt when Shadowstepping. The profile will now automatically stop the character, Kick/Sap, then start running again when successful.
-Tweaked Burst Combo Point Management to adapt for bugged Honor Among Thieves. The logic is still made for retail-like, but will adjust for other circumstances.
-Shadowstep for redirect Kidney is now only use when Kidney Shot cooldown is at 0 (GCD Check). Used to be right after the rediect, now it waits until Kidney Shot GCD is 0. This is the prevent wasted redirect/shadowstep while snared.
-Peeling function will soon be made for arena, but it will take time, considering arena has many more variables.
-Peeling function adjusted for enemy healers. It will now peel less aggressively for enemy healers and enemy tanks. Enemy DPS will still prevail.
-Profile adapt to player's latency, but it anything above 400ms and the profile won't work to it's full potential.

----------


## siefejos1

> -Fixed a problem which players with latency problems will run past focus Sap/Disrupt when Shadowstepping. The profile will now automatically stop the character, Kick/Sap, then start running again when successful.
> -Tweaked Burst Combo Point Management to adapt for bugged Honor Among Thieves. The logic is still made for retail-like, but will adjust for other circumstances.
> -Shadowstep for redirect Kidney is now only use when Kidney Shot cooldown is at 0 (GCD Check). Used to be right after the rediect, now it waits until Kidney Shot GCD is 0. This is the prevent wasted redirect/shadowstep while snared.
> -Peeling function will soon be made for arena, but it will take time, considering arena has many more variables.
> -Peeling function adjusted for enemy healers. It will now peel less aggressively for enemy healers and enemy tanks. Enemy DPS will still prevail.
> -Profile adapt to player's latency, but it anything above 400ms and the profile won't work to it's full potential.


When do you think you will be finished? A week, a month, a year? Can you give a guess?

----------


## Numba1stunna1

Finished a lot of optimizations, made improvements to logic.
- GUID in private servers seems to be bugged, in which some characters have mismatch GUID (UnitGUID ~= source/destGUID). Fixed to counteract GUID bug.
- Message Splash now has to option to show major spells not including yourself. Such as, "Character1 Kidney Shot ==> Character2". This is show in some Original PvP videos
- Events for Focus change now trigger if the new focus target is different (the event would trigger if you focus'd the focus target, we want only when it changes or is nil).
- Optimized combo points tracking. The event trigger sometimes may not give true combo points value. This is to track combo points that are NOT on the target. The only way to track these combo points is to track your target/focus/mouseover/arena or your team's targets. Previous problem was the event would return 0 cps if combo points were being generated on another target and your current target has 0 (only one target at once may have combo points in Cataclysm).
- Added filters for Vanish in event tracker (to not vanish with flag, stealthed, flare debuff, or faerie fire debuff). This is to prevent wasting event tracker counter and/or to prevent wasting vanish.

----------


## siefejos1

> Finished a lot of optimizations, made improvements to logic.
> - GUID in private servers seems to be bugged, in which some characters have mismatch GUID (UnitGUID ~= source/destGUID). Fixed to counteract GUID bug.
> - Message Splash now has to option to show major spells not including yourself. Such as, "Character1 Kidney Shot ==> Character2". This is show in some Original PvP videos
> - Events for Focus change now trigger if the new focus target is different (the event would trigger if you focus'd the focus target, we want only when it changes or is nil).
> - Optimized combo points tracking. The event trigger sometimes may not give true combo points value. This is to track combo points that are NOT on the target. The only way to track these combo points is to track your target/focus/mouseover/arena or your team's targets. Previous problem was the event would return 0 cps if combo points were being generated on another target and your current target has 0 (only one target at once may have combo points in Cataclysm).
> - Added filters for Vanish in event tracker (to not vanish with flag, stealthed, flare debuff, or faerie fire debuff). This is to prevent wasting event tracker counter and/or to prevent wasting vanish.


When do you think you will be finished? A week, a month, a year? Can you give a guess?

----------


## Numba1stunna1

- change the logic with mage bursting. Logic has been modified to counter mage blink.
- change redirect logic to work if close proximity (further with sprint), or in shadowstep range with shadowstep cooldown. This is to prevent enemy running away from redirect.
- added snare and root filters for sprint and root filter for shadowstep in redirect Kidney.
- Fixed a problem with delayed shadowstep in loader.
- Added an option to burst only if target does not have Find Weakness Debuff.

@siefejos1 Perhaps in a week-month.

----------


## Numba1stunna1

Adjusted time variables for:
- Line of Sight
- Is Behind Target
- Target is Facing
- Is Facing Target

This is to fix problems with users having higher latency, in which the profile will continually "lock-up" for higher latency users. If an ability fails to cast based on the above variables to the specific GUID, the profile will move on to the next priority.

HOTFIX: Poisons application should have a delay between application, to prevent using poisons more than once on the same weapon.

EDIT: It is advised to set duration above Latency but below Custom Lag Tolerance window (GCD - Custom Lag Tolerance). So if you have 400ms set to custom lag tolerance and your latency is 200ms, then set time between 0.2 and 0.6.

----------


## Numba1stunna1

- Fixed some bugs.
- Defensive abilities that reduce damage are now calculated in the HP. For instance, enemies with Cheat death will have 5x of their current HP. This is to allow to profile to properly adjust CC or damage.
- Added Cheat Death to defensive buff.

----------


## Numba1stunna1

Hotfixed the damage reduction formula by changing it to multiplicative instead of additive. Each Defense ability should work now.
DamageReduction = (100-100*(DamageReduction/100)) * (DefensiveSpells[i].Percent / 100) + DamageReduction

----------


## Numba1stunna1

--Added a cool mechanic that adapts energy for CC. If a macro or sap mechanic is enabled, it will ensure the profile will have enough energy to use the ability if the player so happens to use another ability that costs energy before the higher priority ability of energy. Profile will now prepare energy and GCD for sap, shadowstep sap, and other CC abilities. Debug it with variable "MinimumEnergy".
For example, macros for blind should make the player have at least 15 energy after using an ability.
--Dismantle no longer has minimum energy filter.

HOTFIX: 
--reordered Energy filter for abilities to be AFTER Minimum Energy value has been applied.
--Because Kick does not have GCD, Disrupt function energy has been adjust for so.

----------


## wtbvitalicbot

@Numba1stunna1 Do you think your profile will be better than Vitalic's? I ask this because I am considering buying Vitalics profile but if there is going to be a better profile coming out soon for free that would be even better

----------


## Numba1stunna1

I have tried Vitalic's bot, and I don't really like it. There are a lot of things missing from it.
This profile has much better finisher logic, burst preparation logic, and many more variables to adjust for personal preference.

Some features include: 
Peel macro
Shadow step kick macro
All macros have target/focus/mouseover
more accurate filters
UI adjustable
Better combo point tracking
Filters for clean ability execution in combat log
Utilizing ALL abilities that can disrupt (not just kick).
Totem stomp logic
Finisher calculations based on energy/time/buff/etc
Most efficient possible damage in burst (with the option to burst only without Find Weakness, no enemy defensive buffs, etc)
Custom Target to track numerous targets (no just target and focus).

----------


## vitalic

I happened to see myself mentioned in the latest posts section so perhaps I could make a brief comment. 

@Numba1stunna1 It is quite fair of course to say you don't like my profile (bot?) but I would certainly be surprised if at least a few of my ideas and concepts have not formed the basis of your own work and therefore a degree of respect would not go amiss, somewhat like in science where people are usually careful not to trample on the perhaps now superseded work of those that paved the way with their earlier efforts. I seem to recall you asking for source code on my thread and have described systems that on the face of it parallel that which I first came up with years ago, which leads me to feel a bit miffed when seeing such a callous dismissal.

It's good to see someone investing time into working on this class because it is a big undertaking that historically most have shied away from, but I should point out to anyone reading that the reason mine is still available is because it, at least for now, remains the only Rogue profile realistically usable for rated play and has done since its release in Feb 2014. Nevertheless if a better alternative is released I would either put the profile to its long deserved rest or make it openly available.

----------


## Numba1stunna1

This is Cataclysm, your recently released profiles for WoD are much better. This is comparing an old Cataclysm profile. 1.83 I believe. I did give credit for the loader, when I first started making my profile, but a lot has changed since then. I also gave credit to Cokx for some functions as well as nova for cvars. I am not against your work, I am stating the differences (perhaps updated for private servers). This is just merely a hobby of mine, I don't make any profit off it. My profile is open sourced for beta testers, and easy to read.

----------


## vitalic

@Numba1stunna1 I understand that, no hard feelings.

----------


## despised68

When will this be available to test?

----------


## Numba1stunna1

- Added a filter to not use combo-point generating abilities for totems less than auto attack damage (this is to prevent wasting combo points for killing totems)
- Added filter to not stealth in smoke bomb. Problems arise when the Cooldown value of stealth is not reset after losing or disabling stealth (server bug).
- Added timer for successful casts with cooldown > 1s (non-GCD abilities). This is to counter server bugs (this also happens in retail sometimes, such as Healthstone, which causes the profile to freeze up). Example: when losing stealth, the return value of GetSpellCooldown is not accurate, which will occasionally "lock" the profile to keep trying to cast an ability that shows not on cooldown when in reality it is indeed on cooldown.
- Hotfixed: when entering arena, all ability timers are reset.
- Hotfixed: timers are now adjusted based on Glyphs and Talents (such as Nightstalker talent reducing stealth cooldown)
- Hotfixed: Preparation now reset specific spells timers. Also incorporates Preparation Glyph or not.

@desipised68 Because this profile is still in Beta, a lot of minor/major changes are being made daily. It would be a nuisance to release a change, find out there's a bug, and having to publish an update on every fix. Not all fixes are posted. The Beta is being tested by a select few, because I simply don't have time to test daily. Changelogs also help other profile makers find ideas and add them to their own profile. This profile will be open-sourced.

- Auto Focus now will try to focus enemy healing your target if focus does not exist.

----------


## Numba1stunna1

- A newer PQR is now being used. Report any FPS problems.
- Added FPS consuming filters for important abilities and as a last essential filter (to reduce FPS drop).
- Profile has been cleaned up a bit (combining duplicate filters).
- Ability loader will now distinguish if the target is CC'd before casting a counter ability (in rare cases which the target uses an offensive cooldown such as shadowdance while he is disarmed, etc). This is to prevent wasting an important cooldown.
- Fixed a problem which would Dismantle casters.
- Auto attack now has a timer filter to prevent wasting CPU consumption. If the player is already auto attacking (slowest weapon 2.6s) then there is no need to waste UnitFacing filter

- made changes to functions, global variables, loaders, and filter orders. v1.0.2 is significantly less CPU consumption

- added the option to enable/disable ability energy pooling. For example, if you choose to enable this, it will Pool energy if Gouge is possible (all the filters), it will calculate energy consumed (like Backstab = 40), GCD energy replenished, possible energy replenished by Recuperate (if Recuperate procs in the duration of GCD), Haste energy regen in the duration of GCD. Here's an example:

Pooling Gouge, casting Backstab --> Must have at least (GougeEnergy + Backstab Energy - GCDEnergy - Recuperate proc - Bonus haste energy)
Note that Recuperate does not always proc, the profile will calculate it.

-- Peeling function now check enemy's attack range and distance from it's attack target before applying peels.

-- Removed some positioning filter functions to some abilities such as Backstab. These have been replaced by failure-to-cast functions (less CPU consumption).

-- Added another filter for energy for the player's energy to be at least the ability's energy (in cases which the player's minimum energy after an ability is set at 0, which is impossible)
-- All filters have been made to this point. The profile should return ONLY ONCE for an ability, and it must return successful. Report if it does NOT.

-- Added PQR_DelayRotation for events, stop attack events based on Latency

-- Added more abilities to warning splash for abilities without a destGUID (such as Vanish). These ability will instead portray the unit's target. For example, if a rogue Vanishes with a target, the UI will show the rogue may potentially open on displayed target. Same concept: https://www.youtube.com/watch?v=MpDlVrf64SY

----------


## lukec2000

Would also really like to try this once its done <3

----------


## FLuZ

> - A newer PQR is now being used. Report any FPS problems.
> - Added FPS consuming filters for important abilities and as a last essential filter (to reduce FPS drop).
> - Profile has been cleaned up a bit (combining duplicate filters).
> - Ability loader will now distinguish if the target is CC'd before casting a counter ability (in rare cases which the target uses an offensive cooldown such as shadowdance while he is disarmed, etc). This is to prevent wasting an important cooldown.
> - Fixed a problem which would Dismantle casters.
> - Auto attack now has a timer filter to prevent wasting CPU consumption. If the player is already auto attacking (slowest weapon 2.6s) then there is no need to waste UnitFacing filter
> 
> - made changes to functions, global variables, loaders, and filter orders. v1.0.2 is significantly less CPU consumption
> 
> ...


Is there anyway I could get the beta of this to use on some servers I play? I wouldn't care for daily updates but just the most recent best working version.

----------


## Numba1stunna1

@FluZ I am actually testing it right now. I am trying to make it less FPS consuming while still maintaining quality.

----------


## FLuZ

Well please send me a PM as soon as its ready for a download link. I would like to try it really bad on servers like WoW Mortal and what not for 1v1's and 2v2's.

----------


## lukec2000

I would also be able to help with beta testing if needed ! Played with pqr before the ban waves and lots of other bots like HB/glider ect - 2.7k xp warrior/ lock!
Want some rogue ownage <3

----------


## Numba1stunna1

--profile now has lite option. The user may apply more accurate filters at the cost of CPU.
--profile now has auto lag tolerance to automatically adjust latency options (important for cc overlap).
--profile now has the option to disable all custom targetting. This will greatly improve CPU.
--profile will now require to be at least under 400ms. Anything higher will break the custom lag tolerance barrier and thus making it not properly function-able.

----------


## Numba1stunna1

buff/debuff/dr analysis, you can use it for your own profile analysis or use the idea and make your own. It's great for PvE to optimize DPS, but I use it for PvP, also.



```
local function round(v, p)
local mult = math.pow(10, p or 0) -- round to 0 places when p not supplied
    return math.floor(v * mult + 0.5) / mult;
end;

local  function print_r ( t )  
    local print_r_cache={}
    local function sub_print_r(t,indent)
        if (print_r_cache[tostring(t)]) then
            print(indent.."*"..tostring(t))
        else
            print_r_cache[tostring(t)]=true
            if (type(t)=="table") then
                for pos,val in pairs(t) do
                    if (type(val)=="table") then
                        print(indent.."["..pos.."] => "..tostring(t).." {")
                        sub_print_r(val,indent..string.rep(" ",string.len(pos)+8))
                        print(indent..string.rep(" ",string.len(pos)+6).."}")
                    elseif (type(val)=="string") then
                        print(indent.."["..pos..'] => "'..val..'"')
                    else
                        print(indent.."["..pos.."] => "..tostring(val))
                    end
                end
            else
                print(indent..tostring(t))
            end
        end
    end
    if (type(t)=="table") then
        print(tostring(t).." {")
        sub_print_r(t,"  ")
        print("}")
    else
        sub_print_r(t,"  ")
    end
    print()
end;


function Analysis()
if AnalysisTable == nil then AnalysisTable = {} end
--ANALYSIS!
--bleeds
	if UnitAffectingCombat("player") then
		if HemoTimer == nil and GarroteBleed == nil and Rupture == nil then
			if BleedUptime == nil then
				BleedUptime = GetTime()
			end
		elseif HemoTimer ~= nil or GarroteBleed ~= nil or Rupture ~= nil then
			if BleedUptime ~= nil then
				print("Bleeds were down for "..round(GetTime() - BleedUptime,2).." seconds")
				table.insert(AnalysisTable,"Bleeds were down for "..round(GetTime() - BleedUptime,2).." seconds")
				print_r(AnalysisTable)
				BleedUptime = nil
			end
		end
	else BleedUptime = nil
	end
	--kidney shot stuns
	if UnitAffectingCombat("player") then
		if DRTimer("target","stun") == 0 then
			if StunUptime == nil then
				StunUptime = GetTime()
			end
		elseif DRTimer("target","stun") > 0 then
			if StunUptime ~= nil then
				if GetTime() - StunUptime > 1 then
					print("Stun DR was down for "..round(GetTime() - StunUptime,2).." seconds")
					table.insert(AnalysisTable,"Stun DR was down for "..round(GetTime() - StunUptime,2).." seconds")
					print_r(AnalysisTable)
				end
				StunUptime = nil
			end
		end
	else StunUptime = nil
	end
	--Recuperate
	if UnitAffectingCombat("player") then
		if RecTimer == nil then
			if RecUptime == nil then
				RecUptime = GetTime()
			end
		elseif RecTimer ~= nil  then
			if RecUptime ~= nil then
				print("Recuperate was down for "..round(GetTime() - RecUptime,2).." seconds")
				table.insert(AnalysisTable,"Recuperate was down for "..round(GetTime() - RecUptime,2).." seconds")
				print_r(AnalysisTable)
				RecUptime = nil
			end
		end
	else RecUptime = nil
	end
end
```

----------


## zordiak

Out of curiosity, will the profile cost anything or will it be free, and in that case is there a way to donate to the cause?

----------


## Numba1stunna1

@Zordiak it's free and open source. Most of it is tested and written by me.

Changelog:

big update...
the goal of this profile is not just to make it good, but also to make it very customizable. Practically everything in this profile can be enabled/disabled.

-Users can now save his variables so that he does not lose them on every profile update.
-Profile now has all the variables in a nice table so that the user may provide his own filters. For example:



```
CustomFunctions = false
```

Instead of simply having a table that sets values/boolean, the user can modify it even more.



```
local framerate = GetFramerate();
if framerate < 60 then CustomFunctions = false else CustomFunctions = true end
```

This simply turns off multi-targetting to increase FPS when the game is running less than 60FPS.

-Fixed a burst timer logic that was using DRInfo instead of DRTimer function, the profile will now properly prepare burst based on DR values/reset timers.
-Added a debug slash command
-Removed spell event text scrolling
-Added better logic for Recuperate and Slice and Dice CP generation based on rogue spec (Backstab or Hemo)
-Profile now properly prevents queued spells from casting before more important spells.
-Enemy bubbles now contributes to total calculated HP (also incorporates defensive buffs, as before)
-Minimum Energy is now set to 0 when enemy is 1 spell from dying (calculations based on defensive buffs, bubbles, and healthpoints). Percentage defensive buffs are multiplicative, whereas bubbles are additive.
-Custom functions should now run smoother.
-Added Custom function splash messages.
-Fixed a problem which some functions would ignore enemy healers. Abilities for caster classes should now work (which includes garrote, defensive cooldowns).
-Made the profile even easier to read.
-Reordered filters (yet again) to improve FPS.
-Fixed sudden FPS drop in Auto Focus
-Fixed some slash abilities.
-Added customizable filters for slash commands (filters separate from the automated rotation).
-Fixed a problem which would try to premeditate the target with combo points that was too far to premeditate (the profile tries to premeditate the target with combo points instead of player's target to prevent wasting combo points for openers which use Recuperate/Slice and Dice before opening).
-Smoke bomb now has adjustable target specific and distance (ex. 15m from focus). This only applies to targets that are outside the radius of smokebomb and are not CC'd. You can now make it smoke bomb for arena targets that are not cc'd.
-Smokebomb now has class specific filter.
-Smokebomb now has a cast list filter (for example, if mage tries to cast poly on you outside of smoke bomb radius, you can now smoke bomb to prevent it).
-Fixed a problem which burst energy pooling would prevent redirect kidney from generating combo points. The profile now prioritizes redirect kidney before applying burst filters and pooling.

----------


## Numba1stunna1

- made DR timers more accurate. In the duration of the debuff, the timer will return the maximum dr time (15 seconds). DR calculators usually start time at start of debuff and at the end. This is to give more accurate windows for Finishers.
- 95% stable version is coming out soon.

----------


## Numba1stunna1

- Had to add an Event GCD Check (not just Event Spell Cooldown Check) for GCD abilities. Spells that fail to cast give a false cooldown, in which the server will temporarily run the spell as on cooldown. This is problematic for the smoothness of spellcasting. Therefore, the spells must be at least <= 1 second (to counter cooldown bug) and the Event trigger from GCD abilities must pass at least 0.6 seconds (0.4 seconds from full reset). Both functions counter false cooldown returns (GetSpellCooldown).

- Tested, the profile now properly returns Backstab fails and Backstab fail timers. Profile now properly executes spells.

----------


## Numba1stunna1

A lot of work has been put into this profile. Most changes have been to greatly improve performance by changing or removing functions.

- Fixed a major problem which would not redirect Kidney after the specified target was in Fear DR (including Blind).
- Reorganized all other important combat logs to another frame.
- Ability pooling energy is now 0 when target is in kill range.
- Peeling now also involves offensive cooldowns, not just the target's target health.
- Removed range check for peeling, as this caused a drastic FPS drop.
- Applied "Good CPU" filter for functions using PQR_UnitFacing and PQR_UnitDistance
- Killing Spirit Link Totem should be instantaneous if in range. However, if player is not in range, the profile will instead use Smoke Bomb if totem is in range of Smoke Bomb.
- Kidney Shot is now reprioritized over Recuperate (used to be whichever was castable first under specific conditions).
- Ambush, Garrote, and Cheap Shot toggle no longer auto toggles off without an enemy target (to use Stealth abilities against stealth).
- Fixed a string issue with Blind Peeling. Blind should now properly peel.
- Bursting now has the following options : Burst Find Weakness (bursting even if the enemy has Find Weakness debuff), Burst Defense (bursting even if enemy has defensive buffs), Burst Bleeds (bursting only if enemy has bleeds for the duration of the burst, profile will calculate based on DR timer, cooldowns, combo points, and buffs/debuffs), Burst Recuperate (bursting only if player has enough recuperate for the duration of the burst), Burst Slice And DIce (bursting only if the player has enough Slice and DIce for the duration of the burst). All of these values are calculated in the duration of the Burst Prepraration timer (default 10 seconds)
- Cheap Shot and Garrote now automatically toggle off if the target is already CS'd or Garroted (to prevent accidental spam).

----------


## solenrus

don't mean to be rude, but where are you realising this profile, since I wasnt around since you started the thread so long ago, I didnt follow it. appreciate your hard work nonetheless.

tl;dr dl link, pls  :Smile:

----------


## masohysta

Ive recently started working with PQR and now i see how much fun it gives when ur script is working as you wanted... but ur profiles are just f.. awsome. I wish my profiles one day will quite good as urs. Anyway gj bro

----------


## solenrus

@Numba1stunna1, your inbox is full. Is there any way of contacting you regarding thic CC. I want to use it if it's possible, cheers.

----------


## Numba1stunna1

Sorry, a lot of debugging. There are FPS drops and having to localize a lot of things. Been lazy about it for the past month.

----------


## Numba1stunna1

Holy shit, I finally found the problem with massive FPS drop. After months of optimizing and troubleshooting, I finally found it. Well at least it's well optimized.

----------


## solenrus

dude, where is the link to use it or what's the deal, I don't get it?

----------


## xian65

PQR is crap wow+ is much better to make rotations example death knight main loop:


```
function Offensive()
    if Plus.IsKeyPressed( VK_W) then
        DeathAndDecay()
    end
    unit = ObjectManager.GetCurrentTarget()
    player = ObjectManager.GetActivePlayer()
    if not UnitHaveBuff("Horn of Winter",player) then CastSpellByName("Horn of Winter",unit,30) end
    if unit and isEnemy() then 
    Plus.DoString('RunMacroText("/startattack")')
    Plus.DoString( 'RunMacroText("/petattack")' )
    if not UnitHaveDebuff("Frost Fever",unit) and not UnitHaveDebuff("Blood Plague",unit) then CastSpellByName("Outbreak",unit) end
        if not SpellAvailable("Outbreak") then 
            if not UnitHaveDebuff("Frost Fever",unit) then CastSpellByName("Icy Touch",unit) end
            if not UnitHaveDebuff("Blood Plague",unit) then CastSpellByName("Plague Strike",unit) end
        end 
    if SpellAvailable("Dark Transformation") then     CastSpellByName("Dark Transformation") end
    if UnitHaveBuff("Sudden Doom",player) then CastSpellByName("Death Coil",unit,30) end
    if UnitHaveBuff("Unholy Strength",player) then 
        if CheckRuneNotReady() then EmpowerRuneWeapon() end 
        if CheckTrinket() then Plus.DoString('RunMacroText("/use 13")') end
        if CheckGloves() then Plus.DoString('RunMacroText("/use 10")') end 
        CastSpellByName("Unholy Frenzy",unit)
    end
      --CastSpellByName("Necrotic Strike",unit,5)
    CastSpellByName("Necrotic Strike",unit,5)
    CastSpellByName("Festering Strike",unit,5)
    CastSpellByName("Scourge Strike",unit,5)
    --DeathAndDecay()
    if not Plus.IsKeyPressed( VK_Q ) then
        if GetRunicPower()>34  then CastSpellByName("Death Coil",unit,30) end
    else
        CastSpellByName("Summon Gargoyle",unit)
    end

    if getDistance(unit)>5 and not UnitHaveDebuff("Chains of Ice",unit) then CastSpellByName("Chains of Ice",unit,30) end
    if getDistance(unit)<6 then CastSpellByName("Summon Gargoyle",unit,30) end 
    if UnitHaveDebuff("Frost Fever",unit) and UnitHaveDebuff("Blood Plague",unit) then 
            if SpreadPlague() then CastSpellByName("Pestilence",unit) end 
        end 
    if CheckBloodNotReady() then CastSpellByName("Blood Tap") end
    end
    
end
```

You can check distance , check if gcd is off, you can check for any kind of key is pressed (ABCDEFGHQ etc ), you can check los, you can scan all units around you for anything ( life, mana, energy, buffs) without targetting,you can make auto-follow, auto go and hold on back of enemy and many other thins which pqr can not. 

Function for check if anybody around you don't have frost fever:



```
function SpreadPlague()
    local entryCount = ObjectManager.GetObjectListEntryCount();
    local player = ObjectManager.GetActivePlayer()
    for i = 1, entryCount, 1 do
        local unit = ObjectManager.GetObjectListEntry( i )
        local objectType = unit:GetType();
        local unitReaction = player:GetReaction( unit );
        unitName = unit:GetName();
        distance =  getDistance(unit)
            if distance<8 and ( objectType == 4 or objectType == 3) and (unitReaction < 3 or string.find(unitName, "Dummy")) and UNIT_FIELD_HEALTH(unit)>0 and isNotDead(unit) then
              if not UnitHaveDebuff("Frost Fever",unit) then return true end 
            end
    end
end
```

CastSpellByName with targeting by GUID , distance check and los check



```
function CastSpellByName(spellName,unit,maxDistance)
    if maxDistance==nil then maxDistance=40 end 
    if not unit then unit = ObjectManager.GetActivePlayer() end
    unitGUID = unit:GetGUID();
    unitName = unit:GetName();
     if SpellAvailable(spellName) and CanCast==1 and GCD_ResetTimer==1 then
        if not unitChanneling("player") and not unitCasting("player") and not iHaveLos(unit) and getDistance(unit)<maxDistance  then   
            Plus.DoString( 'CastSpellByName("'..spellName..'","'..unitGUID..'")' )
        end
	end
end
```

etc. PQR is primivite.

Full Working wow+ 4.3.4 unholy dk pvp? rotation


```
function Load()
    Plus.PrintChat("\124c00FF00ff".. Plus.GetScriptName().."\124cFFFFFFff loaded" );
	Event.RegisterTimerCallback( Offensive,20, true );
	Event.RegisterTimerCallback( Interrupt,200, true );
	Event.RegisterTimerCallback( GetStats, 1, true );
	Event.RegisterSignalCallback(UNIT_SPELLCAST_SUCCEEDED, FRAMEEVENT_UNIT_SPELLCAST_SUCCEEDED)
end
function Interrupt()
		unit = ObjectManager.GetCurrentTarget()
			if CheckCasting()~=0 then
				if getDistance(unit)<=5 and SpellAvailable("Mind Freeze") then CastSpellByName("Mind Freeze",unit,5) end
				if getDistance(unit)>5 then  
				if not SpellAvailable("Strangulate") then CastSpellByName("Death Grip",unit,25) end 
				CastSpellByName("Strangulate",unit,30)
				end 
			end
end
			
CanCast=1
GCD_ResetTimer = 1
GCD_StartTime = os.clock()
GCD_Time = 1.0

function GetStats()
	GCD_Difference = os.clock()-GCD_StartTime
	if GCD_Difference>GCD_Time then	CanCast=1 GCD_ResetTimer = 1 else CanCast=0 end
end

function UNIT_SPELLCAST_SUCCEEDED( identifier, spellId,unitID, spell)
    --if unitID=="player" then Plus.PrintChat(unitID.." "..spell.." "..os.clock()); end
    if unitID=="player" then
		if GCD_ResetTimer == 1 then GCD_StartTime = os.clock() GCD_ResetTimer = 0 end
	end
end

function CastSpellByName(spellName,unit,maxDistance)
    if maxDistance==nil then maxDistance=40 end 
    if not unit then unit = ObjectManager.GetActivePlayer() end
    unitGUID = unit:GetGUID();
    unitName = unit:GetName();
     if SpellAvailable(spellName) and CanCast==1 and GCD_ResetTimer==1 then
        if not unitChanneling("player") and not unitCasting("player") and not iHaveLos(unit) and getDistance(unit)<maxDistance  then   
            Plus.DoString( 'CastSpellByName("'..spellName..'","'..unitGUID..'")' )
            Plus.PrintChat(spellName.." ".." "..unitName.." "..os.clock())
        end
	end
end

function CheckTrinket()
	trinketReady = Plus.DoString( "startTime, duration, enable = GetItemCooldown(61034);return duration" );
	if trinketReady == "0" then return true else return false end
end

function CheckGloves()
	glovesReady = Plus.DoString( "startTime, duration, enable = GetItemCooldown(60409);return duration" );
	if glovesReady == "0" then return true else return false end
end

function CheckCasting()
	startTime = Plus.DoString('if (UnitCastingInfo("target") or UnitChannelInfo("target")) then return 1 end' );
	if startTime=="1" then return os.clock() else return 0 end 
end







function Offensive()
	if Plus.IsKeyPressed( VK_W) then
		DeathAndDecay()
	end
	unit = ObjectManager.GetCurrentTarget()
	player = ObjectManager.GetActivePlayer()
	if not UnitHaveBuff("Horn of Winter",player) then CastSpellByName("Horn of Winter",unit,30) end
	if unit and isEnemy() then 
	Plus.DoString('RunMacroText("/startattack")')
	Plus.DoString( 'RunMacroText("/petattack")' )
	if not UnitHaveDebuff("Frost Fever",unit) and not UnitHaveDebuff("Blood Plague",unit) then CastSpellByName("Outbreak",unit) end
        if not SpellAvailable("Outbreak") then 
            if not UnitHaveDebuff("Frost Fever",unit) then CastSpellByName("Icy Touch",unit) end
            if not UnitHaveDebuff("Blood Plague",unit) then CastSpellByName("Plague Strike",unit) end
        end 
	if SpellAvailable("Dark Transformation") then 	CastSpellByName("Dark Transformation") end
	if UnitHaveBuff("Sudden Doom",player) then CastSpellByName("Death Coil",unit,30) end
	if UnitHaveBuff("Unholy Strength",player) then 
		if CheckRuneNotReady() then EmpowerRuneWeapon() end 
		if CheckTrinket() then Plus.DoString('RunMacroText("/use 13")') end
		if CheckGloves() then Plus.DoString('RunMacroText("/use 10")') end 
		CastSpellByName("Unholy Frenzy",unit)
	end
  	--CastSpellByName("Necrotic Strike",unit,5)
	CastSpellByName("Necrotic Strike",unit,5)
	CastSpellByName("Festering Strike",unit,5)
	CastSpellByName("Scourge Strike",unit,5)
	--DeathAndDecay()
	if not Plus.IsKeyPressed( VK_Q ) then
		if GetRunicPower()>34  then CastSpellByName("Death Coil",unit,30) end
	else
		CastSpellByName("Summon Gargoyle",unit)
	end

	if getDistance(unit)>5 and not UnitHaveDebuff("Chains of Ice",unit) then CastSpellByName("Chains of Ice",unit,30) end
	if getDistance(unit)<6 then CastSpellByName("Summon Gargoyle",unit,30) end 
	if UnitHaveDebuff("Frost Fever",unit) and UnitHaveDebuff("Blood Plague",unit) then 
            if SpreadPlague() then CastSpellByName("Pestilence",unit) end 
        end 
	if CheckBloodNotReady() then CastSpellByName("Blood Tap") end
	end
	
end

function SpreadPlague()
    local entryCount = ObjectManager.GetObjectListEntryCount();
    local player = ObjectManager.GetActivePlayer()
    for i = 1, entryCount, 1 do
        local unit = ObjectManager.GetObjectListEntry( i )
        local objectType = unit:GetType();
        local unitReaction = player:GetReaction( unit );
        unitName = unit:GetName();
        distance =  getDistance(unit)
            if distance<8 and ( objectType == 4 or objectType == 3) and (unitReaction < 3 or string.find(unitName, "Dummy")) and UNIT_FIELD_HEALTH(unit)>0 and isNotDead(unit) then
              if not UnitHaveDebuff("Frost Fever",unit) then return true end 
            end
    end
end

function isNotDead(unit)
    unitGUID = unit:GetGUID();
    if Plus.DoString('if UnitIsDeadOrGhost("'..unitGUID..'")~=1 then return true end')=="true" then return true end
end 
function DarkSimulacrum(unit)
	mana = UNIT_FIELD_MAXMANA(unit)
	if mana>0  then 
		CastSpellByName("Dark Simulacrum",unit,30) 
	end
end	

function Mounted()
    if Plus.DoString( 'return IsMounted()')=="1" then return true else return false end
end

function strBuff()
	if UNIT_FIELD_HEALTH(unit)>30000 then 
	if getDistance(unit)<=5 then 
		if not UnitHaveBuff("Pillar of Frost",player) and SpellAvailable("Pillar of Frost") then
			CastSpellByName("Pillar of Frost")
		end
		
	end
	end 
end

function kmProc()
	if UnitHaveBuff("Killing Machine",player) then 
	if CheckRuneNotReady() then EmpowerRuneWeapon() end 
	if CheckBloodNotReady() then CastSpellByName("Blood Tap") end
		strBuff()
	end
end

function isEnemy()
    local Target = ObjectManager.GetCurrentTarget();
    if Target then 
    local currPlayer = ObjectManager.GetActivePlayer();
    local objectType = Target:GetType();
	local unitReaction = currPlayer:GetReaction( Target );
    unitName = Target:GetName();
    if ( objectType == 4 or objectType == 3) and unitReaction < 3 or string.find(unitName, "Dummy")  then return true end
    end
end

function EmpowerRuneWeapon()
	if getDistance(unit)<5 and CheckRuneNotReady() then CastSpellByName("Empower Rune Weapon") end
end 

function CheckRuneNotReady()
	runeStatusFrost = Plus.DoString( "start, duration, runeReady = GetRuneCooldown(6);return start" );
	runeStatusDeath = Plus.DoString( "start, duration, runeReady = GetRuneCooldown(2);return start" );
	if runeStatusFrost~="0" and runeStatusDeath~="0" then return true else return false end
end 

function CheckFirstReady()
	runeStatusFrost = Plus.DoString( "start, duration, runeReady = GetRuneCooldown(1);return start" );
	if runeStatusFrost=="0" then return true else return false end
end 

function CheckFifthtReady()
	runeStatusFrost = Plus.DoString( "start, duration, runeReady = GetRuneCooldown(5);return start" );
	if runeStatusFrost=="0" then return true else return false end
end 

function CheckThirdReady()
	runeStatusFrost = Plus.DoString( "start, duration, runeReady = GetRuneCooldown(3);return start" );
	if runeStatusFrost=="0" then return true else return false end
end 

function CheckFourthReady()
	runeStatusFrost = Plus.DoString( "start, duration, runeReady = GetRuneCooldown(3);return start" );
	if runeStatusFrost=="0" then return true else return false end
end 


function CheckSixthReady()
	runeStatusFrost = Plus.DoString( "start, duration, runeReady = GetRuneCooldown(6);return start" );
	if runeStatusFrost=="0" then return true else return false end
end 

function CheckBloodNotReady()
	runeStatusDeath1 = Plus.DoString( "start, duration, runeReady = GetRuneCooldown(1);return start" );
	runeStatusDeath2 = Plus.DoString( "start, duration, runeReady = GetRuneCooldown(2);return start" );
	if runeStatusDeath2~="0" and runeStatusDeath1~="0" then return true else return false end
end 


function GetRunicPower()
    runicPower = Plus.DoString('return UnitPower("player",6)')
    toInt = runicPower + 0
    return toInt
end


function DeathAndDecay()
	if SpellAvailable("Death and Decay") and getDistance(unit)<8 then 
	Target = ObjectManager.GetCurrentTarget();
    X,Y,Z = Target:GetLocation()
    Plus.DoString('RunMacroText("/cast Death and Decay")')
    Player.CastCurrentSpell( X, Y, Z )
	end
end


function  PowerWordBarrier(unit)
	if SpellAvailable("Power Word: Barrier") and getDistance(unit)<30 then 
		X,Y,Z = unit:GetLocation()
		Plus.DoString('RunMacroText("/cast Power Word: Barrier")')
		Player.CastCurrentSpell( X, Y, Z )
	end
end



function Defend()
		player = ObjectManager.GetActivePlayer()
        PLAYER_FIELD_MAXHEALTH = UNIT_FIELD_MAXHEALTH(player)
        PLAYER_FIELD_HEALTH = UNIT_FIELD_HEALTH(player)
        PLAYER_HEALTH_PERCENT = 100 * PLAYER_FIELD_HEALTH/PLAYER_FIELD_MAXHEALTH
    if PLAYER_HEALTH_PERCENT<45 then
		if not UnitHaveBuff("Power Word: Shield",player) and not UnitHaveBuff("Weakened Soul",player) then  CastSpellByName("Power Word: Shield",player) end
		if not UnitHaveBuff("Prayer of Mending",player) then  CastSpellByName("Prayer of Mending",player) end
        if SpellAvailable("Desperate Prayer") then Plus.DoString('RunMacroText("/stopcasting")') CastSpellByName("Desperate Prayer",player) end
    end
end

function FindLowestHealth()
    g_distanceList = {};
    g_objectList ={};
    counter = 0
    local entryCount = ObjectManager.GetObjectListEntryCount();
    local player = ObjectManager.GetActivePlayer()
    for i = 1, entryCount, 1 do
        local unit = ObjectManager.GetObjectListEntry( i )
        local objectType = unit:GetType();
        -- if FIELD_HEALTH> and distance<40 and objectType == 4 and unitReaction > 3 and HEALTH_PERCENT<90 then
        if  objectType == 4  then
            local unitReaction = player:GetReaction(unit);
            if unitReaction > 3 then
                distance =  getDistance(unit)
                    if distance<40 then
                    if UnitHaveToDispell(unit) then CastSpellByName("Dispel Magic",unit) end
                    FIELD_MAXHEALTH = UNIT_FIELD_MAXHEALTH(unit)
                    FIELD_HEALTH = UNIT_FIELD_HEALTH(unit)
                    HEALTH_PERCENT = 100 * FIELD_HEALTH/FIELD_MAXHEALTH
                        if FIELD_HEALTH>1 and HEALTH_PERCENT<90 then 
                        g_distanceList[counter] =  HEALTH_PERCENT
                        g_objectList[counter] = unit
                        counter = counter + 1
                        end
                    end 
            end 
        end
    end
    for counter,HEALTH_PERCENT in spairs(g_distanceList, function(t,a,b) return t[b] < t[a] end) do
        selectedObjectNumber = counter
        end
        --Plus.PrintChat( selectedObjectNumber )
        return g_objectList[selectedObjectNumber]
end


function UnitHaveToDispell(unit)
    unitGUID = unit:GetGUID();
    if Plus.DoString('local f=0; for i=1,40 do  debuff,_,_,count,bufftype,dur = UnitDebuff("'..unitGUID..'", i)  if ((bufftype == "Magic") ) and dur > 1 then f=1  end  end if f==1 then return true end')=="true" then return true end
end

function spairs(t, order)
    -- collect the keys
    local keys = {}
    for k in pairs(t) do keys[#keys+1] = k end

    -- if order function given, sort by it by passing the table and keys a, b,
    -- otherwise just sort the keys 
    if order then
        table.sort(keys, function(a,b) return order(t, a, b) end)
    else
        table.sort(keys)
    end

    -- return the iterator function
    local i = 0
    return function()
        i = i + 1
        if keys[i] then
            return keys[i], t[keys[i]]
        end
    end
end


function UnitHaveBuff(spellName,unit) 
    unitGUID = unit:GetGUID();
	if Plus.DoString('local f= 0  for i=1,40 do local name, count, unitCaster = UnitBuff("'..unitGUID..'",i)  if  name=="'..spellName..'" then f=1 end  end  if f==1 then return true end') == "true" then return true end
end

function UnitHaveMyDebuff(spellName,unit) 
    unitGUID = unit:GetGUID();
	if Plus.DoString('local f=0; for i=1,40 do debuff={UnitDebuff("'..unitGUID..'",i)} if debuff[8]=="player" and debuff[1]=="'..spellName..'" then f=1 end end if f==1 then return true end') == "true" then return true end
end

function UnitHaveDebuff(spellName,unit) 
    unitGUID = unit:GetGUID();
	if Plus.DoString('local f=0; for i=1,40 do debuff={UnitDebuff("'..unitGUID..'",i)} if debuff[1]=="'..spellName..'" then f=1 end end if f==1 then return true end') == "true" then return true end
end

function IsMoving()
     if resetTimer==nil then resetTimer =1 end
     if not player then player = ObjectManager.GetActivePlayer() end
     if resetTimer == 1 then
        startTime = os.clock()
        pX, pY = player:GetLocation();
        positionSum = pX+pY
        resetTimer = 0
    end
    difference = os.clock()-startTime
    if difference>0.1 then
        pX, pY, pZ = player:GetLocation();
        positionSum2 = pX+pY
        if positionSum~=positionSum2 then resetTimer=1 return true   end
    end
end


function iHaveLos(unit)
    local Target = unit;
    local currPlayer = ObjectManager.GetActivePlayer();
    local pX, pY, pZ = currPlayer:GetLocation();
    oX,oY,oZ = Target:GetLocation()
    local result = D3D.TraceLine(oX, oY, oZ + 2.35, pX, pY, pZ + 2.35);
    if result~=nil then return true else return false end
end

function getDistance(unit)
    local player = ObjectManager.GetActivePlayer()
    local oX,oY,oZ = unit:GetLocation()
    local pX, pY, pZ = player:GetLocation();
    local diffX = pX - oX;
    local diffY = pY - oY;
    local distance =  math.sqrt( math.pow( diffX, 2 ) + math.pow( diffY, 2 ) )
    return distance
end

function unitCasting(unitGUID)
	isCasting = Plus.DoString('spell, _, _, _, _, endTime = UnitCastingInfo("'..unitGUID..'");return spell')
	if isCasting ~="nil" then return true else return false end
end

function unitChanneling(unitGUID)
	isCasting = Plus.DoString('spell, _, _, _, _, endTime = UnitChannelInfo("'..unitGUID..'");return spell')
	if isCasting ~="nil" then return true else return false end
end

function GetSpellCooldown(spellName)
    start,duration=Plus.DoString( 'start, duration, enabled = GetSpellCooldown("'..spellName..'");return start,duration')
	start = os.clock()
    return start,duration
end

function IsUsableSpell(spellName)
    usable=Plus.DoString( 'usable, nomana = IsUsableSpell("'..spellName..'");return usable' )
    return usable
end

function SpellAvailable(spellName)
    local spellStartTime, spellDuration = GetSpellCooldown(spellName)
    local spellUsable = IsUsableSpell(spellName)
    local spellAvailable = false

    if spellUsable then
        if spellStartTime ~= nil then
            local spellTimeLeft = spellStartTime + spellDuration - os.clock()
                if spellTimeLeft <= 0.125 then spellAvailable = true end
        end
    end
    return spellAvailable
end

function UNIT_FIELD_HEALTH(unit)
    local currentTargetPointer = unit:GetPointer()
    local ObjStorage = currentTargetPointer  + 0xC
    local unitMemoryBlockStart = Memory.Read( ObjStorage, "int" )
    local value = Memory.Read( unitMemoryBlockStart+0x20+0x12*4, "int" )
    return value
end

function UNIT_FIELD_MAXHEALTH(unit)
    local currentTargetPointer = unit:GetPointer()
    local ObjStorage = currentTargetPointer  + 0xC
    local unitMemoryBlockStart = Memory.Read( ObjStorage, "int" )
    local value = Memory.Read( unitMemoryBlockStart+0x20+0x18*4, "int" )
    return value
end

function UNIT_FIELD_MAXMANA(unit)
    local currentTargetPointer = unit:GetPointer()
    local ObjStorage = currentTargetPointer  + 0xC
    local unitMemoryBlockStart = Memory.Read( ObjStorage, "int" )
    local value = Memory.Read( unitMemoryBlockStart+0x20+0x19*4, "int" )
    return value
end

function Unload()
    Plus.PrintChat("\124c00FF00ff".. Plus.GetScriptName().."\124cFFFFFFff unloaded" );
end
```

----------


## Numba1stunna1

Is the Check Distance and Player/Target Facing CPU consuming for WoW+?

----------


## xian65

No lags for that. The isBehind checking function ( om my crappy code :P )


```
function isBehind()
	local tyllewo = 0
	local tylprawo = 0
	local oX,oY,oZ = ObjectManager.GetCurrentTarget():GetLocation()
	local pX, pY, pZ =  ObjectManager.GetActivePlayer():GetLocation();
	d = math.atan2((oY - pY), (oX - pX))
	r = d - unit:GetRotation()
	if (r < 0) then  r = r + (math.pi * 2)  end
	r = (r*180/math.pi)
	if r<0 then r=360+r end
	--Plus.PrintChat(r)
	if r>315 then tyllewo=1 end
	if r<40 then tylprawo=1 end
	if tyllewo==1 or tylprawo==1 then return true end
end
```

----------


## Numba1stunna1

oh, I meant to ask for the Line of Sight function. Have you tested it and does it work? PQR uses relatively the same coding for in front and behind. The function should be 180 degrees behind the target (or in front). So it's like a semi-circle. So the vector angle between Target and Player (d) and the difference between "d" must be > pi/2. for the 2nd calculation (if r<0 then r=360+r end), r is never < 0, because you already convert the radians into a positive number. r < pi/2 (90 degrees) or r > 3pi/2 (270 degrees). You can keep it in radians to avoid doing more calculations. math.atan2 return the value in radians, so keep the whole thing in radians. Here it is if you're lazy, localizing the math function is slightly more efficient (and multiplication):



```
function isBehind()
local pi = math.pi
local arctan = math.arctan
	local tyllewo = 0
	local tylprawo = 0
	local oX,oY,oZ = ObjectManager.GetCurrentTarget():GetLocation()
	local pX, pY, pZ =  ObjectManager.GetActivePlayer():GetLocation();
	d = arctan((oY - pY), (oX - pX))
	r = d - unit:GetRotation()
	if (r < 0) then  r = r + (pi * 2)  end
	--Plus.PrintChat(r)
	if r> 1.5*pi then tyllewo=1 end
	if r< 0.5*pi then tylprawo=1 end
	if tyllewo==1 or tylprawo==1 then return true end
end
```

----------


## xian65

Los it no lagging and is working in almost all cases and on alterac in big fitght. One problem is with multiple lua executions on many targets in short duration of time like scanning for many debuffs/buffs on enemys around you. But ability to scan for anykind of buffs or casting without selecting a player is very useful ^^. Thank you for simplified function.

----------


## XxhadesxX

Well please send me a PM as soon as its ready for a download link. I would like to try it really bad on servers like WoW odysseum and what not for 1v1's and 2v2's.

----------


## Numba1stunna1

I have been busy with school. Trying to finish my degree in Chemistry. I simply don't have the time to fix and write the profile right now. There are a lot of stability issues that can easily be fixed but require time. I don't have that.

----------


## OMENRA

Any updates?

----------


## johnatoc

I have a question about queuing a spell with slash command, now I checked the image at page 3 and I came up with this so far:

RegisterCVar("my_spell", "0")

SLASH_spell1 = "/spell"
function SlashCmdList.spell(msg, editbox)
if GetCVar("my_spell") == "0" then
SetCVar("my_spell", "1")
print("spell ON")
else
SetCVar("my_spell", "0")
print("spell OFF")
end
end

and I call it with

if GetCVar("my_spell") == "1"
then
return true
end

I encountered the following problems: first of all it acts like an on/off switch it doesn't queue once and moves on to normal rotation, if this "spell" has a higher energy cost than other spells it wont be cast unless there is enough energy(but I got around this problem).
Can anyone help with a tip at the first problem?
Thanks

----------


## Numba1stunna1

Make a combat log to set cvar to 0 on cast success



```
if not MacroEvent then
	MacroEvent = true
	
if not SuccessEvent then
	SuccessEvent = CreateFrame("FRAME", nil, UIParent)
	SuccessEvent:Hide()
end

local function SuccessEvent_OnEvent(self, event, ...)
	local type, _, sourceGUID, sourceNAME, _, _, destGUID, destNAME = select(2, ...)
	if event == "COMBAT_LOG_EVENT_UNFILTERED" then
		if (type == "SPELL_CAST_SUCCESS")
		or (type == "SPELL_DAMAGE") then
			if sourceGUID == UnitGUID("player") then
				local SpellCastSucceededID = select(12,...)
				local SpellCastSucceededTarget = destGUID
				--print(SpellCastSucceededID)
				if GetCVar("Spell_"..string.gsub(GetSpellInfo(SpellCastSucceededID).."","%s","")) ~= nil
				and tonumber(GetCVar("Spell_"..string.gsub(GetSpellInfo(SpellCastSucceededID).."","%s",""))) == 1 then
					SetCVar("Spell_"..string.gsub(GetSpellInfo(SpellCastSucceededID).."","%s",""), 0)
				end
			end
		end
	end
end
SuccessEvent:SetScript("OnEvent", SuccessEvent_OnEvent)
SuccessEvent:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")

end
```

Something like that

----------

