/AddOns/Blizzard_CombatLog/Blizzard_CombatLog.lua
Lua | 3672 lines | 2704 code | 358 blank | 610 comment | 453 complexity | 1be40671c61a777a6441264e7422cb8f MD5 | raw file
Large files files are truncated, but you can click here to view the full file
- --[[
- -- Blizzard Combat Log
- -- by Alexander Yoshi
- --
- -- This is a prototype combat log designed to serve the
- -- majority of needs for WoW players. The new and improved
- -- combat log event formatting should allow for the community
- -- to develop even better combat logs in the future.
- --
- -- Thanks to:
- -- Chris Heald & Xinhuan - Code Optimization Support
- --
- --]]
- -- Version
- -- Constant -- Incrementing this number will erase saved filter settings!!
- COMBATLOG_FILTER_VERSION = 4.3;
- -- Saved Variable
- Blizzard_CombatLog_Filter_Version = 0;
- -- Define the log
- COMBATLOG = ChatFrame2;
- -- BUFF / DEBUFF
- AURA_TYPE_BUFF = "BUFF";
- AURA_TYPE_DEBUFF = "DEBUFF"
- -- Message Limit
- COMBATLOG_LIMIT_PER_FRAME = 1;
- COMBATLOG_HIGHLIGHT_MULTIPLIER = 1.5;
- -- Default Colors
- COMBATLOG_DEFAULT_COLORS = {
- -- Unit names
- unitColoring = {
- [COMBATLOG_FILTER_MINE] = {a=1.0,r=0.70,g=0.70,b=0.70}; --{a=1.0,r=0.14,g=1.00,b=0.15};
- [COMBATLOG_FILTER_MY_PET] = {a=1.0,r=0.70,g=0.70,b=0.70}; --{a=1.0,r=0.14,g=0.80,b=0.15};
- [COMBATLOG_FILTER_FRIENDLY_UNITS] = {a=1.0,r=0.34,g=0.64,b=1.00};
- [COMBATLOG_FILTER_HOSTILE_UNITS] = {a=1.0,r=0.75,g=0.05,b=0.05};
- [COMBATLOG_FILTER_HOSTILE_PLAYERS] = {a=1.0,r=0.75,g=0.05,b=0.05};
- [COMBATLOG_FILTER_NEUTRAL_UNITS] = {a=1.0,r=0.75,g=0.05,b=0.05}; -- {a=1.0,r=0.80,g=0.80,b=0.14};
- [COMBATLOG_FILTER_UNKNOWN_UNITS] = {a=1.0,r=0.75,g=0.75,b=0.75};
- };
- -- School coloring
- schoolColoring = {
- [SCHOOL_MASK_NONE] = {a=1.0,r=1.00,g=1.00,b=1.00};
- [SCHOOL_MASK_PHYSICAL] = {a=1.0,r=1.00,g=1.00,b=0.00};
- [SCHOOL_MASK_HOLY] = {a=1.0,r=1.00,g=0.90,b=0.50};
- [SCHOOL_MASK_FIRE] = {a=1.0,r=1.00,g=0.50,b=0.00};
- [SCHOOL_MASK_NATURE] = {a=1.0,r=0.30,g=1.00,b=0.30};
- [SCHOOL_MASK_FROST] = {a=1.0,r=0.50,g=1.00,b=1.00};
- [SCHOOL_MASK_SHADOW] = {a=1.0,r=0.50,g=0.50,b=1.00};
- [SCHOOL_MASK_ARCANE] = {a=1.0,r=1.00,g=0.50,b=1.00};
- };
- -- Defaults
- defaults = {
- spell = {a=1.0,r=1.00,g=1.00,b=1.00};
- damage = {a=1.0,r=1.00,g=1.00,b=0.00};
- };
- -- Line coloring
- eventColoring = {
- };
- -- Highlighted events
- highlightedEvents = {
- ["PARTY_KILL"] = true;
- };
- };
- COMBATLOG_DEFAULT_SETTINGS = {
- -- Settings
- fullText = false;
- textMode = TEXT_MODE_A;
- timestamp = false;
- timestampFormat = TEXT_MODE_A_TIMESTAMP;
- unitColoring = false;
- sourceColoring = true;
- destColoring = true;
- lineColoring = true;
- lineHighlighting = true;
- abilityColoring = false;
- abilityActorColoring = false;
- abilitySchoolColoring = false;
- abilityHighlighting = true;
- actionColoring = false;
- actionActorColoring = false;
- actionHighlighting = false;
- amountColoring = false;
- amountActorColoring = false;
- amountSchoolColoring = false;
- amountHighlighting = true;
- schoolNameColoring = false;
- schoolNameActorColoring = false;
- schoolNameHighlighting = true;
- noMeleeSwingColoring = false;
- missColoring = true;
- braces = false;
- unitBraces = true;
- sourceBraces = true;
- destBraces = true;
- spellBraces = false;
- itemBraces = true;
- showHistory = true;
- lineColorPriority = 1; -- 1 = source->dest->event, 2 = dest->source->event, 3 = event->source->dest
- unitIcons = true;
- hideBuffs = true;
- hideDebuffs = true;
- --unitTokens = true;
- };
- --
- -- Combat Log Icons
- --
- COMBATLOG_ICON_RAIDTARGET1 = "|TInterface\\TargetingFrame\\UI-RaidTargetingIcon_1.blp:0|t";
- COMBATLOG_ICON_RAIDTARGET2 = "|TInterface\\TargetingFrame\\UI-RaidTargetingIcon_2.blp:0|t";
- COMBATLOG_ICON_RAIDTARGET3 = "|TInterface\\TargetingFrame\\UI-RaidTargetingIcon_3.blp:0|t";
- COMBATLOG_ICON_RAIDTARGET4 = "|TInterface\\TargetingFrame\\UI-RaidTargetingIcon_4.blp:0|t";
- COMBATLOG_ICON_RAIDTARGET5 = "|TInterface\\TargetingFrame\\UI-RaidTargetingIcon_5.blp:0|t";
- COMBATLOG_ICON_RAIDTARGET6 = "|TInterface\\TargetingFrame\\UI-RaidTargetingIcon_6.blp:0|t";
- COMBATLOG_ICON_RAIDTARGET7 = "|TInterface\\TargetingFrame\\UI-RaidTargetingIcon_7.blp:0|t";
- COMBATLOG_ICON_RAIDTARGET8 = "|TInterface\\TargetingFrame\\UI-RaidTargetingIcon_8.blp:0|t";
- --
- -- Default Event List
- --
- COMBATLOG_EVENT_LIST = {
- ["ENVIRONMENTAL_DAMAGE"] = true,
- ["SWING_DAMAGE"] = true,
- ["SWING_MISSED"] = true,
- ["RANGE_DAMAGE"] = true,
- ["RANGE_MISSED"] = true,
- ["SPELL_CAST_START"] = false,
- ["SPELL_CAST_SUCCESS"] = false,
- ["SPELL_CAST_FAILED"] = false,
- ["SPELL_MISSED"] = true,
- ["SPELL_DAMAGE"] = true,
- ["SPELL_HEAL"] = true,
- ["SPELL_ENERGIZE"] = true,
- ["SPELL_DRAIN"] = true,
- ["SPELL_LEECH"] = true,
- ["SPELL_SUMMON"] = true,
- ["SPELL_RESURRECT"] = true,
- ["SPELL_CREATE"] = true,
- ["SPELL_INSTAKILL"] = true,
- ["SPELL_INTERRUPT"] = true,
- ["SPELL_EXTRA_ATTACKS"] = true,
- ["SPELL_DURABILITY_DAMAGE"] = false,
- ["SPELL_DURABILITY_DAMAGE_ALL"] = false,
- ["SPELL_AURA_APPLIED"] = false,
- ["SPELL_AURA_APPLIED_DOSE"] = false,
- ["SPELL_AURA_REMOVED"] = false,
- ["SPELL_AURA_REMOVED_DOSE"] = false,
- ["SPELL_AURA_BROKEN"] = false,
- ["SPELL_AURA_BROKEN_SPELL"] = false,
- ["SPELL_AURA_REFRESH"] = false,
- ["SPELL_DISPEL"] = true,
- ["SPELL_STOLEN"] = true,
- ["ENCHANT_APPLIED"] = true,
- ["ENCHANT_REMOVED"] = true,
- ["SPELL_PERIODIC_MISSED"] = true,
- ["SPELL_PERIODIC_DAMAGE"] = true,
- ["SPELL_PERIODIC_HEAL"] = true,
- ["SPELL_PERIODIC_ENERGIZE"] = true,
- ["SPELL_PERIODIC_DRAIN"] = true,
- ["SPELL_PERIODIC_LEECH"] = true,
- ["SPELL_DISPEL_FAILED"] = true,
- ["DAMAGE_SHIELD"] = false,
- ["DAMAGE_SHIELD_MISSED"] = false,
- ["DAMAGE_SPLIT"] = false,
- ["PARTY_KILL"] = true,
- ["UNIT_DIED"] = true,
- ["UNIT_DESTROYED"] = true,
- ["SPELL_BUILDING_DAMAGE"] = true,
- ["SPELL_BUILDING_HEAL"] = true,
- ["UNIT_DISSIPATES"] = true,
- };
- COMBATLOG_FLAG_LIST = {
- [COMBATLOG_FILTER_MINE] = true,
- [COMBATLOG_FILTER_MY_PET] = true,
- [COMBATLOG_FILTER_FRIENDLY_UNITS] = true,
- [COMBATLOG_FILTER_HOSTILE_UNITS] = true,
- [COMBATLOG_FILTER_HOSTILE_PLAYERS] = true,
- [COMBATLOG_FILTER_NEUTRAL_UNITS] = true,
- [COMBATLOG_FILTER_UNKNOWN_UNITS] = true,
- };
- EVENT_TEMPLATE_FORMATS = {
- ["SPELL_AURA_BROKEN_SPELL"] = TEXT_MODE_A_STRING_3,
- ["SPELL_CAST_START"] = TEXT_MODE_A_STRING_2,
- ["SPELL_CAST_SUCCESS"] = TEXT_MODE_A_STRING_2
- };
- --
- -- Creates an empty filter
- --
- function Blizzard_CombatLog_InitializeFilters( settings )
- settings.filters =
- {
- [1] = {
- eventList = {};
- };
- };
- end
- --
- -- Generates a new event list from the COMBATLOG_EVENT_LIST global
- --
- -- I wish there was a better way built in to do this.
- --
- -- Returns:
- -- An array, indexed by the events, with a value of true
- --
- function Blizzard_CombatLog_GenerateFullEventList ( )
- local eventList = {}
- for event, v in pairs ( COMBATLOG_EVENT_LIST ) do
- eventList[event] = true;
- end
- return eventList;
- end
- function Blizzard_CombatLog_GenerateFullFlagList(flag)
- local flagList = {};
- for k, v in pairs(COMBATLOG_FLAG_LIST) do
- if ( flag ) then
- flagList[k] = true
- else
- flagList[k] = false;
- end
- end
- return flagList;
- end
- --
- -- Default CombatLog Filter
- -- This table is used to create new CombatLog filters
- --
- DEFAULT_COMBATLOG_FILTER_TEMPLATE = {
- -- Descriptive Information
- hasQuickButton = true;
- quickButtonDisplay = {
- solo = true;
- party = true;
- raid = true;
- };
- -- Default Color and Formatting Options
- settings = CopyTable(COMBATLOG_DEFAULT_SETTINGS);
- -- Coloring
- colors = CopyTable(COMBATLOG_DEFAULT_COLORS);
- -- The actual client filters
- filters = {
- [1] = {
- eventList = Blizzard_CombatLog_GenerateFullEventList();
- sourceFlags = {
- [COMBATLOG_FILTER_MINE] = true,
- [COMBATLOG_FILTER_MY_PET] = true;
- };
- destFlags = nil;
- };
- [2] = {
- eventList = Blizzard_CombatLog_GenerateFullEventList();
- sourceFlags = nil;
- destFlags = {
- [COMBATLOG_FILTER_MINE] = true,
- [COMBATLOG_FILTER_MY_PET] = true;
- };
- };
- };
- };
- local CombatLogUpdateFrame = CreateFrame("Frame", "CombatLogUpdateFrame", UIParent)
- local _G = getfenv(0)
- local bit_bor = _G.bit.bor
- local bit_band = _G.bit.band
- local tinsert = _G.tinsert
- local tremove = _G.tremove
- local math_floor = _G.math.floor
- local format = _G.format
- local gsub = _G.gsub
- local strsub = _G.strsub
-
- -- Make all the constants upvalues. This prevents the global environment lookup + table lookup each time we use one (and they're used a lot)
- local COMBATLOG_OBJECT_AFFILIATION_MINE = COMBATLOG_OBJECT_AFFILIATION_MINE
- local COMBATLOG_OBJECT_AFFILIATION_PARTY = COMBATLOG_OBJECT_AFFILIATION_PARTY
- local COMBATLOG_OBJECT_AFFILIATION_RAID = COMBATLOG_OBJECT_AFFILIATION_RAID
- local COMBATLOG_OBJECT_AFFILIATION_OUTSIDER = COMBATLOG_OBJECT_AFFILIATION_OUTSIDER
- local COMBATLOG_OBJECT_AFFILIATION_MASK = COMBATLOG_OBJECT_AFFILIATION_MASK
- local COMBATLOG_OBJECT_REACTION_FRIENDLY = COMBATLOG_OBJECT_REACTION_FRIENDLY
- local COMBATLOG_OBJECT_REACTION_NEUTRAL = COMBATLOG_OBJECT_REACTION_NEUTRAL
- local COMBATLOG_OBJECT_REACTION_HOSTILE = COMBATLOG_OBJECT_REACTION_HOSTILE
- local COMBATLOG_OBJECT_REACTION_MASK = COMBATLOG_OBJECT_REACTION_MASK
- local COMBATLOG_OBJECT_CONTROL_PLAYER = COMBATLOG_OBJECT_CONTROL_PLAYER
- local COMBATLOG_OBJECT_CONTROL_NPC = COMBATLOG_OBJECT_CONTROL_NPC
- local COMBATLOG_OBJECT_CONTROL_MASK = COMBATLOG_OBJECT_CONTROL_MASK
- local COMBATLOG_OBJECT_TYPE_PLAYER = COMBATLOG_OBJECT_TYPE_PLAYER
- local COMBATLOG_OBJECT_TYPE_NPC = COMBATLOG_OBJECT_TYPE_NPC
- local COMBATLOG_OBJECT_TYPE_PET = COMBATLOG_OBJECT_TYPE_PET
- local COMBATLOG_OBJECT_TYPE_GUARDIAN = COMBATLOG_OBJECT_TYPE_GUARDIAN
- local COMBATLOG_OBJECT_TYPE_OBJECT = COMBATLOG_OBJECT_TYPE_OBJECT
- local COMBATLOG_OBJECT_TYPE_MASK = COMBATLOG_OBJECT_TYPE_MASK
- local COMBATLOG_OBJECT_TARGET = COMBATLOG_OBJECT_TARGET
- local COMBATLOG_OBJECT_FOCUS = COMBATLOG_OBJECT_FOCUS
- local COMBATLOG_OBJECT_MAINTANK = COMBATLOG_OBJECT_MAINTANK
- local COMBATLOG_OBJECT_MAINASSIST = COMBATLOG_OBJECT_MAINASSIST
- local COMBATLOG_OBJECT_RAIDTARGET1 = COMBATLOG_OBJECT_RAIDTARGET1
- local COMBATLOG_OBJECT_RAIDTARGET2 = COMBATLOG_OBJECT_RAIDTARGET2
- local COMBATLOG_OBJECT_RAIDTARGET3 = COMBATLOG_OBJECT_RAIDTARGET3
- local COMBATLOG_OBJECT_RAIDTARGET4 = COMBATLOG_OBJECT_RAIDTARGET4
- local COMBATLOG_OBJECT_RAIDTARGET5 = COMBATLOG_OBJECT_RAIDTARGET5
- local COMBATLOG_OBJECT_RAIDTARGET6 = COMBATLOG_OBJECT_RAIDTARGET6
- local COMBATLOG_OBJECT_RAIDTARGET7 = COMBATLOG_OBJECT_RAIDTARGET7
- local COMBATLOG_OBJECT_RAIDTARGET8 = COMBATLOG_OBJECT_RAIDTARGET8
- local COMBATLOG_OBJECT_NONE = COMBATLOG_OBJECT_NONE
- local COMBATLOG_OBJECT_SPECIAL_MASK = COMBATLOG_OBJECT_SPECIAL_MASK
- local COMBATLOG_FILTER_ME = COMBATLOG_FILTER_ME
- local COMBATLOG_FILTER_MINE = COMBATLOG_FILTER_MINE
- local COMBATLOG_FILTER_MY_PET = COMBATLOG_FILTER_MY_PET
- local COMBATLOG_FILTER_FRIENDLY_UNITS = COMBATLOG_FILTER_FRIENDLY_UNITS
- local COMBATLOG_FILTER_HOSTILE_UNITS = COMBATLOG_FILTER_HOSTILE_UNITS
- local COMBATLOG_FILTER_HOSTILE_PLAYERS = COMBATLOG_FILTER_HOSTILE_PLAYERS
- local COMBATLOG_FILTER_NEUTRAL_UNITS = COMBATLOG_FILTER_NEUTRAL_UNITS
- local COMBATLOG_FILTER_UNKNOWN_UNITS = COMBATLOG_FILTER_UNKNOWN_UNITS
- local COMBATLOG_FILTER_EVERYTHING = COMBATLOG_FILTER_EVERYTHING
- local COMBATLOG = COMBATLOG
- local AURA_TYPE_BUFF = AURA_TYPE_BUFF
- local AURA_TYPE_DEBUFF = AURA_TYPE_DEBUFF
- local SPELL_POWER_MANA = SPELL_POWER_MANA
- local SPELL_POWER_RAGE = SPELL_POWER_RAGE
- local SPELL_POWER_FOCUS = SPELL_POWER_FOCUS
- local SPELL_POWER_ENERGY = SPELL_POWER_ENERGY
- local SPELL_POWER_RUNES = SPELL_POWER_RUNES
- local SPELL_POWER_RUNIC_POWER = SPELL_POWER_RUNIC_POWER
- local SPELL_POWER_SOUL_SHARDS = SPELL_POWER_SOUL_SHARDS;
- local SPELL_POWER_ECLIPSE = SPELL_POWER_ECLIPSE;
- local SPELL_POWER_HOLY_POWER = SPELL_POWER_HOLY_POWER;
- local SPELL_POWER_ALTERNATE_POWER = SPELL_POWER_ALTERNATE_POWER;
- local SPELL_POWER_BURNING_EMBERS = SPELL_POWER_BURNING_EMBERS;
- local SCHOOL_MASK_NONE = SCHOOL_MASK_NONE
- local SCHOOL_MASK_PHYSICAL = SCHOOL_MASK_PHYSICAL
- local SCHOOL_MASK_HOLY = SCHOOL_MASK_HOLY
- local SCHOOL_MASK_FIRE = SCHOOL_MASK_FIRE
- local SCHOOL_MASK_NATURE = SCHOOL_MASK_NATURE
- local SCHOOL_MASK_FROST = SCHOOL_MASK_FROST
- local SCHOOL_MASK_SHADOW = SCHOOL_MASK_SHADOW
- local SCHOOL_MASK_ARCANE = SCHOOL_MASK_ARCANE
- local COMBATLOG_LIMIT_PER_FRAME = COMBATLOG_LIMIT_PER_FRAME
- local COMBATLOG_HIGHLIGHT_MULTIPLIER = COMBATLOG_HIGHLIGHT_MULTIPLIER
- local COMBATLOG_DEFAULT_COLORS = COMBATLOG_DEFAULT_COLORS
- local COMBATLOG_DEFAULT_SETTINGS = COMBATLOG_DEFAULT_SETTINGS
- local COMBATLOG_ICON_RAIDTARGET1 = COMBATLOG_ICON_RAIDTARGET1
- local COMBATLOG_ICON_RAIDTARGET2 = COMBATLOG_ICON_RAIDTARGET2
- local COMBATLOG_ICON_RAIDTARGET3 = COMBATLOG_ICON_RAIDTARGET3
- local COMBATLOG_ICON_RAIDTARGET4 = COMBATLOG_ICON_RAIDTARGET4
- local COMBATLOG_ICON_RAIDTARGET5 = COMBATLOG_ICON_RAIDTARGET5
- local COMBATLOG_ICON_RAIDTARGET6 = COMBATLOG_ICON_RAIDTARGET6
- local COMBATLOG_ICON_RAIDTARGET7 = COMBATLOG_ICON_RAIDTARGET7
- local COMBATLOG_ICON_RAIDTARGET8 = COMBATLOG_ICON_RAIDTARGET8
- local COMBATLOG_EVENT_LIST = COMBATLOG_EVENT_LIST
- local CombatLog_OnEvent -- for later
- local CombatLog_Object_IsA = CombatLog_Object_IsA
- -- Create a dummy CombatLogQuickButtonFrame for line 803 of FloatingChatFrame.lua. It causes inappropriate show/hide behavior. Instead, we'll use our own frame display handling.
- -- If there are more than 2 combat log frames, then the CombatLogQuickButtonFrame gets tied to the last frame tab's visibility status. Yuck! Let's just instead tie it to the combat log's tab.
- local CombatLogQuickButtonFrame, CombatLogQuickButtonFrameProgressBar, CombatLogQuickButtonFrameTexture
- _G.CombatLogQuickButtonFrame = CreateFrame("Frame", "CombatLogQuickButtonFrame", UIParent)
- local Blizzard_CombatLog_Update_QuickButtons
- local Blizzard_CombatLog_PreviousSettings
- --
- -- Persistant Variables
- --
- --
- -- Default Filters
- --
- Blizzard_CombatLog_Filter_Defaults = {
- -- All of the filters
- filters = {
- [1] = {
- -- Descriptive Information
- name = QUICKBUTTON_NAME_MY_ACTIONS;
- hasQuickButton = true;
- quickButtonName = QUICKBUTTON_NAME_MY_ACTIONS;
- quickButtonDisplay = {
- solo = true;
- party = true;
- raid = true;
- };
- tooltip = QUICKBUTTON_NAME_MY_ACTIONS_TOOLTIP;
- -- Default Color and Formatting Options
- settings = CopyTable(COMBATLOG_DEFAULT_SETTINGS);
- -- Coloring
- colors = CopyTable(COMBATLOG_DEFAULT_COLORS);
- -- The actual client filters
- filters = {
- [1] = {
- eventList = {
- ["ENVIRONMENTAL_DAMAGE"] = false,
- ["SWING_DAMAGE"] = true,
- ["SWING_MISSED"] = false,
- ["RANGE_DAMAGE"] = true,
- ["RANGE_MISSED"] = false,
- --["SPELL_CAST_START"] = true,
- --["SPELL_CAST_SUCCESS"] = true,
- --["SPELL_CAST_FAILED"] = true,
- ["SPELL_MISSED"] = false,
- ["SPELL_DAMAGE"] = true,
- ["SPELL_HEAL"] = true,
- ["SPELL_ENERGIZE"] = false,
- ["SPELL_DRAIN"] = false,
- ["SPELL_LEECH"] = false,
- ["SPELL_INSTAKILL"] = false,
- ["SPELL_INTERRUPT"] = false,
- ["SPELL_EXTRA_ATTACKS"] = false,
- --["SPELL_DURABILITY_DAMAGE"] = true,
- --["SPELL_DURABILITY_DAMAGE_ALL"] = true,
- ["SPELL_AURA_APPLIED"] = false,
- ["SPELL_AURA_APPLIED_DOSE"] = false,
- ["SPELL_AURA_REMOVED"] = false,
- ["SPELL_AURA_REMOVED_DOSE"] = false,
- ["SPELL_AURA_BROKEN"] = false,
- ["SPELL_AURA_BROKEN_SPELL"] = false,
- ["SPELL_AURA_REFRESH"] = false,
- ["SPELL_DISPEL"] = false,
- ["SPELL_STOLEN"] = false,
- ["ENCHANT_APPLIED"] = false,
- ["ENCHANT_REMOVED"] = false,
- ["SPELL_PERIODIC_MISSED"] = false,
- ["SPELL_PERIODIC_DAMAGE"] = true,
- ["SPELL_PERIODIC_HEAL"] = true,
- ["SPELL_PERIODIC_ENERGIZE"] = false,
- ["SPELL_PERIODIC_DRAIN"] = false,
- ["SPELL_PERIODIC_LEECH"] = false,
- ["SPELL_DISPEL_FAILED"] = false,
- --["DAMAGE_SHIELD"] = true,
- --["DAMAGE_SHIELD_MISSED"] = true,
- ["DAMAGE_SPLIT"] = true,
- ["PARTY_KILL"] = true,
- ["UNIT_DIED"] = false,
- ["UNIT_DESTROYED"] = true,
- ["UNIT_DISSIPATES"] = true
- };
- sourceFlags = {
- [COMBATLOG_FILTER_MINE] = true
- };
- destFlags = nil;
- };
- [2] = {
- eventList = {
- --["ENVIRONMENTAL_DAMAGE"] = true,
- ["SWING_DAMAGE"] = true,
- ["SWING_MISSED"] = true,
- ["RANGE_DAMAGE"] = true,
- ["RANGE_MISSED"] = true,
- --["SPELL_CAST_START"] = true,
- --["SPELL_CAST_SUCCESS"] = true,
- --["SPELL_CAST_FAILED"] = true,
- ["SPELL_MISSED"] = true,
- ["SPELL_DAMAGE"] = true,
- ["SPELL_HEAL"] = true,
- ["SPELL_ENERGIZE"] = true,
- ["SPELL_DRAIN"] = true,
- ["SPELL_LEECH"] = true,
- ["SPELL_INSTAKILL"] = true,
- ["SPELL_INTERRUPT"] = true,
- ["SPELL_EXTRA_ATTACKS"] = true,
- --["SPELL_DURABILITY_DAMAGE"] = true,
- --["SPELL_DURABILITY_DAMAGE_ALL"] = true,
- --["SPELL_AURA_APPLIED"] = true,
- --["SPELL_AURA_APPLIED_DOSE"] = true,
- --["SPELL_AURA_REMOVED"] = true,
- --["SPELL_AURA_REMOVED_DOSE"] = true,
- ["SPELL_DISPEL"] = true,
- ["SPELL_STOLEN"] = true,
- ["ENCHANT_APPLIED"] = true,
- ["ENCHANT_REMOVED"] = true,
- --["SPELL_PERIODIC_MISSED"] = true,
- --["SPELL_PERIODIC_DAMAGE"] = true,
- --["SPELL_PERIODIC_HEAL"] = true,
- --["SPELL_PERIODIC_ENERGIZE"] = true,
- --["SPELL_PERIODIC_DRAIN"] = true,
- --["SPELL_PERIODIC_LEECH"] = true,
- ["SPELL_DISPEL_FAILED"] = true,
- --["DAMAGE_SHIELD"] = true,
- --["DAMAGE_SHIELD_MISSED"] = true,
- ["DAMAGE_SPLIT"] = true,
- ["PARTY_KILL"] = true,
- ["UNIT_DIED"] = true,
- ["UNIT_DESTROYED"] = true,
- ["UNIT_DISSIPATES"] = true
- };
- sourceFlags = nil;
- destFlags = {
- [COMBATLOG_FILTER_MINE] = false,
- [COMBATLOG_FILTER_MY_PET] = false;
- };
- };
- };
- };
- [2] = {
- -- Descriptive Information
- name = QUICKBUTTON_NAME_ME;
- hasQuickButton = true;
- quickButtonName = QUICKBUTTON_NAME_ME;
- quickButtonDisplay = {
- solo = true;
- party = true;
- raid = true;
- };
- tooltip = QUICKBUTTON_NAME_ME_TOOLTIP;
- -- Settings
- settings = CopyTable(COMBATLOG_DEFAULT_SETTINGS);
- -- Coloring
- colors = CopyTable(COMBATLOG_DEFAULT_COLORS);
- -- The actual client filters
- filters = {
- [1] = {
- eventList = {
- ["ENVIRONMENTAL_DAMAGE"] = true,
- ["SWING_DAMAGE"] = true,
- ["RANGE_DAMAGE"] = true,
- ["SPELL_DAMAGE"] = true,
- ["SPELL_HEAL"] = true,
- ["SPELL_PERIODIC_DAMAGE"] = true,
- ["SPELL_PERIODIC_HEAL"] = true,
- ["DAMAGE_SPLIT"] = true,
- ["UNIT_DIED"] = true,
- ["UNIT_DESTROYED"] = true,
- ["UNIT_DISSIPATES"] = true
- };
- sourceFlags = Blizzard_CombatLog_GenerateFullFlagList(false);
- destFlags = nil;
- };
- [2] = {
- eventList = Blizzard_CombatLog_GenerateFullEventList();
- sourceFlags = nil;
- destFlags = {
- [COMBATLOG_FILTER_MINE] = true,
- [COMBATLOG_FILTER_MY_PET] = false;
- };
- };
- };
- };
- };
- -- Current Filter
- currentFilter = 1;
- };
- Blizzard_CombatLog_Filters = Blizzard_CombatLog_Filter_Defaults;
- -- Combat Log Filter Resetting Code
- --
- -- args:
- -- config - the configuration array we are about to apply
- --
- function Blizzard_CombatLog_ApplyFilters(config)
- if ( not config ) then
- return;
- end
- CombatLogResetFilter()
- -- Loop over all associated filters
- local eventList;
- for k,v in pairs(config.filters) do
- local eList
- -- Only use the first filter's eventList because for some reason each filter that the player can see actually
- -- has two filters, one for source flags and one for dest flags (??), even though only the eventList for the source
- -- flags is updated properly
- eventList = config.filters[1].eventList;
- if ( eventList ) then
- for k2,v2 in pairs(eventList) do
- if ( v2 == true ) then
- -- The true comparison is because check boxes whose parent is unchecked will be non-false but not "true"
- eList = eList and (eList .. "," .. k2) or k2
- end
- end
- end
-
- local sourceFlags, destFlags;
- if ( v.sourceFlags ) then
- sourceFlags = 0;
- for k2, v2 in pairs(v.sourceFlags) do
- -- Support for GUIDs
- if ( type (k2) == "string" ) then
- sourceFlags = k2;
- break;
- end
- -- Otherwise OR bits
- if ( v2 ) then
- sourceFlags = bit_bor(sourceFlags, k2);
- end
- end
- end
- if ( v.destFlags ) then
- destFlags = 0;
- for k2, v2 in pairs(v.destFlags) do
- -- Support for GUIDs
- if ( type (k2) == "string" ) then
- destFlags = k2;
- break;
- end
- -- Otherwise OR bits
- if ( v2 ) then
- destFlags = bit_bor(destFlags, k2);
- end
- end
- end
- if ( type(sourceFlags) == "string" and destFlags == 0 ) then
- destFlags = nil;
- end
- if ( type(destFlags) == "string" and sourceFlags == 0 ) then
- sourceFlags = nil;
- end
- -- This is a HACK!!! Need filters to be able to accept empty or zero sourceFlags or destFlags
- if ( sourceFlags == 0 or destFlags == 0 ) then
- CombatLogAddFilter("", COMBATLOG_FILTER_MINE, nil);
- else
- CombatLogAddFilter(eList, sourceFlags, destFlags);
- end
- end
- end
- --
- -- Combat Log Repopulation Code
- --
- -- Message Limit
- COMBATLOG_MESSAGE_LIMIT = 300;
- --
- -- Repopulate the combat log with message history
- --
- function Blizzard_CombatLog_Refilter()
- local count = CombatLogGetNumEntries();
-
- COMBATLOG:SetMaxLines(COMBATLOG_MESSAGE_LIMIT);
- -- count should be between 1 and COMBATLOG_MESSAGE_LIMIT
- count = max(1, min(count, COMBATLOG_MESSAGE_LIMIT));
- CombatLogSetCurrentEntry(0);
-
- -- Clear the combat log
- COMBATLOG:Clear();
-
- -- Moved setting the max value here, since we don't really need to reset the max every frame, do we?
- -- We can't add events while refiltering (:AddFilter short circuits) so this should be safe optimization.
- CombatLogQuickButtonFrameProgressBar:SetMinMaxValues(0, count);
- CombatLogQuickButtonFrameProgressBar:SetValue(0);
- CombatLogQuickButtonFrameProgressBar:Show();
- -- Enable the distributed frame
- CombatLogUpdateFrame.refiltering = true;
- CombatLogUpdateFrame:SetScript("OnUpdate", Blizzard_CombatLog_RefilterUpdate)
-
- Blizzard_CombatLog_RefilterUpdate()
- end
- --
- -- This is a single frame "step" in the refiltering process
- --
- function Blizzard_CombatLog_RefilterUpdate()
- local valid = CombatLogGetCurrentEntry(); -- CombatLogAdvanceEntry(0);
-
- -- Clear the combat log
- local total = 0;
- while (valid and total < COMBATLOG_LIMIT_PER_FRAME) do
- -- Log to the window
- local text, r, g, b, a = CombatLog_OnEvent(Blizzard_CombatLog_CurrentSettings, CombatLogGetCurrentEntry());
- -- NOTE: be sure to pass in nil for the color id or the color id may override the r, g, b values for this message
- if ( text ) then
- COMBATLOG:AddMessage( text, r, g, b, nil, true );
- end
- -- count can be
- -- positive to advance from oldest to newest
- -- negative to advance from newest to oldest
- valid = CombatLogAdvanceEntry(-1)
- total = total + 1;
- end
- -- Show filtering progress bar
- CombatLogQuickButtonFrameProgressBar:SetValue(CombatLogQuickButtonFrameProgressBar:GetValue() + total);
- if ( not valid or (CombatLogQuickButtonFrameProgressBar:GetValue() >= COMBATLOG_MESSAGE_LIMIT) ) then
- CombatLogUpdateFrame.refiltering = false
- CombatLogUpdateFrame:SetScript("OnUpdate", nil)
- CombatLogQuickButtonFrameProgressBar:Hide();
- end
- end
- --
- -- Checks for an event over all filters
- --
- function Blizzard_CombatLog_HasEvent ( settings, ... )
- -- If this actually happens, we have data corruption issues.
- if ( not settings.filters ) then
- settings.filters = {}
- end
- for _, filter in pairs (settings.filters) do
- if ( filter.eventList ) then
- for i = 1, select("#", ...) do
- local event = select(i, ...)
- if ( filter.eventList[event] == true ) then
- return true
- end
- end
- end
- end
- end
- --
- -- Checks for an event over all filters
- --
- function Blizzard_CombatLog_EnableEvent ( settings, ... )
- -- If this actually happens, we have data corruption issues.
- if ( not settings.filters ) then
- settings.filters = Blizzard_CombatLog_InitializeFilters( settings );
- end
- for _, filter in pairs (settings.filters) do
- if ( not filter.eventList ) then
- filter.eventList = {};
- end
- for i = 1, select("#", ...) do
- filter.eventList[select(i, ...)] = true;
- end
- end
- end
- --
- -- Checks for an event over all filters
- --
- function Blizzard_CombatLog_DisableEvent ( settings, ... )
- -- If this actually happens, we have data corruption issues.
- if ( not settings.filters ) then
- settings.filters = {}
- end
- for _, filter in pairs (settings.filters) do
- if ( filter.eventList ) then
- for i = 1, select("#", ...) do
- filter.eventList[select(i, ...)] = false;
- end
- end
- end
- end
- --
- -- Creates the action menu popup
- --
- do
- local eventType
- local actionMenu = {
- [1] = {
- text = "string.format(BLIZZARD_COMBAT_LOG_MENU_SPELL_HIDE, eventType)",
- func = function () Blizzard_CombatLog_SpellMenuClick ("HIDE", nil, nil, eventType); end;
- },
- };
- function Blizzard_CombatLog_CreateActionMenu(eventType_arg)
- -- Update upvalues
- eventType = eventType_arg
- actionMenu[1].text = string.format(BLIZZARD_COMBAT_LOG_MENU_SPELL_HIDE, eventType_arg);
- return actionMenu
- end
- end
- --
- -- Creates the spell menu popup
- --
- do
- local spellName, spellId, eventType
- local spellMenu = {
- [1] = {
- text = "string.format(BLIZZARD_COMBAT_LOG_MENU_SPELL_LINK, spellName)",
- func = function () Blizzard_CombatLog_SpellMenuClick ("LINK", spellName, spellId, eventType); end;
- },
- };
- local spellMenu2 = {
- [2] = {
- text = "string.format(BLIZZARD_COMBAT_LOG_MENU_SPELL_HIDE, eventType)",
- func = function () Blizzard_CombatLog_SpellMenuClick ("HIDE", spellName, spellId, eventType); end;
- },
- [3] = {
- text = "------------------";
- disabled = true;
- },
- };
- function Blizzard_CombatLog_CreateSpellMenu(spellName_arg, spellId_arg, eventType_arg)
- -- Update upvalues
- spellName, spellId, eventType = spellName_arg, spellId_arg, eventType_arg;
- -- Update menu text and filters
- spellMenu[1].text = string.format(BLIZZARD_COMBAT_LOG_MENU_SPELL_LINK, spellName);
- if ( eventType ) then
- spellMenu2[2].text = string.format(BLIZZARD_COMBAT_LOG_MENU_SPELL_HIDE, eventType);
- -- Copy the table references over
- spellMenu[2] = spellMenu2[2];
- if ( DEBUG ) then
- spellMenu[3] = spellMenu2[3];
- -- These 2 calls update the menus in their respective do-end blocks
- spellMenu[4] = Blizzard_CombatLog_FormattingMenu(Blizzard_CombatLog_Filters.currentFilter);
- spellMenu[5] = Blizzard_CombatLog_MessageTypesMenu(Blizzard_CombatLog_Filters.currentFilter);
- end
- else
- -- Remove the table references, they are still stored in their various closures
- spellMenu[2] = nil;
- spellMenu[3] = nil;
- spellMenu[4] = nil;
- spellMenu[5] = nil;
- end
- return spellMenu;
- end
- end
- --
- -- Temporary Menu
- --
- do
- -- This big table currently only has one upvalue: Blizzard_CombatLog_CurrentSettings
- local messageTypesMenu = {
- text = "Message Types";
- hasArrow = true;
- menuList = {
- [1] = {
- text = "Melee";
- hasArrow = true;
- checked = function() return Blizzard_CombatLog_HasEvent (Blizzard_CombatLog_CurrentSettings, "SWING_DAMAGE", "SWING_MISSED"); end;
- keepShownOnClick = true;
- func = function ( self, arg1, arg2, checked )
- Blizzard_CombatLog_MenuHelper ( checked, "SWING_DAMAGE", "SWING_MISSED" );
- end;
- menuList = {
- [1] = {
- text = "Damage";
- checked = function() return Blizzard_CombatLog_HasEvent (Blizzard_CombatLog_CurrentSettings, "SWING_DAMAGE");end;
- keepShownOnClick = true;
- func = function ( self, arg1, arg2, checked )
- Blizzard_CombatLog_MenuHelper ( checked, "SWING_DAMAGE" );
- end;
- };
- [2] = {
- text = "Failure";
- checked = function() return Blizzard_CombatLog_HasEvent (Blizzard_CombatLog_CurrentSettings, "SWING_MISSED"); end;
- keepShownOnClick = true;
- func = function ( self, arg1, arg2, checked )
- Blizzard_CombatLog_MenuHelper ( checked, "SWING_MISSED" );
- end;
- };
- };
- };
- [2] = {
- text = "Ranged";
- hasArrow = true;
- checked = function() return Blizzard_CombatLog_HasEvent (Blizzard_CombatLog_CurrentSettings, "RANGE_DAMAGE", "RANGE_MISSED"); end;
- keepShownOnClick = true;
- func = function ( self, arg1, arg2, checked )
- Blizzard_CombatLog_MenuHelper ( checked, "RANGED_DAMAGE", "RANGED_MISSED" );
- end;
- menuList = {
- [1] = {
- text = "Damage";
- checked = function() return Blizzard_CombatLog_HasEvent (Blizzard_CombatLog_CurrentSettings, "RANGE_DAMAGE"); end;
- keepShownOnClick = true;
- func = function ( self, arg1, arg2, checked )
- Blizzard_CombatLog_MenuHelper ( checked, "RANGE_DAMAGE" );
- end;
- };
- [2] = {
- text = "Failure";
- checked = function() return Blizzard_CombatLog_HasEvent (Blizzard_CombatLog_CurrentSettings, "RANGE_MISSED"); end;
- keepShownOnClick = true;
- func = function ( self, arg1, arg2, checked )
- Blizzard_CombatLog_MenuHelper ( checked, "RANGE_MISSED" );
- end;
- };
- };
- };
- [3] = {
- text = "Spells";
- hasArrow = true;
- checked = function() return Blizzard_CombatLog_HasEvent (Blizzard_CombatLog_CurrentSettings, "SPELL_DAMAGE", "SPELL_MISSED", "SPELL_HEAL", "SPELL_ENERGIZE", "SPELL_DRAIN", "SPELL_LEECH", "SPELL_INTERRUPT", "SPELL_EXTRA_ATTACKS", "SPELL_CAST_START", "SPELL_CAST_SUCCESS", "SPELL_CAST_FAILED", "SPELL_INSTAKILL", "SPELL_DURABILITY_DAMAGE" ); end;
- keepShownOnClick = true;
- func = function ( self, arg1, arg2, checked )
- Blizzard_CombatLog_MenuHelper ( checked, "SPELL_DAMAGE", "SPELL_MISSED", "SPELL_HEAL", "SPELL_ENERGIZE", "SPELL_DRAIN", "SPELL_LEECH", "SPELL_INTERRUPT", "SPELL_EXTRA_ATTACKS", "SPELL_CAST_START", "SPELL_CAST_SUCCESS", "SPELL_CAST_FAILED", "SPELL_INSTAKILL", "SPELL_DURABILITY_DAMAGE" );
- end;
- menuList = {
- [1] = {
- text = "Damage";
- checked = function() return Blizzard_CombatLog_HasEvent (Blizzard_CombatLog_CurrentSettings, "SPELL_DAMAGE"); end;
- keepShownOnClick = true;
- func = function ( self, arg1, arg2, checked )
- Blizzard_CombatLog_MenuHelper ( checked, "SPELL_DAMAGE" );
- end;
- };
- [2] = {
- text = "Failure";
- checked = function() return Blizzard_CombatLog_HasEvent (Blizzard_CombatLog_CurrentSettings, "SPELL_MISSED"); end;
- keepShownOnClick = true;
- func = function ( self, arg1, arg2, checked )
- Blizzard_CombatLog_MenuHelper ( checked, "SPELL_MISSED" );
- end;
- };
- [3] = {
- text = "Heals";
- checked = function() return Blizzard_CombatLog_HasEvent (Blizzard_CombatLog_CurrentSettings, "SPELL_HEAL"); end;
- keepShownOnClick = true;
- func = function ( self, arg1, arg2, checked )
- Blizzard_CombatLog_MenuHelper ( checked, "SPELL_HEAL" );
- end;
- };
- [4] = {
- text = "Power Gains";
- checked = function() return Blizzard_CombatLog_HasEvent (Blizzard_CombatLog_CurrentSettings, "SPELL_ENERGIZE"); end;
- keepShownOnClick = true;
- func = function ( self, arg1, arg2, checked )
- Blizzard_CombatLog_MenuHelper ( checked, "SPELL_ENERGIZE" );
- end;
- };
- [4] = {
- text = "Drains";
- checked = function() return Blizzard_CombatLog_HasEvent (Blizzard_CombatLog_CurrentSettings, "SPELL_DRAIN", "SPELL_LEECH"); end;
- keepShownOnClick = true;
- func = function ( self, arg1, arg2, checked )
- Blizzard_CombatLog_MenuHelper ( checked, "SPELL_DRAIN", "SPELL_LEECH" );
- end;
- };
- [5] = {
- text = "Interrupts";
- checked = function() return Blizzard_CombatLog_HasEvent (Blizzard_CombatLog_CurrentSettings, "SPELL_INTERRUPT"); end;
- keepShownOnClick = true;
- func = function ( self, arg1, arg2, checked )
- Blizzard_CombatLog_MenuHelper ( checked, "SPELL_INTERRUPT" );
- end;
- };
- [6] = {
- text = "Extra Attacks";
- checked = function() return Blizzard_CombatLog_HasEvent (Blizzard_CombatLog_CurrentSettings, "SPELL_EXTRA_ATTACKS"); end;
- keepShownOnClick = true;
- func = function ( self, arg1, arg2, checked )
- Blizzard_CombatLog_MenuHelper ( checked, "SPELL_EXTRA_ATTACKS" );
- end;
- };
- [7] = {
- text = "Casting";
- hasArrow = true;
- checked = function() return Blizzard_CombatLog_HasEvent (Blizzard_CombatLog_CurrentSettings, "SPELL_CAST_START", "SPELL_CAST_SUCCESS", "SPELL_CAST_FAILED"); end;
- keepShownOnClick = true;
- func = function ( self, arg1, arg2, checked )
- Blizzard_CombatLog_MenuHelper ( checked, "SPELL_CAST_START", "SPELL_CAST_SUCCESS", "SPELL_CAST_FAILED");
- end;
- menuList = {
- [1] = {
- text = "Start";
- checked = function() return Blizzard_CombatLog_HasEvent (Blizzard_CombatLog_CurrentSettings, "SPELL_CAST_START"); end;
- keepShownOnClick = true;
- func = function ( self, arg1, arg2, checked )
- Blizzard_CombatLog_MenuHelper ( checked, "SPELL_CAST_START" );
- end;
- };
- [2] = {
- text = "Success";
- checked = function() return Blizzard_CombatLog_HasEvent (Blizzard_CombatLog_CurrentSettings, "SPELL_CAST_SUCCESS"); end;
- keepShownOnClick = true;
- func = function ( self, arg1, arg2, checked )
- Blizzard_CombatLog_MenuHelper ( checked, "SPELL_CAST_SUCCESS" );
- end;
- };
- [3] = {
- text = "Failed";
- checked = function() return Blizzard_CombatLog_HasEvent (Blizzard_CombatLog_CurrentSettings, "SPELL_CAST_FAILED"); end;
- keepShownOnClick = true;
- func = function ( self, arg1, arg2, checked )
- Blizzard_CombatLog_MenuHelper ( checked, "SPELL_CAST_FAILED" );
- end;
- };
- };
- };
- [8] = {
- text = "Special";
- checked = function() return Blizzard_CombatLog_HasEvent (Blizzard_CombatLog_CurrentSettings, "SPELL_INSTAKILL", "SPELL_DURABILITY_DAMAGE"); end;
- keepShownOnClick = true;
- func = function ( self, arg1, arg2, checked )
- Blizzard_CombatLog_MenuHelper ( checked, "SPELL_INSTAKILL", "SPELL_DURABILITY_DAMAGE" );
- end;
- };
- };
- };
- [4] = {
- text = "Auras";
- hasArrow = true;
- checked = function() return Blizzard_CombatLog_HasEvent (Blizzard_CombatLog_CurrentSettings, "SPELL_AURA_APPLIED", "SPELL_AURA_BROKEN", "SPELL_AURA_REFRESH", "SPELL_AURA_BROKEN_SPELL", "SPELL_AURA_APPLIED_DOSE", "SPELL_AURA_REMOVED", "SPELL_AURA_REMOVED_DOSE", "SPELL_DISPEL", "SPELL_STOLEN", "ENCHANT_APPLIED", "ENCHANT_REMOVED" ); end;
- keepShownOnClick = true;
- func = function ( self, arg1, arg2, checked )
- Blizzard_CombatLog_MenuHelper ( checked, "SPELL_AURA_APPLIED", "SPELL_AURA_BROKEN", "SPELL_AURA_REFRESH", "SPELL_AURA_BROKEN_SPELL", "SPELL_AURA_APPLIED_DOSE", "SPELL_AURA_REMOVED", "SPELL_AURA_REMOVED_DOSE", "SPELL_DISPEL", "SPELL_STOLEN", "ENCHANT_APPLIED", "ENCHANT_REMOVED" );
- end;
- menuList = {
- [1] = {
- text = "Applied";
- checked = function() return Blizzard_CombatLog_HasEvent (Blizzard_CombatLog_CurrentSettings, "SPELL_AURA_APPLIED", "SPELL_AURA_BROKEN", "SPELL_AURA_REFRESH", "SPELL_AURA_BROKEN_SPELL", "SPELL_AURA_APPLIED_DOSE"); end;
- keepShownOnClick = true;
- func = function ( self, arg1, arg2, checked )
- Blizzard_CombatLog_MenuHelper ( checked, "SPELL_AURA_APPLIED", "SPELL_AURA_BROKEN", "SPELL_AURA_REFRESH", "SPELL_AURA_BROKEN_SPELL", "SPELL_AURA_APPLIED_DOSE", "ENCHANT_APPLIED" );
- end;
- };
- [2] = {
- text = "Removed";
- checked = function() return Blizzard_CombatLog_HasEvent (Blizzard_CombatLog_CurrentSettings, "SPELL_AURA_REMOVED", "SPELL_AURA_REMOVED_DOSE", "ENCHANT_REMOVED" ); end;
- keepShownOnClick = true;
- func = function ( self, arg1, arg2, checked )
- Blizzard_CombatLog_MenuHelper ( checked, "SPELL_AURA_REMOVED", "SPELL_AURA_REMOVED_DOSE" );
- end;
- };
- [3] = {
- text = "Dispelled";
- checked = function() return Blizzard_CombatLog_HasEvent (Blizzard_CombatLog_CurrentSettings, "SPELL_DISPEL"); end;
- keepShownOnClick = true;
- func = function ( self, arg1, arg2, checked )
- Blizzard_CombatLog_MenuHelper ( checked, "SPELL_DISPEL" );
- end;
- };
- [4] = {
- text = "Stolen";
- checked = function() return Blizzard_CombatLog_HasEvent (Blizzard_CombatLog_CurrentSettings, "SPELL_STOLEN"); end;
- keepShownOnClick = true;
- func = function ( self, arg1, arg2, checked )
- Blizzard_CombatLog_MenuHelper ( checked, "SPELL_STOLEN" );
- end;
- };
- };
- };
- [5] = {
- text = "Periodics";
- hasArrow = true;
- checked = function() return Blizzard_CombatLog_HasEvent (Blizzard_CombatLog_CurrentSettings, "SPELL_PERIODIC_DAMAGE", "SPELL_PERIODIC_MISSED", "SPELL_PERIODIC_DRAIN", "SPELL_PERIODIC_ENERGIZE", "SPELL_PERIODIC_HEAL", "SPELL_PERIODIC_LEECH" ); end;
- keepShownOnClick = true;
- func = function ( self, arg1, arg2, checked )
- Blizzard_CombatLog_MenuHelper ( checked, "SPELL_PERIODIC_DAMAGE", "SPELL_PERIODIC_MISSED", "SPELL_PERIODIC_DRAIN", "SPELL_PERIODIC_ENERGIZE", "SPELL_PERIODIC_HEAL", "SPELL_PERIODIC_LEECH" );
- end;
- menuList = {
- [1] = {
- text = "Damage";
- checked = function() return Blizzard_CombatLog_HasEvent (Blizzard_CombatLog_CurrentSettings, "SPELL_PERIODIC_DAMAGE"); end;
- keepShownOnClick = true;
- func = function ( self, arg1, arg2, checked )
- Blizzard_CombatLog_MenuHelper ( checked, "SPELL_PERIODIC_DAMAGE" );
- end;
- };
- [2] = {
- text = "Failure";
- checked = function() return Blizzard_CombatLog_HasEvent (Blizzard_CombatLog_CurrentSettings, "SPELL_PERIODIC_MISSED" ); end;
- keepShownOnClick = true;
- func = function ( self, arg1, arg2, checked )
- Blizzard_CombatLog_MenuHelper ( checked, "SPELL_PERIODIC_MISSED" );
- end;
- };
- [3] = {
- text = "Heals";
- checked = function() return Blizzard_CombatLog_HasEvent (Blizzard_CombatLog_CurrentSettings, "SPELL_PERIODIC_HEAL"); end;
- keepShownOnClick = true;
- func = function ( self, arg1, arg2, checked )
- Blizzard_CombatLog_MenuHelper ( checked, "SPELL_PERIODIC_HEAL" );
- end;
- };
- [4] = {
- text = "Other";
- checked = function() return Blizzard_CombatLog_HasEvent (Blizzard_CombatLog_CurrentSettings, "SPELL_PERIODIC_DRAIN", "SPELL_PERIODIC_ENERGIZE", "SPELL_PERIODIC_LEECH"); end;
- keepShownOnClick = true;
- func = function ( self, arg1, arg2, checked )
- Blizzard_CombatLog_MenuHelper ( checked, "SPELL_PERIODIC_DRAIN", "SPELL_PERIODIC_ENERGIZE", "SPELL_PERIODIC_LEECH" );
- end;
- };
- };
- };
- [6] = {
- text = "Other";
- hasArrow = true;
- checked = function() return Blizzard_CombatLog_HasEvent (Blizzard_CombatLog_CurrentSettings, "PARTY_KILL", "UNIT_DIED", "UNIT_DESTROYED", "UNIT_DISSIPATES", "DAMAGE_SPLIT", "ENVIRONMENTAL_DAMAGE" ); end;
- keepShownOnClick = true;
- func = function ( self, arg1, arg2, checked )
- Blizzard_CombatLog_MenuHelper ( checked, "PARTY_KILL", "UNIT_DIED", "UNIT_DESTROYED", "UNIT_DISSIPATES", "DAMAGE_SPLIT", "ENVIRONMENTAL_DAMAGE" );
- end;
- menuList = {
- [1] = {
- text = "Kills";
- checked = function() return Blizzard_CombatLog_HasEvent (Blizzard_CombatLog_CurrentSettings, "PARTY_KILL"); end;
- keepShownOnClick = true;
- func = function ( self, arg1, arg2, checked )
- Blizzard_CombatLog_MenuHelper ( checked, "PARTY_KILL" );
- end;
- };
- [2] = {
- text = "Deaths";
- checked = function() return Blizzard_CombatLog_HasEvent (Blizzard_CombatLog_CurrentSettings, "UNIT_DIED", "UNIT_DESTROYED", "UNIT_DISSIPATES"); end;
- keepShownOnClick = true;
- func = function ( self, arg1, arg2, checked )
- Blizzard_CombatLog_MenuHelper ( checked, "UNIT_DIED", "UNIT_DESTROYED", "UNIT_DISSIPATES" );
- end;
- };
- [3] = {
- text = "Damage Split";
- checked = function() return Blizzard_CombatLog_HasEvent (Blizzard_CombatLog_CurrentSettings, "DAMAGE_SPLIT"); end;
- keepShownOnClick = true;
- func = function ( self, arg1, arg2, checked )
- Blizzard_CombatLog_MenuHelper ( checked, "DAMAGE_SPLIT" );
- end;
- };
- [4] = {
- text = "Environmental Damage";
- checked = function() return Blizzard_CombatLog_HasEvent (Blizzard_CombatLog_CurrentSettings, "ENVIRONMENTAL_DAMAGE"); end;
- keepShownOnClick = true;
- func = function ( self, arg1, arg2, checked )
- Blizzard_CombatLog_MenuHelper ( checked, "ENVIRONMENTAL_DAMAGE" );
- end;
- };
- };
- };
- };
- };
- -- functions I see do pass in arguments, update upvalues as necessary.
- function Blizzard_CombatLog_MessageTypesMenu()
- return messageTypesMenu;
- end
- end
- --
- -- Temporary Menu
- --
- do
- local filterId
- local filter
- local currentFilter
- local formattingMenu = {
- text = "Formatting";
- hasArrow = true;
- menuList = {
- {
- text = "Full Text";
- checked = function() return filter.fullText; end;
- func = function(self, arg1, arg2, checked)
- filter.fullText = checked;
- Blizzard_CombatLog_QuickButton_OnClick(currentFilter)
- end;
- keepShownOnClick = true;
- },
- {
- text = "Timestamp";
- checked = function() return filter.timestamp; end;
- func = function(self, arg1, arg2, checked)
- filter.timestamp = checked;
- Blizzard_CombatLog_QuickButton_OnClick(currentFilter)
- end;
- keepShownOnClick = true;
- },
- {
- text = "Unit Name Coloring";
- checked = function() return filter.unitColoring; end;
- func = function(self, arg1, arg2, checked)
- filter.unitColoring = checked;
- Blizzard_CombatLog_QuickButton_OnClick(currentFilter)
- end;
- keepShownOnClick = true;
- },
- {
- text = "Line Coloring";
- checked = function() return filter.lineColoring; end;
- func = function(self, arg1, arg2, checked)
- filter.lineColoring = checked;
- Blizzard_CombatLog_QuickButton_OnClick(currentFilter)
- end;
- keepShownOnClick = true;
- },
- {
- text = "Line Highlighting";
- checked = function() return filter.lineHighlighting; end;
- func = function(self, arg1, arg2, checked)
- filter.lineHighlighting = checked;
- Blizzard_CombatLog_QuickButton_OnClick(currentFilter)
- end;
- keepShownOnClick = true;
- },
- {
- text = "Ability Coloring";
- checked = function() return filter.abilityColoring; end;
- func = function(self, arg1, arg2, checked)
- filter.abilityColoring = checked;
- Blizzard_CombatLog_QuickButton_OnClick(currentFilter)
- end;
- keepShownOnClick = true;
- },
- {
- text = "Ability-by-School Coloring";
- checked = function() return filter.abilitySchoolColoring; end;
- --disabled = not filter.abilityColoring;
- func = function(self, arg1, arg2, checked)
- filter.abilitySchoolColoring = checked;
- Blizzard_CombatLog_QuickButton_OnClick(currentFilter)
- end;
- keepShownOnClick = true;
- },
- {
- text = "Ability-by-Actor Coloring";
- checked = function() return filter.abilityActorColoring; end;
- func = function(self, arg1, arg2, checked)
- filter.abilityActorColoring = checked;
- Blizzard_CombatLog_QuickButton_OnClick(currentFilter)
- end;
- keepShownOnClick = true;
- },
- {
- text = "Ability Highlighting";
- checked = function() return filter.abilityHighlighting; end;
- func = function(self, arg1, arg2, checked)
- filter.abilityHighlighting = checked;
- Blizzard_CombatLog_QuickButton_OnClick(currentFilter)
- end;
- keepShownOnClick = true;
- },
- {
- text = "Action Coloring";
- checked = function() return filter.actionColoring; end;
- func = function(self, arg1, arg2, checked)
- filter.actionColoring = checked;
- Blizzard_CombatLog_QuickButton_OnClick(currentFilter)
- end;
- keepShownOnClick = true;
- },
- {
- text = "Action-by-School Coloring";
- checked = function() return filter.actionSchoolColoring; end;
- func = function(self, arg1, arg2, checked)
- filter.actionSchoolColoring = checked;
- Blizzard_CombatLog_QuickButton_OnClick(currentFilter)
- end;
- keepShownOnClick = true;
- },
- {
- text = "Action-by-Actor Coloring";
- checked = function() return filter.actionActorColoring; end;
- --disabled = not filter.abilityColoring;
- func = function(self, arg1, arg2, checked)
- filter.actionActorColoring = checked;
- Blizzard_CombatLog_QuickButton_OnClick(currentFilter)
- end;
- keepShownOnClick = true;
- },
- {
- text = "Action Highlighting";
- checked = function() return filter.actionHighlighting; end;
- --disabled = not filter.abilityColoring;
- func = function(self, arg1, arg2, checked)
- filter.actionHighlighting = checked;
- Blizzard_CombatLog_QuickButton_OnClick(currentFilter)
- end;
- keepShownOnClick = true;
- },
- {
- text = "Damage Coloring";
- checked = function() return filter.amountColoring; end;
- func = function(self, arg1, arg2, checked)
- filter.amountColoring = checked;
- Blizzard_CombatLog_QuickButton_OnClick(currentFilter)
- end;
- keepShownOnClick = true;
- },
- {
- text = "Damage-by-School Coloring";
- checked = function() return filter.amountSchoolColoring; end;
- --disabled = not filter.amountColoring;
- func = function(self, arg1, arg2, checked)
- filter.amountSchoolColoring = checked;
- Blizzard_CombatLog_QuickButton_OnClick(currentFilter)
- end;
- keepShownOnClick = true;
- },
- {
- text = "Damage-by-Actor Coloring";
- checked = function() return filter.amountActorColoring; end;
- --disabled = not filter.amountColoring;
- func = function(self, arg1, arg2, checked)
- filter.amountActorColoring = checked;
- Blizzard_CombatLog_QuickButton_OnClick(currentFilter)
- end;
- keepShownOnClick = true;
- },
- {
- text = "Damage Highlighting";
- checked = function() return filter.amountHighlighting; end;
- func = function(self, arg1, arg2, checked)
- filter.amountHighlighting = checked;
- Blizzard_CombatLog_QuickButton_OnClick(currentFilter)
- end;
- keepShownOnClick = true;
- },
- {
- text = "Color School Names";
- checked = function() return filter.schoolNameColoring; end;
- func = function(self, arg1, arg2, checked)
- filter.schoolNameColoring = checked;
- Blizzard_CombatLog_QuickButton_OnClick(currentFilter)
- end;
- keepShownOnClick = true;
- },
- {
- text = "School Name Highlighting";
- checked = function() return filter.schoolNameHighlighting; end;
- func = function(self, arg1, arg2, checked)
- filter.schoolNameHighlighting = checked;
- Blizzard_CombatLog_QuickButton_OnClick(currentFilter)
- end;
- keepShownOnClick = true;
- },
- {
- text = "White Swing Rule";
- checked = function() return filter.noMeleeSwingColoring; end;
- func = function(self, arg1, arg2, checked)
- filter.noMeleeSwingColoring = checked;
- Blizzard_CombatLog_QuickButton_OnClick(currentFilter)
- end;
- keepShownOnClick = true;
- },
- {
- text = "Misses Colored Rule";
- checked = function() return filter.missColoring; end;
- func = function(self, arg1, arg2, checked)
- filter.missColoring = checked;
- Blizzard_CombatLog_QuickButton_OnClick(currentFilter)
- end;
- keepShownOnClick = true;
- },
- {
- text = "Braces";
- checked = function() return filter.braces; end;
- func = function(self, arg1, arg2, checked)
- filter.braces = checked;
- Blizzard_CombatLog_QuickButton_OnClick(currentFilter)
- end;
- keepShownOnClick = true;
- },
- {
- text = "Refiltering";
- checked = function() return filter.showHistory; end;
- func = function(self, arg1, arg2, checked)
- filter.showHistory = checked;
- Blizzard_CombatLog_QuickButton_OnClick(currentFilter)
- end;
- keepShownOnClick = true;
- tooltipTitle = "Refiltering";
- tooltipText = "This clears the chat frame and refills it with the last 500 events.";
- },
- };
- };
- function Blizzard_CombatLog_FormattingMenu(filterId_arg)
- -- Update upvalues
- filterId = filterId_arg;
- filter = Blizzard_CombatLog_Filters.filters[filterId].settings;
- currentFilter = Blizzard_CombatLog_Filters.currentFilter;
- return formattingMenu;
- end
- end
- --
- -- Menu Option Helper Function
- --
- function Blizzard_CombatLog_MenuHelper ( checked, ... )
- if ( not checked ) then
- Blizzard_CombatLog_DisableEvent (Blizzard_CombatLog_CurrentSettings, ...);
- else
- Blizzard_CombatLog_EnableEvent (Blizzard_CombatLog_CurrentSettings, ...);
- end
- Blizzard_CombatLog_ApplyFilters(Blizzard_CombatLog_CurrentSettings);
- if ( Blizzard_CombatLog_CurrentSettings.settings.showHistory ) then
- Blizzard_CombatLog_Refilter();
- end
- end;
- --
- -- Blizzard_CombatLog_CreateTabMenu
- --
- -- Creates a context sensitive menu based on the current quick button
- --
- -- args:
- -- settingsIndex - the filter settings to use
- --
- do
- local filterId
- local unitName, unitGUID, special
- local tabMenu = {
- [1] = {
- text = BLIZZARD_COMBAT_LOG_MENU_EVERYTHING;
- func = function () Blizzard_CombatLog_UnitMenuClick ("EVERYTHING", unitName, unitGUID, special); end;
- },
- [2] = {
- text = BLIZZARD_COMBAT_LOG_MENU_SAVE;
- func = function () Blizzard_CombatLog_UnitMenuClick ("SAVE", unitName, unitGUID, special); end;
- },
- [3] = {
- text = BLIZZARD_COMBAT_LOG_MENU_RESET;
- func = function () Blizzard_CombatLog_UnitMenuClick ("RESET", unitName, unitGUID, special); end;
- },
- [4] = {
- text = "--------- Temporary Adjustments ---------";
- disabled = true;
- },
- };
- function Blizzard_CombatLog_CreateTabMenu ( filterId_arg )
- -- Update upvalues
- filterId = filterId_arg
- -- Update menus
- tabMenu[2].disabled = (Blizzard_CombatLog_PreviousSettings == Blizzard_CombatLog_CurrentSettings)
- tabMenu[5] = Blizzard_CombatLog_FormattingMenu(filterId);
- tabMenu[6] = Blizzard_CombatLog_MessageTypesMenu(filterId);
- return tabMenu;
- end
- end
- --
- -- Temporary Menu
- --
- do
- function Blizzard_CombatLog_CreateUnitMenu(unitName…
Large files files are truncated, but you can click here to view the full file