vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
-------------------------------------------------------------------------------
--                              Titan [CritLine]                             --
-------------------------------------------------------------------------------
--[[
VERSION HISTORY:

Titan [CritLine] v0.3.7
-Fixed an bug with DE and FR clients.

Titan [CritLine] v0.3.6
-Fixed an bug with DE client.

Titan [CritLine] v0.3.5
-Fixed an bug with DE clients crits not working.
-Fixed a bug with french text on the settings menu.

Titan [CritLine] v0.3.4
-Fixed an error with the French clients recording one hit as a Crit and Normal hit.
-Settings menu translated to French and German.
-Changed default for Level Adjustment to be off.

Titan [CritLine] v0.3.3
-Attempts to repair saved data information.
-Fixed an issue with French clients not recording hits.

Titan [CritLine] v0.3.2
-Fixed an issue with German clients not recording hits.
-Added Right-Click menu to toggle Icon/Text.
-Added better error handling and error recovery.

Titan [CritLine] v0.3.1
-Added command to rebuild data structure.
-Change archive format to .zip.

Titan [CritLine] v0.3
-Added level range filter.
-Added attack type to splash screen message (e.g. 'New Ambush Record!')
-Cleaned up summary tooltip.
-Added healing spells.

Titan [CritLine] v0.2
-Added settings menu
-Added Detailed summary for high damage attacks (ToolTip)
-Toggle for ScreenShot on new damage records.
-Toggle for counting PvP damage only.
-Toggle for sound
-Toggle Splash Screen

Titan [CritLine] v0.1
-Initial Release
]]
-------------------------------------------------------------------------------

DEBUG = false; --A flag for outputting debug info to the console.

TITAN_CRITLINE_ID =  "CritLine";
TITAN_CRITLINE_VERSION = " v0.3.5";

TITAN_CRITLINE_BUTTON_LABEL = "CL: ";
TITAN_CRITLINE_BUTTON_ICON = "Interface\\AddOns\\TitanCritLine\\TitanCritLine";
TITAN_CRITLINE_BUTTON_TEXT = "%s/%s";

HEADER_TEXT_COLOR  = "|cffffffff"; --White
SUBHEADER_TEXT_COLOR  = "|cffCEA208"; --Gold
BODY_TEXT_COLOR  = "|cffffffff"; --?White?
HINT_TEXT_COLOR  = "|cff00ff00"; --Green

TitanCritLine_PlayerRealm = "";
TitanCritLine_PlayerName = "";
TitanCritLine_PlayerRealmName = "";

DAMAGE_TYPE_NONHEAL = "0";
DAMAGE_TYPE_HEAL =  "1";

-------------------------------------------------------------------------------
function TitanCritLine_DisplaySettings()

        --display a settings menu;
        TitanCritLine_SettingsFrameTitle:SetText(COLOR(HEADER_TEXT_COLOR, TITAN_CRITLINE_ID.." Settings"));

        TitanCritLine_SettingsFrame_Option1Text:SetText(COLOR(SUBHEADER_TEXT_COLOR, TITAN_CRITLINE_OPTION_SPLASH_TEXT));
        if ( TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["SPLASH"] == "1" ) then
                TitanCritLine_SettingsFrame_Option1:SetChecked(true);
        end

        TitanCritLine_SettingsFrame_Option2Text:SetText(COLOR(SUBHEADER_TEXT_COLOR, TITAN_CRITLINE_OPTION_PLAYSOUNDS_TEXT));
        if ( TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["PLAYSOUND"] == "1" ) then
                TitanCritLine_SettingsFrame_Option2:SetChecked(true);
        end

        TitanCritLine_SettingsFrame_Option3Text:SetText(COLOR(SUBHEADER_TEXT_COLOR, TITAN_CRITLINE_OPTION_PVPONLY_TEXT));
        if ( TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["PVPONLY"] == "1" ) then
                TitanCritLine_SettingsFrame_Option3:SetChecked(true);
        end

        TitanCritLine_SettingsFrame_Option4Text:SetText(COLOR(SUBHEADER_TEXT_COLOR, TITAN_CRITLINE_OPTION_SCREENCAP_TEXT));
        if ( TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["SNAPSHOT"] == "1" ) then
                TitanCritLine_SettingsFrame_Option4:SetChecked(true);
        end

        TitanCritLine_SettingsFrame_Option5Text:SetText(COLOR(SUBHEADER_TEXT_COLOR, TITAN_CRITLINE_OPTION_LVLADJ_TEXT));
        if ( tonumber(TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["LVLADJ"]) > 0 ) then
                TitanCritLine_SettingsFrame_Option5:SetChecked(true);
        end

        TitanCritLine_SettingsFrame_Option6Text:SetText(COLOR(SUBHEADER_TEXT_COLOR, TITAN_CRITLINE_OPTION_FILTER_HEALING_TEXT));
        if ( TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["FILTER_HEALING"] == "1" ) then
                TitanCritLine_SettingsFrame_Option6:SetChecked(true);
        end

        TitanCritLine_SettingsFrame_Reset:SetText(COLOR(SUBHEADER_TEXT_COLOR, TITAN_CRITLINE_OPTION_RESET_TEXT));

        TitanCritLine_SettingsFrame:Show();
