Elitist Jerks
Register
Blogs
Forums


Go Back   Elitist Jerks » Class Mechanics » Paladins

Reply
 
LinkBack Thread Tools
Old 11/15/10, 12:07 PM   #616
cremor
Piston Honda
 
Human Paladin
 
Blackmoore (EU)
Originally Posted by burghy View Post
No, could you post the code. Also, try r159, cleaned up some stuff though not sure it would fix it.
Couldn't reproduce it with r159. But in case it's just not happening always, here is the code:
return IconAura("HELPFUL|PLAYER", "player", "Lichtenergie")

Offline
Reply With Quote
Old 11/17/10, 7:47 AM   #617
Italospawn
Glass Joe
 
Blood Elf Paladin
 
Aerie Peak (EU)
Where i can Hide the Boarder from the Icons in ClCinfo?

Offline
Reply With Quote
Old 11/17/10, 9:01 AM   #618
burghy
Don Flamenco
 
Human Paladin
 
Ravencrest (EU)
Set skin to Barebone or find a ButtonFacade skin without borders.

Offline
Reply With Quote
Old 11/17/10, 12:22 PM   #619
Amperian
Glass Joe
 
Blood Elf Paladin
 
Kil'Jaeden
Holy Power Bar

I haven't seen this addressed on the forum at all, but since yesterday's patch (4.0.3) enabling clcProt has placed a seemingly larger-than-normal Holy Power UI element directly in the middle of my screen. Addons such as MoveAnything are not able to move the UI element or hide it. I originally had assumed that the replacement HoPo gauge that I use as part of Pitbull4 was causing this. But I tried enabling/disabling just about every combination of addons to see what was causing this, and only disabling clcProt made the HoPo gauge disappear.

Offline
Reply With Quote
Old 11/18/10, 3:12 AM   #620
Zalinda
Von Kaiser
 
Draenei Paladin
 
Khadgar (EU)
This is part of the 4.0.3 patch changes. The way the UI scaling works has been changed.
You can revert to the old method by ticking the checkbox next to the UI slider in the video options.

Offline
Reply With Quote
Old 11/26/10, 2:52 PM   #621
dehvi
Glass Joe
 
Human Paladin
 
Mok'Nathal
I was trying to use the micon to track censure stacks but keep getting a nil value. I have tried:
return MIconAura("HARMFUL", "target", "Censure", "player") and
MIconSoV(1, 0.5, "before", true, nil)

Offline
Reply With Quote
Old 11/28/10, 4:22 PM   #622
cremor
Piston Honda
 
Human Paladin
 
Blackmoore (EU)
The bug with the buff icon for Infusion of Light is back, but now it's not showing dark, but red. But it doesn't happen always. Might be caused by switching specs, but I'm not completely sure about that.
I'm using the latest version. Code is still the same as posted above.

Offline
Reply With Quote
Old 11/28/10, 5:51 PM   #623
burghy
Don Flamenco
 
Human Paladin
 
Ravencrest (EU)
Could you try with clcInfo - r171 - WoW AddOns - CurseForge.com and see if it still happens?

Offline
Reply With Quote
Old 12/10/10, 7:08 PM   #624
Fancy_pants
Glass Joe
 
Blood Elf Paladin
 
Stonemaul
I posted here asking for how to display cooldowns on the icons but I just found out how to do it.

If you want to create an icon that shows the cooldown for the ability its displaying (like how clcret did), go to the icon behavior and in the text field type:

return IconSpell("ability")

However, I still don't know how to use this with the built in priority. If anyone knows how to make an icon that shows the next ability in the priority and displays its cooldown, that would be much appreciated.

Last edited by Fancy_pants : 12/10/10 at 7:22 PM.

Offline
Reply With Quote
Old 12/11/10, 6:15 AM   #625
Teleros
Von Kaiser
 
Teleros's Avatar
 
Human Paladin
 
