vanilla-wow-addons – Rev 1
?pathlinks?
--[[
Titan Combat Info v1.52c by Aegean of Proudmoore...err...Muradin ;)
]]--
TITAN_COMBATINFO_TOGGLE_TABLE = {
"ShowBlock","ShowCrit","ShowDodge","ShowParry","ShowStatLabel",
}
function TitanPanelCombatInfoButton_OnLoad()
-- Register the addon with Titan Panel
this.registry={
id = TITAN_COMBATINFO_ID,
menuText = TITAN_COMBATINFO_MENU_TEXT,
buttonTextFunction = "TitanPanelCombatInfoButton_GetButtonText",
tooltipTitle = TITAN_COMBATINFO_TOOLTIP,
tooltipTextFunction = "TitanPanelCombatInfoButton_GetTooltipText",
icon = TITAN_COMBATINFO_BUTTON_ICON,
iconWidth = 16,
savedVariables = {
ShowBlock = TITAN_NIL,
ShowCrit = TITAN_NIL,
ShowDodge = TITAN_NIL,
ShowParry = TITAN_NIL,
ShowStatLabel = TITAN_NIL,
ShowIcon = 1,
ShowLabelText = 1,
}
};
-- Register events
this:RegisterEvent("UNIT_INVENTORY_CHANGED");
this:RegisterEvent("UNIT_AURA");
this:RegisterEvent("UNIT_AURASTATE");
end
function TitanPanelCombatInfoButton_GetButtonText(id)
-- monitored stat to display on bar
local button, id = TitanUtils_GetButton(id, true);
local buttonText = "";
local displayText = "";
if (TitanGetVar(TITAN_COMBATINFO_ID,"ShowLabelText")) then
buttonText = TITAN_COMBATINFO_BUTTON_LABEL;
end
if (TitanGetVar(TITAN_COMBATINFO_ID,"ShowBlock")) then
local blockChance = format(TITAN_COMBATINFO_BLOCK,GetBlockChance());
displayText = format(TITAN_COMBATINFO_BUTTON_TEXT,blockChance);
if (TitanGetVar(TITAN_COMBATINFO_ID,"ShowStatLabel")) then
buttonText = TITAN_COMBATINFO_BLOCK_TEXT;
end
button.registry.icon = TITAN_COMBATINFO_BLOCK_ICON;
elseif (TitanGetVar(TITAN_COMBATINFO_ID,"ShowCrit")) then
local critChance = format(TITAN_COMBATINFO_CRIT,GetCritChance());
displayText = format(TITAN_COMBATINFO_BUTTON_TEXT,critChance);
if (TitanGetVar(TITAN_COMBATINFO_ID,"ShowStatLabel")) then
buttonText = TITAN_COMBATINFO_CRIT_TEXT;
end
button.registry.icon = TITAN_COMBATINFO_CRIT_ICON;
elseif (TitanGetVar(TITAN_COMBATINFO_ID,"ShowDodge")) then
local dodgeChance = format(TITAN_COMBATINFO_DODGE,GetDodgeChance());
displayText = format(TITAN_COMBATINFO_BUTTON_TEXT,dodgeChance);
if (TitanGetVar(TITAN_COMBATINFO_ID,"ShowStatLabel")) then
buttonText = TITAN_COMBATINFO_DODGE_TEXT;
end
button.registry.icon = TITAN_COMBATINFO_DODGE_ICON;
elseif (TitanGetVar(TITAN_COMBATINFO_ID,"ShowParry")) then
local parryChance = format(TITAN_COMBATINFO_PARRY,GetParryChance());
displayText = format(TITAN_COMBATINFO_BUTTON_TEXT,parryChance);
if (TitanGetVar(TITAN_COMBATINFO_ID,"ShowStatLabel")) then
buttonText = TITAN_COMBATINFO_PARRY_TEXT;
end
button.registry.icon = TITAN_COMBATINFO_PARRY_ICON;
else
button.registry.icon = TITAN_COMBATINFO_BUTTON_ICON;
end
return buttonText.." "..TitanUtils_GetHighlightText(format(TITAN_COMBATINFO_BUTTON_TEXT,displayText));
end
function TitanPanelCombatInfoButton_GetTooltipText()
-- local critChance = GetCritChance(); -- N/A at this time from Bliz API
local critChance = GetCritChance();
local blockChance = GetBlockChance();
local dodgeChance = GetDodgeChance();
local parryChance = GetParryChance();
-- melee
local meleeBase, meleePosBuff, meleeNegBuff = UnitAttackPower("player");
local meleeMainSpeed, meleeOffSpeed = UnitAttackSpeed("player");
local meleeOffHasWeapon = OffhandHasWeapon();
local meleeMainLowDmg, meleeMainHiDmg, meleeOffLowDmg, meleeOffHiDmg, meleePosDmg, meleeNegDmg, percent = UnitDamage("player");
local meleeMainAvgDmg = 0.0;
local meleeOffAvgDmg = 0.0;
local meleeOffhandText = "";
-- melee dps average
meleeMainAvgDmg = ((meleeMainHiDmg + meleeMainLowDmg)*.5) / meleeMainSpeed;
meleeMainHiDmg = ceil(meleeMainHiDmg);
meleeMainLowDmg = floor(meleeMainLowDmg);
-- offhand check
if ( meleeOffSpeed == nil or meleeOffSpeed == 0 and not meleeOffHasWeapon) then
meleeOffSpeed = 0.0;
meleeOffLowDmg = 0;
meleeOffHiDmg = 0;
else
meleeOffAvgDmg = ((meleeOffHiDmg + meleeOffLowDmg)*.5) / meleeOffSpeed;
meleeOffHiDmg = ceil(meleeOffHiDmg);
meleeOffLowDmg = floor(meleeOffLowDmg);
meleeOffhandText = "\n"..
TITAN_COMBATINFO_MELEE_OFFHANDSPEED_TEXT.."\t"..TitanUtils_GetHighlightText(format(TITAN_COMBATINFO_MELEE_OFFHANDSPEED,meleeOffSpeed)).."\n"..
TITAN_COMBATINFO_MELEE_OFFHANDDMG_TEXT.."\t"..TitanUtils_GetHighlightText(format(TITAN_COMBATINFO_MELEE_OFFHANDDMG,meleeOffLowDmg,meleeOffHiDmg)).."\n"..
TITAN_COMBATINFO_MELEE_OFFAVGDMG_TEXT.."\t"..TitanUtils_GetHighlightText(format(TITAN_COMBATINFO_MELEE_OFFAVGDMG,meleeOffAvgDmg)).."\n"
end
-- ranged
local rangedAtkBase, rangedPosBuff, rangedNegBuff = UnitRangedAttackPower("player");
local rangedBase, rangedModifier = UnitRangedAttack("player");
local rangedSpeed, rangedLowDmg, rangedHiDmg = UnitRangedDamage("player");
local baseDamage = (rangedLowDmg + rangedHiDmg) * 0.5;
local fullDamage = (baseDamage + meleePosDmg + meleeNegDmg) * percent;
local rangedAvgDmg = (max(fullDamage,1) / rangedSpeed);
local rangedBonus = (fullDamage - baseDamage);
rangedLowDmg = max(floor(rangedLowDmg + rangedBonus),1);
rangedHiDmg = max(ceil(rangedHiDmg + rangedBonus),1);
-- ranged
local rangedText = "";
--local rangedAvgDmg = ((rangedHiDmg + rangedLowDmg)/2) / rangedSpeed;
if (rangedSpeed > 0) then
rangedText = ""..
"\n"..TitanUtils_GetHighlightText(TITAN_COMBATINFO_RANGE_TEXT).." "..TitanUtils_GetHighlightText(format("(+%.1f dps)",(rangedAtkBase/TITAN_COMBATINFO_ATKPWR_MAGIC))).."\n"..
TITAN_COMBATINFO_RANGEPWR_TEXT.."\t"..TitanUtils_GetHighlightText(format(TITAN_COMBATINFO_RANGEPWR,(rangedAtkBase + rangedPosBuff - rangedNegBuff),rangedAtkBase)).."\n"..
TITAN_COMBATINFO_RANGEATTACKSPEED.."\t"..TitanUtils_GetHighlightText(format(TITAN_COMBATINFO_RANGESPEED,rangedSpeed)).."\n"..
TITAN_COMBATINFO_RANGEDMG_TEXT.."\t"..TitanUtils_GetHighlightText(format(TITAN_COMBATINFO_RANGEDMG,rangedLowDmg,rangedHiDmg)).."\n"..
TITAN_COMBATINFO_RANGEAVGDMG_TEXT.."\t"..TitanUtils_GetHighlightText(format(TITAN_COMBATINFO_RANGEAVGDMG,rangedAvgDmg)).."\n"
else
rangedText = "";
end
-- armor
local armorBase, armorEffective, armorList, armorPosBuff, armorNegBuff = UnitArmor("player");
local armorReduction = armorEffective/((85 * UnitLevel("player")) + 400);
armorReduction = 100 * (armorReduction/(armorReduction + 1));
local armorText = ""..
"\n"..TitanUtils_GetHighlightText("Armor").."\n"..
TITAN_COMBATINFO_ARMOR_TEXT.."\t"..TitanUtils_GetHighlightText(armorEffective.." ("..armorBase.." base)").."\n"..
"(Dmg vs. lvl "..UnitLevel("player").." attacker reduced "..format("%.1f%%",armorReduction)..")\n"
return ""..
TITAN_COMBATINFO_BLOCK_TEXT.."\t"..TitanUtils_GetHighlightText(format(TITAN_COMBATINFO_BLOCK,blockChance)).."\n"..
TITAN_COMBATINFO_CRIT_TEXT.."\t"..TitanUtils_GetHighlightText(format(TITAN_COMBATINFO_CRIT,critChance)).."\n"..
TITAN_COMBATINFO_DODGE_TEXT.."\t"..TitanUtils_GetHighlightText(format(TITAN_COMBATINFO_DODGE,dodgeChance)).."\n"..
TITAN_COMBATINFO_PARRY_TEXT.."\t"..TitanUtils_GetHighlightText(format(TITAN_COMBATINFO_PARRY,parryChance)).."\n\n"..
TitanUtils_GetHighlightText(TITAN_COMBATINFO_MELEE_TEXT).." "..TitanUtils_GetHighlightText(format("(+%.1f dps)",(max((meleeBase + meleePosBuff + meleeNegBuff),0)/TITAN_COMBATINFO_ATKPWR_MAGIC))).."\n"..
TITAN_COMBATINFO_MELEE_POWER_TEXT.."\t"..TitanUtils_GetHighlightText(format(TITAN_COMBATINFO_MELEE_POWER,max(meleeBase + meleePosBuff + meleeNegBuff),meleeBase)).."\n"..
TITAN_COMBATINFO_MELEE_MAINSPEED_TEXT.."\t"..TitanUtils_GetHighlightText(format(TITAN_COMBATINFO_MELEE_MAINSPEED,meleeMainSpeed)).."\n"..
TITAN_COMBATINFO_MELEE_MAINDMG_TEXT.."\t"..TitanUtils_GetHighlightText(format(TITAN_COMBATINFO_MELEE_MAINDMG,meleeMainLowDmg,meleeMainHiDmg)).."\n"..
TITAN_COMBATINFO_MELEE_MAINAVGDMG_TEXT.."\t"..TitanUtils_GetHighlightText(format(TITAN_COMBATINFO_MELEE_MAINAVGDMG,meleeMainAvgDmg)).."\n"..
meleeOffhandText..
rangedText..
armorText.."\n";
end
function TitanPanelCombatInfoButton_OnUpdate()
end
function TitanPanelCombatInfoButton_ToggleDisplayBlock()
TitanToggleVar(TITAN_COMBATINFO_ID,"ShowBlock");
TitanSetVar(TITAN_COMBATINFO_ID,"ShowCrit",TITAN_NIL);
TitanSetVar(TITAN_COMBATINFO_ID,"ShowDodge",TITAN_NIL);
TitanSetVar(TITAN_COMBATINFO_ID,"ShowParry",TITAN_NIL);
TitanPanelButton_UpdateButton(TITAN_COMBATINFO_ID);
end
function TitanPanelCombatInfoButton_ToggleDisplayCrit()
TitanToggleVar(TITAN_COMBATINFO_ID,"ShowCrit");
TitanSetVar(TITAN_COMBATINFO_ID,"ShowBlock",TITAN_NIL);
TitanSetVar(TITAN_COMBATINFO_ID,"ShowDodge",TITAN_NIL);
TitanSetVar(TITAN_COMBATINFO_ID,"ShowParry",TITAN_NIL);
TitanPanelButton_UpdateButton(TITAN_COMBATINFO_ID);
end
function TitanPanelCombatInfoButton_ToggleDisplayDodge()
TitanToggleVar(TITAN_COMBATINFO_ID,"ShowDodge");
TitanSetVar(TITAN_COMBATINFO_ID,"ShowCrit",TITAN_NIL);
TitanSetVar(TITAN_COMBATINFO_ID,"ShowBlock",TITAN_NIL);
TitanSetVar(TITAN_COMBATINFO_ID,"ShowParry",TITAN_NIL);
TitanPanelButton_UpdateButton(TITAN_COMBATINFO_ID);
end
function TitanPanelCombatInfoButton_ToggleDisplayParry()
TitanToggleVar(TITAN_COMBATINFO_ID,"ShowParry");
TitanSetVar(TITAN_COMBATINFO_ID,"ShowCrit",TITAN_NIL);
TitanSetVar(TITAN_COMBATINFO_ID,"ShowBlock",TITAN_NIL);
TitanSetVar(TITAN_COMBATINFO_ID,"ShowDodge",TITAN_NIL);
TitanPanelButton_UpdateButton(TITAN_COMBATINFO_ID);
end
function TitanPanelCombatInfoButton_ToggleDisplayStatLabel()
TitanToggleVar(TITAN_COMBATINFO_ID,"ShowStatLabel");
TitanPanelButton_UpdateButton(TITAN_COMBATINFO_ID);
end
function TitanPanelRightClickMenu_PrepareCombatInfoMenu()
TitanPanelRightClickMenu_AddTitle(TitanPlugins[TITAN_COMBATINFO_ID].menuText);
TitanPanelRightClickMenu_AddCommand(TITAN_COMBATINFO_OPTIONS_SHOWBLOCK_TEXT,TITAN_COMBATINFO_ID,"TitanPanelCombatInfoButton_ToggleDisplayBlock");
TitanPanelRightClickMenu_AddCommand(TITAN_COMBATINFO_OPTIONS_SHOWCRIT_TEXT,TITAN_COMBATINFO_ID,"TitanPanelCombatInfoButton_ToggleDisplayCrit");
TitanPanelRightClickMenu_AddCommand(TITAN_COMBATINFO_OPTIONS_SHOWDODGE_TEXT,TITAN_COMBATINFO_ID,"TitanPanelCombatInfoButton_ToggleDisplayDodge");
TitanPanelRightClickMenu_AddCommand(TITAN_COMBATINFO_OPTIONS_SHOWPARRY_TEXT,TITAN_COMBATINFO_ID,"TitanPanelCombatInfoButton_ToggleDisplayParry");
TitanPanelRightClickMenu_AddSpacer();
TitanPanelRightClickMenu_AddToggleVar(TITAN_COMBATINFO_OPTIONS_SHOWSTATLABEL_TEXT,TITAN_COMBATINFO_ID,"ShowStatLabel");
TitanPanelRightClickMenu_AddSpacer();
TitanPanelRightClickMenu_AddToggleIcon(TITAN_COMBATINFO_ID);
TitanPanelRightClickMenu_AddToggleLabelText(TITAN_COMBATINFO_ID);
TitanPanelRightClickMenu_AddCommand(TITAN_PANEL_MENU_HIDE, TITAN_COMBATINFO_ID, TITAN_PANEL_MENU_FUNC_HIDE);
end
function GetCritChance()
local critChance = 0;
local id = 1;
local attackSpell = GetSpellName(id,BOOKTYPE_SPELL);
-- find the attack spell button if not in slot 1
if ( attackSpell ~= TITAN_COMBATINFO_CRIT_ATTACKTEXT ) then
name, texture, offset, numSpells = GetSpellTabInfo(1);
for i=1, numSpells do
if ( GetSpellName(i,BOOKTYPE_SPELL) == TITAN_COMBATINFO_CRIT_ATTACKTEXT ) then
id = i;
end
end
end
-- populate tooltip for parsing
TitanCombatInfo_Tooltip:SetOwner(UIParent, "ANCHOR_NONE");
TitanCombatInfo_Tooltip:SetSpell(id, BOOKTYPE_SPELL);
local attackInfo = TitanCombatInfo_TooltipTextLeft2:GetText();
-- parse crit line
local iCritInfo = string.find(attackInfo, "%s");
critChance = string.sub(attackInfo,0,(iCritInfo -2));
return critChance;
end
function TitanPanelCombatInfoButton_OnEvent()
--DEFAULT_CHAT_FRAME:AddMessage("event triggered: ".. event);
if (event == "UNIT_INVENTORY_CHANGED") or
(event == "UNIT_AURA") or
(event == "UNIT_AURASTATE") then
TitanPanelButton_UpdateButton(TITAN_COMBATINFO_ID);
end
end
Generated by GNU Enscript 1.6.5.90.