end
-------------------------------------------------------------------------------
function TitanPanelRightClickMenu_PrepareCritLineMenu()
        
        local id = TITAN_CRITLINE_ID;
        TitanPanelRightClickMenu_AddTitle(TitanPlugins[id].menuText..TITAN_CRITLINE_VERSION);

        local info = {};
        info.text = "Settings";
        info.func = TitanCritLine_DisplaySettings;
        --info.checked = TitanGetVar(id, "ShowUsedSlots");
        UIDropDownMenu_AddButton(info);

        TitanPanelRightClickMenu_AddSpacer();   
        TitanPanelRightClickMenu_AddToggleIcon(id);
        TitanPanelRightClickMenu_AddToggleLabelText(id);
        
        TitanPanelRightClickMenu_AddSpacer();   
        TitanPanelRightClickMenu_AddCommand(TITAN_PANEL_MENU_HIDE, id, TITAN_PANEL_MENU_FUNC_HIDE);
end
-------------------------------------------------------------------------------
function COLOR(color, msg)
        return color..msg..FONT_COLOR_CODE_CLOSE;
end
-------------------------------------------------------------------------------
function TitanCritLine_OnClick(button)
        if (button == "LeftButton") then
                TitanCritLine_DisplaySettings();
        end
end
-------------------------------------------------------------------------------
function TitanPanelCritLine_GetButtonText(id)   
        local buttonRichText = format(TITAN_CRITLINE_BUTTON_TEXT, COLOR(BODY_TEXT_COLOR, TitanCritLine_GetHighestDamage()), COLOR(BODY_TEXT_COLOR, TitanCritLine_GetHighestCrit()));

        if (TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["FILTER_HEALING"] == "0") then
                buttonRichText = buttonRichText.." - "..format(TITAN_CRITLINE_BUTTON_TEXT, COLOR(BODY_TEXT_COLOR, TitanCritLine_GetHighestHeal()), COLOR(BODY_TEXT_COLOR, TitanCritLine_GetHighestHealCrit()));
        end

        TitanCritLine_DEBUG("TitanPanelCritLine_GetButtonText: "..TITAN_CRITLINE_BUTTON_LABEL..buttonRichText);
        return TITAN_CRITLINE_BUTTON_LABEL, buttonRichText;