Kul Tiras (EU)
Originally Posted by Fancy_pants View Post
However, I still don't know how to use this with the built in priority. If anyone knows how to make an icon that shows the next ability in the priority and displays its cooldown, that would be much appreciated.
You don't mean this do you?

Current button to push: return IconRet1()
Button to push after above: return IconRet2()

Offline
Reply With Quote
Old 12/11/10, 8:30 AM   #626
cremor
Piston Honda
 
Human Paladin
 
Blackmoore (EU)
Originally Posted by burghy View Post
Could you try with clcInfo - r171 - WoW AddOns - CurseForge.com and see if it still happens?
Sorry, completely forgot to post about this. Seems to be fixed, thanks.

Offline
Reply With Quote
Old 12/12/10, 9:21 PM   #627
 Gnarfoz
Procrastination made in Germany
 
Gnarfoz's Avatar
 
Draenei Paladin
 
Das Syndikat (EU)
clcRet defines a lot of non-existant files in its TOC file (or rather, in the XML files loaded from there), provoking errors/warnings in FrameXML.log, see link below.

12/13 02:59:07.122 Loading add-on clcInfo 12/13 - FrameXML.log

Are these forgotten leftovers or just placeholders for modules still to be developed?

Either way, stuff that errors probably slows down loading times (albeit probably only very minimally) and such includes should thus be commented out until the files are actually present.


I also noticed that exporting an MultiBar config and importing it to another spec does not seem to carry over all configuration options (I think texture, font and color choices were missing).

Quis custōdiet ipsōs custōdēs? -- Decimus Iunius Iuvenalis

Germany Offline
Reply With Quote
Old 12/25/10, 1:18 PM   #628
Sleibhin
Glass Joe
 
Human Paladin
 
Hyjal
Any way to add Zealotry and Guardian of Ancient Kings?

Offline
Reply With Quote
Old 12/28/10, 4:14 AM   #629
burghy
Don Flamenco
 
Human Paladin
 
Ravencrest (EU)
Latest clcinfo alpha has some experimental code for retribution. Atm it has a fixed rotation implemented according to the thread here on EJ (make sure to set the locales for Undead and Demon in the options, not sure exactly how the game returns those values for other locales than enGB, so it goes exo > how versus those targets).

The behavior codes are:
return IconRetEx1()
IconRetEx2()

The only thing you can do in command line (so it can be macroed) is turning inquisition on and off:
/clcinfo retex inqon
/clcinfo retex inqoff

I wanted to tweak it more and try to let people somewhat modify the "rotation" but with the recent notice on mechanics changing again I figured is not really worth it.
Let me know if there are glaring issues versus the suggested rotation in the Ret thread though, I'll try and fix those.
Due to our pala crew vanishing into thin air I'm kinda forced to Holy and can't really test it myself.

Last edited by burghy : 12/28/10 at 4:20 AM.

Offline
Reply With Quote
Old 01/04/11, 5:54 AM   #630
Sabethaya
Glass Joe
 
Human Warrior
 
Executus
I have taken a first stab at a Protection Warrior module. Create the file "Interface\Addons\clcinfo\data\warrior\protection.lua" with this content:

-- don't load if class is wrong
local _, class = UnitClass("player")
if class ~= "WARRIOR" then return end

local GetTime = GetTime
local version = 1


-- mod name in lower case
local modName = "_prot"

local defaults = {
    version = version,
    priorityList = {},
}

-- create a module in the main addon
local mod = clcInfo:RegisterClassModule(modName)
local db
-- functions visible to exec should be attached to this
local emod = clcInfo.env

-- any error sets this to false
local enabled = true

-- spells used
local spellGCD	= 94009	-- Rend for gcd

