Repository navigation
Expand file tree
/
Copy pathItemStorageInfo.lua
More file actions
156 lines (129 loc) · 5.18 KB
/
Copy pathItemStorageInfo.lua
File metadata and controls
156 lines (129 loc) · 5.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
local addonName, ItemStorageInfo = ...
-- Аддон ItemStorageInfo
local ItemStorageInfo = CreateFrame("Frame")
-- Переменная для хранения данных из database.lua
local itemStorageDB = {}
local function BuildCharacterItems(character)
local items_by_link = {}
local function add_items(list)
if not list then
return
end
for _, item in ipairs(list) do
if item and item.link then
local existing = items_by_link[item.link]
if existing then
existing.count = existing.count + (item.count or 0)
else
items_by_link[item.link] = {
link = item.link,
name = item.name or "",
count = item.count or 0,
}
end
end
end
end
add_items(character.items)
if character.bags and character.bags.items then
add_items(character.bags.items)
end
if character.bank and character.bank.items then
add_items(character.bank.items)
end
local result = {}
for _, item in pairs(items_by_link) do
table.insert(result, item)
end
table.sort(result, function(a, b)
return a.name < b.name
end)
return result
end
local function GetCharacterItems(character)
if character.items then
return character.items
end
local items = BuildCharacterItems(character)
character.items = items
return items
end
-- Функция для загрузки данных из database.lua
local lastUpdateTime = 0
local function LoadDatabase()
if ItemStorageDB_LastUpdate and ItemStorageDB_LastUpdate > lastUpdateTime then
lastUpdateTime = ItemStorageDB_LastUpdate
if ItemStorageDB then
itemStorageDB = ItemStorageDB
else
print("ItemStorageInfo: Database not found or is empty.")
end
end
end
-- Функция для поиска информации о предмете в базе данных
local function GetItemStorageInfo(itemLink)
-- Получаем имя предмета из itemLink
local itemName = GetItemInfo(itemLink)
if not itemName then
-- Если информация о предмете ещё не загружена, возвращаем nil
return
end
LoadDatabase()
local storageInfo = {}
for _, characterData in ipairs(itemStorageDB) do
for _, itemData in ipairs(GetCharacterItems(characterData)) do
-- Сравниваем itemLink из базы данных с текущим itemLink
if itemData.name == itemName then
table.insert(storageInfo, {
character = characterData.name,
count = itemData.count
})
end
end
end
return storageInfo
end
-- Функция для добавления информации о складах в подсказку
local function AddStorageInfoToTooltip(tooltip, itemLink)
local storageInfo = GetItemStorageInfo(itemLink)
if not storageInfo or #storageInfo == 0 then return end
-- Добавляем разделитель
tooltip:AddLine(" ")
-- Добавляем информацию о складах
for _, info in ipairs(storageInfo) do
-- Оранжевый цвет для количества предметов (RGB: 1, 0.5, 0)
tooltip:AddDoubleLine("Склад: " .. info.character, info.count, 1, 1, 1, 1, 0.5, 0)
end
tooltip:AddLine(" ")
end
-- Функция для модификации подсказки к предмету
local function ModifyItemTooltip(tooltip)
-- Перезагружаем базу данных перед каждым обновлением подсказки
LoadDatabase()
local itemLink = select(2, tooltip:GetItem())
if not itemLink then return end
-- Добавляем информацию о складах в подсказку
AddStorageInfoToTooltip(tooltip, itemLink)
end
-- Функция для модификации окна предмета
local function ModifyItemRefTooltip(tooltip)
-- Перезагружаем базу данных перед каждым обновлением подсказки
LoadDatabase()
local itemLink = select(2, tooltip:GetItem())
if not itemLink then return end
-- Добавляем информацию о складах в окно предмета
AddStorageInfoToTooltip(tooltip, itemLink)
end
-- Обработчик событий
ItemStorageInfo:SetScript("OnEvent", function(self, event, ...)
if event == "ADDON_LOADED" and ... == "ItemStorageInfo" then
LoadDatabase()
self:UnregisterEvent("ADDON_LOADED")
end
end)
-- Регистрируем событие загрузки аддона
ItemStorageInfo:RegisterEvent("ADDON_LOADED")
-- Хук на отображение подсказки к предмету
GameTooltip:HookScript("OnTooltipSetItem", ModifyItemTooltip)
-- Хук на отображение окна предмета
ItemRefTooltip:HookScript("OnTooltipSetItem", ModifyItemRefTooltip)