This commit is contained in:
Andrew6810
2022-10-21 06:50:13 -07:00
parent 8571e98fb1
commit 39c0ed874e
466 changed files with 52263 additions and 2 deletions
+569
View File
@@ -0,0 +1,569 @@
--[[
********************************************************************
********************************************************************
Help Constants at top
Help functions:
DBM_GetGroupNr(name)
DBM_GetRaidId(name)
DBM_GetClass(name)
DBM_GetRank(name)
DBM_GetSmoothColor(percent)
DBM_GetTextClassColor(class)
DBM_GetColorText(r,g,b)
DBM_StringIcon(icon)
DBM_StringTexture(texture)
DBM_GetTextReactionColor(reaction)
DBM_GetRealBossName(boss)
DBM_GetMarkNameFromNumber(marknr)
DBM_round(tal)
DBM_UnitHealthPercent(unitid,CountOneHpAsZero = false)
DBM_UnitPowerPercent(unitid)
DBM_PlaySoundFile(file)
DBM_UnitClassification(uid)
DBM_BoostPlaySound(file,boost,duration);
DBM_CheckForBuff(buffname, unit)
DBM_CheckForDebuff(buffname, unit)
DBM_GetBuffText(buffindex, unit)
DBM_GetDeBuffText(buffindex, unit)
DBM_band(mask,...) bitands all args with mask and return true or false
DBM_bor(b1,...) bitors all args
DBM_linebreakStr(str,b,tryspace) tryspace if try to break the line at spaces isntead
DBM_SetTrue(varname)
DBM_SetFalse(varname)
DBM_SearchBags(itemname)
DBM_SplitItemToEmptySlots(bag,item,stacksize)
DBM_FormatMoney(money)
DBM_FlagsColor(flags)
DBM_CPUWarning()
DBM_NoneEnglish()
DBM_CreateExtraMenuFrames(nrFrames,nrButtons)
Sync functions:
DBM_GetPlayerMapPosition(uid)
********************************************************************
********************************************************************
]]--
DBM_c_w = "|cFFFFFFFF";
DBM_c_r = "|cFFFF0000";
DBM_c_g = "|cFF00FF00";
DBM_c_dg = "|cFF007F00";
DBM_c_b = "|cFF0000FF";
DBM_c_lb = "|cFF66AAFF";
DBM_c_t = "|cFF00FFFF";
DBM_c_y = "|cFFFFFF00";
DBM_c_purple = "|cFFFF00FF";
DBM_c_p = "|cFF8888CC";
DBM_c_v = "|cFF4444CC";
DBM_c_tt = "|cFFFED100";
DBM_c_bronze = "|cFFFF8800";
DBM_c_black = "|cFF000000";
DBM_c_grey = "|cFFB4B4B4";
DBM_c_pink = "|cFFFFA3B1";
DBM_c_ = "|r"; DBM_c = "|r";
DBM_ICONS = "Interface\\Icons\\";
DBM_FONT_TVCENMT = "Interface\\AddOns\\AscensionBuffFrames\\Fonts\\Tw_Cen_MT_Bold.ttf";
DBM_FONT_DBM = "Interface\\AddOns\\AscensionBuffFrames\\Fonts\\DBM.ttf";
DBM_TEXTURE_BANTOBAR = "Interface\\AddOns\\AscensionBuffFrames\\Textures\\BantoBar";
function DBM_GetGroupNr(name)
local i,n,g;
for i=1,GetNumRaidMembers() do
n,_,g = GetRaidRosterInfo(i);
if(n==name) then
return g;
end
end
return false;
end
function DBM_GetRaidId(name)
local i,n;
for i=1,GetNumRaidMembers() do
n = GetRaidRosterInfo(i);
if(string.lower(n)==string.lower(name)) then
return i;
end
end
return false;
end
function DBM_GetClass(name)
local i,n,c;
for i=1,GetNumRaidMembers() do
n,_,_,_,c = GetRaidRosterInfo(i);
if(n==name) then
return c;
end
end
return "";
end
function DBM_GetRank(name)
local i,n,c;
for i=1,GetNumRaidMembers() do
n,c = GetRaidRosterInfo(i);
if(n==name) then
return c;
end
end
return false;
end
function DBM_GetSmoothColor(percent)
local r, g, b;
if(percent > 0.5) then
r = (1.0 - percent) * 2;
g = 1.0;
else
r = 1.0;
g = percent * 2;
end
b = 0.0;
return r,g,b;
end
function DBM_GetTextClassColor(class)
local color = RAID_CLASS_COLORS[string.gsub(string.upper(class)," ","")];
if(color) then
local colorText = ("|cff%.2x%.2x%.2x"):format(color.r*255,color.g*255,color.b*255);
return colorText;
end
return "|cFFFFFFFF";
end
function DBM_GetColorText(r,g,b)
local colorText = ("|cff%.2x%.2x%.2x"):format(r*255,g*255,b*255);
return colorText;
end
function DBM_StringIcon(icon)
return DBM_StringTexture(DBM_ICONS..icon)
end
function DBM_StringTexture(texture)
return "|T"..texture..":0|t";
end
function DBM_GetTextReactionColor(reaction)
if(reaction<4) then
return DBM_c_r;
elseif(reaction==4) then
return DBM_c_y;
else
return DBM_c_g;
end
end
function DBM_GetRealBossName(boss)
local n;
if(DBM_BOSS_DATA[boss].realname) then
n = DBM_BOSS_DATA[boss].realname;
else
n = boss;
end
return n;
end
function DBM_GetMarkNameFromNumber(marknr)
if(marknr==1) then
return "star";
elseif(marknr==2) then
return "circle";
elseif(marknr==3) then
return "diamond";
elseif(marknr==4) then
return "triangle";
elseif(marknr==5) then
return "moon";
elseif(marknr==6) then
return "square";
elseif(marknr==7) then
return "cross";
elseif(marknr==8) then
return "skull";
end
end
function DBM_round(tal)
if (tal < 0) then
return math.ceil(tal-0.5)
else
return math.floor(tal+0.5)
end
end
function DBM_UnitHealthPercent(unit,CountOneHpAsZero)
if(UnitExists(unit)) then
local hp = UnitHealth(unit) / UnitHealthMax(unit) * 100;
if(CountOneHpAsZero and UnitHealth(unit)==1) then
return 0;
elseif(hp == 0) then
return 0;
elseif(hp < 1) then
return 1;
else
return math.floor(hp);
end
else
return 0;
end
end
function DBM_UnitPowerPercent(unitid)
if(UnitExists(unitid)) then
return math.floor(UnitPower(unitid) / UnitPowerMax(unitid) * 100);
else
return 0;
end
end
function DBM_PlaySoundFile(file)
if(DBM_GetS("SoundWarnings")) then
PlaySoundFile(file);
end
end
function DBM_UnitClassification(uid)
local c = UnitClassification(uid);
local name = UnitName(uid);
if(DBM_ZONE and (name == "Captain Qeez" or name == "Captain Tuubid" or name == "Captain Xurrem" or name == "Major Pakkon" or name =="Colonel Zerran" or name == "Major Yeggeth" or name == "Captain Drenn")) then
return "worldboss";
end
if(DBM_ZONE and c=="elite" and UnitLevel(uid)==-1) then
return "worldboss";
end
return c;
end
function DBM_BoostPlaySound(file,boost,duration)
local savemaster = GetCVar("Sound_MasterVolume");
DBM_debug("Boosting Master Volume to: "..savemaster + boost);
SetCVar("Sound_MasterVolume",savemaster + boost);
DBM_PlaySoundFile(file);
DBM_Delay(duration,function()
DBM_debug("Restoring Master to: "..savemaster);
SetCVar("Sound_MasterVolume",savemaster);
end);
end
function DBM_CheckForBuff(buffname, unit)
if (not unit) then unit = "player"; end if (not UnitExists(unit)) then return; end
local name = UnitBuff(unit,buffname);
if(name) then
return true;
end
return false;
end
function DBM_CheckForDebuff(buffname, unit)
if (not unit) then unit = "player"; end if (not UnitExists(unit)) then return; end
local name = UnitDebuff(unit,buffname);
if(name) then
return true;
end
return false;
end
function DBM_GetBuffText(buffindex, unit)
if (not unit) then unit = "player"; end if (not UnitExists(unit)) then return nil; end
AscensionBuffFrames_TTTextLeft2:SetText();
AscensionBuffFrames_TT:SetUnitBuff(unit, buffindex);
return AscensionBuffFrames_TTTextLeft2:GetText();
end
function DBM_GetDeBuffText(buffindex, unit)
if (not unit) then unit = "player"; end if (not UnitExists(unit)) then return nil; end
AscensionBuffFrames_TTTextLeft2:SetText();
AscensionBuffFrames_TT:SetUnitDeBuff(unit, buffindex);
return AscensionBuffFrames_TTTextLeft2:GetText();
end
function DBM_band(mask,...)
args = {...};
local i;
for i=1,#args do
if(bit.band(mask,args[i]) == 0) then
return false;
end
end
return true;
end
function DBM_bor(b1,...)
args = {...};
local i;
for i=1,#args do
b1 = bit.bor(b1,args[i]);
end
return b1;
end
function DBM_linebreakStr(str,b,tryspace)
local l = {};
local t;
while(string.len(str) > 0) do
if(tryspace) then
if(string.len(str) <= b) then
--if the full line fits, just take it all
l[#l+1] = str;
break;
end
t = string.find(string.reverse(string.sub(str,1,b+1))," ",1,true);
if(not t) then
--just break the line
l[#l+1] = string.sub(str,1,b);
str = string.sub(str,b+1);
else
--break the line and remove the space
l[#l+1] = string.sub(str,1,b-(t-1));
str = string.sub(str,b+2-(t-1));
end
else
l[#l+1] = string.sub(str,1,b);
str = string.sub(str,b+1);
end
end
return table.concat(l,"\n");
end
function DBM_SetTrue(varname)
_G[varname] = true;
end
function DBM_SetFalse(varname)
_G[varname] = false;
end
function DBM_SearchBags(itemname)
local bag,slot;
for bag=0,NUM_BAG_SLOTS do
for slot=1,GetContainerNumSlots(bag) do
if (GetContainerItemLink(bag,slot) and string.find(GetContainerItemLink(bag,slot), itemname)) then
return bag,slot;
end
end
end
return false,false;
end
function DBM_SplitItemToEmptySlots(bag,item,stacksize)
local valid = GetContainerItemLink(bag,item);
if(valid and stacksize > 0) then
local _,itemcount,locked = GetContainerItemInfo(bag,item);
--it not locked searchbags for free slots
if(not locked) then
local sbag,sslot;
for sbag=0,NUM_BAG_SLOTS do
for sslot=1,GetContainerNumSlots(sbag) do
if(GetContainerItemLink(sbag,sslot)==nil) then
--free slot found split stack into this slot
if(itemcount > stacksize) then
SplitContainerItem(bag,item,stacksize);
itemcount = itemcount - stacksize;
--find correct bag to click
for i=1, NUM_CONTAINER_FRAMES do
local bagframe = getglobal("ContainerFrame"..i);
if ( bagframe:IsShown() and bagframe:GetID() == sbag ) then
--bag found, now find slot
for j=1, GetContainerNumSlots(sbag) do
local slotframe = getglobal(bagframe:GetName().."Item"..j);
if(slotframe:GetID()==sslot) then
--found correct slot, click it
slotframe:Click();
DBM_Delay(0.6,DBM_SplitItemToEmptySlots,bag,item,stacksize);
return;
end
end
end
end
end
end
end
end
end
end
end
function DBM_FormatMoney(money)
local SILVER = "|cFFC0C0C0";
local COPPER = "|cFFCC9900";
local GOLD = "|cFFFFFF66";
local WHITE = "|cFFFFFFFF";
local c,s,g;
local retstr = "";
g = floor(money/10000);
s = mod(floor(money/100),100);
c = mod(money,100);
if(g>0) then
retstr = retstr..WHITE..g..GOLD.." Gold";
end
if(s>0) then
if ( retstr ~= "" ) then retstr = retstr .. " " end;
retstr = retstr..WHITE..s..SILVER.." Silver";
end
if(c>0) then
if ( retstr ~= "" ) then retstr = retstr .. " " end;
retstr = retstr..WHITE..c..COPPER.." Copper";
end
return retstr;
end
function DBM_FlagsColor(flags)
if(DBM_band(flags,COMBATLOG_OBJECT_REACTION_HOSTILE) ) then
return "|cFFFF0000";
elseif(DBM_band(flags,COMBATLOG_OBJECT_REACTION_NEUTRAL) ) then
return "|cFFFFFF00";
elseif(DBM_band(flags,COMBATLOG_OBJECT_REACTION_FRIENDLY) ) then
return "|cFF00FF00";
end
end
function DBM_StripNames(name)
name = string.gsub(name,"%'","");
name = string.gsub(name," ","_");
return name;
end
function DBM_NoneEnglish()
if(GetLocale() ~= "enUS") then
DBM_printc("AscensionBuffFramess text parsing is made for the english client only, so some features may not work for you.");
end
end
function DBM_CPUWarning()
if(GetCVar("scriptProfile")=="1") then
DBM_printc("|cFFFFFFFFWarning|cFF8888CC CPU Profileing is on, this may have a huge performance impact on gameplay");
DBM_printc("If this is unintentional you can disable it by typing /DBMcpuoff");
end
end
function DBM_CPUPOff()
if(GetCVar("scriptProfile")~="0") then
SetCVar("scriptProfile", "0");
ReloadUI();
end
end
function DBM_CreateExtraMenuFrames(nrFrames,nrButtons)
--[[
for i=UIDROPDOWNMENU_MAXLEVELS+1,nrFrames do
UIDropDownMenu_CreateFrames(i, 0);
end]]--
--[[
local i,j;
for i=3,nrFrames do
--first check if frame exists
if(not getglobal("DropDownList"..i)) then
--Create the frame
local frame = CreateFrame("Button","DropDownList"..i,UIParent,"UIDropDownListTemplate");
frame:SetToplevel(true);
frame:SetID(i);
frame:SetFrameStrata("FULLSCREEN_DIALOG");
frame:Hide();
end
--now add extra buttons if they dont exists
for j=9,nrButtons do
if(not getglobal("DropDownList"..i.."Button"..j)) then
local frame = CreateFrame("Button","DropDownList"..i.."Button"..j,getglobal("DropDownList"..i),"UIDropDownMenuButtonTemplate");
frame:SetID(j);
end
end
end]]--
end
--[[
********************************************************************
********************************************************************
Sync Functions
********************************************************************
********************************************************************
]]--
--[[ ********************************
Position Sync
********************************]]--
local pos_sync_table = {};
local pos_last_asked_sync = {};
local pos_send_my_until = 0;
local pos_dont_send_to_fast = 0;
local function send_position_sync()
SetMapToCurrentZone();
local x,y = GetPlayerMapPosition("player");
local zone = GetRealZoneText();
DBM_send_mess("MYPOS "..x.."@"..y.."@"..zone);
end
function DBM_PositionSync_OnUpdate()
--runs 20 times each second
if(pos_send_my_until > GetTime()) then
--dont send to fast
if(pos_dont_send_to_fast + 1 > GetTime()) then
return;
end
pos_dont_send_to_fast = GetTime();
--send
send_position_sync();
end
end
function DBM_PositionSyncRequest_Recive(msg,from)
if(msg==DBM_YOU) then
pos_send_my_until = GetTime()+8;
end
end
function DBM_PositionSync_Recive(msg,from)
local found,_,x,y,zone = string.find(msg,"(.+)@(.+)@(.+)");
if(found) then
pos_sync_table[from] = {
x = tonumber(x),
y = tonumber(y),
zone = zone,
};
end
end
function DBM_GetPlayerMapPosition(uid)
if(UnitExists(uid)) then
--fix your own coords
SetMapToCurrentZone();
--get coords
local x,y = GetPlayerMapPosition(uid);
--if we got coords from blizz UI just pass them
if(x+y > 0) then
return x,y;
end
--get coords from sync
local name = UnitName(uid);
--check if we should ask for new sync
if(not pos_last_asked_sync[name]) then pos_last_asked_sync[name] = 0; end --to be failsafe
if(pos_last_asked_sync[name]+5 < GetTime()) then
pos_last_asked_sync[name] = GetTime();
DBM_send_mess("REQUESTPOS "..name);
end
--okay no fetch from table
if(not pos_sync_table[name]) then
--not updated yet or no DBM
return 0,0;
end
--check if we are in same zone
if(GetRealZoneText()==pos_sync_table[name].zone) then
return pos_sync_table[name].x,pos_sync_table[name].y;
else
return 0,0;
end
end
return GetPlayerMapPosition(uid);
end