Skip to content
This repository has been archived by the owner on Aug 3, 2023. It is now read-only.

Commit

Permalink
#15 Track all damage done by party members
Browse files Browse the repository at this point in the history
  • Loading branch information
onechiporenko committed Nov 2, 2020
1 parent cef5b2a commit 989cba5
Show file tree
Hide file tree
Showing 13 changed files with 432 additions and 9 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
### v1.3.0

* #15 Track all damage done by party members
* #7 Add trackable own casts ("OwnCastsDoneByPartyMembers") for party members
* #26 Add icons for the new affixes

Expand Down
10 changes: 7 additions & 3 deletions Events.lua
Original file line number Diff line number Diff line change
Expand Up @@ -69,29 +69,33 @@ function MyDungeonsBook:COMBAT_LOG_EVENT_UNFILTERED()
self:TrackOwnCastDoneByPartyMembers(srcName, spellId, dstName);
end
if ((subEventPrefix:match("^SPELL") or subEventPrefix:match("^RANGE")) and subEventSuffix == "DAMAGE") then
local spellId, _, _, amount, overkill = select(12, CombatLogGetCurrentEventInfo());
local spellId, _, _, amount, overkill, _, _, _, _, crit = select(12, CombatLogGetCurrentEventInfo());
self:TrackAllDamageDoneToPartyMembers(dstName, spellId, amount);
self:TrackAllDamageDoneByPartyMembers(srcName, srcGUID, spellId, amount, overkill, crit);
self:TrackBfAAvoidableSpells(dstName, spellId, amount);
self:TrackSLAvoidableSpells(dstName, spellId, amount);
self:TrackBfADamageDoneToSpecificUnits(srcName, srcGUID, spellId, amount, overkill, dstName, dstGUID);
self:TrackSLDamageDoneToSpecificUnits(srcName, srcGUID, spellId, amount, overkill, dstName, dstGUID);
end
if (subEventName == "SWING_DAMAGE") then
local amount, overkill = select(12, CombatLogGetCurrentEventInfo());
local amount, overkill, _, _, _, _, crit = select(12, CombatLogGetCurrentEventInfo());
self:TrackAllDamageDoneToPartyMembers(dstName, -2, amount);
self:TrackAllDamageDoneByPartyMembers(srcName, srcGUID, -2, amount, overkill, crit);
self:TrackBfADamageDoneToSpecificUnits(srcName, srcGUID, -2, amount, overkill, dstName, dstGUID);
self:TrackSLDamageDoneToSpecificUnits(srcName, srcGUID, -2, amount, overkill, dstName, dstGUID);
end
if (subEventName == "SPELL_EXTRA_ATTACKS") then
local amount = select(12, CombatLogGetCurrentEventInfo());
self:TrackAllDamageDoneToPartyMembers(dstName, -2, amount);
self:TrackAllDamageDoneByPartyMembers(srcName, srcGUID, -2, amount, 0, false);
end
if (subEventPrefix:match("^SPELL") and
subEventSuffix == "MISSED") then
local spellId, _, _, _, _, amount = select(12, CombatLogGetCurrentEventInfo());
local spellId, _, _, _, _, amount, overkill, _, _, _, _, crit = select(12, CombatLogGetCurrentEventInfo());
self:TrackBfAAvoidableSpells(dstName, spellId, amount);
self:TrackSLAvoidableSpells(dstName, spellId, amount);
self:TrackAllDamageDoneToPartyMembers(dstName, spellId, amount);
self:TrackAllDamageDoneByPartyMembers(srcName, srcGUID, spellId, amount, overkill or -1, crit or false);
end
if (subEventName == "SPELL_AURA_APPLIED" or
subEventName == "SPELL_AURA_APPLIED_DOSE") then
Expand Down
8 changes: 8 additions & 0 deletions Locales/enUS.lua
Original file line number Diff line number Diff line change
Expand Up @@ -86,10 +86,18 @@ L["Target?"] = "Target?";
L["Swing Damage"] = "Swing Damage";
L["Result"] = "Result";
L["All damage taken"] = "All damage taken";
L["All damage done"] = "All damage done";
L["Dispels"] = "Dispels";
L["Casts"] = "Casts";
L["Are you sure you want to delete info about challenge?"] = "Are you sure you want to delete info about challenge?";
L["Challenge #%s is deleted successfully"] = "Challenge #%s is deleted successfully";
L["Min Not Crit"] = "Min Not Crit";
L["Hits Not Crit"] = "Hits Not Crit";
L["Max Not Crit"] = "Max Not Crit";
L["Min Crit"] = "Min Crit";
L["Max Crit"] = "Max Crit";
L["Crit, %"] = "Crit, %";
L["Hits Crit"] = "Hits Crit";
-- UI end

