vanilla-wow-addons – Blame information for rev 1
?pathlinks?
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 |