From 12573e4fdc58595187e6d06cfa5f26ba8f8fd4ac Mon Sep 17 00:00:00 2001 From: F16Gaming Date: Sun, 6 Jan 2013 18:11:13 +0100 Subject: [PATCH] Added immediate frame, updated license and did some other small fixes. --- Broker.lua | 2 +- Command.lua | 5 ++- Dialogs.lua | 2 +- ImmediateFrame.lua | 111 ++++++++++++++++++++++++++++++++++++++++++++++++++++ KillTrack.lua | 65 +++++++++++++++++------------- KillTrack.toc | 1 + MobList.lua | 2 +- Timer.lua | 19 ++++++++- TimerFrame.lua | 2 +- TimerFrame.xml | 4 +- Tools.lua | 2 +- 11 files changed, 179 insertions(+), 36 deletions(-) create mode 100644 ImmediateFrame.lua diff --git a/Broker.lua b/Broker.lua index 404083d..6fada1a 100644 --- a/Broker.lua +++ b/Broker.lua @@ -1,5 +1,5 @@ --[[ - * Copyright (c) 2011 by Adam Hellberg. + * Copyright (c) 2011-2013 by Adam Hellberg. * * This file is part of KillTrack. * diff --git a/Command.lua b/Command.lua index 3a8bbd2..ccd3cee 100644 --- a/Command.lua +++ b/Command.lua @@ -1,5 +1,5 @@ --[[ - * Copyright (c) 2011 by Adam Hellberg. + * Copyright (c) 2011-2013 by Adam Hellberg. * * This file is part of KillTrack. * @@ -74,6 +74,7 @@ C:Register("__DEFAULT__", function(args) KT:Msg("/kt purge [threshold] - Open dialog to purge entries, specifiying a threshold here is optional.") KT:Msg("/kt reset - Clear the mob database.") KT:Msg("/kt time - Track kills within specified time.") + KT:Msg("/kt immediate - Track kills made from this point on.") KT:Msg("/kt threshold - Set threshold for kill record notices to show.") KT:Msg("/kt countmode - Toggle between counting group killing blows or your killing blows only.") KT:Msg("/kt - Displays this help message.") @@ -165,6 +166,8 @@ C:Register({"time", "timer"}, function(args) KT.TimerFrame:Start(s, m, h) end) +C:Register({"immediate", "imm", "i"}, function(args) KT.Immediate:Show() end) + C:Register({"threshold"}, function(args) if #args <= 0 then KT:Msg("Usage: threshold ") diff --git a/Dialogs.lua b/Dialogs.lua index 4649379..6026797 100644 --- a/Dialogs.lua +++ b/Dialogs.lua @@ -1,5 +1,5 @@ --[[ - * Copyright (c) 2011 by Adam Hellberg. + * Copyright (c) 2011-2013 by Adam Hellberg. * * This file is part of KillTrack. * diff --git a/ImmediateFrame.lua b/ImmediateFrame.lua new file mode 100644 index 0000000..621680d --- /dev/null +++ b/ImmediateFrame.lua @@ -0,0 +1,111 @@ +--[[ + * Copyright (c) 2013 by Adam Hellberg. + * + * This file is part of KillTrack. + * + * KillTrack is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * KillTrack is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with KillTrack. If not, see . +--]] + +local KT = KillTrack + +KT.Immediate = { + Active = false, + Kills = 0 +} + +local I = KT.Immediate + +local function SetupFrame() + if frame then return end + local G = KT.Global.IMMEDIATE + frame = CreateFrame("Frame", nil, UIParent) + frame:Hide() + frame:EnableMouse(true) + frame:SetMovable(true) + if G.POSITION.POINT then + frame:SetPoint(G.POSITION.POINT, UIParent, G.POSITION.RELATIVE, G.POSITION.X, G.POSITION.Y) + else + frame:SetPoint("CENTER") + end + frame:SetWidth(240) + frame:SetHeight(30) + + local bd = { + bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, + edgeSize = 16, + tileSize = 32, + insets = { + left = 2.5, + right = 2.5, + top = 2.5, + bottom = 2.5 + } + } + + frame:SetBackdrop(bd) + + frame:SetScript("OnMouseDown", function(f) f:StartMoving() end) + frame:SetScript("OnMouseUp", function(f) + f:StopMovingOrSizing() + local point, _, relative, x, y = f:GetPoint() + G.POSITION.POINT = point + G.POSITION.RELATIVE = relative + G.POSITION.X = x + G.POSITION.Y = y + end) + + frame.killLabel = frame:CreateFontString(nil, "OVERLAY", nil) + frame.killLabel:SetFont("Fonts\\FRIZQT__.TTF", 16, nil) + frame.killLabel:SetWidth(100) + --frame.killLabel:SetHeight(24) + frame.killLabel:SetPoint("LEFT", frame, "LEFT", 2, 0) + frame.killLabel:SetText("Kills so far:") + + frame.killCount = frame:CreateFontString(nil, "OVERLAY", nil) + frame.killCount:SetFont("Fonts\\FRIZQT__.TTF", 16, nil) + frame.killCount:SetWidth(100) + --frame.killCount:SetHeight(24) + frame.killCount:SetPoint("RIGHT", frame, "RIGHT", -68, 0) + frame.killCount:SetJustifyH("RIGHT") + frame.killCount:SetText("0") + + frame.closeButton = CreateFrame("Button", nil, frame, "UIPanelButtonTemplate") + frame.closeButton:SetWidth(60) + frame.closeButton:SetHeight(24) + frame.closeButton:SetPoint("RIGHT", frame, "RIGHT", -3, 0) + frame.closeButton:SetText("Close") + frame.closeButton:SetScript("OnClick", function() I:Hide() end) +end + +function I:Show() + if not frame then SetupFrame() end + self.Kills = 0 + frame.killCount:SetText(self.Kills) + frame:Show() + self.Active = true +end + +function I:Hide() + frame:Hide() + self.Kills = 0 + frame.killCount:SetText(self.Kills) + self.Active = false +end + +function I:AddKill() + self.Kills = self.Kills + 1 + frame.killCount:SetText(tostring(self.Kills)) +end diff --git a/KillTrack.lua b/KillTrack.lua index 3690d62..71bd053 100644 --- a/KillTrack.lua +++ b/KillTrack.lua @@ -1,5 +1,5 @@ --[[ - * Copyright (c) 2011 by Adam Hellberg. + * Copyright (c) 2011-2013 by Adam Hellberg. * * This file is part of KillTrack. * @@ -111,19 +111,26 @@ function KT.Events.ADDON_LOADED(self, ...) if type(self.Global.MOBS) ~= "table" then self.Global.MOBS = {} end - if type(_G["KILLTRACK_CHAR"]) ~= "table" then - _G["KILLTRACK_CHAR"] = {} + if type(self.Global.IMMEDIATE) ~= "table" then + self.Global.IMMEDIATE = {} + end + if type(self.Global.IMMEDIATE.POSITION) ~= "table" then + self.Global.IMMEDIATE.POSITION = {} + end + if type(self.Global.BROKER) ~= "table" then + self.Global.BROKER = {} end - if type(KT.Global.BROKER) ~= "table" then - KT.Global.BROKER = {} + if type(self.Global.BROKER.SHORT_TEXT) ~= "boolean" then + self.Global.BROKER.SHORT_TEXT = false end - if type(KT.Global.BROKER.SHORT_TEXT) ~= "boolean" then - KT.Global.BROKER.SHORT_TEXT = false + if type(_G["KILLTRACK_CHAR"]) ~= "table" then + _G["KILLTRACK_CHAR"] = {} end self.CharGlobal = _G["KILLTRACK_CHAR"] if type(self.CharGlobal.MOBS) ~= "table" then self.CharGlobal.MOBS = {} end + self.PlayerName = UnitName("player") self:Msg("AddOn Loaded!") self.Session.Start = time() self.Broker:OnLoad() @@ -133,42 +140,43 @@ function KT.Events.COMBAT_LOG_EVENT_UNFILTERED(self, ...) local event = (select(2, ...)) if event == "SWING_DAMAGE" or event == "RANGE_DAMAGE" or event == "SPELL_DAMAGE" then local s_name = tostring((select(5, ...))) - local guid = (select(8, ...)) + local t_guid = (select(8, ...)) --local t_id = tonumber(KTT:GUIDToID((select(8, ...)))) - if FirstDamage[guid] == nil then + if FirstDamage[t_guid] == nil then -- s_name is (probably) the player who first damaged this mob and probably has the tag - FirstDamage[guid] = s_name + FirstDamage[t_guid] = s_name end - LastDamage[guid] = s_name + LastDamage[t_guid] = s_name - if DamageValid[guid] == nil then + if DamageValid[t_guid] == nil then -- if DamageValid returns true for a GUID, we can tell with 100% certainty that it's valid -- But this relies on one of the valid unit names currently being the damaged mob -- Or if it's false, we can tell with 100% certainty that someone else tagged the mob - local unit = FindUnitByGUID(guid) + local t_unit = FindUnitByGUID(t_guid) - if not unit then return end + if not t_unit then return end - local tapped = UnitIsTapped(unit) + local tapped = UnitIsTapped(t_unit) if not tapped then return end - DamageValid[guid] = tapped and UnitIsTappedByPlayer(unit) + DamageValid[t_guid] = tapped and UnitIsTappedByPlayer(t_unit) end return end if event ~= "UNIT_DIED" then return end + -- Perform solo/group checks - local guid = (select(8, ...)) - local id = KTT:GUIDToID(guid) + local t_guid = (select(8, ...)) + local t_id = KTT:GUIDToID(t_guid) local name = tostring((select(9, ...))) - local firstDamage = FirstDamage[guid] or "" - local lastDamage = LastDamage[guid] or "" - local firstByPlayer = firstDamage == UnitName("player") or firstDamage == UnitName("pet") + local firstDamage = FirstDamage[t_guid] or "" + local lastDamage = LastDamage[t_guid] or "" + local firstByPlayer = firstDamage == (self.PlayerName or UnitName("player")) or firstDamage == UnitName("pet") local firstByGroup = self:IsInGroup(firstDamage) local lastByPlayer = lastDamage == UnitName("player") or lastDamage == UnitName("pet") local pass @@ -178,8 +186,8 @@ function KT.Events.COMBAT_LOG_EVENT_UNFILTERED(self, ...) -- Scenario: You deal the killing blow to an already tapped mob <- Would count as kill with current code -- if DamageValid[guid] is set, it can be used to decide if the kill was valid with 100% certainty - if DamageValid[guid] ~= nil then - pass = DamageValid[guid] + if DamageValid[t_guid] ~= nil then + pass = DamageValid[t_guid] else -- The one who dealt the very first bit of damage was probably the one who got the tag on the mob -- This should apply in most (if not all) situations and is probably a safe fallback when we couldn't retrieve tapped status from GUID->Unit pass = firstByPlayer or firstByGroup @@ -189,10 +197,10 @@ function KT.Events.COMBAT_LOG_EVENT_UNFILTERED(self, ...) pass = false -- Player or player's pet did not deal the killing blow and addon only tracks player kills end - if not pass or id == 0 then return end - FirstDamage[guid] = nil - DamageValid[guid] = nil - self:AddKill(id, name) + if not pass or t_id == 0 then return end + FirstDamage[t_guid] = nil + DamageValid[t_guid] = nil + self:AddKill(t_id, name) if self.Timer:IsRunning() then self.Timer:SetData("Kills", self.Timer:GetData("Kills", true) + 1) end @@ -261,6 +269,9 @@ function KT:AddKill(id, name) self:Msg(("Updated %q, new kill count: %d. Kill count on this character: %d"):format(name, self.Global.MOBS[id].Kills, self.CharGlobal.MOBS[id].Kills)) end self:AddSessionKill(name) + if self.Immediate.Active then + self.Immediate:AddKill() + end if type(self.Global.MOBS[id].AchievCount) ~= "number" then self.Global.MOBS[id].AchievCount = floor(self.Global.MOBS[id].Kills / self.Global.ACHIEV_THRESHOLD) if self.Global.MOBS[id].AchievCount >= 1 then diff --git a/KillTrack.toc b/KillTrack.toc index 3ad7200..39a1153 100644 --- a/KillTrack.toc +++ b/KillTrack.toc @@ -20,4 +20,5 @@ MobList.lua Timer.lua TimerFrame.lua TimerFrame.xml +ImmediateFrame.lua Broker.lua diff --git a/MobList.lua b/MobList.lua index a914bba..f131905 100644 --- a/MobList.lua +++ b/MobList.lua @@ -1,5 +1,5 @@ --[[ - * Copyright (c) 2011 by Adam Hellberg. + * Copyright (c) 2011-2013 by Adam Hellberg. * * This file is part of KillTrack. * diff --git a/Timer.lua b/Timer.lua index ec1ea07..c70de81 100644 --- a/Timer.lua +++ b/Timer.lua @@ -1,4 +1,21 @@ --- +--[[ + * Copyright (c) 2011-2013 by Adam Hellberg. + * + * This file is part of KillTrack. + * + * KillTrack is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * KillTrack is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with KillTrack. If not, see . +--]] KillTrack.Timer = { Time = { diff --git a/TimerFrame.lua b/TimerFrame.lua index 3613ef7..682aabd 100644 --- a/TimerFrame.lua +++ b/TimerFrame.lua @@ -1,5 +1,5 @@ --[[ - * Copyright (c) 2011 by Adam Hellberg. + * Copyright (c) 2011-2013 by Adam Hellberg. * * This file is part of KillTrack. * diff --git a/TimerFrame.xml b/TimerFrame.xml index 9aeabbc..5a186e8 100644 --- a/TimerFrame.xml +++ b/TimerFrame.xml @@ -1,5 +1,5 @@