-- Help start
Expand Down
70 changes: 69 additions & 1 deletion Mechanics/Common.lua
Original file line number Diff line number Diff line change
Expand Up @@ -317,6 +317,74 @@ function MyDungeonsBook:TrackAllDamageDoneToPartyMembers(unit, spellId, amount)
end
end

--[[--
Track all damage done by party members (including pets)
@param[type=string] sourceUnitName
@param[type=GUID] sourceUnitGUID
@param[type=number] spellId
@param[type=number] amount
@param[type=number] overkill
@param[type=bool] crit
]]
function MyDungeonsBook:TrackAllDamageDoneByPartyMembers(sourceUnitName, sourceUnitGUID, spellId, amount, overkill, crit)
local id = self.db.char.activeChallengeId;
local type = strsplit("-", sourceUnitGUID);
if ((type ~= "Pet") and (type ~= "Player")) then
return;
end
if (type == "Pet") then
local petOwnerId = getPetOwnerWithTooltip(sourceUnitGUID);
if (petOwnerId) then
sourceUnitName = string.format("%s (%s)", sourceUnitName, UnitName(petOwnerId));
end
end
local key = "ALL-DAMAGE-DONE-BY-PARTY-MEMBERS";
self:InitMechanics3Lvl(key, sourceUnitName, spellId);
if (not self.db.char.challenges[id].mechanics[key][sourceUnitName][spellId].hits) then
self.db.char.challenges[id].mechanics[key][sourceUnitName][spellId] = {
hits = 0,
amount = 0,
overkill = 0,
hitsCrit = 0,
maxCrit = 0,
minCrit = math.huge,
amountCrit = 0,
hitsNotCrit = 0,
maxNotCrit = 0,
minNotCrit = math.huge,
amountNotCrit = 0,
};
end
local realAmount = amount or 0;
local realOverkill = 0;
if (overkill and overkill > 0) then
realOverkill = overkill;
end
self.db.char.challenges[id].mechanics[key][sourceUnitName][spellId].hits = self.db.char.challenges[id].mechanics[key][sourceUnitName][spellId].hits + 1;
self.db.char.challenges[id].mechanics[key][sourceUnitName][spellId].amount = self.db.char.challenges[id].mechanics[key][sourceUnitName][spellId].amount + realAmount;
self.db.char.challenges[id].mechanics[key][sourceUnitName][spellId].overkill = self.db.char.challenges[id].mechanics[key][sourceUnitName][spellId].overkill + realOverkill;
if (crit) then
self.db.char.challenges[id].mechanics[key][sourceUnitName][spellId].hitsCrit = self.db.char.challenges[id].mechanics[key][sourceUnitName][spellId].hitsCrit + 1;
self.db.char.challenges[id].mechanics[key][sourceUnitName][spellId].amountCrit = self.db.char.challenges[id].mechanics[key][sourceUnitName][spellId].amountCrit + realAmount;
if (realAmount > self.db.char.challenges[id].mechanics[key][sourceUnitName][spellId].maxCrit) then
self.db.char.challenges[id].mechanics[key][sourceUnitName][spellId].maxCrit = realAmount;
end
if (realAmount < self.db.char.challenges[id].mechanics[key][sourceUnitName][spellId].minCrit) then
self.db.char.challenges[id].mechanics[key][sourceUnitName][spellId].minCrit = realAmount;
end
else
self.db.char.challenges[id].mechanics[key][sourceUnitName][spellId].hitsNotCrit = self.db.char.challenges[id].mechanics[key][sourceUnitName][spellId].hitsNotCrit + 1;
self.db.char.challenges[id].mechanics[key][sourceUnitName][spellId].amountNotCrit = self.db.char.challenges[id].mechanics[key][sourceUnitName][spellId].amountNotCrit + realAmount;
if (realAmount > self.db.char.challenges[id].mechanics[key][sourceUnitName][spellId].maxNotCrit) then
self.db.char.challenges[id].mechanics[key][sourceUnitName][spellId].maxNotCrit = realAmount;
end
if (realAmount < self.db.char.challenges[id].mechanics[key][sourceUnitName][spellId].minNotCrit) then
self.db.char.challenges[id].mechanics[key][sourceUnitName][spellId].minNotCrit = realAmount;
end
end
end

