vanilla-wow-addons – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 --[[
2  
3 Titan Combat Info v1.52c by Aegean of Proudmoore...err...Muradin ;)
4  
5 ]]--
6  
7 TITAN_COMBATINFO_TOGGLE_TABLE = {
8 "ShowBlock","ShowCrit","ShowDodge","ShowParry","ShowStatLabel",
9 }
10  
11 function TitanPanelCombatInfoButton_OnLoad()
12 -- Register the addon with Titan Panel
13 this.registry={
14 id = TITAN_COMBATINFO_ID,
15 menuText = TITAN_COMBATINFO_MENU_TEXT,
16 buttonTextFunction = "TitanPanelCombatInfoButton_GetButtonText",
17 tooltipTitle = TITAN_COMBATINFO_TOOLTIP,
18 tooltipTextFunction = "TitanPanelCombatInfoButton_GetTooltipText",
19 icon = TITAN_COMBATINFO_BUTTON_ICON,
20 iconWidth = 16,
21 savedVariables = {
22 ShowBlock = TITAN_NIL,
23 ShowCrit = TITAN_NIL,
24 ShowDodge = TITAN_NIL,
25 ShowParry = TITAN_NIL,
26 ShowStatLabel = TITAN_NIL,
27 ShowIcon = 1,
28 ShowLabelText = 1,
29 }
30 };
31 -- Register events
32 this:RegisterEvent("UNIT_INVENTORY_CHANGED");
33 this:RegisterEvent("UNIT_AURA");
34 this:RegisterEvent("UNIT_AURASTATE");
35 end
36  
37 function TitanPanelCombatInfoButton_GetButtonText(id)
38 -- monitored stat to display on bar
39 local button, id = TitanUtils_GetButton(id, true);
40 local buttonText = "";
41 local displayText = "";
42  
43 if (TitanGetVar(TITAN_COMBATINFO_ID,"ShowLabelText")) then
44 buttonText = TITAN_COMBATINFO_BUTTON_LABEL;
45 end
46  
47 if (TitanGetVar(TITAN_COMBATINFO_ID,"ShowBlock")) then
48 local blockChance = format(TITAN_COMBATINFO_BLOCK,GetBlockChance());
49 displayText = format(TITAN_COMBATINFO_BUTTON_TEXT,blockChance);
50 if (TitanGetVar(TITAN_COMBATINFO_ID,"ShowStatLabel")) then
51 buttonText = TITAN_COMBATINFO_BLOCK_TEXT;
52 end
53 button.registry.icon = TITAN_COMBATINFO_BLOCK_ICON;
54 elseif (TitanGetVar(TITAN_COMBATINFO_ID,"ShowCrit")) then
55 local critChance = format(TITAN_COMBATINFO_CRIT,GetCritChance());
56 displayText = format(TITAN_COMBATINFO_BUTTON_TEXT,critChance);
57 if (TitanGetVar(TITAN_COMBATINFO_ID,"ShowStatLabel")) then
58 buttonText = TITAN_COMBATINFO_CRIT_TEXT;
59 end
60 button.registry.icon = TITAN_COMBATINFO_CRIT_ICON;
61 elseif (TitanGetVar(TITAN_COMBATINFO_ID,"ShowDodge")) then
62 local dodgeChance = format(TITAN_COMBATINFO_DODGE,GetDodgeChance());
63 displayText = format(TITAN_COMBATINFO_BUTTON_TEXT,dodgeChance);
64 if (TitanGetVar(TITAN_COMBATINFO_ID,"ShowStatLabel")) then
65 buttonText = TITAN_COMBATINFO_DODGE_TEXT;
66 end
67 button.registry.icon = TITAN_COMBATINFO_DODGE_ICON;
68 elseif (TitanGetVar(TITAN_COMBATINFO_ID,"ShowParry")) then
69 local parryChance = format(TITAN_COMBATINFO_PARRY,GetParryChance());
70 displayText = format(TITAN_COMBATINFO_BUTTON_TEXT,parryChance);
71 if (TitanGetVar(TITAN_COMBATINFO_ID,"ShowStatLabel")) then
72 buttonText = TITAN_COMBATINFO_PARRY_TEXT;
73 end
74 button.registry.icon = TITAN_COMBATINFO_PARRY_ICON;
75 else
76 button.registry.icon = TITAN_COMBATINFO_BUTTON_ICON;
77 end
78  
79 return buttonText.." "..TitanUtils_GetHighlightText(format(TITAN_COMBATINFO_BUTTON_TEXT,displayText));
80 end
81  
82 function TitanPanelCombatInfoButton_GetTooltipText()
83 -- local critChance = GetCritChance(); -- N/A at this time from Bliz API
84 local critChance = GetCritChance();
85 local blockChance = GetBlockChance();
86 local dodgeChance = GetDodgeChance();
87 local parryChance = GetParryChance();
88 -- melee
89 local meleeBase, meleePosBuff, meleeNegBuff = UnitAttackPower("player");
90 local meleeMainSpeed, meleeOffSpeed = UnitAttackSpeed("player");
91 local meleeOffHasWeapon = OffhandHasWeapon();
92 local meleeMainLowDmg, meleeMainHiDmg, meleeOffLowDmg, meleeOffHiDmg, meleePosDmg, meleeNegDmg, percent = UnitDamage("player");
93 local meleeMainAvgDmg = 0.0;
94 local meleeOffAvgDmg = 0.0;
95 local meleeOffhandText = "";
96 -- melee dps average
97 meleeMainAvgDmg = ((meleeMainHiDmg + meleeMainLowDmg)*.5) / meleeMainSpeed;
98 meleeMainHiDmg = ceil(meleeMainHiDmg);
99 meleeMainLowDmg = floor(meleeMainLowDmg);
100 -- offhand check
101 if ( meleeOffSpeed == nil or meleeOffSpeed == 0 and not meleeOffHasWeapon) then
102 meleeOffSpeed = 0.0;
103 meleeOffLowDmg = 0;
104 meleeOffHiDmg = 0;
105 else
106 meleeOffAvgDmg = ((meleeOffHiDmg + meleeOffLowDmg)*.5) / meleeOffSpeed;
107 meleeOffHiDmg = ceil(meleeOffHiDmg);
108 meleeOffLowDmg = floor(meleeOffLowDmg);
109 meleeOffhandText = "\n"..
110 TITAN_COMBATINFO_MELEE_OFFHANDSPEED_TEXT.."\t"..TitanUtils_GetHighlightText(format(TITAN_COMBATINFO_MELEE_OFFHANDSPEED,meleeOffSpeed)).."\n"..
111 TITAN_COMBATINFO_MELEE_OFFHANDDMG_TEXT.."\t"..TitanUtils_GetHighlightText(format(TITAN_COMBATINFO_MELEE_OFFHANDDMG,meleeOffLowDmg,meleeOffHiDmg)).."\n"..
112 TITAN_COMBATINFO_MELEE_OFFAVGDMG_TEXT.."\t"..TitanUtils_GetHighlightText(format(TITAN_COMBATINFO_MELEE_OFFAVGDMG,meleeOffAvgDmg)).."\n"
113 end
114 -- ranged
115 local rangedAtkBase, rangedPosBuff, rangedNegBuff = UnitRangedAttackPower("player");
116 local rangedBase, rangedModifier = UnitRangedAttack("player");
117 local rangedSpeed, rangedLowDmg, rangedHiDmg = UnitRangedDamage("player");
118 local baseDamage = (rangedLowDmg + rangedHiDmg) * 0.5;
119 local fullDamage = (baseDamage + meleePosDmg + meleeNegDmg) * percent;
120 local rangedAvgDmg = (max(fullDamage,1) / rangedSpeed);
121 local rangedBonus = (fullDamage - baseDamage);
122 rangedLowDmg = max(floor(rangedLowDmg + rangedBonus),1);
123 rangedHiDmg = max(ceil(rangedHiDmg + rangedBonus),1);
124 -- ranged
125 local rangedText = "";
126 --local rangedAvgDmg = ((rangedHiDmg + rangedLowDmg)/2) / rangedSpeed;
127 if (rangedSpeed > 0) then
128 rangedText = ""..
129 "\n"..TitanUtils_GetHighlightText(TITAN_COMBATINFO_RANGE_TEXT).." "..TitanUtils_GetHighlightText(format("(+%.1f dps)",(rangedAtkBase/TITAN_COMBATINFO_ATKPWR_MAGIC))).."\n"..
130 TITAN_COMBATINFO_RANGEPWR_TEXT.."\t"..TitanUtils_GetHighlightText(format(TITAN_COMBATINFO_RANGEPWR,(rangedAtkBase + rangedPosBuff - rangedNegBuff),rangedAtkBase)).."\n"..
131 TITAN_COMBATINFO_RANGEATTACKSPEED.."\t"..TitanUtils_GetHighlightText(format(TITAN_COMBATINFO_RANGESPEED,rangedSpeed)).."\n"..
132 TITAN_COMBATINFO_RANGEDMG_TEXT.."\t"..TitanUtils_GetHighlightText(format(TITAN_COMBATINFO_RANGEDMG,rangedLowDmg,rangedHiDmg)).."\n"..
133 TITAN_COMBATINFO_RANGEAVGDMG_TEXT.."\t"..TitanUtils_GetHighlightText(format(TITAN_COMBATINFO_RANGEAVGDMG,rangedAvgDmg)).."\n"
134 else
135 rangedText = "";
136 end
137  
138 -- armor
139 local armorBase, armorEffective, armorList, armorPosBuff, armorNegBuff = UnitArmor("player");
140 local armorReduction = armorEffective/((85 * UnitLevel("player")) + 400);
141 armorReduction = 100 * (armorReduction/(armorReduction + 1));
142 local armorText = ""..
143 "\n"..TitanUtils_GetHighlightText("Armor").."\n"..
144 TITAN_COMBATINFO_ARMOR_TEXT.."\t"..TitanUtils_GetHighlightText(armorEffective.." ("..armorBase.." base)").."\n"..
145 "(Dmg vs. lvl "..UnitLevel("player").." attacker reduced "..format("%.1f%%",armorReduction)..")\n"
146  
147 return ""..
148 TITAN_COMBATINFO_BLOCK_TEXT.."\t"..TitanUtils_GetHighlightText(format(TITAN_COMBATINFO_BLOCK,blockChance)).."\n"..
149 TITAN_COMBATINFO_CRIT_TEXT.."\t"..TitanUtils_GetHighlightText(format(TITAN_COMBATINFO_CRIT,critChance)).."\n"..
150 TITAN_COMBATINFO_DODGE_TEXT.."\t"..TitanUtils_GetHighlightText(format(TITAN_COMBATINFO_DODGE,dodgeChance)).."\n"..
151 TITAN_COMBATINFO_PARRY_TEXT.."\t"..TitanUtils_GetHighlightText(format(TITAN_COMBATINFO_PARRY,parryChance)).."\n\n"..
152 TitanUtils_GetHighlightText(TITAN_COMBATINFO_MELEE_TEXT).." "..TitanUtils_GetHighlightText(format("(+%.1f dps)",(max((meleeBase + meleePosBuff + meleeNegBuff),0)/TITAN_COMBATINFO_ATKPWR_MAGIC))).."\n"..
153 TITAN_COMBATINFO_MELEE_POWER_TEXT.."\t"..TitanUtils_GetHighlightText(format(TITAN_COMBATINFO_MELEE_POWER,max(meleeBase + meleePosBuff + meleeNegBuff),meleeBase)).."\n"..
154 TITAN_COMBATINFO_MELEE_MAINSPEED_TEXT.."\t"..TitanUtils_GetHighlightText(format(TITAN_COMBATINFO_MELEE_MAINSPEED,meleeMainSpeed)).."\n"..
155 TITAN_COMBATINFO_MELEE_MAINDMG_TEXT.."\t"..TitanUtils_GetHighlightText(format(TITAN_COMBATINFO_MELEE_MAINDMG,meleeMainLowDmg,meleeMainHiDmg)).."\n"..
156 TITAN_COMBATINFO_MELEE_MAINAVGDMG_TEXT.."\t"..TitanUtils_GetHighlightText(format(TITAN_COMBATINFO_MELEE_MAINAVGDMG,meleeMainAvgDmg)).."\n"..
157 meleeOffhandText..
158 rangedText..
159 armorText.."\n";
160 end
161  
162  
163 function TitanPanelCombatInfoButton_OnUpdate()
164  
165 end
166  
167 function TitanPanelCombatInfoButton_ToggleDisplayBlock()
168 TitanToggleVar(TITAN_COMBATINFO_ID,"ShowBlock");
169 TitanSetVar(TITAN_COMBATINFO_ID,"ShowCrit",TITAN_NIL);
170 TitanSetVar(TITAN_COMBATINFO_ID,"ShowDodge",TITAN_NIL);
171 TitanSetVar(TITAN_COMBATINFO_ID,"ShowParry",TITAN_NIL);
172 TitanPanelButton_UpdateButton(TITAN_COMBATINFO_ID);
173 end
174  
175 function TitanPanelCombatInfoButton_ToggleDisplayCrit()
176 TitanToggleVar(TITAN_COMBATINFO_ID,"ShowCrit");
177 TitanSetVar(TITAN_COMBATINFO_ID,"ShowBlock",TITAN_NIL);
178 TitanSetVar(TITAN_COMBATINFO_ID,"ShowDodge",TITAN_NIL);
179 TitanSetVar(TITAN_COMBATINFO_ID,"ShowParry",TITAN_NIL);
180 TitanPanelButton_UpdateButton(TITAN_COMBATINFO_ID);
181 end
182  
183 function TitanPanelCombatInfoButton_ToggleDisplayDodge()
184 TitanToggleVar(TITAN_COMBATINFO_ID,"ShowDodge");
185 TitanSetVar(TITAN_COMBATINFO_ID,"ShowCrit",TITAN_NIL);
186 TitanSetVar(TITAN_COMBATINFO_ID,"ShowBlock",TITAN_NIL);
187 TitanSetVar(TITAN_COMBATINFO_ID,"ShowParry",TITAN_NIL);
188 TitanPanelButton_UpdateButton(TITAN_COMBATINFO_ID);
189 end
190  
191 function TitanPanelCombatInfoButton_ToggleDisplayParry()
192 TitanToggleVar(TITAN_COMBATINFO_ID,"ShowParry");
193 TitanSetVar(TITAN_COMBATINFO_ID,"ShowCrit",TITAN_NIL);
194 TitanSetVar(TITAN_COMBATINFO_ID,"ShowBlock",TITAN_NIL);
195 TitanSetVar(TITAN_COMBATINFO_ID,"ShowDodge",TITAN_NIL);
196 TitanPanelButton_UpdateButton(TITAN_COMBATINFO_ID);
197 end
198  
199 function TitanPanelCombatInfoButton_ToggleDisplayStatLabel()
200 TitanToggleVar(TITAN_COMBATINFO_ID,"ShowStatLabel");
201 TitanPanelButton_UpdateButton(TITAN_COMBATINFO_ID);
202 end
203  
204 function TitanPanelRightClickMenu_PrepareCombatInfoMenu()
205 TitanPanelRightClickMenu_AddTitle(TitanPlugins[TITAN_COMBATINFO_ID].menuText);
206 TitanPanelRightClickMenu_AddCommand(TITAN_COMBATINFO_OPTIONS_SHOWBLOCK_TEXT,TITAN_COMBATINFO_ID,"TitanPanelCombatInfoButton_ToggleDisplayBlock");
207 TitanPanelRightClickMenu_AddCommand(TITAN_COMBATINFO_OPTIONS_SHOWCRIT_TEXT,TITAN_COMBATINFO_ID,"TitanPanelCombatInfoButton_ToggleDisplayCrit");
208 TitanPanelRightClickMenu_AddCommand(TITAN_COMBATINFO_OPTIONS_SHOWDODGE_TEXT,TITAN_COMBATINFO_ID,"TitanPanelCombatInfoButton_ToggleDisplayDodge");
209 TitanPanelRightClickMenu_AddCommand(TITAN_COMBATINFO_OPTIONS_SHOWPARRY_TEXT,TITAN_COMBATINFO_ID,"TitanPanelCombatInfoButton_ToggleDisplayParry");
210 TitanPanelRightClickMenu_AddSpacer();
211 TitanPanelRightClickMenu_AddToggleVar(TITAN_COMBATINFO_OPTIONS_SHOWSTATLABEL_TEXT,TITAN_COMBATINFO_ID,"ShowStatLabel");
212 TitanPanelRightClickMenu_AddSpacer();
213 TitanPanelRightClickMenu_AddToggleIcon(TITAN_COMBATINFO_ID);
214 TitanPanelRightClickMenu_AddToggleLabelText(TITAN_COMBATINFO_ID);
215 TitanPanelRightClickMenu_AddCommand(TITAN_PANEL_MENU_HIDE, TITAN_COMBATINFO_ID, TITAN_PANEL_MENU_FUNC_HIDE);
216 end
217  
218 function GetCritChance()
219 local critChance = 0;
220 local id = 1;
221 local attackSpell = GetSpellName(id,BOOKTYPE_SPELL);
222 -- find the attack spell button if not in slot 1
223 if ( attackSpell ~= TITAN_COMBATINFO_CRIT_ATTACKTEXT ) then
224 name, texture, offset, numSpells = GetSpellTabInfo(1);
225 for i=1, numSpells do
226 if ( GetSpellName(i,BOOKTYPE_SPELL) == TITAN_COMBATINFO_CRIT_ATTACKTEXT ) then
227 id = i;
228 end
229 end
230 end
231 -- populate tooltip for parsing
232 TitanCombatInfo_Tooltip:SetOwner(UIParent, "ANCHOR_NONE");
233 TitanCombatInfo_Tooltip:SetSpell(id, BOOKTYPE_SPELL);
234 local attackInfo = TitanCombatInfo_TooltipTextLeft2:GetText();
235 -- parse crit line
236 local iCritInfo = string.find(attackInfo, "%s");
237 critChance = string.sub(attackInfo,0,(iCritInfo -2));
238 return critChance;
239 end
240  
241 function TitanPanelCombatInfoButton_OnEvent()
242 --DEFAULT_CHAT_FRAME:AddMessage("event triggered: ".. event);
243  
244 if (event == "UNIT_INVENTORY_CHANGED") or
245 (event == "UNIT_AURA") or
246 (event == "UNIT_AURASTATE") then
247 TitanPanelButton_UpdateButton(TITAN_COMBATINFO_ID);
248 end
249 end