init
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user