Originally Posted by
CodeMyLife
Yep, I'm out of here. Some profile sellers are ruining my fun. The saddest part is that the website owners don't seems to care much about it. Coding and giving is what I like. Now people steal my work and make money out of it and i can't even manage doing rep. Got 10 rep in the last 2 months or something? Well I guess people won't care anyway they can just "Steal" what they want by dumping. Oh yeah really.
Not gonna update anything anymore in here I guess. If you want to steal my work it's the right time.
CML
D: Its a sad day for PQR community, really is.. I guess, no, i know that you are right, so i dont try to post "dont go" and that shit. I do love your profiles and i think that they are unique in some way, so i decided to stick to them. I really hope that you will have much more luck on PE base and that you will manage to do whatever you planned with it. I will probably follow you, as a happy user of your rotations, but also as a custom modder of profiles. Well, only thing that i can ask you now, since i have been buzzing around PE forums, whats your username there to look up your profiles? Last time i checked i havent seen any of your profiles under class profiles sub-forums.
Till we have a chance to run into each other, good luck mate and hope to sniff you there!
On the positive side, i played a bit with your fury rotation to fix some things, so ill post it public cause i love when profiles are top optimized.
Added support for Berserk Stance for those naughty warriors that like to stand in deadly stuff
/whistle... who? me? naah xD
Under Initialization, find and replace:
Code:
SLASH_STANCEDANCE1 = "/stancedance"
function SlashCmdList.STANCEDANCE(msg, editbox)
if macros["Stance"] == 1 then
xrn:message("\124cFF006FEDDefensive Stance.")
macros["Stance"] = 2
else
xrn:message("\124cFFFF3300Battle Stance.")
macros["Stance"] = 1
end
end
with this code:
Code:
SLASH_STANCEDANCE1 = "/stancedance"
function SlashCmdList.STANCEDANCE(msg, editbox)
if macros["Stance"] == 1 then
xrn:message("\124cFF006FEDDefensive Stance.")
macros["Stance"] = 2
elseif macros["Stance"] == 2 then
xrn:message("\124cFFED0000Berserker Stance.")
macros["Stance"] = 3
else
xrn:message("\124cFFFF3300Battle Stance.")
macros["Stance"] = 1
end
end
Next, fixed issue with casting bloodbath when entering the combat, but being out of melee range of the target for fury rotation.
Under Fury Rotation find line:
Code:
if BloodbathCheck and Spells[_Bloodbath].known and _SA(_Bloodbath) and GetSpellCD(_ColossusSmash) < 2 then
_Cast(_Bloodbath, "player")
end
Replace it with:
Code:
-- single_target=bloodbath,if=enabled&(target.melee&debuff.colossus_smash.up)
if BloodbathCheck and Spells[_Bloodbath].known and _SA(_Bloodbath) and (CML_MeleeTarget() and _SmashUP) then
_Cast(_Bloodbath, "player")
end
This will cast Bloodbath only when target is in melee range and have Colossus Smash debuff (since Bloodbath is off GCD to maximize its potential).
One last thing, this is fix for Impending victory and Victory Rush which weren't working before at all. This will fix it and make them work according to settings in PQI
Locate their code at the end of single target rotation and replace it with this:
Code:
-- normal_rotation+=/victory_rush,if=!talent.impending_victory.enabled&buff.vrushed.up&HP<=iv.value
if ImpendingVictoryCheck and Spells[_VictoryRush].known and _SA(_VictoryRush) and CML_HaveBuff("player", _Vrushed) and _HP <= ImpendingVictory then
_Cast(_VictoryRush, CML_MeleeTarget())
return true
end
-- normal_rotation+=/impending_victory,if=talent.impending_victory.enabled&(rage>=10&HP<=iv.value)|(buff.vrushed.up&HP<=iv.value)
if ImpendingVictoryCheck and Spells[_ImpendingVictory].known and _SA(_ImpendingVictory) and ( _Rage >= 10 and _HP <= ImpendingVictory) or (CML_HaveBuff("player", _Vrushed) and _HP <= ImpendingVictory) then
_Cast(_ImpendingVictory, CML_MeleeTarget())
return true
end
If you want to have Victory Rush/Impending victory working in all AOE modes paste this same code between the end of Single Target and start of AOE rotations:
Now, i have some more ideas here and there, will update it when i do them
EDIT: Did some cleanup and testing, everything works fine if put in as explained. In addition to that, i added Heroic Throw toggle in PQI settings, as im not found of it.
As for Interrupt code.. looking into it.. on first glance It was wrong spell id into Plummer code, it was code for rogues Kick. Will post future updates here if anyone is willing to play with the code, or even use this rotation.
Edit2: Interrupts fixed!
Go to functions find and select everything, including from CML_Interrupts = nil down to this line, excluding xrn:message("\124cFF9E6720...CodeMyLife Warrior..."). Basically your switching whole interrupt code with this one posted, implemented both Pummel and Disrupting Shout.
Code:
CML_Interrupts = nil
function CML_Interrupts()
-- Credit goes to Xelper for his interupt code. Thank you very much Xelper!!
if not PummelCheck then
return false
end
if RandomPummel == nil then
if Pummel == 1 then RandomPummel = math.random(0,50) end
if Pummel == 2 then RandomPummel = 30 end
if Pummel == 3 then RandomPummel = 0 end
end
function PQR_InterruptSpell()
if IsPlayerSpell(6552) and PQR_SpellAvailable(6552) then --Pummel
return 6552
elseif IsPlayerSpell(102060) and PQR_SpellAvailable(102060) then -- Disrupting Shout
return 102060
else
return 0
end
end
local PQR_InterruptPercent = Pummel
local interruptSpell = PQR_InterruptSpell()
local interruptName = GetSpellInfo(interruptSpell)
InterruptTargetsList = { "target", "focus", "mouseover" }
-- Interrupt Casts and Channels on Target and Focus.
if interruptSpell ~= 0 then
for i = 1, #InterruptTargetsList do
local customTarget = InterruptTargetsList[i]
local castName, _, _, _, castStartTime, castEndTime, _, _, castInterruptable = UnitCastingInfo(customTarget)
local channelName, _, _, _, channelStartTime, channelEndTime, _, channelInterruptable = UnitChannelInfo(customTarget)
if channelName ~= nil then
--target is channeling a spell that is interruptable
--load the channel variables into the cast variables to make logic a little easier.
castName = channelName
castStartTime = channelStartTime
castEndTime = channelEndTime
castInterruptable = channelInterruptable
PQR_InterruptPercent = 0
local IsChannel = true
end
--This is actually "Not Interruptable"... so lets swap it around to use in the positive.
if castInterruptable == false then
castInterruptable = true
else
castInterruptable = false
end
if castInterruptable then
local timeSinceStart = (GetTime() * 1000 - castStartTime) / 1000
local timeLeft = ((GetTime() * 1000 - castEndTime) * -1) / 1000
local castTime = castEndTime - castStartTime
local currentPercent = timeSinceStart / castTime * 100000
if IsSpellInRange(GetSpellInfo(23881), customTarget) ~= nil
and ( currentPercent > PQR_InterruptPercent or interruptSpell ~= 6552 )
and UnitCanAttack("player", customTarget) ~= nil then
--target is casting something that is interruptable.
--the following 2 variables are named logically... value is in seconds.
if InteruptTimer == nil
or InteruptTimer <= GetTime() - 1.25 then
if currentPercent < RandomPummel and not IsChannel then return false end
CastSpellByID(interruptSpell, customTarget)
InteruptTimer = GetTime()
end
end
end
end
end
end