UL_LootLog = {} local ULLL = UL_LootLog UL_LootLog.name = "UL_LootLog" UL_LootLog.UL_LootLog_SCENE_NAME = "UL_LootLog_Scene" ULLL.LMM2 = LibMainMenu2 UL_LootLog.WorkStateEnumerator = { UNKNOWN=0, RUNNING=1, STOPPED=2, } UL_LootLog.WorkState = UL_LootLog.WorkStateEnumerator["RUNNING"] ULLL.LootedItemsTable = {} ULLL.LootedItemsUniquePlayers = {} ULLL.SummarisedLootedItems = "" function UL_LootLog:Initialize() UL_LootLog:InitWindow() ULLL.LootedItemsList = LootedItemsList:New() local function showULLL() ULLL.Show("") end -- Register slash commands SLASH_COMMANDS["/ulll"] = showULLL end function UL_LootLog.OnAddOnLoaded(event, addonName) if addonName == UL_LootLog.name then EVENT_MANAGER:RegisterForEvent(UL_LootLog.name, EVENT_LOOT_RECEIVED, UL_LootLog.OnLootReceived) UL_LootLog:Initialize() end end function UL_LootLog.InitWindow() if ULLL.LMM2 == nil then return end ULLL.LMM2:Init() local descriptor = UL_LootLog.name ZO_CreateStringId("UL_LootLog_TITLE", "UL LootLog") ZO_CreateStringId("SI_BINDING_NAME_UL_LootLog_SHOW_OR_HIDE", "Show or Hide UL LootLog") ZO_CreateStringId("SI_BINDING_NAME_UL_LootLog_START", "Start UL LootLog") ZO_CreateStringId("SI_BINDING_NAME_UL_LootLog_STOP", "Stop UL LootLog") ZO_CreateStringId("SI_BINDING_NAME_UL_LootLog_CLEAN_START", "Clean Start UL LootLog") ZO_CreateStringId("SI_BINDING_NAME_UL_LootLog_CLEAN_STOP", "Clean Stop UL LootLog") ULLL.scene = ZO_Scene:New(UL_LootLog.UL_LootLog_SCENE_NAME, SCENE_MANAGER) ULLL.scene:AddFragment(ZO_SetTitleFragment:New(UL_LootLog_TITLE)) ULLL.scene:AddFragment(ZO_FadeSceneFragment:New(UL_LootLog_UI)) ULLL.scene:AddFragment(TITLE_FRAGMENT) ULLL.scene:AddFragment(RIGHT_BG_FRAGMENT) ULLL.scene:AddFragment(FRAME_EMOTE_FRAGMENT_JOURNAL) ULLL.scene:AddFragment(CODEX_WINDOW_SOUNDS) ULLL.scene:AddFragmentGroup(FRAGMENT_GROUP.MOUSE_DRIVEN_UI_WINDOW) ULLL.scene:AddFragmentGroup(FRAGMENT_GROUP.FRAME_TARGET_STANDARD_RIGHT_PANEL) local sceneName = UL_LootLog.UL_LootLog_SCENE_NAME local categoryLayoutInfo = { binding = "UL_LootLog_SHOW", categoryName = SI_BINDING_NAME_UL_LootLog_SHOW, callback = function() UL_LootLog.Show(sceneName) end, visible = function(buttonData) return true end, normal = "esoui/art/inventory/inventory_tabicon_consumables_up.dds", pressed = "esoui/art/inventory/inventory_tabicon_consumables_down.dds", highlight = "esoui/art/inventory/inventory_tabicon_consumables_over.dds", disabled = "esoui/art/inventory/inventory_tabicon_consumables_disabled.dds", } -- ULLL.LMM2:AddMenuItem(descriptor, sceneName, categoryLayoutInfo, nil) end function UL_LootLog.IsShowing(sceneName) if sceneName == "" or sceneName == nil then sceneName = ULLL.UL_LootLog_SCENE_NAME end return SCENE_MANAGER:IsShowing(sceneName) end function UL_LootLog.Show(sceneName) if sceneName == "" or sceneName == nil then sceneName = ULLL.UL_LootLog_SCENE_NAME end --d(sceneName) --d(not UL_LootLog.IsShowing(sceneName)) if not UL_LootLog.IsShowing(sceneName) then --d("try to show") SCENE_MANAGER:Show(sceneName) --else -- SCENE_MANAGER:ShowBaseScene() end end function UL_LootLog.Hide(sceneName) if sceneName == "" or sceneName == nil then sceneName = ULLL.UL_LootLog_SCENE_NAME end --d(sceneName) if UL_LootLog.IsShowing then SCENE_MANAGER:Hide(sceneName) --else -- SCENE_MANAGER:ShowBaseScene() end end function UL_LootLog.OnLootReceived( eventCode, receivedBy, itemName, quantity, itemSound, lootType, self, isPickpocketLoot, questItemIcon, itemId ) if UL_LootLog.WorkState == UL_LootLog.WorkStateEnumerator["RUNNING"] then table.insert(ULLL.LootedItemsTable, { eventCode = eventCode ,receivedBy = receivedBy ,itemName = itemName ,quantity = quantity ,itemSound = itemSound ,lootType = lootType ,self = self ,isPickpocketLoot = isPickpocketLoot ,questItemIcon = questItemIcon ,itemId = itemId ,lootDateTime = UL_LootLog:GetCurrentDateTimeString() .. " " .. GetTimeString() }) UL_LootLog.InsertPlayer(receivedBy) ULLL.LootedItemsList:Refresh() end end function UL_LootLog.SummariseLootForPlayers() ULLL.SummarisedLootedItems = "" for k, v in ipairs(ULLL.LootedItemsUniquePlayers) do local player = v[1] local itemQuality_TRASH_Count = 0 -- 0 -- Коля убрать это, gray local itemQuality_NORMAL_Count = 0 -- 1 local itemQuality_MAGIC_Count = 0 -- 2 local itemQuality_ARCANE_Count = 0 -- 3 local itemQuality_ARTIFACT_Count = 0 -- 4 local itemQuality_LEGENDARY_Count = 0 --5 for j = 1, #ULLL.LootedItemsTable do if ULLL.LootedItemsTable[j].receivedBy == player then local currentLootedItemQuality = GetItemLinkQuality(ULLL.LootedItemsTable[j].itemName) if currentLootedItemQuality == 0 then itemQuality_TRASH_Count = itemQuality_TRASH_Count + (1*ULLL.LootedItemsTable[j].quantity) elseif currentLootedItemQuality == 1 then itemQuality_NORMAL_Count = itemQuality_NORMAL_Count + (1*ULLL.LootedItemsTable[j].quantity) elseif currentLootedItemQuality == 2 then itemQuality_MAGIC_Count = itemQuality_MAGIC_Count + (1*ULLL.LootedItemsTable[j].quantity) elseif currentLootedItemQuality == 3 then itemQuality_ARCANE_Count = itemQuality_ARCANE_Count + (1*ULLL.LootedItemsTable[j].quantity) elseif currentLootedItemQuality == 4 then itemQuality_ARTIFACT_Count = itemQuality_ARTIFACT_Count + (1*ULLL.LootedItemsTable[j].quantity) elseif currentLootedItemQuality == 5 then itemQuality_LEGENDARY_Count = itemQuality_LEGENDARY_Count + (1*ULLL.LootedItemsTable[j].quantity) end end end -- Коля равнение делать здесь ULLL.SummarisedLootedItems = ULLL.SummarisedLootedItems .. player ULLL.SummarisedLootedItems = ULLL.SummarisedLootedItems .. " :" --ULLL.SummarisedLootedItems = ULLL.SummarisedLootedItems .. " TRASH - " ULLL.SummarisedLootedItems = ULLL.SummarisedLootedItems .. " |c808080Gray|r - " ULLL.SummarisedLootedItems = ULLL.SummarisedLootedItems .. itemQuality_TRASH_Count --ULLL.SummarisedLootedItems = ULLL.SummarisedLootedItems .. " NORMAL - " ULLL.SummarisedLootedItems = ULLL.SummarisedLootedItems .. " |cFFFFFFWhite|r - " ULLL.SummarisedLootedItems = ULLL.SummarisedLootedItems .. itemQuality_NORMAL_Count --ULLL.SummarisedLootedItems = ULLL.SummarisedLootedItems .. " MAGIC - " ULLL.SummarisedLootedItems = ULLL.SummarisedLootedItems .. " |c008000Green|r - " ULLL.SummarisedLootedItems = ULLL.SummarisedLootedItems .. itemQuality_MAGIC_Count --ULLL.SummarisedLootedItems = ULLL.SummarisedLootedItems .. " ARCANE - " ULLL.SummarisedLootedItems = ULLL.SummarisedLootedItems .. " |c0000FFBlue|r - " ULLL.SummarisedLootedItems = ULLL.SummarisedLootedItems .. itemQuality_ARCANE_Count --ULLL.SummarisedLootedItems = ULLL.SummarisedLootedItems .. " ARTIFACT - " ULLL.SummarisedLootedItems = ULLL.SummarisedLootedItems .. " |c800080Purple|r - " ULLL.SummarisedLootedItems = ULLL.SummarisedLootedItems .. itemQuality_ARTIFACT_Count --ULLL.SummarisedLootedItems = ULLL.SummarisedLootedItems .. " LEGENDARY - " ULLL.SummarisedLootedItems = ULLL.SummarisedLootedItems .. " |cFFA500Orange|r - " -- Коля заменить orange на gold ULLL.SummarisedLootedItems = ULLL.SummarisedLootedItems .. itemQuality_LEGENDARY_Count ULLL.SummarisedLootedItems = ULLL.SummarisedLootedItems .. "\n" end UL_LootLog_UIResult:SetText(ULLL.SummarisedLootedItems) end function UL_LootLog.InsertPlayer(player) local isPlayerInLootedItemsUniquePlayers = false for i = 1, #ULLL.LootedItemsUniquePlayers do if ULLL.LootedItemsUniquePlayers[i][1] == player then isPlayerInLootedItemsUniquePlayers = true end end if isPlayerInLootedItemsUniquePlayers == false then --d(player) table.insert(ULLL.LootedItemsUniquePlayers, { player }) end end function UL_LootLog.ClearLootedItems() --d("ClearLootedItems") ULLL.LootedItemsTable = {} ULLL.LootedItemsUniquePlayers = {} ULLL.SummarisedLootedItems = "" UL_LootLog_UIResult:SetText(ULLL.SummarisedLootedItems) ULLL.LootedItemsList:Refresh() end function UL_LootLog.Start(isClean) if isClean == true then UL_LootLog.ClearLootedItems() end UL_LootLog.WorkState = UL_LootLog.WorkStateEnumerator["RUNNING"] --d(UL_LootLog.WorkState) end function UL_LootLog.Stop(isClean) if isClean == true then UL_LootLog.ClearLootedItems() end UL_LootLog.WorkState = UL_LootLog.WorkStateEnumerator["STOPPED"] --d(UL_LootLog.WorkState) end -- LootedItemsList LootedItemsList = ZO_SortFilterList:Subclass() LootedItemsList.defaults = {} ULLL.DEFAULT_TEXT = ZO_ColorDef:New(0.4627, 0.737, 0.7647, 1) -- scroll list row text color ULLL.LootedItemsList = nil LootedItemsList.SORT_KEYS = { ["lootDateTime"] = {}, ["itemName"] = {tiebreaker="lootDateTime"}, ["receivedBy"] = {tiebreaker="lootDateTime"} } function LootedItemsList:New() local lootedItems = ZO_SortFilterList.New(self, UL_LootLog_UI) return lootedItems end function LootedItemsList:Initialize(control) ZO_SortFilterList.Initialize(self, control) self.sortHeaderGroup:SelectHeaderByKey("lootDateTime") ZO_SortHeader_OnMouseExit(UL_LootLog_UIHeadersLootDateTime) self.masterList = {} ZO_ScrollList_AddDataType(self.list, 1, "BaseLootRowTemplate", 30, function(control, data) self:SetupUnitRow(control, data) end) ZO_ScrollList_EnableHighlight(self.list, "ZO_ThinListHighlight") self.sortFunction = function(listEntry1, listEntry2) return ZO_TableOrderingFunction(listEntry1.data, listEntry2.data, self.currentSortKey, LootedItemsList.SORT_KEYS, self.currentSortOrder) end self:RefreshData() end function LootedItemsList:BuildMasterList() self.masterList = {} local lootedItems = ULLL.LootedItemsTable if lootedItems then for k, v in ipairs(lootedItems) do local data = v table.insert(self.masterList ,data ) end end end function LootedItemsList:FilterScrollList() local scrollData = ZO_ScrollList_GetDataList(self.list) ZO_ClearNumericallyIndexedTable(scrollData) for i = 1, #self.masterList do local data = self.masterList[i] table.insert(scrollData, ZO_ScrollList_CreateDataEntry(1, data)) end end function LootedItemsList:SortScrollList() local scrollData = ZO_ScrollList_GetDataList(self.list) table.sort(scrollData, self.sortFunction) end function LootedItemsList:SetupUnitRow(control, data) --CHAT_SYSTEM:AddMessage("Setup unit row") control.data = data control.lootDateTime = GetControl(control, "LootDateTime") control.itemName = GetControl(control, "ItemName") control.quantity = GetControl(control, "Quantity") control.receivedBy = GetControl(control, "ReceivedBy") control.lootDateTime:SetText(data.lootDateTime) control.itemName:SetText(data.itemName) control.quantity:SetText(data.quantity) control.receivedBy:SetText(data.receivedBy) --control.lootDateTime.normalColor = ULLL.DEFAULT_TEXT --control.itemName.normalColor = ULLL.DEFAULT_TEXT --control.receivedBy.normalColor = ULLL.DEFAULT_TEXT ZO_SortFilterList.SetupRow(self, control, data) end function LootedItemsList:Refresh() self:RefreshData() UL_LootLog.SummariseLootForPlayers() end -- -- Help functions function UL_LootLog.GetCurrentDateTimeString() local currentDateTimeString = GetDateStringFromTimestamp(GetTimeStamp()) .. "" local t={} for str in string.gmatch(currentDateTimeString, "([^".. "/" .."]+)") do table.insert(t, str) end return t[2] .. "-" .. t[1] .. "-" .. t[3] end -- EVENT_MANAGER:RegisterForEvent(UL_LootLog.name, EVENT_ADD_ON_LOADED, UL_LootLog.OnAddOnLoaded)