You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

277 lines
7.6 KiB

-----------------------------------------------------------------------------------
local twipe = table.wipe;
local CreateMacro = CreateMacro;
local EditMacro = EditMacro;
local strsub = strsub;
local GetMacroBody = GetMacroBody;
local GetMacroIndexByName = GetMacroIndexByName;
local tonumber = tonumber;
local pairs = pairs;
local GetNumMacros = GetNumMacros;
local _;
local format = format;
local VUHDO_RAID;
function VUHDO_dcShieldInitLocalOverrides()
VUHDO_RAID = _G["VUHDO_RAID"];
end
-----------------------------------------------------------------------------------
local VUHDO_MACRO_NAME_GROUPS = "VuhDoDCShieldData";
local VUHDO_MACRO_NAME_NAMES = "VuhDoDCShieldNames";
local VUHDO_EMPTY_SNIPPET = "[x]";
local VUHDO_IS_DC_TEMP_DISABLE = false;
local VUHDO_CLASS_TO_MACRO = {
[VUHDO_ID_WARRIORS] = "W",
[VUHDO_ID_ROGUES] = "R",
[VUHDO_ID_HUNTERS] = "H",
[VUHDO_ID_PALADINS] = "P",
[VUHDO_ID_MAGES] = "M",
[VUHDO_ID_WARLOCKS] = "L",
[VUHDO_ID_SHAMANS] = "S",
[VUHDO_ID_DRUIDS] = "D",
[VUHDO_ID_PRIESTS] = "I",
[VUHDO_ID_DEATH_KNIGHT] = "E",
[VUHDO_ID_MONKS] = "O",
[VUHDO_ID_DEMON_HUNTERS] = "N",
[VUHDO_ID_EVOKERS] = "V",
};
local VUHDO_MACRO_TO_CLASS = {
["W"] = VUHDO_ID_WARRIORS,
["R"] = VUHDO_ID_ROGUES,
["H"] = VUHDO_ID_HUNTERS,
["P"] = VUHDO_ID_PALADINS,
["M"] = VUHDO_ID_MAGES,
["L"] = VUHDO_ID_WARLOCKS,
["S"] = VUHDO_ID_SHAMANS,
["D"] = VUHDO_ID_DRUIDS,
["I"] = VUHDO_ID_PRIESTS,
["E"] = VUHDO_ID_DEATH_KNIGHT,
["O"] = VUHDO_ID_MONKS,
["N"] = VUHDO_ID_DEMON_HUNTERS,
["V"] = VUHDO_ID_EVOKERS,
};
local VUHDO_ROLE_TO_MACRO = {
[VUHDO_ID_MELEE_TANK] = "T",
[VUHDO_ID_MELEE_DAMAGE] = "M",
[VUHDO_ID_RANGED_DAMAGE] = "R",
[VUHDO_ID_RANGED_HEAL] = "H"
};
local VUHDO_MACRO_TO_ROLE = {
["T"] = VUHDO_ID_MELEE_TANK,
["M"] = VUHDO_ID_MELEE_DAMAGE,
["R"] = VUHDO_ID_RANGED_DAMAGE,
["H"] = VUHDO_ID_RANGED_HEAL
};
local VUHDO_GROUP_SNIPPETS = { };
local VUHDO_NAME_SNIPPETS = { };
--
local tMacroIndex;
local function VUHDO_buildSnippetArray()
for tUnit, tInfo in pairs(VUHDO_RAID) do
tMacroIndex = ("player" == tUnit or "pet" == tUnit) and 41 or tInfo["number"];
if (tMacroIndex or 0) > 0 then -- nicht: Target, Focus
if tInfo["isPet"] then tMacroIndex = tMacroIndex + 41; end -- VUHDO_MAX_MACRO_UNITS
VUHDO_GROUP_SNIPPETS[tMacroIndex] = format("%01d%s%s",
tInfo["group"] % 10,
VUHDO_CLASS_TO_MACRO[tInfo["classId"]] or "_",
VUHDO_ROLE_TO_MACRO[tInfo["role"]] or "_");
VUHDO_NAME_SNIPPETS[tMacroIndex] = string.utf8sub(tInfo["name"] or "", 1, 3);
end
end
end
--
local tMacroString, tMacroNames;
local tIndexGroups, tIndexNames;
local tNumMacros;
function VUHDO_mirrorToMacro()
if VUHDO_IS_DC_TEMP_DISABLE then return; end
tIndexGroups = GetMacroIndexByName(VUHDO_MACRO_NAME_GROUPS);
tIndexNames = GetMacroIndexByName(VUHDO_MACRO_NAME_NAMES);
if VUHDO_CONFIG["IS_DC_SHIELD_DISABLED"] then
if (tIndexGroups or 0) ~= 0 then DeleteMacro(tIndexGroups); end
if (tIndexNames or 0) ~= 0 then DeleteMacro(tIndexNames); end
return;
end
tMacroString = VUHDO_GROUP_TYPE_RAID == VUHDO_getCurrentGroupType() and "R" or "P";
tMacroNames = "N"; -- Filler
VUHDO_buildSnippetArray();
for tCnt = 1, 82 do -- VUHDO_MAX_MACRO_UNITS * 2
tMacroString = tMacroString .. (VUHDO_GROUP_SNIPPETS[tCnt] or VUHDO_EMPTY_SNIPPET);
tMacroNames = tMacroNames .. (VUHDO_NAME_SNIPPETS[tCnt] or VUHDO_EMPTY_SNIPPET)
end
twipe(VUHDO_GROUP_SNIPPETS);
twipe(VUHDO_NAME_SNIPPETS);
if (tIndexGroups or 0) == 0 then
_, tNumMacros = GetNumMacros();
if (tNumMacros or 0) > 17 then
VUHDO_Msg(VUHDO_I18N_DC_SHIELD_NO_MACROS);
VUHDO_IS_DC_TEMP_DISABLE = true;
else
CreateMacro(VUHDO_MACRO_NAME_GROUPS, "Ability_Repair", tMacroString, 1, 1);
end
else
EditMacro(tIndexGroups, VUHDO_MACRO_NAME_GROUPS, "Ability_Repair", tMacroString, 1, 1);
end
if (tIndexNames or 0) == 0 then
_, tNumMacros = GetNumMacros();
if (tNumMacros or 0) > 17 then
VUHDO_Msg(VUHDO_I18N_DC_SHIELD_NO_MACROS);
VUHDO_IS_DC_TEMP_DISABLE = true;
else
CreateMacro(VUHDO_MACRO_NAME_NAMES, "Ability_Repair", tMacroNames, 1, 1);
end
else
EditMacro(tIndexNames, VUHDO_MACRO_NAME_NAMES, "Ability_Repair", tMacroNames, 1, 1);
end
end
--
local function VUHDO_buildInfoFromSnippet(aUnit, aSnippet, aName)
local tInfo;
local tClassId;
if not VUHDO_RAID[aUnit] then VUHDO_RAID[aUnit] = { }; end
tClassId = VUHDO_MACRO_TO_CLASS[strsub(aSnippet, 2, 2)] or VUHDO_ID_PETS;
tInfo = VUHDO_RAID[aUnit];
tInfo["healthmax"] = 100;
tInfo["health"] = 100;
tInfo["name"] = aName or VUHDO_I18N_NOT_AVAILABLE;
tInfo["number"] = VUHDO_getUnitNo(aUnit);
tInfo["unit"] = aUnit;
tInfo["class"] = VUHDO_ID_CLASSES[tClassId];
tInfo["range"] = true;
tInfo["debuff"] = 0;
tInfo["isPet"] = strfind(aUnit, "pet", 1, true) ~= nil;
tInfo["powertype"] = VUHDO_UNIT_POWER_MANA;
tInfo["power"] = 100;
tInfo["powermax"] = 100;
tInfo["charmed"] = false;
tInfo["dead"] = false;
tInfo["connected"] = true;
tInfo["aggro"] = false;
tInfo["group"] = tonumber(strsub(aSnippet, 1, 1) or "1") or 1;
tInfo["afk"] = false;
tInfo["threat"] = 0;
tInfo["threatPerc"] = 0;
tInfo["isVehicle"] = false;
tInfo["ownerUnit"] = VUHDO_PET_2_OWNER[aUnit];
tInfo["className"] = "";
tInfo["petUnit"] = VUHDO_OWNER_2_PET[aUnit];
tInfo["targetUnit"] = VUHDO_getTargetUnit(aUnit);
tInfo["classId"] = tClassId;
tInfo["sortMaxHp"] = 1;
tInfo["role"] = VUHDO_MACRO_TO_ROLE[strsub(aSnippet, 3, 3)];
tInfo["fullName"] = tInfo["name"];
tInfo["raidIcon"] = nil;
tInfo["visible"] = true;
tInfo["zone"], tInfo["map"] = "foo", "foo";
tInfo["baseRange"] = true;
end
--
function VUHDO_buildRaidFromMacro()
local tIndexGroups;
local tIndexNames;
local tMacroGroups;
local tMacroNames;
local tStrIdx;
local tSnippet;
local tPrefix;
local tUnit;
local tName;
tIndexGroups = GetMacroIndexByName(VUHDO_MACRO_NAME_GROUPS);
tIndexNames = GetMacroIndexByName(VUHDO_MACRO_NAME_NAMES);
if (tIndexGroups or 0) == 0 or (tIndexNames or 0) == 0 then return false; end
twipe(VUHDO_RAID);
tMacroGroups = GetMacroBody(tIndexGroups);
tMacroNames = GetMacroBody(tIndexNames);
tSnippet = strsub(tMacroGroups, 1, 1);
tPrefix = tSnippet == "R" and "raid" or "party";
for tCnt = 1, 82 do -- VUHDO_MAX_MACRO_UNITS * 2
tStrIdx = tCnt * 3 - 1;
tSnippet = strsub(tMacroGroups, tStrIdx, tStrIdx + 2);
if (tSnippet or VUHDO_EMPTY_SNIPPET) ~= VUHDO_EMPTY_SNIPPET then
tUnit = tCnt == 41 and "player"
or tCnt == 82 and "pet"
or tCnt > 41 and format("%spet%d", tPrefix, tCnt - 41)
or tPrefix .. tCnt;
tName = strsub(tMacroNames, tStrIdx, tStrIdx + 2);
VUHDO_buildInfoFromSnippet(tUnit, tSnippet, tName);
end
end
return true;
end
--
local VUHDO_SAFE_PARTY = { "player", "party1", "party2", "party3", "party4" };
--
function VUHDO_buildSafeParty()
if InCombatLockdown() then return; end
local _, _, _, tSubtypeID = GetLFGProposal();
if LFG_SUBTYPEID_RAID == tSubtypeID then
local tUnit, tGroup;
for tCnt = 0, 25 do
tGroup = floor(tCnt / 5) + 1;
tUnit = tCnt == 0 and "player" or "raid" .. tCnt;
if not VUHDO_GROUPS[tGroup] then VUHDO_GROUPS[tGroup] = { }; end
if tCnt % 5 == 0 then twipe(VUHDO_GROUPS[tGroup]); end
tinsert(VUHDO_GROUPS[tGroup], tUnit);
end
else
VUHDO_GROUPS[1] = VUHDO_deepCopyTable(VUHDO_SAFE_PARTY);
VUHDO_GROUPS[10] = VUHDO_deepCopyTable(VUHDO_SAFE_PARTY);
end
VUHDO_initDynamicPanelModels();
VUHDO_refreshUiNoMembers();
end