vanilla-wow-addons – Rev 1
?pathlinks?
-- array holding bars
SW_Bars = {};
SW_BARSEPX = 5;
SW_BARSEPY = 3;
function SW_BarRegister(oB)
local pName = oB:GetParent():GetName();
if SW_Bars[pName] == nil then SW_Bars[pName] = {}; end
table.insert(SW_Bars[pName], oB);
end
function SW_SelOpt(optButton)
local wasShown = false;
if SW_BarSettingsFrameV2:IsVisible() then
wasShown= true;
SW_BarSettingsFrameV2:Hide();
if ColorPickerFrame:IsVisible() then
ColorPickerFrame:Hide();
end
end
local cont = optButton:GetParent():GetParent():GetName();
SW_Settings["BarFrames"][cont]["Selected"] = optButton.optID;
SW_OptUpdateText(cont);
SW_BarsLayout(cont, true);
if wasShown then
getglobal("SW_BarSettingsFrameV2"):Show();
end
end
function SW_ToggleReport(frameP)
local frame = getglobal("SW_BarReportFrame")
if( frame:IsVisible() ) then
frame:Hide();
else
frame.caller = frameP;
frame:Show();
end
end
function SW_ToggleSync()
local frame = getglobal("SW_BarSyncFrame")
if( frame:IsVisible() ) then
frame:Hide();
else
frame:Show();
end
end
function SW_UpdateSyncChanText(newChan)
if tonumber(newChan) then
StaticPopup_Show("SW_InvalidChan");
end
end
function SW_OptUpdateText(pName)
local selOpt = SW_Settings["BarFrames"][pName]["Selected"];
local bSet = SW_GetBarSettings(pName);
local b = getglobal(pName.."_Selector_Opt"..selOpt);
local txtOpt = "";
local txtFrame = "";
if bSet["OT"] == nil then
txtOpt = selOpt;
else
txtOpt = bSet["OT"];
end
b.NormalText:SetText(txtOpt);
b.HighlightText:SetText(txtOpt);
if bSet["OTF"] == nil then
txtFrame = selOpt;
else
txtFrame = bSet["OTF"];
end
getglobal(pName.."_Title_Text"):SetText(txtFrame);
end
function SW_SetOptTxt(opt)
local bS = SW_Settings["InfoSettings"][opt.optID];
if bS == nil then return; end
local oc = bS["OC"];
local txt = "";
if bS == nil or bS["OT"] == nil then
txt = opt.optID;
else
txt = bS["OT"];
end
opt.NormalText:SetText(txt);
opt.HighlightText:SetText(txt);
--old version check
if oc == nil or (oc[1] == 1 and oc[2] == 0 and oc[3] == 0 and oc[4] == 1) then
oc = SW_Settings["Colors"]["TitleBars"]
end
opt.NormalT:SetVertexColor(unpack(oc));
opt.HighlightT:SetVertexColor(unpack(oc));
end
function SW_GetBarSettings(pName)
if SW_Settings["BarFrames"] == nil then
SW_Settings["BarFrames"] = {};
end
if SW_Settings["BarFrames"][pName] == nil then
SW_Settings["BarFrames"][pName] = {};
SW_Settings["BarFrames"][pName]["Selected"] = 1;
SW_Settings["BarFrames"][pName]["Docked"] = {1};
end
-- older version stored other stuff here
if SW_Settings["BarFrames"][pName]["Selected"] == nil then
SW_Settings["BarFrames"][pName] = {};
SW_Settings["BarFrames"][pName]["Selected"] = 1;
SW_Settings["BarFrames"][pName]["Docked"] = {1};
end
return SW_GetInfoSettings(SW_Settings["BarFrames"][pName]["Selected"]);
end
function SW_UpdateOptVis(reset)
local nShow = SW_Settings["QuickOptCount"];
local pre = "SW_BarFrame1_Selector_Opt";
local toSelect = 1;
if reset ~= nil then
if nShow > 0 then
if SW_Settings["BarFrames"] ~= nil and SW_Settings["BarFrames"]["SW_BarFrame1"] ~= nil then
toSelect = SW_Settings["BarFrames"]["SW_BarFrame1"]["Selected"];
if toSelect == nil then
toSelect = 1;
end
end
if toSelect > nShow then
SW_SelOpt(getglobal(pre..nShow));
end
else
SW_SelOpt(getglobal(pre.."1"));
end
end
for i= 1, SW_OPT_COUNT do
if i <= nShow then
getglobal(pre..i):Show();
else
getglobal(pre..i):Hide();
end
end
end
function SW_SelectFilter(fName)
getglobal("SW_Filter_NPC"):SetChecked(0);
getglobal("SW_Filter_PC"):SetChecked(0);
getglobal("SW_Filter_Group"):SetChecked(0);
getglobal("SW_Filter_EverGroup"):SetChecked(0);
getglobal("SW_Filter_None"):SetChecked(0);
getglobal(fName):SetChecked(1);
end
function SW_GetInfoSettings(infoNr)
if SW_Settings["InfoSettings"] == nil then
SW_Settings["InfoSettings"] = {}
end
local iS = SW_Settings["InfoSettings"][infoNr];
if iS == nil then
SW_Settings["InfoSettings"][infoNr] = {}
iS = SW_Settings["InfoSettings"][infoNr];
for k,v in pairs(SW_DefaultBar) do
if type(v) ~= "table" then
iS[k] = v;
else
iS[k] = {};
for si, sv in ipairs(v) do
table.insert(iS[k], sv);
end
end
end
else
-- 1.4.2 merging removed bar width and adden colum count
if iS["COLC"] == nil then
iS["BW"] = nil;
iS["COLC"] = 1;
end
end
return iS;
end
-- 1.5 added pausing of data collection
function SW_ToggleRunning(doCollection)
if SW_Settings["SYNCLastChan"]~=nil and SW_SyncCheckInChan(SW_Settings["SYNCLastChan"]) then
doCollection = true;
end
local chkRunnig = getglobal("SW_OptChk_Running");
local stateChanged = (doCollection ~= SW_Settings["IsRunning"]);
if doCollection then
chkRunnig:SetChecked(1);
SW_Settings["IsRunning"] = true;
else
chkRunnig:SetChecked(0);
SW_Settings["IsRunning"] = false;
end
if stateChanged then
if (doCollection) then
-- turn on stuff
SW_UnpauseEvents();
else
-- turn off stuff
SW_PauseEvents();
-- stop CastTrack Pending
SW_Timed_Calls:StopPending();
-- stop DPS timer
SW_CombatTimeInfo.awaitingStart = false;
SW_CombatTimeInfo.awaitingEnd = false;
end
end
end
function SW_UpdateColor(pName)
local bs = SW_Bars[pName];
local barSettings = SW_GetBarSettings(pName);
local bc = barSettings["BC"];
local bfc = barSettings["BFC"];
local oc = barSettings["OC"];
local selOpt = SW_Settings["BarFrames"][pName]["Selected"];
local b = getglobal(pName.."_Selector_Opt"..selOpt);
-- old version check
if oc == nil or (oc[1] == 1 and oc[2] == 0 and oc[3] == 0 and oc[4] == 1) then
oc = SW_Settings["Colors"]["TitleBars"]
end
b.NormalT:SetVertexColor(unpack(oc));
b.HighlightT:SetVertexColor(unpack(oc));
for i,b in ipairs(bs) do
getglobal(b:GetName().."_Texture"):SetVertexColor(bc[1],bc[2],bc[3],bc[4]);
getglobal(b:GetName().."_Text"):SetVertexColor(bfc[1],bfc[2],bfc[3],bfc[4]);
getglobal(b:GetName().."_TextVal"):SetVertexColor(bfc[1],bfc[2],bfc[3],bfc[4]);
end
end
function SW_BarsLayout(pName, changeAll)
local bs = SW_Bars[pName];
if bs == nil then return; end
local bSet = SW_GetBarSettings(pName);
local startX, startY, fWidth, fHeight;
local bHeight, bWidth, fontSize;
local colPos=1; local rowPos=1;
local colCount=bSet["COLC"];
local oTmp;
local posX = 0;
local posY = 0;
local oP = getglobal(pName);
local changeWidth = false;
local changeHeight = false;
local changeFont = false;
startX = oP.swoBarX;
startY = oP.swoBarY;
fWidth = oP:GetWidth();
fHeight = oP:GetHeight();
bAutoWidth = math.floor(((fWidth - 10 - ((colCount - 1) * SW_BARSEPX)) / colCount));
for i,b in ipairs(bs) do
if oP.lastTexture == nil or oP.lastTexture ~= bSet["BT"] or changeAll then
b:SetStatusBarTexture("Interface\\AddOns\\SW_Stats\\images\\b"..bSet["BT"]);
end
if i == 1 then
fontSize = b:GetFontSize();
if fontSize ~= bSet["BFS"] or changeAll then
fontSize = bSet["BFS"];
b:SetFontSize(fontSize);
changeFont = true;
end
bHeight = b:GetHeight();
if bHeight ~= bSet["BH"] or changeAll then
bHeight = bSet["BH"];
b:SetHeight(bHeight);
changeHeight = true;
end
bWidth = b:GetWidth();
if bWidth ~= bAutoWidth or changeAll then
bWidth = bAutoWidth;
b:SetWidth(bWidth);
changeWidth = true;
end
b:Show();
b:SetPoint("TOPLEFT",pName,"TOPLEFT",startX,startY);
--colCount = math.floor(((fWidth - 10) / (SW_BARSEPX + bWidth)));
rowCount = math.floor(((fHeight - 30) / (SW_BARSEPY + bHeight)));
rowPos = rowPos + 1;
b.canBeSeen = true;
else
if rowPos > rowCount then
rowPos = 1;
colPos = colPos + 1;
end
posX = ((colPos -1) * SW_BARSEPX) + startX + ((colPos -1) * bWidth);
posY = startY -(((rowPos -1) * SW_BARSEPY) + ((rowPos -1) * bHeight));
-- update
if changeWidth then
b:SetWidth(bWidth);
end
if changeHeight then
b:SetHeight(bHeight);
end
if changeFont then
b:SetFontSize(fontSize);
end
b:SetPoint("TOPLEFT",pName,"TOPLEFT",posX,posY);
rowPos = rowPos + 1;
if posX + bWidth > fWidth then
b:Hide();
b.canBeSeen = false;
else
b:Show();
b.canBeSeen = true;
end
end
end
if changeAll then
SW_UpdateColor(pName);
end
--this forces the ui to create new font objects -> text is clear
if changeFont then
local tmpScale = oP:GetScale();
oP:SetScale(tmpScale + 0.01);
oP:SetScale(tmpScale);
end
oP.lastTexture = bSet["BT"];
end
function SW_OptKey(num)
if not getglobal("SW_BarFrame1"):IsVisible() then
getglobal("SW_BarFrame1"):Show()
end
SW_SelOpt(getglobal("SW_BarFrame1_Selector_Opt"..num));
end
function SW_BarLayoutRegisterd()
for f,_ in pairs(SW_Bars) do
SW_BarsLayout(f);
SW_UpdateColor(f);
SW_OptUpdateText(f);
end
end
function SW_BarLayoutRegisterdOnResize()
for f,_ in pairs(SW_Bars) do
if getglobal(f).isResizing then
SW_BarsLayout(f);
end
end
end
function SW_InitBarFrameBar(b)
local scTarget = b:GetName().."_Texture";
getglobal(scTarget):SetVertexColor(0,0.8,0,1);
b:SetMinMaxValues(0,100);
b:SetValue(100);
SW_BarRegister(this);
b.LText = getglobal(b:GetName().."_Text");
b.RText = getglobal(b:GetName().."_TextVal");
b.SelfBar = this;
b.canBeSeen = false;
function b:SetBarText(text)
if text == nil then
self.LText:SetText(" ");
self.SelfBar:Hide();
else
self.LText:SetText(text);
self.SelfBar:Show();
end
end
function b:SetValText(text)
self.RText:SetText(text);
end
function b:GetFontSize()
return math.floor(self.LText:GetHeight() + 0.5);
end
function b:SetFontSize(h)
-- this distorts text check SW_BarsLayout() for fix
self.LText:SetTextHeight(h);
self.RText:SetTextHeight(h);
end
end
function SW_SetBarColor(what)
local R,G,B = ColorPickerFrame:GetColorRGB();
local A = 1 - OpacitySliderFrame:GetValue();
local bfc;
if what == "DIRECT" then
bfc = ColorPickerFrame.SWColorTable
else
local barSettings = SW_GetBarSettings(ColorPickerFrame.SWBarFrame);
bfc = barSettings[what];
end
bfc[1] = R; bfc[2] = G; bfc[3] = B; bfc[4] = A;
if what == "DIRECT" then
if ColorPickerFrame.SWCallOnUpdate then
ColorPickerFrame.SWCallOnUpdate(bfc);
end
else
SW_UpdateColor(ColorPickerFrame.SWBarFrame);
end
if ColorPickerFrame.SWCSName ~= nil then
getglobal(ColorPickerFrame.SWCSName):SetColor(bfc);
end
end
function SW_CancelBarColor(oldVals, what)
local bfc;
if what == "DIRECT" then
bfc = ColorPickerFrame.SWColorTable
else
local barSettings = SW_GetBarSettings(ColorPickerFrame.SWBarFrame);
bfc = barSettings[what];
end
bfc[1] = oldVals[1]; bfc[2] = oldVals[2];
bfc[3] = oldVals[3]; bfc[4] = oldVals[4];
if what == "DIRECT" then
if ColorPickerFrame.SWCallOnUpdate then
ColorPickerFrame.SWCallOnUpdate(bfc);
end
else
SW_UpdateColor(ColorPickerFrame.SWBarFrame);
end
if ColorPickerFrame.SWCSName ~= nil then
getglobal(ColorPickerFrame.SWCSName):SetColor(bfc);
end
end
-- 1.5.3 TODO Low Prio I should redo this sometime the color picker thing is getting messy
-- probably could just reduce it to "DIRECT" color and callOnUpdate
function SW_DoColorPicker(targetFrame, what, csName, callOnUpdate)
if ColorPickerFrame:IsVisible() then return; end
local bfc;
if what == "DIRECT" then
bfc = targetFrame;
ColorPickerFrame.SWBarFrame = "SW_BarFrame1";
ColorPickerFrame.SWColorTable = targetFrame;
ColorPickerFrame.SWCallOnUpdate = callOnUpdate;
else
local barSettings = SW_GetBarSettings(targetFrame);
bfc = barSettings[what];
if bfc == nil then
barSettings[what] = {1,0,0,1};
bfc = barSettings[what];
end
if bfc[1]==1 and bfc[2]==0 and bfc[3]==0 and bfc[4]==1 then
bfc = SW_Settings["Colors"]["TitleBars"];
end
ColorPickerFrame.SWBarFrame = targetFrame;
ColorPickerFrame.SWColorTable = nil;
end
ColorPickerFrame.SWCSName = csName;
ColorPickerFrame.opacityFunc = function() SW_SetBarColor(what); end
ColorPickerFrame.func = function() SW_SetBarColor(what); end
ColorPickerFrame.cancelFunc = function(oldVals) SW_CancelBarColor(oldVals, what); end
ColorPickerFrame.hasOpacity = true;
ColorPickerFrame.opacity = 1 - bfc[4];
ColorPickerFrame.previousValues = {bfc[1], bfc[2], bfc[3], bfc[4]};
ColorPickerFrame:SetColorRGB(bfc[1], bfc[2], bfc[3]);
ColorPickerFrame:Show();
end
function SW_UpdateClassColorAlpha(newColor)
local alpha = newColor[4];
SW_Settings["Colors"]["DRUID"][4] = alpha;
SW_Settings["Colors"]["HUNTER"][4] = alpha;
SW_Settings["Colors"]["MAGE"][4] = alpha;
SW_Settings["Colors"]["PALADIN"][4] = alpha;
SW_Settings["Colors"]["PRIEST"][4] = alpha;
SW_Settings["Colors"]["ROGUE"][4] = alpha;
SW_Settings["Colors"]["SHAMAN"][4] = alpha;
SW_Settings["Colors"]["WARLOCK"][4] = alpha;
SW_Settings["Colors"]["WARRIOR"][4] = alpha;
end
function SW_UpdateFrameBackdrops(newColor)
local tmpTarget;
for i, k in ipairs(SW_Registerd_BF_Titles) do
tmpTarget = getglobal(k):GetParent();
tmpTarget:SetBackdropBorderColor(unpack(newColor));
end
local tmpCol = {unpack(newColor)};
tmpCol[4] = 1;
--for SW_TabbedFrameInfo[pName][oTab:GetName()]
for k, v in pairs(SW_TabbedFrameInfo) do
for k2, v2 in pairs(v) do
tmpTarget = getglobal(k2);
if tmpTarget.IsSelectedTab then
tmpTarget:SetBackdropBorderColor(unpack(tmpCol));
getglobal(k2.."_Text"):SetTextColor(unpack(tmpCol));
end
end
end
end
function SW_LockFrames(isLocked)
if isLocked then
SW_Settings["BFLocked"] = true;
else
SW_Settings["BFLocked"] = nil;
end
for i, k in ipairs(SW_Registerd_BF_Titles) do
getglobal(k):GetParent().isLocked = isLocked;
end
end
function SW_UpdateMainWinBack(newColor)
SW_BarFrame1:SetBackdropColor(unpack(SW_Settings["Colors"]["MainWinBack"]))
end
function SW_UpdateTitleColor(newColor)
local tmpTarget;
local regEx = "SW_BarFrame1_Selector_Opt(%d+)"
local oc;
for i, k in ipairs(SW_Registerd_BF_Titles) do
tmpTarget = getglobal(k .. "_Texture");
tmpTarget:SetVertexColor(unpack(newColor));
end
for i, k in ipairs(SW_Registered_BF_TitleButtons) do
s,e, id = string.find(k, regEx);
oc = nil;
if id ~= nil then
id = tonumber(id);
if SW_Settings["InfoSettings"] and SW_Settings["InfoSettings"][id] then
oc = SW_Settings["InfoSettings"][id]["OC"];
end
if not oc or (oc[1] == 1 and oc[2] == 0 and oc[3] == 0 and oc[4] == 1) then
--oc = SW_Settings["Colors"]["TitleBars"]
tmpTarget = getglobal(k);
tmpTarget.NormalT:SetVertexColor(unpack(newColor));
tmpTarget.HighlightT:SetVertexColor(unpack(newColor));
end
else
tmpTarget = getglobal(k);
tmpTarget.NormalT:SetVertexColor(unpack(newColor));
tmpTarget.HighlightT:SetVertexColor(unpack(newColor));
end
end
end
function SW_UpdateTitleTextColor(newColor)
local tmpTarget;
local regEx = "SW_BarFrame1_Selector_Opt(%d+)"
local id = 0;
for i, k in ipairs(SW_Registerd_BF_Titles) do
tmpTarget = getglobal(k .. "_Text");
tmpTarget:SetVertexColor(unpack(newColor));
end
local barSettings = SW_GetBarSettings("SW_BarFrame1");
for i, k in ipairs(SW_Registered_BF_TitleButtons) do
s,e, id = string.find(k, regEx)
if not id then
tmpTarget = getglobal(k);
tmpTarget.NormalText:SetVertexColor(unpack(newColor));
tmpTarget.NormalText:SetVertexColor(unpack(newColor));
end
end
end
function SW_BarsCheckFilters(name, SF, CF, PF)
local selFil = "";
local charFil = "";
local cType = nil;
local petFil = nil;
if PF == nil then
petFil = getglobal("SW_PF_Inactive").petFil;
else
petFil = getglobal(PF).petFil;
end
-- only if the pet filters are set to inactive
-- add pets here, else they are handeled after this
if petFil.Inactive then
petFil = true;
else
if SW_PetInfo["PET_OWNER"][name] == nil then
-- this isn't, and never was a pet
petFil = true;
else
if SW_S_Details[name] ~= nil and SW_S_Details[name]["UTYPE"] == "GPET" then
petFil = false;
else
petFil = true;
end
end
end
if not petFil then return false; end
if SW_S_Details[name] == nil then return false; end
if SF == nil then
selFil = getglobal("SW_Filter_None").SW_Filter;
else
selFil = getglobal(SF).SW_Filter;
end
if CF == nil then
charFil = SW_ClassFilters[1]
else
charFil = SW_ClassFilters[ CF ]
end
if selFil == "NONE" and charFil == "NONE" then
return true;
end
if selFil == "NONE" then
selFil = true;
else
--1.5 filters added EGROUP types added GPET GPC
if selFil == "GROUP" then
if SW_Friends[name] == nil then
selFil = SW_PetHasOwner(name);
else
selFil = true;
end
elseif selFil == "EGROUP" then
cType = SW_S_Details[name]["UTYPE"];
selFil = (cType == "GPC" or cType == "GPET");
elseif selFil == "PC" then
cType = SW_S_Details[name]["UTYPE"];
selFil = (cType == "GPC" or cType == "GPET" or cType == "PC");
else
selFil = (selFil == SW_S_Details[name]["UTYPE"]);
end
end
if charFil == "NONE" then
charFil = true;
else
charFil = (charFil == SW_S_Details[name]["CLASSE"]);
end
if selFil and charFil then
return true;
else
return false;
end
end
--SW_EntityBarColor
function SW_EBC(ent, bs)
if bs["UCC"] then
if SW_Friends[ent] == nil or SW_Friends[ent]["CLASSE"] == nil then
if SW_S_Details[ent] == nil or SW_S_Details[ent]["CLASSE"] == nil then
return bs["BC"];
else
return SW_Settings["Colors"][ SW_S_Details[ent]["CLASSE"] ];
end
else
return SW_Settings["Colors"][ SW_S_Details[ent]["CLASSE"] ];
end
else
return nil;
end
end
function SW_AddLatePetInfo(vals, petFil, type, index, bSet)
local SF = bSet["SF"];
local CF = bSet["CF"];
local PF = "SW_PF_Inactive";
if petFil.Active then
for k,v in pairs(SW_PetInfo["PET_OWNER"]) do
if SW_BarsCheckFilters(k, SF, CF, PF) then
tmpVal = v[type][index];
if tmpVal >0 then
table.insert(vals, {SW_STR_PET_PREFIX..k,tmpVal,SW_EBC(k,bSet)});
end
end
end
elseif petFil.Current then
-- for EGROUP filter just do the same as active, it just makes more sense
-- from a user perspective current pets in in ever group..oO nah
local selFil;
if SF ~= nil then
selFil = getglobal(SF).SW_Filter;
end
if selFil == "EGROUP" then
for k,v in pairs(SW_PetInfo["PET_OWNER"]) do
if SW_BarsCheckFilters(k, SF, CF, PF) then
tmpVal = v[type][index];
if tmpVal >0 then
table.insert(vals, {SW_STR_PET_PREFIX..k,tmpVal,SW_EBC(k,bSet)});
end
end
end
else
for k,v in pairs(SW_PetInfo["PET_OWNER"]) do
if SW_PetHasOwner(k) then
tmpVal = v[type][index];
if tmpVal > 0 then
table.insert(vals, {SW_STR_PET_PREFIX..k,tmpVal,SW_EBC(k,bSet)});
end
end
end
end
elseif petFil.VPP then
for k,v in pairs(SW_PetInfo["OWNER_PET"]) do
if SW_BarsCheckFilters(k, SF, CF, PF) then
tmpVal = v[type][index];
if tmpVal > 0 then
table.insert(vals, {SW_STR_VPP_PREFIX..k,tmpVal,SW_EBC(k,bSet)});
end
end
end
elseif petFil.VPR then
tmpVal = 0;
for k,v in pairs(SW_PetInfo["PET_OWNER"]) do
if SW_BarsCheckFilters(k, SF, CF, PF) then
tmpVal = tmpVal + v[type][index];
end
end
if tmpVal >0 then
table.insert(vals, {SW_STR_VPR,tmpVal,SW_EBC(k,bSet)});
end
--elseif petFil.Ignore then -- well nothing to do here
end
end
function SW_GetDeathInfo(SF, CF, PF, bSet)
local vals = {};
local tmpVal;
-- ignore pet filter here
for k,v in pairs(SW_S_Details) do
tmpVal = v[SW_PRINT_ITEM_DEATHS];
if tmpVal ~= nil then
if SW_BarsCheckFilters(k, SF, CF, "SW_PF_Inactive") then
table.insert(vals, {k,tmpVal,SW_EBC(k,bSet)});
end
end
end
table.sort(vals,
function(a,b)
return a[2] > b[2];
end);
return vals;
end
function SW_GetDmgInfo(SF, CF, PF, bSet)
local vals = {};
local tmpVal;
local petFil = nil;
if PF == nil then
petFil = getglobal("SW_PF_Inactive").petFil;
else
petFil = getglobal(PF).petFil;
end
for k,v in pairs(SW_S_Details) do
if v[SW_PRINT_ITEM_TOTAL_DONE] ~= nil then
tmpVal = v[SW_PRINT_ITEM_TOTAL_DONE][1];
if SW_BarsCheckFilters(k, SF, CF, PF) then
if (petFil.MM or petFil.MB) and SW_PetInfo["OWNER_PET"][k] ~= nil then
tmpVal = tmpVal + SW_PetInfo["OWNER_PET"][k][SW_PRINT_ITEM_TOTAL_DONE][1];
end
if tmpVal >0 then
table.insert(vals, {k,tmpVal,SW_EBC(k,bSet)});
end
end
end
end
if petFil.latePets then
SW_AddLatePetInfo(vals, petFil, SW_PRINT_ITEM_TOTAL_DONE, 1, bSet);
end
table.sort(vals,
function(a,b)
return a[2] > b[2];
end);
return vals;
end
function SW_GetDmgInfoDPS(SF, CF, PF, bSet)
local vals = {};
local tmpVal;
local petFil = nil;
if PF == nil then
petFil = getglobal("SW_PF_Inactive").petFil;
else
petFil = getglobal(PF).petFil;
end
for k,v in pairs(SW_S_Details) do
if v[SW_PRINT_ITEM_TOTAL_DONE] ~= nil then
tmpVal = v[SW_PRINT_ITEM_TOTAL_DONE][1];
if SW_BarsCheckFilters(k, "SW_Filter_EverGroup", CF, PF) then
if (petFil.MM or petFil.MB) and SW_PetInfo["OWNER_PET"][k] ~= nil then
tmpVal = tmpVal + SW_PetInfo["OWNER_PET"][k][SW_PRINT_ITEM_TOTAL_DONE][1];
end
if tmpVal >0 then
table.insert(vals, {k,tmpVal,SW_EBC(k,bSet)});
end
end
end
end
if petFil.latePets then
SW_AddLatePetInfo(vals, petFil, SW_PRINT_ITEM_TOTAL_DONE, 1, bSet);
end
local secs = SW_RPS.currentSecs + SW_RPS.totalSecs;
for k, v in ipairs(vals) do
--SW_printStr(v[2]..".."..secs);
v[2] = math.floor( (v[2] / secs) * 100 + 0.5) / 100;
end
table.sort(vals,
function(a,b)
return a[2] > b[2];
end);
return vals;
end
function SW_GetDmgGotInfo(SF, CF, PF, bSet)
local vals = {};
local tmpVal;
local petFil = nil;
if PF == nil then
petFil = getglobal("SW_PF_Inactive").petFil;
else
petFil = getglobal(PF).petFil;
end
for k,v in pairs(SW_S_Details) do
if v[SW_PRINT_ITEM_RECIEVED] ~= nil then
tmpVal = v[SW_PRINT_ITEM_RECIEVED][1];
if SW_BarsCheckFilters(k, SF, CF, PF) then
if (petFil.MR or petFil.MB) and SW_PetInfo["OWNER_PET"][k] ~= nil then
tmpVal = tmpVal + SW_PetInfo["OWNER_PET"][k][SW_PRINT_ITEM_RECIEVED][1];
end
if tmpVal >0 then
table.insert(vals, {k,tmpVal,SW_EBC(k,bSet)});
end
end
end
end
if petFil.latePets then
SW_AddLatePetInfo(vals, petFil, SW_PRINT_ITEM_RECIEVED, 1, bSet);
end
table.sort(vals,
function(a,b)
return a[2] > b[2];
end);
return vals;
end
function SW_GetHealGotInfo(SF, CF, PF, bSet)
local vals = {};
local tmpVal;
local petFil = nil;
if PF == nil then
petFil = getglobal("SW_PF_Inactive").petFil;
else
petFil = getglobal(PF).petFil;
end
for k,v in pairs(SW_S_Details) do
if v[SW_PRINT_ITEM_RECIEVED] ~= nil then
tmpVal = v[SW_PRINT_ITEM_RECIEVED][2];
if SW_BarsCheckFilters(k, SF, CF, PF) then
if (petFil.MR or petFil.MB) and SW_PetInfo["OWNER_PET"][k] ~= nil then
tmpVal = tmpVal + SW_PetInfo["OWNER_PET"][k][SW_PRINT_ITEM_RECIEVED][2];
end
if tmpVal >0 then
table.insert(vals, {k,tmpVal,SW_EBC(k,bSet)});
end
end
end
end
if petFil.latePets then
SW_AddLatePetInfo(vals, petFil, SW_PRINT_ITEM_RECIEVED, 2, bSet);
end
table.sort(vals,
function(a,b)
return a[2] > b[2];
end);
return vals;
end
function SW_GetDamageManaInfo(SF, CF, PF, bSet)
local vals = {};
local ratio;
local dmg;
for k,v in pairs(SW_S_Details) do
if SW_S_ManaUsage[k] ~= nil and SW_S_ManaUsage[k][1] > 0 then
if SW_BarsCheckFilters(k, SF, CF, "SW_PF_Inactive") then
-- filter out hunters
-- hm would have to filter out palas and shamans aswell
--if v["CLASSE"] ~= "HUNTER" then
if v[SW_PRINT_ITEM_TOTAL_DONE] ~= nil then
dmg = v[SW_PRINT_ITEM_TOTAL_DONE][1];
if dmg > 0 then
ratio = math.floor( (dmg / SW_S_ManaUsage[k][1]) * 1000 + 0.5) / 1000;
table.insert(vals, {k,ratio,SW_EBC(k,bSet)});
end
end
--end
end
end
end
table.sort(vals,
function(a,b)
return a[2] > b[2];
end);
return vals;
end
function SW_GetEffectiveHealManaInfo(SF, CF, PF, bSet)
local vals = {};
local eHeal;
local ratio;
for k,v in pairs(SW_S_Details) do
if SW_S_ManaUsage[k] ~= nil and SW_S_ManaUsage[k][2] > 0 then
if SW_BarsCheckFilters(k, SF, CF, "SW_PF_Inactive") then
eHeal = SW_GetEffectiveHealInfoFor(k);
if eHeal > 0 then
ratio = math.floor( (eHeal / SW_S_ManaUsage[k][2]) * 1000 + 0.5) / 1000;
table.insert(vals, {k,ratio,SW_EBC(k,bSet)});
end
end
end
end
table.sort(vals,
function(a,b)
return a[2] > b[2];
end);
return vals;
end
function SW_GetEffectiveHealInfoFor(name)
local tmpVal;
local eHeal;
local k = name;
local v = SW_S_Details[k];
if v == nil then
return 0;
end
tmpVal = v[SW_PRINT_ITEM_TOTAL_DONE][2];
if tmpVal >0 then
if SW_S_Healed[k] ~= nil and SW_S_Healed[k][SW_OVERHEAL] ~= nil then
eHeal = tmpVal - SW_S_Healed[k][SW_OVERHEAL];
if eHeal > 0 then
return eHeal;
end
else
return tmpVal;
end
end
return 0;
end
function SW_GetEffectiveHealInfo(SF, CF, PF, bSet)
local vals = {};
local tmpVal;
local eHeal;
for k,v in pairs(SW_S_Details) do
if v[SW_PRINT_ITEM_TOTAL_DONE] ~= nil then
tmpVal = v[SW_PRINT_ITEM_TOTAL_DONE][2];
if SW_BarsCheckFilters(k, SF, CF, "SW_PF_Inactive") then
if tmpVal >0 then
if SW_S_Healed[k] ~= nil and SW_S_Healed[k][SW_OVERHEAL] ~= nil then
eHeal = tmpVal - SW_S_Healed[k][SW_OVERHEAL];
if eHeal > 0 then
table.insert(vals, {k,eHeal,SW_EBC(k,bSet)});
end
else
table.insert(vals, {k,tmpVal,SW_EBC(k,bSet)});
end
end
end
end
end
table.sort(vals,
function(a,b)
return a[2] > b[2];
end);
return vals;
end
function SW_GetHealInfo(SF, CF, PF, bSet)
local vals = {};
local tmpVal;
local petFil = nil;
if PF == nil then
petFil = getglobal("SW_PF_Inactive").petFil;
else
petFil = getglobal(PF).petFil;
end
for k,v in pairs(SW_S_Details) do
if v[SW_PRINT_ITEM_TOTAL_DONE] ~= nil then
tmpVal = v[SW_PRINT_ITEM_TOTAL_DONE][2];
if SW_BarsCheckFilters(k, SF, CF, PF) then
if (petFil.MM or petFil.MB) and SW_PetInfo["OWNER_PET"][k] ~= nil then
tmpVal = tmpVal + SW_PetInfo["OWNER_PET"][k][SW_PRINT_ITEM_TOTAL_DONE][2];
end
if tmpVal >0 then
table.insert(vals, {k,tmpVal,SW_EBC(k,bSet)});
end
end
end
end
if petFil.latePets then
SW_AddLatePetInfo(vals, petFil, SW_PRINT_ITEM_TOTAL_DONE, 2, bSet);
end
table.sort(vals,
function(a,b)
return a[2] > b[2];
end);
return vals;
end
function SW_GetOverHealInfo(SF, CF, PF, bSet)
local vals = {};
local tmpVal;
local pOh;
for k,v in pairs(SW_S_Details) do
if v[SW_PRINT_ITEM_TOTAL_DONE] ~= nil then
tmpVal = v[SW_PRINT_ITEM_TOTAL_DONE][2];
if SW_BarsCheckFilters(k, SF, CF, "SW_PF_Inactive") then
if tmpVal >0 then
if SW_S_Healed[k] ~= nil and SW_S_Healed[k][SW_OVERHEAL] then
pOh = math.floor((SW_S_Healed[k][SW_OVERHEAL]/ tmpVal) * 1000 +0.5)/10;
table.insert(vals, {k.." ("..pOh.."%)",SW_S_Healed[k][SW_OVERHEAL], SW_EBC(k,bSet)});
end
end
end
end
end
table.sort(vals,
function(a,b)
return a[2] > b[2];
end);
return vals;
end
function SW_GetHealInfoHealer(whoName)
local vals = {};
local who = SW_S_Healed[ whoName ];
if who == nil then return {}; end;
local bSet = SW_GetBarSettings("SW_BarFrame1");
for k,v in pairs(who) do
if v > 0 and k ~= SW_OVERHEAL then
table.insert(vals, {k,v,SW_EBC(k,bSet)});
end
end
table.sort(vals,
function(a,b)
return a[2] > b[2];
end);
return vals;
end
function SW_GetDetailsPerTick(whoName)
local who = SW_S_Details[ whoName ];
local val ="";
local vMax = "";
if who == nil then return {}; end;
local vals = {};
local dCol = SW_Settings["Colors"]["Damage"];
local hCol = SW_Settings["Colors"]["Heal"];
for k,v in pairs(who) do
if k == SW_PRINT_ITEM_RECIEVED then
elseif k == SW_PRINT_ITEM_TYPE then
elseif k == SW_PRINT_ITEM_TOTAL_DONE then
elseif k == "UTYPE" then
elseif k == "CLASSE" then
elseif k == SW_PRINT_ITEM_DEATHS then
else
if v[1] > 0 then
table.insert(vals, {k.." "..SW_STR_EVENTCOUNT..v[4].." - "..(math.floor((v[6]/v[4]) *1000 + 0.5)/10).."%",math.floor((v[1]/v[4])*10)/10,dCol,1});
end
if v[2] > 0 then
table.insert(vals, {k.." "..SW_STR_EVENTCOUNT..v[4].." - "..(math.floor((v[7]/v[4]) *1000 + 0.5)/10).."%",math.floor((v[2]/v[4])*10)/10,hCol,2});
end
end
end
table.sort(vals,
function(a,b)
if a[4] == b[4] then
return a[2] > b[2];
else
return a[4] < b[4];
end
end);
return vals;
end
function SW_PowerGainInfo(whoName)
local who = SW_S_Details[ whoName ];
local val ="";
local vMax = "";
if who == nil then return {}; end;
local bSet = SW_GetBarSettings("SW_BarFrame1");
local vals = {};
for k,v in pairs(who) do
if k == SW_PRINT_ITEM_RECIEVED then
-- SW_printStr(LIGHTYELLOW_FONT_COLOR_CODE..k..FONT_COLOR_CODE_CLOSE..": "..string.format(SW_PRINT_INFO_RECIEVED, v[1], v[2]), 1);
elseif k == SW_PRINT_ITEM_TYPE then
-- ignore in this printout
elseif k == SW_PRINT_ITEM_TOTAL_DONE then
--ignored for now
elseif k == "UTYPE" then
--PC or NPC ignore
elseif k == "CLASSE" then
elseif k == SW_PRINT_ITEM_DEATHS then
else
if v[1] == 0 and v[2] == 0 and v[4] ~= 0 then
table.insert(vals, {k,v[4],SW_EBC(k,bSet)});
end
end
end
table.sort(vals,
function(a,b)
if a[4] == b[4] then
return a[2] > b[2];
else
return a[4] < b[4];
end
end);
return vals;
end
function SW_DecurseCountInfo(SF, CF, PF, bSet)
local vals = {};
for k,v in pairs(SW_S_SpellInfo) do
if v[SW_DECURSEDUMMY] ~= nil and v[SW_DECURSEDUMMY]["total"] ~= nil then
if SW_BarsCheckFilters(k, SF, CF, "SW_PF_Inactive") then
table.insert(vals, {k,v[SW_DECURSEDUMMY]["total"],SW_EBC(k,bSet)});
end
end
end
table.sort(vals,
function(a,b)
return a[2] > b[2];
end);
return vals;
end
function SW_GetManaRatio(whoName)
if SW_S_SpellInfo[SW_SELF_STRING] == nil or whoName ~= SW_SELF_STRING then
return {};
end
local who = SW_S_Details[ whoName ];
local val ="";
local vMax = "";
if who == nil then return {}; end;
local vals = {};
local dCol = SW_Settings["Colors"]["Damage"];
local hCol = SW_Settings["Colors"]["Heal"];
local manaUsed = 0;
local ratio = 0;
for k,v in pairs(who) do
if k == SW_PRINT_ITEM_RECIEVED then
-- SW_printStr(LIGHTYELLOW_FONT_COLOR_CODE..k..FONT_COLOR_CODE_CLOSE..": "..string.format(SW_PRINT_INFO_RECIEVED, v[1], v[2]), 1);
elseif k == SW_PRINT_ITEM_TYPE then
-- ignore in this printout
elseif k == SW_PRINT_ITEM_TOTAL_DONE then
-- ignored for now
elseif k == "UTYPE" then
--PC or NPC ignore
elseif k == "CLASSE" then
elseif k == SW_PRINT_ITEM_DEATHS then
else
if SW_S_SpellInfo[SW_SELF_STRING][k] ~= nil then
manaUsed = SW_S_SpellInfo[SW_SELF_STRING][k][2];
if manaUsed > 0 then
if v[1] > 0 then
ratio = math.floor( (v[1] / manaUsed) * 100 + 0.5) / 100;
table.insert(vals, {k.." #"..SW_S_SpellInfo[SW_SELF_STRING][k][1],ratio,dCol,1});
end
if v[2] > 0 then
ratio = math.floor( (v[2] / manaUsed) * 100 + 0.5) / 100;
table.insert(vals, {k.." #"..SW_S_SpellInfo[SW_SELF_STRING][k][1],ratio,hCol,2});
--table.insert(vals, {k.." ("..v[3]..")",v[2],hCol,2});
end
end
end
end
end
table.sort(vals,
function(a,b)
if a[4] == b[4] then
return a[2] > b[2];
else
return a[4] < b[4];
end
end);
return vals;
end
function SW_GetTopHealDelta()
return SW_GetTopDelta("TOPDELTAH");
end
function SW_GetTopDmgDelta()
return SW_GetTopDelta("TOPDELTAD");
end
function SW_GetTopDelta(what)
local vals = {};
for k, v in pairs (SW_Sync_MsgTrack) do
if v[what] > 0 then
table.insert(vals, {k, v[what]});
end
end
table.sort(vals,
function(a,b)
return a[2] > b[2];
end);
return vals;
end
function SW_GetRaidPS()
local vals = {};
local dps = SW_RPS:getVals();
if dps[1] > 0 then
table.insert(vals, {SW_RDPS_STRS["CURR"], dps[1], nil});
end
if dps[2] > 0 then
table.insert(vals, {SW_RDPS_STRS["ALL"], dps[2], nil});
end
if dps[3] > 0 then
table.insert(vals, {SW_RDPS_STRS["LAST"], dps[3], nil});
end
if dps[4] and dps[4] > 0.1 then
table.insert(vals, {SW_RDPS_STRS["TOTAL"], dps[4], nil});
end
if SW_RPS.maxDPS > 0 then
table.insert(vals, {SW_RDPS_STRS["MAX"], SW_RPS.maxDPS, nil});
end
table.sort(vals,
function(a,b)
return a[2] > b[2];
end);
return vals;
end
-- 1.5.3.beta.1 note to self make this more efficient for the next data model, a good number to use in cheat protection
function SW_GetMaxHit(whoName, checkHeal)
local who = SW_S_Details[ whoName ];
local vMax = 0;
local tmpVal = 0;
if who == nil then return 0; end;
for k,v in pairs(who) do
if k == SW_PRINT_ITEM_RECIEVED then
elseif k == SW_PRINT_ITEM_TYPE then
elseif k == SW_PRINT_ITEM_TOTAL_DONE then
elseif k == "UTYPE" then
elseif k == "CLASSE" then
elseif k == SW_PRINT_ITEM_DEATHS then
else
if checkHeal then
tmpVal = v[5];
else
tmpVal = v[3];
end
if tmpVal > vMax then
vMax = tmpVal;
end
end
end
return vMax;
end
function SW_GetMaxHitList(SF, CF, PF, bSet)
local vals = {};
local tmpVal;
for k,v in pairs(SW_S_Details) do
if SW_BarsCheckFilters(k, SF, CF, "SW_PF_Inactive") then
tmpVal = SW_GetMaxHit(k);
if tmpVal > 0 then
table.insert(vals, {k,tmpVal,SW_EBC(k,bSet)})
end
end
end
table.sort(vals,
function(a,b)
return a[2] > b[2];
end);
return vals;
end
function SW_GetMaxHealList(SF, CF, PF, bSet)
local vals = {};
local tmpVal;
for k,v in pairs(SW_S_Details) do
if SW_BarsCheckFilters(k, SF, CF, "SW_PF_Inactive") then
tmpVal = SW_GetMaxHit(k, true);
if tmpVal > 0 then
table.insert(vals, {k,tmpVal,SW_EBC(k,bSet)})
end
end
end
table.sort(vals,
function(a,b)
return a[2] > b[2];
end);
return vals;
end
function SW_GetDetails(whoName)
local who = SW_S_Details[ whoName ];
local val ="";
local vMax = "";
if who == nil then return {}; end;
local vals = {};
local dCol = SW_Settings["Colors"]["Damage"];
local hCol = SW_Settings["Colors"]["Heal"];
for k,v in pairs(who) do
if k == SW_PRINT_ITEM_RECIEVED then
-- SW_printStr(LIGHTYELLOW_FONT_COLOR_CODE..k..FONT_COLOR_CODE_CLOSE..": "..string.format(SW_PRINT_INFO_RECIEVED, v[1], v[2]), 1);
elseif k == SW_PRINT_ITEM_TYPE then
-- ignore in this printout
elseif k == SW_PRINT_ITEM_TOTAL_DONE then
--ignored for now
elseif k == "UTYPE" then
--PC or NPC ignore
elseif k == "CLASSE" then
elseif k == SW_PRINT_ITEM_DEATHS then
else
if v[1] > 0 then
table.insert(vals, {k.." ("..v[3].." - "..(math.floor((v[6]/v[4]) *1000 + 0.5)/10).."%)",v[1],dCol,1});
end
if v[2] > 0 then
table.insert(vals, {k.." ("..v[5].." - "..(math.floor((v[7]/v[4]) *1000 + 0.5)/10).."%)",v[2],hCol,2});
end
end
end
-- 1.5 added pet details
who = SW_PetInfo["OWNER_PET"][whoName];
if who ~= nil then
who = who["pets"];
for k,v in pairs(who) do
if v[SW_PRINT_ITEM_TOTAL_DONE][1] > 0 then
table.insert(vals, {SW_STR_PET_PREFIX..k,v[SW_PRINT_ITEM_TOTAL_DONE][1],dCol,1});
end
if v[SW_PRINT_ITEM_TOTAL_DONE][2] > 0 then
table.insert(vals, {SW_STR_PET_PREFIX..k,v[SW_PRINT_ITEM_TOTAL_DONE][2],hCol,2});
end
end
end
table.sort(vals,
function(a,b)
if a[4] == b[4] then
return a[2] > b[2];
else
return a[4] < b[4];
end
end);
return vals;
end
function SW_GetHealInfoTarget(whoName)
local vals = {};
local tmpVal;
local bSet = SW_GetBarSettings("SW_BarFrame1");
for k,v in pairs(SW_S_Healed) do
if v[whoName] ~= nil then
table.insert(vals, {k,v[whoName], SW_EBC(k,bSet)});
end
end
table.sort(vals,
function(a,b)
return a[2] > b[2];
end);
return vals;
end
function SW_GetSchoolMadeSummary(SF, CF, PF, bSet)
local vals = {};
local tmpVal;
local summVals = {};
for k,v in pairs(SW_S_Details) do
if SW_BarsCheckFilters(k, SF, CF, "SW_PF_Inactive") then
if SW_S_Details[k][SW_PRINT_ITEM_TYPE] ~= nil then
for t,nums in pairs(SW_S_Details[k][SW_PRINT_ITEM_TYPE]) do
if summVals[t] == nil then
summVals[t] = nums[1];
else
summVals[t] = summVals[t] + nums[1];
end
end
end
end
end
for k,v in pairs(summVals) do
if v > 0 then
table.insert(vals, {k,v});
end
end
table.sort(vals,
function(a,b)
return a[2] > b[2];
end);
return vals;
end
function SW_GetSchoolGotSummary(SF, CF, PF, bSet)
local vals = {};
local tmpVal;
local summVals = {};
for k,v in pairs(SW_S_Details) do
if SW_BarsCheckFilters(k, SF, CF, "SW_PF_Inactive") then
if SW_S_Details[k][SW_PRINT_ITEM_TYPE] ~= nil then
for t,nums in pairs(SW_S_Details[k][SW_PRINT_ITEM_TYPE]) do
if summVals[t] == nil then
summVals[t] = nums[4];
else
summVals[t] = summVals[t] + nums[4];
end
end
end
end
end
for k,v in pairs(summVals) do
if v > 0 then
table.insert(vals, {k,v});
end
end
table.sort(vals,
function(a,b)
return a[2] > b[2];
end);
return vals;
end
function SW_GetSchoolMade(whoName)
local vals = {};
local tmpVal;
if SW_S_Details[whoName] == nil then return vals; end
if SW_S_Details[whoName][SW_PRINT_ITEM_TYPE] == nil then return vals; end
for k,v in pairs(SW_S_Details[whoName][SW_PRINT_ITEM_TYPE]) do
if v[1] ~= 0 then
table.insert(vals, {k,v[1]});
end
end
table.sort(vals,
function(a,b)
return a[2] > b[2];
end);
return vals;
end
function SW_GetSchoolGot(whoName)
local vals = {};
local tmpVal;
if SW_S_Details[whoName] == nil then return vals; end
if SW_S_Details[whoName][SW_PRINT_ITEM_TYPE] == nil then return vals; end
for k,v in pairs(SW_S_Details[whoName][SW_PRINT_ITEM_TYPE]) do
if v[4] ~= 0 then
table.insert(vals, {k,v[4]});
end
end
table.sort(vals,
function(a,b)
return a[2] > b[2];
end);
return vals;
end
function SW_UpdateBars()
local f = getglobal("SW_BarFrame1");
local bSet = SW_GetBarSettings("SW_BarFrame1");
local last;
local valText = "";
--1.3.1 added DPS to Window title
--1.3.2 changed this to extra counter and added an option
--SW_OptUpdateText(pName)
local selOpt = SW_Settings["BarFrames"]["SW_BarFrame1"]["Selected"];
if SW_Settings["OPT_ShowMainWinDPS"] ~= nil then
local t = getglobal ("SW_BarFrame1_Title_Text");
if SW_DPS_Dmg > 0 and SW_CombatTime > 5 then
local dps = math.floor( (SW_DPS_Dmg / SW_CombatTime) * 10 + 0.5) / 10;
local otf = bSet["OTF"];
if otf ~= nil then
t:SetText(otf.." (DPS:"..dps..")");
else
t:SetText(selOpt.." (DPS:"..dps..")");
end
else
local otf = bSet["OTF"];
if otf ~= nil then
t:SetText(otf);
else
t:SetText(selOpt);
end
end
else
local otf = bSet["OTF"];
local t = getglobal ("SW_BarFrame1_Title_Text");
if otf ~= nil then
t:SetText(otf);
else
t:SetText(selOpt);
end
end
--1.2.4 Added this to lessen the "funkyness" of filters
-- also moved "class copy" here no need to check it in SW_BarsCheckFilters
-- 1.5 added "GPC" and "GPET" pets and PCs ever in group
-- do pets first, an MC'd party member will show up as pet
-- will be overwritten when checking SW_Friends
for k,v in pairs(SW_PetInfo["PET_OWNER"]) do
if SW_S_Details[k] ~= nil then
-- don't mark MC'd mobs as gpet
if SW_S_Details[k]["UTYPE"] ~= "NPC" then
SW_S_Details[k]["UTYPE"] = "GPET";
end
if SW_S_Details[k]["CLASSE"] == nil then
SW_S_Details[k]["CLASSE"] = v["CLASSE"];
end
end
end
for k,v in pairs(SW_Friends) do
--1.5.1 added Details init for filters to work even with 0 dmg/heal
if SW_S_Details[k] == nil then
SW_S_Details[k] = {};
SW_S_Details[k][SW_PRINT_ITEM_TOTAL_DONE] = {0,0}; --first = dmg; sec = heal
SW_S_Details[k][SW_PRINT_ITEM_RECIEVED] = {0,0}; --first = dmg; sec = heal
end
SW_S_Details[k]["UTYPE"] = "GPC";
if SW_S_Details[k]["CLASSE"] == nil then
SW_S_Details[k]["CLASSE"] = SW_Friends[k]["CLASSE"];
end
end
--vals[1] = text [2]= value [3]= reserved (colorBar) [4] sort order num
if f:IsVisible() then
local vals;
local total = {};
if bSet["IN"] == nil then
bSet["IN"] = 1;
end
local inf = SW_InfoTypes[ bSet["IN"] ];
if inf["varType"] == "TEXT" then
vals = inf["f"](bSet["TV"]);
elseif inf["varType"] == "SELF" then
vals = inf["f"](SW_SELF_STRING);
elseif inf["varType"] == "PETONLY" then
vals = inf["f"](nil, nil, bSet["PF"], bSet);
else
vals = inf["f"](bSet["SF"], bSet["CF"], bSet["PF"], bSet);
end
if bSet["ShowPercent"] ~= nil then
for i, v in ipairs(vals) do
if v[4] == nil then
v[4] = 1;
end
if total[ v[4] ] == nil then total[ v[4] ] = 0; end
total[ v[4] ] = total[ v[4] ] + v[2];
end
end
if vals[1] == nil then
for i, v in ipairs(SW_Bars["SW_BarFrame1"]) do
if not v.toWide and v.canBeSeen then
v:SetValText(" ");
v:SetValue(100);
v:SetBarText();
end
end
return;
end
local p1 = vals[1][2] / 100;
local lastSortIndex = vals[1][4];
for i, v in ipairs(SW_Bars["SW_BarFrame1"]) do
if not v.toWide and v.canBeSeen then
if vals[i] ~= nil then
if bSet["ShowRank"] ~= nil then
v:SetBarText(i.." "..vals[i][1]);
else
v:SetBarText(vals[i][1]);
end
if bSet["ShowNumber"] ~= nil then
valText = vals[i][2];
else
valText = "";
end
if bSet["ShowPercent"] ~= nil then
v:SetValText(valText.." ("..(math.floor((vals[i][2]/total[ vals[i][4] ]) *1000 + 0.5)/10).."%)");
else
v:SetValText(valText);
end
if lastSortIndex ~= nil then
if vals[i][4] ~= lastSortIndex then
lastSortIndex = vals[i][4];
p1 = vals[i][2] / 100;
end
end
v:SetValue( vals[i][2] /p1);
if vals[i][3] ~= nil then
getglobal(v:GetName().."_Texture"):SetVertexColor(unpack(vals[i][3]));
end
else
v:SetBarText();
end
end
end
end
end
function SW_SendRepLine(outStr, sVar)
local sTarget = getglobal(SW_Settings["RepTarget"]).SW_TargetChat;
if sTarget == "WHISPER" or sTarget == "CHANNEL" then
if sVar == nil or sVar == "" then return; end
if sTarget == "CHANNEL" then
sVar = GetChannelName(sVar);
end
SendChatMessage(outStr, sTarget, nil, sVar);
elseif sTarget == "CLIP" then
local outWin = getglobal("SW_TextWindow");
if outWin.txtBuffer == nil then
outWin.txtBuffer = "";
end
outWin.txtBuffer = outWin.txtBuffer.."\r\n"..outStr;
else
SendChatMessage(outStr, sTarget);
end
end
function SW_BuildTextReportData(caller)
local bSet = SW_GetBarSettings(caller);
local tw = getglobal("SW_TextWindow");
tw.repMeta = {};
tw.repData = {};
local vals;
local metaData = tw.repMeta;
local inf = SW_InfoTypes[ bSet["IN"] ];
if inf["varType"] == "TEXT" then
vals = inf["f"](bSet["TV"]);
metaData["InfoFor"] = bSet["TV"];
elseif inf["varType"] == "SELF" then
vals = inf["f"](SW_SELF_STRING);
metaData["InfoFor"] = SW_SELF_STRING;
else
vals = inf["f"](bSet["SF"], bSet["CF"], bSet["PF"], bSet);
end
metaData["InfoTypeString"] = inf["t"];
metaData["InfoTypeNum"] = bSet["IN"];
if bSet["SF"] == nil then
metaData["SelectedFilter"] = getglobal("SW_Filter_None").SW_Filter;
else
metaData["SelectedFilter"] = getglobal(bSet["SF"]).SW_Filter;
end
local classF;
if bSet["CF"] == nil then
classF = SW_ClassFilters[1];
else
classF = SW_ClassFilters[ bSet["CF"] ];
end
metaData["ClassFilter"] = classF;
metaData["ClassFilterLocalized"] = SW_ClassNames[classF];
if metaData["ClassFilterLocalized"] == "" then
metaData["ClassFilterLocalized"] = classF;
end
if bSet["ShowPercent"] == nil then
metaData["ShowPercent"] = false;
else
metaData["ShowPercent"] = true;
end
if bSet["ShowRank"] == nil then
metaData["ShowRank"] = false;
else
metaData["ShowRank"] = true;
end
if bSet["ShowNumber"] == nil then
metaData["ShowNumber"] = false;
else
metaData["ShowNumber"] = true;
end
metaData["ReportAmount"] = SW_Settings["ReportAmount"];
if vals[1] == nil then
return;
end
local total = {};
for i, v in ipairs(vals) do
if v[4] == nil then
v[4] = 1;
end
if total[ v[4] ] == nil then total[ v[4] ] = 0; end
total[ v[4] ] = total[ v[4] ] + v[2];
end
for i, v in ipairs(vals) do
v[5] = (math.floor((v[2]/total[ v[4] ]) *1000 + 0.5)/10);
end
tw.repData = vals;
end
function SW_SendReportOld(caller, sVar)
if SW_Settings["RepTarget"] == nil then return; end
if getglobal(SW_Settings["RepTarget"]).SW_TargetChat == "CLIP" then
SW_BuildTextReportData(caller);
getglobal("SW_TextWindow"):Show();
return;
end
if not SW_PostCheck(getglobal(SW_Settings["RepTarget"]).SW_TargetChat) then
StaticPopup_Show("SW_PostFail");
return;
end
local bSet = SW_GetBarSettings(caller);
local vals;
local useMultiLines = false
if SW_Settings["RE_Multiline"] ~= nil then
useMultiLines = true;
end
if bSet["IN"] == nil then
bSet["IN"] = 1;
end
local inf = SW_InfoTypes[ bSet["IN"] ];
if inf["varType"] == "TEXT" then
vals = inf["f"](bSet["TV"]);
elseif inf["varType"] == "SELF" then
vals = inf["f"](SW_SELF_STRING);
else
vals = inf["f"](bSet["SF"], bSet["CF"], bSet["PF"], bSet);
end
if vals[1] == nil then
return;
end
local outStr=inf["t"].." ";
if inf["varType"] == "TEXT" then
outStr = outStr..bSet["TV"].." ";
end
if bSet["CF"]~= nil and bSet["CF"] ~= 1 then
outStr = outStr..SW_ClassNames[ SW_ClassFilters[ bSet["CF"] ] ].." ";
end
local tmpLen =string.len(outStr);
local tmpStr;
local total = {};
if bSet["ShowPercent"] ~= nil then
for i, v in ipairs(vals) do
if v[4] == nil then
v[4] = 1;
end
if total[ v[4] ] == nil then total[ v[4] ] = 0; end
total[ v[4] ] = total[ v[4] ] + v[2];
end
end
if useMultiLines then
SW_SendRepLine(outStr, sVar);
outStr = "";
end
for i=1, SW_Settings["ReportAmount"] do
if vals[i] ~= nil then
if bSet["ShowRank"] ~= nil then
tmpStr = "["..i..".";
else
tmpStr = "[";
end
tmpStr = tmpStr..vals[i][1];
if bSet["ShowNumber"] ~= nil then
tmpStr = tmpStr.." "..vals[i][2];
end
if bSet["ShowPercent"] ~= nil then
tmpStr = tmpStr.." "..(math.floor((vals[i][2]/total[ vals[i][4] ]) *1000 + 0.5)/10).."%";
end
tmpStr = tmpStr.."] ";
else
break;
end
if useMultiLines then
SW_SendRepLine(tmpStr, sVar);
else
tmpLen = tmpLen + string.len(tmpStr);
if tmpLen < 256 then
outStr = outStr..tmpStr;
else
break;
end
end
end
if not useMultiLines then
SW_SendRepLine(outStr, sVar);
end
--[[
if getglobal(SW_Settings["RepTarget"]).SW_TargetChat == "CLIP" then
local outWin = getglobal("SW_TextWindow");
local outBox = getglobal("SW_TextWindow_EditBox");
outBox:SetText( outWin.txtBuffer );
outWin.txtBuffer = "";
outBox:HighlightText();
outWin:Show();
return;
end
--]]
end
function SW_SendReport(caller, sVar)
if SW_Settings["RepTarget"] == nil then return; end
if getglobal(SW_Settings["RepTarget"]).SW_TargetChat == "CLIP" then
SW_BuildTextReportData(caller);
getglobal("SW_TextWindow"):Show();
return;
end
if not SW_PostCheck(getglobal(SW_Settings["RepTarget"]).SW_TargetChat) then
StaticPopup_Show("SW_PostFail");
return;
end
local bSet = SW_GetBarSettings(caller);
local vals;
local useMultiLines = false
if SW_Settings["RE_Multiline"] ~= nil then
useMultiLines = true;
end
if bSet["IN"] == nil then
bSet["IN"] = 1;
end
local inf = SW_InfoTypes[ bSet["IN"] ];
if inf["varType"] == "TEXT" then
vals = inf["f"](bSet["TV"]);
elseif inf["varType"] == "SELF" then
vals = inf["f"](SW_SELF_STRING);
else
vals = inf["f"](bSet["SF"], bSet["CF"], bSet["PF"], bSet);
end
if vals[1] == nil then
return;
end
local outStr=" -------- "..inf["t"].." ";
if inf["varType"] == "TEXT" then
outStr = outStr..":: "..bSet["TV"].." ";
end
if bSet["CF"]~= nil and bSet["CF"] ~= 1 then
outStr = outStr..SW_ClassNames[ SW_ClassFilters[ bSet["CF"] ] ].." ";
end
local tmpLen =string.len(outStr);
local tmpStr ="";
local total = {};
if bSet["ShowPercent"] ~= nil then
for i, v in ipairs(vals) do
if v[4] == nil then
v[4] = 1;
end
if total[ v[4] ] == nil then total[ v[4] ] = 0; end
total[ v[4] ] = total[ v[4] ] + v[2];
end
end
outStr=outStr.." -------- ";
if useMultiLines then
SW_SendRepLine(outStr, sVar);
outStr = "";
end
for i=1, SW_Settings["ReportAmount"] do
if vals[i] ~= nil then
if i < 10 then
tmpStr = " #0"..i..": ";
else
tmpStr = " #"..i..": ";
end
tmpStr = tmpStr..vals[i][1];
if bSet["ShowNumber"] ~= nil then
tmpStr = tmpStr.." - "..vals[i][2];
end
if bSet["ShowPercent"] ~= nil then
tmpStr = tmpStr.." - "..(math.floor((vals[i][2]/total[ vals[i][4] ]) *1000 + 0.5)/10).."%";
end
else
break;
end
if useMultiLines then
SW_SendRepLine(tmpStr, sVar);
else
tmpLen = tmpLen + string.len(tmpStr);
if tmpLen < 256 then
outStr = outStr..tmpStr;
else
break;
end
end
end
if not useMultiLines then
SW_SendRepLine(outStr, sVar);
end
--[[
if getglobal(SW_Settings["RepTarget"]).SW_TargetChat == "CLIP" then
local outWin = getglobal("SW_TextWindow");
local outBox = getglobal("SW_TextWindow_EditBox");
outBox:SetText( outWin.txtBuffer );
outWin.txtBuffer = "";
outBox:HighlightText();
outWin:Show();
return;
end
--]]
end
Generated by GNU Enscript 1.6.5.90.