end
-------------------------------------------------------------------------------
function TitanCritLine_OnLoad()

        this.registry = { 
                id = TITAN_CRITLINE_ID,
                menuText = TITAN_CRITLINE_ID, 
                buttonTextFunction = "TitanPanelCritLine_GetButtonText", 
                tooltipTitle = "CritLine Summary"..TITAN_CRITLINE_VERSION,
                tooltipTextFunction = "TitanCritLine_GetSummaryRichText", 
                icon = TITAN_CRITLINE_BUTTON_ICON,      
                iconWidth = 16,
                savedVariables = {
                        ShowIcon = 1,
                        ShowLabelText = 1,
                }
        };

        this:RegisterEvent("PLAYER_ENTERING_WORLD");
        this:RegisterEvent("CHAT_MSG_COMBAT_SELF_HITS");
        this:RegisterEvent("CHAT_MSG_SPELL_SELF_DAMAGE");

        --Healing Messages
        this:RegisterEvent("CHAT_MSG_SPELL_SELF_BUFF"); --On Self
        --this:RegisterEvent("CHAT_MSG_SPELL_FRIENDLYPLAYER_BUFF"); --On Friendly
        --this:RegisterEvent("CHAT_MSG_SPELL_PET_BUFF"); --On Pet

        DEFAULT_CHAT_FRAME:AddMessage(TITAN_CRITLINE_ID.." "..TITAN_CRITLINE_VERSION.." loaded.");

end
-------------------------------------------------------------------------------

function TitanCritLine_OnEvent()
        TitanCritLine_DEBUG("Received Event: "..event);
                
        if (event == "PLAYER_ENTERING_WORLD") then
                TitanCritLine_Initialize();
                TitanPanelButton_UpdateButton(TITAN_CRITLINE_ID);       
                TitanPanelButton_UpdateTooltip();
        
        elseif (event == "CHAT_MSG_SPELL_SELF_BUFF") then
                if (TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["FILTER_HEALING"] == "0") then
                        for attacktype, creaturename, damage in string.gfind(arg1, HEAL_SPELL_CRIT_MSG) do
                                TitanCritLine_RecordHit(attacktype, "CRIT", tonumber(damage), creaturename, DAMAGE_TYPE_HEAL);
                                return;
                        end
                        for attacktype, creaturename, damage in string.gfind(arg1, HEAL_SPELL_HIT_MSG) do
                                TitanCritLine_RecordHit(attacktype, "NORMAL", tonumber(damage), creaturename, DAMAGE_TYPE_HEAL);
                                return;
                        end
                end
        elseif (event == "CHAT_MSG_COMBAT_SELF_HITS") then
                for creaturename, damage in string.gfind(arg1, COMBAT_CRIT_MSG)do
                        TitanCritLine_DEBUG("Crit Hit: "..creaturename.." for "..damage);
                        TitanCritLine_RecordHit(NORMAL_HIT_TEXT, "CRIT", tonumber(damage), creaturename, DAMAGE_TYPE_NONHEAL);                  
                        return;
                end

                for creaturename, damage in string.gfind(arg1, COMBAT_HIT_MSG) do
                        TitanCritLine_DEBUG("Regular Hit: "..creaturename.." for "..damage);
                        TitanCritLine_RecordHit(NORMAL_HIT_TEXT, "NORMAL", tonumber(damage), creaturename, DAMAGE_TYPE_NONHEAL);
                        return;
                end



        elseif (event == "CHAT_MSG_SPELL_SELF_DAMAGE") then
                for attacktype, creaturename, damage in string.gfind(arg1, SPELL_CRIT_MSG) do
                        TitanCritLine_RecordHit(attacktype, "CRIT", tonumber(damage), creaturename, DAMAGE_TYPE_NONHEAL);
                        return;
                end

                for attacktype, creaturename, damage in string.gfind(arg1, SPELL_HIT_MSG) do
                        TitanCritLine_RecordHit(attacktype, "NORMAL", tonumber(damage), creaturename, DAMAGE_TYPE_NONHEAL);
                        return;
                end

        end
end
-------------------------------------------------------------------------------
function TitanCritLine_Rebuild()
        DEFAULT_CHAT_FRAME:AddMessage(TITAN_CRITLINE_ID.." "..TITAN_CRITLINE_VERSION.." rebuilding data.");
        TitanCritLineSettings[TitanCritLine_PlayerRealmName] = nil;
        TitanCritLine_Initialize();
        DEFAULT_CHAT_FRAME:AddMessage(TITAN_CRITLINE_ID.." "..TITAN_CRITLINE_VERSION.." rebuilding data complete.");
