-
Notifications
You must be signed in to change notification settings - Fork 4
/
butsu.lua
165 lines (132 loc) · 3.75 KB
/
butsu.lua
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
157
158
159
160
161
162
163
164
165
local _NAME, _NS = ...
local Butsu = CreateFrame("Button", _NAME, UIParent, "BackdropTemplate")
Butsu:Hide()
Butsu:SetScript("OnEvent", function(self, event, ...)
self[event](self, event, ...)
end)
function Butsu:LOOT_OPENED(event, autoloot)
self:Show()
if(not self:IsShown()) then
CloseLoot(not autoLoot)
end
local L = _NS.L
if(IsFishingLoot()) then
self.title:SetText(L.fish)
elseif(not UnitIsFriend("player", "target") and UnitIsDead"target") then
self.title:SetText(UnitName"target")
else
self.title:SetText(LOOT)
end
-- Blizzard uses strings here
if(GetCVar("lootUnderMouse") == "1") then
local x, y = GetCursorPosition()
x = x / self:GetEffectiveScale()
y = y / self:GetEffectiveScale()
self:ClearAllPoints()
self:SetPoint("TOPLEFT", nil, "BOTTOMLEFT", x-40, y+20)
self:GetCenter()
self:Raise()
end
local m = 0
local items = GetNumLootItems()
if(items > 0) then
for i=1, items do
local slot = _NS.slots[i] or _NS.CreateSlot(i)
local texture, item, quantity, currencyID, quality, locked, isQuestItem, questId, isActive = GetLootSlotInfo(i)
if (currencyID) then
item, texture, quantity, quality = CurrencyContainerUtil.GetCurrencyContainerInfo(currencyID, quantity, item, texture, quality)
end
if(texture) then
local color = ITEM_QUALITY_COLORS[quality]
local r, g, b = color.r, color.g, color.b
local slotType = GetLootSlotType(i)
if(slotType == LOOT_SLOT_MONEY) then
item = item:gsub("\n", ", ")
end
if(quantity > 1) then
slot.count:SetText(quantity)
slot.count:Show()
else
slot.count:Hide()
end
if(questId and not isActive) then
slot.quest:Show()
else
slot.quest:Hide()
end
if(quality > 1 or questId or isQuestItem) then
if(questId or isQuestItem) then
r, g, b = 1, 1, .2
end
slot.drop:SetVertexColor(r, g, b)
slot.drop:Show()
else
slot.drop:Hide()
end
slot.isQuestItem = isQuestItem
slot.quality = quality
slot.name:SetText(item)
slot.name:SetTextColor(r, g, b)
slot.icon:SetTexture(texture)
m = math.max(m, quality)
slot:Enable()
slot:Show()
end
end
else
local slot = _NS.slots[1] or _NS.CreateSlot(1)
local color = ITEM_QUALITY_COLORS[0]
slot.name:SetText(L.empty)
slot.name:SetTextColor(color.r, color.g, color.b)
slot.icon:SetTexture[[Interface\Icons\INV_Misc_Herb_AncientLichen]]
slot.count:Hide()
slot.drop:Hide()
slot:Disable()
slot:Show()
end
self:AnchorSlots()
local color = ITEM_QUALITY_COLORS[m]
self:SetBackdropBorderColor(color.r, color.g, color.b, .8)
self:UpdateWidth()
end
Butsu:RegisterEvent"LOOT_OPENED"
function Butsu:LOOT_SLOT_CLEARED(event, slot)
if(not self:IsShown()) then return end
_NS.slots[slot]:Hide()
self:AnchorSlots()
end
Butsu:RegisterEvent"LOOT_SLOT_CLEARED"
function Butsu:LOOT_CLOSED()
StaticPopup_Hide"LOOT_BIND"
self:Hide()
for _, v in pairs(_NS.slots) do
v:Hide()
end
end
Butsu:RegisterEvent"LOOT_CLOSED"
function Butsu:OPEN_MASTER_LOOT_LIST()
ToggleDropDownMenu(1, nil, GroupLootDropDown, LootFrame.selectedLootButton, 0, 0)
end
Butsu:RegisterEvent"OPEN_MASTER_LOOT_LIST"
function Butsu:UPDATE_MASTER_LOOT_LIST()
UIDropDownMenu_Refresh(GroupLootDropDown)
end
Butsu:RegisterEvent"UPDATE_MASTER_LOOT_LIST"
do
local round = function(n)
return math.floor(n * 1e5 + .5) / 1e5
end
function Butsu:SavePosition()
local point, parent, _, x, y = self:GetPoint()
_NS.db.framePosition = string.format(
'%s\031%s\031%d\031%d',
point, 'UIParent', round(x), round(y)
)
end
function Butsu:LoadPosition()
local scale = self:GetScale()
local point, parentName, x, y = string.split('\031', _NS.db.framePosition)
self:ClearAllPoints()
self:SetPoint(point, parentName, point, x / scale, y / scale)
end
end