vanilla-wow-addons – Rev 1
?pathlinks?
--------------------------------------------------------------------------
-- Archaeologist.lua
--------------------------------------------------------------------------
--[[
Archaeologist
Unearthing Health and Mana values at a unit frame near you.
By: AnduinLothar <KarlKFI@cosmosui.org>
Change Log:
v0.1a
-Adds Text to Unit Frame Status Bars
-Adds Dead/Offline/Ghost text to all unit frames
-Changes health bar color as it decreases
-Status bar prefix is optional
-All status text can be shown as percent or real value (except target HP which is percent from server)
v0.2a
-Fixed Slash commands not working for text.
-Sepperated Player HP/MP/XP text
-Made target percent an option so you can see true values when you target self or party member
v0.3a
-Optimized Slash and Cosmos Reg Code.
-Fixed non-Cosmos saved variables not being saved (also nil pointer bug)
-Fixed text relocation so that the HP and MP text are now slightly sepperated
-Removed partial frame replacement and replaced it with onLoad status bar initializing
v0.4a
-Fixed a hp prefix reshowing bug
-Added Pet Dead Text
-Fixed Pet MP/HP show issue
v0.5a
-TargetFrame healthbars now always display as percent unless max hp is difforent thant 100 (party, player, pet)
v0.6a
-Added 12 Buffs and 12 Debuffs for all party members and pet.
-Moved Pet Happiness to accomidate pet debuffs
-Options to Show or Hide buffs or debuffs (reverts to normal onmouseover behavior when off)
-Show anywhere between 0 and 12 Buffs or Debuffs
-Cleaned up slash command printouts
-Syncronized Cosmos with Slash Commands. Use both if you're thus inspired.
v0.7a
-Added Alternate Debuff Location.
-Added buff tooltips
-Changed Slash Command syntax
-Added Alternate HPMP text location that aligns to the outside of the bar frame.
v1.0
-Live in Cosmos!
-Spelling Errors Corrected
v1.1
-Added German Localization
-Sorting of cosmos options.
-Auto Pet Happiness Alt Location Management
v1.2
-Added French Localization
-Fixed ArchaeologistVars = nil error
-Text is now resizable from 6-20.
Note: due to a blizzard text resizing bug the text will not propperly smooth/rescale once changed.
To correct it go to windowed mode and back to fullscreen. I have notified Blizzard of the bug.
-Made Party/Pet Buff borders green. Debuffs are still red.
v1.3
-Added 8 Buffs and 8 Debuffs for target frame.
-Target Buffs slightly rearanged. They now extend from right to left so that the 3 extra buffs don't
get covered by the portrait and elite graphics.
-Increased Pet and Party Max buffs/debuffs to 14
v1.4
-Fixed the bug that hid status text while moused over.
-Fixed the bug that hid status text while the character frame was open.
v1.41
-Implimented Smooth Text Resizing Work-around
v1.42
-Fixed a bug with loading default values from the new text sliders w/o cosmos.
v1.43
-Fixed a bigger bug with values not saving with slash commands and cosmos.
v1.5
-Made Target Buffs on top if targeting an ally and Debuffs on top if targeting an enemy.
-Added an alternate option for target buffs to display from right to left. Default is left to right.
-Fixed/Avoided MouseOver hook so that Arch plays nicely with mouse over offsets.
v1.6
-Added Optional use of the MobHealth2 addon if you are usign it.
http://www.curse-gaming.com/mod.php?addid=1087
v1.7
-Added Khaos configuration options
-Updated to work with cosmos MobHealth addon
-No longer displays 0/0 if the health is unknown
-Fixed manabar nil bug.
v1.8
-Added optional class icons to the Player, Party and Target Frames
v1.9
-Added optional replacement of unit portraits with large class icons
-Raised Target Buffs slightly to be above the Target portait
-Fixed a nil bug when using class icons on party members.
v2.0
-Updated TOC to 1700
-Increased Target Buff and Debuff max to 16
-Added 16 PartyPet Buffs and Debuffs
-Added Party Pet Buffs/Debuffs mouseover only option
-Updated all Buffs and Debuffs to 16 max
-Added Primary and Secondary Text Displays for every StatusBar
-AltTextLocation now swaps Primary and Secondary Display Text and is sepperated by Unit Type
-Added Text Inversion for all StatusBars (Show how much is missing in % or value)
-Now works with the MobHealth inbedded in MobInfo2
-Added dynamic font changing (dropdown in khaos)
[Note if you change the font the font shadow will dissapear. To get it back change the font to default and ReloadUI.]
-Added font coloring (color wheel in khaos)
-If in default positions PartyPets, PartyMembers and Target Frames are slightly relocated to make room for Text and Buffs
-Only Move Target Frame if Secondary Display is enabled on Target or Player
-Added Options to either show percent, value, both or neither on the XP bar
-Increased the Frame Level of Target Debuffs to be above the Target Frame
-Added Target debuff aplication overlays
v2.1
-Archaeologist now requires MCom for simplified Khaos/Cosmos/slash command registration
-All Slash commands are now availible via "/arch" which will bring up a dialog with availible commands.
-Removed Buggy Party Pet Buffs/Debuffs mouseover only option
-Added On/Off/Mouseover options for all statusbar displays via Khaos dropdown menus
-Added AltTextLocation for each status bar
-Added Option to use health values instead of percent on the target when possible
v2.11
-Fixed CharacterFrame 'Archaeologist_TurnOnPlayerXP' bug
-Fixed a bug where defaults where being set after MCom was registered
-Fixed a bug where duplicate settings where accidentally being saved with Khaos
-Fixed a bug that broke font resizing
v2.12
-Fixed Font Change bug causing nil error for SetTextHeight
-Prefix now stays on the Primary Display
v2.13
-TargetFrame Height now adjusts to the same height as the PlayerFrame (fix for TitanBar)
-Fixed for nil error on load involving undefaulted nil options
v2.2
-Changed 'alt text locations' to 'swap value and percent' (slash command changed as well. Ex: '/arch playerhpswap on')
-Pet happiness location now only moves when debuffs are enabled to the right or secondary text is on.
-Entirely rewrote the Target, Party and PartyPet frame offset relocation scheme based on options involving secondary display visibility, alternate buff positioning and buff/debuff hiding
-Now if party/partypet buffs are hidden the debuffs move up to close the space when applicable
-Party pet buffs disabled by default (normal space offset)
-Added Pet XP Text Display Options: On, Off, Mouseover, Prefix, Percent, Value, Invert
-Enabled Automatic MCom Option Feedback
-TBuffAlt option now wraps target buffs and debuffs in rows on eight.
v2.21
-Fixed font size save bug.
v2.3
-Added 6 value/percentage display presets (Preset1-6)
-Added 3 display prefix presets (PrefixOn, PrefixOff, PrefixDefault)
v2.4
-Added Feign Death detection for party members.
-Added Feign Death detection for player and target.
-Updated German Localization, thanks StarDust
-Updated French Localization, thanks WLMitch
-Fixed Presets not working on German Clients
(Note: MCom isn't French localized yet so slash commands will need the English On/Off while German clients use Ein/Aus)
v2.41
-Fixed Presets again, should work for French too now.
Known Bugs: Party Pet Buff/Debuff tooltips don't show.
$Id: Archaeologist.lua 2626 2005-10-15 10:42:08Z karlkfi $
$Rev: 2626 $
$LastChangedBy: karlkfi $
$Date: 2005-10-15 03:42:08 -0700 (Sat, 15 Oct 2005) $
]]--
-- <= == == == == == == == == == == == == =>
-- => Global Variables
-- <= == == == == == == == == == == == == =>
Archaeologist_TextStringPercentStatusBars = { };
Archaeologist_TextStringValueStatusBars = { };
Archaeologist_TextStringInvertStatusBars = { };
Archaeologist_TextStringAltTextStatusBars = { };
ArchaeologistStatusBars = { };
ArchaeologistOptionSetName = "Archaeologist";
ArchaeologistFonts = {
GameFontNormal = "Fonts\\FRIZQT__.TTF";
NumberFontNormal = "Fonts\\ARIALN.TTF";
ItemTextFontNormal = "Fonts\\MORPHEUS.TTF";
};
ArchaeologistOnOffMouseover = {
[ARCHAEOLOGIST_ON] = "on";
[ARCHAEOLOGIST_OFF] = "off";
[ARCHAEOLOGIST_MOUSEOVER] = "mouseover";
};
function Archaeologist_DefineStatusBars()
ArchaeologistStatusBars.player = { frame = PlayerFrame, statusText = PlayerStatusText };
ArchaeologistStatusBars.party1 = { frame = PartyMemberFrame1, statusText = PartyMemberFrame1.statusText };
ArchaeologistStatusBars.party2 = { frame = PartyMemberFrame2, statusText = PartyMemberFrame2.statusText };
ArchaeologistStatusBars.party3 = { frame = PartyMemberFrame3, statusText = PartyMemberFrame3.statusText };
ArchaeologistStatusBars.party4 = { frame = PartyMemberFrame4, statusText = PartyMemberFrame4.statusText };
ArchaeologistStatusBars.pet = { frame = PetFrame, statusText = PetStatusText };
ArchaeologistStatusBars.target = { frame = TargetFrame, statusText = TargetDeadText };
end
-- <= == == == == == == == == == == == == =>
-- => Variable Sync Tables
-- <= == == == == == == == == == == == == =>
ArchaeologistVars = { };
ArchaeologistVarData = { };
function Archaeologist_DefineVarData()
ArchaeologistVarData = {
PLAYERHP = { name = "PlayerHpEnable", default = "mouseover", options = ArchaeologistOnOffMouseover, func = function(value) Archaeologist_PrimaryOnOffMouseover("player", "healthbar", value); end },
PLAYERHP2 = { name = "PlayerHp2Enable", default = "off", options = ArchaeologistOnOffMouseover, func = function(value) Archaeologist_SecondaryOnOffMouseover("player", "healthbar", value); Archaeologist_UpdateTargetLocation(); end },
PLAYERMP = { name = "PlayerMpEnable", default = "mouseover", options = ArchaeologistOnOffMouseover, func = function(value) Archaeologist_PrimaryOnOffMouseover("player", "manabar", value); end },
PLAYERMP2 = { name = "PlayerMp2Enable", default = "off", options = ArchaeologistOnOffMouseover, func = function(value) Archaeologist_SecondaryOnOffMouseover("player", "manabar", value); Archaeologist_UpdateTargetLocation(); end },
PLAYERXP = { name = "PlayerXpEnable", default = "mouseover", options = ArchaeologistOnOffMouseover, func = Archaeologist_PlayerXPOnOffMouseover },
PLAYERHPINVERT = { name = "PlayerHpInvertEnable", default = 0, func = Archaeologist_TurnOnPlayerHPInvert },
PLAYERMPINVERT = { name = "PlayerMpInvertEnable", default = 0, func = Archaeologist_TurnOnPlayerMPInvert },
PLAYERXPINVERT = { name = "PlayerXpInvertEnable", default = 0, func = Archaeologist_TurnOnPlayerXPInvert },
PLAYERXPP = { name = "PlayerXpPercentEnable", default = 0, func = Archaeologist_TurnOnPlayerXPPercent },
PLAYERXPV = { name = "PlayerXpValueEnable", default = 1, func = Archaeologist_TurnOnPlayerXPValue },
PLAYERHPNOPREFIX = { name = "PlayerHpPrefixEnable", default = 0, func = Archaeologist_TurnOffPlayerHPPrefix },
PLAYERMPNOPREFIX = { name = "PlayerMpPrefixEnable", default = 0, func = Archaeologist_TurnOffPlayerMPPrefix },
PLAYERXPNOPREFIX = { name = "PlayerXpPrefixEnable", default = 0, func = Archaeologist_TurnOffPlayerXPPrefix },
PLAYERCLASSICON = { name = "PlayerClassIconEnable", default = 0, func = Archaeologist_TurnOnPlayerClassIcon },
PLAYERHPSWAP = { name = "PlayerAltHpText", default = 0, func = function(toggle) Archaeologist_SetUnitBarValuePercentSwap("player", "healthbar", toggle); end },
PLAYERMPSWAP = { name = "PlayerAltMpText", default = 0, func = function(toggle) Archaeologist_SetUnitBarValuePercentSwap("player", "manabar", toggle); end },
PARTYHP = { name = "PartyHpEnable", default = "mouseover", options = ArchaeologistOnOffMouseover, func = function(value) for i=1,4 do Archaeologist_PrimaryOnOffMouseover("party"..i, "healthbar", value); end end },
PARTYHP2 = { name = "PartyHp2Enable", default = "off", options = ArchaeologistOnOffMouseover, func = function(value) for i=1,4 do Archaeologist_SecondaryOnOffMouseover("party"..i, "healthbar", value); end end },
PARTYMP = { name = "PartyMpEnable", default = "mouseover", options = ArchaeologistOnOffMouseover, func = function(value) for i=1,4 do Archaeologist_PrimaryOnOffMouseover("party"..i, "manabar", value); end end },
PARTYMP2 = { name = "PartyMp2Enable", default = "off", options = ArchaeologistOnOffMouseover, func = function(value) for i=1,4 do Archaeologist_SecondaryOnOffMouseover("party"..i, "manabar", value); end end },
PARTYHPINVERT = { name = "PartyHpInvertEnable", default = 0, func = Archaeologist_TurnOnPartyHPInvert },
PARTYMPINVERT = { name = "PartyMpInvertEnable", default = 0, func = Archaeologist_TurnOnPartyMPInvert },
PARTYHPNOPREFIX = { name = "PartyHpPrefixEnable", default = 1, func = Archaeologist_TurnOffPartyHPPrefix },
PARTYMPNOPREFIX = { name = "PartyMpPrefixEnable", default = 0, func = Archaeologist_TurnOffPartyMPPrefix },
PARTYCLASSICON = { name = "PartyClassIconEnable", default = 1, func = Archaeologist_TurnOnPartyClassIcon },
PARTYHPSWAP = { name = "PartyAltHpText", default = 0, func = function(toggle) for i=1,4 do Archaeologist_SetUnitBarValuePercentSwap("party"..i, "healthbar", toggle); end end },
PARTYMPSWAP = { name = "PartyAltMpText", default = 0, func = function(toggle) for i=1,4 do Archaeologist_SetUnitBarValuePercentSwap("party"..i, "manabar", toggle); end end },
PETHP = { name = "PetHpEnable", default = "mouseover", options = ArchaeologistOnOffMouseover, func = function(value) Archaeologist_PrimaryOnOffMouseover("pet", "healthbar", value); end },
PETHP2 = { name = "PetHp2Enable", default = "off", options = ArchaeologistOnOffMouseover, func = function(value) Archaeologist_SecondaryOnOffMouseover("pet", "healthbar", value); end },
PETMP = { name = "PetMpEnable", default = "mouseover", options = ArchaeologistOnOffMouseover, func = function(value) Archaeologist_PrimaryOnOffMouseover("pet", "manabar", value); end },
PETMP2 = { name = "PetMp2Enable", default = "off", options = ArchaeologistOnOffMouseover, func = function(value) Archaeologist_SecondaryOnOffMouseover("pet", "manabar", value); end },
PETXP = { name = "PetXpEnable", default = "mouseover", options = ArchaeologistOnOffMouseover, func = Archaeologist_PetXPOnOffMouseover },
PETHPINVERT = { name = "PetHpInvertEnable", default = 0, func = Archaeologist_TurnOnPetHPInvert },
PETMPINVERT = { name = "PetMpInvertEnable", default = 0, func = Archaeologist_TurnOnPetMPInvert },
PETXPINVERT = { name = "PetXpInvertEnable", default = 0, func = Archaeologist_TurnOnPetXPInvert },
PETXPP = { name = "PetXpPercentEnable", default = 0, func = Archaeologist_TurnOnPetXPPercent },
PETXPV = { name = "PetXpValueEnable", default = 1, func = Archaeologist_TurnOnPetXPValue },
PETHPNOPREFIX = { name = "PetHpPrefixEnable", default = 1, func = Archaeologist_TurnOffPetHPPrefix },
PETMPNOPREFIX = { name = "PetMpPrefixEnable", default = 0, func = Archaeologist_TurnOffPetMPPrefix },
PETXPNOPREFIX = { name = "PetXpPrefixEnable", default = 0, func = Archaeologist_TurnOffPetXPPrefix },
PETHPSWAP = { name = "PetAltHpText", default = 0, func = function(toggle) Archaeologist_SetUnitBarValuePercentSwap("pet", "healthbar", toggle); end },
PETMPSWAP = { name = "PetAltMpText", default = 0, func = function(toggle) Archaeologist_SetUnitBarValuePercentSwap("pet", "manabar", toggle); end },
TARGETHP = { name = "TargetHpEnable", default = "mouseover", options = ArchaeologistOnOffMouseover, func = function(value) Archaeologist_PrimaryOnOffMouseover("target", "healthbar", value); end },
TARGETHP2 = { name = "TargetHp2Enable", default = "off", options = ArchaeologistOnOffMouseover, func = function(value) Archaeologist_SecondaryOnOffMouseover("target", "healthbar", value); Archaeologist_UpdateTargetLocation(); end },
TARGETMP = { name = "TargetMpEnable", default = "mouseover", options = ArchaeologistOnOffMouseover, func = function(value) Archaeologist_PrimaryOnOffMouseover("target", "manabar", value); end },
TARGETMP2 = { name = "TargetMp2Enable", default = "off", options = ArchaeologistOnOffMouseover, func = function(value) Archaeologist_SecondaryOnOffMouseover("target", "manabar", value); Archaeologist_UpdateTargetLocation(); end },
TARGETHPINVERT = { name = "TargetHpInvertEnable", default = 0, func = Archaeologist_TurnOnTargetHPInvert },
TARGETMPINVERT = { name = "TargetMpInvertEnable", default = 0, func = Archaeologist_TurnOnTargetMPInvert },
TARGETHPNOPREFIX = { name = "TargetHpPrefixEnable", default = 1, func = Archaeologist_TurnOffTargetHPPrefix },
TARGETMPNOPREFIX = { name = "TargetMpPrefixEnable", default = 0, func = Archaeologist_TurnOffTargetMPPrefix },
TARGETCLASSICON = { name = "TargetClassIconEnable", default = 1, func = Archaeologist_TurnOnTargetClassIcon },
TARGETHPSWAP = { name = "TargetAltHpText", default = 0, func = function(toggle) Archaeologist_SetUnitBarValuePercentSwap("target", "healthbar", toggle); end },
TARGETMPSWAP = { name = "TargetAltMpText", default = 0, func = function(toggle) Archaeologist_SetUnitBarValuePercentSwap("target", "manabar", toggle); end },
PBUFFS = { name = "PartyBuffDisable", default = 0, func = Archaeologist_TurnOffPartyBuffs },
PBUFFNUM = { name = "PartyBuffCount", dependencies = {["PartyBuffEnable"]={checked=false}}, default = 16, min = 0, max = 16, func = Archaeologist_SetPartyBuffs },
PDEBUFFS = { name = "PartyDebuffDisable", default = 0, func = Archaeologist_TurnOffPartyDebuffs },
PDEBUFFNUM = { name = "PartyDebuffCount", dependencies = {["PartyDebuffEnable"]={checked=false}}, default = 16, min = 0, max = 16, func = Archaeologist_SetPartyDebuffs },
PPTBUFFS = { name = "PartyPetBuffDisable", default = 1, func = Archaeologist_TurnOffPartyPetBuffs },
PPTBUFFNUM = { name = "PartyPetBuffCount", dependencies = {["PartyPetBuffEnable"]={checked=false}}, default = 16, min = 0, max = 16, func = Archaeologist_SetPartyPetBuffs },
PPTDEBUFFS = { name = "PartyPetDebuffDisable", default = 0, func = Archaeologist_TurnOffPartyPetDebuffs },
PPTDEBUFFNUM = { name = "PartyPetDebuffCount", dependencies = {["PartyPetDebuffEnable"]={checked=false}}, default = 16, min = 0, max = 16, func = Archaeologist_SetPartyPetDebuffs },
PTBUFFS = { name = "PetBuffDisable", default = 0, func = Archaeologist_TurnOffPetBuffs },
PTBUFFNUM = { name = "PetBuffCount", dependencies = {["PetBuffEnable"]={checked=false}}, default = 16, min = 0, max = 16, func = Archaeologist_SetPetBuffs },
PTDEBUFFS = { name = "PetDebuffDisable", default = 0, func = Archaeologist_TurnOffPetDebuffs },
PTDEBUFFNUM = { name = "PetDebuffCount", dependencies = {["PetDebuffEnable"]={checked=false}}, default = 4, min = 0, max = 16, func = Archaeologist_SetPetDebuffs },
TBUFFS = { name = "TargetBuffDisable", default = 0, func = Archaeologist_TurnOffTargetBuffs },
TBUFFNUM = { name = "TargetBuffCount", dependencies = {["TargetBuffEnable"]={checked=false}}, default = 8, min = 0, max = 16, func = Archaeologist_SetTargetBuffs },
TDEBUFFS = { name = "TargetDebuffDisable", default = 0, func = Archaeologist_TurnOffTargetDebuffs },
TDEBUFFNUM = { name = "TargetDebuffCount", dependencies = {["TargetDebuffEnable"]={checked=false}}, default = 16, min = 0, max = 16, func = Archaeologist_SetTargetDebuffs },
HPCOLOR = { name = "HealthGradientEnable", default = 0, func = function() end },
DEBUFFALT = { name = "DebuffRelocateEnable", default = 0, func = Archaeologist_SetAltDebuffLocation },
TBUFFALT = { name = "TargetBuffAlignment", default = 0, func = Archaeologist_TargetDebuffButton_Update },
CLASSPORTRAIT = { name = "ClassPortrait", default = 0, func = Archaeologist_EnableClassPortrait },
USEHPVALUE = { name = "UseHpValue", default = 0, func = function() Archaeologist_TextStatusBar_UpdateTextString(ArchaeologistStatusBars.target.frame.healthbar); end };
HPMPLARGESIZE = { name = "LargeTextSize", default = 14, min = 6, max = 20, func = Archaeologist_SetHPMPLargeTextSize },
HPMPSMALLSIZE = { name = "SmallTextSize", default = 14, min = 6, max = 20, func = Archaeologist_SetHPMPSmallTextSize },
HPMPLARGEFONT = { name = "LargeFontSelect", default = "Default", options = ArchaeologistLocalizedFonts, func = Archaeologist_SetHPMPLargeFont },
HPMPSMALLFONT = { name = "SmallFontSelect", default = "Default", options = ArchaeologistLocalizedFonts, func = Archaeologist_SetHPMPSmallFont },
COLORPHP = { name = "PrimaryHpColorSelect", default = {r=1,g=1,b=1,opacity=1}, func = Archaeologist_SetPrimaryHPColor },
COLORPMP = { name = "PrimaryMpColorSelect", default = {r=1,g=1,b=1,opacity=1}, func = Archaeologist_SetPrimaryMPColor },
COLORSHP = { name = "SecondaryHpColorSelect", default = {r=1,g=1,b=1,opacity=1}, func = Archaeologist_SetSecondaryHPColor },
COLORSMP = { name = "SecondaryMpColorSelect", default = {r=1,g=1,b=1,opacity=1}, func = Archaeologist_SetSecondaryMPColor },
};
end
-- <= == == == == == == == == == == == == =>
-- => XML Function Calls
-- <= == == == == == == == == == == == == =>
local SavedHealthBar_OnValueChanged = nil;
function Archaeologist_OnLoad()
Sea.util.hook( "TargetFrame_CheckDead", "Archaeologist_TargetCheckDead", "replace" );
Sea.util.hook( "ShowTextStatusBarText", "Archaeologist_ShowTextStatusBarText", "replace" );
Sea.util.hook( "HideTextStatusBarText", "Archaeologist_HideTextStatusBarText", "replace" );
Sea.util.hook( "TextStatusBar_UpdateTextString", "Archaeologist_TextStatusBar_UpdateTextString", "replace" );
Sea.util.hook( "CharacterFrame_OnShow", "Archaeologist_CharacterFrame_OnShow", "replace" );
Sea.util.hook( "CharacterFrame_OnHide", "Archaeologist_CharacterFrame_OnHide", "replace" );
Sea.util.hook( "UnitFrame_UpdateManaType", "Archaeologist_UnitFrame_UpdateManaType", "replace" );
Sea.util.hook( "PartyMemberFrame_RefreshBuffs", "Archaeologist_PartyMemberFrame_RefreshBuffs", "replace" );
Sea.util.hook( "PetFrame_RefreshBuffs", "Archaeologist_PetFrame_RefreshBuffs", "replace" );
Sea.util.hook( "PartyMemberBuffTooltip_Update", "Archaeologist_PartyMemberBuffs_Update", "replace" );
Sea.util.hook( "ShowPartyFrame", "Archaeologist_UpdatePartyMemberBuffs", "after" );
Sea.util.hook( "TargetDebuffButton_Update", "Archaeologist_TargetDebuffButton_Update", "replace" );
Sea.util.hook( "PartyMemberFrame_UpdatePet", "Archaeologist_PartyMemberFrame_UpdatePet", "replace" );
Sea.util.hook( "UnitFrame_Update", "Archaeologist_UnitFrame_Update_After", "after" );
Sea.util.hook( "UnitFrame_OnEvent", "Archaeologist_UnitFrame_OnEvent_After", "after" );
Sea.util.hook( "SetTextStatusBarText", "Archaeologist_SetTextStatusBarText", "after" );
--HealthBar_OnValueChanged manual hook to modify input
if (HealthBar_OnValueChanged ~= SavedHealthBar_OnValueChanged) then
SavedHealthBar_OnValueChanged = HealthBar_OnValueChanged;
HealthBar_OnValueChanged = Archaeologist_HealthBar_OnValueChanged;
end
this:RegisterEvent("VARIABLES_LOADED");
this:RegisterEvent("UNIT_HEALTH");
this:RegisterEvent("PLAYER_ENTERING_WORLD");
this:RegisterEvent("PLAYER_TARGET_CHANGED");
this:RegisterEvent("PARTY_MEMBERS_CHANGED");
this:RegisterEvent("PARTY_MEMBER_DISABLE");
this:RegisterEvent("PARTY_MEMBER_ENABLE");
this:RegisterEvent("UNIT_AURA");
Archaeologist_DefineVarData();
Archaeologist_InitializeAddedStatusBarTexts();
Archaeologist_DefineStatusBars();
Archaeologist_HookStatusBars_OnLeave(); -- Add Hiding Handlers for 2ndary Displays
Archaeologist_VarSync_SavedToVars(); --set all to default since nothing has loaded yet
end
function Archaeologist_OnEvent(event)
if (event == "VARIABLES_LOADED") then
local _, class = UnitClass("player");
Archaeologist_PlayerIsHunter = (class == "HUNTER");
if (not ArchaeologistVars) then
ArchaeologistVars = { };
end
if (MobHealth_OnEvent) then
if (MI2_OnEvent) then
Sea.util.hook( "MI2_OnEvent", "Archaeologist_MobHealth_OnEvent", "after" );
else
Sea.util.hook( "MobHealth_OnEvent", "Archaeologist_MobHealth_OnEvent", "after" );
end
ArchaeologistVarData["MOBHEALTH"] = { name = "UseMobHealth", default = 0, func = Archaeologist_EnableMobHealth };
end
Archaeologist_VarSync_SavedToVars();
--Fix the nil pet buff error, by not hooking this function until after the variable is not nil
Sea.util.hook( "PartyMemberFrame_RefreshPetBuffs", "Archaeologist_PartyMemberFrame_RefreshPetBuffs", "replace" );
Archaeologist_RegisterForMCom();
if (not Khaos) and (not Cosmos_RegisterConfiguration) then
Archaeologist_VarSync_VarsToLive();
RegisterForSave("ArchaeologistVars");
end
Archaeologist_PlayerCheckDead();
Archaeologist_UpdatePartyMembersDead();
Archaeologist_PetCheckDead();
Archaeologist_HideOrigTargetBuffs();
Archaeologist_UpdateOverlapPositions()
elseif ( event == "PLAYER_ENTERING_WORLD" ) then
Archaeologist_UpdatePartyMemberBuffs();
Archaeologist_UpdatePlayerClassIcon();
elseif ( event == "UNIT_HEALTH" ) then
if (arg1 == "player") then
Archaeologist_PlayerCheckDead();
elseif (arg1 == "target") then
--called by hook
--Archaeologist_TargetCheckDead();
elseif (arg1 == "pet") then
Archaeologist_PetCheckDead();
else
local partyIndex = Archaeologist_PartyIndexFromUnit(arg1);
Archaeologist_PartyCheckDead(partyIndex);
end
elseif (event == "PLAYER_TARGET_CHANGED") then
Archaeologist_UpdateTargetClassIcon();
elseif (event == "PARTY_MEMBERS_CHANGED") then
Archaeologist_UpdatePartyMembersDead();
Archaeologist_UpdatePartyClassIcons();
elseif (event == "PARTY_MEMBER_ENABLE") then
local partyIndex = Archaeologist_PartyIndexFromName(arg1);
Archaeologist_PartyCheckDead(partyIndex);
elseif (event == "PARTY_MEMBER_DISABLE") then
local partyIndex = Archaeologist_PartyIndexFromName(arg1);
Archaeologist_PartyCheckDead(partyIndex);
elseif (event == "UNIT_AURA") then
local partyIndex = Archaeologist_PartyIndexFromUnit(arg1);
Archaeologist_PartyCheckDead(partyIndex);
if (arg1 == "pet") then
Archaeologist_PetCheckDead();
elseif (arg1 == "player") and (Archaeologist_PlayerIsHunter) then
--Scan for feigning
PlayerFrame.feigning = nil;
for i=1, 24 do
texture = UnitBuff("player", i);
if (texture == "Interface\\Icons\\Ability_Rogue_FeignDeath") then
PlayerFrame.feigning = true;
end
end
end
end
end
-- <= == == == == == == == == == == == == =>
-- => Status Bar Initializing
-- <= == == == == == == == == == == == == =>
function Archaeologist_SetTextStatusBarText(bar, text, text2)
if ( not bar or not text2 ) then
return
end
bar.TextString2 = text2;
end
function Archaeologist_InitializeAddedStatusBarTexts()
SetTextStatusBarText(PartyMemberFrame1HealthBar, PartyMemberFrame1HealthBarTextString, PartyMemberFrame1HealthBarTextString2);
SetTextStatusBarText(PartyMemberFrame2HealthBar, PartyMemberFrame2HealthBarTextString, PartyMemberFrame2HealthBarTextString2);
SetTextStatusBarText(PartyMemberFrame3HealthBar, PartyMemberFrame3HealthBarTextString, PartyMemberFrame3HealthBarTextString2);
SetTextStatusBarText(PartyMemberFrame4HealthBar, PartyMemberFrame4HealthBarTextString, PartyMemberFrame4HealthBarTextString2);
SetTextStatusBarText(PartyMemberFrame1ManaBar, PartyMemberFrame1ManaBarTextString, PartyMemberFrame1ManaBarTextString2);
SetTextStatusBarText(PartyMemberFrame2ManaBar, PartyMemberFrame2ManaBarTextString, PartyMemberFrame2ManaBarTextString2);
SetTextStatusBarText(PartyMemberFrame3ManaBar, PartyMemberFrame3ManaBarTextString, PartyMemberFrame3ManaBarTextString2);
SetTextStatusBarText(PartyMemberFrame4ManaBar, PartyMemberFrame4ManaBarTextString, PartyMemberFrame4ManaBarTextString2);
SetTextStatusBarText(TargetFrameHealthBar, TargetFrameHealthBarTextString, TargetFrameHealthBarTextString2);
SetTextStatusBarText(TargetFrameManaBar, TargetFrameManaBarTextString, TargetFrameManaBarTextString2);
SetTextStatusBarText(PetFrameHealthBar, PetFrameHealthBarText, PetFrameHealthBarText2String);
SetTextStatusBarText(PetFrameManaBar, PetFrameManaBarText, PetFrameManaBarText2String);
SetTextStatusBarText(PlayerFrameHealthBar, PlayerFrameHealthBarText, PlayerFrameHealthBarText2String);
SetTextStatusBarText(PlayerFrameManaBar, PlayerFrameManaBarText, PlayerFrameManaBarText2String);
end
-- <= == == == == == == == == == == == == =>
-- => Variable Sync
-- <= == == == == == == == == == == == == =>
function Archaeologist_VarSync_SavedToVars()
--sync saved values with internal values, else use default stored, else default to 0
for index, var in ArchaeologistVarData do
if (ArchaeologistVars[index]) then
--already saved
elseif (var.default) then
ArchaeologistVars[index] = var.default;
else
ArchaeologistVars[index] = 0;
end
end
end
function Archaeologist_VarSync_VarsToLive()
--sync live status with internal values, else use default stored, else default to 0
for index, var in ArchaeologistVarData do
if (var.min) and (var.max) then --slider
if (ArchaeologistVars[index]) and (var.func) then
var.func(ArchaeologistVars[index])
elseif (var.func) and (var.default) then
var.func(var.default);
elseif (var.func) then
var.func(0);
end
elseif (type(var.default) == "table") then --colorwheel
if (ArchaeologistVars[index]) and (var.func) then
var.func(ArchaeologistVars[index])
elseif (var.func) and (var.default) then
var.func(var.default);
elseif (var.func) then
var.func({});
end
elseif (ArchaeologistVars[index]) and (var.func) then
var.func(ArchaeologistVars[index])
elseif (var.func) and (var.default) then
var.func(var.default);
elseif (var.func) then
var.func(0);
end
end
end
-- <= == == == == == == == == == == == == =>
-- => HP Color Mod
-- <= == == == == == == == == == == == == =>
function Archaeologist_HealthBar_OnValueChanged(value, smooth)
if (ArchaeologistVars) then
if (ArchaeologistVars["HPCOLOR"] == 1) then
smooth = not smooth;
end
end
SavedHealthBar_OnValueChanged(value, smooth)
end
-- <= == == == == == == == == == == == == =>
-- => HPMP Text Size
-- <= == == == == == == == == == == == == =>
function Archaeologist_SetHPMPLargeTextSize(size)
if (type(size) ~= "number") then
return;
end
local barParent = ArchaeologistStatusBars["player"].frame;
barParent.healthbar.TextString:SetTextHeight(size);
barParent.manabar.TextString:SetTextHeight(size);
barParent.healthbar.TextString2:SetTextHeight(size);
barParent.manabar.TextString2:SetTextHeight(size);
local scale = barParent:GetScale();
barParent:SetScale(scale+.1);
barParent:SetScale(scale);
barParent = ArchaeologistStatusBars["target"].frame;
barParent.healthbar.TextString:SetTextHeight(size);
barParent.manabar.TextString:SetTextHeight(size);
barParent.healthbar.TextString2:SetTextHeight(size);
barParent.manabar.TextString2:SetTextHeight(size);
scale = barParent:GetScale();
barParent:SetScale(scale+.1);
barParent:SetScale(scale);
end
function Archaeologist_SetHPMPSmallTextSize(size)
if (type(size) ~= "number") then
return;
end
local barParent = ArchaeologistStatusBars["pet"].frame;
barParent.healthbar.TextString:SetTextHeight(size);
barParent.manabar.TextString:SetTextHeight(size);
barParent.healthbar.TextString2:SetTextHeight(size);
barParent.manabar.TextString2:SetTextHeight(size);
local scale = barParent:GetScale();
barParent:SetScale(scale+.1);
barParent:SetScale(scale);
for i=1, 4 do
barParent = ArchaeologistStatusBars["party"..i].frame;
barParent.healthbar.TextString:SetTextHeight(size);
barParent.manabar.TextString:SetTextHeight(size);
barParent.healthbar.TextString2:SetTextHeight(size);
barParent.manabar.TextString2:SetTextHeight(size);
scale = barParent:GetScale();
barParent:SetScale(scale+.1);
barParent:SetScale(scale);
end
end
-- <= == == == == == == == == == == == == => <= == == == == == == == == == == == == =>
-- => Toggle Functions
-- <= == == == == == == == == == == == == => <= == == == == == == == == == == == == =>
-- <= == == == == == == == == == == == == =>
-- => TurnOn HP/MP/XP Functions
-- <= == == == == == == == == == == == == =>
function Archaeologist_PrimaryOnOffMouseover(unit, bartype, value)
OverrideShowStatusBarText(ArchaeologistStatusBars[unit].frame[bartype], value);
end
function Archaeologist_SecondaryOnOffMouseover(unit, bartype, value)
OverrideShowStatusBarText2(ArchaeologistStatusBars[unit].frame[bartype], value);
if (unit == "pet") then
Archaeologist_SetPetFrameHappinessLocation();
end
end
function Archaeologist_PlayerXPOnOffMouseover(toggle)
OverrideShowStatusBarText(MainMenuExpBar, toggle);
end
function Archaeologist_PetXPOnOffMouseover(toggle)
OverrideShowStatusBarText(PetPaperDollFrameExpBar, toggle);
end
function Archaeologist_RestorePlayerHP()
Archaeologist_PrimaryOnOffMouseover("player", "healthbar", ArchaeologistVars["PLAYERHP"]);
end
function Archaeologist_RestorePlayerMP()
Archaeologist_PrimaryOnOffMouseover("player", "manabar", ArchaeologistVars["PLAYERMP"]);
end
function Archaeologist_RestorePlayerXP()
Archaeologist_PlayerXPOnOffMouseover(ArchaeologistVars["PLAYERXP"])
end
-- <= == == == == == == == == == == == == =>
-- => Change HP/MP/XP Values to Percent Functions
-- <= == == == == == == == == == == == == =>
function Archaeologist_TurnOnPlayerXPPercent(toggle)
Archaeologist_TextStringPercentStatusBars["MainMenuExpBar"] = toggle;
Archaeologist_TextStatusBar_UpdateTextString(MainMenuExpBar);
end
function Archaeologist_TurnOnPlayerXPValue(toggle)
Archaeologist_TextStringValueStatusBars["MainMenuExpBar"] = toggle;
Archaeologist_TextStatusBar_UpdateTextString(MainMenuExpBar);
end
function Archaeologist_TurnOnPetXPPercent(toggle)
Archaeologist_TextStringPercentStatusBars["PetPaperDollFrameExpBar"] = toggle;
Archaeologist_TextStatusBar_UpdateTextString(PetPaperDollFrameExpBar);
end
function Archaeologist_TurnOnPetXPValue(toggle)
Archaeologist_TextStringValueStatusBars["PetPaperDollFrameExpBar"] = toggle;
Archaeologist_TextStatusBar_UpdateTextString(PetPaperDollFrameExpBar);
end
-- <= == == == == == == == == == == == == =>
-- => Invert HP/MP/XP Values
-- <= == == == == == == == == == == == == =>
function Archaeologist_TurnOnPlayerHPInvert(toggle)
local statusBar = ArchaeologistStatusBars["player"].frame.healthbar;
Archaeologist_TextStringInvertStatusBars[statusBar:GetName()] = toggle;
Archaeologist_TextStatusBar_UpdateTextString(statusBar);
end
function Archaeologist_TurnOnPlayerMPInvert(toggle)
local statusBar = ArchaeologistStatusBars["player"].frame.manabar;
Archaeologist_TextStringInvertStatusBars[statusBar:GetName()] = toggle;
Archaeologist_TextStatusBar_UpdateTextString(statusBar);
end
function Archaeologist_TurnOnPlayerXPInvert(toggle)
Archaeologist_TextStringInvertStatusBars["MainMenuExpBar"] = toggle;
Archaeologist_TextStatusBar_UpdateTextString(MainMenuExpBar);
end
function Archaeologist_TurnOnPartyHPInvert(toggle)
local statusBar = ArchaeologistStatusBars["party1"].frame.healthbar;
Archaeologist_TextStringInvertStatusBars[statusBar:GetName()] = toggle;
Archaeologist_TextStatusBar_UpdateTextString(statusBar);
statusBar = ArchaeologistStatusBars["party2"].frame.healthbar;
Archaeologist_TextStringInvertStatusBars[statusBar:GetName()] = toggle;
Archaeologist_TextStatusBar_UpdateTextString(statusBar);
statusBar = ArchaeologistStatusBars["party3"].frame.healthbar;
Archaeologist_TextStringInvertStatusBars[statusBar:GetName()] = toggle;
Archaeologist_TextStatusBar_UpdateTextString(statusBar);
statusBar = ArchaeologistStatusBars["party4"].frame.healthbar;
Archaeologist_TextStringInvertStatusBars[statusBar:GetName()] = toggle;
Archaeologist_TextStatusBar_UpdateTextString(statusBar);
end
function Archaeologist_TurnOnPartyMPInvert(toggle)
local statusBar = ArchaeologistStatusBars["party1"].frame.manabar;
Archaeologist_TextStringInvertStatusBars[statusBar:GetName()] = toggle;
Archaeologist_TextStatusBar_UpdateTextString(statusBar);
statusBar = ArchaeologistStatusBars["party2"].frame.manabar;
Archaeologist_TextStringInvertStatusBars[statusBar:GetName()] = toggle;
Archaeologist_TextStatusBar_UpdateTextString(statusBar);
statusBar = ArchaeologistStatusBars["party3"].frame.manabar;
Archaeologist_TextStringInvertStatusBars[statusBar:GetName()] = toggle;
Archaeologist_TextStatusBar_UpdateTextString(statusBar);
statusBar = ArchaeologistStatusBars["party4"].frame.manabar;
Archaeologist_TextStringInvertStatusBars[statusBar:GetName()] = toggle;
Archaeologist_TextStatusBar_UpdateTextString(statusBar);
end
--only used to call onload since no more accurate data is provided
function Archaeologist_TurnOnTargetHPInvert(toggle)
local statusBar = ArchaeologistStatusBars["target"].frame.healthbar;
Archaeologist_TextStringInvertStatusBars[statusBar:GetName()] = toggle;
Archaeologist_TextStatusBar_UpdateTextString(statusBar);
end
function Archaeologist_TurnOnTargetMPInvert(toggle)
local statusBar = ArchaeologistStatusBars["target"].frame.manabar;
Archaeologist_TextStringInvertStatusBars[statusBar:GetName()] = toggle;
Archaeologist_TextStatusBar_UpdateTextString(statusBar);
end
function Archaeologist_TurnOnPetHPInvert(toggle)
local statusBar = ArchaeologistStatusBars["pet"].frame.healthbar;
Archaeologist_TextStringInvertStatusBars[statusBar:GetName()] = toggle;
Archaeologist_TextStatusBar_UpdateTextString(statusBar);
end
function Archaeologist_TurnOnPetMPInvert(toggle)
local statusBar = ArchaeologistStatusBars["pet"].frame.manabar;
Archaeologist_TextStringInvertStatusBars[statusBar:GetName()] = toggle;
Archaeologist_TextStatusBar_UpdateTextString(statusBar);
end
function Archaeologist_TurnOnPetXPInvert(toggle)
local statusBar = PetPaperDollFrameExpBar;
Archaeologist_TextStringInvertStatusBars[statusBar:GetName()] = toggle;
Archaeologist_TextStatusBar_UpdateTextString(statusBar);
end
-- <= == == == == == == == == == == == == =>
-- => Hide HP/MP/XP Value Prefix Functions
-- <= == == == == == == == == == == == == =>
function Archaeologist_UnitFrame_UpdateManaType(unitFrame)
if ( not unitFrame ) then
unitFrame = this;
end
if ( not unitFrame.manabar ) then
return;
end
local info = ManaBarColor[UnitPowerType(unitFrame.unit)];
unitFrame.manabar:SetStatusBarColor(info.r, info.g, info.b);
-- Update the manabar prefix only if not hidden
if ( Archaeologist_ManaPrefixNotHidden(unitFrame) ) then
SetTextStatusBarTextPrefix(unitFrame.manabar, info.prefix);
TextStatusBar_UpdateTextString(unitFrame.manabar);
end
-- Setup newbie tooltip
if ( unitFrame:GetName() == "PlayerFrame" ) then
unitFrame.manabar.tooltipTitle = info.prefix;
unitFrame.manabar.tooltipText = getglobal("NEWBIE_TOOLTIP_MANABAR"..UnitPowerType(unitFrame.unit));
else
unitFrame.manabar.tooltipTitle = nil;
unitFrame.manabar.tooltipText = nil;
end
end
function Archaeologist_ManaPrefixNotHidden(frame)
if ( (ArchaeologistVars["PLAYERMPNOPREFIX"] == 0) and (frame == ArchaeologistStatusBars.player.frame) ) or
( (ArchaeologistVars["PARTYMPNOPREFIX"] == 0) and (
(frame == ArchaeologistStatusBars.party1.frame) or
(frame == ArchaeologistStatusBars.party2.frame) or
(frame == ArchaeologistStatusBars.party3.frame) or
(frame == ArchaeologistStatusBars.party4.frame)
) ) or
( (ArchaeologistVars["PETMPNOPREFIX"] == 0) and (frame == ArchaeologistStatusBars.pet.frame) ) or
( (ArchaeologistVars["TARGETMPNOPREFIX"] == 0) and (frame == ArchaeologistStatusBars.target.frame) )
then
return true;
end
end
function Archaeologist_TurnOffUnitHPPrefix(unit, toggle)
local statusBar = ArchaeologistStatusBars[unit].frame.healthbar;
if (toggle == 1) then
SetTextStatusBarTextPrefix(statusBar, nil);
else
SetTextStatusBarTextPrefix(statusBar, TEXT(HEALTH));
end
Archaeologist_TextStatusBar_UpdateTextString(statusBar);
end
function Archaeologist_TurnOffUnitMPPrefix(unit, toggle)
local statusBar = ArchaeologistStatusBars[unit].frame.manabar;
if (toggle == 1) then
SetTextStatusBarTextPrefix(statusBar, nil);
else
SetTextStatusBarTextPrefix(statusBar, ManaBarColor[UnitPowerType(unit)].prefix);
end
Archaeologist_TextStatusBar_UpdateTextString(statusBar);
end
function Archaeologist_TurnOffPlayerHPPrefix(toggle)
Archaeologist_TurnOffUnitHPPrefix("player", toggle)
end
function Archaeologist_TurnOffPlayerMPPrefix(toggle)
Archaeologist_TurnOffUnitMPPrefix("player", toggle)
end
function Archaeologist_TurnOffPlayerXPPrefix(toggle)
local statusBar = MainMenuExpBar;
if (toggle == 1) then
SetTextStatusBarTextPrefix(statusBar, nil);
else
SetTextStatusBarTextPrefix(statusBar, TEXT(XP));
end
Archaeologist_TextStatusBar_UpdateTextString(statusBar);
end
function Archaeologist_TurnOffPartyHPPrefix(toggle)
Archaeologist_TurnOffUnitHPPrefix("party1", toggle)
Archaeologist_TurnOffUnitHPPrefix("party2", toggle)
Archaeologist_TurnOffUnitHPPrefix("party3", toggle)
Archaeologist_TurnOffUnitHPPrefix("party4", toggle)
end
function Archaeologist_TurnOffPartyMPPrefix(toggle)
Archaeologist_TurnOffUnitMPPrefix("party1", toggle)
Archaeologist_TurnOffUnitMPPrefix("party2", toggle)
Archaeologist_TurnOffUnitMPPrefix("party3", toggle)
Archaeologist_TurnOffUnitMPPrefix("party4", toggle)
end
function Archaeologist_TurnOffTargetHPPrefix(toggle)
Archaeologist_TurnOffUnitHPPrefix("target", toggle)
end
function Archaeologist_TurnOffTargetMPPrefix(toggle)
Archaeologist_TurnOffUnitMPPrefix("target", toggle)
end
function Archaeologist_TurnOffPetHPPrefix(toggle)
Archaeologist_TurnOffUnitHPPrefix("pet", toggle)
end
function Archaeologist_TurnOffPetMPPrefix(toggle)
Archaeologist_TurnOffUnitMPPrefix("pet", toggle)
end
function Archaeologist_TurnOffPetXPPrefix(toggle)
local statusBar = PetPaperDollFrameExpBar;
if (toggle == 1) then
SetTextStatusBarTextPrefix(statusBar, nil);
else
SetTextStatusBarTextPrefix(statusBar, TEXT(XP));
end
Archaeologist_TextStatusBar_UpdateTextString(statusBar);
end
-- <= == == == == == == == == == == == == =>
-- => Status HP/MP/XP Bar Overrides
-- <= == == == == == == == == == == == == =>
function OverrideShowStatusBarText(bar, toggle)
if (type(toggle) == "string") then
if (toggle == "on") then
SetStatusBarTextOverride(bar, 1);
elseif (toggle == "off") then
SetStatusBarTextOverride(bar, 0);
else --mouseover
SetStatusBarTextOverride(bar, nil);
end
else
if (toggle == 1) then
SetStatusBarTextOverride(bar, 1);
else
SetStatusBarTextOverride(bar, nil);
end
end
end
function OverrideShowStatusBarText2(bar, toggle)
if (type(toggle) == "string") then
if (toggle == "on") then
SetStatusBarTextOverride2(bar, 1);
elseif (toggle == "off") then
SetStatusBarTextOverride2(bar, 0);
else --mouseover
SetStatusBarTextOverride2(bar, nil);
end
else
if (toggle == 1) then
SetStatusBarTextOverride2(bar, 1);
else
SetStatusBarTextOverride2(bar, nil);
end
end
end
--[[unused.. yet
function OverrideHideStatusBarText(bar, toggle)
if (toggle == 1) then
SetStatusBarTextOverride(bar, 0);
else
SetStatusBarTextOverride(bar, nil);
end
end
]]--
--sets the override for StatusBarTexts.
--override = nil removes override, 0 sets to hide, 1 sets to show
function SetStatusBarTextOverride(bar, override)
if(not bar) then
return;
end
if(override == "1" or override == 1 or override == "show") then
bar.override = "show";
--UIOptionsFrameCheckButtons["STATUS_BAR_TEXT"].value = "1"
ShowTextStatusBarText(bar);
elseif(override == "0" or override == 0 or override == "hide") then
bar.override = "hide";
HideTextStatusBarText(bar);
else
bar.override = nil;
HideTextStatusBarText(bar);
end
end
--sets the override for secondary StatusBarTexts.
--override = nil removes override, 0 sets to hide, 1 sets to show
function SetStatusBarTextOverride2(bar, override)
if(not bar) then
return;
end
if(override == "1" or override == 1 or override == "show") then
bar.override2 = "show";
Archaeologist_ShowTextStatusBarText2(bar);
elseif(override == "0" or override == 0 or override == "hide") then
bar.override2 = "hide";
Archaeologist_HideTextStatusBarText2(bar);
else
bar.override2 = nil;
Archaeologist_HideTextStatusBarText2(bar);
end
end
--updates old lockShow to the new override notation
local function ConvertLockShowToOverrideSyntax(bar)
if (bar.textLockable) then
bar.textLockable = nil;
end
if (bar.lockShow) then
if (bar.lockShow == 1) then
bar.override = "show";
end
bar.lockShow = nil;
end
end
--allows the setting of textStatusBar.oneText to override other values if value = 1
--used to hide hp text of a ghost
--also added optional percents
function Archaeologist_TextStatusBar_UpdateTextString(textStatusBar)
if ( not textStatusBar ) then
textStatusBar = this;
end
local string = textStatusBar.TextString;
local string2 = textStatusBar.TextString2;
if (string) then
local value = textStatusBar:GetValue();
local valueMin, valueMax = textStatusBar:GetMinMaxValues();
if ( valueMax > 0 ) then
textStatusBar:Show();
if ( value == 0 and textStatusBar.zeroText ) then
string:SetText(textStatusBar.zeroText);
textStatusBar.isZero = 1;
ShowTextStatusBarText(textStatusBar);
elseif ( value == 1 and textStatusBar.oneText ) then
string:SetText(textStatusBar.oneText);
textStatusBar.isOne = 1;
string:Show();
ShowTextStatusBarText(textStatusBar);
else
textStatusBar.isZero = nil;
textStatusBar.isOne = nil;
local stringText1, stringText2 = Archaeologist_GetCurrentTextStrings(
value, valueMax,
textStatusBar.prefix,
(not Archaeologist_TextStringPercentStatusBars[textStatusBar:GetName()]) or (Archaeologist_TextStringPercentStatusBars[textStatusBar:GetName()] == 1),
(Archaeologist_TextStringValueStatusBars[textStatusBar:GetName()] == 1),
(Archaeologist_TextStringInvertStatusBars[textStatusBar:GetName()] == 1),
(textStatusBar == TargetFrame.healthbar) and (valueMax == 100),
(Archaeologist_TextStringAltTextStatusBars[textStatusBar:GetName()] == 1),
(textStatusBar == TargetFrame.healthbar) and (ArchaeologistVars["USEHPVALUE"] == 1)
);
string:SetText(stringText1);
if (string2) then
string2:SetText(stringText2);
end
if (textStatusBar.override == "show") or (textStatusBar:GetLeft()) and (MouseIsOver(textStatusBar)) then
ShowTextStatusBarText(textStatusBar);
else
HideTextStatusBarText(textStatusBar);
end
if (textStatusBar.override2 == "show") or (textStatusBar:GetLeft()) and (MouseIsOver(textStatusBar)) then
Archaeologist_ShowTextStatusBarText2(textStatusBar);
else
Archaeologist_HideTextStatusBarText2(textStatusBar);
end
end
else
textStatusBar:Hide();
end
end
end
function Archaeologist_GetCurrentTextStrings(value, valueMax, prefix, percent, exactValue, invert, isMob, altText, useHpValue)
local stringText1 = "";
local stringText2 = "";
local percentText = "";
local valueText = "";
if (invert) then
percentText = "-"..(100 - Sea.math.round(value / valueMax * 100)).."%";
else
percentText = Sea.math.round(value / valueMax * 100).."%";
end
if (isMob) then
if (MobHealth_GetTargetCurHP) and (MobHealth_GetTargetMaxHP) and (ArchaeologistVars["MOBHEALTH"] == 1) then
local mobValue = MobHealth_GetTargetCurHP();
local mobValueMax = MobHealth_GetTargetMaxHP();
if (mobValue) and (mobValueMax) and (mobValueMax ~= 0) then
if (invert) then
valueText = "-"..(mobValueMax-mobValue).." / "..mobValueMax;
else
valueText = mobValue.." / "..mobValueMax;
end
end
end
elseif (invert) then
valueText = "-"..(valueMax-value).." / "..valueMax;
else
valueText = value.." / "..valueMax;
end
if (percent) and (exactValue) then
stringText1 = percentText.." "..valueText;
stringText2 = percentText.." "..valueText;
elseif (useHpValue) and (valueText ~= "") then
stringText1 = valueText;
stringText2 = valueText;
elseif (percent) then
stringText1 = percentText;
stringText2 = valueText;
elseif (exactValue) then
stringText1 = valueText;
stringText2 = valueText;
end
if (altText) then
local temp = stringText1;
stringText1 = stringText2;
stringText2 = temp;
end
if (prefix) then
stringText1 = prefix.." "..stringText1;
end
return stringText1, stringText2;
end
--removes lockShow and adds override
function Archaeologist_ShowTextStatusBarText(bar)
if ( bar and bar.TextString ) then
ConvertLockShowToOverrideSyntax(bar);
if (bar.override ~= "hide") then
bar.TextString:Show();
end
end
end
function Archaeologist_ShowTextStatusBarText2(bar)
if ( bar and bar.TextString2 ) then
if (bar.override2 ~= "hide") then
bar.TextString2:Show();
end
end
end
--removes old lockShow, adds override, adds visibility for isOne, and removes UIOptions check
--effectively breaks the 'Show HP/Mana/XP Always Vislible' in the default UIOptions
function Archaeologist_HideTextStatusBarText(bar)
if ( bar and bar.TextString ) then
ConvertLockShowToOverrideSyntax(bar);
if (bar.override == "hide") then
bar.TextString:Hide();
elseif (bar.isZero) or (bar.isOne) or (bar.override == "show") then -- or (MouseIsOver(bar)) then
bar.TextString:Show();
else
bar.TextString:Hide();
end
end
end
function Archaeologist_HideTextStatusBarText2(bar)
if ( bar and bar.TextString2 ) then
if (bar.override2 == "hide") then
bar.TextString2:Hide();
elseif (bar.isZero) or (bar.isOne) or (bar.override2 == "show") then -- or (MouseIsOver(bar)) then
bar.TextString2:Show();
else
bar.TextString2:Hide();
end
end
end
function Archaeologist_HookStatusBars_OnLeave()
local afterHook = function(bar)
Archaeologist_HideTextStatusBarText2(bar);
end
for unit, data in ArchaeologistStatusBars do
local bar1 = data.frame.healthbar;
setglobal("Archaeologist_"..bar1:GetName().."_OnLeave_orig", bar1:GetScript("OnLeave"));
bar1:SetScript("OnLeave", function() getglobal("Archaeologist_"..bar1:GetName().."_OnLeave_orig")(); afterHook(bar1); end);
local bar2 = data.frame.manabar;
setglobal("Archaeologist_"..bar2:GetName().."_OnLeave_orig", bar2:GetScript("OnLeave"));
bar2:SetScript("OnLeave", function() getglobal("Archaeologist_"..bar2:GetName().."_OnLeave_orig")(); afterHook(bar2); end);
end
end
--sets bar.oneText
function SetTextStatusBarTextOneText(bar, oneText)
if ( bar and bar.TextString ) then
bar.oneText = oneText;
end
end
function Archaeologist_CharacterFrame_OnShow()
PlaySound("igCharacterInfoOpen");
SetPortraitTexture(CharacterFramePortrait, "player");
CharacterNameText:SetText(UnitPVPName("player"));
UpdateMicroButtons();
OverrideShowStatusBarText(PlayerFrameHealthBar, 1);
OverrideShowStatusBarText(PlayerFrameManaBar, 1);
OverrideShowStatusBarText(MainMenuExpBar, 1);
end
function Archaeologist_CharacterFrame_OnHide()
PlaySound("igCharacterInfoClose");
UpdateMicroButtons();
Archaeologist_RestorePlayerHP();
Archaeologist_RestorePlayerMP();
Archaeologist_RestorePlayerXP();
end
-- <= == == == == == == == == == == == == =>
-- => Dead/Offline/Ghost Status Overrides
-- <= == == == == == == == == == == == == =>
function Archaeologist_TargetCheckDead()
local unit = "target";
local healthbar = ArchaeologistStatusBars[unit].frame.healthbar;
local manabar = ArchaeologistStatusBars[unit].frame.manabar;
local statusText = ArchaeologistStatusBars[unit].statusText;
Archaeologist_UnitCheckDead(unit, statusText, healthbar, manabar);
end
function Archaeologist_PartyCheckDead(partyIndex)
if (type(partyIndex) ~= "number") then
return;
end
local unit = "party"..partyIndex;
local healthbar = ArchaeologistStatusBars[unit].frame.healthbar;
local manabar = ArchaeologistStatusBars[unit].frame.manabar;
local statusText = ArchaeologistStatusBars[unit].statusText;
Archaeologist_UnitCheckDead(unit, statusText, healthbar, manabar);
end
function Archaeologist_UpdatePartyMembersDead()
if (GetNumPartyMembers() > 0) then
for i=1, GetNumPartyMembers() do
Archaeologist_PartyCheckDead(i);
end
end
end
function Archaeologist_PlayerCheckDead()
local unit = "player";
local healthbar = ArchaeologistStatusBars[unit].frame.healthbar;
local manabar = ArchaeologistStatusBars[unit].frame.manabar;
local statusText = ArchaeologistStatusBars[unit].statusText;
Archaeologist_UnitCheckDead(unit, statusText, healthbar, manabar);
end
function Archaeologist_PetCheckDead()
local unit = "pet";
local healthbar = ArchaeologistStatusBars[unit].frame.healthbar;
local manabar = ArchaeologistStatusBars[unit].frame.manabar;
local statusText = ArchaeologistStatusBars[unit].statusText;
Archaeologist_UnitCheckDead(unit, statusText, healthbar, manabar);
end
function Archaeologist_UnitCheckDead(unit, statusText, healthbar, manabar)
--adds Dead text if unit is Dead
--adds Offline text if unit is a player and not connected
--adds Ghost/Wisp text if unit is a player
if ( UnitIsDead(unit) ) and ( Archaeologist_UnitIsConnected(unit) ) then
local _, class = UnitClass(unit);
if (ArchaeologistStatusBars[unit].frame.feigning) or (class == "HUNTER" and UnitIsEnemy("player", unit)) then
statusText:SetText(FEIGN_DEATH);
else
statusText:SetText(DEAD);
end
statusText:Show();
--hide health/mana if dead
SetTextStatusBarTextZeroText(healthbar, "");
SetTextStatusBarTextZeroText(manabar, "");
elseif ( UnitIsPlayer(unit) ) and ( not Archaeologist_UnitIsConnected(unit) ) then
statusText:SetText(PLAYER_OFFLINE);
healthbar:Hide();
manabar:Hide();
--!!!!!!!!!!!
--^^ add a status bar hook to change this.
--!!!!!!!!!!!
statusText:Show();
--hide health/mana if offline
SetTextStatusBarTextZeroText(healthbar, "");
SetTextStatusBarTextZeroText(manabar, "");
elseif ( UnitIsGhost(unit) ) then
if ( UnitRace(unit) == "Night Elf" ) then
statusText:SetText(PLAYER_WISP);
else
statusText:SetText(PLAYER_GHOST);
end
statusText:Show();
--hide health/mana if ghost
SetTextStatusBarTextOneText(healthbar, "");
SetTextStatusBarTextZeroText(manabar, "");
else
statusText:Hide();
--show health/mana if not dead, offline or ghost
SetTextStatusBarTextZeroText(healthbar, nil);
SetTextStatusBarTextOneText(healthbar, nil);
SetTextStatusBarTextZeroText(manabar, nil);
--reset to override show
ShowTextStatusBarText(healthbar);
end
TextStatusBar_UpdateTextString(healthbar);
TextStatusBar_UpdateTextString(manabar);
end
function Archaeologist_UnitIsConnected(unit)
ArchaeologistTooltip:SetUnit(unit);
local tooltipOfflineLine = Sea.wow.tooltip.scan("ArchaeologistTooltip")[3];
Sea.wow.tooltip.clear("ArchaeologistTooltip");
local tooltipOfflineText;
if ( tooltipOfflineLine ) then
tooltipOfflineText = tooltipOfflineLine.left;
end
if (tooltipOfflineText == PLAYER_OFFLINE) then
return;
end
return UnitIsConnected(unit);
end
-- <= == == == == == == == == == == == == =>
-- => Party and Pet Buffs
-- <= == == == == == == == == == == == == =>
function Archaeologist_UpdateOverlapPositions()
Archaeologist_UpdatePartyMemberLocations();
Archaeologist_UpdatePartyPetLocations();
Archaeologist_UpdateTargetLocation();
end
function Archaeologist_UpdatePartyMemberLocations()
local partyY = 0; --Normal Offset
if (ArchaeologistVars["PPTBUFFS"] == 0) and (ArchaeologistVars["PPTDEBUFFS"] == 0) then
partyY = -20; --Party Frames moved down 20 to make room for PartyPet Buffs and Debuffs
end
if (not PartyMemberFrame2:IsUserPlaced()) then
PartyMemberFrame2:ClearAllPoints()
PartyMemberFrame2:SetPoint("TOPLEFT", "PartyMemberFrame1PetFrame", "BOTTOMLEFT", -23, -10+partyY);
end
if (not PartyMemberFrame3:IsUserPlaced()) then
PartyMemberFrame3:ClearAllPoints()
PartyMemberFrame3:SetPoint("TOPLEFT", "PartyMemberFrame2PetFrame", "BOTTOMLEFT", -23, -10+partyY);
end
if (not PartyMemberFrame4:IsUserPlaced()) then
PartyMemberFrame4:ClearAllPoints()
PartyMemberFrame4:SetPoint("TOPLEFT", "PartyMemberFrame3PetFrame", "BOTTOMLEFT", -23, -10+partyY);
end
end
function Archaeologist_UpdateTargetLocation()
if (not TargetFrame:IsUserPlaced()) and (not PlayerFrame:IsUserPlaced()) then
if (PlayerFrame:GetRight()) then
local y = TargetFrame:GetTop() - UIParent:GetTop();
local x = PlayerFrame:GetRight();
if (ArchaeologistVars["TARGETHP2"] == "on") or (ArchaeologistVars["TARGETMP2"] == "on") or (ArchaeologistVars["PLAYERHP2"] == "on") or (ArchaeologistVars["PLAYERMP2"] == "on") then
-- Only Move if the Secondary Display is on
TargetFrame:ClearAllPoints()
TargetFrame:SetPoint("TOPLEFT", "UIParent", "TOPLEFT", x+145, y);
elseif (ArchaeologistVars["TARGETHP2"] == "mouseover") or (ArchaeologistVars["TARGETMP2"] == "mouseover") or (ArchaeologistVars["PLAYERHP2"] == "mouseover") or (ArchaeologistVars["PLAYERMP2"] == "mouseover") then
-- Adjust for single Secondary Display mouseover
TargetFrame:ClearAllPoints();
TargetFrame:SetPoint("TOPLEFT", "UIParent", "TOPLEFT", x+75, y);
else
--Default
TargetFrame:ClearAllPoints();
TargetFrame:SetPoint("TOPLEFT", "UIParent", "TOPLEFT", 250, y);
end
else
--Dumb GetLeft == nil bug... don't do anything
end
end
end
function Archaeologist_PartyMemberFrame_UpdatePet(id)
if ( not id ) then
id = this:GetID();
end
local frameName = "PartyMemberFrame"..id;
local petFrame = getglobal("PartyMemberFrame"..id.."PetFrame");
local partypetY = 0; --Normal Offset
if ( UnitIsConnected("party"..id) and UnitExists("partypet"..id) and SHOW_PARTY_PETS == "1" ) then
petFrame:Show();
if (not petFrame:IsUserPlaced()) then
if (ArchaeologistVars["PBUFFS"] == 0) and (ArchaeologistVars["PDEBUFFS"] == 0) and (ArchaeologistVars["DEBUFFALT"] == 1) then
partypetY = -20; --PartyPet Frames moved down 20 to make room for Pet Buffs and Debuffs
end
end
else
petFrame:Hide();
if (not petFrame:IsUserPlaced()) then
partypetY = 16 --PartyPet Frames moved up 16 to close party member gap
end
end
petFrame:ClearAllPoints();
petFrame:SetPoint("TOPLEFT", frameName, "TOPLEFT", 23, -43+partypetY);
PartyMemberFrame_RefreshPetBuffs(id);
end
function Archaeologist_PartyMemberFrame_RefreshBuffs()
local texture;
if ( ArchaeologistVars["PBUFFS"] == 1 ) then
for i=1, ArchaeologistVarData["PBUFFNUM"].max do
getglobal(this:GetName().."NewBuff"..i):Hide();
end
else
this.feigning = nil;
for i=1, ArchaeologistVarData["PBUFFNUM"].max do
texture = UnitBuff("party"..this:GetID(), i);
if (texture == "Interface\\Icons\\Ability_Rogue_FeignDeath") then
this.feigning = true;
end
if ( texture ) and (i <= ArchaeologistVars["PBUFFNUM"]) then
getglobal(this:GetName().."NewBuff"..i.."Icon"):SetTexture(texture);
getglobal(this:GetName().."NewBuff"..i):SetID(i);
getglobal(this:GetName().."NewBuff"..i):Show();
else
getglobal(this:GetName().."NewBuff"..i):Hide();
end
end
end
if ( ArchaeologistVars["PDEBUFFS"] == 1 ) then
for i=1, ArchaeologistVarData["PDEBUFFNUM"].max do
getglobal(this:GetName().."NewDebuff"..i):Hide();
end
else
local texture;
for i=1, ArchaeologistVarData["PDEBUFFNUM"].max do
texture = UnitDebuff("party"..this:GetID(), i);
if (texture) and (i <= ArchaeologistVars["PDEBUFFNUM"]) then
getglobal(this:GetName().."NewDebuff"..i.."Icon"):SetTexture(texture);
getglobal(this:GetName().."NewDebuff"..i):SetID(i);
getglobal(this:GetName().."NewDebuff"..i):Show();
else
getglobal(this:GetName().."NewDebuff"..i):Hide();
end
end
end
end
function Archaeologist_PartyMemberFrame_RefreshPetBuffs(id)
if ( not id ) then
id = this:GetID();
end
local texture;
local petFrame = "PartyMemberFrame"..id.."PetFrame"
if ( ArchaeologistVars["PPTBUFFS"] == 1 ) then
for i=1, ArchaeologistVarData["PPTBUFFNUM"].max do
getglobal(petFrame.."NewBuff"..i):Hide();
end
else
for i=1, ArchaeologistVarData["PPTBUFFNUM"].max do
texture = UnitBuff("partypet"..id, i);
if ( texture ) and (i <= ArchaeologistVars["PPTBUFFNUM"]) then
getglobal(petFrame.."NewBuff"..i.."Icon"):SetTexture(texture);
getglobal(petFrame.."NewBuff"..i):Show();
else
getglobal(petFrame.."NewBuff"..i):Hide();
end
end
end
if ( ArchaeologistVars["PPTDEBUFFS"] == 1 ) then
for i=1, ArchaeologistVarData["PPTDEBUFFNUM"].max do
getglobal(petFrame.."NewDebuff"..i):Hide();
end
else
for i=1, ArchaeologistVarData["PPTDEBUFFNUM"].max do
texture = UnitDebuff("partypet"..id, i);
if ( texture ) and (i <= ArchaeologistVars["PPTDEBUFFNUM"]) then
getglobal(petFrame.."NewDebuff"..i.."Icon"):SetTexture(texture);
getglobal(petFrame.."NewDebuff"..i):Show();
else
getglobal(petFrame.."NewDebuff"..i):Hide();
end
end
end
end
function Archaeologist_PetFrame_RefreshBuffs()
local texture;
if ( ArchaeologistVars["PTBUFFS"] == 1 ) then
for i=1, ArchaeologistVarData["PTBUFFNUM"].max do
getglobal("PetFrameNewBuff"..i):Hide();
end
else
for i=1, ArchaeologistVarData["PTBUFFNUM"].max do
texture = UnitBuff("pet", i);
if ( texture ) and (i <= ArchaeologistVars["PTBUFFNUM"]) then
getglobal("PetFrameNewBuff"..i.."Icon"):SetTexture(texture);
getglobal("PetFrameNewBuff"..i):SetID(i);
getglobal("PetFrameNewBuff"..i):Show();
else
getglobal("PetFrameNewBuff"..i):Hide();
end
end
end
if ( ArchaeologistVars["PTDEBUFFS"] == 1 ) then
for i=1, ArchaeologistVarData["PTDEBUFFNUM"].max do
getglobal("PetFrameNewDebuff"..i):Hide();
end
else
local texture;
for i=1, ArchaeologistVarData["PTDEBUFFNUM"].max do
texture = UnitDebuff("pet", i);
if (texture) and (i <= ArchaeologistVars["PTDEBUFFNUM"]) then
getglobal("PetFrameNewDebuff"..i.."Icon"):SetTexture(texture);
getglobal("PetFrameNewDebuff"..i):SetID(i);
getglobal("PetFrameNewDebuff"..i):Show();
else
getglobal("PetFrameNewDebuff"..i):Hide();
end
end
end
end
function Archaeologist_PetFrame_UpdateDebuffLocations()
if (ArchaeologistVars["DEBUFFALT"] == 1) then
if ( ArchaeologistVars["PTBUFFS"] == 1 ) then
PetFrameNewDebuff1:ClearAllPoints();
PetFrameNewDebuff1:SetPoint("TOPLEFT", "PetFrame", "TOPLEFT", 48, -42);
else
PetFrameNewDebuff1:ClearAllPoints();
PetFrameNewDebuff1:SetPoint("TOP", "PetFrameNewBuff1", "BOTTOM", 0, -2);
end
else
PetFrameNewDebuff1:ClearAllPoints();
PetFrameNewDebuff1:SetPoint("TOPLEFT", "PetFrame", "TOPLEFT", 120, -24);
end
end
function Archaeologist_PartyFrame_UpdateDebuffLocations()
if (ArchaeologistVars["DEBUFFALT"] == 1) then
if ( ArchaeologistVars["PBUFFS"] == 1 ) then
for i=1, 4 do
getglobal("PartyMemberFrame"..i.."NewDebuff1"):ClearAllPoints();
getglobal("PartyMemberFrame"..i.."NewDebuff1"):SetPoint("TOPLEFT", "PartyMemberFrame"..i, "TOPLEFT", 124, -12);
end
else
for i=1, 4 do
getglobal("PartyMemberFrame"..i.."NewDebuff1"):ClearAllPoints();
getglobal("PartyMemberFrame"..i.."NewDebuff1"):SetPoint("TOP", "PartyMemberFrame"..i.."NewBuff1", "BOTTOM", 0, -2);
end
end
else
for i=1, 4 do
getglobal("PartyMemberFrame"..i.."NewDebuff1"):ClearAllPoints();
getglobal("PartyMemberFrame"..i.."NewDebuff1"):SetPoint("TOPLEFT", "PartyMemberFrame"..i, "TOPLEFT", 124, -14);
end
end
Archaeologist_UpdatePartyPetLocations();
end
function Archaeologist_PartyPetFrame_UpdateDebuffLocations()
if ( ArchaeologistVars["PPTBUFFS"] == 1 ) then
for i=1, 4 do
getglobal("PartyMemberFrame"..i.."PetFrameNewDebuff1"):ClearAllPoints();
getglobal("PartyMemberFrame"..i.."PetFrameNewDebuff1"):SetPoint("TOPLEFT", "PartyMemberFrame"..i.."PetFrame", "TOPLEFT", 24, -16);
end
else
for i=1, 4 do
getglobal("PartyMemberFrame"..i.."PetFrameNewDebuff1"):ClearAllPoints();
getglobal("PartyMemberFrame"..i.."PetFrameNewDebuff1"):SetPoint("TOP", "PartyMemberFrame"..i.."PetFrameNewBuff1", "BOTTOM", 0, -2);
end
end
Archaeologist_UpdatePartyMemberLocations();
end
function Archaeologist_UpdatePartyMemberBuffs()
local tempThis = this;
for i=1, MAX_PARTY_MEMBERS do
if ( GetPartyMember(i) ) then
this = getglobal("PartyMemberFrame"..i);
Archaeologist_PartyMemberFrame_RefreshBuffs()
end
end
this = tempThis;
end
function Archaeologist_UpdatePartyPetBuffs()
PartyMemberFrame_RefreshPetBuffs(1);
PartyMemberFrame_RefreshPetBuffs(2);
PartyMemberFrame_RefreshPetBuffs(3);
PartyMemberFrame_RefreshPetBuffs(4);
end
function Archaeologist_UpdatePartyPetLocations()
PartyMemberFrame_UpdatePet(1);
PartyMemberFrame_UpdatePet(2);
PartyMemberFrame_UpdatePet(3);
PartyMemberFrame_UpdatePet(4);
end
function Archaeologist_PartyMemberBuffs_Update()
--only show buff tooltip on mouseover if buffs are hidden
if (arg1 == "pet") then
return (ArchaeologistVars["PTBUFFS"] == 1);
end
return (ArchaeologistVars["PBUFFS"] == 1);
end
function Archaeologist_TurnOffPartyBuffs(toggle)
Archaeologist_UpdatePartyMemberBuffs();
Archaeologist_PartyFrame_UpdateDebuffLocations();
end
function Archaeologist_TurnOffPartyPetBuffs(toggle)
Archaeologist_UpdatePartyPetBuffs();
Archaeologist_PartyPetFrame_UpdateDebuffLocations();
end
function Archaeologist_TurnOffPetBuffs(toggle)
Archaeologist_PetFrame_RefreshBuffs();
Archaeologist_PetFrame_UpdateDebuffLocations();
end
function Archaeologist_TurnOffPartyDebuffs(toggle)
Archaeologist_UpdatePartyMemberBuffs();
Archaeologist_UpdatePartyPetLocations();
end
function Archaeologist_TurnOffPartyPetDebuffs(toggle)
Archaeologist_UpdatePartyPetBuffs();
Archaeologist_UpdatePartyMemberLocations();
end
function Archaeologist_TurnOffPetDebuffs(toggle)
Archaeologist_PetFrame_RefreshBuffs();
end
function Archaeologist_SetPartyBuffs(count)
if (count) then
Archaeologist_UpdatePartyMemberBuffs();
end
end
function Archaeologist_SetPartyPetBuffs(count)
if (count) then
Archaeologist_UpdatePartyPetBuffs();
end
end
function Archaeologist_SetPetBuffs(count)
if (count) then
Archaeologist_PetFrame_RefreshBuffs();
end
end
function Archaeologist_SetPartyDebuffs(count)
if (count) then
Archaeologist_UpdatePartyMemberBuffs();
end
end
function Archaeologist_SetPartyPetDebuffs(count)
if (count) then
Archaeologist_UpdatePartyPetBuffs();
end
end
function Archaeologist_SetPetDebuffs(count)
if (count) then
Archaeologist_PetFrame_RefreshBuffs();
end
end
-- <= == == == == == == == == == == == == =>
-- => Target Buffs
-- <= == == == == == == == == == == == == =>
function Archaeologist_HideOrigTargetBuffs()
for i=1, MAX_TARGET_BUFFS do
getglobal("TargetFrameBuff"..i):Hide();
end
for i=1, MAX_TARGET_DEBUFFS do
getglobal("TargetFrameDebuff"..i):Hide();
end
--for i=1, MAX_PARTY_DEBUFFS do
-- getglobal("PartyMemberFrame"..i.."PetFrameDebuff"):Hide();
--end
end
function Archaeologist_TargetDebuffButton_Update()
local button, debuff, debuffButton, buff, buffButton, debuffCount, debuffApplications;
local numBuffs = 0;
TargetFrame.feigning = nil;
for i=1, ArchaeologistVarData["TBUFFNUM"].max do
buff = UnitBuff("target", i);
if (buff == "Interface\\Icons\\Ability_Rogue_FeignDeath") then
TargetFrame.feigning = true;
end
button = getglobal("TargetFrameNewBuff"..i);
if ( buff ) and (i <= ArchaeologistVars["TBUFFNUM"]) and (ArchaeologistVars["TBUFFS"] == 0) then
getglobal("TargetFrameNewBuff"..i.."Icon"):SetTexture(buff);
button:Show();
button.id = i;
numBuffs = numBuffs + 1;
else
button:Hide();
end
end
local numDebuffs = 0;
for i=1, ArchaeologistVarData["TDEBUFFNUM"].max do
debuff, debuffApplications = UnitDebuff("target", i);
button = getglobal("TargetFrameNewDebuff"..i);
if ( debuff ) and (i <= ArchaeologistVars["TDEBUFFNUM"]) and (ArchaeologistVars["TDEBUFFS"] == 0) then
getglobal("TargetFrameNewDebuff"..i.."Icon"):SetTexture(debuff);
debuffCount = getglobal("TargetFrameNewDebuff"..i.."Count");
if ( debuffApplications > 1 ) then
debuffCount:SetText(debuffApplications);
debuffCount:Show();
else
debuffCount:Hide();
end
button:Show();
numDebuffs = numDebuffs + 1;
else
button:Hide();
end
button.id = i;
end
Archaeologist_TargetBuffs_UpdateAlignment(numBuffs, numDebuffs);
end
function Archaeologist_TargetBuffs_UpdateAlignment(numBuffs, numDebuffs)
-- Position buffs depending on whether the targeted unit is friendly or not
local topBuffPrefix = "TargetFrameNewDebuff";
local bottomBuffPrefix = "TargetFrameNewBuff";
local numTopBuffs = numDebuffs;
local numBottomBuffs = numBuffs;
if (UnitIsFriend("player", "target")) then
topBuffPrefix = "TargetFrameNewBuff";
bottomBuffPrefix = "TargetFrameNewDebuff";
numTopBuffs = numBuffs;
numBottomBuffs = numDebuffs;
end
TargetFrameNewBuff1:ClearAllPoints();
TargetFrameNewBuff9:ClearAllPoints();
TargetFrameNewDebuff1:ClearAllPoints();
TargetFrameNewDebuff9:ClearAllPoints();
getglobal(topBuffPrefix..1):SetPoint("TOPLEFT", "TargetFrame", "BOTTOMLEFT", 5, 32);
if (ArchaeologistVars["TBUFFALT"] == 1) and (numTopBuffs >= 9) then
getglobal(topBuffPrefix..9):SetPoint("TOPLEFT", topBuffPrefix..1, "BOTTOMLEFT", 0, -2);
getglobal(bottomBuffPrefix..1):SetPoint("TOPLEFT", topBuffPrefix..9, "BOTTOMLEFT", 0, -2);
else
getglobal(topBuffPrefix..9):SetPoint("LEFT", topBuffPrefix..8, "RIGHT", 3, 0);
getglobal(bottomBuffPrefix..1):SetPoint("TOPLEFT", topBuffPrefix..1, "BOTTOMLEFT", 0, -2);
end
if (ArchaeologistVars["TBUFFALT"] == 1) and (numBottomBuffs >= 9) then
getglobal(bottomBuffPrefix..9):SetPoint("TOPLEFT", bottomBuffPrefix..1, "BOTTOMLEFT", 0, -2);
else
getglobal(bottomBuffPrefix..9):SetPoint("LEFT", bottomBuffPrefix..8, "RIGHT", 3, 0);
end
end
function Archaeologist_TurnOffTargetBuffs(toggle)
TargetDebuffButton_Update();
end
function Archaeologist_TurnOffTargetDebuffs(toggle)
TargetDebuffButton_Update();
end
function Archaeologist_SetTargetBuffs(count)
if (count) then
TargetDebuffButton_Update();
end
end
function Archaeologist_SetTargetDebuffs(count)
if (count) then
TargetDebuffButton_Update();
end
end
-- <= == == == == == == == == == == == == =>
-- => Alternate Options
-- <= == == == == == == == == == == == == =>
function Archaeologist_SetAltDebuffLocation(toggle)
Archaeologist_PetFrame_UpdateDebuffLocations();
Archaeologist_SetPetFrameHappinessLocation();
Archaeologist_PartyFrame_UpdateDebuffLocations();
end
function Archaeologist_SetUnitBarValuePercentSwap(unit, barType, toggle)
local statusBar = ArchaeologistStatusBars[unit].frame[barType];
Archaeologist_TextStringAltTextStatusBars[statusBar:GetName()] = toggle;
Archaeologist_TextStatusBar_UpdateTextString(statusBar);
end
function Archaeologist_SetPetFrameHappinessLocation()
if (ArchaeologistVars["PETHP2"] == "on") or (ArchaeologistVars["PETHP2"] == "mouseover") or
(ArchaeologistVars["PETMP2"] == "on") or (ArchaeologistVars["PETMP2"] == "mouseover") or
((ArchaeologistVars["DEBUFFALT"] == 0) and (ArchaeologistVars["PTDEBUFFS"] == 0)) then
--alt position
PetFrameHappiness:ClearAllPoints();
PetFrameHappiness:SetPoint("TOPRIGHT", "PetFrame", "BOTTOMLEFT", 8, 15);
else
--normal position
PetFrameHappiness:ClearAllPoints();
PetFrameHappiness:SetPoint("LEFT", "PetFrame", "RIGHT", -7, -4);
end
end
-- <= == == == == == == == == == == == == =>
-- => Font Options
-- <= == == == == == == == == == == == == =>
function Archaeologist_SetPrimaryHPColor(colorTable)
for unit, data in ArchaeologistStatusBars do
data.frame.healthbar.TextString:SetTextColor(colorTable.r, colorTable.g, colorTable.b, colorTable.opacity);
end
end
function Archaeologist_SetPrimaryMPColor(colorTable)
for unit, data in ArchaeologistStatusBars do
data.frame.manabar.TextString:SetTextColor(colorTable.r, colorTable.g, colorTable.b, colorTable.opacity);
end
end
function Archaeologist_SetSecondaryHPColor(colorTable)
for unit, data in ArchaeologistStatusBars do
data.frame.healthbar.TextString2:SetTextColor(colorTable.r, colorTable.g, colorTable.b, colorTable.opacity);
end
end
function Archaeologist_SetSecondaryMPColor(colorTable)
for unit, data in ArchaeologistStatusBars do
data.frame.manabar.TextString2:SetTextColor(colorTable.r, colorTable.g, colorTable.b, colorTable.opacity);
end
end
function Archaeologist_SetHPMPLargeFont(key)
if (not key) then
return;
end
local font = ArchaeologistFonts[key];
if (not font) then
-- Will reset to default on next Reload
return;
end
local frame;
local size = ArchaeologistVars["HPMPLARGESIZE"];
for i, unit in {"player", "target"} do
frame = ArchaeologistStatusBars[unit].frame;
frame.healthbar.TextString:SetFont(font, size);
frame.healthbar.TextString2:SetFont(font, size);
frame.manabar.TextString:SetFont(font, size);
frame.manabar.TextString2:SetFont(font, size);
end
Archaeologist_SetHPMPLargeTextSize(size); --Size corrects refonting problem with linebreaks
end
function Archaeologist_SetHPMPSmallFont(key)
if (not key) then
return;
end
local font = ArchaeologistFonts[key];
if (not font) then
-- Will reset to default on next Reload
return;
end
local frame;
local size = ArchaeologistVars["HPMPSMALLSIZE"];
for i, unit in {"party1", "party2", "party3", "party4", "pet"} do
frame = ArchaeologistStatusBars[unit].frame;
frame.healthbar.TextString:SetFont(font, size);
frame.healthbar.TextString2:SetFont(font, size);
frame.manabar.TextString:SetFont(font, size);
frame.manabar.TextString2:SetFont(font, size);
end
Archaeologist_SetHPMPSmallTextSize(size); --Size corrects refonting problem with linebreaks
end
-- <= == == == == == == == == == == == == =>
-- => MobHealth2 Compatibility
-- <= == == == == == == == == == == == == =>
function Archaeologist_MobHealth_OnEvent(event)
if (event == "PLAYER_TARGET_CHANGED") then
--Archaeologist_TargetCheckDead();
TextStatusBar_UpdateTextString(ArchaeologistStatusBars.target.frame.healthbar);
--Sea.io.print("MobHealth2: PLAYER_TARGET_CHANGED");
end
end
function Archaeologist_EnableMobHealth(toggle)
local frame;
if (MI2_MobHealthFrame) then
frame = MI2_MobHealthFrame;
elseif (MobHealthFrame) then
frame = MobHealthFrame;
else
return;
end
if (toggle == 1) then
frame:Hide();
else
frame:Show();
end
end
-- <= == == == == == == == == == == == == =>
-- => Class Icons
-- <= == == == == == == == == == == == == =>
function Archaeologist_TurnOnPartyClassIcon(toggle)
Archaeologist_UpdatePartyClassIcons();
if (toggle == 1) then
for i=1, 4 do
getglobal("PartyMemberFrame"..i.."MasterIcon"):ClearAllPoints();
getglobal("PartyMemberFrame"..i.."MasterIcon"):SetPoint("TOPLEFT", "PartyMemberFrame"..i, "TOPLEFT", 15, 5);
end
else
for i=1, 4 do
getglobal("PartyMemberFrame"..i.."MasterIcon"):ClearAllPoints();
getglobal("PartyMemberFrame"..i.."MasterIcon"):SetPoint("TOPLEFT", "PartyMemberFrame"..i, "TOPLEFT", 32, 0);
end
end
end
function Archaeologist_UpdatePartyClassIcons()
if (ArchaeologistVars["PARTYCLASSICON"] == 1) then
local localizedClass, englishClass, icon;
for i=1, GetNumPartyMembers() do
localizedClass, englishClass = UnitClass("party"..i);
icon = getglobal("PartyMemberFrame"..i.."ClassIcon");
if (englishClass) then
if (not icon:IsVisible()) then
icon:Show();
end
getglobal(icon:GetName().."Texture"):SetTexture("Interface\\AddOns\\Archaeologist\\Skin\\ClassIcons\\"..Sea.string.capitalizeWords(englishClass));
else
if (icon:IsVisible()) then
icon:Hide();
end
end
end
else
for i=1, GetNumPartyMembers() do
icon = getglobal("PartyMemberFrame"..i.."ClassIcon");
if (icon:IsVisible()) then
icon:Hide();
end
end
end
end
function Archaeologist_TurnOnTargetClassIcon(toggle)
Archaeologist_UpdateTargetClassIcon();
end
function Archaeologist_UpdateTargetClassIcon()
if (ArchaeologistVars["TARGETCLASSICON"] == 1) then
if (UnitIsPlayer("target")) then
local localizedClass, englishClass = UnitClass("target");
if (not TargetFrameClassIcon:IsVisible()) then
TargetFrameClassIcon:Show();
end
TargetFrameClassIconTexture:SetTexture("Interface\\AddOns\\Archaeologist\\Skin\\ClassIcons\\"..Sea.string.capitalizeWords(englishClass));
else
TargetFrameClassIcon:Hide();
end
else
if (TargetFrameClassIcon:IsVisible()) then
TargetFrameClassIcon:Hide();
end
end
end
function Archaeologist_TurnOnPlayerClassIcon(toggle)
Archaeologist_UpdatePlayerClassIcon();
if (toggle == 1) then
PlayerMasterIcon:ClearAllPoints();
PlayerMasterIcon:SetPoint("TOPLEFT", "PlayerFrame", "TOPLEFT", 65, -2);
else
PlayerMasterIcon:ClearAllPoints();
PlayerMasterIcon:SetPoint("TOPLEFT", "PlayerFrame", "TOPLEFT", 80, -10);
end
end
function Archaeologist_UpdatePlayerClassIcon()
if (ArchaeologistVars["PLAYERCLASSICON"] == 1) then
local localizedClass, englishClass = UnitClass("player");
if (not PlayerFrameClassIcon:IsVisible()) then
PlayerFrameClassIcon:Show();
end
PlayerFrameClassIconTexture:SetTexture("Interface\\AddOns\\Archaeologist\\Skin\\ClassIcons\\"..Sea.string.capitalizeWords(englishClass));
else
if (PlayerFrameClassIcon:IsVisible()) then
PlayerFrameClassIcon:Hide();
end
end
end
function Archaeologist_ClassIcon_OnLoad()
this:SetFrameLevel(this:GetFrameLevel()+2);
end
function Archaeologist_EnableClassPortrait(toggle)
if (toggle == 1) then
for unit, data in ArchaeologistStatusBars do
if (unit ~= "pet") then
if (UnitIsPlayer(unit)) then
local localizedClass, englishClass = UnitClass(unit);
if (englishClass) then
data.frame.portrait:SetTexture("Interface\\AddOns\\Archaeologist\\Skin\\PortraitIcons\\"..Sea.string.capitalizeWords(englishClass));
end
end
end
end
else
SetPortraitTexture(PlayerFrame.portrait, "player");
SetPortraitTexture(TargetFrame.portrait, "target");
SetPortraitTexture(PartyMemberFrame1.portrait, "party1");
SetPortraitTexture(PartyMemberFrame2.portrait, "party2");
SetPortraitTexture(PartyMemberFrame3.portrait, "party3");
SetPortraitTexture(PartyMemberFrame4.portrait, "party4");
end
end
function Archaeologist_UnitFrame_Update_After()
if (ArchaeologistVars["CLASSPORTRAIT"] == 1) then
if (UnitIsPlayer(this.unit)) then
local localizedClass, englishClass = UnitClass(this.unit);
if (englishClass) then
this.portrait:SetTexture("Interface\\AddOns\\Archaeologist\\Skin\\PortraitIcons\\"..Sea.string.capitalizeWords(englishClass));
end
end
end
end
function Archaeologist_UnitFrame_OnEvent_After(event)
if (ArchaeologistVars["CLASSPORTRAIT"] == 1) then
if ( (event == "UNIT_PORTRAIT_UPDATE") and (arg1 == this.unit) ) then
if (UnitIsPlayer(this.unit)) then
local localizedClass, englishClass = UnitClass(this.unit);
if (englishClass) then
this.portrait:SetTexture("Interface\\AddOns\\Archaeologist\\Skin\\PortraitIcons\\"..Sea.string.capitalizeWords(englishClass));
end
end
end
end
end
-- <= == == == == == == == == == == == == =>
-- => Helpful Funcs
-- <= == == == == == == == == == == == == =>
-- 1 => 0, 0 => 1
function BinaryInvert(oneZero)
if oneZero == 1 then
return 0;
else
return 1;
end
end
function Archaeologist_PartyIndexFromName(name)
for i=1, GetNumPartyMembers() do
if ( name == UnitName("party"..i) ) then
return i;
end
end
end
function Archaeologist_PartyIndexFromUnit(unit)
if (type(unit) == "string") then
if ( strsub(unit,0, string.len(unit)-1) == "party" ) then
local partyIndex = tonumber( strsub(unit,string.len(unit)) );
return partyIndex;
end
end
end
function Archaeologist_PartyIndexFromFrame(frame)
local frameName = frame:GetName();
if (frameName) then
if ( strsub(frameName,0, string.len(frameName)-1) == "PartyMemberFrame" ) then
local frameIndex = frame:GetID();
if (frameIndex > 0) then
return frameIndex;
end
end
end
end
-- <= == == == == == == == == == == == =>
-- => Presets
-- <= == == == == == == == == == == == =>
function Archaeologist_SetValuePercentPresets(index)
if (index) then
local id = MCom.getComID("/arch");
if (index == 1) then
-- Values on the Bars
for k, v in {"player", "pet", "party", "target"} do
MCom.SlashCommandHandler(id, v.."hp "..ARCHAEOLOGIST_ON);
MCom.SlashCommandHandler(id, v.."hp2 "..ARCHAEOLOGIST_OFF);
MCom.SlashCommandHandler(id, v.."mp "..ARCHAEOLOGIST_ON);
MCom.SlashCommandHandler(id, v.."mp2 "..ARCHAEOLOGIST_OFF);
MCom.SlashCommandHandler(id, v.."hpinvert "..ARCHAEOLOGIST_OFF);
MCom.SlashCommandHandler(id, v.."mpinvert "..ARCHAEOLOGIST_OFF);
MCom.SlashCommandHandler(id, v.."hpswap "..ARCHAEOLOGIST_ON);
MCom.SlashCommandHandler(id, v.."mpswap "..ARCHAEOLOGIST_ON);
end
MCom.SlashCommandHandler(id, "targethpswap "..ARCHAEOLOGIST_OFF);
MCom.SlashCommandHandler(id, "usehpvalue "..ARCHAEOLOGIST_ON);
if (MobHealth_OnEvent) then
MCom.SlashCommandHandler(id, "mobhealth "..ARCHAEOLOGIST_ON);
end
elseif (index == 2) then
-- Values next to the Bars
for k, v in {"player", "pet", "party", "target"} do
MCom.SlashCommandHandler(id, v.."hp "..ARCHAEOLOGIST_OFF);
MCom.SlashCommandHandler(id, v.."hp2 "..ARCHAEOLOGIST_ON);
MCom.SlashCommandHandler(id, v.."mp "..ARCHAEOLOGIST_OFF);
MCom.SlashCommandHandler(id, v.."mp2 "..ARCHAEOLOGIST_ON);
MCom.SlashCommandHandler(id, v.."hpinvert "..ARCHAEOLOGIST_OFF);
MCom.SlashCommandHandler(id, v.."mpinvert "..ARCHAEOLOGIST_OFF);
MCom.SlashCommandHandler(id, v.."hpswap "..ARCHAEOLOGIST_OFF);
MCom.SlashCommandHandler(id, v.."mpswap "..ARCHAEOLOGIST_OFF);
end
MCom.SlashCommandHandler(id, "targethpswap "..ARCHAEOLOGIST_ON);
MCom.SlashCommandHandler(id, "usehpvalue "..ARCHAEOLOGIST_ON);
if (MobHealth_OnEvent) then
MCom.SlashCommandHandler(id, "mobhealth "..ARCHAEOLOGIST_ON);
end
elseif (index == 3) then
-- Percentage on the Bars
for k, v in {"player", "pet", "party", "target"} do
MCom.SlashCommandHandler(id, v.."hp "..ARCHAEOLOGIST_ON);
MCom.SlashCommandHandler(id, v.."hp2 "..ARCHAEOLOGIST_OFF);
MCom.SlashCommandHandler(id, v.."mp "..ARCHAEOLOGIST_ON);
MCom.SlashCommandHandler(id, v.."mp2 "..ARCHAEOLOGIST_OFF);
MCom.SlashCommandHandler(id, v.."hpinvert "..ARCHAEOLOGIST_OFF);
MCom.SlashCommandHandler(id, v.."mpinvert "..ARCHAEOLOGIST_OFF);
MCom.SlashCommandHandler(id, v.."hpswap "..ARCHAEOLOGIST_OFF);
MCom.SlashCommandHandler(id, v.."mpswap "..ARCHAEOLOGIST_OFF);
end
MCom.SlashCommandHandler(id, "usehpvalue "..ARCHAEOLOGIST_OFF);
elseif (index == 4) then
-- Percentage next to the Bars
for k, v in {"player", "pet", "party", "target"} do
MCom.SlashCommandHandler(id, v.."hp "..ARCHAEOLOGIST_OFF);
MCom.SlashCommandHandler(id, v.."hp2 "..ARCHAEOLOGIST_ON);
MCom.SlashCommandHandler(id, v.."mp "..ARCHAEOLOGIST_OFF);
MCom.SlashCommandHandler(id, v.."mp2 "..ARCHAEOLOGIST_ON);
MCom.SlashCommandHandler(id, v.."hpinvert "..ARCHAEOLOGIST_OFF);
MCom.SlashCommandHandler(id, v.."mpinvert "..ARCHAEOLOGIST_OFF);
MCom.SlashCommandHandler(id, v.."hpswap "..ARCHAEOLOGIST_ON);
MCom.SlashCommandHandler(id, v.."mpswap "..ARCHAEOLOGIST_ON);
end
MCom.SlashCommandHandler(id, "usehpvalue "..ARCHAEOLOGIST_OFF);
elseif (index == 5) then
-- Percentage on the Bars, Values next to the Bars
for k, v in {"player", "pet", "party", "target"} do
MCom.SlashCommandHandler(id, v.."hp "..ARCHAEOLOGIST_ON);
MCom.SlashCommandHandler(id, v.."hp2 "..ARCHAEOLOGIST_ON);
MCom.SlashCommandHandler(id, v.."mp "..ARCHAEOLOGIST_ON);
MCom.SlashCommandHandler(id, v.."mp2 "..ARCHAEOLOGIST_ON);
MCom.SlashCommandHandler(id, v.."hpinvert "..ARCHAEOLOGIST_OFF);
MCom.SlashCommandHandler(id, v.."mpinvert "..ARCHAEOLOGIST_OFF);
MCom.SlashCommandHandler(id, v.."hpswap "..ARCHAEOLOGIST_OFF);
MCom.SlashCommandHandler(id, v.."mpswap "..ARCHAEOLOGIST_OFF);
end
MCom.SlashCommandHandler(id, "usehpvalue "..ARCHAEOLOGIST_OFF);
if (MobHealth_OnEvent) then
MCom.SlashCommandHandler(id, "mobhealth "..ARCHAEOLOGIST_ON);
end
elseif (index == 6) then
-- Values on the Bars, Percentage next to the Bars
for k, v in {"player", "pet", "party", "target"} do
MCom.SlashCommandHandler(id, v.."hp "..ARCHAEOLOGIST_ON);
MCom.SlashCommandHandler(id, v.."hp2 "..ARCHAEOLOGIST_ON);
MCom.SlashCommandHandler(id, v.."mp "..ARCHAEOLOGIST_ON);
MCom.SlashCommandHandler(id, v.."mp2 "..ARCHAEOLOGIST_ON);
MCom.SlashCommandHandler(id, v.."hpinvert "..ARCHAEOLOGIST_OFF);
MCom.SlashCommandHandler(id, v.."mpinvert "..ARCHAEOLOGIST_OFF);
MCom.SlashCommandHandler(id, v.."hpswap "..ARCHAEOLOGIST_ON);
MCom.SlashCommandHandler(id, v.."mpswap "..ARCHAEOLOGIST_ON);
end
MCom.SlashCommandHandler(id, "usehpvalue "..ARCHAEOLOGIST_OFF);
if (MobHealth_OnEvent) then
MCom.SlashCommandHandler(id, "mobhealth "..ARCHAEOLOGIST_ON);
end
end
if (Khaos) and (KhaosFrame:IsVisible()) then
Khaos.refresh(false, false, true);
elseif (CosmosMasterFrame) and (CosmosMasterFrame:IsVisible()) and (not CosmosMasterFrame_IsLoading) then
CosmosMaster_DrawData();
end
end
end
function Archaeologist_SetPrefixPresets(index)
if (index) then
local id = MCom.getComID("/arch");
if (index == 1) then
-- All off
for k, v in {"player", "pet", "party", "target"} do
MCom.SlashCommandHandler(id, v.."hpnoprefix "..ARCHAEOLOGIST_ON);
MCom.SlashCommandHandler(id, v.."mpnoprefix "..ARCHAEOLOGIST_ON);
end
MCom.SlashCommandHandler(id, "playerxpnoprefix "..ARCHAEOLOGIST_ON);
MCom.SlashCommandHandler(id, "petxpnoprefix "..ARCHAEOLOGIST_ON);
elseif (index == 2) then
-- All on
for k, v in {"player", "pet", "party", "target"} do
MCom.SlashCommandHandler(id, v.."hpnoprefix "..ARCHAEOLOGIST_OFF);
MCom.SlashCommandHandler(id, v.."mpnoprefix "..ARCHAEOLOGIST_OFF);
end
MCom.SlashCommandHandler(id, "playerxpnoprefix "..ARCHAEOLOGIST_OFF);
MCom.SlashCommandHandler(id, "petxpnoprefix "..ARCHAEOLOGIST_OFF);
elseif (index == 3) then
-- All default
for k, v in {"player", "pet", "party", "target"} do
MCom.SlashCommandHandler(id, v.."hpnoprefix "..ArchaeologistVarData[strupper(v.."hpnoprefix")].default);
MCom.SlashCommandHandler(id, v.."mpnoprefix "..ArchaeologistVarData[strupper(v.."mpnoprefix")].default);
end
MCom.SlashCommandHandler(id, "playerxpnoprefix "..ArchaeologistVarData[strupper("playerxpnoprefix")].default);
MCom.SlashCommandHandler(id, "petxpnoprefix "..ArchaeologistVarData[strupper("petxpnoprefix")].default);
end
if (Khaos) and (KhaosFrame:IsVisible()) then
Khaos.refresh(false, false, true);
elseif (CosmosMasterFrame) and (CosmosMasterFrame:IsVisible()) and (not CosmosMasterFrame_IsLoading) then
CosmosMaster_DrawData();
end
end
end
-- <= == == == == == == == == == == == =>
-- => Configuration Registeration
-- <= == == == == == == == == == == == =>
function Archaeologist_RegisterForMCom()
local optionSet = {};
-- <= == == == == == == == == == == == =>
-- => Presets Registering
-- <= == == == == == == == == == == == =>
table.insert(optionSet, {
id="PresetsHeader";
text=ARCHAEOLOGIST_CONFIG_PRESETS;
helptext=ARCHAEOLOGIST_CONFIG_PRESETS;
type=K_HEADER;
difficulty=1;
});
table.insert(optionSet, {
id="Preset1ValuesOnBars";
type=K_BUTTON;
text=ARCHAEOLOGIST_CONFIG_VALUES_ON_BARS;
helptext=ARCHAEOLOGIST_CONFIG_VALUES_ON_BARS;
callback=function()Archaeologist_SetValuePercentPresets(1)end;
setup={buttonText=ARCHAEOLOGIST_CONFIG_SET};
mcopts = {
subcom = string.lower("Preset1");
};
});
table.insert(optionSet, {
id="Preset2ValuesNextToBars";
type=K_BUTTON;
text=ARCHAEOLOGIST_CONFIG_VALUES_NEXTTO_BARS;
helptext=ARCHAEOLOGIST_CONFIG_VALUES_NEXTTO_BARS;
callback=function()Archaeologist_SetValuePercentPresets(2)end;
setup={buttonText=ARCHAEOLOGIST_CONFIG_SET};
mcopts = {
subcom = string.lower("Preset2");
};
});
table.insert(optionSet, {
id="Preset3PercentageOnBars";
type=K_BUTTON;
text=ARCHAEOLOGIST_CONFIG_PERCENTAGE_ON_BARS;
helptext=ARCHAEOLOGIST_CONFIG_PERCENTAGE_ON_BARS;
callback=function()Archaeologist_SetValuePercentPresets(3)end;
setup={buttonText=ARCHAEOLOGIST_CONFIG_SET};
mcopts = {
subcom = string.lower("Preset3");
};
});
table.insert(optionSet, {
id="Preset4PercentageNextToBars";
type=K_BUTTON;
text=ARCHAEOLOGIST_CONFIG_PERCENTAGE_NEXTTO_BARS;
helptext=ARCHAEOLOGIST_CONFIG_PERCENTAGE_NEXTTO_BARS;
callback=function()Archaeologist_SetValuePercentPresets(4)end;
setup={buttonText=ARCHAEOLOGIST_CONFIG_SET};
mcopts = {
subcom = string.lower("Preset4");
};
});
table.insert(optionSet, {
id="Preset5PercentageOnValuesNextToBars";
type=K_BUTTON;
text=ARCHAEOLOGIST_CONFIG_PERCENTAGE_ON_VALUES_NEXTTO_BARS;
helptext=ARCHAEOLOGIST_CONFIG_PERCENTAGE_ON_VALUES_NEXTTO_BARS;
callback=function()Archaeologist_SetValuePercentPresets(5)end;
setup={buttonText=ARCHAEOLOGIST_CONFIG_SET};
mcopts = {
subcom = string.lower("Preset5");
};
});
table.insert(optionSet, {
id="Preset6ValuesOnPercentageNextToBars";
type=K_BUTTON;
text=ARCHAEOLOGIST_CONFIG_VALUES_ON_PERCENTAGE_NEXTTO_BARS;
helptext=ARCHAEOLOGIST_CONFIG_VALUES_ON_PERCENTAGE_NEXTTO_BARS;
callback=function()Archaeologist_SetValuePercentPresets(6)end;
setup={buttonText=ARCHAEOLOGIST_CONFIG_SET};
mcopts = {
subcom = string.lower("Preset6");
};
});
table.insert(optionSet, {
id="Preset1PrefixesOff";
type=K_BUTTON;
text=ARCHAEOLOGIST_CONFIG_PREFIXES_OFF;
helptext=ARCHAEOLOGIST_CONFIG_PREFIXES_OFF;
callback=function()Archaeologist_SetPrefixPresets(1)end;
setup={buttonText=ARCHAEOLOGIST_CONFIG_SET};
mcopts = {
subcom = string.lower("PrefixOff");
};
});
table.insert(optionSet, {
id="Preset1PrefixesOn";
type=K_BUTTON;
text=ARCHAEOLOGIST_CONFIG_PREFIXES_ON;
helptext=ARCHAEOLOGIST_CONFIG_PREFIXES_ON;
callback=function()Archaeologist_SetPrefixPresets(2)end;
setup={buttonText=ARCHAEOLOGIST_CONFIG_SET};
mcopts = {
subcom = string.lower("PrefixOn");
};
});
table.insert(optionSet, {
id="Preset1PrefixesDefault";
type=K_BUTTON;
text=ARCHAEOLOGIST_CONFIG_PREFIXES_DEFAULT;
helptext=ARCHAEOLOGIST_CONFIG_PREFIXES_DEFAULT;
callback=function()Archaeologist_SetPrefixPresets(3)end;
setup={buttonText=ARCHAEOLOGIST_CONFIG_SET};
mcopts = {
subcom = string.lower("PrefixDefault");
};
});
-- <= == == == == == == == == == == == =>
-- => Looped Registering
-- <= == == == == == == == == == == == =>
local varPrefixes = { "PLAYER", "PARTY", "PET", "TARGET" };
table.sort(varPrefixes);
for index, varPrefix in varPrefixes do
local header = {
id = Sea.string.capitalizeWords(varPrefix).."Header";
type = K_HEADER;
difficulty = 1;
text = getglobal("ARCHAEOLOGIST_CONFIG_"..varPrefix.."_SEP");
helptext = getglobal("ARCHAEOLOGIST_CONFIG_"..varPrefix.."_SEP_INFO");
};
table.insert(optionSet, header);
local keyList = Sea.table.getKeyList(ArchaeologistVarData);
local sorter = function(a,b)
if ( type(getglobal("ARCHAEOLOGIST_CONFIG_"..a)) == type(getglobal("ARCHAEOLOGIST_CONFIG_"..b)) and type(getglobal("ARCHAEOLOGIST_CONFIG_"..a)) ~= "nil") then
return (getglobal("ARCHAEOLOGIST_CONFIG_"..a) < getglobal("ARCHAEOLOGIST_CONFIG_"..b));
else
return false;
end
end
table.sort(keyList, sorter);
for k, index in keyList do
local var = ArchaeologistVarData[index];
if (type(index) == "string") then
if (strsub(index, 0, string.len(varPrefix)) == varPrefix) then
local f = ArchaeologistVarData[index].func;
local option;
if (type(ArchaeologistVarData[index].options) == "table") then
option = {
id = ArchaeologistVarData[index].name;
type = K_PULLDOWN;
difficulty = 1;
text = getglobal("ARCHAEOLOGIST_CONFIG_"..index);
helptext = getglobal("ARCHAEOLOGIST_CONFIG_"..index.."_INFO");
--feedback = function(state) return Archaeologist_Feedback(index, state.value) end;
dependencies = ArchaeologistVarData[index].dependencies;
default = {
key = ArchaeologistVarData[index].default;
};
disabled = {
key = ArchaeologistVarData[index].default;
};
setup = {
options = ArchaeologistVarData[index].options;
multiSelect = false;
};
mcopts = {
subcom = string.lower(index);
--subhelp = getglobal("ARCHAEOLOGIST_CONFIG_"..index.."_INFO");
varchoice = "ArchaeologistVars."..index;
update = function(varName) f(Sea.util.getValue(varName)); end;
noupdate = function(varName) f(Sea.util.getValue(varName)); end;
};
};
else
option = {
id = ArchaeologistVarData[index].name;
check = true;
type = K_TEXT;
difficulty = 1;
text = getglobal("ARCHAEOLOGIST_CONFIG_"..index);
helptext = getglobal("ARCHAEOLOGIST_CONFIG_"..index.."_INFO");
--feedback = function(state) return Archaeologist_Feedback(index, state.checked) end;
default = {
checked = false;
};
disabled = {
checked = false;
};
dependencies = ArchaeologistVarData[index].dependencies;
mcopts = {
subcom = string.lower(index);
varbool = "ArchaeologistVars."..index;
update = function(varName) f(Sea.util.getValue(varName)); end;
noupdate = function(varName) f(Sea.util.getValue(varName)); end;
};
};
if ( ArchaeologistVarData[index].default == 1 ) then
option.default.checked = true;
option.disabled.checked = true;
end
end
table.insert(optionSet, option);
end
end
end
end
-- <= == == == == == == == == == == == =>
-- => Alternate Options Registering
-- <= == == == == == == == == == == == =>
local varPrefix = "ALTOPTS";
local header = {
id = Sea.string.capitalizeWords(varPrefix).."Header";
type = K_HEADER;
difficulty = 2;
text = getglobal("ARCHAEOLOGIST_CONFIG_"..varPrefix.."_SEP");
helptext = getglobal("ARCHAEOLOGIST_CONFIG_"..varPrefix.."_SEP_INFO");
};
table.insert(optionSet, header);
varPrefixes = { "HPCOLOR", "DEBUFFALT", "TBUFFALT", "CLASSPORTRAIT", "USEHPVALUE" };
if ( MobHealth_OnEvent ) then
table.insert(varPrefixes, "MOBHEALTH" );
end
for index, varPrefix in varPrefixes do
local f = ArchaeologistVarData[varPrefix].func;
local option = {
id = ArchaeologistVarData[varPrefix].name;
check = true;
type = K_TEXT;
difficulty = 2;
text = getglobal("ARCHAEOLOGIST_CONFIG_"..varPrefix);
helptext = getglobal("ARCHAEOLOGIST_CONFIG_"..varPrefix.."_INFO");
--feedback = function(state) return Archaeologist_Feedback(varPrefix, state.checked) end;
default = {
checked = false;
};
disabled = {
checked = false;
};
dependencies = ArchaeologistVarData[varPrefix].dependencies;
mcopts = {
subcom = string.lower(varPrefix);
varbool = "ArchaeologistVars."..varPrefix;
update = function(varName) f(Sea.util.getValue(varName)); end;
noupdate = function(varName) f(Sea.util.getValue(varName)); end;
};
};
if ( ArchaeologistVarData[varPrefix].default == 1 ) then
option.default.checked = true;
option.disabled.checked = true;
end
table.insert(optionSet, option);
end
-- <= == == == == == == == == == == == =>
-- => Font Options Registering
-- <= == == == == == == == == == == == =>
local varPrefix = "FONTOPTS";
local header = {
id = Sea.string.capitalizeWords(varPrefix).."Header";
type = K_HEADER;
difficulty = 3;
text = getglobal("ARCHAEOLOGIST_CONFIG_"..varPrefix.."_SEP");
helptext = getglobal("ARCHAEOLOGIST_CONFIG_"..varPrefix.."_SEP_INFO");
};
table.insert(optionSet, header);
varPrefixes = { "HPMPLARGE", "HPMPSMALL" };
for index, varPrefix in varPrefixes do
local id = varPrefix.."FONT";
local f = ArchaeologistVarData[id].func;
local option = {
id = ArchaeologistVarData[id].name;
type = K_PULLDOWN;
difficulty = 3;
text = getglobal("ARCHAEOLOGIST_CONFIG_"..id);
helptext = getglobal("ARCHAEOLOGIST_CONFIG_"..id);
--feedback = function(state) return Archaeologist_Feedback(id, state.value) end;
dependencies = ArchaeologistVarData[id].dependencies;
default = {
key = ArchaeologistVarData[id].default;
};
disabled = {
key = ArchaeologistVarData[id].default;
};
setup = {
options = ArchaeologistVarData[id].options;
multiSelect = false;
};
mcopts = {
subcom = string.lower(id);
subhelp = getglobal("ARCHAEOLOGIST_CONFIG_"..id.."_INFO");
varchoice = "ArchaeologistVars."..id;
update = function(varName) f(Sea.util.getValue(varName)); end;
noupdate = function(varName) f(Sea.util.getValue(varName)); end;
};
};
table.insert(optionSet, option);
local id = varPrefix.."SIZE";
local f = ArchaeologistVarData[id].func;
local option = {
id = ArchaeologistVarData[id].name;
type = K_SLIDER;
difficulty = 3;
text = getglobal("ARCHAEOLOGIST_CONFIG_"..id);
helptext = getglobal("ARCHAEOLOGIST_CONFIG_"..id);
--feedback = function(state) return Archaeologist_Feedback(id, state.checked) end;
dependencies = ArchaeologistVarData[id].dependencies;
default = {
slider = ArchaeologistVarData[id].default;
};
disabled = {
slider = ArchaeologistVarData[id].default;
};
setup = {
sliderMin = ArchaeologistVarData[id].min;
sliderMax = ArchaeologistVarData[id].max;
sliderStep = 1;
sliderText = getglobal("ARCHAEOLOGIST_CONFIG_"..id.."_SLIDER_TEXT");
};
mcopts = {
subcom = string.lower(id);
varnum = "ArchaeologistVars."..id;
update = function(varName) f(Sea.util.getValue(varName)); end;
noupdate = function(varName) f(Sea.util.getValue(varName)); end;
};
};
if ( ArchaeologistVars[id] == 1 ) then
option.default.checked = true;
end
table.insert(optionSet, option);
end
varPrefixes = { "COLORPHP", "COLORPMP", "COLORSHP", "COLORSMP" };
for index, varPrefix in varPrefixes do
local data = ArchaeologistVarData[varPrefix];
local subcom = string.lower(varPrefix);
local varcolor = "ArchaeologistVars."..varPrefix;
local colorResetFeedback = function(state)
return string.format(ARCHAEOLOGIST_COLOR_RESET, Sea.string.colorToString(state.color), data.name );
end
table.insert(
optionSet,
{
id=ArchaeologistVarData[varPrefix].name;
text=getglobal("ARCHAEOLOGIST_CONFIG_"..varPrefix);
helptext=getglobal("ARCHAEOLOGIST_CONFIG_"..varPrefix.."_INFO");
difficulty=3;
type=K_COLORPICKER;
setup= {
hasOpacity=true;
};
default={
color=ArchaeologistVarData[varPrefix].default;
};
disabled={
color=ArchaeologistVarData[varPrefix].default;
};
mcopts = {
subcom = subcom;
varcolor = varcolor;
update = function(varName) data.func(Sea.util.getValue(varName)); end;
noupdate = function(varName) data.func(Sea.util.getValue(varName)); end;
};
}
);
table.insert(
optionSet,
{
id=ArchaeologistVarData[varPrefix].name.."Reset";
text=getglobal("ARCHAEOLOGIST_CONFIG_"..varPrefix.."_RESET");
helptext=getglobal("ARCHAEOLOGIST_CONFIG_"..varPrefix.."_RESET_INFO");
difficulty=3;
callback=function(state)
--Khaos.setSetKey(KhaosCore.getCurrentSet(), data.name, {color=data.default});
--Khaos.refresh(false, false, true); --Refresh Visible
Sea.util.setValue(varcolor, data.default);
MCom.updateUI(ARCHAEOLOGIST_SUPER_SLASH_COMMAND, subcom)
end;
--feedback=colorResetFeedback;
type=K_BUTTON;
setup = {
buttonText=RESET;
};
}
);
end
-- <= == == == == == == == == == == == =>
-- => Buff Registering
-- <= == == == == == == == == == == == =>
local varSections = {
PARTYBUFFS = { "PBUFF", "PDEBUFF" };
PARTYPETBUFFS = { "PPTBUFF", "PPTDEBUFF" };
PETBUFFS = { "PTBUFF", "PTDEBUFF" };
TARGETBUFFS = { "TBUFF", "TDEBUFF" };
};
for headerPrefix, varPrefixes in varSections do
local header = {
id = Sea.string.capitalizeWords(headerPrefix).."Header";
type = K_HEADER;
difficulty = 2;
text = getglobal("ARCHAEOLOGIST_CONFIG_"..headerPrefix.."_SEP");
helptext = getglobal("ARCHAEOLOGIST_CONFIG_"..headerPrefix.."_SEP_INFO");
};
table.insert(optionSet, header);
for index, varPrefix in varPrefixes do
local id = varPrefix.."S";
local f = ArchaeologistVarData[id].func;
local option = {
id = ArchaeologistVarData[id].name;
check = true;
type = K_TEXT;
difficulty = 2;
text = getglobal("ARCHAEOLOGIST_CONFIG_"..id);
helptext = getglobal("ARCHAEOLOGIST_CONFIG_"..id.."_INFO");
--feedback = function(state) return Archaeologist_Feedback(id, state.checked) end;
default = {
checked = false;
};
disabled = {
checked = false;
};
dependencies = ArchaeologistVarData[id].dependencies;
mcopts = {
subcom = string.lower(id);
varbool = "ArchaeologistVars."..id;
update = function(varName) f(Sea.util.getValue(varName)); end;
noupdate = function(varName) f(Sea.util.getValue(varName)); end;
};
};
if ( ArchaeologistVars[id] == 1 ) then
option.default.checked = true;
end
table.insert(optionSet, option);
local id = varPrefix.."NUM";
local f = ArchaeologistVarData[id].func;
local optionSlider = {
id = ArchaeologistVarData[id].name;
type = K_SLIDER;
difficulty = 2;
text = getglobal("ARCHAEOLOGIST_CONFIG_"..id);
helptext = getglobal("ARCHAEOLOGIST_CONFIG_"..id.."_INFO");
--feedback = function(state) return Archaeologist_Feedback(id, state.slider) end;
dependencies = ArchaeologistVarData[id].dependencies;
default = {
slider = ArchaeologistVarData[id].default;
};
disabled = {
slider = ArchaeologistVarData[id].default;
};
setup = {
sliderMin = ArchaeologistVarData[id].min;
sliderMax = ArchaeologistVarData[id].max;
sliderStep = 1;
sliderText = getglobal("ARCHAEOLOGIST_CONFIG_"..id.."_SLIDER_TEXT");
};
mcopts = {
subcom = string.lower(id);
varnum = "ArchaeologistVars."..id;
update = function(varName) f(Sea.util.getValue(varName)); end;
noupdate = function(varName) f(Sea.util.getValue(varName)); end;
};
};
if ( ArchaeologistVars[id] == 1 ) then
option.default.checked = true;
end
table.insert(optionSet, optionSlider);
end
end
-- <= == == == == == == == == == == == =>
-- => Config Set Registering
-- <= == == == == == == == == == == == =>
MCom.registerSmart(
{
supercom = ARCHAEOLOGIST_SUPER_SLASH_COMMAND;
uifolder = "frames",
uiset = {
id = ArchaeologistOptionSetName;
text = ARCHAEOLOGIST_CONFIG_SEP;
helptext = ARCHAEOLOGIST_CONFIG_SEP_INFO;
difficulty = 1;
options = optionSet;
}
}
);
end
function Archaeologist_Feedback(id, setToValue)
if (not id) then
id = "Unknown";
end
if (not setToValue) then
setToValue = "false";
end
return string.format(ARCHAEOLOGIST_FEEDBACK_STRING, id, tostring(setToValue));
end