end
-------------------------------------------------------------------------------
function TitanCritLine_Initialize()

        TitanCritLine_DEBUG("Initializing...");

        TitanCritLine_PlayerRealm = GetCVar("realmName");
        TitanCritLine_PlayerName = UnitName("player");
        TitanCritLine_PlayerRealmName = TitanCritLine_PlayerRealm.."."..TitanCritLine_PlayerName;

        if (TitanCritLineSettings == nil) then
                TitanCritLineSettings = {};
        end

        if (TitanCritLineSettings[TitanCritLine_PlayerRealmName] == nil) then
                TitanCritLineSettings[TitanCritLine_PlayerRealmName] = {};
        end

        if (TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"] == nil) then
                TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"] = {};
        end

        if (TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["FILTER_HEALING"] == nil) then
                TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["FILTER_HEALING"] = "1";
        end

        if (TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["LVLADJ"] == nil) then
                TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["LVLADJ"] = "0";
        end

        if (TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["SPLASH"] == nil) then
                TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["SPLASH"] = "1";
        end

        if (TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["PVPONLY"] == nil) then
                TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["PVPONLY"] = "0";
        end

        if (TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["PLAYSOUND"] == nil) then
                TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["PLAYSOUND"] = "1";
        end
        
        if (TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["SNAPSHOT"] == nil) then
                TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["SNAPSHOT"] = "0";
        end

        if (TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"] == nil) then
                TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"] = {};
        end

        TitanCritLine_DEBUG("Initialization Complete.");

end
-------------------------------------------------------------------------------
function TitanCritLine_RecordHit(AttackType, HitType, Damage, uname, IsHealing)

        local targetlvl = UnitLevel("target");
        if (targetlvl == nil) then targetlvl = 0; end

        if (Damage == nil) then
                TitanCritLine_DEBUG("No Damage! exiting...");
                return;
        end
        if (uname == nil) then uname = "??"; end
        if (UnitLevel("target") == nil) then
                TitanCritLine_DEBUG("No Target! exiting...");
                return;
        end
        if (uname == nil) then uname = "??"; end
        if (IsHealing == nil) then
                TitanCritLine_DEBUG("IsHealing==nil! exiting...");
                return;
        end
        
        if ( (UnitIsPlayer("target") ~= 1) and (TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["PVPONLY"] == "1") ) then
                TitanCritLine_DEBUG("Target !=player and PvPOnly enabled, exiting...");
                return;
        end

        --Determine Level Difference
        local leveldiff = 0;
        if (UnitLevel("player") < UnitLevel("target")) then
                leveldiff = (UnitLevel("target") - UnitLevel("player"));
        else
                leveldiff = (UnitLevel("player") - UnitLevel("target"));
        end
        
        TitanCritLine_DEBUG("Level difference: "..leveldiff);

        if ( (tonumber(TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["LVLADJ"]) ~= 0) and (tonumber(TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["LVLADJ"]) < leveldiff) ) then
                return;
        end

        if (TitanCritLineSettings == nil) then
                return;
        end

        if (TitanCritLineSettings[TitanCritLine_PlayerRealmName] == nil) then
                TitanCritLine_DEBUG("TitanCritLineSettings[TitanCritLine_PlayerRealmName] should not be nil at this point!");
                TitanCritLine_Initialize();--attempt recovery..
        end

        if (TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"] == nil) then
                TitanCritLine_DEBUG("TitanCritLineSettings[TitanCritLine_PlayerRealmName][DATA] should not be nil at this point!");
                TitanCritLine_Initialize(); --attempt recovery..
        end

        if (TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][AttackType] == nil) then
                TitanCritLine_DEBUG("Creating TitanCritLineSettings["..TitanCritLine_PlayerRealmName.."][DATA]["..AttackType.."]...");
                TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][AttackType] = {};
        end

        if (TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][AttackType][HitType] == nil) then
                TitanCritLine_DEBUG("Creating TitanCritLineSettings["..TitanCritLine_PlayerRealmName.."][DATA]["..AttackType.."]["..HitType.."]...");
                TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][AttackType][HitType] = {};
        end

        if ( TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][AttackType][HitType]["Damage"] == nil or
                TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][AttackType][HitType]["Damage"] < Damage ) then

                TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][AttackType][HitType]["Damage"] = Damage;
                TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][AttackType][HitType]["Target"] = uname;
                TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][AttackType][HitType]["Level"] = UnitLevel("target");
                TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][AttackType][HitType]["Date"] = date();
                TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][AttackType][HitType]["IsHeal"] = IsHealing;
                TitanCritLine_DisplayNewRecord(AttackType, Damage);
        end
