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.
491 lines
14 KiB
491 lines
14 KiB
-- local functions
|
|
local pairs = pairs;
|
|
local GetSpellInfo = GetSpellInfo;
|
|
local string_format = string.format;
|
|
|
|
-- local variables
|
|
local _;
|
|
|
|
-- mainline (retail) or classic
|
|
local wowmainline = (WOW_PROJECT_ID == WOW_PROJECT_MAINLINE);
|
|
local wowclassic = (WOW_PROJECT_ID == WOW_PROJECT_CLASSIC);
|
|
local wowbcc = (WOW_PROJECT_ID == WOW_PROJECT_BURNING_CRUSADE_CLASSIC);
|
|
local wowwc = (WOW_PROJECT_ID == WOW_PROJECT_WRATH_CLASSIC);
|
|
|
|
if (wowmainline) then
|
|
-- global Gnosis event tables
|
|
Gnosis.tCastbarEvents = {
|
|
"UNIT_SPELLCAST_CHANNEL_START",
|
|
"UNIT_SPELLCAST_CHANNEL_STOP",
|
|
"UNIT_SPELLCAST_CHANNEL_UPDATE",
|
|
"UNIT_SPELLCAST_EMPOWER_START",
|
|
"UNIT_SPELLCAST_EMPOWER_STOP",
|
|
"UNIT_SPELLCAST_START",
|
|
"UNIT_SPELLCAST_STOP",
|
|
"UNIT_SPELLCAST_DELAYED",
|
|
"UNIT_SPELLCAST_INTERRUPTIBLE",
|
|
"UNIT_SPELLCAST_NOT_INTERRUPTIBLE",
|
|
"UNIT_SPELLCAST_INTERRUPTED",
|
|
"UNIT_SPELLCAST_FAILED",
|
|
"UNIT_SPELLCAST_FAILED_QUIET",
|
|
"UNIT_SPELLCAST_SUCCEEDED",
|
|
};
|
|
|
|
Gnosis.tMiscEvents = {
|
|
"PLAYER_REGEN_DISABLED",
|
|
"PLAYER_REGEN_ENABLED",
|
|
"COMBAT_LOG_EVENT_UNFILTERED",
|
|
"UNIT_SPELLCAST_SENT",
|
|
"PLAYER_ENTERING_WORLD",
|
|
"PLAYER_FOCUS_CHANGED",
|
|
"PLAYER_TARGET_CHANGED",
|
|
"DISPLAY_SIZE_CHANGED",
|
|
"PLAYER_TALENT_UPDATE",
|
|
};
|
|
else -- wow classic (wowclassic or wowbcc or wowwc)
|
|
-- global Gnosis event tables
|
|
Gnosis.tCastbarEvents = {
|
|
"UNIT_SPELLCAST_CHANNEL_START",
|
|
"UNIT_SPELLCAST_CHANNEL_STOP",
|
|
"UNIT_SPELLCAST_CHANNEL_UPDATE",
|
|
"UNIT_SPELLCAST_START",
|
|
"UNIT_SPELLCAST_STOP",
|
|
"UNIT_SPELLCAST_DELAYED",
|
|
"UNIT_SPELLCAST_INTERRUPTED",
|
|
"UNIT_SPELLCAST_FAILED",
|
|
"UNIT_SPELLCAST_FAILED_QUIET",
|
|
"UNIT_SPELLCAST_SUCCEEDED",
|
|
};
|
|
|
|
Gnosis.tMiscEvents = {
|
|
"PLAYER_REGEN_DISABLED",
|
|
"PLAYER_REGEN_ENABLED",
|
|
"COMBAT_LOG_EVENT_UNFILTERED",
|
|
"UNIT_SPELLCAST_SENT",
|
|
"PLAYER_ENTERING_WORLD",
|
|
"PLAYER_TARGET_CHANGED",
|
|
"DISPLAY_SIZE_CHANGED",
|
|
};
|
|
end
|
|
|
|
Gnosis.tMirrorEvents = {
|
|
"MIRROR_TIMER_START",
|
|
"MIRROR_TIMER_STOP",
|
|
"PLAYER_UNGHOST",
|
|
"PLAYER_ALIVE",
|
|
};
|
|
|
|
if (wowmainline) then
|
|
Gnosis.tBlizzCastbar = {
|
|
"UNIT_SPELLCAST_START",
|
|
"UNIT_SPELLCAST_STOP",
|
|
"UNIT_SPELLCAST_FAILED",
|
|
"UNIT_SPELLCAST_INTERRUPTED",
|
|
"UNIT_SPELLCAST_DELAYED",
|
|
"UNIT_SPELLCAST_CHANNEL_START",
|
|
"UNIT_SPELLCAST_CHANNEL_UPDATE",
|
|
"UNIT_SPELLCAST_CHANNEL_STOP",
|
|
"UNIT_SPELLCAST_EMPOWER_START",
|
|
"UNIT_SPELLCAST_EMPOWER_STOP",
|
|
"UNIT_SPELLCAST_INTERRUPTIBLE",
|
|
"UNIT_SPELLCAST_NOT_INTERRUPTIBLE",
|
|
"PLAYER_ENTERING_WORLD",
|
|
};
|
|
else
|
|
Gnosis.tBlizzCastbar = {
|
|
"UNIT_SPELLCAST_START",
|
|
"UNIT_SPELLCAST_STOP",
|
|
"UNIT_SPELLCAST_FAILED",
|
|
"UNIT_SPELLCAST_INTERRUPTED",
|
|
"UNIT_SPELLCAST_DELAYED",
|
|
"UNIT_SPELLCAST_CHANNEL_START",
|
|
"UNIT_SPELLCAST_CHANNEL_UPDATE",
|
|
"UNIT_SPELLCAST_CHANNEL_STOP",
|
|
"UNIT_SPELLCAST_INTERRUPTIBLE",
|
|
"UNIT_SPELLCAST_NOT_INTERRUPTIBLE",
|
|
"PLAYER_ENTERING_WORLD",
|
|
};
|
|
end
|
|
|
|
Gnosis.tBlizzMirrorUiParent = {
|
|
"MIRROR_TIMER_START",
|
|
};
|
|
|
|
Gnosis.tBlizzMirror123 = {
|
|
"MIRROR_TIMER_STOP",
|
|
"MIRROR_TIMER_PAUSE",
|
|
"PLAYER_ENTERING_WORLD",
|
|
};
|
|
|
|
Gnosis.tSwingEvents = {
|
|
"PLAYER_ENTER_COMBAT",
|
|
"PLAYER_LEAVE_COMBAT",
|
|
"START_AUTOREPEAT_SPELL",
|
|
"STOP_AUTOREPEAT_SPELL"
|
|
};
|
|
|
|
-- mirror bar icons for breath, fatigue and feign death
|
|
Gnosis.tMirrorIcons = {
|
|
["BREATH"] = "Interface\\Icons\\Spell_Shadow_DemonBreath",
|
|
["EXHAUSTION"] = "Interface\\Icons\\Ability_Suffocate",
|
|
["FEIGNDEATH"] = "Interface\\Icons\\Ability_Rogue_FeignDeath",
|
|
};
|
|
|
|
Gnosis.tRuneName = {
|
|
[1] = _G["COMBAT_TEXT_RUNE_BLOOD"],
|
|
[2] = _G["COMBAT_TEXT_RUNE_UNHOLY"],
|
|
[3] = _G["COMBAT_TEXT_RUNE_FROST"],
|
|
[4] = _G["COMBAT_TEXT_RUNE_DEATH"],
|
|
};
|
|
|
|
Gnosis.tRuneTexture = {
|
|
[1] = "Interface\\PlayerFrame\\Deathknight-Energize-Blood",
|
|
[2] = "Interface\\PlayerFrame\\Deathknight-Energize-Unholy",
|
|
[3] = "Interface\\PlayerFrame\\Deathknight-Energize-Frost",
|
|
[4] = "Interface\\PlayerFrame\\Deathknight-Energize-White",
|
|
};
|
|
|
|
-- spell school colors
|
|
Gnosis.colSchools = {
|
|
physical = "1, 1, 1, 1",
|
|
holy = "1, 1, 0.627, 1",
|
|
fire = "1, 0.5, 0.5, 1",
|
|
nature = "0.5, 1, 0.5, 1",
|
|
frost = "0.5, 0.5, 1, 1",
|
|
shadow = "0.628, 0, 0.628, 1",
|
|
arcane = "1, 0.725, 1, 1",
|
|
frostfire = "0.824, 0.314, 0.471, 1",
|
|
};
|
|
|
|
-- class colors (http://www.wowwiki.com/Class_colors)
|
|
Gnosis.colClasses = {
|
|
DEATHKNIGHT = "0.77, 0.12, 0.23, 1.00",
|
|
DRUID = "1.00, 0.49, 0.04, 1.00",
|
|
HUNTER = "0.67, 0.83, 0.45, 1.00",
|
|
MAGE = "0.41, 0.80, 0.94, 1.00",
|
|
MONK = "0.33, 0.54, 0.52, 1.00",
|
|
PALADIN = "0.96, 0.55, 0.73, 1.00",
|
|
PRIEST = "1.00, 1.00, 1.00, 1.00",
|
|
ROGUE = "1.00, 0.96, 0.41, 1.00",
|
|
SHAMAN = "0.00, 0.44, 0.87, 1.00",
|
|
WARLOCK = "0.58, 0.51, 0.79, 1.00",
|
|
WARRIOR = "0.78, 0.61, 0.43, 1.00",
|
|
};
|
|
|
|
Gnosis.tPremadeNfs = {
|
|
[1] = "namecol<1,0,0>txm< (>misctxm<)>col<pre>txts< (>tscurtxts</>tstottxts<)>",
|
|
[2] = "namecol<1,0,0>txeff< (>effecttxeff<)>col<pre>",
|
|
[3] = "col<1,1,0>whocol<pre>: name",
|
|
};
|
|
|
|
Gnosis.tPremadeTfs = {
|
|
[1] = "col<1,0,0>p<2s>col<pre> r<1m> / t<2m>",
|
|
[2] = "col<1,0,0>p<2s>col<pre> r<1> / t<2>",
|
|
[3] = "r<2m> / t<3m>",
|
|
};
|
|
|
|
Gnosis.tSoundChannels = {
|
|
[1] = "Master",
|
|
[2] = "SFX",
|
|
[3] = "Ambience",
|
|
[4] = "Music",
|
|
};
|
|
|
|
function Gnosis:StartupVariables()
|
|
local fCurTime = GetTime() * 1000;
|
|
|
|
self.ver = 4.99;
|
|
self.optver = 4.62;
|
|
self.build = "v4.99";
|
|
self.addonname = "Gnosis";
|
|
local strVer = string_format("v%.2f", self.ver);
|
|
if(self.build == strVer) then
|
|
self.title = string_format("%s %s", self.addonname, strVer);
|
|
else
|
|
self.title = string_format("%s %s (%s)", self.addonname, strVer, self.build);
|
|
end
|
|
|
|
-- initial latency
|
|
self.lag = select(4, GetNetStats());
|
|
self.lastTimerScan = fCurTime;
|
|
|
|
-- tables
|
|
self.castbars = {}; -- castbars
|
|
self.activebars = {}; -- currently active bars (performance reasons)
|
|
self.fadeoutbars = {}; -- bars to fade out
|
|
self.unusedcastbars = {}; -- table to store deleted castbar frames
|
|
self.cb_fl = {}; -- castbar fast lookup
|
|
self.ti_fl = {}; -- timer fast lookup
|
|
self.ti_icd = {}; -- inner cooldown scan table
|
|
self.ti_icd_active = {};-- active inner cooldowns
|
|
self.scan = {}; -- units to scan
|
|
self.counters = {}; -- counters
|
|
self.timer_cds = {}; -- track player cds
|
|
|
|
-- play intervals (audio)
|
|
self.played = {
|
|
s = {},
|
|
m = {},
|
|
f = {},
|
|
};
|
|
|
|
-- (LibSharedMedia)
|
|
self.bartexnames = {};
|
|
self.bartextures = {};
|
|
self.fonts = {};
|
|
self.fontnames = {};
|
|
self.music = {};
|
|
self.musicnames = {};
|
|
|
|
-- events registered to blizzard castbar
|
|
self.blizzcastbar = {};
|
|
self.petcastbar = {};
|
|
|
|
-- events registered to blizzard mirror castbar
|
|
self.blizzmirroruiparent = {};
|
|
self.blizzmirror1 = {};
|
|
self.blizzmirror2 = {};
|
|
self.blizzmirror3 = {};
|
|
|
|
-- clip test
|
|
self.curchannel = nil; -- currently channeling spell
|
|
self.nextchannel = nil; --
|
|
|
|
-- default variables
|
|
self.tDefaults = {
|
|
bAddonEn = true,
|
|
bHideBlizz = false,
|
|
bHideMirror = false,
|
|
bHidePetVeh = false,
|
|
bHideAddonMsgs = false,
|
|
bResizeOptions = true,
|
|
-- option settings
|
|
bAutoCreateOptions = false,
|
|
|
|
-- castbar configs
|
|
cbconf = {},
|
|
nameNewBar = "",
|
|
|
|
-- channeled spells
|
|
channeledspells = {},
|
|
|
|
-- combat text/clip
|
|
ct = {
|
|
bsound = true,
|
|
bmusic = false,
|
|
bfile = false,
|
|
sound = "MONEYFRAMEOPEN",
|
|
music = nil,
|
|
file = nil,
|
|
channel = 1,
|
|
},
|
|
|
|
configs = {
|
|
name = "",
|
|
bsavecastbars = true,
|
|
bsavespell = true,
|
|
bsavedefaultopt = true,
|
|
bsavectct = true,
|
|
},
|
|
|
|
-- clip test
|
|
wfcl = 1000, -- wait for combat log data (in ms), combat log timing tends to be bitchy (well, at least on Frostwolf)
|
|
ctt = 300, -- clip test time (in ms)
|
|
|
|
-- timer scan
|
|
iTimerScanEvery = 150, -- scan for spell/item cooldowns and auras every 150ms (default)
|
|
};
|
|
|
|
-- set default combat text addon, if multiple addons found than MSBT > Parrot > SCT
|
|
self.tDefaults.ct.addon = (MikSBT and "MSBT" or (Parrot and "Parrot" or (SCT and "SCT" or "Blizz")));
|
|
|
|
-- swing timer
|
|
self.iSwing = 0; -- 1 == melee (onehand), 2 == range
|
|
self.bSwingBar = false; -- combat log event unfiltered registered
|
|
self.iExtraSwings = 0;
|
|
self.bNextSwingNotExtra = false;
|
|
_, self.class = UnitClass("player");
|
|
self.bIsDruid = self.class == "DRUID";
|
|
|
|
self.curincombattype = 3; -- set as out of combat
|
|
|
|
self.tCastbarDefaults = {
|
|
-- castbar options v
|
|
cboptver = self.optver,
|
|
|
|
-- default unit
|
|
unit = "player",
|
|
bartype = "cb",
|
|
|
|
-- bar geometry
|
|
width = 250,
|
|
height = 20,
|
|
border = 2.0,
|
|
bordericon = 2.0,
|
|
scale = 1.0,
|
|
scaleicon = 1.0,
|
|
alpha = 1.0,
|
|
fadeout = 0.4;
|
|
latbarsize = 0.15;
|
|
latbarfixed = 0.03;
|
|
|
|
-- coordinates
|
|
coord = {
|
|
castname = { x = 9, y = 0 },
|
|
casttime = { x = -9, y = 0 },
|
|
casticon = { x = -3, y = 0 },
|
|
latency = { x = -1, y = 1 },
|
|
shadow = { x = 3, y = -3 },
|
|
},
|
|
|
|
-- alignments
|
|
alignment = "NAMETIME", -- new alignment options for name and time (v1.30)
|
|
alignname = "LEFT", --
|
|
aligntime = "RIGHT", --
|
|
alignlat = "ADAPT", --
|
|
|
|
-- spark modifiers
|
|
fSparkHeightMulti = 1.2,
|
|
fSparkWidthMulti = 0.8,
|
|
|
|
-- default bar colors
|
|
colBar = { 0.15, 0.35, 0.35, 0.70 },
|
|
colBarNI = { 0.15, 0.35, 0.35, 0.70 },
|
|
colBarBg = { 0.15, 0.42, 0.42, 0.65 },
|
|
colLagBar = { 0.90, 0.85, 0.70, 0.65 },
|
|
colBorder = { 0.00, 0.00, 0.00, 0.85 },
|
|
colBorderNI = { 1.00, 0.80, 0.00, 0.85 },
|
|
colText = { 1.00, 1.00, 1.00, 1.00 },
|
|
colTextTime = { 1.00, 1.00, 1.00, 1.00 },
|
|
colTextLag = { 1.00, 0.00, 0.00, 1.00 },
|
|
colInterrupted = { 1.00, 0.80, 0.00, 0.70 },
|
|
colFailed = { 0.70, 0.30, 0.20, 0.75 },
|
|
colSpark = { 1.00, 1.00, 1.00, 1.00 },
|
|
colSuccess = { 0.15, 0.25, 0.10, 0.70 },
|
|
colShadow = { 0.00, 0.00, 0.00, 0.70 },
|
|
|
|
-- default statusbar texture
|
|
bartexture = "Gnosis_Plain",
|
|
bordertexture = nil,
|
|
|
|
-- bar settings
|
|
anchor = nil,
|
|
bEn = true, -- enabled
|
|
spectab = -- active for all possible talent specializations
|
|
{ [1] = true, [2] = true, [3] = true, [4] = true },
|
|
bShowWNC = false, -- show when not casting
|
|
bShowLat = true, -- show latency box
|
|
bShowCBS = true, -- show castbar spark
|
|
bShowTicks = true, -- show channeled ticks
|
|
bExtChannels = true, -- extend channeled spells
|
|
bUnlocked = true, -- unlocked when first created
|
|
bFillup = false, -- fill bar up at end of cast
|
|
bShowShield = false, -- do not show shielded icon for non-intteruptible casts
|
|
iconside = "LEFT", -- where to draw icon
|
|
fontoutline = "OUTLINE",-- font outline
|
|
font = "Accidental Presidency", -- "Accidental Presidency", v4.00
|
|
fontsize = 0, -- automatic
|
|
fontsize_timer = 0, -- automatic
|
|
fontsize_lat = 0, -- automatic
|
|
|
|
relationsel = 1, -- show casts of friendly and/or enemy units
|
|
incombatsel = 1, -- show castbar in and out of combat (1==always)
|
|
ingroupsel = 1, -- show castbar while solo, in party or raid (1==always)
|
|
instancetype = 1, -- show castbar while inside or outside of instance (1==always)
|
|
bnwtypesel = 1, -- neither black-/whitelist
|
|
bnwlist = {}, -- empty list to begin with
|
|
bnwlistnew = "", -- new entry box
|
|
bResizeLongName = false,-- automatic resize of long spell names
|
|
strata = "MEDIUM", -- medium frame strata
|
|
strNameFormat = Gnosis.tPremadeNfs[1], -- default nfs
|
|
strTimeFormat = Gnosis.tPremadeTfs[1], -- default tfs
|
|
bShowPlayerLatency = true, -- do not show text latency information
|
|
bShowAsMinutes = true, -- show timer in minutes if longer than 60s
|
|
bMergeTrade = true, -- merge tradeskill information
|
|
bIconUnlocked = false, -- option to unlock icon (v1.31)
|
|
strGap = 15, -- minimum distance between name and time text
|
|
|
|
rotateicon = 0, -- rotate icon (degrees)
|
|
orient = 1, -- castbar orientation (horizontal, vertical)
|
|
bInvDir = false, -- invert bar direction
|
|
bColSuc = false, -- change castbar color when cast finished successfully
|
|
bEnShadowOffset = false,-- enable changing of text shadow offset
|
|
bEnShadowCol = true, -- change text shadow color
|
|
|
|
-- anchoring
|
|
anchortype = 1, -- no anchor
|
|
anchorframe = "", -- Anchor frame name
|
|
anchorfrom = 5, -- Gnosis bar anchor point
|
|
anchorto = 5, -- Anchor frame anchor point
|
|
anchor_x = 0, -- Offset x
|
|
anchor_y = 0, -- Offset y
|
|
|
|
-- rotate text
|
|
rotatectext = 0, --
|
|
rotatertext = 0, --
|
|
rotatelattext = 0, --
|
|
};
|
|
|
|
self.tIconLikeOverrides = {
|
|
-- bar geometry
|
|
width = 40,
|
|
height = 40,
|
|
border = 0,
|
|
|
|
coord = {
|
|
castname = { x = 0, y = 0 },
|
|
casttime = { x = 3, y = 0 },
|
|
casticon = { x = 42, y = 0 },
|
|
latency = { x = -1, y = 1 },
|
|
shadow = { x = 3, y = -3 },
|
|
},
|
|
|
|
-- alignments
|
|
alignment = "FREE", -- new alignment options for name and time (v1.30)
|
|
alignname = "CENTER", --
|
|
aligntime = "CENTER", --
|
|
|
|
-- default bar colors
|
|
colBar = { 0.15, 0.35, 0.35, 0.0 },
|
|
colBarNI = { 0.15, 0.35, 0.35, 0.0 },
|
|
colBarBg = { 0.15, 0.42, 0.42, 0.0 },
|
|
colLagBar = { 0.90, 0.85, 0.70, 0.0 },
|
|
colBorder = { 0.00, 0.00, 0.00, 0.85 },
|
|
colBorderNI = { 1.00, 0.80, 0.00, 0.0 },
|
|
colText = { 1.00, 1.00, 1.00, 1.00 },
|
|
colTextTime = { 1.00, 1.00, 1.00, 1.00 },
|
|
colTextLag = { 1.00, 0.00, 0.00, 1.00 },
|
|
colInterrupted = { 1.00, 0.80, 0.00, 0 },
|
|
colFailed = { 0.70, 0.30, 0.20, 0 },
|
|
colSpark = { 1.00, 1.00, 1.00, 0 },
|
|
colSuccess = { 0.15, 0.25, 0.10, 0 },
|
|
colShadow = { 0.00, 0.00, 0.00, 0.70 },
|
|
|
|
-- bar settings
|
|
bShowLat = false, -- show latency box
|
|
bShowCBS = false, -- show castbar spark
|
|
bShowTicks = false, -- show channeled ticks
|
|
strNameFormat = "", -- default nfs
|
|
strTimeFormat = "r<0m>",-- default tfs
|
|
bShowPlayerLatency = false, -- do not show text latency information
|
|
bMergeTrade = false, -- merge tradeskill information
|
|
bIconUnlocked = true, -- option to unlock icon (v1.31)
|
|
};
|
|
|
|
self.strAutoShot, _, self.iconAutoShot = GetSpellInfo(75);
|
|
self.strAutoAttack, _, self.iconAutoAttack = GetSpellInfo(6603);
|
|
self.strShootWand, _, self.iconShootWand = GetSpellInfo(5019);
|
|
|
|
self.toyIcon = "Interface\\Icons\\Inv_Misc_Toy_07";
|
|
|
|
if (not GnosisConfigs) then
|
|
GnosisConfigs = {};
|
|
end
|
|
end
|
|
|
|
-- sound files
|
|
local k, v;
|
|
Gnosis.BlizzSounds = {};
|
|
for k, v in pairs(SOUNDKIT) do
|
|
Gnosis.BlizzSounds[k] = k;
|
|
end
|
|
|