diff --git a/boot.lua b/boot.lua index dc33bc81..b198e528 100644 --- a/boot.lua +++ b/boot.lua @@ -3,8 +3,8 @@ _ = nil _detalhes = LibStub("AceAddon-3.0"):NewAddon("_detalhes", "AceTimer-3.0", "AceComm-3.0", "AceSerializer-3.0", "NickTag-1.0") - _detalhes.build_counter = 83 --it's 83 for release - _detalhes.userversion = "v1.27.0" + _detalhes.build_counter = 83 --it's 87 for release + _detalhes.userversion = "a1.28.0" _detalhes.realversion = 28 _detalhes.version = _detalhes.userversion .. " (core " .. _detalhes.realversion .. ")" @@ -18,16 +18,17 @@ do local Loc = LibStub ("AceLocale-3.0"):GetLocale ( "Details" ) --[[ -|cFFFFFF00v1.27.0 (|cFFFFCC00Set 27, 2014|r|cFFFFFF00)|r:\n\n -|cFFFFFF00-|r Minimalistic skin is now the ols minimalistic v2.\n\n -|cFFFFFF00-|r Minimalistic v2 got a new texture, little more darker.\n\n -|cFFFFFF00-|r Few tweaks to make more easy making groups of windows.\n\n -|cFFFFFF00-|r Bookmark now accepts more than two columns.\n\n - -|cFFFFFF00-|r Bookmark now accepts more than two columns.\n\n +|cFFFFFF00v1.28.0 (|cFFFFCC00Set 29, 2014|r|cFFFFFF00)|r:\n\n +|cFFFFFF00-|r Added a Change Log button on Options Panel.\n\n +|cFFFFFF00-|r Added option to use the same profile on all characters without asking.\n\n +|cFFFFFF00-|r Added a shortcut color button on main panel on Options Panel.\n\n +|cFFFFFF00-|r Added auto erase/ask to erase options.\n\n +|cFFFFFF00-|r Bars now highlight when hover over.\n\n +|cFFFFFF00-|r Fixed problem with drag the window when the toolbar is on the bottom side.\n\n --]] - Loc ["STRING_VERSION_LOG"] = "|cFFFFFF00v1.27.0 (|cFFFFCC00Set 27, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Minimalistic skin is now the old minimalistic v2.\n\n|cFFFFFF00-|r Minimalistic v2 got a new texture, little more darker.\n\n|cFFFFFF00-|r Few tweaks to make more easy making groups of windows.\n\n|cFFFFFF00-|r Bookmark now accepts more than two columns.\n\n|cFFFFFF00v1.26.3 (|cFFFFCC00Set 18, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Changed the way to set the broker text to be more customizable.\n\n|cFFFFFF00-|r Fixed the problem with custom display report.\n\n|cFFFFFF00-|r Added tutorial and a config panel for bookmarks.\n\n|cFFFFFF00-|r Added option for choose the format type of data broker's text.\n\n|cFFFFFF00-|r Changed few icons on damage done tooltip.\n\n|cFFFFFF00-|r Fixed the class color on texts for healing attribute.\n\n|cFFFFFF00-|r Added options for change the tooltip border's size, color and texture.\n\n|cFFFFFF00-|r Added buttons for test interrupt and cooldown announcers under raid tools section.\n\n|cFFFFFF00v1.25.1 (|cFFFFCC00Set 09, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added buttons to edit the total and percentage code for custom displays.\n\n|cFFFFFF00-|r Fixed a problem while report custom displays.\n\n|cFFFFFF00-|r Added Acitivity Time for Damage + Healing, tooltip show the activity separately.\n\n|cFFFFFF00-|r Major changes on Encounter Details Plugin making more easy to use.\n\n|cFFFFFF00-|r Removed Spell Details Plugin.\n\n|cFFFFFF00-|r Added new plugin for Solo Mode: Dps Tuning.\n\n|cFFFFFF00v1.24.5 (|cFFFFCC00Ago 31, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added Raid Tools bracket on Options Panel.\n\n|cFFFFFF00-|r Added interrupt, cooldown and death announcers (raid tools).\n\n|cFFFFFF00-|r Added pre potion recognition, showing after the encounter on the chat only for you (raid tools).\n\n|cFFFFFF00-|r Added a Boss Emotes tab for Encounter Details plugin |cFF999999(thanks Bloodforce-Azralon)|r.\n\n|cFFFFFF00-|r Rework on Activity Time, now it is tuned to closely match warcraftlogs |cFF999999(thanks www.warcraftlogs.com)|r.\n\n|cFFFFFF00-|r Added two new customs: Damage Activity Time and Healing Activity Time.\n\n|cFFFFFF00-|r Time Attack Plugin now have six fixed time amount options for test your dps on training dummies.\n\n|cFFFFFF00-|r Time Attack Plugin can now also share results on your realm, between players with the same class.\n\n|cFFFFFF00v1.23.6 (|cFFFFCC00Ago 24, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added 2 new bar textures and 6 new fonts.\n\n|cFFFFFF00-|r Swapped left and middle button for enemy bars, now left button open damage taken and middle button player detail window.\n\n|cFFFFFF00-|r Added new skin: Minimalistic v2.\n\n|cFFFFFF00-|r Minimalistic v2 is now the default skin.\n\n|cFFFFFF00-|r Few changes on both icon packs with transparency.\n\n|cFFFFFF00-|r Replaced the slash command '/d' with '/de' |cFF999999(thanks @kamuul-mmochampion forum)|r.\n\n|cFFFFFF00-|r Added custom spells for Atonement, Power Word: Solance and Life Bloom |cFF999999(thanks @skmzarn-mmochampion forum)|r.\n\n|cFFFFFF00v1.22.4 (|cFFFFCC00Ago 15, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added new skin: ElvUI Frame Style (Black White).\n\n|cFFFFFF00-|r Align With Right Chat Window option now check if the window have statusbar enabled.\n\n|cFFFFFF00-|r Few improvements on report for Deaths and Spells over Player Detail Window.\n\n|cFFFFFF00-|r Added option to disable reset button (reset only using its tooltip menu).\n\n|cFFFFFF00-|r Added option for disable window groups.\n\n|cFFFFFF00-|r Added option for select the icon pack to use, also added black white icon pack.\n\n|cFFFFFF00-|r Fixed many bugs involving skins and profiles, thing should run more smooth now.\n\n|cFFFFFF00-|r Plugin Time Attack now correctly saves the attempt when pressing the big save button.\n\n|cFFFFFF00-|r Added support for hotcorners.\n\n|cFFFFFF00v1.21.4 (|cFFFFCC00Ago 9, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added Shaman's Ancestral Guidance on cooldowns list |cFF999999(thanks @skmzarn-mmochampion forum)|r.\n\n|cFFFFFF00-|r Added a profile selection screen when Details! are running for the first time on a character.\n\n|cFFFFFF00-|r Added Menu Text Size option over miscellaneous section on options panel |cFF999999(thanks @ Revi-mmochampion forum)|r.\n\n|cFFFFFF00-|r Fixed a bug over Healing Player Details Window where pets wasn't being shown |cFF999999(thanks @Mystery2012-mmochampion forum)|r.\n\n|cFFFFFF00-|r Fixed issue with summoning pets with unknown owners where it was breaking the summon of all the others pets. |cFF999999(thanks @ThunderLost-curse website)|r.\n\n|cFFFFFF00-|r Hot Corners isn't no more a part of Details!, instead of that, Hot Corner is now a standalone addon which needs to be installed separately for who wants to use it.\n\n|cFFFFFF00-|r Skin data is now stored inside the profiles, many code parts got rewrite, still may have few bugs but it's more reliable then before.\n\n|cFFFFFF00-|r Rework on Auras and Voidzones: now shows damage, dps and percentage. Also its tooltip got fixes and now shows the correct damage done to players.\n\n|cFFFFFF00-|r Tooltip for Enemies now shows damage taken from players |cFF999999(thanks @Arieth-mmochampion forum)|r.\n\n|cFFFFFF00-|r Right clicking a real-time enemy bar, makes it back to Enemies display instead of show Bookmark panel |cFF999999(thanks @Arieth-mmochampion forum)|r.\n\n|cFFFFFF00-|r Tank comparison from previous segment now uses the same percentage method from player comparison panel.\n\n|cFFFFFF00-|r Fix bug with the slash command 'show' where was ignoring the window limit set on options panel |cFF999999(thanks @Castiel-US-Azralon realm)|r.\n\n|cFFFFFF00-|r Fixed few bugs with scroll bars, including scrolls on dropdown menu and player detail window |cFF999999(thanks @Revi-mmochampion forum)|r.\n\n|cFFFFFF00v1.20.2 (|cFFFFCC00Aug 1, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added a option under Miscellaneous section to provide spell link instead of spell name for helpful spells when reporting a death |cFF999999(thanks @skmzarn-mmochampion forum)|r.\n\n|cFFFFFF00-|r Improvements done on how deaths are handled, now latest events before death will be more precise.\n\n|cFFFFFF00-|r Implemented Damage Taken from environment like lava, gravity, etc.\n\n|cFFFFFF00-|r Added Warlock's Fire and Brimstone spell on customized spells.\n\n|cFFFFFF00-|r Added dwarf racial Stone Form on cooldown list |cFF999999(thanks @Mystery2012-mmochampion forum)|r.\n\n|cFFFFFF00-|r Bookmark now are shared between all characters.\n\n|cFFFFFF00-|r Fixed few inconsistencies with trash recognition.\n\n|cFFFFFF00-|r Fixed Cloud Capture where sometimes it wasn't sharing.\n\n|cFFFFFF00-|r Fixed report where it wasn't sharing for guild and raid when the player name box were empty.\n\n|cFFFFFF00-|r Report box now also saves the position and the last channel used to report |cFF999999(thanks @skmzarn-mmochampion forum)|r.\n\n|cFFFFFF00-|r You Are Not Prepared plugin now have tooltips for spells and its window auto opens after a boss encounter.\n\n|cFFFFFF00-|r Advanced Death Logs plugin got full rewrite (and still are in development).\n\n|cFFFFFF00v1.19.0 - v1.19.1 - v1.19.2 (|cFFFFCC00Jul 21, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Details! is now able to be translated by its community for all supported languages through Curse Forge Web Site:\n\n|cFFFFFF00http://wow.curseforge.com/addons/details/localization/|r\n\n|cFFFFFF00-|r Slash commands now are multi language, accepting both english and the localized language.\n\n|cFFFFFF00-|r Added Data Broker for: Combat Time, Player Dps and Player Hps.\n\n|cFFFFFF00-|r Rework on plugins: Timeline, You Are Not Prepared, Tiny Threat, Encounter Details. All those plugins got a options panel and few improvaments.\n\n|cFFFFFF00-|r Trash segments won't be saved anymore.\n\n|cFFFFFF00-|r Added support for plugins options.\n\n|cFFFFFF00-|r Revamp on Deaths report lines, adding links for harmful spells and changing the text order |cFF999999(thanks @skmzarn-mmochampion forum)|r.\n\n|cFFFFFF00-|r Modified the percentage used on Comparison panel |cFF999999(thanks @Mystery2012-mmochampion forum)|r.\n\n|cFFFFFF00-|r Fixed the Raid Dps and Hps data exported by Data Broker |cFF999999(thanks @Arieth-mmochampion forum)|r." + + Loc ["STRING_VERSION_LOG"] = "|cFFFFFF00a1.28.0 (|cFFFFCC00Set 29, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added a Change Log button on Options Panel.\n\n|cFFFFFF00-|r Added option to use the same profile on all characters without asking.\n\n|cFFFFFF00-|r Added a shortcut color button on main panel on Options Panel.\n\n|cFFFFFF00-|r Added auto erase/ask to erase options.\n\n|cFFFFFF00-|r Bars now highlight when hover over.\n\n|cFFFFFF00-|r Fixed problem with drag the window when the toolbar is on the bottom side.\n\n|cFFFFFF00v1.27.0 (|cFFFFCC00Set 27, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Minimalistic skin is now the old minimalistic v2.\n\n|cFFFFFF00-|r Minimalistic v2 got a new texture, little more darker.\n\n|cFFFFFF00-|r Few tweaks to make more easy making groups of windows.\n\n|cFFFFFF00-|r Bookmark now accepts more than two columns.\n\n|cFFFFFF00v1.26.3 (|cFFFFCC00Set 18, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Changed the way to set the broker text to be more customizable.\n\n|cFFFFFF00-|r Fixed the problem with custom display report.\n\n|cFFFFFF00-|r Added tutorial and a config panel for bookmarks.\n\n|cFFFFFF00-|r Added option for choose the format type of data broker's text.\n\n|cFFFFFF00-|r Changed few icons on damage done tooltip.\n\n|cFFFFFF00-|r Fixed the class color on texts for healing attribute.\n\n|cFFFFFF00-|r Added options for change the tooltip border's size, color and texture.\n\n|cFFFFFF00-|r Added buttons for test interrupt and cooldown announcers under raid tools section.\n\n|cFFFFFF00v1.25.1 (|cFFFFCC00Set 09, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added buttons to edit the total and percentage code for custom displays.\n\n|cFFFFFF00-|r Fixed a problem while report custom displays.\n\n|cFFFFFF00-|r Added Acitivity Time for Damage + Healing, tooltip show the activity separately.\n\n|cFFFFFF00-|r Major changes on Encounter Details Plugin making more easy to use.\n\n|cFFFFFF00-|r Removed Spell Details Plugin.\n\n|cFFFFFF00-|r Added new plugin for Solo Mode: Dps Tuning.\n\n|cFFFFFF00v1.24.5 (|cFFFFCC00Ago 31, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added Raid Tools bracket on Options Panel.\n\n|cFFFFFF00-|r Added interrupt, cooldown and death announcers (raid tools).\n\n|cFFFFFF00-|r Added pre potion recognition, showing after the encounter on the chat only for you (raid tools).\n\n|cFFFFFF00-|r Added a Boss Emotes tab for Encounter Details plugin |cFF999999(thanks Bloodforce-Azralon)|r.\n\n|cFFFFFF00-|r Rework on Activity Time, now it is tuned to closely match warcraftlogs |cFF999999(thanks www.warcraftlogs.com)|r.\n\n|cFFFFFF00-|r Added two new customs: Damage Activity Time and Healing Activity Time.\n\n|cFFFFFF00-|r Time Attack Plugin now have six fixed time amount options for test your dps on training dummies.\n\n|cFFFFFF00-|r Time Attack Plugin can now also share results on your realm, between players with the same class.\n\n|cFFFFFF00v1.23.6 (|cFFFFCC00Ago 24, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added 2 new bar textures and 6 new fonts.\n\n|cFFFFFF00-|r Swapped left and middle button for enemy bars, now left button open damage taken and middle button player detail window.\n\n|cFFFFFF00-|r Added new skin: Minimalistic v2.\n\n|cFFFFFF00-|r Minimalistic v2 is now the default skin.\n\n|cFFFFFF00-|r Few changes on both icon packs with transparency.\n\n|cFFFFFF00-|r Replaced the slash command '/d' with '/de' |cFF999999(thanks @kamuul-mmochampion forum)|r.\n\n|cFFFFFF00-|r Added custom spells for Atonement, Power Word: Solance and Life Bloom |cFF999999(thanks @skmzarn-mmochampion forum)|r.\n\n|cFFFFFF00v1.22.4 (|cFFFFCC00Ago 15, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added new skin: ElvUI Frame Style (Black White).\n\n|cFFFFFF00-|r Align With Right Chat Window option now check if the window have statusbar enabled.\n\n|cFFFFFF00-|r Few improvements on report for Deaths and Spells over Player Detail Window.\n\n|cFFFFFF00-|r Added option to disable reset button (reset only using its tooltip menu).\n\n|cFFFFFF00-|r Added option for disable window groups.\n\n|cFFFFFF00-|r Added option for select the icon pack to use, also added black white icon pack.\n\n|cFFFFFF00-|r Fixed many bugs involving skins and profiles, thing should run more smooth now.\n\n|cFFFFFF00-|r Plugin Time Attack now correctly saves the attempt when pressing the big save button.\n\n|cFFFFFF00-|r Added support for hotcorners.\n\n|cFFFFFF00v1.21.4 (|cFFFFCC00Ago 9, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added Shaman's Ancestral Guidance on cooldowns list |cFF999999(thanks @skmzarn-mmochampion forum)|r.\n\n|cFFFFFF00-|r Added a profile selection screen when Details! are running for the first time on a character.\n\n|cFFFFFF00-|r Added Menu Text Size option over miscellaneous section on options panel |cFF999999(thanks @ Revi-mmochampion forum)|r.\n\n|cFFFFFF00-|r Fixed a bug over Healing Player Details Window where pets wasn't being shown |cFF999999(thanks @Mystery2012-mmochampion forum)|r.\n\n|cFFFFFF00-|r Fixed issue with summoning pets with unknown owners where it was breaking the summon of all the others pets. |cFF999999(thanks @ThunderLost-curse website)|r.\n\n|cFFFFFF00-|r Hot Corners isn't no more a part of Details!, instead of that, Hot Corner is now a standalone addon which needs to be installed separately for who wants to use it.\n\n|cFFFFFF00-|r Skin data is now stored inside the profiles, many code parts got rewrite, still may have few bugs but it's more reliable then before.\n\n|cFFFFFF00-|r Rework on Auras and Voidzones: now shows damage, dps and percentage. Also its tooltip got fixes and now shows the correct damage done to players.\n\n|cFFFFFF00-|r Tooltip for Enemies now shows damage taken from players |cFF999999(thanks @Arieth-mmochampion forum)|r.\n\n|cFFFFFF00-|r Right clicking a real-time enemy bar, makes it back to Enemies display instead of show Bookmark panel |cFF999999(thanks @Arieth-mmochampion forum)|r.\n\n|cFFFFFF00-|r Tank comparison from previous segment now uses the same percentage method from player comparison panel.\n\n|cFFFFFF00-|r Fix bug with the slash command 'show' where was ignoring the window limit set on options panel |cFF999999(thanks @Castiel-US-Azralon realm)|r.\n\n|cFFFFFF00-|r Fixed few bugs with scroll bars, including scrolls on dropdown menu and player detail window |cFF999999(thanks @Revi-mmochampion forum)|r.\n\n|cFFFFFF00v1.20.2 (|cFFFFCC00Aug 1, 2014|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added a option under Miscellaneous section to provide spell link instead of spell name for helpful spells when reporting a death |cFF999999(thanks @skmzarn-mmochampion forum)|r.\n\n|cFFFFFF00-|r Improvements done on how deaths are handled, now latest events before death will be more precise.\n\n|cFFFFFF00-|r Implemented Damage Taken from environment like lava, gravity, etc.\n\n|cFFFFFF00-|r Added Warlock's Fire and Brimstone spell on customized spells.\n\n|cFFFFFF00-|r Added dwarf racial Stone Form on cooldown list |cFF999999(thanks @Mystery2012-mmochampion forum)|r.\n\n|cFFFFFF00-|r Bookmark now are shared between all characters.\n\n|cFFFFFF00-|r Fixed few inconsistencies with trash recognition.\n\n|cFFFFFF00-|r Fixed Cloud Capture where sometimes it wasn't sharing.\n\n|cFFFFFF00-|r Fixed report where it wasn't sharing for guild and raid when the player name box were empty.\n\n|cFFFFFF00-|r Report box now also saves the position and the last channel used to report |cFF999999(thanks @skmzarn-mmochampion forum)|r.\n\n|cFFFFFF00-|r You Are Not Prepared plugin now have tooltips for spells and its window auto opens after a boss encounter.\n\n|cFFFFFF00-|r Advanced Death Logs plugin got full rewrite (and still are in development)." Loc ["STRING_DETAILS1"] = "|cffffaeaeDetails!:|r " --> startup diff --git a/core/control.lua b/core/control.lua index 11007d15..f16abb8e 100644 --- a/core/control.lua +++ b/core/control.lua @@ -1139,6 +1139,70 @@ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --> core + function _detalhes:AutoEraseConfirm() + + local panel = _G.DetailsEraseDataConfirmation + if (not panel) then + + panel = CreateFrame ("frame", "DetailsEraseDataConfirmation", UIParent) + panel:SetSize (400, 85) + panel:SetBackdrop ({bgFile = [[Interface\AddOns\Details\images\background]], tile = true, tileSize = 16, + edgeFile = [[Interface\AddOns\Details\images\border_2]], edgeSize = 12}) + panel:SetPoint ("center", UIParent) + panel:SetBackdropColor (0, 0, 0, 0.4) + + panel:SetScript ("OnMouseDown", function (self, button) + if (button == "RightButton") then + panel:Hide() + end + end) + + --local icon = _detalhes.gump:CreateImage (panel, [[Interface\AddOns\Details\images\logotipo]], 512*0.4, 256*0.4) + --icon:SetPoint ("bottomleft", panel, "topleft", -10, -11) + + local text = _detalhes.gump:CreateLabel (panel, Loc ["STRING_OPTIONS_CONFIRM_ERASE"], nil, nil, "GameFontNormal") + text:SetPoint ("center", panel, "center") + text:SetPoint ("top", panel, "top", 0, -10) + + local no = _detalhes.gump:CreateButton (panel, function() panel:Hide() end, 90, 20, Loc ["STRING_NO"]) + no:SetPoint ("bottomleft", panel, "bottomleft", 30, 10) + no:InstallCustomTexture (nil, nil, nil, nil, true) + + local yes = _detalhes.gump:CreateButton (panel, function() panel:Hide(); _detalhes.tabela_historico:resetar() end, 90, 20, Loc ["STRING_YES"]) + yes:SetPoint ("bottomright", panel, "bottomright", -30, 10) + yes:InstallCustomTexture (nil, nil, nil, nil, true) + end + + panel:Show() + end + + function _detalhes:CheckForAutoErase (mapid) + + if (_detalhes.last_instance_id ~= mapid) then + if (_detalhes.segments_auto_erase == 2) then + --ask + _detalhes:ScheduleTimer ("AutoEraseConfirm", 1) + elseif (_detalhes.segments_auto_erase == 3) then + --erase + _detalhes.tabela_historico:resetar() + end + else + if (_tempo > _detalhes.last_instance_time + 21600) then --6 hours + if (_detalhes.segments_auto_erase == 2) then + --ask + _detalhes:ScheduleTimer ("AutoEraseConfirm", 1) + elseif (_detalhes.segments_auto_erase == 3) then + --erase + _detalhes.tabela_historico:resetar() + end + end + end + + _detalhes.last_instance_id = mapid + _detalhes.last_instance_time = _tempo + --_detalhes.last_instance_time = 0 --debug + end + function _detalhes:UpdateControl() _tempo = _detalhes._tempo end diff --git a/core/parser.lua b/core/parser.lua index 20d7e208..c86971c8 100644 --- a/core/parser.lua +++ b/core/parser.lua @@ -2665,6 +2665,10 @@ _detalhes:EnteredInArena() else + if (zoneType == "raid" or zoneType == "party") then + _detalhes:CheckForAutoErase (zoneMapID) + end + if (_detalhes:IsInInstance()) then _detalhes.last_instance = zoneMapID end @@ -2990,6 +2994,13 @@ _detalhes:FechaJanelaInfo() end + --> do not save window pos + for id, instance in _detalhes:ListInstances() do + if (instance.baseframe) then + instance.baseframe:SetUserPlaced (false) + end + end + --> leave combat start save tables if (_detalhes.in_combat and _detalhes.tabela_vigente) then _detalhes:SairDoCombate() diff --git a/core/windows.lua b/core/windows.lua index 1f2ba9f7..b0406075 100644 --- a/core/windows.lua +++ b/core/windows.lua @@ -1747,6 +1747,8 @@ return elseif (_detalhes.is_first_run) then return + elseif (_detalhes.always_use_profile and type (_detalhes.always_use_profile) == "string") then + return else --> check is this is the first run of the addon (after being installed) local amount = 0 @@ -1897,9 +1899,9 @@ --344 427 200 268 0.0009765625 --0.672851, 0.833007, 0.391601, 0.522460 - GameCooltip:SetBannerImage (1, [[Interface\AddOns\Details\images\icons]], 83*.5, 68*.5, {"bottomleft", "topleft", 1, -4}, {0.672851, 0.833007, 0.391601, 0.522460}, nil) - GameCooltip:SetBannerImage (2, "Interface\\PetBattles\\Weather-Windy", 512*.35, 128*.3, {"bottomleft", "topleft", -25, -4}, {0, 1, 1, 0}) - GameCooltip:SetBannerText (1, "Mini Map Menu", {"left", "right", 2, -5}, "white", 10) + --GameCooltip:SetBannerImage (1, [[Interface\AddOns\Details\images\icons]], 83*.5, 68*.5, {"bottomleft", "topleft", 1, -4}, {0.672851, 0.833007, 0.391601, 0.522460}, nil) + --GameCooltip:SetBannerImage (2, "Interface\\PetBattles\\Weather-Windy", 512*.35, 128*.3, {"bottomleft", "topleft", -25, -4}, {0, 1, 1, 0}) + --GameCooltip:SetBannerText (1, "Mini Map Menu", {"left", "right", 2, -5}, "white", 10) --> reset GameCooltip:AddMenu (1, _detalhes.tabela_historico.resetar, true, nil, nil, Loc ["STRING_MINIMAPMENU_RESET"], nil, true) diff --git a/framework/panel.lua b/framework/panel.lua index 1302b938..be3ab1b4 100644 --- a/framework/panel.lua +++ b/framework/panel.lua @@ -861,6 +861,7 @@ end function gump:ColorPick (frame, r, g, b, alpha, callback) + ColorPickerFrame:ClearAllPoints() ColorPickerFrame:SetPoint ("bottomleft", frame, "topright", 0, 0) ColorPickerFrame.dcallback = callback diff --git a/functions/loaddata.lua b/functions/loaddata.lua index dce9a4a3..d7553f2c 100644 --- a/functions/loaddata.lua +++ b/functions/loaddata.lua @@ -291,6 +291,12 @@ function _detalhes:LoadConfig() end --> profile + + --> check for "always use this profile" + if (_detalhes.always_use_profile and type (_detalhes.always_use_profile) == "string") then + _detalhes_database.active_profile = _detalhes.always_use_profile + end + --> character first run if (_detalhes_database.active_profile == "") then _detalhes.character_first_run = true diff --git a/functions/profiles.lua b/functions/profiles.lua index 7df8d2cd..dc1ac588 100644 --- a/functions/profiles.lua +++ b/functions/profiles.lua @@ -720,6 +720,7 @@ local default_profile = { segments_amount = 12, segments_amount_to_save = 5, segments_panic_mode = true, + segments_auto_erase = 1, --> instances instances_amount = 5, instances_segments_locked = false, @@ -820,6 +821,8 @@ local default_player_data = { --> current combat number combat_id = 0, combat_counter = 0, + last_instance_id = 0, + last_instance_time = 0, --> nicktag cache nick_tag_cache = {}, --> plugin data @@ -871,6 +874,7 @@ local default_global_data = { --> profile pool __profiles = {}, + always_use_profile = false, custom = {}, savedStyles = {}, savedCustomSpells = {}, diff --git a/gumps/janela_copy.lua b/gumps/janela_copy.lua index 72eecf13..1ec59aa7 100644 --- a/gumps/janela_copy.lua +++ b/gumps/janela_copy.lua @@ -8,7 +8,7 @@ do function _detalhes:CreateCopyPasteWindow() local panel = DetailsFrameWork:NewPanel (UIParent, _, "DetailsCopy", _, 512, 128, false) tinsert (UISpecialFrames, "DetailsCopy") - panel:SetFrameStrata ("FULLSCREEN") + panel:SetFrameStrata ("TOOLTIP") panel:SetPoint ("center", UIParent, "center") panel.locked = false diff --git a/gumps/janela_info.lua b/gumps/janela_info.lua index a71d4eff..af9a8446 100644 --- a/gumps/janela_info.lua +++ b/gumps/janela_info.lua @@ -3434,8 +3434,11 @@ end local function CriaTexturaBarra (instancia, barra) barra.textura = _CreateFrame ("StatusBar", nil, barra) barra.textura:SetAllPoints (barra) + --barra.textura:SetStatusBarTexture (instancia.row_info.texture_file) barra.textura:SetStatusBarTexture (_detalhes.default_texture) + --barra.textura:SetStatusBarTexture ([[Interface\AddOns\Details\images\bar_serenity]]) + barra.textura:SetStatusBarColor (.5, .5, .5, 0) barra.textura:SetMinMaxValues (0,100) diff --git a/gumps/janela_news.lua b/gumps/janela_news.lua index d53a6167..4dfdfda8 100644 --- a/gumps/janela_news.lua +++ b/gumps/janela_news.lua @@ -22,14 +22,29 @@ function _detalhes:CreateOrOpenNewsWindow() --> construir a janela de news frame = CreateFrame ("frame", "DetailsNewsWindow", UIParent, "ButtonFrameTemplate") frame:SetPoint ("center", UIParent, "center") - frame:SetFrameStrata ("HIGH") + frame:SetFrameStrata ("FULLSCREEN") frame:SetMovable (true) frame:SetWidth (512) frame:SetHeight (512) tinsert (UISpecialFrames, "DetailsNewsWindow") - frame:SetScript ("OnMouseDown", function() frame:StartMoving() end) - frame:SetScript ("OnMouseUp", function() frame:StopMovingOrSizing() end) + frame:SetScript ("OnMouseDown", function(self, button) + if (self.isMoving) then + return + end + if (button == "RightButton") then + self:Hide() + else + self:StartMoving() + self.isMoving = true + end + end) + frame:SetScript ("OnMouseUp", function(self, button) + if (self.isMoving and button == "LeftButton") then + self:StopMovingOrSizing() + self.isMoving = nil + end + end) --> reinstall textura local textura = _detalhes.gump:NewImage (frame, [[Interface\DialogFrame\DialogAlertIcon]], 64, 64, nil, nil, nil, "$parentExclamacao") diff --git a/gumps/janela_options.lua b/gumps/janela_options.lua index 348a9888..3944a5dd 100644 --- a/gumps/janela_options.lua +++ b/gumps/janela_options.lua @@ -324,8 +324,12 @@ function _detalhes:OpenOptionsWindow (instance, no_reopen) local fillbars = g:NewButton (window, _, "$parentCreateExampleBarsButton", nil, 110, 14, _detalhes.CreateTestBars, nil, nil, nil, Loc ["STRING_OPTIONS_TESTBARS"]) fillbars:SetPoint ("bottomleft", window.widget, "bottomleft", 200, 12) + + --> change log + + local changelog = g:NewButton (window, _, "$parentOpenChangeLogButton", nil, 110, 14, _detalhes.OpenNewsWindow, nil, nil, nil, Loc ["STRING_OPTIONS_CHANGELOG"]) + changelog:SetPoint ("left", fillbars, "right", 10, 0) - --fillbars:InstallCustomTexture() --> right click to close --local right_click_close = window:CreateRightClickLabel ("short", 14, 14, "Close") @@ -470,6 +474,11 @@ local menus = { --labels nos menus local all_buttons = {} local true_index = 1 local selected_textcolor = "wheat" + + local selected_texture = g:NewImage (window, [[Interface\ARCHEOLOGY\ArchaeologyParts]], 130, 14) + selected_texture:SetTexCoord (0.146484375, 0.591796875, 0.0546875, 0.26171875) + selected_texture:SetVertexColor (1, 1, 1, 0.8) + selected_texture:SetBlendMode ("ADD") local button_onenter = function (self) self.MyObject.my_bg_texture:SetVertexColor (1, 1, 1, 1) @@ -488,6 +497,7 @@ local menus = { --labels nos menus if (last_pressed ~= button) then button.func (button.param1, button.param2, button) last_pressed.widget.text:SetPoint ("left", last_pressed.widget, "left", 2, 0) + selected_texture:SetPoint ("left", button, "left", 0, -1) last_pressed.textcolor = textcolor last_pressed = button end @@ -523,6 +533,10 @@ local menus = { --labels nos menus button:SetHook ("OnLeave", button_onleave) button:SetHook ("OnMouseUp", button_mouse_up) + if (true_index == 1) then + selected_texture:SetPoint ("left", button, "left", 0, -1) + end + true_index = true_index + 1 end @@ -3384,6 +3398,56 @@ function window:CreateFrame1() frame1.CreateWindowButton:SetIcon ([[Interface\Buttons\UI-AttributeButton-Encourage-Up]]) frame1.CreateWindowButton:SetTextColor (button_color_rgb) + --set color + + local windowcolor_callback = function (button, r, g, b, a) + if (_G.DetailsOptionsWindow.instance.menu_alpha.enabled and a ~= _G.DetailsOptionsWindow.instance.color[4]) then + _detalhes:Msg (Loc ["STRING_OPTIONS_MENU_ALPHAWARNING"]) + _G.DetailsOptionsWindow6StatusbarColorPick.MyObject:SetColor (r, g, b, _G.DetailsOptionsWindow.instance.menu_alpha.onleave) + return _G.DetailsOptionsWindow.instance:InstanceColor (r, g, b, _G.DetailsOptionsWindow.instance.menu_alpha.onleave, nil, true) + end + _G.DetailsOptionsWindow6StatusbarColorPick.MyObject:SetColor (r, g, b, a) + _G.DetailsOptionsWindow.instance:InstanceColor (r, g, b, a, nil, true) + end + local change_color = function() + local r, g, b, a = unpack (_G.DetailsOptionsWindow.instance.color) + _detalhes.gump:ColorPick (_G.DetailsOptionsWindow1SetWindowColorButton, r, g, b, a, windowcolor_callback) + end + + g:NewButton (frame1, _, "$parentSetWindowColorButton", "SetWindowColorButton", buttons_width, 18, change_color, nil, nil, nil, "Change Color", 1) + frame1.SetWindowColorButton:InstallCustomTexture() + window:CreateLineBackground2 (frame1, "SetWindowColorButton", "SetWindowColorButton", "Shortcut to modify the window color.\nFor more options check out |cFFFFFF00Window Settings|r section.", nil, {1, 0.8, 0}, button_color_rgb) + + frame1.SetWindowColorButton:SetIcon ([[Interface\AddOns\Details\images\icons]], nil, nil, nil, {0.640625, 0.6875, 0.630859375, 0.677734375}) + frame1.SetWindowColorButton:SetTextColor (button_color_rgb) + + --erase data + + g:NewLabel (frame1, _, "$parentEraseDataLabel", "EraseDataLabel", Loc ["STRING_OPTIONS_ED"], "GameFontHighlightLeft") + -- + local OnSelectEraseData = function (_, _, EraseType) + _detalhes.segments_auto_erase = EraseType + end + + local EraseDataOptions = { + {value = 1, label = Loc ["STRING_OPTIONS_ED1"], onclick = OnSelectEraseData, icon = [[Interface\Addons\Details\Images\reset_button2]]}, + {value = 2, label = Loc ["STRING_OPTIONS_ED2"], onclick = OnSelectEraseData, icon = [[Interface\Addons\Details\Images\reset_button2]]}, + {value = 3, label = Loc ["STRING_OPTIONS_ED3"], onclick = OnSelectEraseData, icon = [[Interface\Addons\Details\Images\reset_button2]]}, + } + local BuildEraseDataMenu = function() + return EraseDataOptions + end + + local d = g:NewDropDown (frame1, _, "$parentEraseDataDropdown", "EraseDataDropdown", 160, 20, BuildEraseDataMenu, _detalhes.segments_auto_erase) + d.onenter_backdrop = dropdown_backdrop_onenter + d.onleave_backdrop = dropdown_backdrop_onleave + d:SetBackdrop (dropdown_backdrop) + d:SetBackdropColor (unpack (dropdown_backdrop_onleave)) + + frame1.EraseDataDropdown:SetPoint ("left", frame1.EraseDataLabel, "right", 2, 0) + + window:CreateLineBackground2 (frame1, "EraseDataDropdown", "EraseDataLabel", Loc ["STRING_OPTIONS_ED_DESC"]) + --config bookmarks g:NewButton (frame1, _, "$parentBookmarkButton", "BookmarkButton", buttons_width, 18, _detalhes.OpenBookmarkConfig, nil, nil, nil, Loc ["STRING_OPTIONS_WC_BOOKMARK"], 1) frame1.BookmarkButton:InstallCustomTexture() @@ -3398,6 +3462,7 @@ function window:CreateFrame1() g:NewLabel (frame1, _, "$parentIdentityAnchor", "GeneralIdentityLabel", Loc ["STRING_OPTIONS_AVATAR_ANCHOR"], "GameFontNormal") g:NewLabel (frame1, _, "$parentWindowControlsAnchor", "WindowControlsLabel", Loc ["STRING_OPTIONS_WC_ANCHOR"], "GameFontNormal") + g:NewLabel (frame1, _, "$parentToolsAnchor", "ToolsLabel", Loc ["STRING_OPTIONS_TOOLS_ANCHOR"], "GameFontNormal") local w_start = 10 @@ -3417,6 +3482,10 @@ function window:CreateFrame1() frame1.realmNameLabel:SetPoint (avatar_x_anchor, -235) + frame1.ToolsLabel:SetPoint (avatar_x_anchor, -265) + frame1.EraseDataLabel:SetPoint (avatar_x_anchor, -290) + frame1.BookmarkButton:SetPoint (avatar_x_anchor, -315) + local left_side = { {"GeneralAnchorLabel", 1, true}, {"animateLabel", 2}, @@ -3430,8 +3499,9 @@ function window:CreateFrame1() {"LockButton", 10}, {"BreakSnapButton", 12}, {"CloseButton", 11}, - {"CreateWindowButton", 13, true}, - {"BookmarkButton", 14}, + {"CreateWindowButton", 14, true}, + {"SetWindowColorButton", 13}, + } window:arrange_menu (frame1, left_side, window.left_start_at, window.top_start_at) @@ -3813,6 +3883,22 @@ function window:CreateFrame13() window:CreateLineBackground2 (frame13, select_profile_dropdown, select_profile_label, Loc ["STRING_OPTIONS_PROFILES_SELECT_DESC"]) + --> always use this profile + g:NewLabel (frame13, _, "$parentAlwaysUseLabel", "AlwaysUseLabel", Loc ["STRING_OPTIONS_ALWAYS_USE"], "GameFontHighlightLeft") + + g:NewSwitch (frame13, _, "$parentAlwaysUseSlider", "AlwaysUseSlider", 60, 20, _, _, _detalhes.always_use_profile) + + frame13.AlwaysUseSlider:SetPoint ("left", frame13.AlwaysUseLabel, "right", 2, -1) + frame13.AlwaysUseSlider.OnSwitch = function (self, _, value) + if (value) then + _detalhes.always_use_profile = select_profile_dropdown:GetValue() + else + _detalhes.always_use_profile = false + end + end + frame13.AlwaysUseSlider:SetPoint ("left", frame13.AlwaysUseLabel, "right", 3, 0) + window:CreateLineBackground2 (frame13, "AlwaysUseSlider", "AlwaysUseLabel", Loc ["STRING_OPTIONS_ALWAYS_USE_DESC"]) + --> new profile local profile_name = g:NewTextEntry (frame13, _, "$parentProfileNameEntry", "profileNameEntry", 120, 20) local profile_name_label = g:NewLabel (frame13, _, "$parentProfileNameLabel", "profileNameLabel", Loc ["STRING_OPTIONS_PROFILES_CREATE"], "GameFontHighlightLeft") @@ -3968,12 +4054,13 @@ function window:CreateFrame13() local left_side = { {"ProfileAnchorLabel", 1, true}, {current_profile_label, 2}, - {"PosAndSizeLabel", 3}, - {select_profile_label, 4, true}, - {profile_name_label, 5, true}, - {select_profileCopy_label, 6}, - {select_profileErase_label, 7}, - {profile_reset_button, 8, true}, + {select_profile_label, 3, true}, + {"AlwaysUseLabel", 4}, + {"PosAndSizeLabel", 5}, + {profile_name_label, 6, true}, + {select_profileCopy_label, 7}, + {select_profileErase_label, 8}, + {profile_reset_button, 9, true}, } @@ -5523,11 +5610,11 @@ function window:CreateFrame7() function frame7:update_menuanchor_xy (instance) if (instance.toolbar_side == 1) then --top - frame7.menuAnchorXSlider:SetValue (editing_instance.menu_anchor [1]) - frame7.menuAnchorYSlider:SetValue (editing_instance.menu_anchor [2]) + frame7.menuAnchorXSlider:SetValue (instance.menu_anchor [1]) + frame7.menuAnchorYSlider:SetValue (instance.menu_anchor [2]) elseif (instance.toolbar_side == 2) then --bottom - frame7.menuAnchorXSlider:SetValue (editing_instance.menu_anchor_down [1]) - frame7.menuAnchorYSlider:SetValue (editing_instance.menu_anchor_down [2]) + frame7.menuAnchorXSlider:SetValue (instance.menu_anchor_down [1]) + frame7.menuAnchorYSlider:SetValue (instance.menu_anchor_down [2]) end end @@ -5778,11 +5865,11 @@ function window:CreateFrame8() function frame8:update_menuanchor_xy (instance) if (instance.toolbar_side == 1) then --top - frame8.menuAnchorXSlider:SetValue (editing_instance.menu2_anchor [1]) - frame8.menuAnchorYSlider:SetValue (editing_instance.menu2_anchor [2]) + frame8.menuAnchorXSlider:SetValue (instance.menu2_anchor [1]) + frame8.menuAnchorYSlider:SetValue (instance.menu2_anchor [2]) elseif (instance.toolbar_side == 2) then --bottom - frame8.menuAnchorXSlider:SetValue (editing_instance.menu2_anchor_down [1]) - frame8.menuAnchorYSlider:SetValue (editing_instance.menu2_anchor_down [2]) + frame8.menuAnchorXSlider:SetValue (instance.menu2_anchor_down [1]) + frame8.menuAnchorYSlider:SetValue (instance.menu2_anchor_down [2]) end end @@ -7849,6 +7936,8 @@ function window:update_all (editing_instance) _G.DetailsOptionsWindow1WindowControlsAnchor:SetText (string.format (Loc ["STRING_OPTIONS_WC_ANCHOR"], editing_instance.meu_id)) + _G.DetailsOptionsWindow1EraseDataDropdown.MyObject:Select (_detalhes.segments_auto_erase) + if (not editing_instance.baseframe) then _detalhes:ScheduleTimer ("DelayUpdateWindowControls", 1, editing_instance) else diff --git a/gumps/janela_principal.lua b/gumps/janela_principal.lua index fc3d85bf..9cf78d92 100644 --- a/gumps/janela_principal.lua +++ b/gumps/janela_principal.lua @@ -638,6 +638,11 @@ local function move_janela (baseframe, iniciando, instancia) if (iniciando) then + if (baseframe.isMoving) then + --> ja esta em movimento + return + end + baseframe.isMoving = true instancia:BaseFrameSnap() baseframe:StartMoving() @@ -731,6 +736,7 @@ local function move_janela (baseframe, iniciando, instancia) --baseframe:SetClampRectInsets (unpack (_detalhes.window_clamp)) if (instancia_alvo) then + instancia:AtualizaPontos() local esquerda, baixo, direita, cima @@ -807,8 +813,17 @@ local function move_janela (baseframe, iniciando, instancia) esta_instancia:RestoreMainWindowPosition() end end + end + --> salva pos de todas as janelas + for _, ins in _ipairs (_detalhes.tabela_instancias) do + if (ins:IsEnabled()) then + ins:SaveMainWindowPosition() + ins:RestoreMainWindowPosition() + end + end + _detalhes.snap_alert.playing = false _detalhes.snap_alert.animIn:Stop() _detalhes.snap_alert.animOut:Play() @@ -1593,7 +1608,12 @@ local barra_scripts_onenter = function (self) self:SetBackdrop (barra_backdrop_onenter) self:SetBackdropColor (0.588, 0.588, 0.588, 0.7) - + + self.textura:SetBlendMode ("ADD") + --local r, g, b = self.textura:GetVertexColor() + --self.textura:SetVertexColor (math.min (r+0.1, 1), math.min (g+0.1, 1), math.min (b+0.1, 1)) + --self.icone_classe:SetBlendMode ("ADD") + self:SetScript ("OnUpdate", shift_monitor) end @@ -1608,6 +1628,11 @@ local barra_scripts_onleave = function (self) self:SetBackdropBorderColor (0, 0, 0, 0) self:SetBackdropColor (0, 0, 0, 0) + self.textura:SetBlendMode ("BLEND") + --self.icone_classe:SetBlendMode ("BLEND") + --local r, g, b = self.textura:GetVertexColor() + --self.textura:SetVertexColor (math.min (r+0.1, 1), math.min (g+0.1, 1), math.min (b+0.1, 1)) + self.showing_allspells = false self:SetScript ("OnUpdate", nil) end @@ -5428,6 +5453,17 @@ function _detalhes:ToolbarSide (side) self.baseframe.cabecalho.emenda:SetTexCoord (unpack (COORDS_LEFT_CONNECTOR)) self.baseframe.cabecalho.top_bg:SetTexCoord (unpack (COORDS_TOP_BACKGROUND)) + --> up frames + self.baseframe.UPFrame:SetPoint ("left", self.baseframe.cabecalho.ball, "right", 0, -53) + self.baseframe.UPFrame:SetPoint ("right", self.baseframe.cabecalho.ball_r, "left", 0, -53) + + self.baseframe.UPFrameConnect:ClearAllPoints() + self.baseframe.UPFrameConnect:SetPoint ("bottomleft", self.baseframe, "topleft", 0, -1) + self.baseframe.UPFrameConnect:SetPoint ("bottomright", self.baseframe, "topright", 0, -1) + + self.baseframe.UPFrameLeftPart:ClearAllPoints() + self.baseframe.UPFrameLeftPart:SetPoint ("bottomleft", self.baseframe, "topleft", 0, 0) + else --> bottom local y = 0 @@ -5459,6 +5495,17 @@ function _detalhes:ToolbarSide (side) local l, r, t, b = unpack (COORDS_TOP_BACKGROUND) self.baseframe.cabecalho.top_bg:SetTexCoord (l, r, b, t) + --> up frames + self.baseframe.UPFrame:SetPoint ("left", self.baseframe.cabecalho.ball, "right", 0, 53) + self.baseframe.UPFrame:SetPoint ("right", self.baseframe.cabecalho.ball_r, "left", 0, 53) + + self.baseframe.UPFrameConnect:ClearAllPoints() + self.baseframe.UPFrameConnect:SetPoint ("topleft", self.baseframe, "bottomleft", 0, 1) + self.baseframe.UPFrameConnect:SetPoint ("topright", self.baseframe, "bottomright", 0, 1) + + self.baseframe.UPFrameLeftPart:ClearAllPoints() + self.baseframe.UPFrameLeftPart:SetPoint ("topleft", self.baseframe, "bottomleft", 0, 0) + end --> update top menus diff --git a/gumps/janela_welcome.lua b/gumps/janela_welcome.lua index c0ccd103..206c1ead 100644 --- a/gumps/janela_welcome.lua +++ b/gumps/janela_welcome.lua @@ -17,7 +17,7 @@ function _detalhes:OpenWelcomeWindow () local instance = _detalhes.tabela_instancias [1] window = CreateFrame ("frame", "DetailsWelcomeWindow", UIParent) - window:SetPoint ("center", UIParent, "center", 0, 0) + window:SetPoint ("center", UIParent, "center", -200, 0) window:SetWidth (512) window:SetHeight (256) window:SetMovable (true) @@ -125,7 +125,7 @@ function _detalhes:OpenWelcomeWindow () instance.baseframe:ClearAllPoints() instance.baseframe:SetPoint ("left", DetailsWelcomeWindow, "right", 10, 0) end - _detalhes:ScheduleTimer ("WelcomeSetLoc", 5) + _detalhes:ScheduleTimer ("WelcomeSetLoc", 12) --/script local f=CreateFrame("frame");local g=false;f:SetScript("OnUpdate",function(s,e)if not g then local r=math.random for i=1,2500000 do local a=r(1,1000000);a=a+1 end g=true else print(string.format("cpu: %.3f",e));f:SetScript("OnUpdate",nil)end end)