end
-------------------------------------------------------------------------------
function TitanCritLine_DisplayNewRecord(AttackType, DamageAmount)

        TitanCritLine_DEBUG(format(TITAN_CRITLINE_NEW_RECORD_MSG, AttackType));

        if(TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["SPLASH"] == "1") then
                TitanCritLineSplashFrame:AddMessage(DamageAmount, 1, 1, 1, 1, 3);
                TitanCritLineSplashFrame:AddMessage(format(TITAN_CRITLINE_NEW_RECORD_MSG, AttackType), 1, 1, 0, 1, 3);
        end

        --Play Sound?
        if(TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["PLAYSOUND"] == "1") then PlaySound("LEVELUP", 1, 1, 0, 1, 3); end

        --ScreenShot?
        if(TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["SNAPSHOT"] == "1") then TakeScreenshot(); end

        --Update Button Function
        TitanPanelButton_UpdateButton(TITAN_CRITLINE_ID);

end
-------------------------------------------------------------------------------
function TitanCritLine_DisplaySummary()
        --display summary;
        --use: ScrollingMessageFrame?
        TitanCritLine_DisplayDialog(TitanCritLine_GetSummaryRichText());
end
-------------------------------------------------------------------------------
function TitanCritLine_GetSummaryRichText()
        --build the SummaryDisplay rich text and return it instead of displaying it.
        --this is used for displaying as a tooltip.

        local hicrit = TitanCritLine_GetHighestCrit();
        local hidmg = TitanCritLine_GetHighestDamage();

        --For healing
        local hihealcrit = TitanCritLine_GetHighestHealCrit();
        local hihealdmg = TitanCritLine_GetHighestHeal();

        local rtfAttack="";

        for k,v in pairs (TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"]) do
                attacktype = k;
                rtfAttack = rtfAttack..COLOR(HEADER_TEXT_COLOR, attacktype).."\n";
                for k,v in pairs (TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][attacktype]) do
                        if (k == "NORMAL") then
                                rtfAttack = rtfAttack.."  "..COLOR(SUBHEADER_TEXT_COLOR, NORMAL_TEXT).." [";
                        else
                                rtfAttack = rtfAttack.."  "..COLOR(SUBHEADER_TEXT_COLOR, CRIT_TEXT).." [";
                        end

                        if ( k == "CRIT") then
                                if (TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][attacktype][k]["IsHeal"] == "0") then
                                        if (TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][attacktype][k]["Damage"] == hicrit) then
                                                rtfAttack = rtfAttack..COLOR(HINT_TEXT_COLOR, TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][attacktype][k]["Damage"]).."]\t";
                                        else
                                                rtfAttack = rtfAttack..COLOR(BODY_TEXT_COLOR, TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][attacktype][k]["Damage"]).."]\t";
                                        end
                                else
                                        if (TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][attacktype][k]["Damage"] == hihealcrit) then
                                                rtfAttack = rtfAttack..COLOR(HINT_TEXT_COLOR, TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][attacktype][k]["Damage"]).."]\t";
                                        else
                                                rtfAttack = rtfAttack..COLOR(BODY_TEXT_COLOR, TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][attacktype][k]["Damage"]).."]\t";
                                        end
                                end
                        else
                                if (TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][attacktype][k]["IsHeal"] == "0") then
                                        if (TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][attacktype][k]["Damage"] == hidmg) then
                                                rtfAttack = rtfAttack..COLOR(HINT_TEXT_COLOR, TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][attacktype][k]["Damage"]).."]\t";
                                        else
                                                rtfAttack = rtfAttack..COLOR(BODY_TEXT_COLOR, TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][attacktype][k]["Damage"]).."]\t";
                                        end
                                else
                                        if (TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][attacktype][k]["Damage"] == hihealdmg) then
                                                rtfAttack = rtfAttack..COLOR(HINT_TEXT_COLOR, TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][attacktype][k]["Damage"]).."]\t";
                                        else
                                                rtfAttack = rtfAttack..COLOR(BODY_TEXT_COLOR, TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][attacktype][k]["Damage"]).."]\t";
                                        end
                                end

                        end
                        if (TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][attacktype][k]["Level"] == -1) then
                                rtfAttack = rtfAttack..COLOR(BODY_TEXT_COLOR, TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][attacktype][k]["Target"]).." ["..COLOR(BODY_TEXT_COLOR, "??").."]\n";
                        else
                                rtfAttack = rtfAttack..COLOR(BODY_TEXT_COLOR, TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][attacktype][k]["Target"]).." ["..COLOR(BODY_TEXT_COLOR, TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][attacktype][k]["Level"]).."]\n";
                        end
                end
        end
        --TitanCritLine_DEBUG("rtfAttack: "..rtfAttack);
        return rtfAttack
