vanilla-wow-addons – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 local AH_MAILCOLLECT_DEFAULT_OPTIONS = {
2 dbNames = {},
3 displayMail = TRUE,
4 summaryMail = TRUE,
5 itemsMail = TRUE,
6 deleteAllMail = false,
7 auctionMail = false,
8 }
9  
10  
11 --[[--------------------------------------------------------------------------------
12 Class Setup
13 -----------------------------------------------------------------------------------]]
14 AH_MailCollect = AceAddon:new({
15 name = AH_MailCollectLocals.Name,
16 description = AH_MailCollectLocals.Description, -- Optional Ace will use the .toc Notes text
17 version = AH_MailCollectLocals.Version,
18 releaseDate = AH_MailCollectLocals.ReleaseDate,
19 aceCompatible = "102",
20 author = "Tain",
21 email = "tain.dev@gmail.com",
22 website = "http://tain.wowinterface.com",
23 category = "inventory",
24 db = AceDatabase:new("AH_MailCollectDB"),
25 defaults = AH_MAILCOLLECT_DEFAULT_OPTIONS,
26 cmd = AceChatCmd:new(AH_MailCollectLocals.ChatCmd, AH_MailCollectLocals.ChatOpt)
27 })
28  
29 function AH_MailCollect:Initialize()
30 self.GetOpt = function(var) local v=self.db:get(self.profilePath,var) return v end
31 self.SetOpt = function(var,val) self.db:set(self.profilePath,var,val) end
32 self.TogOpt = function(var) return self.db:toggle(self.profilePath,var) end
33 self.TogMsg = function(text, val) self.cmd:status(text, val, ACEG_MAP_ONOFF) end
34 self.Ins = function(db, val) return self.db:insert(self.profilePath, db, val) end
35 end
36  
37  
38 --[[--------------------------------------------------------------------------------
39 Addon Enabling/Disabling
40 -----------------------------------------------------------------------------------]]
41  
42 function AH_MailCollect:Enable()
43 self:RegisterEvent("MAIL_INBOX_UPDATE")
44 self:RegisterEvent("MAIL_SHOW")
45 self:RegisterEvent("MAIL_CLOSED")
46 self:RegisterEvent("PLAYER_MONEY")
47 self:RegisterEvent("BAG_UPDATE")
48 self:Hook("InboxFrame_OnClick", "InboxFrameOnClick")
49 self.TotalCashMsg = 0
50 end
51  
52 function AH_MailCollect:InboxFrameOnClick(mailIndex)
53 local _, _, sender, subject, money, CODAmount, _, hasItem, _, _, _, _= GetInboxHeaderInfo(mailIndex)
54 if CODAmount == 0 then
55 if money>0 then
56 ace:print(format(AH_MailCollectLocals.GAINED_MSG, Ace.CashTextLetters(money)))
57 TakeInboxMoney(mailIndex)
58 end
59 if hasItem then
60 if self.GetOpt("itemsMail") then
61 if AH_MailCollect:CheckFreeInventory() then
62 ace:print(format(AH_MailCollectLocals.GAINED_MSG, GetInboxItem(mailIndex)))
63 TakeInboxItem(mailIndex)
64 else
65 error(AH_MailCollectLocals.TEXT_INV_FULL, 2)
66 end
67 end
68 end
69 -- if (self.GetOpt("deleteAllMail") and (not money) and (not hasItem)) then
70 -- DeleteInboxItem(mailIndex)
71 -- end
72 end
73 -- return self:CallHook("InboxFrame_OnClick",mailIndex)
74 return self.Hooks["InboxFrame_OnClick"].orig(mailIndex)
75 end
76  
77 function AH_MailCollect:MAIL_SHOW()
78 self.FirstFire = TRUE
79 self.TotalCashMsg = 0
80 self.TotalItemMsg = 0
81 self.Collecting = FALSE
82 self.FreeBagSlot = -1
83 self.BagNumber = -1
84 self.cash = GetMoney() -- Save initial starting cash
85 if self.GetOpt("summaryMail") then
86 self.cashOnOpen = GetMoney()
87 end
88 end
89  
90 function AH_MailCollect:MAIL_CLOSED()
91 local mailNumber = GetInboxNumItems();
92 if mailNumber == 0 then
93 MiniMapMailFrame:Hide();
94 end
95 if self.cashOnOpen and (self.cashOnOpen ~= GetMoney()) then
96 self:DisplaySummary()
97 end
98 self.cashOnOpen = nil
99 end
100  
101 function AH_MailCollect:PLAYER_MONEY()
102 if InboxFrame:IsVisible() then
103 self.Collecting = FALSE
104 self:TriggerEvent("MAIL_INBOX_UPDATE")
105 end
106 end
107  
108 function AH_MailCollect:BAG_UPDATE()
109 if InboxFrame:IsVisible() then
110 if self.BagNumber and self.FreeBagSlot then
111 texture = GetContainerItemInfo(self.BagNumber,self.FreeBagSlot)
112 else return
113 end
114 if texture == nil then return
115 else
116 self.Collecting = FALSE
117 self.FreeBagSlot = -1
118 self.BagNumber = -1
119 end
120 self:TriggerEvent("MAIL_INBOX_UPDATE")
121 end
122 end
123  
124 function AH_MailCollect:MAIL_INBOX_UPDATE()
125 self.cash = self.cash or GetMoney()
126 if self.FirstFire == TRUE then
127 self.FirstFire = FALSE
128 updateCount = 0
129 self.inboxItem = GetInboxNumItems()
130 if self.inboxItem > 0 then
131 AH_MailCollect:ScanMailBox()
132 end
133 end
134 cashNow = GetMoney()
135 cashStr = abs(cashNow - self.cash)
136 if cashStr ~= 0 then
137 if self.GetOpt("displayMail") then
138 if cashNow > self.cash then
139 ace:print(format(AH_MailCollectLocals.GAINED_MSG, Ace.CashTextLetters(cashStr)))
140 elseif cashNow < self.cash then
141 ace:print(format(AH_MailCollectLocals.LOST_CASH_MSG, Ace.CashTextLetters(cashStr)))
142 end
143 end
144 self.cash = cashNow
145 end
146 if self.Collecting == FALSE then
147 if self.TotalCashMsg > 0 then
148 AH_MailCollect:CollectMoney()
149 end
150 if self.GetOpt("auctionMail") and self.TotalItemMsg > 0 then
151 AH_MailCollect:CollectItems()
152 end
153 end
154 end
155  
156 function AH_MailCollect:DisplaySummary()
157 cashNow = GetMoney()
158 cashStr = abs(cashNow - self.cashOnOpen)
159 if cashStr ~= 0 then
160 if cashNow > self.cashOnOpen then
161 ace:print(format(AH_MailCollectLocals.GAINED_SUM_MSG, Ace.CashTextLetters(cashStr)))
162 elseif cashNow < self.cashOnOpen then
163 ace:print(format(AH_MailCollectLocals.LOST_SUM_MSG, Ace.CashTextLetters(cashStr)))
164 end
165 self.cashOnOpen = nil
166 end
167 end
168  
169 function AH_MailCollect:ToggleGainLossDisplayMail()
170 self.TogMsg(AH_MailCollectLocals.TEXT_DISPLAY_MAIL, self.TogOpt("displayMail"))
171 end
172  
173 function AH_MailCollect:ToggleGainLossSummaryMail()
174 self.TogMsg(AH_MailCollectLocals.TEXT_SUM_MAIL, self.TogOpt("summaryMail"))
175 end
176  
177 function AH_MailCollect:ToggleDeleteAllMail()
178 self.TogMsg(AH_MailCollectLocals.TEXT_DELETE_ALL, self.TogOpt("deleteAllMail"))
179 end
180  
181 function AH_MailCollect:ToggleLootItems()
182 self.TogMsg(AH_MailCollectLocals.TEXT_LOOT_ITEMS, self.TogOpt("itemsMail"))
183 end
184  
185 function AH_MailCollect:ToggleAuctionItems()
186 self.TogMsg(AH_MailCollectLocals.TEXT_AUCTION_ITEMS, self.TogOpt("auctionMail"))
187 end
188  
189 function AH_MailCollect:Report()
190 self.cmd:report({
191 {text=AH_MailCollectLocals.TEXT_DISPLAY_MAIL, val=self.GetOpt("displayMail"), map=ACEG_MAP_ONOFF},
192 {text=AH_MailCollectLocals.TEXT_SUM_MAIL, val=self.GetOpt("summaryMail"), map=ACEG_MAP_ONOFF},
193 {text=AH_MailCollectLocals.TEXT_LOOT_ITEMS, val=self.GetOpt("itemsMail"), map=ACEG_MAP_ONOFF},
194 {text=AH_MailCollectLocals.TEXT_DELETE_ALL, val=self.GetOpt("deleteAllMail"), map=ACEG_MAP_ONOFF},
195 {text=AH_MailCollectLocals.TEXT_AUCTION_ITEMS, val=self.GetOpt("auctionMail"), map=ACEG_MAP_ONOFF},
196 })
197 end
198  
199 function AH_MailCollect:ScanMailBox()
200 self.SetOpt("MsgsWithCash", {})
201 self.SetOpt("MsgsWithItem", {})
202 for inbox_item_index = 1, self.inboxItem do
203 _, _, _, msgSubject, msgMoney, _, _, msgItem, msgRead, _, _, _ = GetInboxHeaderInfo(inbox_item_index)
204 if string.find(msgSubject, string.sub(AUCTION_SOLD_MAIL_SUBJECT,1,10)) or string.find(msgSubject, string.sub(AUCTION_OUTBID_MAIL_SUBJECT,1,10)) or string.find(msgSubject, string.sub(AUCTION_REMOVED_MAIL_SUBJECT,1,10)) then
205 msgMoneyIndex = inbox_item_index
206 self.Ins("MsgsWithCash",msgMoneyIndex)
207 self.TotalCashMsg = (self.TotalCashMsg + 1)
208 elseif string.find(msgSubject, string.sub(AUCTION_EXPIRED_MAIL_SUBJECT,1,10)) or string.find(msgSubject, string.sub(AUCTION_WON_MAIL_SUBJECT ,1,10)) then
209 msgItemIndex = inbox_item_index
210 self.Ins("MsgsWithItem",msgItemIndex)
211 self.TotalItemMsg = self.TotalItemMsg + 1
212 end
213 end
214 -- ace:print(format("self.TotalItems start %s", self.TotalItems))
215 end
216  
217 function AH_MailCollect:CollectMoney()
218 self.Collecting = TRUE
219 -- if (self.Collecting) then
220 -- ace:print(format("self.Collecting is true."))
221 -- end
222 msgMoneyIndex = self.GetOpt("MsgsWithCash")[self.TotalCashMsg]
223 _, _, _, msgSubject, msgMoney, _, _, msgItem, msgRead, _, _, _ = GetInboxHeaderInfo(msgMoneyIndex)
224 if msgMoney > 0 then
225 TakeInboxMoney(msgMoneyIndex)
226 ace:print(format(msgSubject))
227 -- else
228 -- DeleteInboxItem(msgMoneyIndex)
229 -- self.Collecting = FALSE
230 end
231 self.TotalCashMsg = self.TotalCashMsg - 1
232 end
233  
234 function AH_MailCollect:CollectItems()
235 self.Collecting = TRUE
236 -- if (self.Collecting) then
237 -- ace:print(format("self.Collecting is true."))
238 -- end
239 msgItemIndex = self.GetOpt("MsgsWithItem")[self.TotalItemMsg]
240 _, _, _, msgSubject, msgMoney, _, _, msgItem, msgRead, _, _, _ = GetInboxHeaderInfo(msgItemIndex)
241 if msgItem then
242 if AH_MailCollect:CheckFreeInventory() then
243 TakeInboxItem(msgItemIndex)
244 ace:print(format(msgSubject))
245 else
246 error(AH_MailCollectLocals.TEXT_INV_FULL, 2)
247 return
248 end
249 end
250 self.TotalItemMsg = self.TotalItemMsg - 1
251 end
252  
253 function AH_MailCollect:CheckFreeInventory()
254 for bags=0,4 do
255 for bagSlot=1,GetContainerNumSlots(bags) do
256 texture = GetContainerItemInfo(bags,bagSlot);
257 if texture == nil then
258 self.FreeBagSlot = bagSlot
259 self.BagNumber = bags
260 return TRUE
261 end
262 end
263 end
264 return FALSE
265 end
266 --[[--------------------------------------------------------------------------------
267 Register the Addon
268 -----------------------------------------------------------------------------------]]
269  
270 AH_MailCollect:RegisterForLoad()