local spellHeS	= 78	-- Heroic Strike
local spellShS	= 23922	-- Shield Slam
local spellRev	= 6572	-- Revenge
local spellCoS	= 469	-- Commanding Shout
local spellRen	= 772	-- Rend
local spellShW	= 46968	-- Shockwave
local spellCoB	= 12809	-- Concussion Blow
local spellThC	= 6343	-- Thunder Clap
local spellDeS	= 1160	-- Demoralizing Shout
local spellDev	= 20243	-- Devastate
-- buff
local buffThunderStruck	= GetSpellInfo(80980)	-- Thunderstruck
-- debuff
local debuffSunder	= GetSpellInfo(spellDev)	-- Sunder Armor
local debuffDemo	= GetSpellInfo(spellDeS)	-- Demoralizing Shout
local debuffRend	= GetSpellInfo(spellRen)	-- Rend
local debuffThunderClap	= GetSpellInfo(spellThC)	-- Thunder Clap


-- list of actions available for the priority list
-- it's a list of functions that return cooldowns based on current status values
local actions = {}
-- when an action is selected, return is spell with the id from this table
local listActionId = {
    HeS	= spellHeS,
    ShS	= spellShS,
    Rev	= spellRev,
    CoS	= spellCoS,
    Ren	= spellRen,
    ShW	= spellShW,
    CoB	= spellCoB,
    ThC	= spellThC,
    DeS	= spellDeS,
    Dev	= spellDev,
}
-- names to display in option screen
local listActionName = {
    HeS	= GetSpellInfo(spellHeS),
    ShS	= GetSpellInfo(spellShS),
    Rev	= GetSpellInfo(spellRev),
    CoS	= GetSpellInfo(spellCoS),
    Ren	= GetSpellInfo(spellRen),
    ShW	= GetSpellInfo(spellShW),
    CoB	= GetSpellInfo(spellCoB),
    ThC	= GetSpellInfo(spellThC),
    DeS	= GetSpellInfo(spellDeS),
    Dev	= GetSpellInfo(spellDev),
}

-- status values
--------------------------------------------------------------------------------
local _gcd		= 0	-- current gcd value
local _ctime		= 0	-- current GetTime value
local _rage		= 0	-- amount of rage :p
local _ragehs		= 0	-- rage needed before we hs
local _thunderstruck	= 0	-- thunderstruck duration
local _thunderstruckc	= 0	-- thunderstruck count
local _sunder		= 0	-- sunder armor duration
local _sunderc		= 0	-- sunder armor count
local _demo		= 0	-- demoralizing shout duration
local _rend		= 0	-- rend duration
local _thunderclap	= 0	-- thunder clap duration
--------------------------------------------------------------------------------

local pq, dq1, dq2
local debug = ""
local mode = "single"

-- this function, if it exists, will be called at init
function mod.OnInitialize()
    db = clcInfo:RegisterClassModuleDB(modName, defaults)
    db.priorityList = { "HeS", "CoS", "ShS", "Rev", "Ren", "ThC", "DeS", "ShW", "CoB", "Dev" } 
    mod.UpdatePriorityList()
end