end
-------------------------------------------------------------------------------
function TitanCritLine_DisplayAbout()
        --Display About Dialog
        TitanCritLine_DisplayDialog(TitanCritLine_GetAboutRichText());
end
-------------------------------------------------------------------------------
function TitanCritLine_GetAboutRichText()
        --build the SummaryAbout rich text and return it instead of displaying it.
        --this is used for displaying as a tooltip.
        return 
                COLOR(HEADER_TEXT_COLOR, TITAN_CRITLINE_ID.." v"..TITAN_CRITLINE_VERSION).."\n"..
                COLOR(SUBHEADER_TEXT_COLOR, "Concept By: ".."\n".."Sordit").."\n\n"..
                COLOR(SUBHEADER_TEXT_COLOR, "Developers: ").."\n"..
                        COLOR(BODY_TEXT_COLOR, "Sordit: ".."\t".."sordit@spam.com").."\n"..
                        COLOR(BODY_TEXT_COLOR, "Uggh: ".."\t".."uggh@spam.com").."\n\n"..
                COLOR(BODY_TEXT_COLOR, "First off, I would like to thank Sordit for the TitanCritLine concept!").."\n"..
                COLOR(BODY_TEXT_COLOR, "It was his idea that sparked my interest in this project, and since").."\n"..
                COLOR(BODY_TEXT_COLOR, "then I have been up many nights trying to make this a great UI Mod.").."\n\n"..
                COLOR(BODY_TEXT_COLOR, "Why two versions?").."\n"..
                COLOR(BODY_TEXT_COLOR, "I prefer to have TitanCritLine as a Titan plugin, and Sordit wants it to").."\n"..
                COLOR(BODY_TEXT_COLOR, "be stand-alone. So we are working on standardizing the TitanCritLine core").."\n"..
                COLOR(BODY_TEXT_COLOR, "code for the use in both of our mod projects. By doing this, we can").."\n"..
                COLOR(BODY_TEXT_COLOR, "benefit off each other enhancements and bug fixes.").."\n\n"..
                COLOR(BODY_TEXT_COLOR, "Sordit's Stand-Alone Version:").."\n"..
                COLOR(BODY_TEXT_COLOR, "http://ui.worldofwar.net/ui.php?id=810").."\n\n"..
                COLOR(BODY_TEXT_COLOR, "Uggh's Titan Plugin Version:").."\n"..
                COLOR(BODY_TEXT_COLOR, "http://ui.worldofwar.net/ui.php?id=849");
