vanilla-wow-addons – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 local _, class = UnitClass("player")
2 local _, spellname, spellrank, targetname, damage, crit, armor, i, spelldata, idx
3 local damagereduction, ul, oldarmor, oldarmorvalue, sunder, absorbed
4  
5 function TheoryCraft_ParseCombat(arg1)
6 if TheoryCraft_GetStat("DontMitigate") ~= 0 then return end
7 if (TheoryCraft_Data["outfit"]) and (TheoryCraft_Data["outfit"] ~= -1) and (TheoryCraft_Data["outfit"] ~= 1) then
8 return
9 end
10 _, _, absorbed = strfind(arg1, TheoryCraft_Locale.Absorbed)
11 _, _, spellname, targetname, damage = strfind(arg1, TheoryCraft_Locale.HitMessage)
12 crit = nil
13 ul = UnitLevel("player")
14 if spellname == nil then
15 _, _, spellname, targetname, damage = strfind(arg1, TheoryCraft_Locale.CritMessage)
16 crit = true
17 end
18 if (spellname == nil) or (damage == nil) or (tonumber(damage) == nil) then return end
19 damage = tonumber(damage)+tonumber(absorbed or 0)
20 i = 1
21 while (TheoryCraft_Spells[class][i]) and (TheoryCraft_Spells[class][i].name ~= spellname) do
22 i = i + 1
23 end
24 if (TheoryCraft_Spells[class][i] == nil) or (TheoryCraft_Spells[class][i].name ~= spellname) then
25 return
26 end
27 if (TheoryCraft_Spells[class][i].iscombo) then return end
28 armor = TheoryCraft_Spells[class][i].armor
29 i = 0
30 while (i < 25) do
31 if (TheoryCraft_TooltipData[spellname.."("..i..")"]) then
32 spellrank = i
33 end
34 i = i + 1
35 end
36 if spellrank == nil then return end
37 spelldata = TheoryCraft_TooltipData[TheoryCraft_TooltipData[spellname.."("..(spellrank)..")"]]
38 if armor then
39 if (spelldata == nil) then return end
40 if (spelldata.mindamage == nil) then return end
41 if (spelldata.maxdamage == nil) then return end
42 if (crit) and (spelldata.critbonus) then damage = damage/(spelldata.critbonus+1) end
43  
44 local isplayer = "not found"
45 if UnitName("target") == targetname then
46 isplayer = UnitIsPlayer("target")
47 end
48 if TheoryCraft_MitigationMobs[targetname] then
49 isplayer = false
50 end
51 if TheoryCraft_MitigationPlayers[targetname] then
52 isplayer = true
53 end
54 if isplayer == "not found" then
55 return
56 end
57  
58 sunder = TheoryCraft_GetStat("Sunder")
59 if isplayer then
60 if (TheoryCraft_MitigationPlayers[targetname] == nil) or (TheoryCraft_MitigationPlayers[targetname][1] == nil) then
61 oldarmorvalue = 0
62 for i = 0,60 do
63 if (TheoryCraft_MitigationPlayers[UnitClass("target")..":"..UnitLevel("target")+i]) and (TheoryCraft_MitigationPlayers[UnitClass("target")..":"..UnitLevel("target")+i][1]) then
64 oldarmorvalue = TheoryCraft_MitigationPlayers[UnitClass("target")..":"..UnitLevel("target")+i][1]-TheoryCraft_GetStat("Sunder")
65 break
66 end
67 if (TheoryCraft_MitigationPlayers[UnitClass("target")..":"..UnitLevel("target")-i]) and (TheoryCraft_MitigationPlayers[UnitClass("target")..":"..UnitLevel("target")-i][1]) then
68 oldarmorvalue = TheoryCraft_MitigationPlayers[UnitClass("target")..":"..UnitLevel("target")-i][1]-TheoryCraft_GetStat("Sunder")
69 break
70 end
71 end
72 TheoryCraft_MitigationPlayers[targetname] = {}
73 TheoryCraft_MitigationPlayers[targetname][1] = oldarmorvalue
74 end
75 oldarmorvalue = TheoryCraft_MitigationPlayers[targetname][1]
76 if not TheoryCraft_MitigationPlayers[targetname] then
77 if (damage > spelldata.mindamage-1) or (damage < spelldata.maxdamage+1) then
78 damagereduction = 1-damage/((spelldata.maxdamage+spelldata.mindamage)/2)
79 if TheoryCraft_MitigationPlayers[targetname] == nil then TheoryCraft_MitigationPlayers[targetname] = {} end
80 TheoryCraft_MitigationPlayers[targetname][1] = math.floor((85 * damagereduction * ul + 400 * damagereduction)/(1 - damagereduction))
81 if TheoryCraft_MitigationPlayers[targetname][1] > 0 then
82 TheoryCraft_MitigationPlayers[targetname][1] = TheoryCraft_MitigationPlayers[targetname][1] + sunder
83 end
84 TheoryCraft_Data.armormultinternal = 1
85 if TheoryCraft_Data.armormultinternal and (TheoryCraft_MitigationPlayers[targetname]) and (TheoryCraft_MitigationPlayers[targetname][1]) then
86 TheoryCraft_Data.armormultinternal = 1 - (TheoryCraft_MitigationPlayers[targetname][1] / (85 * UnitLevel("player") + 400 + TheoryCraft_MitigationPlayers[targetname][1]))
87 end
88 TheoryCraft_DeleteTable(TheoryCraft_UpdatedButtons)
89 end
90 else
91 oldarmor = TheoryCraft_MitigationPlayers[targetname][1]-sunder
92 if oldarmor < 0 then
93 oldarmor = 0
94 end
95 oldarmor = 1 - (oldarmor / (85 * UnitLevel("player") + 400 + oldarmor))
96 if damage < spelldata.mindamage*oldarmor-1 then
97 damagereduction = 1-damage/(spelldata.mindamage-1)
98 if TheoryCraft_MitigationPlayers[targetname] == nil then TheoryCraft_MitigationPlayers[targetname] = {} end
99 TheoryCraft_MitigationPlayers[targetname][1] = math.floor((85 * damagereduction * ul + 400 * damagereduction)/(1 - damagereduction))
100 if TheoryCraft_MitigationPlayers[targetname][1] > 0 then
101 TheoryCraft_MitigationPlayers[targetname][1] = TheoryCraft_MitigationPlayers[targetname][1] + sunder
102 end
103 TheoryCraft_Data.armormultinternal = 1
104 if TheoryCraft_Data.armormultinternal and (TheoryCraft_MitigationPlayers[targetname]) and (TheoryCraft_MitigationPlayers[targetname][1]) then
105 TheoryCraft_Data.armormultinternal = 1 - (TheoryCraft_MitigationPlayers[targetname][1] / (85 * UnitLevel("player") + 400 + TheoryCraft_MitigationPlayers[targetname][1]))
106 end
107 TheoryCraft_DeleteTable(TheoryCraft_UpdatedButtons)
108 end
109 if damage > spelldata.maxdamage*oldarmor+1 then
110 damagereduction = 1-damage/(spelldata.maxdamage+1)
111 if TheoryCraft_MitigationPlayers[targetname] == nil then TheoryCraft_MitigationPlayers[targetname] = {} end
112 TheoryCraft_MitigationPlayers[targetname][1] = math.floor((85 * damagereduction * ul + 400 * damagereduction)/(1 - damagereduction))
113 if TheoryCraft_MitigationPlayers[targetname][1] > 0 then
114 TheoryCraft_MitigationPlayers[targetname][1] = TheoryCraft_MitigationPlayers[targetname][1] + sunder
115 end
116 TheoryCraft_Data.armormultinternal = 1
117 if (TheoryCraft_Data.armormultinternal) and (TheoryCraft_MitigationPlayers[targetname]) and (TheoryCraft_MitigationPlayers[targetname][1]) then
118 TheoryCraft_Data.armormultinternal = 1 - (TheoryCraft_MitigationPlayers[targetname][1] / (85 * UnitLevel("player") + 400 + TheoryCraft_MitigationPlayers[targetname][1]))
119 end
120 TheoryCraft_DeleteTable(TheoryCraft_UpdatedButtons)
121 end
122 end
123 if (TheoryCraft_Settings["armorchanges"]) and (oldarmorvalue ~= TheoryCraft_MitigationPlayers[targetname][1]) then
124 if oldarmorvalue > TheoryCraft_MitigationPlayers[targetname][1] then
125 Print(targetname.." Armor "..TheoryCraft_MitigationPlayers[targetname][1].." (-"..oldarmorvalue-TheoryCraft_MitigationPlayers[targetname][1]..")")
126 else
127 Print(targetname.." Armor "..TheoryCraft_MitigationPlayers[targetname][1].." (+"..TheoryCraft_MitigationPlayers[targetname][1]-oldarmorvalue..")")
128 end
129 end
130 if UnitName("target") == targetname then
131 if UnitLevel("target") == -1 then
132 if TheoryCraft_MitigationPlayers[UnitClass("target")..":60"] == nil then
133 TheoryCraft_MitigationPlayers[UnitClass("target")..":60"] = {}
134 end
135 TheoryCraft_MitigationPlayers[UnitClass("target")..":60"][1] = TheoryCraft_MitigationPlayers[targetname][1]
136 else
137 if TheoryCraft_MitigationPlayers[UnitClass("target")..":"..UnitLevel("target")] == nil then
138 TheoryCraft_MitigationPlayers[UnitClass("target")..":"..UnitLevel("target")] = {}
139 end
140 TheoryCraft_MitigationPlayers[UnitClass("target")..":"..UnitLevel("target")][1] = TheoryCraft_MitigationPlayers[targetname][1]
141 end
142 end
143 else
144 if TheoryCraft_MitigationMobs[targetname] then
145 oldarmorvalue = TheoryCraft_MitigationMobs[targetname][1] or 0
146 else
147 oldarmorvalue = 0
148 end
149 if not TheoryCraft_MitigationMobs[targetname] then
150 if (damage > spelldata.mindamage-1) or (damage < spelldata.maxdamage+1) then
151 damagereduction = 1-damage/((spelldata.maxdamage+spelldata.mindamage)/2)
152 if TheoryCraft_MitigationMobs[targetname] == nil then TheoryCraft_MitigationMobs[targetname] = {} end
153 TheoryCraft_MitigationMobs[targetname][1] = math.floor((85 * damagereduction * ul + 400 * damagereduction)/(1 - damagereduction))
154 if TheoryCraft_MitigationMobs[targetname][1] > 0 then
155 TheoryCraft_MitigationMobs[targetname][1] = TheoryCraft_MitigationMobs[targetname][1] + sunder
156 end
157 TheoryCraft_Data.armormultinternal = 1
158 if TheoryCraft_Data.armormultinternal and (TheoryCraft_MitigationMobs[targetname]) and (TheoryCraft_MitigationMobs[targetname][1]) then
159 TheoryCraft_Data.armormultinternal = 1 - (TheoryCraft_MitigationMobs[targetname][1] / (85 * UnitLevel("player") + 400 + TheoryCraft_MitigationMobs[targetname][1]))
160 end
161 TheoryCraft_DeleteTable(TheoryCraft_UpdatedButtons)
162 end
163 else
164 oldarmor = TheoryCraft_MitigationMobs[targetname][1]-sunder
165 if oldarmor < 0 then
166 oldarmor = 0
167 end
168 oldarmor = 1 - (oldarmor / (85 * UnitLevel("player") + 400 + oldarmor))
169 if damage < spelldata.mindamage*oldarmor-1 then
170 damagereduction = 1-damage/(spelldata.mindamage-1)
171 if TheoryCraft_MitigationMobs[targetname] == nil then TheoryCraft_MitigationMobs[targetname] = {} end
172 TheoryCraft_MitigationMobs[targetname][1] = math.floor((85 * damagereduction * ul + 400 * damagereduction)/(1 - damagereduction))
173 if TheoryCraft_MitigationMobs[targetname][1] > 0 then
174 TheoryCraft_MitigationMobs[targetname][1] = TheoryCraft_MitigationMobs[targetname][1] + sunder
175 end
176 TheoryCraft_Data.armormultinternal = 1
177 if TheoryCraft_Data.armormultinternal and (TheoryCraft_MitigationMobs[targetname]) and (TheoryCraft_MitigationMobs[targetname][1]) then
178 TheoryCraft_Data.armormultinternal = 1 - (TheoryCraft_MitigationMobs[targetname][1] / (85 * UnitLevel("player") + 400 + TheoryCraft_MitigationMobs[targetname][1]))
179 end
180 TheoryCraft_DeleteTable(TheoryCraft_UpdatedButtons)
181 end
182 if damage > spelldata.maxdamage*oldarmor+1 then
183 damagereduction = 1-damage/(spelldata.maxdamage+1)
184 if TheoryCraft_MitigationMobs[targetname] == nil then TheoryCraft_MitigationMobs[targetname] = {} end
185 TheoryCraft_MitigationMobs[targetname][1] = math.floor((85 * damagereduction * ul + 400 * damagereduction)/(1 - damagereduction))
186 if TheoryCraft_MitigationMobs[targetname][1] > 0 then
187 TheoryCraft_MitigationMobs[targetname][1] = TheoryCraft_MitigationMobs[targetname][1] + sunder
188 end
189 TheoryCraft_Data.armormultinternal = 1
190 if TheoryCraft_Data.armormultinternal and (TheoryCraft_MitigationMobs[targetname]) and (TheoryCraft_MitigationMobs[targetname][1]) then
191 TheoryCraft_Data.armormultinternal = 1 - (TheoryCraft_MitigationMobs[targetname][1] / (85 * UnitLevel("player") + 400 + TheoryCraft_MitigationMobs[targetname][1]))
192 end
193 TheoryCraft_DeleteTable(TheoryCraft_UpdatedButtons)
194 end
195 end
196 if (TheoryCraft_Settings["armorchanges"]) and (oldarmorvalue ~= TheoryCraft_MitigationMobs[targetname][1]) then
197 if oldarmorvalue > TheoryCraft_MitigationMobs[targetname][1] then
198 Print(targetname.." Armor "..TheoryCraft_MitigationMobs[targetname][1].." (-"..oldarmorvalue-TheoryCraft_MitigationMobs[targetname][1]..")")
199 else
200 Print(targetname.." Armor "..TheoryCraft_MitigationMobs[targetname][1].." (+"..TheoryCraft_MitigationMobs[targetname][1]-oldarmorvalue..")")
201 end
202 end
203 end
204 end
205 end