--[[--
@local
@param[type=string] key db key
Expand All @@ -328,7 +396,7 @@ function MyDungeonsBook:SaveTrackedDamageToPartyMembers(key, unit, spellId, amou
local amountInPercents = amount and amount / UnitHealthMax(unit) * 100 or 0;
if (amountInPercents >= 40) then
local spellLink = GetSpellLink(spellId);
self:LogPrint(string.format(L["%s got hit by %s for %s (%s)"], unit, spellLink, self:FormatNumber(amount), string.format("%.1f%%", amountInPercents)));
self:LogPrint(string.format(L["%s got hit by %s for %s (%s)"], unit, spellLink or spellId, self:FormatNumber(amount), string.format("%.1f%%", amountInPercents)));
end
local id = self.db.char.activeChallengeId;
self:InitMechanics2Lvl(key, unit);
Expand Down
3 changes: 3 additions & 0 deletions MyDungeonsBook.toc
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@ UI/ChallengeDetails/Tabs/Mechanics/Tabs/Casts/Tabs/OwnCastsByPartyMembers/Tabs/O
UI/ChallengeDetails/Tabs/Mechanics/Tabs/Damage.lua
UI/ChallengeDetails/Tabs/Mechanics/Tabs/Damage/Tabs.lua
UI/ChallengeDetails/Tabs/Mechanics/Tabs/Damage/Tabs/AvoidableDamage.lua
UI/ChallengeDetails/Tabs/Mechanics/Tabs/Damage/Tabs/DamageDoneByPartyMembers.lua
UI/ChallengeDetails/Tabs/Mechanics/Tabs/Damage/Tabs/DamageDoneByPartyMembers/Tabs.lua
UI/ChallengeDetails/Tabs/Mechanics/Tabs/Damage/Tabs/DamageDoneByPartyMembers/Tabs/DamageDoneByPartyMember.lua
UI/ChallengeDetails/Tabs/Mechanics/Tabs/Damage/Tabs/DamageDoneToPartyMembers.lua
UI/ChallengeDetails/Tabs/Mechanics/Tabs/Damage/Tabs/DamageDoneToUnits.lua
UI/ChallengeDetails/Tabs/Mechanics/Tabs/Heal.lua
Expand Down
13 changes: 12 additions & 1 deletion MyDungeonsBook.wowproj
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
<Content Include="Challenge.lua">
<SubType>Code</SubType>
</Content>
<Content Include="CHANGELOG.txt" />
<Content Include="CHANGELOG.md" />
<Content Include="Chat.lua">
<SubType>Code</SubType>
</Content>
Expand Down Expand Up @@ -121,12 +121,21 @@
<Content Include="UI\ChallengeDetails\Tabs\Mechanics\Tabs\Damage\Tabs\AvoidableDamage.lua">
<SubType>Code</SubType>
</Content>
<Content Include="UI\ChallengeDetails\Tabs\Mechanics\Tabs\Damage\Tabs\DamageDoneByPartyMembers\Tabs.lua">
<SubType>Code</SubType>
</Content>
<Content Include="UI\ChallengeDetails\Tabs\Mechanics\Tabs\Damage\Tabs\DamageDoneByPartyMembers\Tabs\DamageDoneByPartyMember.lua">
<SubType>Code</SubType>
</Content>
<Content Include="UI\ChallengeDetails\Tabs\Mechanics\Tabs\Damage\Tabs\DamageDoneToPartyMembers.lua">
<SubType>Code</SubType>
</Content>
<Content Include="UI\ChallengeDetails\Tabs\Mechanics\Tabs\Damage\Tabs\DamageDoneToUnits.lua">
<SubType>Code</SubType>
</Content>
<Content Include="UI\ChallengeDetails\Tabs\Mechanics\Tabs\Damage\Tabs\DamageDoneByPartyMembers.lua">
<SubType>Code</SubType>
</Content>
<Content Include="UI\ChallengeDetails\Tabs\Mechanics\Tabs\EffectsAndAuras.lua">
<SubType>Code</SubType>
</Content>
Expand Down Expand Up @@ -205,6 +214,8 @@
<Folder Include="UI\ChallengeDetails\Tabs\Mechanics\Tabs\Casts\Tabs\OwnCastsByPartyMembers\Tabs\" />
<Folder Include="UI\ChallengeDetails\Tabs\Mechanics\Tabs\Damage" />
<Folder Include="UI\ChallengeDetails\Tabs\Mechanics\Tabs\Damage\Tabs" />
<Folder Include="UI\ChallengeDetails\Tabs\Mechanics\Tabs\Damage\Tabs\DamageDoneByPartyMembers" />
<Folder Include="UI\ChallengeDetails\Tabs\Mechanics\Tabs\Damage\Tabs\DamageDoneByPartyMembers\Tabs\" />
<Folder Include="UI\ChallengeDetails\Tabs\Mechanics\Tabs\EffectsAndAuras" />
<Folder Include="UI\ChallengeDetails\Tabs\Mechanics\Tabs\EffectsAndAuras\Tabs" />
<Folder Include="UI\ChallengeDetails\Tabs\Mechanics\Tabs\Casts" />
Expand Down
3 changes: 3 additions & 0 deletions Options.lua
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,9 @@ MyDungeonsBook.OptionsDefaults = {
["ALL-CASTS-DONE-BY-PARTY-MEMBERS"] = {
id = "ALL-CASTS-DONE-BY-PARTY-MEMBERS"
},
["ALL-DAMAGE-DONE-BY-PARTY-MEMBERS"] = {
id = "ALL-DAMAGE-DONE-BY-PARTY-MEMBERS"
},
["ALL-ENEMY-PASSED-CASTS"] = {
id = "ALL-ENEMY-PASSED-CASTS",
internal = true
Expand Down
4 changes: 4 additions & 0 deletions UI/ChallengeDetails/Tabs/Mechanics/Tabs/Damage/Tabs.lua
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ function MyDungeonsBook:DamageFrame_CreateTabButtonsFrame(parentFrame)
tabs:SetTabs({
{value = "avoidableDamage", text = L["Avoidable Damage"]},
{value = "damageDoneToPartyMembers", text = L["All damage taken"]},
{value = "damageDoneByPartyMembers", text = L["All damage done"]},
{value = "damageDoneToUnits", text = L["Damage Done To Units"]},
});
tabs:SetCallback("OnGroupSelected", function (container, _, tabId)
Expand All @@ -30,6 +31,9 @@ function MyDungeonsBook:DamageFrame_CreateTabButtonsFrame(parentFrame)
if (tabId == "damageDoneToPartyMembers") then
self:DamageDoneToPartyMembersFrame_Create(container, self.activeChallengeId);
end
if (tabId == "damageDoneByPartyMembers") then
self:DamageDoneByPartyMembersFrame_Create(container, self.activeChallengeId);
end
if (tabId == "damageDoneToUnits") then
self:DamageDoneToUnitsFrame_Create(container, self.activeChallengeId);
end
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
--[[--
@module MyDungeonsBook
]]

--[[--
UI
@section UI
]]

--[[--
Creates a frame for Damage Done By Party Members tab
@param[type=Frame] parentFrame
@param[type=number] challengeId
@return[type=Frame]
]]
function MyDungeonsBook:DamageDoneByPartyMembersFrame_Create(parentFrame, challengeId)
local damageDoneByPartyMembersFrame = self:TabContentWrapperWidget_Create(parentFrame);
damageDoneByPartyMembersFrame.tabButtonsFrame = self:DamageDoneByPartyMembersFrame_CreateTabButtonsFrame(damageDoneByPartyMembersFrame, challengeId);
damageDoneByPartyMembersFrame.tabButtonsFrame:SelectTab("player");
return damageDoneByPartyMembersFrame;
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
--[[--
@module MyDungeonsBook
]]

--[[--
UI
@section UI
]]

--[[--
Creates tabs (with click-handlers) for Own Casts frame.
@param[type=Frame] parentFrame
@param[type=number] challengeId
@return[type=Frame] tabsButtonsFrame
]]
function MyDungeonsBook:DamageDoneByPartyMembersFrame_CreateTabButtonsFrame(parentFrame, challengeId)
local tabs = self:TabsWidget_Create(parentFrame);
local tabsConfig = {};
for _, unitId in pairs(self:GetPartyRoster()) do
tinsert(tabsConfig, {value = unitId, text = self:GetNameByPartyUnit(challengeId, unitId)});
end
tabs:SetTabs(tabsConfig);
tabs:SetCallback("OnGroupSelected", function (container, _, tabId)
container:ReleaseChildren();
self:DamageDoneByPartyMemberFrame_Create(container, self.activeChallengeId, tabId);
end);
tabs:SetHeight(510);
return tabs;
end

0 comments on commit 989cba5

Please sign in to comment.