end
-------------------------------------------------------------------------------
function TitanCritLine_SettingsOptionButton_OnClick(arg1)
        if ( arg1 == 1 ) then
                TitanCritLine_ToggleSplash();
        elseif ( arg1 == 2 ) then
                TitanCritLine_ToggleSound();
        elseif ( arg1 == 3 ) then
                TitanCritLine_TogglePvP();
        elseif ( arg1 == 4 ) then
                TitanCritLine_ToggleScreenShots();
        elseif ( arg1 == 5 ) then
                TitanCritLine_ToggleLevelAdjustment();
        elseif ( arg1 == 6 ) then
                TitanCritLine_ToggleHealing();
        end
end
-------------------------------------------------------------------------------
function TitanCritLine_ToggleLevelAdjustment()

        if ( TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["LVLADJ"] == "0" ) then
                TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["LVLADJ"] = "4";
                TitanCritLine_DEBUG(TITAN_CRITLINE_ID.." level adjustment on");
        else
                TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["LVLADJ"] = "0";
                TitanCritLine_DEBUG(TITAN_CRITLINE_ID.." level adjustment off");
        end
end
-------------------------------------------------------------------------------
function TitanCritLine_ToggleScreenShots()

        if ( TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["SNAPSHOT"] == "0" ) then
                TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["SNAPSHOT"] = "1";
                TitanCritLine_DEBUG(TITAN_CRITLINE_ID.." screen shots on");
        else
                TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["SNAPSHOT"] = "0";
                TitanCritLine_DEBUG(TITAN_CRITLINE_ID.." screen shots off");
        end
end
-------------------------------------------------------------------------------
function TitanCritLine_ToggleSound()

        if ( TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["PLAYSOUND"] == "0" ) then
                TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["PLAYSOUND"] = "1";
                TitanCritLine_DEBUG(TITAN_CRITLINE_ID.." sound on");
        else
                TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["PLAYSOUND"] = "0";
                TitanCritLine_DEBUG(TITAN_CRITLINE_ID.." sound off");
        end
end
-------------------------------------------------------------------------------
function TitanCritLine_TogglePvP()

        if ( TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["PVPONLY"] == "0" ) then
                TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["PVPONLY"] = "1";
                TitanCritLine_DEBUG(TITAN_CRITLINE_ID.." pvponly on");
        else
                TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["PVPONLY"] = "0";
                TitanCritLine_DEBUG(TITAN_CRITLINE_ID.." pvponly off");
        end
end
-------------------------------------------------------------------------------
function TitanCritLine_ToggleSplash()

        if ( TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["SPLASH"] == "0" ) then
                TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["SPLASH"] = "1";
                TitanCritLine_DEBUG(TITAN_CRITLINE_ID.." splash on");
        else
                TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["SPLASH"] = "0";
                info.checked = 0;
                TitanCritLine_DEBUG(TITAN_CRITLINE_ID.." splash off");
        end
end
-------------------------------------------------------------------------------
function TitanCritLine_ToggleHealing()

        if ( TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["FILTER_HEALING"] == "0" ) then
                TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["FILTER_HEALING"] = "1";
                TitanCritLine_DEBUG(TITAN_CRITLINE_ID.." filter healing on");
        else
                TitanCritLineSettings[TitanCritLine_PlayerRealmName]["SETTINGS"]["FILTER_HEALING"] = "0";
                TitanCritLine_DEBUG(TITAN_CRITLINE_ID.." filter healing off");
        end
end
-------------------------------------------------------------------------------
function TitanCritLine_Reset()
        TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"] = {};
        TitanPanelCritLineButtonText:SetText(TitanPanelCritLine_GetButtonText(0));
end
-------------------------------------------------------------------------------
function TitanCritLine_ResetAll()
        TitanCritLineSettings = {};
        TitanCritLine_Initialize();
        TitanPanelCritLineButtonText:SetText(TitanPanelCritLine_GetButtonText(0));
end
-------------------------------------------------------------------------------
function TitanCritLine_SettingsClose()
        TitanCritLine_SettingsFrame:Hide();