function mod.UpdatePriorityList()
    pq = {}
    local check = {} -- used to check for duplicates
    for k, v in ipairs(db.priorityList) do
	if not check[v] then
	    if v ~= "none" and listActionId[v] then
		pq[#pq + 1] = { alias = v, id = listActionId[v] }
		check[v] = true
	    end
	end
    end
end

-- action functions
-- if a function can be selected, then the function must be here
--------------------------------------------------------------------------------
function actions.ShS()
    local start, duration = GetSpellCooldown(spellShS)
    local cd = start + duration - _ctime - _gcd
    return max(0, cd)
end

function actions.Rev()
    if IsUsableSpell(spellRev) then
	local start, duration = GetSpellCooldown(spellRev)
	local cd = start + duration - _ctime - _gcd
	return max(0, cd)
    else
	return 100
    end
end

function actions.CoS()
    local start, duration = GetSpellCooldown(spellCoS)
    local cd = start + duration - _ctime - _gcd
    cd = max(0, cd)

    if cd <= _gcd * 2 and _rage > 80 then cd = 100 end  -- rage check

    return cd
end

function actions.HeS()
    local start, duration = GetSpellCooldown(spellHeS)
    local cd = start + duration - _ctime
    return max(0, cd)
end

function actions.Ren()
    local start, duration = GetSpellCooldown(spellRen)
    local cd = start + duration - _ctime - _gcd
    cd = max(0, cd)

    if _rend <= _gcd then
	cd = max(0, cd)
    else
	cd = 100
    end

    return cd
end

function actions.ShW()
    local start, duration = GetSpellCooldown(spellShW)
    local ShWcd = start + duration - _ctime - _gcd
    ShWcd = max(0, ShWcd)
    local cd = ShWcd

    if _thunderstruckc > 0 and _thunderstruckc < 3 then
	start, duration = GetSpellCooldown(spellThC)
	local ThCcd = start + duration - _ctime - _gcd
	ThCcd = max(0, ThCcd)

	local thundertimeleft = _thunderstruck - _gcd

	if thundertimeleft < ThCcd then
	    cd = ShWcd
	else
	    if _thunderstruckc < 2 then
		cd = ThCcd + 30
	    else
		cd = max(ShWcd, ThCcd + _gcd)
	    end
	end
    end

    return cd
end

function actions.CoB()
    local start, duration = GetSpellCooldown(spellCoB)
    local cd = start + duration - _ctime - _gcd
    return max(0, cd)
end

function actions.ThC()
    local start, duration = GetSpellCooldown(spellThC)
    local ThCcd = start + duration - _ctime - _gcd
    ThCcd = max(0, ThCcd)
    local cd = ThCcd

    if _thunderstruckc > 2 then
	local thundertimeleft = _thunderstruck - _gcd
	if thundertimeleft > cd then cd = cd + _gcd end
    end

    --if have the Blood and Thunder talent
	local rendtimeleft = _rend - _gcd
	if rendtimeleft > cd then cd = cd + _gcd end
    --end

    local thunderclaptimeleft = _thunderclap - _gcd
    if thunderclaptimeleft < cd then cd = 0 end
    
    return max(cd, ThCcd)
end

function actions.DeS()
    local start, duration = GetSpellCooldown(spellDeS)
    local cd = start + duration - _ctime - _gcd

    local timeleft = _demo - 2 * _gcd

    return max(0, cd, timeleft)
end

function actions.Dev()
    local start, duration = GetSpellCooldown(spellDev)
    local cd = start + duration - _ctime - _gcd
    return max(0, cd)
end
--------------------------------------------------------------------------------

local function sortByCDs(t)
    local sorted = {}
    local check = {} -- used to check for duplicates

    for i = 1, #t do
        local j = 0
	for k, v in ipairs(t) do
	    if not check[v.alias] then
		if j == 0 or v.cd < t[j].cd then
		    j = k
		end
	    end
	end
	sorted[#sorted + 1] = t[j] -- { alias = t[j].alias, cd = t[j].cd }
	check[t[j].alias] = true
    end

    return sorted
end

mod.Rotation = {}
function mod.Rotation.single(ragehs)
    _ctime = GetTime()

    -- gcd
    local start, duration = GetSpellCooldown(spellGCD)
    _gcd = start + duration - _ctime
    if _gcd < 0 then _gcd = 0 end

    -- thunderstruck
    local _, _, _, count, _, _, expires = UnitBuff("player", buffThunderStruck)
    if count then _thunderstruckc = count else _thunderstruckc = 0 end
    if expires then _thunderstruck = expires - _ctime - _gcd else _thunderstruck = 0 end

    -- sunder armor
    local _, _, _, count, _, _, expires = UnitDebuff("target", debuffSunder)
    if count then _sunderc = count else _sunderc = 0 end
    if expires then _sunder = expires - _ctime - _gcd else _sunder = 0 end

    -- demoralizing shout
    local _, _, _, _, _, _, expires = UnitDebuff("target", debuffDemo)
    if expires then _demo = expires - _ctime - _gcd else _demo = 0 end

    -- rend
    local _, _, _, _, _, _, expires = UnitDebuff("target", debuffRend)
    if expires then _rend = expires - _ctime - _gcd else _rend = 0 end

    -- thunderclap
    local _, _, _, _, _, _, expires = UnitDebuff("target", debuffThunderClap)
    if expires then _thunderclap = expires - _ctime - _gcd else _thunderclap = 0 end

    for i, v in ipairs(pq) do
	v.cd = actions[v.alias]()

	if v.alias == "HeS" then
	    if  UnitPower("player") < (ragehs or 65) then
		v.cd = 100
	    end
	end
    end

    debug = ""
    local sortedpq = sortByCDs(pq)
    for i, v in ipairs(sortedpq) do
	if i > 1 then
	    debug = debug .. "\n"
	end
	debug = format("%s%s: %4d", debug, v.alias, v.cd)
	--if v.alias == pq[sel].alias then
	if i == 1 then
	    debug = debug .. "  1*"
	--elseif v.alias == pq[sel2].alias then
	elseif i == 2 then
	    debug = debug .. "  2-"
	end
    end

    dq1 = sortedpq[1].id
    dq2 = sortedpq[2].id

    return true
end

--------------------------------------------------------------------------------
-- function to be executed when OnUpdate is called manually
local function S2Exec()
    if not enabled then return end
    if dq2 ~= 0 then
	return emod.IconSpell(dq2, true)
    end
    return false
end

-- cleanup function for when exec changes
local function ExecCleanup()
    s2 = nil
end

function emod.IconProt1(...)
    local gotskill = false
    if enabled then
	gotskill = mod.Rotation[mode](...)
    end

    if s2 then UpdateS2(s2, 100) end    -- update with a big "elapsed" so it's updated on call
    if gotskill then
	return emod.IconSpell(dq1, true)
    end
end

function emod.IconProt2()
    -- remove this button's OnUpdate
    s2 = emod.___e
    UpdateS2 = s2:GetScript("OnUpdate")
    s2:SetScript("OnUpdate", nil)
    s2.exec = S2Exec
    s2.ExecCleanup = ExecCleanup
end

function emod.DebugTextProt(...)
    local gotskill = false
    if enabled then
	gotskill = mod.Rotation[mode](...)
    end

    if gotskill then
	return debug
    end
end

function emod.ProtMode() return mode end
To use the two icons, set the first to "return IconProt1(65)", where 65 is the amount of rage before it suggests Heroic Strike (and 65 is the default if you omit the number), and set the second to "IconProt2()".

The suggested icons use Commanding Shout, just substitute Battle Shout if desired (for instance, if the Stamina buff is already covered for your group, but the Strength and Agility buff isn't).

I don't currently prioritize Devastate higher the first GCD after a Shield Slam when Revenge is not available.

To include the 2 icons in the Warrior options templates, add these lines to the end of the file "Interface\Addons\clcinfo_Options\code_templates\warrior.lua" file:

-- protection
--------------------------------------------------------------------------------
mod:Add("icons", defs.CLASS_3, "Protection Rotation Skill 1", "return IconProt1(50)")
mod:Add("icons", defs.CLASS_3, "Protection Rotation Skill 2", "IconProt2()")

Offline
Reply With Quote
Reply

Go Back   Elitist Jerks » Class Mechanics » Paladins

Thread Tools

Similar Threads
Thread Thread Starter Forum Replies Last Post
Cat DPS Rotation Kazanir Druids 1356 12/07/09 12:07 PM
Ret FCFS Rotation Helper Thaeryn User Interface and AddOns 0 04/10/09 12:18 AM
FCFS (Retribution) modeling script Left Paladins 25 03/21/09 10:06 AM
Designing a hunter shot-rotation helper addon Zeza Public Discussion 40 11/27/06 7:52 PM