Mercurial > wow > askmrrobot
comparison ui/CombatLogTab.lua @ 11:ece9167c0d1c v1.2.14.0
Localization support, combat log features (wipe command, aura/pet tracking, and realm detection).
| author | yellowfive |
|---|---|
| date | Thu, 10 Jul 2014 12:24:59 -0700 |
| parents | ec731d2fe6ba |
| children | 218628cb4a29 |
comparison
equal
deleted
inserted
replaced
| 10:ef8b45e96b08 | 11:ece9167c0d1c |
|---|---|
| 1 local _, AskMrRobot = ... | 1 local _, AskMrRobot = ... |
| 2 local L = AskMrRobot.L; | |
| 2 | 3 |
| 3 -- initialize the ExportTab class | 4 -- initialize the ExportTab class |
| 4 AskMrRobot.CombatLogTab = AskMrRobot.inheritsFrom(AskMrRobot.Frame) | 5 AskMrRobot.CombatLogTab = AskMrRobot.inheritsFrom(AskMrRobot.Frame) |
| 6 | |
| 7 -- these are valid keys in AmrLogData, all others will be deleted | |
| 8 local _logDataKeys = { | |
| 9 ["_logging"] = true, | |
| 10 ["_autoLog"] = true, | |
| 11 ["_lastZone"] = true, | |
| 12 ["_lastDiff"] = true, | |
| 13 ["_current2"] = true, | |
| 14 ["_history2"] = true, | |
| 15 ["_wipes"] = true, | |
| 16 ["_lastWipe"] = true, | |
| 17 ["_currentExtra"] = true, | |
| 18 ["_historyExtra"] = true | |
| 19 }; | |
| 20 | |
| 21 local _undoButton = false | |
| 5 | 22 |
| 6 -- helper to create text for this tab | 23 -- helper to create text for this tab |
| 7 local function CreateText(tab, font, relativeTo, xOffset, yOffset, text) | 24 local function CreateText(tab, font, relativeTo, xOffset, yOffset, text) |
| 8 local t = tab:CreateFontString(nil, "ARTWORK", font) | 25 local t = tab:CreateFontString(nil, "ARTWORK", font) |
| 9 t:SetPoint("TOPLEFT", relativeTo, "BOTTOMLEFT", xOffset, yOffset) | 26 t:SetPoint("TOPLEFT", relativeTo, "BOTTOMLEFT", xOffset, yOffset) |
| 10 t:SetPoint("RIGHT", tab, "RIGHT", -25, 0) | 27 t:SetPoint("RIGHT", tab, "RIGHT", -5, 0) |
| 11 t:SetWidth(t:GetWidth()) | 28 t:SetWidth(t:GetWidth()) |
| 12 t:SetJustifyH("LEFT") | 29 t:SetJustifyH("LEFT") |
| 13 t:SetText(text) | 30 t:SetText(text) |
| 14 | 31 |
| 15 return t | 32 return t |
| 28 return check | 45 return check |
| 29 end | 46 end |
| 30 | 47 |
| 31 function AskMrRobot.CombatLogTab:new(parent) | 48 function AskMrRobot.CombatLogTab:new(parent) |
| 32 | 49 |
| 33 local tab = AskMrRobot.Frame:new(nil, parent) | 50 local tab = AskMrRobot.Frame:new(nil, parent) |
| 34 setmetatable(tab, { __index = AskMrRobot.CombatLogTab }) | 51 setmetatable(tab, { __index = AskMrRobot.CombatLogTab }) |
| 35 tab:SetPoint("TOPLEFT") | 52 tab:SetPoint("TOPLEFT") |
| 36 tab:SetPoint("BOTTOMRIGHT") | 53 tab:SetPoint("BOTTOMRIGHT") |
| 37 tab:Hide() | 54 tab:Hide() |
| 38 | 55 |
| 56 -- tab header | |
| 39 local text = tab:CreateFontString(nil, "ARTWORK", "GameFontNormalLarge") | 57 local text = tab:CreateFontString(nil, "ARTWORK", "GameFontNormalLarge") |
| 40 text:SetPoint("TOPLEFT", 0, -5) | 58 text:SetPoint("TOPLEFT", 0, -5) |
| 41 text:SetText("Combat Logging") | 59 text:SetText("Combat Logging") |
| 42 | 60 |
| 43 local manulText = CreateText(tab, "GameFontWhite", text, 0, -15, "Manual:") | 61 --scrollframe |
| 44 manulText:SetJustifyV("MIDDLE") | 62 tab.scrollframe = AskMrRobot.ScrollFrame:new(nil, tab) |
| 45 manulText:SetHeight(30) | 63 tab.scrollframe:SetPoint("TOPLEFT", tab, "TOPLEFT", 0, -30) |
| 46 | 64 tab.scrollframe:SetPoint("BOTTOMRIGHT", tab, "BOTTOMRIGHT", -30, 10) |
| 47 local btn = CreateFrame("Button", "AmrCombatLogStart", tab, "UIPanelButtonTemplate") | 65 |
| 48 btn:SetPoint("TOPLEFT", text, "BOTTOMLEFT", 75, -15) | 66 local content = tab.scrollframe.content |
| 67 content:SetHeight(730) | |
| 68 | |
| 69 local btn = CreateFrame("Button", "AmrCombatLogStart", content, "UIPanelButtonTemplate") | |
| 70 btn:SetPoint("TOPLEFT", content, "TOPLEFT", 0, 0) | |
| 49 btn:SetText("Start Logging") | 71 btn:SetText("Start Logging") |
| 50 btn:SetWidth(120) | 72 btn:SetWidth(120) |
| 51 btn:SetHeight(30) | 73 btn:SetHeight(30) |
| 52 tab.btnStart = btn | 74 tab.btnStart = btn |
| 53 | 75 |
| 54 btn:SetScript("OnClick", function() | 76 btn:SetScript("OnClick", function() |
| 55 tab:StartLogging() | 77 tab:ToggleLogging() |
| 56 end) | 78 end) |
| 57 | 79 |
| 58 btn = CreateFrame("Button", "AmrCombatLogEnd", tab, "UIPanelButtonTemplate") | 80 |
| 59 btn:SetPoint("TOPLEFT", text, "BOTTOMLEFT", 225, -15) | 81 text = content:CreateFontString(nil, "ARTWORK", "GameFontWhite") |
| 60 btn:SetText("Stop Logging") | 82 text:SetPoint("LEFT", btn, "RIGHT", 10, 0) |
| 61 btn:SetWidth(120) | 83 tab.loggingStatus = text; |
| 62 btn:SetHeight(30) | 84 |
| 63 tab.btnEnd = btn | 85 local autoChk = newCheckbox(content, |
| 64 | 86 L.AMR_COMBATLOGTAB_CHECKBOX_AUTOLOG_SOO_LABEL, |
| 65 btn:SetScript("OnClick", function() | 87 L.AMR_COMBATLOGTAB_CHECKBOX_AUTOLOG_SOO_TOOLTIP_TITLE, |
| 66 tab:StopLogging() | 88 L.AMR_COMBATLOGTAB_CHECKBOX_AUTOLOG_SOO_DESCRIPTION, |
| 67 end) | |
| 68 | |
| 69 local autoText = CreateText(tab, "GameFontWhite", text, 0, -50, "Automatic:") | |
| 70 autoText:SetJustifyV("MIDDLE") | |
| 71 autoText:SetHeight(28) | |
| 72 | |
| 73 local autoChk = newCheckbox(tab, | |
| 74 "Always log Siege of Orgrimmar", | |
| 75 "Auto-Log Siege of Orgrimmar", | |
| 76 "Automatically start logging when you enter SoO and stop when you leave SoO.\n\nNote that you should disable similar features in other addons to avoid conflicts.", | |
| 77 function(self, value) | 89 function(self, value) |
| 78 if value then | 90 if value then |
| 79 AmrLogData._autoLog[AskMrRobot.instanceIds.SiegeOfOrgrimmar] = "enabled" | 91 AmrLogData._autoLog[AskMrRobot.instanceIds.SiegeOfOrgrimmar] = "enabled" |
| 80 else | 92 else |
| 81 AmrLogData._autoLog[AskMrRobot.instanceIds.SiegeOfOrgrimmar] = "disabled" | 93 AmrLogData._autoLog[AskMrRobot.instanceIds.SiegeOfOrgrimmar] = "disabled" |
| 85 AmrLogData._lastDiff = nil | 97 AmrLogData._lastDiff = nil |
| 86 tab:UpdateAutoLogging() | 98 tab:UpdateAutoLogging() |
| 87 end | 99 end |
| 88 ) | 100 ) |
| 89 autoChk:SetChecked(AmrLogData._autoLog[AskMrRobot.instanceIds.SiegeOfOrgrimmar] == "enabled") | 101 autoChk:SetChecked(AmrLogData._autoLog[AskMrRobot.instanceIds.SiegeOfOrgrimmar] == "enabled") |
| 90 autoChk:SetPoint("TOPLEFT", text, "BOTTOMLEFT", 75, -50) | 102 autoChk:SetPoint("TOPLEFT", btn, "BOTTOMLEFT", 0, -10) |
| 91 autoChk:SetHeight(30) | 103 autoChk:SetHeight(30) |
| 92 | 104 |
| 93 text = CreateText(tab, "GameFontNormalLarge", text, 0, -100, "Character Data") | 105 |
| 94 | 106 local text = CreateText(content, "GameFontNormalLarge", autoChk, 0, -20, L.AMR_COMBATLOGTAB_INFIGHT) |
| 95 btn = CreateFrame("Button", "AmrCombatLogSaveCharData", tab, "UIPanelButtonTemplate") | 107 |
| 108 btn = CreateFrame("Button", "AmrCombatLogWipe", autoChk, "UIPanelButtonTemplate") | |
| 109 btn:SetPoint("TOPLEFT", text, "BOTTOMLEFT", 0, -10) | |
| 110 btn:SetText("Wipe") | |
| 111 btn:SetWidth(70) | |
| 112 btn:SetHeight(30) | |
| 113 btn:SetScript("OnClick", function() | |
| 114 tab:LogWipe() | |
| 115 end) | |
| 116 | |
| 117 tab.btnWipe = btn | |
| 118 | |
| 119 local text2 = CreateText(content, "GameFontWhite", text, 80, -12, L.AMR_COMBATLOGTAB_WIPE_1) | |
| 120 text2 = CreateText(content, "GameFontWhite", text2, 0, -2, L.AMR_COMBATLOGTAB_WIPE_2) | |
| 121 text2 = CreateText(content, "GameFontWhite", text2, 0, -2, L.AMR_COMBATLOGTAB_WIPE_3) | |
| 122 | |
| 123 btn = CreateFrame("Button", "AmrCombatLogUnWipe", content, "UIPanelButtonTemplate") | |
| 124 btn:SetPoint("LEFT", text, "LEFT", 0, 0) | |
| 125 btn:SetPoint("TOP", text2, "BOTTOM", 0, -10) | |
| 126 btn:SetText("Undo") | |
| 127 btn:SetWidth(70) | |
| 128 btn:SetHeight(30) | |
| 129 btn:Hide() -- initially hidden | |
| 130 btn:SetScript("OnClick", function() | |
| 131 tab:LogUnwipe() | |
| 132 end) | |
| 133 tab.btnUnwipe = btn | |
| 134 | |
| 135 text = content:CreateFontString(nil, "ARTWORK", "GameFontWhite") | |
| 136 text:SetPoint("LEFT", btn, "LEFT", 80, 0) | |
| 137 tab.lastWipeLabel = text | |
| 138 | |
| 139 text = CreateText(tab, "GameFontNormalLarge", btn, 0, -20, L.AMR_COMBATLOGTAB_HEADLINE_OVER_BUTTON) | |
| 140 | |
| 141 btn = CreateFrame("Button", "AmrCombatLogSaveCharData", content, "UIPanelButtonTemplate") | |
| 96 btn:SetPoint("TOPLEFT", text, "BOTTOMLEFT", 0, -5) | 142 btn:SetPoint("TOPLEFT", text, "BOTTOMLEFT", 0, -5) |
| 97 btn:SetText("Save Character Data") | 143 btn:SetText(L.AMR_COMBATLOGTAB_SAVE_CHARACTER) |
| 98 btn:SetWidth(150) | 144 btn:SetWidth(150) |
| 99 btn:SetHeight(30) | 145 btn:SetHeight(30) |
| 100 | 146 |
| 101 btn:SetScript("OnClick", function() | 147 -- reload the UI will save character data to disk |
| 102 -- reload the UI will save character data to disk | 148 btn:SetScript("OnClick", ReloadUI) |
| 103 ReloadUI() | 149 |
| 104 end) | 150 text = CreateText(content, "GameFontWhite", btn, 0, -15, L.AMR_COMBATLOGTAB_SAVE_CHARACTER_INFO) |
| 105 | 151 |
| 106 text = CreateText(tab, "GameFontNormalLarge", btn, 0, -30, "INSTRUCTIONS") | 152 text = CreateText(content, "GameFontNormalLarge", text, 0, -30, L.AMR_COMBATLOGTAB_INSTRUCTIONS) |
| 107 text = CreateText(tab, "GameFontWhite", text, 0, -10, "1. Use the Start/Stop buttons or check 'Always log Siege of Orgrimmar'.") | 153 text = CreateText(content, "GameFontWhite", text, 0, -10, L.AMR_COMBATLOGTAB_INSTRUCTIONS_1) |
| 108 text = CreateText(tab, "GameFontWhite", text, 0, -10, "2. When you are ready to upload, press 'Save Character Data'. *") | 154 text = CreateText(content, "GameFontWhite", text, 0, -10, L.AMR_COMBATLOGTAB_INSTRUCTIONS_2) |
| 109 text = CreateText(tab, "GameFontWhite", text, 0, -10, "3. Exit World of Warcraft. **") | 155 text = CreateText(content, "GameFontWhite", text, 0, -10, L.AMR_COMBATLOGTAB_INSTRUCTIONS_3) |
| 110 text = CreateText(tab, "GameFontWhite", text, 0, -10, "4. Launch the Ask Mr. Robot client and follow the instructions. ***") | 156 text = CreateText(content, "GameFontWhite", text, 0, -10, L.AMR_COMBATLOGTAB_INSTRUCTIONS_4) |
| 111 | 157 |
| 112 text = CreateText(tab, "GameFontNormalSmall", text, 0, -30, "|c00999999* This will reload your UI to ensure that all collected data is saved to disk. This step is not necessary if you log out of the game before uploading.|r") | 158 text = CreateText(content, "GameFontNormalSmall", text, 0, -30, L.AMR_COMBATLOGTAB_INSTRUCTIONS_5) |
| 113 text = CreateText(tab, "GameFontNormalSmall", text, 0, -10, "|c00999999** Exiting WoW before uploading your combat log is optional, but highly recommended. This prevents your log file from getting ridiculously large and slowing down your uploads.|r") | 159 text = CreateText(content, "GameFontNormalSmall", text, 0, -10, L.AMR_COMBATLOGTAB_INSTRUCTIONS_6) |
| 114 text = CreateText(tab, "GameFontNormalSmall", text, 0, -10, "|c00999999*** You can download the client program at|r |c003333ffhttp://www.askmrrobot.com/wow/combatlog/upload|r|c00999999.|r") | 160 text = CreateText(content, "GameFontNormalSmall", text, 0, -10, L.AMR_COMBATLOGTAB_INSTRUCTIONS_7) |
| 115 | 161 |
| 116 --[[ | |
| 117 btn = CreateFrame("Button", "AmrCombatLogTest", tab, "UIPanelButtonTemplate") | 162 btn = CreateFrame("Button", "AmrCombatLogTest", tab, "UIPanelButtonTemplate") |
| 118 btn:SetPoint("TOPLEFT", text, "BOTTOMLEFT", 0, -15) | 163 btn:SetPoint("TOPLEFT", text, "BOTTOMLEFT", 0, -15) |
| 119 btn:SetText("Test") | 164 btn:SetText("Test") |
| 120 btn:SetWidth(120) | 165 btn:SetWidth(120) |
| 121 btn:SetHeight(30) | 166 btn:SetHeight(30) |
| 122 | 167 |
| 123 btn:SetScript("OnClick", function() | 168 btn:SetScript("OnClick", function() |
| 124 AskMrRobot.ExportToAddonChat(time()) | 169 |
| 170 local t = time() | |
| 171 AskMrRobot.SaveAll() | |
| 172 AskMrRobot.ExportToAddonChat(t) | |
| 173 AskMrRobot.ExportLoggingData(t) | |
| 125 end) | 174 end) |
| 126 ]] | |
| 127 | 175 |
| 128 -- when we start up, ensure that logging is still enabled if it was enabled when they last used the addon | 176 -- when we start up, ensure that logging is still enabled if it was enabled when they last used the addon |
| 129 if (tab:IsLogging()) then | 177 if (tab:IsLogging()) then |
| 130 SetCVar("advancedCombatLogging", 1) | 178 SetCVar("advancedCombatLogging", 1) |
| 131 LoggingCombat(true) | 179 LoggingCombat(true) |
| 147 return AmrLogData._logging == true | 195 return AmrLogData._logging == true |
| 148 end | 196 end |
| 149 | 197 |
| 150 function AskMrRobot.CombatLogTab:StartLogging() | 198 function AskMrRobot.CombatLogTab:StartLogging() |
| 151 | 199 |
| 200 local now = time() | |
| 201 local oldDuration = 60 * 60 * 24 * 10 | |
| 202 | |
| 152 -- archive the current logging session so that users don't accidentally blow away data before uploading it | 203 -- archive the current logging session so that users don't accidentally blow away data before uploading it |
| 153 if AmrLogData._current2 ~= nil then | 204 if AmrLogData._current2 ~= nil then |
| 154 if not AmrLogData._history2 then AmrLogData._history2 = {} end | 205 if not AmrLogData._history2 then AmrLogData._history2 = {} end |
| 155 | 206 |
| 156 -- add new entries | 207 -- add new entries |
| 160 AmrLogData._history2[name][timestamp] = dataString | 211 AmrLogData._history2[name][timestamp] = dataString |
| 161 end | 212 end |
| 162 end | 213 end |
| 163 | 214 |
| 164 -- delete entries that are more than 10 days old | 215 -- delete entries that are more than 10 days old |
| 165 local now = time() | |
| 166 local interval = 60 * 60 * 24 * 10 | |
| 167 for name, timeList in AskMrRobot.spairs(AmrLogData._history2) do | 216 for name, timeList in AskMrRobot.spairs(AmrLogData._history2) do |
| 168 for timestamp, dataString in AskMrRobot.spairs(timeList) do | 217 for timestamp, dataString in AskMrRobot.spairs(timeList) do |
| 169 if difftime(now, tonumber(timestamp)) > interval then | 218 if difftime(now, tonumber(timestamp)) > oldDuration then |
| 170 timeList[timestamp] = nil | 219 timeList[timestamp] = nil |
| 171 end | 220 end |
| 172 end | 221 end |
| 173 | 222 |
| 174 local count = 0 | 223 local count = 0 |
| 179 AmrLogData._history2[name] = nil | 228 AmrLogData._history2[name] = nil |
| 180 end | 229 end |
| 181 end | 230 end |
| 182 end | 231 end |
| 183 | 232 |
| 233 -- same idea with extra info (auras, pets, whatever we end up adding to it) | |
| 234 if AmrLogData._currentExtra ~= nil then | |
| 235 if not AmrLogData._historyExtra then AmrLogData._historyExtra = {} end | |
| 236 | |
| 237 -- add new entries | |
| 238 for name, timeList in AskMrRobot.spairs(AmrLogData._currentExtra) do | |
| 239 if not AmrLogData._historyExtra[name] then AmrLogData._historyExtra[name] = {} end | |
| 240 for timestamp, dataString in AskMrRobot.spairs(timeList) do | |
| 241 AmrLogData._historyExtra[name][timestamp] = dataString | |
| 242 end | |
| 243 end | |
| 244 | |
| 245 -- delete entries that are more than 10 days old | |
| 246 for name, timeList in AskMrRobot.spairs(AmrLogData._historyExtra) do | |
| 247 for timestamp, dataString in AskMrRobot.spairs(timeList) do | |
| 248 if difftime(now, tonumber(timestamp)) > oldDuration then | |
| 249 timeList[timestamp] = nil | |
| 250 end | |
| 251 end | |
| 252 | |
| 253 local count = 0 | |
| 254 for timestamp, dataString in pairs(timeList) do | |
| 255 count = count + 1 | |
| 256 end | |
| 257 if count == 0 then | |
| 258 AmrLogData._historyExtra[name] = nil | |
| 259 end | |
| 260 end | |
| 261 end | |
| 262 | |
| 263 | |
| 264 -- delete _wipes entries that are more than 10 days old | |
| 265 if AmrLogData._wipes then | |
| 266 local i = 1 | |
| 267 while i <= #AmrLogData._wipes do | |
| 268 local t = AmrLogData._wipes[i] | |
| 269 if difftime(now, t) > oldDuration then | |
| 270 tremove(AmrLogData._wipes, i) | |
| 271 else | |
| 272 i = i + 1 | |
| 273 end | |
| 274 end | |
| 275 end | |
| 276 | |
| 277 -- delete the _lastWipe if it is more than 10 days old | |
| 278 if AmrLogData._lastWipe and difftime(now, AmrLogData._lastWipe) > oldDuration then | |
| 279 AmrLogData_lastWipe = nil | |
| 280 end | |
| 281 | |
| 184 -- clean up old-style logging data from previous versions of the addon | 282 -- clean up old-style logging data from previous versions of the addon |
| 185 for k, v in AskMrRobot.spairs(AmrLogData) do | 283 for k, v in AskMrRobot.spairs(AmrLogData) do |
| 186 if k ~= "_logging" and k ~= "_autoLog" and k ~= "_lastZone" and k ~= "_lastDiff" and k ~= "_current2" and k ~= "_history2" then | 284 if not _logDataKeys[k] then |
| 187 AmrLogData[k] = nil | 285 AmrLogData[k] = nil |
| 188 end | 286 end |
| 189 end | 287 end |
| 190 | 288 |
| 191 -- start a new logging session | 289 -- start a new logging session |
| 192 AmrLogData._current2 = {} | 290 AmrLogData._current2 = {} |
| 291 AmrLogData._currentExtra = {} | |
| 193 AmrLogData._logging = true | 292 AmrLogData._logging = true |
| 194 | 293 |
| 195 -- always enable advanced combat logging via our addon, gathers more detailed data for better analysis | 294 -- always enable advanced combat logging via our addon, gathers more detailed data for better analysis |
| 196 SetCVar("advancedCombatLogging", 1) | 295 SetCVar("advancedCombatLogging", 1) |
| 197 | 296 |
| 198 LoggingCombat(true) | 297 LoggingCombat(true) |
| 199 self:Update() | 298 self:Update() |
| 200 | 299 |
| 201 print("You are now logging combat, and Mr. Robot is logging character data for your raid.") | 300 AskMrRobot.AmrUpdateMinimap() |
| 301 | |
| 302 print(L.AMR_COMBATLOGTAB_IS_LOGGING) | |
| 202 end | 303 end |
| 203 | 304 |
| 204 function AskMrRobot.CombatLogTab:StopLogging() | 305 function AskMrRobot.CombatLogTab:StopLogging() |
| 205 LoggingCombat(false) | 306 LoggingCombat(false) |
| 206 AmrLogData._logging = false | 307 AmrLogData._logging = false |
| 207 self:Update() | 308 self:Update() |
| 208 | 309 |
| 209 print("Combat logging has been stopped.") | 310 AskMrRobot.AmrUpdateMinimap() |
| 311 | |
| 312 print(L.AMR_COMBATLOGTAB_STOPPED_LOGGING) | |
| 313 end | |
| 314 | |
| 315 function AskMrRobot.CombatLogTab:ToggleLogging() | |
| 316 if self:IsLogging() then | |
| 317 self:StopLogging() | |
| 318 else | |
| 319 self:StartLogging() | |
| 320 end | |
| 210 end | 321 end |
| 211 | 322 |
| 212 -- update the panel and state | 323 -- update the panel and state |
| 213 function AskMrRobot.CombatLogTab:Update() | 324 function AskMrRobot.CombatLogTab:Update() |
| 214 local isLogging = self:IsLogging() | 325 local isLogging = self:IsLogging() |
| 215 | 326 |
| 216 if isLogging then | 327 if isLogging then |
| 217 self.btnStart:Disable() | 328 self.btnStart:SetText(L.AMR_COMBATLOGTAB_STOP_LOGGING) |
| 218 self.btnEnd:Enable() | 329 self.loggingStatus:SetText(L.AMR_COMBATLOGTAB_CURRENTLY_LOGGING) |
| 219 else | 330 else |
| 220 self.btnStart:Enable() | 331 self.btnStart:SetText(L.AMR_COMBATLOGTAB_START_LOGGING) |
| 221 self.btnEnd:Disable() | 332 self.loggingStatus:SetText("") |
| 222 end | 333 end |
| 334 | |
| 335 if AmrLogData._lastWipe then | |
| 336 self.lastWipeLabel:SetText(L.AMR_COMBATLOGTAB_LASTWIPE:format(date('%B %d', AmrLogData._lastWipe), date('%I:%M %p', AmrLogData._lastWipe))) | |
| 337 self.btnUnwipe:Show() | |
| 338 else | |
| 339 self.lastWipeLabel:SetText("") | |
| 340 self.btnUnwipe:Hide() | |
| 341 end | |
| 342 | |
| 223 end | 343 end |
| 224 | 344 |
| 225 -- called to update logging state when auto-logging is enabled | 345 -- called to update logging state when auto-logging is enabled |
| 226 function AskMrRobot.CombatLogTab:UpdateAutoLogging() | 346 function AskMrRobot.CombatLogTab:UpdateAutoLogging() |
| 227 | 347 |
| 256 end | 376 end |
| 257 end | 377 end |
| 258 | 378 |
| 259 end | 379 end |
| 260 | 380 |
| 381 local function RaidChatType() | |
| 382 if UnitIsGroupAssistant("player") or UnitIsGroupLeader("player") then | |
| 383 return "RAID_WARNING" | |
| 384 else | |
| 385 return "RAID" | |
| 386 end | |
| 387 end | |
| 388 | |
| 389 -- used to store wipes to AmrLogData so that we trim data after the wipe | |
| 390 function AskMrRobot.CombatLogTab:LogWipe() | |
| 391 local t = time() | |
| 392 tinsert(AmrLogData._wipes, t) | |
| 393 AmrLogData._lastWipe = t | |
| 394 | |
| 395 if GetNumGroupMembers() > 0 then | |
| 396 SendChatMessage(L.AMR_COMBATLOGTAB_WIPE_CHAT, RaidChatType()) | |
| 397 end | |
| 398 print(string.format(L.AMR_COMBATLOGTAB_WIPE_MSG, date('%I:%M %p', t))) | |
| 399 | |
| 400 self:Update() | |
| 401 --AskMrRobot.wait(301, AskMrRobot.CombatLogTab.Update, self) | |
| 402 end | |
| 403 | |
| 404 -- used to undo the wipe command | |
| 405 function AskMrRobot.CombatLogTab:LogUnwipe() | |
| 406 local t = AmrLogData._lastWipe | |
| 407 if not t then | |
| 408 print(L.AMR_COMBATLOGTAB_NOWIPES) | |
| 409 else | |
| 410 tremove(AmrLogData._wipes) | |
| 411 AmrLogData._lastWipe = nil | |
| 412 print(string.format(L.AMR_COMBATLOGTAB_UNWIPE_MSG, date('%I:%M %p', t))) | |
| 413 end | |
| 414 self:Update() | |
| 415 end | |
| 416 | |
| 417 -- initialize the AmrLogData variable | |
| 418 function AskMrRobot.CombatLogTab.InitializeVariable() | |
| 419 if not AmrLogData then AmrLogData = {} end | |
| 420 if not AmrLogData._autoLog then AmrLogData._autoLog = {} end | |
| 421 if not AmrLogData._autoLog[AskMrRobot.instanceIds.SiegeOfOrgrimmar] then | |
| 422 AmrLogData._autoLog[AskMrRobot.instanceIds.SiegeOfOrgrimmar] = "disabled" | |
| 423 end | |
| 424 AmrLogData._wipes = AmrLogData._wipes or {} | |
| 425 end | |
| 426 | |
| 427 function AskMrRobot.CombatLogTab.SaveExtras(data, timestamp) | |
| 428 | |
| 429 for name,val in pairs(data) do | |
| 430 -- record aura stuff, we never check for duplicates, need to know it at each point in time | |
| 431 if AmrLogData._currentExtra[name] == nil then | |
| 432 AmrLogData._currentExtra[name] = {} | |
| 433 end | |
| 434 AmrLogData._currentExtra[name][timestamp] = val | |
| 435 end | |
| 436 end | |
| 437 | |
| 261 -- read a message sent to the addon channel with a player's info at the time an encounter started | 438 -- read a message sent to the addon channel with a player's info at the time an encounter started |
| 262 function AskMrRobot.CombatLogTab:ReadAddonMessage(message) | 439 function AskMrRobot.CombatLogTab:ReadAddonMessage(message) |
| 263 | 440 |
| 264 -- message will be of format: timestamp\nrealm\nname\n[stuff] | 441 -- message will be of format: timestamp\nrealm\nname\n[stuff] |
| 265 local parts = {} | 442 local parts = {} |
| 272 local data = parts[4] | 449 local data = parts[4] |
| 273 | 450 |
| 274 if (data == "done") then | 451 if (data == "done") then |
| 275 -- we have finished receiving this message; now process it to reduce the amount of duplicate data | 452 -- we have finished receiving this message; now process it to reduce the amount of duplicate data |
| 276 local setup = AmrLogData._current2[name][timestamp] | 453 local setup = AmrLogData._current2[name][timestamp] |
| 277 | 454 |
| 278 if (AmrLogData._previousSetup == nil) then | 455 if (AmrLogData._previousSetup == nil) then |
| 279 AmrLogData._previousSetup = {} | 456 AmrLogData._previousSetup = {} |
| 280 end | 457 end |
| 281 | 458 |
| 282 local previousSetup = AmrLogData._previousSetup[name] | 459 local previousSetup = AmrLogData._previousSetup[name] |
| 286 AmrLogData._current2[name][timestamp] = nil | 463 AmrLogData._current2[name][timestamp] = nil |
| 287 else | 464 else |
| 288 -- record the last-seen setup | 465 -- record the last-seen setup |
| 289 AmrLogData._previousSetup[name] = setup | 466 AmrLogData._previousSetup[name] = setup |
| 290 end | 467 end |
| 468 | |
| 291 else | 469 else |
| 292 -- concatenate messages with the same timestamp+name | 470 -- concatenate messages with the same timestamp+name |
| 293 if (AmrLogData._current2[name] == nil) then | 471 if (AmrLogData._current2[name] == nil) then |
| 294 AmrLogData._current2[name] = {} | 472 AmrLogData._current2[name] = {} |
| 295 end | 473 end |