end
-------------------------------------------------------------------------------
function TitanCritLine_GetHighestCrit()
        --loop thru the Table and find the highest crit damage score and return it.
        --this is for displaying high records as "345/934" or highlighting in summary fields.
        local hidmg = 0;

        if (TitanCritLineSettings == nil) then return hidmg; end
        if (TitanCritLineSettings[TitanCritLine_PlayerRealmName] == nil) then return hidmg; end
        if (TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"] == nil) then return hidmg; end

        for k,v in pairs (TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"]) do
                if ( TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][k]["CRIT"] ~= nil ) then
                        if ( TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][k]["CRIT"]["IsHeal"] == "0" ) then
                                if ( TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][k]["CRIT"]["Damage"] > hidmg ) then
                                        hidmg = TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][k]["CRIT"]["Damage"];
                                end
                        end
                end
        end
        return hidmg;
end
-------------------------------------------------------------------------------
function TitanCritLine_GetHighestHealCrit()
        --loop thru the Table and find the highest crit damage score and return it.
        --this is for displaying high records as "345/934" or highlighting in summary fields.
        local hidmg = 0;

        if (TitanCritLineSettings == nil) then return hidmg; end
        if (TitanCritLineSettings[TitanCritLine_PlayerRealmName] == nil) then return hidmg; end
        if (TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"] == nil) then return hidmg; end

        for k,v in pairs (TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"]) do
                if ( TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][k]["CRIT"] ~= nil ) then
                        if ( TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][k]["CRIT"]["IsHeal"] == "1" ) then
                                if ( TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][k]["CRIT"]["Damage"] > hidmg ) then
                                        hidmg = TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][k]["CRIT"]["Damage"];
                                end
                        end
                end
        end
        return hidmg;
end
-------------------------------------------------------------------------------
function TitanCritLine_GetHighestDamage()
        --loop thru the Table and find the highest normal damage score and return it.
        --this is for displaying high records as "345/934" or highlighting in summary fields.
        local hidmg = 0;

        if (TitanCritLineSettings == nil) then return hidmg; end
        if (TitanCritLineSettings[TitanCritLine_PlayerRealmName] == nil) then return hidmg; end
        if (TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"] == nil) then return hidmg; end

        for k,v in pairs (TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"]) do
                if ( TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][k]["NORMAL"] ~= nil ) then
                        if ( TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][k]["NORMAL"]["IsHeal"] == "0" ) then
                                if ( TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][k]["NORMAL"]["Damage"] > hidmg ) then
                                        hidmg = TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][k]["NORMAL"]["Damage"];
                                end
                        end
                end
        end
        return hidmg;
end
-------------------------------------------------------------------------------
function TitanCritLine_GetHighestHeal()
        --loop thru the Table and find the highest normal damage score and return it.
        --this is for displaying high records as "345/934" or highlighting in summary fields.
        local hidmg = 0;

        if (TitanCritLineSettings == nil) then return hidmg; end
        if (TitanCritLineSettings[TitanCritLine_PlayerRealmName] == nil) then return hidmg; end
        if (TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"] == nil) then return hidmg; end

        for k,v in pairs (TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"]) do
                if ( TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][k]["NORMAL"] ~= nil ) then
                        if ( TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][k]["NORMAL"]["IsHeal"] == "1" ) then
                                if ( TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][k]["NORMAL"]["Damage"] > hidmg ) then
                                        hidmg = TitanCritLineSettings[TitanCritLine_PlayerRealmName]["DATA"][k]["NORMAL"]["Damage"];
                                end
                        end
                end
        end
        return hidmg;
end
-------------------------------------------------------------------------------
function TitanCritLine_DEBUG(message)
        if (DEBUG) then
                DEFAULT_CHAT_FRAME:AddMessage("DEBUG: "..message);
        end
end

function TitanCritLine_DisplayDialog(message)
        GameTooltip:SetText(message);
        GameTooltip:Show();
end

Generated by GNU Enscript 1.6.5.90.