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